@ifc-lite/drawing-2d 1.21.2 → 2.1.0
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 +17 -0
- package/dist/drawing-generator.d.ts.map +1 -1
- package/dist/drawing-generator.js +33 -7
- 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 +104 -1
- 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 +50 -0
- package/dist/hidden-line-raster.d.ts.map +1 -0
- package/dist/hidden-line-raster.js +103 -0
- package/dist/hidden-line-raster.js.map +1 -0
- package/dist/hidden-line.d.ts +34 -21
- package/dist/hidden-line.d.ts.map +1 -1
- package/dist/hidden-line.js +107 -214
- package/dist/hidden-line.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/line-merger.d.ts.map +1 -1
- package/dist/line-merger.js +88 -44
- package/dist/line-merger.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/polygon-builder.d.ts +31 -0
- package/dist/polygon-builder.d.ts.map +1 -1
- package/dist/polygon-builder.js +60 -3
- package/dist/polygon-builder.js.map +1 -1
- package/dist/profile-projector.js +17 -9
- package/dist/profile-projector.js.map +1 -1
- package/dist/projection-bands.d.ts +13 -6
- package/dist/projection-bands.d.ts.map +1 -1
- package/dist/projection-bands.js +15 -3
- package/dist/projection-bands.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/section-cutter.d.ts +8 -0
- package/dist/section-cutter.d.ts.map +1 -1
- package/dist/section-cutter.js +59 -11
- package/dist/section-cutter.js.map +1 -1
- 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/types.d.ts +26 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.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,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flat-shaded RGBA raster of a section view - the "solid, coloured" underlay
|
|
3
|
+
* for the to-scale PDF export (issue #2042). The vector line work is drawn on
|
|
4
|
+
* top of it, so everything an engineer measures stays a stroke; the raster
|
|
5
|
+
* only supplies the surfaces the viewport shows and monochrome line work does
|
|
6
|
+
* not.
|
|
7
|
+
*
|
|
8
|
+
* # Frame identity
|
|
9
|
+
* The raster is built in the SAME 2D drawing frame as the lines: projection
|
|
10
|
+
* and depth come from `projectPointForPlane` / `signedDepth`, and
|
|
11
|
+
* {@link ColorRaster.bounds} is the projected extent with NO margin, spanned
|
|
12
|
+
* edge-to-edge by the pixel grid:
|
|
13
|
+
*
|
|
14
|
+
* `u = (x - bounds.min.x) / boundsWidth * width`
|
|
15
|
+
* `v = (bounds.max.y - y) / boundsHeight * height`
|
|
16
|
+
*
|
|
17
|
+
* with pixel `(i, j)` sampled at `(i + 0.5, j + 0.5)`. Row 0 is therefore the
|
|
18
|
+
* TOP of the drawing (world `max.y`), which is also the top of the paper, so
|
|
19
|
+
* no consumer needs a second flip. Placing the image at the rectangle you get
|
|
20
|
+
* by pushing `bounds` through `worldPointToPdfMm` with the transform the
|
|
21
|
+
* strokes use leaves at most half a pixel of registration error.
|
|
22
|
+
*
|
|
23
|
+
* Note this deliberately differs from `hidden-line-raster.ts`, which maps the
|
|
24
|
+
* extent onto `width - 1` (pixel CENTRES at the bounds edges). That is right
|
|
25
|
+
* for sampling a depth buffer and wrong for an image whose rectangle must
|
|
26
|
+
* cover the extent exactly.
|
|
27
|
+
*
|
|
28
|
+
* # Shading
|
|
29
|
+
* Flat per-face Lambert, `0.4 + 0.6 * abs(dot(faceNormal, viewDir))`, off a
|
|
30
|
+
* normal recomputed from the triangle's own positions. Both details are
|
|
31
|
+
* forced by the data: `MeshData.normals` may be absent or stale, and winding
|
|
32
|
+
* is unreliable by design (see `MeshData.indices`), so a signed dot would
|
|
33
|
+
* paint half the surfaces of an ordinary IFC model black.
|
|
34
|
+
*
|
|
35
|
+
* # Transparency
|
|
36
|
+
* Two passes, no sorting: opaque meshes write colour AND depth, then
|
|
37
|
+
* translucent meshes test against that depth buffer without writing it and
|
|
38
|
+
* blend `a * src + (1 - a) * dst`. Translucent-over-translucent therefore
|
|
39
|
+
* composites in mesh iteration order rather than back-to-front, which is an
|
|
40
|
+
* approximation - and one that is strictly closer to the viewport than
|
|
41
|
+
* either treating glass as opaque or dropping it.
|
|
42
|
+
*/
|
|
43
|
+
import type { MeshData } from '@ifc-lite/geometry';
|
|
44
|
+
import type { Bounds2D, SectionPlaneConfig } from './types.js';
|
|
45
|
+
/** Default dots-per-inch of paper for the shaded underlay. */
|
|
46
|
+
export declare const DEFAULT_SHADING_DPI = 150;
|
|
47
|
+
/** Hard cap on total pixels (2^24): ~67MB RGBA + ~67MB depth while building. */
|
|
48
|
+
export declare const MAX_SHADING_PIXELS = 16777216;
|
|
49
|
+
/** Hard cap per side, chosen to stay inside canvas implementation limits. */
|
|
50
|
+
export declare const MAX_SHADING_DIMENSION_PX = 16384;
|
|
51
|
+
export interface ColorRaster {
|
|
52
|
+
/** RGBA8 straight alpha, row-major, ROW 0 = TOP of the drawing (world max.y). */
|
|
53
|
+
pixels: Uint8ClampedArray;
|
|
54
|
+
width: number;
|
|
55
|
+
height: number;
|
|
56
|
+
/** Drawing-frame 2D rect (metres) the pixel grid spans EXACTLY (no margin). */
|
|
57
|
+
bounds: Bounds2D;
|
|
58
|
+
}
|
|
59
|
+
export interface ColorRasterOptions {
|
|
60
|
+
widthPx: number;
|
|
61
|
+
heightPx: number;
|
|
62
|
+
/** View-depth slack for triangles straddling the cut plane. Default 0.001. */
|
|
63
|
+
depthBias?: number;
|
|
64
|
+
}
|
|
65
|
+
export interface RasterFit {
|
|
66
|
+
widthPx: number;
|
|
67
|
+
heightPx: number;
|
|
68
|
+
/** The dpi actually achieved; equals the requested dpi unless a cap engaged. */
|
|
69
|
+
effectiveDpi: number;
|
|
70
|
+
capped: boolean;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Pixel grid for a drawing of `drawingWidthMm` x `drawingHeightMm` at `dpi`,
|
|
74
|
+
* reduced to fit `maxPixels` in total and `maxDimensionPx` per side.
|
|
75
|
+
*
|
|
76
|
+
* Reduction scales BOTH sides by the same factor, so the aspect ratio (and
|
|
77
|
+
* therefore the placement rectangle, which is derived from world bounds and
|
|
78
|
+
* never from pixel counts) is unaffected: a capped raster is blurrier, never
|
|
79
|
+
* mis-scaled.
|
|
80
|
+
*
|
|
81
|
+
* Pure arithmetic, cheap enough to call per keystroke. Throws on non-finite
|
|
82
|
+
* or non-positive inputs rather than returning a plausible-looking grid, on
|
|
83
|
+
* the same reasoning as `computePdfScaleLayout`.
|
|
84
|
+
*/
|
|
85
|
+
export declare function fitRasterPixels(drawingWidthMm: number, drawingHeightMm: number, dpi: number, maxPixels: number, maxDimensionPx: number): RasterFit;
|
|
86
|
+
/**
|
|
87
|
+
* Rasterize `meshes` into a shaded RGBA image covering their projected extent
|
|
88
|
+
* in the kept half of the section (`viewDepth` in `[0, occluderDepth]`).
|
|
89
|
+
*
|
|
90
|
+
* Returns `null` when nothing lands in that window or the extent is
|
|
91
|
+
* degenerate: there is no rectangle to place an image at, and the caller must
|
|
92
|
+
* fall back to line work only rather than emit a zero-size image.
|
|
93
|
+
*/
|
|
94
|
+
export declare function buildColorRaster(meshes: readonly MeshData[], plane: SectionPlaneConfig, occluderDepth: number, options: ColorRasterOptions): ColorRaster | null;
|
|
95
|
+
//# sourceMappingURL=color-raster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-raster.d.ts","sourceRoot":"","sources":["../src/color-raster.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAQ,MAAM,YAAY,CAAC;AAYrE,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,WAAa,CAAC;AAC7C,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,iFAAiF;IACjF,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACrB,SAAS,CAmCX;AAgBD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,KAAK,EAAE,kBAAkB,EACzB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,kBAAkB,GAC1B,WAAW,GAAG,IAAI,CA8CpB"}
|
|
@@ -0,0 +1,225 @@
|
|
|
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
|
+
import { EPSILON } from './math.js';
|
|
5
|
+
import { signedDepth, projectPointForPlane, getViewDirectionForPlane } from './projection-bands.js';
|
|
6
|
+
import { getVertex, barycentricCoords, computeProjectedBounds } from './raster-core.js';
|
|
7
|
+
/** Alpha at or above which a mesh is rasterized in the opaque pass. */
|
|
8
|
+
const OPAQUE_ALPHA = 0.999;
|
|
9
|
+
/** Ambient term: the darkest a fully edge-on face may go. */
|
|
10
|
+
const AMBIENT = 0.4;
|
|
11
|
+
/** Diffuse term scaling `abs(dot(n, viewDir))`. */
|
|
12
|
+
const DIFFUSE = 0.6;
|
|
13
|
+
/** Default dots-per-inch of paper for the shaded underlay. */
|
|
14
|
+
export const DEFAULT_SHADING_DPI = 150;
|
|
15
|
+
/** Hard cap on total pixels (2^24): ~67MB RGBA + ~67MB depth while building. */
|
|
16
|
+
export const MAX_SHADING_PIXELS = 16_777_216;
|
|
17
|
+
/** Hard cap per side, chosen to stay inside canvas implementation limits. */
|
|
18
|
+
export const MAX_SHADING_DIMENSION_PX = 16_384;
|
|
19
|
+
/**
|
|
20
|
+
* Pixel grid for a drawing of `drawingWidthMm` x `drawingHeightMm` at `dpi`,
|
|
21
|
+
* reduced to fit `maxPixels` in total and `maxDimensionPx` per side.
|
|
22
|
+
*
|
|
23
|
+
* Reduction scales BOTH sides by the same factor, so the aspect ratio (and
|
|
24
|
+
* therefore the placement rectangle, which is derived from world bounds and
|
|
25
|
+
* never from pixel counts) is unaffected: a capped raster is blurrier, never
|
|
26
|
+
* mis-scaled.
|
|
27
|
+
*
|
|
28
|
+
* Pure arithmetic, cheap enough to call per keystroke. Throws on non-finite
|
|
29
|
+
* or non-positive inputs rather than returning a plausible-looking grid, on
|
|
30
|
+
* the same reasoning as `computePdfScaleLayout`.
|
|
31
|
+
*/
|
|
32
|
+
export function fitRasterPixels(drawingWidthMm, drawingHeightMm, dpi, maxPixels, maxDimensionPx) {
|
|
33
|
+
for (const [name, value] of [
|
|
34
|
+
['drawingWidthMm', drawingWidthMm],
|
|
35
|
+
['drawingHeightMm', drawingHeightMm],
|
|
36
|
+
['dpi', dpi],
|
|
37
|
+
['maxPixels', maxPixels],
|
|
38
|
+
['maxDimensionPx', maxDimensionPx],
|
|
39
|
+
]) {
|
|
40
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
41
|
+
throw new Error(`Invalid shading raster ${name}: ${value}. Expected a positive finite number.`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
let widthPx = Math.max(1, Math.ceil((drawingWidthMm * dpi) / 25.4));
|
|
45
|
+
let heightPx = Math.max(1, Math.ceil((drawingHeightMm * dpi) / 25.4));
|
|
46
|
+
const requestedPixels = widthPx * heightPx;
|
|
47
|
+
let scale = 1;
|
|
48
|
+
if (requestedPixels > maxPixels) {
|
|
49
|
+
scale = Math.sqrt(maxPixels / requestedPixels);
|
|
50
|
+
}
|
|
51
|
+
if (widthPx * scale > maxDimensionPx) {
|
|
52
|
+
scale = Math.min(scale, maxDimensionPx / widthPx);
|
|
53
|
+
}
|
|
54
|
+
if (heightPx * scale > maxDimensionPx) {
|
|
55
|
+
scale = Math.min(scale, maxDimensionPx / heightPx);
|
|
56
|
+
}
|
|
57
|
+
const capped = scale < 1;
|
|
58
|
+
if (capped) {
|
|
59
|
+
widthPx = Math.max(1, Math.floor(widthPx * scale));
|
|
60
|
+
heightPx = Math.max(1, Math.floor(heightPx * scale));
|
|
61
|
+
}
|
|
62
|
+
return { widthPx, heightPx, effectiveDpi: dpi * scale, capped };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Rasterize `meshes` into a shaded RGBA image covering their projected extent
|
|
66
|
+
* in the kept half of the section (`viewDepth` in `[0, occluderDepth]`).
|
|
67
|
+
*
|
|
68
|
+
* Returns `null` when nothing lands in that window or the extent is
|
|
69
|
+
* degenerate: there is no rectangle to place an image at, and the caller must
|
|
70
|
+
* fall back to line work only rather than emit a zero-size image.
|
|
71
|
+
*/
|
|
72
|
+
export function buildColorRaster(meshes, plane, occluderDepth, options) {
|
|
73
|
+
const width = Math.floor(options.widthPx);
|
|
74
|
+
const height = Math.floor(options.heightPx);
|
|
75
|
+
if (!Number.isFinite(width) || !Number.isFinite(height) || width < 1 || height < 1) {
|
|
76
|
+
throw new Error(`Invalid colour raster size: ${options.widthPx}x${options.heightPx}px. Expected at least 1x1 (use fitRasterPixels).`);
|
|
77
|
+
}
|
|
78
|
+
const bounds = computeProjectedBounds(meshes, plane, occluderDepth, 0);
|
|
79
|
+
const boundsWidth = bounds.max.x - bounds.min.x;
|
|
80
|
+
const boundsHeight = bounds.max.y - bounds.min.y;
|
|
81
|
+
if (!Number.isFinite(boundsWidth) ||
|
|
82
|
+
!Number.isFinite(boundsHeight) ||
|
|
83
|
+
boundsWidth < EPSILON ||
|
|
84
|
+
boundsHeight < EPSILON) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
const depthBias = options.depthBias ?? 0.001;
|
|
88
|
+
const target = {
|
|
89
|
+
// Zero-filled: fully transparent, so the paper shows through anywhere no
|
|
90
|
+
// surface projects.
|
|
91
|
+
pixels: new Uint8ClampedArray(width * height * 4),
|
|
92
|
+
depth: new Float32Array(width * height).fill(Infinity),
|
|
93
|
+
width,
|
|
94
|
+
height,
|
|
95
|
+
bounds,
|
|
96
|
+
};
|
|
97
|
+
const viewDir = getViewDirectionForPlane(plane);
|
|
98
|
+
for (const mesh of meshes) {
|
|
99
|
+
if (mesh.color[3] >= OPAQUE_ALPHA) {
|
|
100
|
+
rasterizeShadedMesh(target, mesh, plane, viewDir, occluderDepth, depthBias, false);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
for (const mesh of meshes) {
|
|
104
|
+
if (mesh.color[3] < OPAQUE_ALPHA) {
|
|
105
|
+
rasterizeShadedMesh(target, mesh, plane, viewDir, occluderDepth, depthBias, true);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return { pixels: target.pixels, width, height, bounds };
|
|
109
|
+
}
|
|
110
|
+
function rasterizeShadedMesh(target, mesh, plane, viewDir, occluderDepth, depthBias, blend) {
|
|
111
|
+
const { positions, indices, origin, color } = mesh;
|
|
112
|
+
const triangleCount = Math.floor(indices.length / 3);
|
|
113
|
+
const alpha = color[3];
|
|
114
|
+
for (let t = 0; t < triangleCount; t++) {
|
|
115
|
+
const i0 = indices[t * 3];
|
|
116
|
+
const i1 = indices[t * 3 + 1];
|
|
117
|
+
const i2 = indices[t * 3 + 2];
|
|
118
|
+
// Face normal from LOCAL positions: the differences cancel `origin`, so
|
|
119
|
+
// there is no world fold to do here (unlike depth/projection below).
|
|
120
|
+
const lambert = faceLambert(positions, i0, i1, i2, viewDir);
|
|
121
|
+
if (lambert === null)
|
|
122
|
+
continue; // zero-area triangle
|
|
123
|
+
const v0 = getVertex(positions, i0, origin);
|
|
124
|
+
const v1 = getVertex(positions, i1, origin);
|
|
125
|
+
const v2 = getVertex(positions, i2, origin);
|
|
126
|
+
const d0 = -signedDepth(v0, plane);
|
|
127
|
+
const d1 = -signedDepth(v1, plane);
|
|
128
|
+
const d2 = -signedDepth(v2, plane);
|
|
129
|
+
const inWindow = (d) => d >= 0 && d <= occluderDepth;
|
|
130
|
+
if (!inWindow(d0) && !inWindow(d1) && !inWindow(d2))
|
|
131
|
+
continue;
|
|
132
|
+
const uv0 = projectPointForPlane(v0, plane);
|
|
133
|
+
const uv1 = projectPointForPlane(v1, plane);
|
|
134
|
+
const uv2 = projectPointForPlane(v2, plane);
|
|
135
|
+
const r = Math.round(255 * color[0] * lambert);
|
|
136
|
+
const g = Math.round(255 * color[1] * lambert);
|
|
137
|
+
const b = Math.round(255 * color[2] * lambert);
|
|
138
|
+
rasterizeShadedTriangle(target, { x: uv0.x, y: uv0.y, depth: d0 }, { x: uv1.x, y: uv1.y, depth: d1 }, { x: uv2.x, y: uv2.y, depth: d2 }, r, g, b, alpha, depthBias, blend);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* `0.4 + 0.6 * abs(dot(n, viewDir))` for the triangle's own plane, or `null`
|
|
143
|
+
* when the triangle has no area (no normal exists, nothing to shade).
|
|
144
|
+
*/
|
|
145
|
+
function faceLambert(positions, i0, i1, i2, viewDir) {
|
|
146
|
+
const ax = positions[i1 * 3] - positions[i0 * 3];
|
|
147
|
+
const ay = positions[i1 * 3 + 1] - positions[i0 * 3 + 1];
|
|
148
|
+
const az = positions[i1 * 3 + 2] - positions[i0 * 3 + 2];
|
|
149
|
+
const bx = positions[i2 * 3] - positions[i0 * 3];
|
|
150
|
+
const by = positions[i2 * 3 + 1] - positions[i0 * 3 + 1];
|
|
151
|
+
const bz = positions[i2 * 3 + 2] - positions[i0 * 3 + 2];
|
|
152
|
+
const nx = ay * bz - az * by;
|
|
153
|
+
const ny = az * bx - ax * bz;
|
|
154
|
+
const nz = ax * by - ay * bx;
|
|
155
|
+
const len = Math.sqrt(nx * nx + ny * ny + nz * nz);
|
|
156
|
+
if (!(len > 0))
|
|
157
|
+
return null;
|
|
158
|
+
const dot = (nx * viewDir.x + ny * viewDir.y + nz * viewDir.z) / len;
|
|
159
|
+
return AMBIENT + DIFFUSE * Math.abs(dot);
|
|
160
|
+
}
|
|
161
|
+
function rasterizeShadedTriangle(target, p0, p1, p2, r, g, b, alpha, depthBias, blend) {
|
|
162
|
+
const { pixels, depth, width, height, bounds } = target;
|
|
163
|
+
const boundsWidth = bounds.max.x - bounds.min.x;
|
|
164
|
+
const boundsHeight = bounds.max.y - bounds.min.y;
|
|
165
|
+
// Edge-to-edge mapping (see the module docblock): the grid spans `bounds`
|
|
166
|
+
// exactly, and row 0 is the TOP (world max.y).
|
|
167
|
+
const toPixelX = (x) => ((x - bounds.min.x) / boundsWidth) * width;
|
|
168
|
+
const toPixelY = (y) => ((bounds.max.y - y) / boundsHeight) * height;
|
|
169
|
+
const px0 = { x: toPixelX(p0.x), y: toPixelY(p0.y) };
|
|
170
|
+
const px1 = { x: toPixelX(p1.x), y: toPixelY(p1.y) };
|
|
171
|
+
const px2 = { x: toPixelX(p2.x), y: toPixelY(p2.y) };
|
|
172
|
+
const minX = Math.max(0, Math.floor(Math.min(px0.x, px1.x, px2.x)));
|
|
173
|
+
const maxX = Math.min(width - 1, Math.ceil(Math.max(px0.x, px1.x, px2.x)));
|
|
174
|
+
const minY = Math.max(0, Math.floor(Math.min(px0.y, px1.y, px2.y)));
|
|
175
|
+
const maxY = Math.min(height - 1, Math.ceil(Math.max(px0.y, px1.y, px2.y)));
|
|
176
|
+
for (let py = minY; py <= maxY; py++) {
|
|
177
|
+
for (let px = minX; px <= maxX; px++) {
|
|
178
|
+
const bary = barycentricCoords(px + 0.5, py + 0.5, px0, px1, px2);
|
|
179
|
+
if (bary.u < 0 || bary.v < 0 || bary.w < 0)
|
|
180
|
+
continue;
|
|
181
|
+
const d = bary.u * p0.depth + bary.v * p1.depth + bary.w * p2.depth;
|
|
182
|
+
// The above-cut portion of a straddling triangle is cut away by the
|
|
183
|
+
// section and must not paint anything in the kept half.
|
|
184
|
+
if (d < -depthBias)
|
|
185
|
+
continue;
|
|
186
|
+
const idx = py * width + px;
|
|
187
|
+
const o = idx * 4;
|
|
188
|
+
if (!blend) {
|
|
189
|
+
if (d >= depth[idx])
|
|
190
|
+
continue;
|
|
191
|
+
depth[idx] = d;
|
|
192
|
+
pixels[o] = r;
|
|
193
|
+
pixels[o + 1] = g;
|
|
194
|
+
pixels[o + 2] = b;
|
|
195
|
+
pixels[o + 3] = 255;
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
// Translucent pass: tested against the opaque depth buffer, never
|
|
199
|
+
// writing it, so glass in front of a wall composites over the wall and
|
|
200
|
+
// glass behind it is dropped.
|
|
201
|
+
if (d > depth[idx] + depthBias)
|
|
202
|
+
continue;
|
|
203
|
+
// STRAIGHT-alpha "over", not the premultiplied form. `pixels` is declared
|
|
204
|
+
// straight alpha (see ColorRaster), and the premultiplied formula
|
|
205
|
+
// `a*src + (1-a)*dst` applied to straight values silently scales the
|
|
206
|
+
// colour by alpha a SECOND time when the destination is transparent
|
|
207
|
+
// paper: a 0.5-alpha glass pane over nothing stored 0.5*colour with
|
|
208
|
+
// alpha 0.5, and the PDF then composited that again, printing the glass
|
|
209
|
+
// about twice as dark as the viewport shows it. Over an OPAQUE wall
|
|
210
|
+
// (dstA = 255) the two formulas agree, which is why it looked right
|
|
211
|
+
// wherever there was something behind the glass.
|
|
212
|
+
const dstA = pixels[o + 3] / 255;
|
|
213
|
+
const outA = alpha + dstA * (1 - alpha);
|
|
214
|
+
if (outA <= 0)
|
|
215
|
+
continue;
|
|
216
|
+
const srcW = alpha / outA;
|
|
217
|
+
const dstW = (dstA * (1 - alpha)) / outA;
|
|
218
|
+
pixels[o] = Math.round(srcW * r + dstW * pixels[o]);
|
|
219
|
+
pixels[o + 1] = Math.round(srcW * g + dstW * pixels[o + 1]);
|
|
220
|
+
pixels[o + 2] = Math.round(srcW * b + dstW * pixels[o + 2]);
|
|
221
|
+
pixels[o + 3] = Math.round(outA * 255);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=color-raster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-raster.js","sourceRoot":"","sources":["../src/color-raster.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,8 +28,25 @@ export interface GeneratorOptions {
|
|
|
28
28
|
* this footprint outline instead of the normal-based mesh silhouette (which
|
|
29
29
|
* ifc-lite's unreliable winding can break). Return `null` to fall back to
|
|
30
30
|
* silhouette extraction for that mesh.
|
|
31
|
+
*
|
|
32
|
+
* CARDINAL planes only: the callback receives just (axis, flipped) and its
|
|
33
|
+
* output is in cardinal projection space, so on a custom (face-picked)
|
|
34
|
+
* plane the generator bypasses it and uses the plane-aware silhouette path
|
|
35
|
+
* instead (PR #2644 review).
|
|
31
36
|
*/
|
|
32
37
|
outlineProvider?: (mesh: MeshData, axis: SectionAxis, flipped: boolean) => MeshOutline2D | null;
|
|
38
|
+
/**
|
|
39
|
+
* Pre-projected lines merged in BEFORE the hidden-line stage (issue #2042):
|
|
40
|
+
* the section RIM of a CPU half-space clip. Build them with
|
|
41
|
+
* `projectWorldLineSeeds`, never a hand-rolled projection — they must share
|
|
42
|
+
* this config's plane basis and view-depth convention.
|
|
43
|
+
*
|
|
44
|
+
* They are classified alongside the projection lines even though they carry
|
|
45
|
+
* `category: 'cut'`: cutter-produced cut lines sit in the plane at view
|
|
46
|
+
* depth 0 and can never be occluded, but on an oblique 3D view a rim edge
|
|
47
|
+
* can sit behind other geometry and must print dashed.
|
|
48
|
+
*/
|
|
49
|
+
extraLines?: DrawingLine[];
|
|
33
50
|
/** Progress callback */
|
|
34
51
|
onProgress?: (stage: string, progress: number) => void;
|
|
35
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawing-generator.d.ts","sourceRoot":"","sources":["../src/drawing-generator.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EACV,aAAa,EAEb,WAAW,EACX,SAAS,EACT,WAAW,EAKX,YAAY,EAEZ,aAAa,EACd,MAAM,YAAY,CAAC;AASpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAoB1D,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,qCAAqC;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,6DAA6D;IAC7D,iBAAiB,EAAE,OAAO,CAAC;IAC3B,4CAA4C;IAC5C,YAAY,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB
|
|
1
|
+
{"version":3,"file":"drawing-generator.d.ts","sourceRoot":"","sources":["../src/drawing-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -148,9 +148,22 @@ export class Drawing2DGenerator {
|
|
|
148
148
|
const meshesForSilhouette = meshes.filter((m) => !isFeatureElementType(m.ifcType) &&
|
|
149
149
|
!coveredKeys.has(makeEntityKey(m.modelIndex ?? 0, m.expressId)));
|
|
150
150
|
const viewDir = getViewDirectionForPlane(config.plane);
|
|
151
|
+
// The outline provider contract is CARDINAL-only: it receives just
|
|
152
|
+
// (axis, flipped) and returns contours and axisMin/axisMax in cardinal
|
|
153
|
+
// projection space (the Rust `meshOutline2d` binding knows nothing of
|
|
154
|
+
// custom planes). The depth raster and every other line producer work
|
|
155
|
+
// in the custom tangent/bitangent basis when `customPlane` is set, so
|
|
156
|
+
// provider output would be band-classified against the wrong offset
|
|
157
|
+
// and occlusion-sampled against a raster in a DIFFERENT coordinate
|
|
158
|
+
// system (PR #2644 review). Bypass the provider on custom planes and
|
|
159
|
+
// take the silhouette path below, which is plane-aware end to end.
|
|
160
|
+
// Do NOT "optimise" the provider back in here without making its
|
|
161
|
+
// callback contract (and the WASM binding behind it) custom-basis
|
|
162
|
+
// aware.
|
|
163
|
+
const outlineProvider = config.plane.customPlane ? undefined : opts.outlineProvider;
|
|
151
164
|
for (const mesh of meshesForSilhouette) {
|
|
152
|
-
const outline =
|
|
153
|
-
?
|
|
165
|
+
const outline = outlineProvider
|
|
166
|
+
? outlineProvider(mesh, config.plane.axis, config.plane.flipped)
|
|
154
167
|
: null;
|
|
155
168
|
if (outline && outline.contours.length > 0) {
|
|
156
169
|
projectionLines.push(...outlineToProjectionLines(outline, {
|
|
@@ -181,8 +194,12 @@ export class Drawing2DGenerator {
|
|
|
181
194
|
// ─────────────────────────────────────────────────────────────────────────
|
|
182
195
|
// STAGE 5: Hidden Line Removal
|
|
183
196
|
// ─────────────────────────────────────────────────────────────────────────
|
|
184
|
-
|
|
185
|
-
|
|
197
|
+
// Caller-supplied rim lines (issue #2042) are classifiable like projection
|
|
198
|
+
// lines despite their 'cut' category — see `GeneratorOptions.extraLines`.
|
|
199
|
+
const extraLines = opts.extraLines ?? [];
|
|
200
|
+
const classifiable = [...extraLines, ...projectionLines];
|
|
201
|
+
let allLines = [...cutLines, ...classifiable];
|
|
202
|
+
if (opts.includeHiddenLines && classifiable.length > 0) {
|
|
186
203
|
report('hidden', 0);
|
|
187
204
|
// Compute bounds for depth buffer
|
|
188
205
|
const bounds = this.computeBounds(allLines);
|
|
@@ -198,13 +215,22 @@ export class Drawing2DGenerator {
|
|
|
198
215
|
// changes occlusion — and dropping it could only ever REVEAL a
|
|
199
216
|
// through-wall line that should stay hidden. Don't "tidy" this to the
|
|
200
217
|
// filtered set.
|
|
201
|
-
|
|
218
|
+
//
|
|
219
|
+
// The FULL plane config is passed (issue #2639) so a custom
|
|
220
|
+
// (face-picked) plane classifies in its own basis instead of the stale
|
|
221
|
+
// cardinal fields.
|
|
222
|
+
this.hiddenLineClassifier.buildDepthBuffer(meshes, config.plane, occluderDepth, bounds);
|
|
202
223
|
// Occlusion only DOWNGRADES visible → hidden; it can never reveal an
|
|
203
224
|
// already-dashed OVERHEAD line. So classify the visible (below-cut)
|
|
204
225
|
// projection lines and pass overhead lines through unchanged — otherwise
|
|
205
226
|
// an unoccluded overhead beam would be re-marked 'visible' (solid).
|
|
206
|
-
|
|
207
|
-
|
|
227
|
+
//
|
|
228
|
+
// The split is by SOURCE (`classifiable` vs the cutter's own
|
|
229
|
+
// `cutLines`), not by category: `extraLines` carry `category: 'cut'`
|
|
230
|
+
// yet must be classified. Filtering `allLines` on `category !== 'cut'`
|
|
231
|
+
// would both skip them AND drop them from the recombination below.
|
|
232
|
+
const toClassify = classifiable.filter((l) => l.visibility === 'visible');
|
|
233
|
+
const passthrough = classifiable.filter((l) => l.visibility !== 'visible');
|
|
208
234
|
const classifiedLines = this.hiddenLineClassifier.applyVisibility(toClassify);
|
|
209
235
|
// Recombine with cut lines (always visible) + overhead pass-through.
|
|
210
236
|
allLines = [...cutLines, ...classifiedLines, ...passthrough];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawing-generator.js","sourceRoot":"","sources":["../src/drawing-generator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"drawing-generator.js","sourceRoot":"","sources":["../src/drawing-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/edge-extractor.d.ts
CHANGED
|
@@ -36,6 +36,23 @@ export declare class EdgeExtractor {
|
|
|
36
36
|
*/
|
|
37
37
|
edgesToProjectionLines(edges: EdgeData[], plane: SectionPlaneConfig, depths: ProjectionBandDepths): DrawingLine[];
|
|
38
38
|
private getVertex;
|
|
39
|
+
/**
|
|
40
|
+
* `-1` when the mesh is a closed solid wound INWARD, `+1` otherwise
|
|
41
|
+
* (issue #2682).
|
|
42
|
+
*
|
|
43
|
+
* Six times the enclosed signed volume is `Σ v0 · (v1 × v2)`, positive for
|
|
44
|
+
* outward winding. It is translation-invariant for a closed mesh, so the sum
|
|
45
|
+
* is taken relative to the first vertex to keep the terms small and the
|
|
46
|
+
* cancellation honest on RTC-shifted coordinates.
|
|
47
|
+
*
|
|
48
|
+
* `+1` is the deliberate answer whenever the test is inconclusive — an open
|
|
49
|
+
* shell, a flat sheet, or an inconsistently wound mesh integrates to ~0 (or
|
|
50
|
+
* to an arbitrary number) and gets the pre-existing behaviour rather than a
|
|
51
|
+
* coin-flip reorientation. Positions are read directly rather than through
|
|
52
|
+
* `getVertex` because the per-element `origin` is a pure translation and
|
|
53
|
+
* therefore cannot change the result.
|
|
54
|
+
*/
|
|
55
|
+
private windingSign;
|
|
39
56
|
private computeFaceNormal;
|
|
40
57
|
private registerEdge;
|
|
41
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge-extractor.d.ts","sourceRoot":"","sources":["../src/edge-extractor.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA4BlF,OAAO,EACL,KAAK,oBAAoB,EAK1B,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"edge-extractor.d.ts","sourceRoot":"","sources":["../src/edge-extractor.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA4BlF,OAAO,EACL,KAAK,oBAAoB,EAK1B,MAAM,uBAAuB,CAAC;AA+D/B,qBAAa,aAAa;IACxB,wCAAwC;IACxC,OAAO,CAAC,WAAW,CAAS;gBAEhB,kBAAkB,GAAE,MAAW;IAI3C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE;IA+FxC;;;OAGG;IACH,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,GAAG,QAAQ,EAAE;IA6BtE;;;;;;;;;;;OAWG;IACH,sBAAsB,CACpB,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,oBAAoB,GAC3B,WAAW,EAAE;IAyDhB,OAAO,CAAC,SAAS;IAejB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,WAAW;IA6CnB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,YAAY;CAoBrB"}
|