Files
茂之钳 5e2812a6f3
Build & Test / build-and-test (push) Waiting to run
Build & Test / python-bindings (push) Blocked by required conditions
CI / Build & Test (push) Failing after 33s
CI / Release Build (push) Failing after 35s
feat(v6.2): Blender addon + .NET/C# bindings + developer docs + plugin system
v6.2.1 — Blender Integration Addon:
- 5 files, 1,732 lines: __init__, operators (9 ops), panels (4 panels)
- preferences, vde_bridge (subprocess CLI bridge)
- Import/Export STEP, primitives, boolean, SDF→Mesh

v6.2.2 — .NET/C# Bindings (VdeSharp):
- 8 files: NativeMethods (50+ P/Invoke), BrepModel, MeshData, SdfEngine, Assembly
- C API extended with 20 new functions (STEP I/O, Boolean, SDF, Assembly)
- vde_capi rebuilt as SHARED library
- Example: import STEP → boolean → export

v6.2.3 — Developer Docs + Plugin System:
- 7 docs: architecture, contributing, API overview, building, testing, plugin-system
- plugin_system.h/.cpp: PluginInterface, PluginManager, dlopen/LoadLibrary
- README.md updated with v6 features
- Syntax-check passed (GCC 10.2.1, -Wall -Wextra -Wpedantic)
2026-07-26 22:24:40 +08:00

122 lines
6.3 KiB
C

#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;
typedef struct VdeSdfNode* VdeSdfHandle;
typedef struct VdeAssembly* VdeAssemblyHandle;
// ── 上下文管理 ──
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 VdeBodyHandle vde_body_clone(VdeHandle ctx, VdeBodyHandle body);
VDE_API int vde_body_load_step(VdeHandle ctx, const char* path, VdeBodyHandle** out_bodies);
VDE_API int vde_body_load_iges(VdeHandle ctx, const char* path, VdeBodyHandle** out_bodies);
VDE_API int vde_body_save_step(VdeHandle ctx, VdeBodyHandle* bodies, int count, const char* path);
VDE_API int vde_body_save_iges(VdeHandle ctx, VdeBodyHandle* bodies, int count, const char* path);
VDE_API VdeBodyHandle vde_body_boolean(VdeHandle ctx, VdeBodyHandle a, VdeBodyHandle b, int op);
VDE_API void vde_body_free_array(VdeBodyHandle* bodies, int count);
VDE_API int vde_mesh_get_face(VdeMeshHandle mesh, size_t face_idx, int** out_indices);
// ── SDF ──
VDE_API VdeSdfHandle vde_sdf_sphere(VdeHandle ctx, double r);
VDE_API VdeSdfHandle vde_sdf_box(VdeHandle ctx, double hx, double hy, double hz);
VDE_API VdeSdfHandle vde_sdf_cylinder(VdeHandle ctx, double r, double h);
VDE_API VdeSdfHandle vde_sdf_union(VdeHandle ctx, VdeSdfHandle a, VdeSdfHandle b);
VDE_API VdeSdfHandle vde_sdf_intersection(VdeHandle ctx, VdeSdfHandle a, VdeSdfHandle b);
VDE_API VdeSdfHandle vde_sdf_difference(VdeHandle ctx, VdeSdfHandle a, VdeSdfHandle b);
VDE_API VdeMeshHandle vde_sdf_to_mesh(VdeHandle ctx, VdeSdfHandle sdf, int resolution);
VDE_API void vde_sdf_free(VdeSdfHandle sdf);
// ── Assembly ──
VDE_API VdeAssemblyHandle vde_assembly_create(VdeHandle ctx, const char* name);
VDE_API int vde_assembly_add_part(VdeAssemblyHandle assembly, const char* name, VdeBodyHandle body);
VDE_API int vde_assembly_part_count(VdeAssemblyHandle assembly);
VDE_API void vde_assembly_free(VdeAssemblyHandle assembly);
// ── 序列化 ──
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