5e2812a6f3
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)
122 lines
6.3 KiB
C
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
|