Plano de taller (drawing workbench)
Tutorial paso a paso del módulo de dibujo técnico de Despiece: el workbench multi-hoja que arma los planos para llevar al taller (TechDraw-inspired), con vistas ortogonales, cotas, anotaciones, leader/flecha, rótulo por hoja, multi-sheet y export PDF/SVG. El atajo es Shift+D.
DrawingSheet[], soft parts.drawing v:1),
cada hoja con su paper (A4/A3), templateId,
views (PartView | SectionView | DetailView),
dimensions, annotations, leaders,
cosmetics y un title block con
overrides por hoja (title | date | notes | drawnBy).
01 Cargar el modelo y abrir el Plano
Al importar el STEP/IGES/BREP/glTF/GLB, la sidebar izquierda
muestra el árbol jerárquico. Para entrar al workbench de Plano
el atajo es Shift+D, que abre el modal
full-screen dwb-root.
Si nunca abriste el Plano en este proyecto, la primera vez crea
automáticamente un DrawingDocument vacío con una
hoja default (a4-landscape-plain, A4 landscape sin
cajetín). Las hojas subsiguientes se crean con
+ Hoja nueva o derivan de un módulo.
La cámara vuelve a vista isométrica con Home; el zoom encaja con F.
02 Hoja nueva desde un módulo
Antes de crear vistas, elegí la fuente en el rail izquierdo (Source):
- Modelo (default) — todo el árbol; todas las vistas miran al modelo entero.
- Módulo — bloqueá a un assembly específico. La lista de módulos aparece abajo y se popula con los assemblies del árbol (excluye la raíz sintética).
Una vez elegido el módulo, el botón + Hoja del módulo crea
automáticamente una DrawingSheet nueva con 3 vistas
(front / top / right) pre-calculadas en escala ajustada y los
templateFields iniciales (cliente, orden, fecha)
levantados del módulo Cliente.
seedModuleSheet(doc, ...)
en src/drawing/document-seed.ts. Crea la hoja,
setea activeSheetId y dispara la captura de las
3 vistas (captureViewImages) — sin re-capturar
lo que ya estaba en otras hojas.
03 Anatomía del workbench
El workbench tiene 6 zonas con responsabilidades claras:
| # | Zona | Selector | Función |
|---|---|---|---|
| 1 | Topbar | .dwb-topbar | Brand + herramientas (select / text / line / arrow) + acciones (Nueva vista / PDF / SVG / cerrar). |
| 2 | Tab strip | .dwb-doc-tabs | Modo del documento: Planos (default) / Piezas / Herrajes / Proyecto / Rótulo. |
| 3 | Hojas | .dwb-sheet-tabs | Tabs multi-hoja: activar / cerrar / rename / drag-reorder. |
| 4 | Rail izq | .dwb-left | Template SVG + source (model / módulo) + lista de vistas de la hoja activa. |
| 5 | Canvas | #dwb-canvas | SVG 2D con template + vistas + cotas + overlays; data-tool cambia el comportamiento del click. |
| 6 | Rail der | .dwb-right | Propiedades de la vista seleccionada (scale, rotation, hidden lines), atajos a título block. |
Las herramientas select · text · line · arrow
mutan WorkbenchTool (en
workbench-tool-state.ts) y cambian el modo del
canvas (data-tool="select" es drag; "text"
crea anotación; etc.).
04 Tabs: Planos · Piezas · Herrajes · Proyecto · Rótulo
El tab strip vive justo debajo del topbar:
Cada tab abre un overlay que no rompe el layout del workbench:
| Tab | Qué muestra | Scope |
|---|---|---|
| Planos | Hoja activa (default). | doc.activeSheetId |
| Piezas | Lista de piezas del scope (módulo / modelo), con cantidad y material. | Hoja viva (scopeHint) |
| Herrajes | Aplicación de reglas de herraje (similar a H panel). | Hoja viva |
| Proyecto | Metadatos del documento: sheets count, export options, etc. | Documento |
| Rótulo | Editor del SheetTitleBlock de la hoja activa (enable / orientation / field visibility / overrides). | Hoja activa |
05 Crear una vista (scope + escala)
El botón Nueva vista del topbar dispara
runNewView(...) en
src/main/drawing-workbench-new-view.ts. Antes de
abrir el diálogo, captura un preview del viewport actual; al
confirmar, vuelca el preview a sessionImages[viewId]
y agrega la vista a la hoja activa.
El diálogo te pide cinco cosas:
| Campo | Opciones | Default |
|---|---|---|
| Scope | Modelo / Módulo / Piezas (3-radio) | lo que esté elegido en el rail izquierdo |
| Perspectiva | ortogonal / perspectiva | ortogonal |
| Rotación | 0° / 90° / 180° / 270° | 0° |
| Escala | preset (2:1 / 1:1 / 1:2 / 1:5 / 1:10 / 1:20 / 1:25 / 1:50 / 1:100) o input 1:N | fit-scale ajusta a la bounding box del scope en el área 0.9 × paper |
| Líneas ocultas | show / hide | hide |
El preset fit-scale llama a
fitScaleToArea({model}, area) en
src/drawing/scale-presets.ts: deja la cara del
módulo ocupando 90 % del área de dibujo de la hoja (con margen
5 % alrededor). Para una cocina 2400 × 600 mm en A4 landscape
(297 × 210 mm) da 1:10 como escala.
GRID_MM = 5 para drags más prolijos.
06 Anotaciones: texto, leader, flecha
endStyle = arrow). Seleccioná un overlay en el canvas → el rail derecho cambia a propiedades del overlay (texto, tamaño mm, fuente, color).
Con la herramienta Texto activada, click en el canvas
crea una DrawingAnnotation con un editor inline
(workbench-inline-text.ts). Mientras editás, el SVG
paint omite esa anotación (getEditingAnnotationId())
para no tapar el campo. Enter confirma, Esc
cancela.
Con Línea o Flecha activadas, click-drag
crea un DrawingLeader con endStyle =
'arrow' o 'none'. Los dos estilos de
dash (solid | short | long | dot) y los grosores
(0.15 / 0.30 / 0.50 / 0.85 mm) se eligen en el rail
derecho cuando el overlay está seleccionado.
| Herramienta | Toolbar button | Genera |
|---|---|---|
| Select | data-dwb-tool="select" | — (drag y selección de vistas) |
| Texto | data-dwb-tool="text" | DrawingAnnotation |
| Línea | data-dwb-tool="line" | DrawingLeader con endStyle='none' |
| Flecha | data-dwb-tool="arrow" | DrawingLeader con endStyle='arrow' |
07 Rótulo: habilitar y overrides
title / client / order / date / scale / sheet / notes / drawnBy / workshop), y overrides de texto plano para los 4 campos editables: title | date | notes | drawnBy.
El tab Rótulo abre el editor del SheetTitleBlock
de la hoja activa (soft field en parts.drawing v:1,
sin bump del schema). El componente vive en
workbench-titleblock-ui.ts.
Estructura:
// src/drawing/types.ts interface SheetTitleBlock { enabled: boolean; // muestra/oculta el cajetín orientation: 'horizontal' | 'vertical'; // horizontal: abajo, vertical: lateral visible: Partial<Record<FieldKey, boolean>>; // qué campos imprime overrides: Partial<Record<OverrideKey, string>>; // texto editable }
Overrides disponibles por hoja:
| Field key | Override | ¿Aparece por default? |
|---|---|---|
title | title | sí (calcado de project.activeName) |
client | — (sync desde Cliente) | sí |
order | — (sync desde Cliente) | sí |
date | date | sí (YYYY-MM-DD) |
scale | — (derivada de las vistas) | sí |
sheet | — (i / N automático) | sí |
notes | notes | opcional |
drawnBy | drawnBy | opcional |
workshop | — (sync desde Taller) | opcional |
title / date / notes / drawnBy.
08 Multi-hoja: agregar · renombrar · drag
workbench-sheets-bar.ts.
El bar de hojas (.dwb-sheet-tabs) vive arriba del
canvas principal. Sus operaciones vienen de
src/drawing/document-sheet-ops.ts:
| Operación | Acción | Estado mutado |
|---|---|---|
| Activar | click en tab | setActiveSheet |
| Cerrar | click en × de la tab | removeSheet |
| Renombrar | doble-click en tab | inline edit → beginInlineRename |
| Reordenar | drag de tab (intercambia 2 hojas) | reorderSheets |
| Hoja de módulo | + Hoja del módulo en el rail izq | seedModuleSheet (paso 2) |
Cada hoja es un DrawingSheet independiente con su
paper, template y lista de vistas. Soft flag
includeInExport (false excluye de
PDF/SVG). El DrawingDocument.export.scopeMode elige
entre 'document' (todas las includeInExport !== false)
o 'selectedSheets'.
09 Exportar PDF · SVG
PDF arma un PDF multi-página (una por hoja exportable) con el template activo, las vistas capturadas, las cotas y el cajetín. SVG exporta solo la hoja activa — útil para CAM / láser / agua-chorro.
Dos botones en el topbar:
| Botón | Salida | Módulo |
|---|---|---|
{modelo}-plano.pdf — un PDF por cada hoja includeInExport !== false, con template SVG + vistas + cotas + cajetín. | src/main/drawing-export-bundle.ts:makePdfBlob + jspdf | |
| SVG | {modelo}-plano-hoja-{N}.svg — solo la hoja activa, vista por vista en su propio <g>. | makeSvgBlob, capas template / view-{idx} / overlay |
Ambos re-capturan las vistas antes de exportar (la fuente de
verdad son los sessionImages cacheados, no el
mesh en vivo) — por lo que un export siempre refleja lo que
viste en pantalla.
DrawingDocument
todavía, los botones están deshabilitados. El atajo
Shift+D sigue abriendo el workbench con
una hoja nueva automática.
10 Atajos de teclado
Help (botón de la topbar o ?) abre la hoja completa.
Los más usados en el flujo del Plano:
| Atajo | Acción |
|---|---|
| Shift+D | Abrir / cerrar el Drawing workbench (toggle). |
| Esc | Cerrar el workbench (overlay / panel). |
| Click + drag | Mover la vista seleccionada (snap-to-grid si está activo). |
| Rueda + Shift | Zoom / reescalar la vista bajo el cursor. |
| Doble-click en tab de hoja | Renombrar inline. |
| Drag de tab de hoja | Reordenar (handler hand-rolled). |
| ? / F1 | Abrir la hoja de atajos completa. |
| F / Home | Fit / Fit + iso del viewport 3D. |
En Mac el modificador de sistema es ⌘; en otros sistemas Ctrl.
Ver también
- Tutorial · Cantos y auto-cantos
- Tutorial · Roles y auto-roles
- Tutorial · Optimización de corte
- Spec 2026-07-18-assembly-sheet.md — embrión del módulo (PDF legacy).
- Spec 2026-07-23-drawing-module.md — diseño del Drawing workbench (Option B, TechDraw-inspired).