.. _tech_drawing_tutorial: ########################## Technical Drawing Tutorial ########################## This example demonstrates how to generate a standard technical drawing of a 3D part using `build123d`. It creates orthographic and isometric views of a Nema 23 stepper motor and exports the result as an SVG file suitable for printing or inspection. Overview -------- A technical drawing represents a 3D object in 2D using a series of standardized views. These include: - **Plan (Top View)** – as seen from directly above (Z-axis down) - **Front Elevation** – looking at the object head-on (Y-axis forward) - **Side Elevation (Right Side)** – viewed from the right (X-axis) - **Isometric Projection** – a 3D perspective view to help visualize depth Each view is aligned to a position on the page and optionally scaled or annotated. How It Works ------------ The script uses the `project_to_viewport` method to project the 3D part geometry into 2D. A helper function, `project_to_2d`, sets up the viewport (camera origin and up direction) and places the result onto a virtual drawing sheet. The steps involved are: 1. Load or construct a 3D part (in this case, a stepper motor). 2. Define a `TechnicalDrawing` border and title block using A4 page size. 3. Generate each of the standard views and apply transformations to place them. 4. Add dimensions using `ExtensionLine` and labels using `Text`. 5. Export the drawing using `ExportSVG`, separating visible and hidden edges by layer and style. Result ------ .. image:: /assets/stepper_drawing.svg :alt: Stepper motor technical drawing :class: align-center :width: 80% Try It Yourself --------------- You can modify the script to: - Replace the part with your own `Part` model - Adjust camera angles and scale - Add other views (bottom, rear) - Enhance with more labels and dimensions Code ---- .. literalinclude:: technical_drawing.py :language: build123d :start-after: [code] :end-before: [end] Dependencies ------------ This example depends on the following packages: - `build123d` - `bd_warehouse` (for the `StepperMotor` part) - `ocp_vscode` (for local preview)