@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.
Files changed (73) hide show
  1. package/dist/color-raster.d.ts +95 -0
  2. package/dist/color-raster.d.ts.map +1 -0
  3. package/dist/color-raster.js +225 -0
  4. package/dist/color-raster.js.map +1 -0
  5. package/dist/drawing-generator.d.ts +17 -0
  6. package/dist/drawing-generator.d.ts.map +1 -1
  7. package/dist/drawing-generator.js +33 -7
  8. package/dist/drawing-generator.js.map +1 -1
  9. package/dist/edge-extractor.d.ts +17 -0
  10. package/dist/edge-extractor.d.ts.map +1 -1
  11. package/dist/edge-extractor.js +104 -1
  12. package/dist/edge-extractor.js.map +1 -1
  13. package/dist/half-space-clip.d.ts +77 -0
  14. package/dist/half-space-clip.d.ts.map +1 -0
  15. package/dist/half-space-clip.js +257 -0
  16. package/dist/half-space-clip.js.map +1 -0
  17. package/dist/hidden-line-raster.d.ts +50 -0
  18. package/dist/hidden-line-raster.d.ts.map +1 -0
  19. package/dist/hidden-line-raster.js +103 -0
  20. package/dist/hidden-line-raster.js.map +1 -0
  21. package/dist/hidden-line.d.ts +34 -21
  22. package/dist/hidden-line.d.ts.map +1 -1
  23. package/dist/hidden-line.js +107 -214
  24. package/dist/hidden-line.js.map +1 -1
  25. package/dist/index.d.ts +11 -3
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +25 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/line-merger.d.ts.map +1 -1
  30. package/dist/line-merger.js +88 -44
  31. package/dist/line-merger.js.map +1 -1
  32. package/dist/pdf-scale.d.ts +17 -0
  33. package/dist/pdf-scale.d.ts.map +1 -1
  34. package/dist/pdf-scale.js +38 -0
  35. package/dist/pdf-scale.js.map +1 -1
  36. package/dist/polygon-builder.d.ts +31 -0
  37. package/dist/polygon-builder.d.ts.map +1 -1
  38. package/dist/polygon-builder.js +60 -3
  39. package/dist/polygon-builder.js.map +1 -1
  40. package/dist/profile-projector.js +17 -9
  41. package/dist/profile-projector.js.map +1 -1
  42. package/dist/projection-bands.d.ts +13 -6
  43. package/dist/projection-bands.d.ts.map +1 -1
  44. package/dist/projection-bands.js +15 -3
  45. package/dist/projection-bands.js.map +1 -1
  46. package/dist/raster-core.d.ts +71 -0
  47. package/dist/raster-core.d.ts.map +1 -0
  48. package/dist/raster-core.js +89 -0
  49. package/dist/raster-core.js.map +1 -0
  50. package/dist/section-cutter.d.ts +8 -0
  51. package/dist/section-cutter.d.ts.map +1 -1
  52. package/dist/section-cutter.js +59 -11
  53. package/dist/section-cutter.js.map +1 -1
  54. package/dist/sheet/index.d.ts +2 -0
  55. package/dist/sheet/index.d.ts.map +1 -1
  56. package/dist/sheet/index.js +1 -0
  57. package/dist/sheet/index.js.map +1 -1
  58. package/dist/sheet/scale-stamp.d.ts +130 -0
  59. package/dist/sheet/scale-stamp.d.ts.map +1 -0
  60. package/dist/sheet/scale-stamp.js +277 -0
  61. package/dist/sheet/scale-stamp.js.map +1 -0
  62. package/dist/types.d.ts +26 -1
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/types.js.map +1 -1
  65. package/dist/view-plane.d.ts +99 -0
  66. package/dist/view-plane.d.ts.map +1 -0
  67. package/dist/view-plane.js +183 -0
  68. package/dist/view-plane.js.map +1 -0
  69. package/dist/world-line-seeds.d.ts +41 -0
  70. package/dist/world-line-seeds.d.ts.map +1 -0
  71. package/dist/world-line-seeds.js +43 -0
  72. package/dist/world-line-seeds.js.map +1 -0
  73. package/package.json +2 -2
package/dist/types.d.ts CHANGED
@@ -109,8 +109,20 @@ export interface DrawingLine {
109
109
  ifcType: string;
110
110
  /** Model index for multi-model federation */
111
111
  modelIndex: number;
112
- /** Distance from section plane (for depth sorting) */
112
+ /**
113
+ * VIEW DEPTH at the line's start point (issue #2639, see the convention
114
+ * comment in projection-bands.ts): the negated flip-adjusted signed depth,
115
+ * so 0 at the cut plane, increasing into the kept half, smaller means
116
+ * nearer the viewer. Hidden-line removal compares this against the
117
+ * occluder depth buffer, which stores the same quantity.
118
+ */
113
119
  depth: number;
120
+ /**
121
+ * View depth at the line's END point, when it differs from `depth` (e.g.
122
+ * a sloped edge). The hidden-line classifier lerps `depth`..`depthEnd`
123
+ * along the 2D line per sample; omitted means constant depth.
124
+ */
125
+ depthEnd?: number;
114
126
  }
115
127
  /**
116
128
  * A polygon from section cut (used for hatching)
@@ -165,6 +177,19 @@ export interface CutSegment {
165
177
  * Carried so the polygon builder can split one entity's cut into per-material
166
178
  * loops (material-layer walls/slabs). Absent when the cutter has no colour. */
167
179
  color?: [number, number, number, number];
180
+ /** Max |coordinate| of the source triangle's LOCAL vertex positions —
181
+ * i.e. the `Float32Array` values BEFORE the per-mesh RTC `origin` was
182
+ * added. This is the quantity that actually bounds float32 rounding
183
+ * noise (quantization happens when the mesh is authored in its local
184
+ * frame, not when a double-precision `origin` is added afterward), so
185
+ * it must be used instead of `p0_2d`/`p1_2d`'s world-frame magnitude
186
+ * when sizing a scale-aware weld tolerance — otherwise a small element
187
+ * sitting at a large RTC origin gets a tolerance scaled to its
188
+ * distance from the model origin instead of its own extent (#2622).
189
+ * Absent when the segment wasn't produced by `SectionCutter` (e.g.
190
+ * hand-built test fixtures), in which case callers fall back to the
191
+ * segment's own 2D coordinate magnitude. */
192
+ localMaxCoord?: number;
168
193
  }
169
194
  /**
170
195
  * Result from section cutting a single mesh
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAMD,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,IAAI,EAAE,WAAW,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE;QACZ,MAAM,EAAK,IAAI,CAAC;QAChB,iDAAiD;QACjD,QAAQ,EAAG,MAAM,CAAC;QAClB,qEAAqE;QACrE,MAAM,EAAK,IAAI,CAAC;QAChB,OAAO,EAAI,IAAI,CAAC;QAChB,SAAS,EAAE,IAAI,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,iFAAiF;IACjF,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sCAAsC;IACtC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,sBAAsB,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAK/D,CAAC;AAMF,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,iDAAiD;IACjD,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,sCAAsC;IACtC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd;AAMD;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,KAAK,GACL,YAAY,GACZ,QAAQ,GACR,YAAY,GACZ,QAAQ,GACR,UAAU,GACV,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAM/D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,QAAQ,EAAE,YAAY,CAAC;IACvB,2CAA2C;IAC3C,UAAU,EAAE,eAAe,CAAC;IAC5B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,OAAO,EAAE,SAAS,CAAC;IACnB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,KAAK,EAAE,OAAO,CAAC;IACf;;;;;;4CAMwC;IACxC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC;;;;;;wFAMoF;IACpF,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAMD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4BAA4B;IAC5B,EAAE,EAAE,IAAI,CAAC;IACT,0BAA0B;IAC1B,EAAE,EAAE,IAAI,CAAC;IACT,+BAA+B;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,6BAA6B;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB;;oFAEgF;IAChF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC;;;;;;;;;;;iDAW6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,oCAAoC;IACpC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qDAAqD;IACrD,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB;IACvB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,wCAAwC;IACxC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,4BAA4B;IAC5B,KAAK,EAAE;QACL,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAMD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iCAAiC;IACjC,MAAM,EAAE,aAAa,CAAC;IAEtB,2BAA2B;IAC3B,KAAK,EAAE,WAAW,EAAE,CAAC;IAErB,kCAAkC;IAClC,WAAW,EAAE,cAAc,EAAE,CAAC;IAE9B;;;;2DAIuD;IACvD,oBAAoB,CAAC,EAAE,cAAc,EAAE,CAAC;IAExC,wDAAwD;IACxD,kBAAkB,EAAE,cAAc,EAAE,CAAC;IAErC,uCAAuC;IACvC,MAAM,EAAE,QAAQ,CAAC;IAEjB,4BAA4B;IAC5B,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAMD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,mBAAmB;IACnB,EAAE,EAAE,IAAI,CAAC;IACT,oBAAoB;IACpB,EAAE,EAAE,IAAI,CAAC;IACT,uDAAuD;IACvD,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,wDAAwD;IACxD,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACvC,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,WAAW,EAAE,YAAY,CAAC;IAC1B,iCAAiC;IACjC,UAAU,EAAE,WAAW,CAAC;IACxB,oEAAoE;IACpE,UAAU,EAAE,YAAY,CAAC;IACzB;;;OAGG;IACH,SAAS,EAAE,YAAY,CAAC;IACxB,kFAAkF;IAClF,YAAY,EAAE,YAAY,CAAC;IAC3B,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAE9C;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAE7E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAWvF;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,CAIhF;AAMD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,mBAAmB,GACnB,oBAAoB,GACpB,0BAA0B,GAC1B,0BAA0B,GAC1B,mBAAmB,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,kBAAkB,GAClB,qBAAqB,GACrB,iBAAiB,GACjB,kBAAkB,GAClB,qBAAqB,GACrB,WAAW,GACX,WAAW,GACX,kBAAkB,GAClB,mBAAmB,GACnB,aAAa,GACb,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAC9B,cAAc,GACd,uBAAuB,GACvB,yBAAyB,GACzB,uBAAuB,GACvB,yBAAyB,GACzB,qBAAqB,GACrB,kBAAkB,GAClB,mBAAmB,GACnB,oBAAoB,GACpB,aAAa,GACb,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sBAAsB;IACtB,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACpC,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,QAAQ,EAAE;QACR,GAAG,EAAE,IAAI,CAAC;QACV,GAAG,EAAE,IAAI,CAAC;KACX,CAAC;IACF,sCAAsC;IACtC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,6CAA6C;IAC7C,kBAAkB,CAAC,EAAE,sBAAsB,CAAC;IAC5C,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,4DAA4D;IAC5D,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,wDAAwD;IACxD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAEnE;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;AAEjF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,iBAAiB,GACjB,YAAY,GACZ,UAAU,GACV,eAAe,GACf,YAAY,GACZ,WAAW,GACX,cAAc,GACd,gBAAgB,GAChB,WAAW,GACX,cAAc,GACd,WAAW,GACX,WAAW,GACX,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,CAAC;IACnB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,gCAAgC;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,uCAAuC;IACvC,SAAS,EAAE,SAAS,CAAC;IACrB,yCAAyC;IACzC,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAMD;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,YAAY,GACZ,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,aAAa,GACb,aAAa,GACb,cAAc,GACd,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kBAAkB;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,mBAAmB,GACnB,qBAAqB,GACrB,qBAAqB,GACrB,oBAAoB,GACpB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAM9C;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,aAAa,GACb,aAAa,GACb,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,aAAa,EAAE,UAAU,CAAC;IAC1B,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;CACf;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,aAAa,CAAC,EAAE;QACd,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;KAC3B,CAAC;IACF,mDAAmD;IACnD,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,MAAM,CAAC,EAAE;QACP,GAAG,EAAE,IAAI,CAAC;QACV,GAAG,EAAE,IAAI,CAAC;KACX,CAAC;IACF,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,SAAS;IACvD,gDAAgD;IAChD,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,wBAAwB;IACxB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,uCAAuC;IACvC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,iCAAiC;IACjC,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAgF/D,MAAM,CAAC,MAAM,sBAAsB,GAAiC;IAClE,eAAe,EAAE,EAAE;IACnB,kBAAkB,EAAE,IAAI;IACxB,WAAW,EAAE,EAAE;IACf,KAAK,EAAE,GAAG;CACX,CAAC;AAiTF;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,QAAgB;IAChE,OAAO,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAc;IAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,mCAAmC,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,uDAAuD,CAAC,CAAC;IAC7G,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,KAA+C;IACtE,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACzE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAgF/D,MAAM,CAAC,MAAM,sBAAsB,GAAiC;IAClE,eAAe,EAAE,EAAE;IACnB,kBAAkB,EAAE,IAAI;IACxB,WAAW,EAAE,EAAE;IACf,KAAK,EAAE,GAAG;CACX,CAAC;AA0UF;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,QAAgB;IAChE,OAAO,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAc;IAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,mCAAmC,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,uDAAuD,CAAC,CAAC;IAC7G,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,KAA+C;IACtE,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACzE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvE,CAAC"}
@@ -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"}
@@ -0,0 +1,183 @@
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 { vec3, vec3Cross, vec3Dot, vec3Length, vec3Normalize, vec3Sub } from './math.js';
5
+ // ═══════════════════════════════════════════════════════════════════════════
6
+ // WORLD BOUNDS
7
+ // ═══════════════════════════════════════════════════════════════════════════
8
+ /**
9
+ * World-space AABB of `meshes`, folding each mesh's local frame:
10
+ * `world = origin + positions[3i..3i+3]`.
11
+ *
12
+ * Reading `positions` without adding `origin` is the standing local-frame
13
+ * defect in this codebase (see `MeshData.origin`): it reports a box around
14
+ * the model ORIGIN instead of around the model, which would place the
15
+ * synthetic camera plane in the wrong place entirely.
16
+ *
17
+ * Returns `null` when no mesh contributes a vertex — the caller must decide
18
+ * what an empty view means rather than receive an inverted/infinite box.
19
+ */
20
+ export function worldBoundsOfMeshes(meshes) {
21
+ let minX = Infinity, minY = Infinity, minZ = Infinity;
22
+ let maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;
23
+ let any = false;
24
+ for (const mesh of meshes) {
25
+ const { positions, origin } = mesh;
26
+ const ox = origin ? origin[0] : 0;
27
+ const oy = origin ? origin[1] : 0;
28
+ const oz = origin ? origin[2] : 0;
29
+ const vertexCount = Math.floor(positions.length / 3);
30
+ for (let i = 0; i < vertexCount; i++) {
31
+ const x = positions[i * 3] + ox;
32
+ const y = positions[i * 3 + 1] + oy;
33
+ const z = positions[i * 3 + 2] + oz;
34
+ if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z))
35
+ continue;
36
+ if (x < minX)
37
+ minX = x;
38
+ if (y < minY)
39
+ minY = y;
40
+ if (z < minZ)
41
+ minZ = z;
42
+ if (x > maxX)
43
+ maxX = x;
44
+ if (y > maxY)
45
+ maxY = y;
46
+ if (z > maxZ)
47
+ maxZ = z;
48
+ any = true;
49
+ }
50
+ }
51
+ if (!any)
52
+ return null;
53
+ return { min: vec3(minX, minY, minZ), max: vec3(maxX, maxY, maxZ) };
54
+ }
55
+ /** The eight corners of a world AABB, in a fixed order. */
56
+ export function worldBoundsCorners(bounds) {
57
+ const { min, max } = bounds;
58
+ const corners = [];
59
+ for (const x of [min.x, max.x]) {
60
+ for (const y of [min.y, max.y]) {
61
+ for (const z of [min.z, max.z]) {
62
+ corners.push(vec3(x, y, z));
63
+ }
64
+ }
65
+ }
66
+ return corners;
67
+ }
68
+ // ═══════════════════════════════════════════════════════════════════════════
69
+ // CAMERA PLANE
70
+ // ═══════════════════════════════════════════════════════════════════════════
71
+ /** Smallest cross-product length treated as "up is parallel to the view". */
72
+ const PARALLEL_EPSILON = 1e-6;
73
+ /**
74
+ * A reference up that is guaranteed not to be parallel to `viewDir`: world
75
+ * +Y unless the camera looks (near-)straight up or down, in which case world
76
+ * +Z. Without this, a top-down / bottom-up view — the single most common
77
+ * plan-drawing camera — produces a zero-length right vector and a basis full
78
+ * of NaN, i.e. a blank PDF.
79
+ */
80
+ function fallbackUp(viewDir) {
81
+ return Math.abs(viewDir.y) < 0.9 ? vec3(0, 1, 0) : vec3(0, 0, 1);
82
+ }
83
+ /**
84
+ * Build the synthetic section plane that represents the current camera view.
85
+ *
86
+ * @param camera World-space eye/target/up.
87
+ * @param worldBounds World AABB of everything that will be drawn (see
88
+ * {@link worldBoundsOfMeshes}).
89
+ *
90
+ * @throws when the camera degenerates (eye == target) or the bounds are
91
+ * non-finite — both would otherwise yield a NaN transform and a
92
+ * blank-but-plausible PDF page.
93
+ */
94
+ export function buildCameraSectionPlane(camera, worldBounds) {
95
+ const rawView = vec3Sub(camera.target, camera.position);
96
+ if (vec3Length(rawView) < PARALLEL_EPSILON) {
97
+ throw new Error('Cannot build a camera section plane: the camera position and target coincide, ' +
98
+ 'so the view direction is undefined.');
99
+ }
100
+ const viewDir = vec3Normalize(rawView);
101
+ for (const v of [worldBounds.min, worldBounds.max]) {
102
+ if (!Number.isFinite(v.x) || !Number.isFinite(v.y) || !Number.isFinite(v.z)) {
103
+ throw new Error('Cannot build a camera section plane: world bounds must be finite.');
104
+ }
105
+ }
106
+ // ── Orthonormal basis ───────────────────────────────────────────────────
107
+ // tangent = screen right
108
+ // bitangent = screen up, RE-ORTHOGONALISED against the view direction
109
+ // normal = −viewDir (points back at the viewer)
110
+ //
111
+ // `cross(tangent, bitangent) === normal` holds by construction, which is
112
+ // what keeps the page from coming out mirrored (#2119 defect class).
113
+ // NORMALISED before the parallel test below. `|cross(viewDir, up)|` is
114
+ // `|up| * sin(angle)`, so testing it against a fixed epsilon without
115
+ // normalising makes the threshold depend on the LENGTH of `up`: a long up
116
+ // vector that is genuinely almost parallel to the view still clears the
117
+ // epsilon, and the basis is then built from a direction that is numerically
118
+ // noise. Normalising first makes PARALLEL_EPSILON a pure angle tolerance.
119
+ const upHint = vec3Length(camera.up) < PARALLEL_EPSILON ? fallbackUp(viewDir) : vec3Normalize(camera.up);
120
+ let right = vec3Cross(viewDir, upHint);
121
+ if (vec3Length(right) < PARALLEL_EPSILON) {
122
+ right = vec3Cross(viewDir, fallbackUp(viewDir));
123
+ }
124
+ const tangent = vec3Normalize(right);
125
+ const bitangent = vec3Normalize(vec3Cross(tangent, viewDir));
126
+ const normal = vec3(-viewDir.x, -viewDir.y, -viewDir.z);
127
+ // ── Plane placement: strictly in front of every bounds corner ───────────
128
+ // `s = dot(corner, viewDir)` grows AWAY from the viewer, so the nearest
129
+ // corner is at `sMin`. Putting the plane a pad before `sMin` guarantees
130
+ // every corner has a strictly positive view depth.
131
+ const corners = worldBoundsCorners(worldBounds);
132
+ let sMin = Infinity;
133
+ let sMax = -Infinity;
134
+ for (const c of corners) {
135
+ const s = vec3Dot(c, viewDir);
136
+ if (s < sMin)
137
+ sMin = s;
138
+ if (s > sMax)
139
+ sMax = s;
140
+ }
141
+ const span = sMax - sMin;
142
+ // Relative pad so it stays meaningful from a door handle to a city block,
143
+ // with an absolute floor for a degenerate (flat) box.
144
+ const pad = Math.max(span * 1e-3, 1e-4);
145
+ const planeS = sMin - pad;
146
+ // A genuine point ON the plane, used as the 2D basis origin so drawing
147
+ // coordinates stay centred on the model instead of on the world origin.
148
+ const center = vec3((worldBounds.min.x + worldBounds.max.x) / 2, (worldBounds.min.y + worldBounds.max.y) / 2, (worldBounds.min.z + worldBounds.max.z) / 2);
149
+ const shift = planeS - vec3Dot(center, viewDir);
150
+ const origin = vec3(center.x + viewDir.x * shift, center.y + viewDir.y * shift, center.z + viewDir.z * shift);
151
+ // dot(origin, normal) = −dot(origin, viewDir) = −planeS, computed in closed
152
+ // form rather than re-derived from `origin` so the offset carries no extra
153
+ // rounding from the point reconstruction above.
154
+ const distance = -planeS;
155
+ // Legacy cardinal fields. Every plane-aware helper (`signedDepth`,
156
+ // `projectPointForPlane`, `SectionCutter`, the depth raster) checks
157
+ // `customPlane` FIRST, so these only feed code that predates arbitrary
158
+ // planes. They are set to the closest cardinal reading of this plane
159
+ // rather than to a lie like `position: 0`.
160
+ const axis = dominantAxis(normal);
161
+ const position = origin[axis];
162
+ return {
163
+ plane: {
164
+ axis,
165
+ position,
166
+ flipped: false,
167
+ customPlane: { normal, distance, origin, tangent, bitangent },
168
+ },
169
+ viewDepth: span + pad * 2,
170
+ };
171
+ }
172
+ /** The cardinal axis the plane normal is most aligned with. */
173
+ function dominantAxis(normal) {
174
+ const ax = Math.abs(normal.x);
175
+ const ay = Math.abs(normal.y);
176
+ const az = Math.abs(normal.z);
177
+ if (ax >= ay && ax >= az)
178
+ return 'x';
179
+ if (ay >= az)
180
+ return 'y';
181
+ return 'z';
182
+ }
183
+ //# sourceMappingURL=view-plane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-plane.js","sourceRoot":"","sources":["../src/view-plane.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Project world-space 3D segments (the section rim produced by
3
+ * `half-space-clip.ts`) into classified `DrawingLine`s (issue #2042).
4
+ *
5
+ * # Defect class this module guards against
6
+ * **A line producer that invents its own projection or its own depth
7
+ * convention.** Everything else in this pipeline — the section cutter, the
8
+ * edge extractor, the projection bands, and the hidden-line depth raster —
9
+ * derives 2D coordinates from `projectPointForPlane` and view depths from
10
+ * `−signedDepth`. A producer that re-implements either (a hand-rolled dot
11
+ * product, a forgotten sign, a `depth` measured from the wrong side) emits
12
+ * lines that look right on their own but sit in a *different frame* from the
13
+ * depth buffer they are sampled against — so hidden-line removal silently
14
+ * dashes visible edges, or leaves occluded ones solid, with no error
15
+ * anywhere. This module does nothing but call those two shared helpers.
16
+ *
17
+ * The rim of a section cut is, by definition, geometry lying IN the cut
18
+ * plane, so it is emitted as `category: 'cut'` (heavy line weight). It is
19
+ * still handed to the hidden-line stage rather than drawn unconditionally:
20
+ * on an oblique 3D view the far side of a cut object is genuinely behind
21
+ * other geometry and must print dashed.
22
+ */
23
+ import type { DrawingLine, SectionPlaneConfig, Vec3 } from './types.js';
24
+ /** A world-space segment to be drawn, with its source element metadata. */
25
+ export interface WorldLineSeed {
26
+ start: Vec3;
27
+ end: Vec3;
28
+ entityId: number;
29
+ ifcType: string;
30
+ modelIndex: number;
31
+ }
32
+ /**
33
+ * Project `seeds` into drawing lines against `plane`.
34
+ *
35
+ * Segments whose 2D projection collapses to a point (an edge parallel to the
36
+ * view direction) are dropped: they carry no information on the page and
37
+ * would only add zero-length strokes for the line merger and the PDF writer
38
+ * to trip over.
39
+ */
40
+ export declare function projectWorldLineSeeds(seeds: readonly WorldLineSeed[], plane: SectionPlaneConfig): DrawingLine[];
41
+ //# sourceMappingURL=world-line-seeds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world-line-seeds.d.ts","sourceRoot":"","sources":["../src/world-line-seeds.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAW,kBAAkB,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAIjF,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,IAAI,CAAC;IACZ,GAAG,EAAE,IAAI,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,KAAK,EAAE,kBAAkB,GACxB,WAAW,EAAE,CA8Bf"}
@@ -0,0 +1,43 @@
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, point2DDistance } from './math.js';
5
+ import { projectPointForPlane, signedDepth } from './projection-bands.js';
6
+ /**
7
+ * Project `seeds` into drawing lines against `plane`.
8
+ *
9
+ * Segments whose 2D projection collapses to a point (an edge parallel to the
10
+ * view direction) are dropped: they carry no information on the page and
11
+ * would only add zero-length strokes for the line merger and the PDF writer
12
+ * to trip over.
13
+ */
14
+ export function projectWorldLineSeeds(seeds, plane) {
15
+ const lines = [];
16
+ for (const seed of seeds) {
17
+ const start = projectPointForPlane(seed.start, plane);
18
+ const end = projectPointForPlane(seed.end, plane);
19
+ if (point2DDistance(start, end) < EPSILON)
20
+ continue;
21
+ // VIEW depth (issue #2639): the negated flip-adjusted signed depth — 0 at
22
+ // the plane, growing into the kept half, smaller means nearer the viewer.
23
+ // Identical quantity to the one `buildDepthRaster` stores per pixel.
24
+ const depth = -signedDepth(seed.start, plane);
25
+ const depthEnd = -signedDepth(seed.end, plane);
26
+ const line = {
27
+ line: { start, end },
28
+ category: 'cut',
29
+ visibility: 'visible',
30
+ entityId: seed.entityId,
31
+ ifcType: seed.ifcType,
32
+ modelIndex: seed.modelIndex,
33
+ depth,
34
+ };
35
+ // "Omitted means constant depth" — only carry `depthEnd` when it differs,
36
+ // matching what every other producer in this package emits.
37
+ if (depthEnd !== depth)
38
+ line.depthEnd = depthEnd;
39
+ lines.push(line);
40
+ }
41
+ return lines;
42
+ }
43
+ //# sourceMappingURL=world-line-seeds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world-line-seeds.js","sourceRoot":"","sources":["../src/world-line-seeds.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA0B/D,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAW1E;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAA+B,EAC/B,KAAyB;IAEzB,MAAM,KAAK,GAAkB,EAAE,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAY,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/D,MAAM,GAAG,GAAY,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,OAAO;YAAE,SAAS;QAEpD,0EAA0E;QAC1E,0EAA0E;QAC1E,qEAAqE;QACrE,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAgB;YACxB,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;YACpB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK;SACN,CAAC;QACF,0EAA0E;QAC1E,4DAA4D;QAC5D,IAAI,QAAQ,KAAK,KAAK;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ifc-lite/drawing-2d",
3
- "version": "1.21.2",
3
+ "version": "2.1.0",
4
4
  "description": "2D architectural drawing generation from IFC models - section cuts, floor plans, and elevations",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -13,7 +13,7 @@
13
13
  }
14
14
  },
15
15
  "dependencies": {
16
- "@ifc-lite/geometry": "^3.8.2"
16
+ "@ifc-lite/geometry": "^3.8.3"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@webgpu/types": "^0.1.71",