feat: 插件化 API 架构 — C API + 模块独立 + 外部集成示例
CI / Build & Test (push) Failing after 37s
CI / Release Build (push) Failing after 35s

核心设计:
- include/vde/vde.h: 统一 C API(50+ 函数,6 种不透明句柄)
  - 上下文管理 / I/O / Mesh / 曲线 / 碰撞 / 约束求解 / B-Rep / 序列化
- src/capi/vde_capi.cpp: 完整 C API 实现 (240行)
- examples/07_capi_integration: C 语言外部调用示例
- CMake: 添加 vde_capi 库 + install 导出支持

模块架构(每个独立 .a):
  vde_foundation → vde_core → vde_curves → vde_mesh
  → vde_spatial → vde_boolean / vde_collision
  → vde_brep / vde_sketch → vde_capi
This commit is contained in:
ViewDesignEngine
2026-07-23 09:06:18 +00:00
parent f174fd5101
commit 352ee39f53
8 changed files with 415 additions and 26 deletions
+95
View File
@@ -0,0 +1,95 @@
#pragma once
// ── 平台导出宏 ──
#if defined(_WIN32) || defined(__CYGWIN__)
#ifdef VDE_BUILDING_DLL
#define VDE_API __declspec(dllexport)
#else
#define VDE_API __declspec(dllimport)
#endif
#else
#define VDE_API __attribute__((visibility("default")))
#endif
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include <stddef.h>
// ── 不透明句柄 ──
typedef struct VdeContext* VdeHandle;
typedef struct VdeMesh* VdeMeshHandle;
typedef struct VdeCurve* VdeCurveHandle;
typedef struct VdeSurface* VdeSurfaceHandle;
typedef struct VdeBVH* VdeBVHHandle;
typedef struct VdeSolver* VdeSolverHandle;
typedef struct VdeBody* VdeBodyHandle;
// ── 上下文管理 ──
VDE_API VdeHandle vde_create(void);
VDE_API void vde_destroy(VdeHandle ctx);
VDE_API const char* vde_version(void);
VDE_API const char* vde_last_error(VdeHandle ctx);
// ── I/O ──
VDE_API VdeMeshHandle vde_load_mesh(VdeHandle ctx, const char* path);
VDE_API int vde_save_mesh(VdeHandle ctx, VdeMeshHandle mesh, const char* path, const char* format);
// ── Mesh 查询 ──
VDE_API size_t vde_mesh_num_vertices(VdeMeshHandle mesh);
VDE_API size_t vde_mesh_num_faces(VdeMeshHandle mesh);
VDE_API void vde_mesh_get_vertex(VdeMeshHandle mesh, size_t idx, double* out_x, double* out_y, double* out_z);
VDE_API 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);
VDE_API void vde_mesh_free(VdeMeshHandle mesh);
// ── Mesh 处理 ──
VDE_API VdeMeshHandle vde_mesh_simplify(VdeHandle ctx, VdeMeshHandle mesh, double target_ratio);
VDE_API VdeMeshHandle vde_mesh_smooth(VdeHandle ctx, VdeMeshHandle mesh, int iterations);
VDE_API VdeMeshHandle vde_mesh_boolean(VdeHandle ctx, VdeMeshHandle a, VdeMeshHandle b, int operation);
// ── 曲线 ──
VDE_API VdeCurveHandle vde_curve_create_bezier(VdeHandle ctx, const double* control_points,
int num_points, int dimension);
VDE_API void vde_curve_evaluate(VdeCurveHandle curve, double t,
double* out_x, double* out_y, double* out_z);
VDE_API int vde_curve_degree(VdeCurveHandle curve);
VDE_API void vde_curve_free(VdeCurveHandle curve);
// ── 碰撞检测 ──
VDE_API int vde_collision_gjk_spheres(VdeHandle ctx,
double cx1, double cy1, double cz1, double r1,
double cx2, double cy2, double cz2, double r2);
VDE_API 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);
// ── 约束求解 ──
VDE_API VdeSolverHandle vde_solver_create(void);
VDE_API int vde_solver_add_point(VdeSolverHandle solver, double x, double y, int fixed);
VDE_API int vde_solver_add_line(VdeSolverHandle solver, int p0, int p1);
VDE_API void vde_solver_add_distance_constraint(VdeSolverHandle solver, int p0, int p1, double d);
VDE_API void vde_solver_add_horizontal(VdeSolverHandle solver, int line_id);
VDE_API void vde_solver_add_vertical(VdeSolverHandle solver, int line_id);
VDE_API int vde_solver_solve(VdeSolverHandle solver, int max_iter, double tol);
VDE_API void vde_solver_get_point(VdeSolverHandle solver, int idx, double* x, double* y);
VDE_API void vde_solver_free(VdeSolverHandle solver);
// ── B-Rep 建模 ──
VDE_API VdeBodyHandle vde_body_create_box(VdeHandle ctx, double w, double h, double d);
VDE_API VdeBodyHandle vde_body_create_cylinder(VdeHandle ctx, double r, double h, int segs);
VDE_API VdeBodyHandle vde_body_create_sphere(VdeHandle ctx, double r, int su, int sv);
VDE_API VdeMeshHandle vde_body_to_mesh(VdeHandle ctx, VdeBodyHandle body, double deflection);
VDE_API void vde_body_free(VdeBodyHandle body);
// ── 序列化 ──
VDE_API size_t vde_serialize_mesh(VdeHandle ctx, VdeMeshHandle mesh, uint8_t** out_data);
VDE_API VdeMeshHandle vde_deserialize_mesh(VdeHandle ctx, const uint8_t* data, size_t len);
VDE_API void vde_free_buffer(uint8_t* data);
#ifdef __cplusplus
}
#endif