#pragma once /** * @file brep_drawing.h * @brief Engineering drawing: 2D projection views + section + DXF export * * Orthographic projection views from B-Rep models with hidden-line * removal via mesh ray-casting. Supports section (cross-section) views * and AutoCAD R12 DXF format export. * * @ingroup brep */ #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; ///< true = dashed hidden line }; /// Projection view of a B-Rep body struct ProjectionView { std::string name; ///< "front", "top", "right", "iso" std::vector segments; ///< visible lines std::vector hidden_lines; ///< dashed hidden lines double scale = 1.0; core::Point3D view_direction; ///< camera direction [[nodiscard]] size_t total_segments() const { return segments.size() + hidden_lines.size(); } }; /// Generate orthographic projection views /// @param body B-Rep model to project /// @return Vector of projection views (front, top, right, iso) [[nodiscard]] std::vector generate_views(const BrepModel& body); /// Generate a section view (cross-section) /// @param body Body to slice /// @param point Point on section plane /// @param normal Section plane normal /// @return Section view with cut edges and hatch lines [[nodiscard]] ProjectionView section_view(const BrepModel& body, const core::Point3D& point, const core::Vector3D& normal); /// Offset (stepped) section view — multiple parallel cutting planes /// Each offset defines a cutting plane at a different position along the normal /// direction. Results are merged with step lines at plane boundaries. /// @param body Body to slice /// @param normal Section direction (all planes share this normal) /// @param offsets Vector of plane positions (distance along normal from origin) /// @return Combined section view [[nodiscard]] ProjectionView offset_section_view(const BrepModel& body, const core::Vector3D& normal, const std::vector& offsets); /// Export views to DXF format (R12 compatible) /// @param filepath Output file path (.dxf) /// @param views Vector of views to export /// @return true on success bool export_dxf(const std::string& filepath, const std::vector& views); } // namespace vde::brep