@ifc-lite/drawing-2d 2.0.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/color-raster.d.ts +95 -0
- package/dist/color-raster.d.ts.map +1 -0
- package/dist/color-raster.js +225 -0
- package/dist/color-raster.js.map +1 -0
- package/dist/drawing-generator.d.ts +12 -0
- package/dist/drawing-generator.d.ts.map +1 -1
- package/dist/drawing-generator.js +13 -4
- package/dist/drawing-generator.js.map +1 -1
- package/dist/edge-extractor.d.ts +17 -0
- package/dist/edge-extractor.d.ts.map +1 -1
- package/dist/edge-extractor.js +95 -0
- package/dist/edge-extractor.js.map +1 -1
- package/dist/half-space-clip.d.ts +77 -0
- package/dist/half-space-clip.d.ts.map +1 -0
- package/dist/half-space-clip.js +257 -0
- package/dist/half-space-clip.js.map +1 -0
- package/dist/hidden-line-raster.d.ts +11 -2
- package/dist/hidden-line-raster.d.ts.map +1 -1
- package/dist/hidden-line-raster.js +7 -58
- package/dist/hidden-line-raster.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -1
- package/dist/index.js.map +1 -1
- package/dist/pdf-scale.d.ts +17 -0
- package/dist/pdf-scale.d.ts.map +1 -1
- package/dist/pdf-scale.js +38 -0
- package/dist/pdf-scale.js.map +1 -1
- package/dist/raster-core.d.ts +71 -0
- package/dist/raster-core.d.ts.map +1 -0
- package/dist/raster-core.js +89 -0
- package/dist/raster-core.js.map +1 -0
- package/dist/sheet/index.d.ts +2 -0
- package/dist/sheet/index.d.ts.map +1 -1
- package/dist/sheet/index.js +1 -0
- package/dist/sheet/index.js.map +1 -1
- package/dist/sheet/scale-stamp.d.ts +130 -0
- package/dist/sheet/scale-stamp.d.ts.map +1 -0
- package/dist/sheet/scale-stamp.js +277 -0
- package/dist/sheet/scale-stamp.js.map +1 -0
- package/dist/symbols/door-symbol.d.ts.map +1 -1
- package/dist/symbols/door-symbol.js +18 -12
- package/dist/symbols/door-symbol.js.map +1 -1
- package/dist/view-plane.d.ts +99 -0
- package/dist/view-plane.d.ts.map +1 -0
- package/dist/view-plane.js +183 -0
- package/dist/view-plane.js.map +1 -0
- package/dist/world-line-seeds.d.ts +41 -0
- package/dist/world-line-seeds.d.ts.map +1 -0
- package/dist/world-line-seeds.js +43 -0
- package/dist/world-line-seeds.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* The scale record a to-scale sheet carries on the paper itself: a drawn scale
|
|
6
|
+
* bar plus the "1:N" text, laid out in millimetres in a band below the drawing
|
|
7
|
+
* (issue #2042).
|
|
8
|
+
*
|
|
9
|
+
* WHY A SHEET WITHOUT THIS IS DANGEROUS. A to-scale PDF whose only record of
|
|
10
|
+
* its scale is its filename says nothing once it is printed. The whole promise
|
|
11
|
+
* of the export is "measurements taken off the print are correct", and a sheet
|
|
12
|
+
* that carries no scale invites someone to measure it at an assumed one. The
|
|
13
|
+
* printed ratio fixes that for the original; the BAR fixes it for every copy
|
|
14
|
+
* after, because a photocopier that shrinks a sheet to 94% shrinks the bar with
|
|
15
|
+
* it while the text "1:100" keeps claiming a scale the paper no longer has.
|
|
16
|
+
* Those are two different failures, so the sheet carries both.
|
|
17
|
+
*
|
|
18
|
+
* WHAT THIS FILE MUST NEVER DO — the reason it exists as layout maths and not
|
|
19
|
+
* as a sheet template. `sheet-types.ts`'s `calculateDrawingTransform` fits a
|
|
20
|
+
* drawing into a fixed viewport (`fitScale = min(scaleX, scaleY, 1)`), which
|
|
21
|
+
* silently shrinks it. Adding furniture through anything that re-fits would
|
|
22
|
+
* turn an exact sheet into a plausible-looking wrong one, which is the single
|
|
23
|
+
* defect this whole feature exists to prevent. So the band is added by GROWING
|
|
24
|
+
* the page down (and right, only if the stamp is wider than the drawing) and
|
|
25
|
+
* the drawing's `PdfScaleTransform` is passed through untouched — same
|
|
26
|
+
* `worldToMm`, same offsets, same object. Adding a scale bar cannot move a
|
|
27
|
+
* single millimetre of the drawing, by construction rather than by care.
|
|
28
|
+
*
|
|
29
|
+
* The emission is deliberately not here: these are plain rectangles and text
|
|
30
|
+
* runs in page millimetres, so the viewer can write them with jsPDF while the
|
|
31
|
+
* sibling renderers in this folder keep emitting SVG strings.
|
|
32
|
+
*/
|
|
33
|
+
import { formatScaleFactorLabel, formatSheetScaleLabel, } from '../pdf-scale.js';
|
|
34
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
35
|
+
// LAYOUT CONSTANTS (millimetres on paper, at any scale)
|
|
36
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
37
|
+
const BAR_TOP_GAP_MM = 4;
|
|
38
|
+
const BAR_HEIGHT_MM = 2.5;
|
|
39
|
+
const TICK_LABEL_GAP_MM = 1;
|
|
40
|
+
const TICK_LABEL_HEIGHT_MM = 2.5;
|
|
41
|
+
const RATIO_TEXT_GAP_MM = 1.5;
|
|
42
|
+
const RATIO_TEXT_HEIGHT_MM = 3.5;
|
|
43
|
+
const BOTTOM_PAD_MM = 2;
|
|
44
|
+
/** Height of the whole band. Independent of scale, bar length and page size. */
|
|
45
|
+
export const SCALE_STAMP_HEIGHT_MM = BAR_TOP_GAP_MM +
|
|
46
|
+
BAR_HEIGHT_MM +
|
|
47
|
+
TICK_LABEL_GAP_MM +
|
|
48
|
+
TICK_LABEL_HEIGHT_MM +
|
|
49
|
+
RATIO_TEXT_GAP_MM +
|
|
50
|
+
RATIO_TEXT_HEIGHT_MM +
|
|
51
|
+
BOTTOM_PAD_MM;
|
|
52
|
+
/** Shortest bar worth printing: below this the divisions stop being readable. */
|
|
53
|
+
const MIN_BAR_WIDTH_MM = 20;
|
|
54
|
+
/** What a bar is aimed at when there is room, mm. */
|
|
55
|
+
const TARGET_BAR_WIDTH_MM = 60;
|
|
56
|
+
/**
|
|
57
|
+
* Division lengths a surveyor would recognise, in metres. The 1-2-5 sequence
|
|
58
|
+
* is what keeps the labels round ("0 1 2 3 4 m") instead of "0 1.27 2.54"; a
|
|
59
|
+
* bar whose ticks fall on arbitrary numbers is measurable but unreadable.
|
|
60
|
+
*/
|
|
61
|
+
const DIVISION_STEPS_M = [
|
|
62
|
+
0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000,
|
|
63
|
+
];
|
|
64
|
+
/** Division counts, most preferred first. */
|
|
65
|
+
const DIVISION_COUNTS = [4, 2];
|
|
66
|
+
/**
|
|
67
|
+
* Width of one character as a fraction of the text height. Helvetica averages
|
|
68
|
+
* about 0.5 em, so this OVER-estimates on purpose: the only thing it decides
|
|
69
|
+
* is whether the page has to grow to hold the band, and over-estimating leaves
|
|
70
|
+
* blank paper while under-estimating would run a label off the sheet.
|
|
71
|
+
*/
|
|
72
|
+
const TEXT_WIDTH_PER_HEIGHT = 0.62;
|
|
73
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
74
|
+
// BUILD
|
|
75
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
76
|
+
/**
|
|
77
|
+
* Lay out a scale bar and its ratio text with their top-left corner at
|
|
78
|
+
* (`originXMm`, `originYMm`).
|
|
79
|
+
*
|
|
80
|
+
* Throws on a non-finite or non-positive `worldToMm` and on non-finite
|
|
81
|
+
* placement: a stamp is the sheet's statement about its own scale, so emitting
|
|
82
|
+
* one from numbers that do not describe a scale would be worse than emitting
|
|
83
|
+
* none at all.
|
|
84
|
+
*/
|
|
85
|
+
export function buildScaleStamp(options) {
|
|
86
|
+
const { worldToMm, availableWidthMm, originXMm, originYMm } = options;
|
|
87
|
+
if (!Number.isFinite(worldToMm) || worldToMm <= 0) {
|
|
88
|
+
throw new Error(`Invalid scale for a scale bar: ${worldToMm} mm per metre. Expected a positive finite number.`);
|
|
89
|
+
}
|
|
90
|
+
if (!Number.isFinite(availableWidthMm) ||
|
|
91
|
+
!Number.isFinite(originXMm) ||
|
|
92
|
+
!Number.isFinite(originYMm)) {
|
|
93
|
+
throw new Error('Invalid scale bar placement: origin and available width must be finite.');
|
|
94
|
+
}
|
|
95
|
+
const { divisions, divisionMetres } = chooseBarDivisions(worldToMm, availableWidthMm);
|
|
96
|
+
const divisionWidthMm = divisionMetres * worldToMm;
|
|
97
|
+
const barWidthMm = divisions * divisionWidthMm;
|
|
98
|
+
const barTopMm = originYMm + BAR_TOP_GAP_MM;
|
|
99
|
+
// Alternating filled and hollow divisions: the classic bar, and the one that
|
|
100
|
+
// still reads at a glance after a photocopy has washed out the tick labels.
|
|
101
|
+
const rects = [];
|
|
102
|
+
for (let i = 0; i < divisions; i++) {
|
|
103
|
+
rects.push({
|
|
104
|
+
xMm: originXMm + i * divisionWidthMm,
|
|
105
|
+
yMm: barTopMm,
|
|
106
|
+
widthMm: divisionWidthMm,
|
|
107
|
+
heightMm: BAR_HEIGHT_MM,
|
|
108
|
+
filled: i % 2 === 0,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const tickBaselineMm = barTopMm + BAR_HEIGHT_MM + TICK_LABEL_GAP_MM + TICK_LABEL_HEIGHT_MM;
|
|
112
|
+
const texts = [];
|
|
113
|
+
for (let i = 0; i <= divisions; i++) {
|
|
114
|
+
const metres = i * divisionMetres;
|
|
115
|
+
// Same rounding rule as the ratio below (2 dp, trailing zeros trimmed):
|
|
116
|
+
// one rule for every number this package prints on a sheet, rather than a
|
|
117
|
+
// second one here that could disagree about, say, 0.30000000000000004.
|
|
118
|
+
const value = formatScaleFactorLabel(metres);
|
|
119
|
+
texts.push({
|
|
120
|
+
// The unit rides on the last label only: repeating "m" under every tick
|
|
121
|
+
// is clutter, and omitting it everywhere leaves the bar unitless.
|
|
122
|
+
text: i === divisions ? `${value} m` : value,
|
|
123
|
+
xMm: originXMm + i * divisionWidthMm,
|
|
124
|
+
yMm: tickBaselineMm,
|
|
125
|
+
align: 'center',
|
|
126
|
+
heightMm: TICK_LABEL_HEIGHT_MM,
|
|
127
|
+
metres,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
// The ratio goes through the shared formatter, so a 1:99.5 sheet prints
|
|
131
|
+
// "1:99.5" and never the materially different "1:100" (#2119). `worldToMm`
|
|
132
|
+
// IS the scale the drawing was laid out at, so deriving the label from it
|
|
133
|
+
// rather than from a separately passed factor removes the whole class of
|
|
134
|
+
// sheet-says-one-thing-drawn-at-another defects.
|
|
135
|
+
//
|
|
136
|
+
// And when 2 decimals cannot hold the factor — "as displayed" delivers
|
|
137
|
+
// 1:87.3456 — the label says "about", because a bare "1:87.35" would be a
|
|
138
|
+
// number an engineer trusts and should not. The bar below it stays exact.
|
|
139
|
+
const scaleLabel = formatSheetScaleLabel(1000 / worldToMm);
|
|
140
|
+
const ratioBaselineMm = tickBaselineMm + RATIO_TEXT_GAP_MM + RATIO_TEXT_HEIGHT_MM;
|
|
141
|
+
texts.push({
|
|
142
|
+
text: `Scale ${scaleLabel}`,
|
|
143
|
+
xMm: originXMm,
|
|
144
|
+
yMm: ratioBaselineMm,
|
|
145
|
+
align: 'left',
|
|
146
|
+
heightMm: RATIO_TEXT_HEIGHT_MM,
|
|
147
|
+
metres: null,
|
|
148
|
+
});
|
|
149
|
+
return {
|
|
150
|
+
bar: {
|
|
151
|
+
xMm: originXMm,
|
|
152
|
+
yMm: barTopMm,
|
|
153
|
+
widthMm: barWidthMm,
|
|
154
|
+
heightMm: BAR_HEIGHT_MM,
|
|
155
|
+
divisions,
|
|
156
|
+
divisionMetres,
|
|
157
|
+
divisionWidthMm,
|
|
158
|
+
},
|
|
159
|
+
rects,
|
|
160
|
+
texts,
|
|
161
|
+
widthMm: stampWidthMm(originXMm, barWidthMm, texts),
|
|
162
|
+
heightMm: SCALE_STAMP_HEIGHT_MM,
|
|
163
|
+
scaleLabel,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Grow `base` by a scale band under the drawing.
|
|
168
|
+
*
|
|
169
|
+
* The page gains exactly `SCALE_STAMP_HEIGHT_MM` of height, and width only if
|
|
170
|
+
* the band is wider than the drawing. The transform is returned as it came in
|
|
171
|
+
* — see {@link StampedSheetLayout.transform}.
|
|
172
|
+
*
|
|
173
|
+
* PRECONDITION on `marginMm`: the bar's end tick labels are centred on their
|
|
174
|
+
* ticks, so roughly half a label hangs past each end of the bar. The margin has
|
|
175
|
+
* to absorb that. Zero (or a very small) margin is accepted by the guard below
|
|
176
|
+
* and lays the band out correctly, but the outermost label can then sit partly
|
|
177
|
+
* off the page. The export path passes `VIEW_PDF_MARGIN_MM` (10 mm), which is
|
|
178
|
+
* comfortably more than any label produced by the 1-2-5 division sequence.
|
|
179
|
+
* This is a cosmetic bound only: it does not move the bar, so a division still
|
|
180
|
+
* measures exactly its labelled world length whatever the margin.
|
|
181
|
+
*/
|
|
182
|
+
export function addScaleStamp(base, options) {
|
|
183
|
+
const { marginMm } = options;
|
|
184
|
+
if (!Number.isFinite(marginMm) || marginMm < 0) {
|
|
185
|
+
throw new Error(`Invalid sheet margin: ${marginMm}mm. Expected a non-negative finite number.`);
|
|
186
|
+
}
|
|
187
|
+
if (!Number.isFinite(base.page.widthMm) || !Number.isFinite(base.page.heightMm) ||
|
|
188
|
+
base.page.widthMm <= 0 || base.page.heightMm <= 0) {
|
|
189
|
+
throw new Error('Cannot add a scale bar to a page that has no usable size.');
|
|
190
|
+
}
|
|
191
|
+
const stamp = buildScaleStamp({
|
|
192
|
+
worldToMm: base.transform.worldToMm,
|
|
193
|
+
availableWidthMm: Math.max(0, base.page.widthMm - marginMm * 2),
|
|
194
|
+
originXMm: marginMm,
|
|
195
|
+
// The drawing's bottom edge: `computePdfScaleLayout` puts it exactly one
|
|
196
|
+
// margin above the page bottom, so the band starts where the ink stops.
|
|
197
|
+
originYMm: base.page.heightMm - marginMm,
|
|
198
|
+
});
|
|
199
|
+
const page = {
|
|
200
|
+
widthMm: Math.max(base.page.widthMm, marginMm * 2 + stamp.widthMm),
|
|
201
|
+
heightMm: base.page.heightMm + stamp.heightMm,
|
|
202
|
+
};
|
|
203
|
+
if (!Number.isFinite(page.widthMm) || !Number.isFinite(page.heightMm)) {
|
|
204
|
+
throw new Error(`Adding a scale bar produced a non-finite page (${page.widthMm}x${page.heightMm}mm).`);
|
|
205
|
+
}
|
|
206
|
+
return { page, transform: base.transform, stamp };
|
|
207
|
+
}
|
|
208
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
209
|
+
// INTERNALS
|
|
210
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
211
|
+
/**
|
|
212
|
+
* Pick the division count and length whose bar comes closest to
|
|
213
|
+
* `TARGET_BAR_WIDTH_MM` without exceeding the space available.
|
|
214
|
+
*
|
|
215
|
+
* When nothing readable fits — a drawing narrower than the shortest useful bar
|
|
216
|
+
* — the shortest readable bar wins anyway and the caller's page grows to hold
|
|
217
|
+
* it. A bar squeezed to 3 mm would be present, in scale, and useless, which is
|
|
218
|
+
* the one outcome worse than a slightly wider sheet.
|
|
219
|
+
*/
|
|
220
|
+
function chooseBarDivisions(worldToMm, availableWidthMm) {
|
|
221
|
+
let fitting = null;
|
|
222
|
+
let fittingScore = Infinity;
|
|
223
|
+
let smallest = null;
|
|
224
|
+
let smallestWidth = Infinity;
|
|
225
|
+
let largest = null;
|
|
226
|
+
let largestWidth = -Infinity;
|
|
227
|
+
for (const divisions of DIVISION_COUNTS) {
|
|
228
|
+
for (const divisionMetres of DIVISION_STEPS_M) {
|
|
229
|
+
const widthMm = divisions * divisionMetres * worldToMm;
|
|
230
|
+
if (!Number.isFinite(widthMm) || widthMm <= 0)
|
|
231
|
+
continue;
|
|
232
|
+
const candidate = { divisions, divisionMetres };
|
|
233
|
+
if (widthMm > largestWidth) {
|
|
234
|
+
largest = candidate;
|
|
235
|
+
largestWidth = widthMm;
|
|
236
|
+
}
|
|
237
|
+
if (widthMm >= MIN_BAR_WIDTH_MM && widthMm < smallestWidth) {
|
|
238
|
+
smallest = candidate;
|
|
239
|
+
smallestWidth = widthMm;
|
|
240
|
+
}
|
|
241
|
+
if (widthMm >= MIN_BAR_WIDTH_MM && widthMm <= availableWidthMm) {
|
|
242
|
+
const score = Math.abs(widthMm - TARGET_BAR_WIDTH_MM);
|
|
243
|
+
if (score < fittingScore) {
|
|
244
|
+
fitting = candidate;
|
|
245
|
+
fittingScore = score;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
const chosen = fitting ?? smallest ?? largest;
|
|
251
|
+
if (!chosen) {
|
|
252
|
+
throw new Error(`No scale bar length is expressible at ${worldToMm} mm per metre. Choose a less extreme scale.`);
|
|
253
|
+
}
|
|
254
|
+
return chosen;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* How far right of `originXMm` the band reaches — the number that decides
|
|
258
|
+
* whether the page has to grow.
|
|
259
|
+
*
|
|
260
|
+
* Tick labels are deliberately NOT counted. Each is centred on its tick, so the
|
|
261
|
+
* last one overhangs the bar's end by half its width: about 2 mm of a 10 mm
|
|
262
|
+
* margin, on blank paper, and counting it would widen every sheet by that much
|
|
263
|
+
* for nothing. Only the bar and the left-aligned runs can actually reach past
|
|
264
|
+
* the drawing.
|
|
265
|
+
*/
|
|
266
|
+
function stampWidthMm(originXMm, barWidthMm, texts) {
|
|
267
|
+
let right = originXMm + barWidthMm;
|
|
268
|
+
for (const text of texts) {
|
|
269
|
+
if (text.align !== 'left')
|
|
270
|
+
continue;
|
|
271
|
+
const textRight = text.xMm + text.text.length * text.heightMm * TEXT_WIDTH_PER_HEIGHT;
|
|
272
|
+
if (textRight > right)
|
|
273
|
+
right = textRight;
|
|
274
|
+
}
|
|
275
|
+
return right - originXMm;
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=scale-stamp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scale-stamp.js","sourceRoot":"","sources":["../../src/sheet/scale-stamp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"door-symbol.d.ts","sourceRoot":"","sources":["../../src/symbols/door-symbol.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAGnB,WAAW,EACX,OAAO,EACP,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACT,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,aAAa,EAAE,OAAO,CAAC;CACxB;AASD;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAIlD;;OAEG;IACH,mBAAmB,CACjB,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,OAAO,GACrB,gBAAgB;IAgBnB;;OAEG;IACH,cAAc,CACZ,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,iBAAiB,EAC5B,aAAa,EAAE,OAAO,EACtB,cAAc,EAAE,OAAO,GACtB,gBAAgB;IA+BnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"door-symbol.d.ts","sourceRoot":"","sources":["../../src/symbols/door-symbol.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAGnB,WAAW,EACX,OAAO,EACP,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACT,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,aAAa,EAAE,OAAO,CAAC;CACxB;AASD;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAIlD;;OAEG;IACH,mBAAmB,CACjB,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,OAAO,GACrB,gBAAgB;IAgBnB;;OAEG;IACH,cAAc,CACZ,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,iBAAiB,EAC5B,aAAa,EAAE,OAAO,EACtB,cAAc,EAAE,OAAO,GACtB,gBAAgB;IA+BnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmFzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoE1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmD3B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA2CjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqD3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgD7B;;OAEG;IACH,OAAO,CAAC,WAAW;IAsCnB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,yBAAyB;CAGlC"}
|
|
@@ -86,7 +86,7 @@ export class DoorSymbolGenerator {
|
|
|
86
86
|
lines.push({ start: hingePoint, end: leafEnd });
|
|
87
87
|
}
|
|
88
88
|
// Generate swing arc
|
|
89
|
-
const arcLines = this.generateArc(hingePoint, width,
|
|
89
|
+
const arcLines = this.generateArc(hingePoint, width, swingDir, hingeSide === 'left' ? 1 : -1, swingAngleRad);
|
|
90
90
|
lines.push(...arcLines);
|
|
91
91
|
// If door swings both ways, add arc on opposite side
|
|
92
92
|
if (bothWays) {
|
|
@@ -94,7 +94,7 @@ export class DoorSymbolGenerator {
|
|
|
94
94
|
x: -swingDir.x,
|
|
95
95
|
y: -swingDir.y,
|
|
96
96
|
};
|
|
97
|
-
const oppositeArcLines = this.generateArc(hingePoint, width,
|
|
97
|
+
const oppositeArcLines = this.generateArc(hingePoint, width, oppositeSwingDir, hingeSide === 'left' ? -1 : 1, swingAngleRad);
|
|
98
98
|
lines.push(...oppositeArcLines);
|
|
99
99
|
}
|
|
100
100
|
const params = {
|
|
@@ -113,7 +113,7 @@ export class DoorSymbolGenerator {
|
|
|
113
113
|
parameters: params,
|
|
114
114
|
},
|
|
115
115
|
lines,
|
|
116
|
-
arcPath: this.generateArcSVGPath(hingePoint, width,
|
|
116
|
+
arcPath: this.generateArcSVGPath(hingePoint, width, swingDir, hingeSide === 'left' ? 1 : -1, swingAngleRad),
|
|
117
117
|
};
|
|
118
118
|
}
|
|
119
119
|
/**
|
|
@@ -144,7 +144,7 @@ export class DoorSymbolGenerator {
|
|
|
144
144
|
},
|
|
145
145
|
});
|
|
146
146
|
}
|
|
147
|
-
lines.push(...this.generateArc(leftHinge, leafWidth,
|
|
147
|
+
lines.push(...this.generateArc(leftHinge, leafWidth, swingDir, 1, swingAngleRad));
|
|
148
148
|
// Right door leaf and arc
|
|
149
149
|
if (this.config.showLeaf) {
|
|
150
150
|
lines.push({
|
|
@@ -155,7 +155,7 @@ export class DoorSymbolGenerator {
|
|
|
155
155
|
},
|
|
156
156
|
});
|
|
157
157
|
}
|
|
158
|
-
lines.push(...this.generateArc(rightHinge, leafWidth,
|
|
158
|
+
lines.push(...this.generateArc(rightHinge, leafWidth, swingDir, -1, swingAngleRad));
|
|
159
159
|
const params = {
|
|
160
160
|
width,
|
|
161
161
|
swingDirection: 1,
|
|
@@ -346,11 +346,15 @@ export class DoorSymbolGenerator {
|
|
|
346
346
|
/**
|
|
347
347
|
* Generate arc as line segments
|
|
348
348
|
*/
|
|
349
|
-
generateArc(center, radius,
|
|
349
|
+
generateArc(center, radius, swingDir, direction, angleRad) {
|
|
350
350
|
const lines = [];
|
|
351
351
|
const segments = this.config.arcSegments;
|
|
352
|
-
//
|
|
353
|
-
|
|
352
|
+
// The arc must terminate at the leaf's open-position tip (center + swingDir * radius) —
|
|
353
|
+
// that point is the door's free edge, and the leaf line is drawn from the same swingDir.
|
|
354
|
+
// Sweep backward from there by angleRad (in the same rotational sense as `direction`) to
|
|
355
|
+
// find the closed-position start angle, which lands along the wall as expected.
|
|
356
|
+
const swingAngle = Math.atan2(swingDir.y, swingDir.x);
|
|
357
|
+
const startAngle = swingAngle - direction * angleRad;
|
|
354
358
|
for (let i = 0; i < segments; i++) {
|
|
355
359
|
const t1 = i / segments;
|
|
356
360
|
const t2 = (i + 1) / segments;
|
|
@@ -372,15 +376,17 @@ export class DoorSymbolGenerator {
|
|
|
372
376
|
/**
|
|
373
377
|
* Generate SVG arc path string
|
|
374
378
|
*/
|
|
375
|
-
generateArcSVGPath(center, radius,
|
|
376
|
-
|
|
377
|
-
|
|
379
|
+
generateArcSVGPath(center, radius, swingDir, direction, angleRad) {
|
|
380
|
+
// Same convention as generateArc: the arc must end at the leaf's open tip
|
|
381
|
+
// (center + swingDir * radius), swept back by angleRad in `direction`'s sense.
|
|
382
|
+
const endAngle = Math.atan2(swingDir.y, swingDir.x);
|
|
383
|
+
const startAngle = endAngle - direction * angleRad;
|
|
378
384
|
const startX = center.x + Math.cos(startAngle) * radius;
|
|
379
385
|
const startY = center.y + Math.sin(startAngle) * radius;
|
|
380
386
|
const endX = center.x + Math.cos(endAngle) * radius;
|
|
381
387
|
const endY = center.y + Math.sin(endAngle) * radius;
|
|
382
388
|
const largeArc = angleRad > Math.PI ? 1 : 0;
|
|
383
|
-
const sweep = 1;
|
|
389
|
+
const sweep = direction > 0 ? 1 : 0;
|
|
384
390
|
return `M ${startX} ${startY} A ${radius} ${radius} 0 ${largeArc} ${sweep} ${endX} ${endY}`;
|
|
385
391
|
}
|
|
386
392
|
getPerpendicularDirection(dir) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"door-symbol.js","sourceRoot":"","sources":["../../src/symbols/door-symbol.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"door-symbol.js","sourceRoot":"","sources":["../../src/symbols/door-symbol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Camera-derived section plane for exporting the 3D viewport as a to-scale
|
|
3
|
+
* vector PDF (issue #2042).
|
|
4
|
+
*
|
|
5
|
+
* # Defect class this module guards against
|
|
6
|
+
* A "1:100" page that is dimensionally plausible but geometrically wrong —
|
|
7
|
+
* **mirrored, skewed, or off-page**. Every one of those comes from the same
|
|
8
|
+
* root cause: the drawing basis and the page transform disagreeing.
|
|
9
|
+
*
|
|
10
|
+
* - **Skew / wrong scale.** `projectTo2DBasis` is a plain pair of dot
|
|
11
|
+
* products; it is a *rigid* projection only when `tangent`/`bitangent`
|
|
12
|
+
* are unit-length AND mutually orthogonal AND perpendicular to the view
|
|
13
|
+
* normal. An `up` vector taken verbatim from an orbiting camera is
|
|
14
|
+
* generally NOT perpendicular to the view direction, so using it raw
|
|
15
|
+
* stretches one screen axis: a wall measured on the print then reads
|
|
16
|
+
* (say) 0.97 m instead of 1.00 m — a defect an engineer only discovers
|
|
17
|
+
* with a ruler. The basis built here is re-orthogonalised, so
|
|
18
|
+
* `|projected(a) − projected(b)| == |a − b|` exactly for any two points
|
|
19
|
+
* lying in a plane parallel to the drawing plane.
|
|
20
|
+
* - **Mirroring** (the #2119 defect class). The basis is fixed as
|
|
21
|
+
* `cross(tangent, bitangent) === normal`, with `tangent` = screen-right
|
|
22
|
+
* and `bitangent` = screen-up, so a point to the right of the camera
|
|
23
|
+
* target lands to the right of the page centre after `worldPointToPdfMm`
|
|
24
|
+
* (which applies the paper Y flip, and only that).
|
|
25
|
+
* - **Off-page geometry.** The plane is placed strictly IN FRONT of all
|
|
26
|
+
* eight world-bounds corners along the view direction, so every point of
|
|
27
|
+
* the model has a positive view depth inside `[0, viewDepth]` — the
|
|
28
|
+
* window the depth raster and the projection bands both key off. A plane
|
|
29
|
+
* placed inside the model would silently cut away half the drawing.
|
|
30
|
+
*
|
|
31
|
+
* The camera is treated as an ORTHOGRAPHIC (parallel) projection along
|
|
32
|
+
* `position → target`. That is the only scale-truthful reading of "print
|
|
33
|
+
* what I see at 1:N": a perspective image has no single scale.
|
|
34
|
+
*
|
|
35
|
+
* All world coordinates are in the same metric, RTC-shifted world space as
|
|
36
|
+
* `MeshData.positions` + `MeshData.origin` (WebGL Y-up, metres).
|
|
37
|
+
*/
|
|
38
|
+
import type { MeshData } from '@ifc-lite/geometry';
|
|
39
|
+
import type { SectionPlaneConfig, Vec3 } from './types.js';
|
|
40
|
+
/** The subset of a 3D camera the parallel projection actually needs. */
|
|
41
|
+
export interface CameraFrame {
|
|
42
|
+
/** Eye position (world, metres). */
|
|
43
|
+
position: Vec3;
|
|
44
|
+
/** Orbit target / look-at point (world, metres). */
|
|
45
|
+
target: Vec3;
|
|
46
|
+
/** Camera up hint. Need NOT be perpendicular to the view direction — it is
|
|
47
|
+
* re-orthogonalised here — but must not be the zero vector. */
|
|
48
|
+
up: Vec3;
|
|
49
|
+
}
|
|
50
|
+
/** An axis-aligned world-space box (absolute world coords, metres). */
|
|
51
|
+
export interface WorldBounds3D {
|
|
52
|
+
min: Vec3;
|
|
53
|
+
max: Vec3;
|
|
54
|
+
}
|
|
55
|
+
/** A synthetic section plane standing in for the camera. */
|
|
56
|
+
export interface CameraSectionPlane {
|
|
57
|
+
/**
|
|
58
|
+
* Plane config whose `customPlane` carries the orthonormal camera basis.
|
|
59
|
+
* `flipped` is always `false` and `normal = −viewDir`, so the whole model
|
|
60
|
+
* sits on the KEPT (negative signed-depth) side and every point's VIEW
|
|
61
|
+
* depth `−signedDepth(p, plane)` is in `(0, viewDepth)`.
|
|
62
|
+
*/
|
|
63
|
+
plane: SectionPlaneConfig;
|
|
64
|
+
/**
|
|
65
|
+
* Depth of the kept window along the view direction — the model's full
|
|
66
|
+
* extent plus padding on both ends. Feed it to `SectionConfig`'s
|
|
67
|
+
* `projectionBelowDepth` (with a tiny `projectionAboveDepth`) so the whole
|
|
68
|
+
* model projects as solid, and to the hidden-line occluder depth.
|
|
69
|
+
*/
|
|
70
|
+
viewDepth: number;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* World-space AABB of `meshes`, folding each mesh's local frame:
|
|
74
|
+
* `world = origin + positions[3i..3i+3]`.
|
|
75
|
+
*
|
|
76
|
+
* Reading `positions` without adding `origin` is the standing local-frame
|
|
77
|
+
* defect in this codebase (see `MeshData.origin`): it reports a box around
|
|
78
|
+
* the model ORIGIN instead of around the model, which would place the
|
|
79
|
+
* synthetic camera plane in the wrong place entirely.
|
|
80
|
+
*
|
|
81
|
+
* Returns `null` when no mesh contributes a vertex — the caller must decide
|
|
82
|
+
* what an empty view means rather than receive an inverted/infinite box.
|
|
83
|
+
*/
|
|
84
|
+
export declare function worldBoundsOfMeshes(meshes: readonly MeshData[]): WorldBounds3D | null;
|
|
85
|
+
/** The eight corners of a world AABB, in a fixed order. */
|
|
86
|
+
export declare function worldBoundsCorners(bounds: WorldBounds3D): Vec3[];
|
|
87
|
+
/**
|
|
88
|
+
* Build the synthetic section plane that represents the current camera view.
|
|
89
|
+
*
|
|
90
|
+
* @param camera World-space eye/target/up.
|
|
91
|
+
* @param worldBounds World AABB of everything that will be drawn (see
|
|
92
|
+
* {@link worldBoundsOfMeshes}).
|
|
93
|
+
*
|
|
94
|
+
* @throws when the camera degenerates (eye == target) or the bounds are
|
|
95
|
+
* non-finite — both would otherwise yield a NaN transform and a
|
|
96
|
+
* blank-but-plausible PDF page.
|
|
97
|
+
*/
|
|
98
|
+
export declare function buildCameraSectionPlane(camera: CameraFrame, worldBounds: WorldBounds3D): CameraSectionPlane;
|
|
99
|
+
//# sourceMappingURL=view-plane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-plane.d.ts","sourceRoot":"","sources":["../src/view-plane.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAe,kBAAkB,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOxE,wEAAwE;AACxE,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,QAAQ,EAAE,IAAI,CAAC;IACf,oDAAoD;IACpD,MAAM,EAAE,IAAI,CAAC;IACb;oEACgE;IAChE,EAAE,EAAE,IAAI,CAAC;CACV;AAED,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;CACX;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,KAAK,EAAE,kBAAkB,CAAC;IAC1B;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG,aAAa,GAAG,IAAI,CA4BrF;AAED,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE,CAWhE;AAoBD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,aAAa,GACzB,kBAAkB,CA6FpB"}
|