#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 #include // ── 不透明句柄 ── 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