feat: P2-P4 全面补完 — B-Rep建模 + 数据交换 + 约束求解器 + ICP
P2 B-Rep建模: - brep: fillet/chamfer/shell 完整实现 - brep: box/cylinder/sphere 实体工厂 - brep: extrude/revolve/sweep/loft 建模操作 P3 数据交换: - foundation: PLY 读写(ASCII+二进制) - foundation: glTF 2.0 导出(JSON+bin) P4 高级算法/杀手功能: - sketch: 2D 草图约束求解器(Newton-Raphson, 9种约束类型) - core: ICP 点云配准(SVD最优变换+KD-Tree加速) 新增模块: vde_sketch
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
#pragma once
|
||||
#include "vde/core/point.h"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
namespace vde::sketch {
|
||||
|
||||
struct SketchPoint { int id; Point2D pos; bool fixed = false; };
|
||||
struct SketchLine { int id, p0, p1; };
|
||||
struct SketchCircle { int id, center; double radius; };
|
||||
|
||||
enum class ConstraintType {
|
||||
Horizontal, Vertical, Parallel, Perpendicular, Coincident,
|
||||
EqualLength, Distance, Radius, Tangent, Concentric, FixedPoint
|
||||
};
|
||||
|
||||
struct Constraint {
|
||||
ConstraintType type;
|
||||
std::vector<int> elements;
|
||||
double value = 0.0;
|
||||
};
|
||||
|
||||
struct SolverResult {
|
||||
bool converged = false; int iterations = 0; double residual = 0.0;
|
||||
std::vector<Point2D> points; std::string message;
|
||||
};
|
||||
|
||||
class ConstraintSolver {
|
||||
public:
|
||||
int add_point(double x, double y, bool fixed = false);
|
||||
int add_line(int p0, int p1);
|
||||
int add_circle(int center, double radius);
|
||||
void add_constraint(ConstraintType type, const std::vector<int>& elements, double val = 0.0);
|
||||
void fix_point(int pid) { if(pid>=0&&pid<(int)points_.size()) points_[pid].fixed=true; }
|
||||
|
||||
[[nodiscard]] SolverResult solve(int max_iter = 100, double tol = 1e-8);
|
||||
[[nodiscard]] int degrees_of_freedom() const;
|
||||
[[nodiscard]] const std::vector<SketchPoint>& points() const { return points_; }
|
||||
|
||||
private:
|
||||
std::vector<SketchPoint> points_;
|
||||
std::vector<SketchLine> lines_;
|
||||
std::vector<SketchCircle> circles_;
|
||||
std::vector<Constraint> constraints_;
|
||||
double eval_constraint(const Constraint& c) const;
|
||||
};
|
||||
|
||||
} // namespace vde::sketch
|
||||
Reference in New Issue
Block a user