|
ViewDesignEngine
3.1.0
高性能 CAD 计算几何引擎
|
ViewDesignEngine C API — 跨语言边界接口 更多...
#include <stddef.h>#include <stdint.h>
类型定义 | |
| typedef struct VdeContext * | VdeHandle |
| 引擎上下文句柄 — 管理错误状态和内部资源 更多... | |
| typedef struct VdeMesh * | VdeMeshHandle |
| 三角网格句柄 — 顶点+面集合 更多... | |
| typedef struct VdeCurve * | VdeCurveHandle |
| 参数曲线句柄 — NURBS 曲线 更多... | |
| typedef struct VdeSolver * | VdeSolverHandle |
| 约束求解器句柄 — 二维草图约束 更多... | |
| typedef struct VdeBody * | VdeBodyHandle |
| B-Rep 实体句柄 — 边界表示模型 更多... | |
函数 | |
| VdeHandle | vde_create (void) |
| 创建 ViewDesignEngine 上下文 更多... | |
| void | vde_destroy (VdeHandle ctx) |
| 销毁引擎上下文 更多... | |
| const char * | vde_version (void) |
| 获取引擎版本字符串 更多... | |
| const char * | vde_last_error (VdeHandle ctx) |
| 获取最后一次操作的错误描述 更多... | |
| VdeMeshHandle | vde_load_mesh (VdeHandle ctx, const char *path) |
| 从文件加载三角网格 更多... | |
| int | vde_save_mesh (VdeHandle ctx, VdeMeshHandle mesh, const char *path, const char *format) |
| 将三角网格保存为文件 更多... | |
| size_t | vde_mesh_num_vertices (VdeMeshHandle mesh) |
| 获取网格的顶点数量 更多... | |
| size_t | vde_mesh_num_faces (VdeMeshHandle mesh) |
| 获取网格的三角面数量 更多... | |
| void | vde_mesh_get_vertex (VdeMeshHandle mesh, size_t idx, double *out_x, double *out_y, double *out_z) |
| 获取指定索引的顶点坐标 更多... | |
| 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) |
| 获取网格的轴对齐包围盒 更多... | |
| void | vde_mesh_free (VdeMeshHandle mesh) |
| 释放网格句柄及其资源 更多... | |
| VdeMeshHandle | vde_mesh_simplify (VdeHandle ctx, VdeMeshHandle mesh, double target_ratio) |
| 网格简化 更多... | |
| VdeMeshHandle | vde_mesh_smooth (VdeHandle ctx, VdeMeshHandle mesh, int iterations) |
| 网格平滑(Laplacian 或 Taubin 平滑) 更多... | |
| VdeMeshHandle | vde_mesh_boolean (VdeHandle ctx, VdeMeshHandle a, VdeMeshHandle b, int operation) |
| 网格布尔运算 更多... | |
| VdeCurveHandle | vde_curve_create_bezier (VdeHandle ctx, const double *control_points, int num_points, int dim) |
| 创建 Bézier 曲线 更多... | |
| void | vde_curve_evaluate (VdeCurveHandle curve, double t, double *out_x, double *out_y, double *out_z) |
| 在参数 t 处求值曲线 更多... | |
| int | vde_curve_degree (VdeCurveHandle curve) |
| 获取曲线的次数 更多... | |
| void | vde_curve_free (VdeCurveHandle curve) |
| 释放曲线句柄 更多... | |
| int | vde_collision_gjk_spheres (VdeHandle ctx, double cx1, double cy1, double cz1, double r1, double cx2, double cy2, double cz2, double r2) |
| 两球体碰撞检测(GJK 算法) 更多... | |
| 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) |
| 射线与网格的最近交点查询 更多... | |
| VdeSolverHandle | vde_solver_create (void) |
| 创建二维约束求解器 更多... | |
| int | vde_solver_add_point (VdeSolverHandle solver, double x, double y, int fixed) |
| 向求解器添加点 更多... | |
| int | vde_solver_add_line (VdeSolverHandle solver, int p0, int p1) |
| 向求解器添加线段(由两个点定义) 更多... | |
| void | vde_solver_add_distance_constraint (VdeSolverHandle solver, int p0, int p1, double d) |
| 添加距离约束(两点之间) 更多... | |
| void | vde_solver_add_horizontal (VdeSolverHandle solver, int line_id) |
| 添加水平约束(线段水平) 更多... | |
| void | vde_solver_add_vertical (VdeSolverHandle solver, int line_id) |
| 添加垂直约束(线段垂直) 更多... | |
| int | vde_solver_solve (VdeSolverHandle solver, int max_iter, double tol) |
| 求解约束系统 更多... | |
| void | vde_solver_get_point (VdeSolverHandle solver, int idx, double *out_x, double *out_y) |
| 获取求解后的点坐标 更多... | |
| void | vde_solver_free (VdeSolverHandle solver) |
| 释放求解器句柄 更多... | |
| VdeBodyHandle | vde_body_create_box (VdeHandle ctx, double w, double h, double d) |
| 创建实心立方体 B-Rep 更多... | |
| VdeBodyHandle | vde_body_create_cylinder (VdeHandle ctx, double r, double h, int segs) |
| 创建实心圆柱体 B-Rep 更多... | |
| 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 实体转换为三角网格 更多... | |
| void | vde_body_free (VdeBodyHandle body) |
| 释放 B-Rep 实体句柄 更多... | |
| size_t | vde_serialize_mesh (VdeHandle ctx, VdeMeshHandle mesh, uint8_t **out_data) |
| 将网格序列化为二进制字节流 更多... | |
| VdeMeshHandle | vde_deserialize_mesh (VdeHandle ctx, const uint8_t *data, size_t len) |
| 从二进制字节流反序列化为网格 更多... | |
| void | vde_free_buffer (uint8_t *ptr) |
| 释放由 vde_serialize_mesh 分配的缓冲区 更多... | |
ViewDesignEngine C API — 跨语言边界接口
提供稳定的 C ABI 接口,使 Python、Rust、C# 等语言可以通过 FFI 调用 ViewDesignEngine 的核心功能,无需依赖 C++ ABI。
typedef 前向声明 隐藏为不透明指针类型,外部代码只能通过 API 函数操作| C 类型 | 内部类型 | 创建方式 | 释放方式 |
|---|---|---|---|
| VdeHandle | VdeContext | vde_create() | vde_destroy() |
| VdeMeshHandle | HalfedgeMesh | vde_load_mesh(), 工厂函数 | vde_mesh_free() |
| VdeCurveHandle | NurbsCurve | vde_curve_create_bezier() | vde_curve_free() |
| VdeSolverHandle | ConstraintSolver | vde_solver_create() | vde_solver_free() |
| VdeBodyHandle | BrepModel | vde_body_create_*() | vde_body_free() |
| 操作 | 整数值 |
|---|---|
| 并集 | 0 |
| 交集 | 1 |
| 差集 | 2 |
在文件 vde_capi.h 中定义.
| typedef struct VdeBody* VdeBodyHandle |
B-Rep 实体句柄 — 边界表示模型
在文件 vde_capi.h 第 77 行定义.
| typedef struct VdeCurve* VdeCurveHandle |
参数曲线句柄 — NURBS 曲线
在文件 vde_capi.h 第 67 行定义.
| typedef struct VdeContext* VdeHandle |
引擎上下文句柄 — 管理错误状态和内部资源
在文件 vde_capi.h 第 57 行定义.
| typedef struct VdeMesh* VdeMeshHandle |
三角网格句柄 — 顶点+面集合
在文件 vde_capi.h 第 62 行定义.
| typedef struct VdeSolver* VdeSolverHandle |
约束求解器句柄 — 二维草图约束
在文件 vde_capi.h 第 72 行定义.
| VdeBodyHandle vde_body_create_box | ( | VdeHandle | ctx, |
| double | w, | ||
| double | h, | ||
| double | d | ||
| ) |
创建实心立方体 B-Rep
以原点为中心的轴对齐立方体。
| ctx | 引擎上下文句柄 |
| w | 宽度(X 方向),> 0 |
| h | 高度(Y 方向),> 0 |
| d | 深度(Z 方向),> 0 |
| VdeBodyHandle vde_body_create_cylinder | ( | VdeHandle | ctx, |
| double | r, | ||
| double | h, | ||
| int | segs | ||
| ) |
创建实心圆柱体 B-Rep
沿 Y 轴、以原点为中心的圆柱体。
| ctx | 引擎上下文句柄 |
| r | 截面半径,> 0 |
| h | 总高度(从 -h/2 到 +h/2) |
| segs | 截面分段数(边数) |
| VdeBodyHandle vde_body_create_sphere | ( | VdeHandle | ctx, |
| double | r, | ||
| int | su, | ||
| int | sv | ||
| ) |
创建球体 B-Rep
| ctx | 引擎上下文句柄 |
| r | 球半径,> 0 |
| su | 经度方向分段数 |
| sv | 纬度方向分段数 |
| void vde_body_free | ( | VdeBodyHandle | body | ) |
释放 B-Rep 实体句柄
| body | B-Rep 实体句柄 |
| VdeMeshHandle vde_body_to_mesh | ( | VdeHandle | ctx, |
| VdeBodyHandle | body, | ||
| double | deflection | ||
| ) |
将 B-Rep 实体转换为三角网格
以指定的弦高误差对曲面进行 tessellation。
| ctx | 引擎上下文句柄 |
| body | B-Rep 实体句柄 |
| deflection | 弦高误差(越小 = 越精细,推荐 0.01) |
| int vde_collision_gjk_spheres | ( | VdeHandle | ctx, |
| double | cx1, | ||
| double | cy1, | ||
| double | cz1, | ||
| double | r1, | ||
| double | cx2, | ||
| double | cy2, | ||
| double | cz2, | ||
| double | r2 | ||
| ) |
两球体碰撞检测(GJK 算法)
用于验证和测试 GJK 碰撞检测算法的轻量级接口。
| ctx | 引擎上下文句柄 |
| cx1,cy1,cz1 | 第一个球体的球心坐标 |
| r1 | 第一个球体的半径 |
| cx2,cy2,cz2 | 第二个球体的球心坐标 |
| r2 | 第二个球体的半径 |
| 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 | ||
| ) |
射线与网格的最近交点查询
使用 BVH 加速结构加速查询。
| ctx | 引擎上下文句柄 |
| mesh | 目标网格句柄 |
| ox,oy,oz | 射线起点 |
| dx,dy,dz | 射线方向(无需归一化) |
| out_t | [out] 交点参数 t(沿射线的距离) |
| out_x,out_y,out_z | [out] 交点坐标 |
| VdeHandle vde_create | ( | void | ) |
创建 ViewDesignEngine 上下文
初始化一个独立的引擎实例。几乎所有后续操作都需要传入此句柄。
| VdeCurveHandle vde_curve_create_bezier | ( | VdeHandle | ctx, |
| const double * | control_points, | ||
| int | num_points, | ||
| int | dim | ||
| ) |
创建 Bézier 曲线
| ctx | 引擎上下文句柄 |
| control_points | 控制点数组,每 3 个 double 表示一个三维点 (x,y,z) |
| num_points | 控制点数量(次数 = num_points - 1) |
| dim | 维度(固定为 3) |
| int vde_curve_degree | ( | VdeCurveHandle | curve | ) |
获取曲线的次数
对于 Bézier 曲线,次数 = 控制点数 - 1。
| curve | 曲线句柄 |
| void vde_curve_evaluate | ( | VdeCurveHandle | curve, |
| double | t, | ||
| double * | out_x, | ||
| double * | out_y, | ||
| double * | out_z | ||
| ) |
在参数 t 处求值曲线
| curve | 曲线句柄 |
| t | 参数值 [0, 1] |
| out_x | [out] 曲线上点的 X 坐标 |
| out_y | [out] 曲线上点的 Y 坐标 |
| out_z | [out] 曲线上点的 Z 坐标 |
| void vde_curve_free | ( | VdeCurveHandle | curve | ) |
释放曲线句柄
| curve | 曲线句柄 |
| VdeMeshHandle vde_deserialize_mesh | ( | VdeHandle | ctx, |
| const uint8_t * | data, | ||
| size_t | len | ||
| ) |
| void vde_destroy | ( | VdeHandle | ctx | ) |
| void vde_free_buffer | ( | uint8_t * | ptr | ) |
释放由 vde_serialize_mesh 分配的缓冲区
| ptr | 由 vde_serialize_mesh 返回的缓冲区指针 |
| const char* vde_last_error | ( | VdeHandle | ctx | ) |
获取最后一次操作的错误描述
当某操作失败(如加载不存在的文件)时,可通过此函数获取详情。
| ctx | 引擎上下文句柄 |
| VdeMeshHandle vde_load_mesh | ( | VdeHandle | ctx, |
| const char * | path | ||
| ) |
从文件加载三角网格
支持 OBJ (.obj), STL (.stl), PLY (.ply) 三种格式。 格式通过文件扩展名自动检测。
| ctx | 引擎上下文句柄 |
| path | 文件路径(UTF-8 编码) |
| VdeMeshHandle vde_mesh_boolean | ( | VdeHandle | ctx, |
| VdeMeshHandle | a, | ||
| VdeMeshHandle | b, | ||
| int | operation | ||
| ) |
网格布尔运算
对两个三角网格执行布尔操作。
| ctx | 引擎上下文句柄 |
| a | 网格 A |
| b | 网格 B |
| operation | 布尔操作类型: 0 = 并集, 1 = 交集, 2 = 差集 (A \ B) |
| void vde_mesh_free | ( | VdeMeshHandle | mesh | ) |
释放网格句柄及其资源
释放后将不能再使用该句柄。
| mesh | 网格句柄 |
| 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 | ||
| ) |
获取网格的轴对齐包围盒
| mesh | 网格句柄 |
| out_min_x | [out] 最小 X 坐标 |
| out_min_y | [out] 最小 Y 坐标 |
| out_min_z | [out] 最小 Z 坐标 |
| out_max_x | [out] 最大 X 坐标 |
| out_max_y | [out] 最大 Y 坐标 |
| out_max_z | [out] 最大 Z 坐标 |
| void vde_mesh_get_vertex | ( | VdeMeshHandle | mesh, |
| size_t | idx, | ||
| double * | out_x, | ||
| double * | out_y, | ||
| double * | out_z | ||
| ) |
获取指定索引的顶点坐标
顶点索引从 0 开始,到 num_vertices - 1。
| mesh | 网格句柄 |
| idx | 顶点索引 [0, num_vertices) |
| out_x | [out] 顶点 X 坐标 |
| out_y | [out] 顶点 Y 坐标 |
| out_z | [out] 顶点 Z 坐标 |
| size_t vde_mesh_num_faces | ( | VdeMeshHandle | mesh | ) |
| size_t vde_mesh_num_vertices | ( | VdeMeshHandle | mesh | ) |
| VdeMeshHandle vde_mesh_simplify | ( | VdeHandle | ctx, |
| VdeMeshHandle | mesh, | ||
| double | target_ratio | ||
| ) |
网格简化
通过 edge-collapse 或类似算法减少三角形数量, 同时尽可能保留几何特征。
| ctx | 引擎上下文句柄 |
| mesh | 输入网格句柄(不修改输入) |
| target_ratio | 目标简化比率 [0, 1](0 = 不变,1 = 最大简化) |
| VdeMeshHandle vde_mesh_smooth | ( | VdeHandle | ctx, |
| VdeMeshHandle | mesh, | ||
| int | iterations | ||
| ) |
网格平滑(Laplacian 或 Taubin 平滑)
通过迭代平滑顶点位置改善网格质量,减少噪声。
| ctx | 引擎上下文句柄 |
| mesh | 输入网格句柄 |
| iterations | 平滑迭代次数 |
| int vde_save_mesh | ( | VdeHandle | ctx, |
| VdeMeshHandle | mesh, | ||
| const char * | path, | ||
| const char * | format | ||
| ) |
将三角网格保存为文件
当前支持 OBJ 格式输出。
| ctx | 引擎上下文句柄 |
| mesh | 网格句柄 |
| path | 输出文件路径 |
| format | 输出格式(当前仅 "obj" 有效) |
| size_t vde_serialize_mesh | ( | VdeHandle | ctx, |
| VdeMeshHandle | mesh, | ||
| uint8_t ** | out_data | ||
| ) |
将网格序列化为二进制字节流
返回的缓冲区需要在消费后通过 vde_free_buffer() 释放。
| ctx | 引擎上下文句柄 |
| mesh | 网格句柄 |
| out_data | [out] 指向序列化字节数组的指针 |
| void vde_solver_add_distance_constraint | ( | VdeSolverHandle | solver, |
| int | p0, | ||
| int | p1, | ||
| double | d | ||
| ) |
| void vde_solver_add_horizontal | ( | VdeSolverHandle | solver, |
| int | line_id | ||
| ) |
| int vde_solver_add_line | ( | VdeSolverHandle | solver, |
| int | p0, | ||
| int | p1 | ||
| ) |
向求解器添加线段(由两个点定义)
| solver | 求解器句柄 |
| p0 | 起点 ID |
| p1 | 终点 ID |
| int vde_solver_add_point | ( | VdeSolverHandle | solver, |
| double | x, | ||
| double | y, | ||
| int | fixed | ||
| ) |
向求解器添加点
| solver | 求解器句柄 |
| x | 初始 X 坐标 |
| y | 初始 Y 坐标 |
| fixed | 固定点标记(1 = 固定不移动) |
| void vde_solver_add_vertical | ( | VdeSolverHandle | solver, |
| int | line_id | ||
| ) |
| VdeSolverHandle vde_solver_create | ( | void | ) |
| void vde_solver_free | ( | VdeSolverHandle | solver | ) |
释放求解器句柄
| solver | 求解器句柄 |
| void vde_solver_get_point | ( | VdeSolverHandle | solver, |
| int | idx, | ||
| double * | out_x, | ||
| double * | out_y | ||
| ) |
获取求解后的点坐标
| solver | 求解器句柄 |
| idx | 点 ID |
| out_x | [out] 求解后 X 坐标 |
| out_y | [out] 求解后 Y 坐标 |
| int vde_solver_solve | ( | VdeSolverHandle | solver, |
| int | max_iter, | ||
| double | tol | ||
| ) |
求解约束系统
通过迭代优化使所有点的位置满足所有约束。
| solver | 求解器句柄 |
| max_iter | 最大迭代次数 |
| tol | 收敛容差 |
| const char* vde_version | ( | void | ) |