#pragma once #include "vde/brep/assembly.h" #include "vde/core/point.h" namespace vde::brep { /// Constraint types for assembly enum class ConstraintType { Coincident, // Face-face coincident (align planes) Concentric, // Cylinder-cylinder concentric (align axes) Tangent, // Face-face tangent Parallel, // Face-face parallel Perpendicular,// Face-face perpendicular Distance, // Face-face at fixed distance Angle // Face-face at fixed angle }; /// Apply a mate constraint between two assembly nodes /// @param assembly Target assembly /// @param node_a First node /// @param node_b Second node (this one moves to satisfy constraint) /// @param type Constraint type /// @param value Optional value (for Distance/Angle constraints) /// @return true if constraint applied successfully [[nodiscard]] bool apply_constraint( Assembly& assembly, AssemblyNode* node_a, AssemblyNode* node_b, ConstraintType type, double value = 0.0); } // namespace vde::brep