#pragma once #include "vde/brep/brep.h" #include "vde/core/point.h" #include #include namespace vde::brep { /// 2D line segment for drawing output struct DrawSegment { double x1, y1, x2, y2; bool hidden = false; }; /// Projection view of a B-Rep body struct ProjectionView { std::string name; std::vector segments; std::vector hidden_lines; double scale = 1.0; [[nodiscard]] size_t total_segments() const { return segments.size() + hidden_lines.size(); } }; /// Generate orthographic projection views (front, top, right) [[nodiscard]] std::vector generate_views(const BrepModel& body); /// Generate a section view [[nodiscard]] ProjectionView section_view(const BrepModel& body, const core::Point3D& point, const core::Vector3D& normal); /// Export to DXF R12 format bool export_dxf(const std::string& filepath, const std::vector& views); /// Dimension type enum class DimType { Linear, Radius, Diameter }; /// A dimension annotation struct Dimension { DimType type = DimType::Linear; double x1 = 0, y1 = 0, x2 = 0, y2 = 0; std::string text; }; /// Auto-generate dimensions for a view [[nodiscard]] std::vector auto_dimension(const ProjectionView& view); } // namespace vde::brep