2D Architectural Drawings¶
IFClite can generate 2D architectural drawings from 3D IFC models, including section cuts, floor plans, and elevations. The @ifc-lite/drawing-2d package produces vector SVG output with proper architectural conventions.
What It Generates¶
From any 3D IFC model, you can produce:
- Floor plans - Horizontal section cuts at a specified height
- Section cuts - Vertical sections through the model
- Elevations - Projected views from a direction
Each drawing includes:
| Element | Description |
|---|---|
| Cut lines | Bold lines where geometry intersects the section plane |
| Projection lines | Visible geometry beyond the cut plane |
| Hidden lines | Occluded geometry rendered as dashed lines |
| Hatching | Material-based fill patterns (concrete, masonry, insulation, etc.) |
| Architectural symbols | Door swings, window frames, stair arrows |
| Annotations | Dimensions and labels |
Quick Start¶
Generating a Floor Plan¶
import { generateFloorPlan } from '@ifc-lite/drawing-2d';
// generateFloorPlan(meshes: MeshData[], elevation: number, options?)
const drawing = await generateFloorPlan(meshData, 1.2, {
includeHiddenLines: true,
includeProjection: true,
});
console.log(`${drawing.stats.cutLineCount} cut lines`);
console.log(`${drawing.stats.projectionLineCount} projection lines`);
Generating a Section¶
import { generateSection, createSectionConfig } from '@ifc-lite/drawing-2d';
// createSectionConfig(axis, position, options?)
const config = createSectionConfig('z', 5.0);
// generateSection(meshes: MeshData[], axis: 'x' | 'z', position: number, options?)
const drawing = await generateSection(meshData, 'z', 5.0);
SVG Export¶
import { exportToSVG } from '@ifc-lite/drawing-2d';
const svg = exportToSVG(drawing, {
showHatching: true,
showHiddenLines: true,
scale: { name: '1:100', factor: 100 },
title: 'Ground Floor Plan',
});
// svg is a string of SVG markup
document.getElementById('drawing').innerHTML = svg;
Drawing Sheets¶
For presentation-ready output, drawings can be placed on sheets with frames and title blocks:
import {
createFrame,
createTitleBlock,
renderFrame,
renderTitleBlock,
renderScaleBar,
PAPER_SIZE_REGISTRY,
} from '@ifc-lite/drawing-2d';
// Create an A1 landscape sheet
const paper = PAPER_SIZE_REGISTRY.find(p => p.name === 'A1');
const frame = createFrame({ paper, orientation: 'landscape' });
const titleBlock = createTitleBlock({
projectName: 'Office Building',
drawingTitle: 'Ground Floor Plan',
scale: '1:100',
drawnBy: 'Architect',
date: '2026-02-07',
});
// Render to SVG
const frameSvg = renderFrame(frame);
const titleBlockSvg = renderTitleBlock(titleBlock);
const scaleBarSvg = renderScaleBar({ scale: 100, units: 'm' });
Graphic Overrides¶
Control how elements appear in 2D drawings using graphic override presets:
import { createOverrideEngine, ARCHITECTURAL_PRESET } from '@ifc-lite/drawing-2d';
const engine = createOverrideEngine();
// Apply a built-in preset
engine.applyPreset(ARCHITECTURAL_PRESET);
// Available: VIEW_3D_PRESET, ARCHITECTURAL_PRESET, FIRE_SAFETY_PRESET,
// STRUCTURAL_PRESET, MEP_PRESET, MONOCHROME_PRESET
// Or add custom rules
engine.addRule({
id: 'highlight-walls',
name: 'Highlight Load-Bearing Walls',
enabled: true,
priority: 1,
criteria: { type: 'ifcType', value: 'IFCWALL' },
style: { lineWeight: 0.5, color: '#FF0000' },
});
Architectural Symbols¶
The package generates proper architectural symbols:
| Symbol | Description |
|---|---|
| Door swings | Arc showing door opening direction and angle |
| Sliding doors | Arrow showing sliding direction |
| Window frames | Double-line representation with glass |
| Stair arrows | Direction arrows with UP/DOWN labels |
import { generateDoorSymbol, generateWindowSymbol } from '@ifc-lite/drawing-2d';
const doorSvg = generateDoorSymbol({ width: 0.9, angle: 90, swing: 'left' });
const windowSvg = generateWindowSymbol({ width: 1.2, type: 'casement' });
GPU Acceleration¶
For large models, section cutting can be GPU-accelerated:
import { GPUSectionCutter, isGPUComputeAvailable } from '@ifc-lite/drawing-2d';
if (await isGPUComputeAvailable()) {
const cutter = new GPUSectionCutter(gpuDevice);
const result = await cutter.cut(meshData, sectionConfig);
}
Viewer Integration¶
In the IFClite viewer:
- Activate section plane - Position a section plane in the 3D view
- Open 2D panel - The 2D drawing panel shows the section cut
- Toggle layers - Show/hide cut lines, projection, hidden lines, hatching
- Annotate - Add measurements, polygon areas, text boxes, and revision clouds
- Select & edit - Click annotations to select, drag to move, Delete to remove
- Graphic overrides - Apply presets to change element appearance
- Export SVG - Download the drawing as vector SVG
Annotation Tools¶
| Tool | Description | Shortcuts |
|---|---|---|
| Distance Measure | Click two points to measure distance | Shift = lock axis |
| Area Measure | Click polygon vertices, close near first point or double-click | Shift = orthogonal |
| Text Box | Click to place, type text, Enter to confirm | Double-click to re-edit |
| Revision Cloud | Click two corners to define rectangle | Shift = square |
| Select / Pan | Click annotations to select, drag to move | Escape = exit tool / deselect |
Annotation Selection¶
When using the Select / Pan tool (or after pressing Escape to exit a creation tool):
- Click any annotation to select it (blue dashed border with corner handles)
- Drag the selected annotation to reposition it
- Delete or Backspace to remove the selected annotation
- Double-click a text annotation to re-enter edit mode
- Escape to deselect or exit annotation tools
Display Options¶
| Option | Default | Description |
|---|---|---|
| Hidden lines | On | Show occluded geometry as dashed lines |
| Hatching | On | Material-based fill patterns |
| Annotations | On | Dimensions and labels |
| 3D overlay | On | Show section plane position in 3D view |
| Scale | 1:100 | Drawing scale for dimensions |
| Symbolic representations | Off | Use authored Plan/Annotation representations when available |