ViewDesignEngine  3.1.0
高性能 CAD 计算几何引擎
vde_capi.h
浏览该文件的文档.
1 #pragma once
44 #include <stddef.h>
45 #include <stdint.h>
46 
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50 
51 // ═══════════════════════════════════════════════════════════
52 // 不透明句柄类型(在 vde.h 中已有前向声明)
53 // ═══════════════════════════════════════════════════════════
54 
56 #ifndef VDE_HANDLE_DEFINED
57 typedef struct VdeContext* VdeHandle;
58 #endif
59 
61 #ifndef VDE_MESH_HANDLE_DEFINED
62 typedef struct VdeMesh* VdeMeshHandle;
63 #endif
64 
66 #ifndef VDE_CURVE_HANDLE_DEFINED
67 typedef struct VdeCurve* VdeCurveHandle;
68 #endif
69 
71 #ifndef VDE_SOLVER_HANDLE_DEFINED
72 typedef struct VdeSolver* VdeSolverHandle;
73 #endif
74 
76 #ifndef VDE_BODY_HANDLE_DEFINED
77 typedef struct VdeBody* VdeBodyHandle;
78 #endif
79 
80 // ═══════════════════════════════════════════════════════════
81 // 引擎生命周期
82 // ═══════════════════════════════════════════════════════════
83 
99 
110 
120 const char* vde_version(void);
121 
132 const char* vde_last_error(VdeHandle ctx);
133 
134 // ═══════════════════════════════════════════════════════════
135 // 网格 I/O
136 // ═══════════════════════════════════════════════════════════
137 
159 VdeMeshHandle vde_load_mesh(VdeHandle ctx, const char* path);
160 
174 int vde_save_mesh(VdeHandle ctx, VdeMeshHandle mesh, const char* path, const char* format);
175 
176 // ═══════════════════════════════════════════════════════════
177 // 网格查询
178 // ═══════════════════════════════════════════════════════════
179 
189 
199 
213 void vde_mesh_get_vertex(VdeMeshHandle mesh, size_t idx,
214  double* out_x, double* out_y, double* out_z);
215 
228  double* out_min_x, double* out_min_y, double* out_min_z,
229  double* out_max_x, double* out_max_y, double* out_max_z);
230 
239 
240 // ═══════════════════════════════════════════════════════════
241 // 网格处理
242 // ═══════════════════════════════════════════════════════════
243 
261 VdeMeshHandle vde_mesh_simplify(VdeHandle ctx, VdeMeshHandle mesh, double target_ratio);
262 
276 
295 
296 // ═══════════════════════════════════════════════════════════
297 // 曲线
298 // ═══════════════════════════════════════════════════════════
299 
317 VdeCurveHandle vde_curve_create_bezier(VdeHandle ctx, const double* control_points,
318  int num_points, int dim);
319 
331 void vde_curve_evaluate(VdeCurveHandle curve, double t,
332  double* out_x, double* out_y, double* out_z);
333 
343 
350 
351 // ═══════════════════════════════════════════════════════════
352 // 碰撞检测
353 // ═══════════════════════════════════════════════════════════
354 
374  double cx1, double cy1, double cz1, double r1,
375  double cx2, double cy2, double cz2, double r2);
376 
402  double ox, double oy, double oz,
403  double dx, double dy, double dz,
404  double* out_t, double* out_x, double* out_y, double* out_z);
405 
406 // ═══════════════════════════════════════════════════════════
407 // 约束求解器(二维草图)
408 // ═══════════════════════════════════════════════════════════
409 
420 
432 int vde_solver_add_point(VdeSolverHandle solver, double x, double y, int fixed);
433 
446 int vde_solver_add_line(VdeSolverHandle solver, int p0, int p1);
447 
458 void vde_solver_add_distance_constraint(VdeSolverHandle solver, int p0, int p1, double d);
459 
469 void vde_solver_add_horizontal(VdeSolverHandle solver, int line_id);
470 
479 void vde_solver_add_vertical(VdeSolverHandle solver, int line_id);
480 
497 int vde_solver_solve(VdeSolverHandle solver, int max_iter, double tol);
498 
509 void vde_solver_get_point(VdeSolverHandle solver, int idx, double* out_x, double* out_y);
510 
517 
518 // ═══════════════════════════════════════════════════════════
519 // B-Rep 建模
520 // ═══════════════════════════════════════════════════════════
521 
536 VdeBodyHandle vde_body_create_box(VdeHandle ctx, double w, double h, double d);
537 
551 VdeBodyHandle vde_body_create_cylinder(VdeHandle ctx, double r, double h, int segs);
552 
562 VdeBodyHandle vde_body_create_sphere(VdeHandle ctx, double r, int su, int sv);
563 
583 
590 
591 // ═══════════════════════════════════════════════════════════
592 // 序列化
593 // ═══════════════════════════════════════════════════════════
594 
617 size_t vde_serialize_mesh(VdeHandle ctx, VdeMeshHandle mesh, uint8_t** out_data);
618 
629 VdeMeshHandle vde_deserialize_mesh(VdeHandle ctx, const uint8_t* data, size_t len);
630 
636 void vde_free_buffer(uint8_t* ptr);
637 
638 #ifdef __cplusplus
639 }
640 #endif
void vde_solver_add_vertical(VdeSolverHandle solver, int line_id)
添加垂直约束(线段垂直)
VdeCurveHandle vde_curve_create_bezier(VdeHandle ctx, const double *control_points, int num_points, int dim)
创建 Bézier 曲线
VdeMeshHandle vde_load_mesh(VdeHandle ctx, const char *path)
从文件加载三角网格
VdeMeshHandle vde_deserialize_mesh(VdeHandle ctx, const uint8_t *data, size_t len)
从二进制字节流反序列化为网格
struct VdeSolver * VdeSolverHandle
约束求解器句柄 — 二维草图约束
Definition: vde_capi.h:72
VdeMeshHandle vde_mesh_boolean(VdeHandle ctx, VdeMeshHandle a, VdeMeshHandle b, int operation)
网格布尔运算
void vde_solver_add_horizontal(VdeSolverHandle solver, int line_id)
添加水平约束(线段水平)
void vde_mesh_get_bounds(VdeMeshHandle mesh, double *out_min_x, double *out_min_y, double *out_min_z, double *out_max_x, double *out_max_y, double *out_max_z)
获取网格的轴对齐包围盒
const char * vde_last_error(VdeHandle ctx)
获取最后一次操作的错误描述
void vde_mesh_get_vertex(VdeMeshHandle mesh, size_t idx, double *out_x, double *out_y, double *out_z)
获取指定索引的顶点坐标
VdeMeshHandle vde_mesh_smooth(VdeHandle ctx, VdeMeshHandle mesh, int iterations)
网格平滑(Laplacian 或 Taubin 平滑)
int vde_save_mesh(VdeHandle ctx, VdeMeshHandle mesh, const char *path, const char *format)
将三角网格保存为文件
struct VdeContext * VdeHandle
引擎上下文句柄 — 管理错误状态和内部资源
Definition: vde_capi.h:57
struct VdeMesh * VdeMeshHandle
三角网格句柄 — 顶点+面集合
Definition: vde_capi.h:62
void vde_solver_free(VdeSolverHandle solver)
释放求解器句柄
int vde_solver_add_point(VdeSolverHandle solver, double x, double y, int fixed)
向求解器添加点
int vde_collision_gjk_spheres(VdeHandle ctx, double cx1, double cy1, double cz1, double r1, double cx2, double cy2, double cz2, double r2)
两球体碰撞检测(GJK 算法)
void vde_solver_add_distance_constraint(VdeSolverHandle solver, int p0, int p1, double d)
添加距离约束(两点之间)
struct VdeBody * VdeBodyHandle
B-Rep 实体句柄 — 边界表示模型
Definition: vde_capi.h:77
VdeMeshHandle vde_mesh_simplify(VdeHandle ctx, VdeMeshHandle mesh, double target_ratio)
网格简化
void vde_curve_evaluate(VdeCurveHandle curve, double t, double *out_x, double *out_y, double *out_z)
在参数 t 处求值曲线
VdeBodyHandle vde_body_create_sphere(VdeHandle ctx, double r, int su, int sv)
创建球体 B-Rep
VdeMeshHandle vde_body_to_mesh(VdeHandle ctx, VdeBodyHandle body, double deflection)
将 B-Rep 实体转换为三角网格
size_t vde_mesh_num_vertices(VdeMeshHandle mesh)
获取网格的顶点数量
void vde_curve_free(VdeCurveHandle curve)
释放曲线句柄
int vde_solver_add_line(VdeSolverHandle solver, int p0, int p1)
向求解器添加线段(由两个点定义)
const char * vde_version(void)
获取引擎版本字符串
size_t vde_mesh_num_faces(VdeMeshHandle mesh)
获取网格的三角面数量
void vde_solver_get_point(VdeSolverHandle solver, int idx, double *out_x, double *out_y)
获取求解后的点坐标
int vde_solver_solve(VdeSolverHandle solver, int max_iter, double tol)
求解约束系统
void vde_body_free(VdeBodyHandle body)
释放 B-Rep 实体句柄
VdeBodyHandle vde_body_create_cylinder(VdeHandle ctx, double r, double h, int segs)
创建实心圆柱体 B-Rep
size_t vde_serialize_mesh(VdeHandle ctx, VdeMeshHandle mesh, uint8_t **out_data)
将网格序列化为二进制字节流
void vde_mesh_free(VdeMeshHandle mesh)
释放网格句柄及其资源
VdeBodyHandle vde_body_create_box(VdeHandle ctx, double w, double h, double d)
创建实心立方体 B-Rep
struct VdeCurve * VdeCurveHandle
参数曲线句柄 — NURBS 曲线
Definition: vde_capi.h:67
void vde_destroy(VdeHandle ctx)
销毁引擎上下文
int vde_curve_degree(VdeCurveHandle curve)
获取曲线的次数
int vde_collision_ray_mesh(VdeHandle ctx, VdeMeshHandle mesh, double ox, double oy, double oz, double dx, double dy, double dz, double *out_t, double *out_x, double *out_y, double *out_z)
射线与网格的最近交点查询
void vde_free_buffer(uint8_t *ptr)
释放由 vde_serialize_mesh 分配的缓冲区
VdeHandle vde_create(void)
创建 ViewDesignEngine 上下文
VdeSolverHandle vde_solver_create(void)
创建二维约束求解器