@constructorfleet/sketchforge-engine 1.26.0 → 1.28.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 (200) hide show
  1. package/dist/cadAnalysis.d.ts +94 -0
  2. package/dist/cadAnalysis.d.ts.map +1 -0
  3. package/dist/cadAnalysis.js +157 -0
  4. package/dist/cadAnalysis.js.map +1 -0
  5. package/dist/cadBakeMetadata.d.ts +11 -2
  6. package/dist/cadBakeMetadata.d.ts.map +1 -1
  7. package/dist/cadBakeMetadata.js +9 -0
  8. package/dist/cadBakeMetadata.js.map +1 -1
  9. package/dist/cadProjection.d.ts.map +1 -1
  10. package/dist/cadProjection.js.map +1 -1
  11. package/dist/cadSection.d.ts.map +1 -1
  12. package/dist/cadShell.d.ts +143 -0
  13. package/dist/cadShell.d.ts.map +1 -0
  14. package/dist/cadShell.js +313 -0
  15. package/dist/cadShell.js.map +1 -0
  16. package/dist/cadSolids.d.ts.map +1 -1
  17. package/dist/cadSolids.js +18 -1
  18. package/dist/cadSolids.js.map +1 -1
  19. package/dist/cutBrepFrameMigration.d.ts +46 -0
  20. package/dist/cutBrepFrameMigration.d.ts.map +1 -0
  21. package/dist/cutBrepFrameMigration.js +105 -0
  22. package/dist/cutBrepFrameMigration.js.map +1 -0
  23. package/dist/cutterPadding.d.ts.map +1 -1
  24. package/dist/domain/cameraProjection.js.map +1 -1
  25. package/dist/domain/sketchforge.d.ts +31 -1
  26. package/dist/domain/sketchforge.d.ts.map +1 -1
  27. package/dist/editorHistory.d.ts.map +1 -1
  28. package/dist/editorHistory.js.map +1 -1
  29. package/dist/engine.d.ts +3 -3
  30. package/dist/engine.d.ts.map +1 -1
  31. package/dist/engine.js +156 -78
  32. package/dist/engine.js.map +1 -1
  33. package/dist/exactBooleanParts.d.ts +4 -2
  34. package/dist/exactBooleanParts.d.ts.map +1 -1
  35. package/dist/exactBooleanParts.js +7 -3
  36. package/dist/exactBooleanParts.js.map +1 -1
  37. package/dist/exactBooleanSolids.d.ts.map +1 -1
  38. package/dist/gearProfile.d.ts.map +1 -1
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +1 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/loftProfile.d.ts +1 -1
  44. package/dist/loftProfile.d.ts.map +1 -1
  45. package/dist/loftProfile.js.map +1 -1
  46. package/dist/meshEdgeProjection.d.ts +104 -0
  47. package/dist/meshEdgeProjection.d.ts.map +1 -0
  48. package/dist/meshEdgeProjection.js +439 -0
  49. package/dist/meshEdgeProjection.js.map +1 -0
  50. package/dist/meshImport.d.ts.map +1 -1
  51. package/dist/meshImport.js +2 -20
  52. package/dist/meshImport.js.map +1 -1
  53. package/dist/meshMassProperties.d.ts +92 -0
  54. package/dist/meshMassProperties.d.ts.map +1 -0
  55. package/dist/meshMassProperties.js +570 -0
  56. package/dist/meshMassProperties.js.map +1 -0
  57. package/dist/meshSection.d.ts +44 -0
  58. package/dist/meshSection.d.ts.map +1 -0
  59. package/dist/meshSection.js +154 -0
  60. package/dist/meshSection.js.map +1 -0
  61. package/dist/meshShellOverlap.d.ts +75 -0
  62. package/dist/meshShellOverlap.d.ts.map +1 -0
  63. package/dist/meshShellOverlap.js +797 -0
  64. package/dist/meshShellOverlap.js.map +1 -0
  65. package/dist/meshShellSolids.d.ts +44 -0
  66. package/dist/meshShellSolids.d.ts.map +1 -0
  67. package/dist/meshShellSolids.js +116 -0
  68. package/dist/meshShellSolids.js.map +1 -0
  69. package/dist/nodeSvgDomParser.d.ts +3 -0
  70. package/dist/nodeSvgDomParser.d.ts.map +1 -0
  71. package/dist/nodeSvgDomParser.js +53 -0
  72. package/dist/nodeSvgDomParser.js.map +1 -0
  73. package/dist/parametricRecompute.d.ts.map +1 -1
  74. package/dist/parametricRecompute.js +63 -10
  75. package/dist/parametricRecompute.js.map +1 -1
  76. package/dist/placementWorkplane.d.ts.map +1 -1
  77. package/dist/placementWorkplane.js.map +1 -1
  78. package/dist/projectAssets.d.ts +1 -1
  79. package/dist/projectStore.d.ts +1 -1
  80. package/dist/projectStore.d.ts.map +1 -1
  81. package/dist/projectStore.js +23 -2
  82. package/dist/projectStore.js.map +1 -1
  83. package/dist/revolveRequests.d.ts +57 -1
  84. package/dist/revolveRequests.d.ts.map +1 -1
  85. package/dist/revolveRequests.js +103 -4
  86. package/dist/revolveRequests.js.map +1 -1
  87. package/dist/sceneExport.d.ts +6 -0
  88. package/dist/sceneExport.d.ts.map +1 -1
  89. package/dist/sceneExport.js +6 -2
  90. package/dist/sceneExport.js.map +1 -1
  91. package/dist/serverCadInterference.d.ts +8 -45
  92. package/dist/serverCadInterference.d.ts.map +1 -1
  93. package/dist/serverCadInterference.js +21 -43
  94. package/dist/serverCadInterference.js.map +1 -1
  95. package/dist/serverCadOperations.d.ts +73 -4
  96. package/dist/serverCadOperations.d.ts.map +1 -1
  97. package/dist/serverCadOperations.js +356 -71
  98. package/dist/serverCadOperations.js.map +1 -1
  99. package/dist/serverCadProjection.d.ts +14 -1
  100. package/dist/serverCadProjection.d.ts.map +1 -1
  101. package/dist/serverCadProjection.js +135 -13
  102. package/dist/serverCadProjection.js.map +1 -1
  103. package/dist/serverCadProperties.d.ts +14 -7
  104. package/dist/serverCadProperties.d.ts.map +1 -1
  105. package/dist/serverCadProperties.js +60 -24
  106. package/dist/serverCadProperties.js.map +1 -1
  107. package/dist/serverCadSection.d.ts +21 -1
  108. package/dist/serverCadSection.d.ts.map +1 -1
  109. package/dist/serverCadSection.js +157 -43
  110. package/dist/serverCadSection.js.map +1 -1
  111. package/dist/serverCadShell.d.ts +7 -94
  112. package/dist/serverCadShell.d.ts.map +1 -1
  113. package/dist/serverCadShell.js +25 -272
  114. package/dist/serverCadShell.js.map +1 -1
  115. package/dist/serverCadThickness.d.ts +8 -8
  116. package/dist/serverCadThickness.d.ts.map +1 -1
  117. package/dist/serverCadThickness.js +15 -42
  118. package/dist/serverCadThickness.js.map +1 -1
  119. package/dist/serverShapeBooleans.d.ts +75 -0
  120. package/dist/serverShapeBooleans.d.ts.map +1 -1
  121. package/dist/serverShapeBooleans.js +251 -9
  122. package/dist/serverShapeBooleans.js.map +1 -1
  123. package/dist/serverShapeGroups.js.map +1 -1
  124. package/dist/serverStepExplode.d.ts +1 -2
  125. package/dist/serverStepExplode.d.ts.map +1 -1
  126. package/dist/serverStepExplode.js +15 -148
  127. package/dist/serverStepExplode.js.map +1 -1
  128. package/dist/shapeBounds.d.ts.map +1 -1
  129. package/dist/shapeCatalog.d.ts.map +1 -1
  130. package/dist/shapeCatalog.js +1 -0
  131. package/dist/shapeCatalog.js.map +1 -1
  132. package/dist/shapeRequests.d.ts +13 -0
  133. package/dist/shapeRequests.d.ts.map +1 -1
  134. package/dist/shapeRequests.js +14 -0
  135. package/dist/shapeRequests.js.map +1 -1
  136. package/dist/sketchCadProfile.d.ts +13 -0
  137. package/dist/sketchCadProfile.d.ts.map +1 -1
  138. package/dist/sketchCadProfile.js +108 -0
  139. package/dist/sketchCadProfile.js.map +1 -1
  140. package/dist/sketchCadSweep.js.map +1 -1
  141. package/dist/sketchEdgeSegmentLineage.d.ts +32 -0
  142. package/dist/sketchEdgeSegmentLineage.d.ts.map +1 -0
  143. package/dist/sketchEdgeSegmentLineage.js +49 -0
  144. package/dist/sketchEdgeSegmentLineage.js.map +1 -0
  145. package/dist/sketchEdgeSegmentLineageKernel.d.ts +83 -0
  146. package/dist/sketchEdgeSegmentLineageKernel.d.ts.map +1 -0
  147. package/dist/sketchEdgeSegmentLineageKernel.js +125 -0
  148. package/dist/sketchEdgeSegmentLineageKernel.js.map +1 -0
  149. package/dist/sketchFaceDraftKernel.d.ts +16 -9
  150. package/dist/sketchFaceDraftKernel.d.ts.map +1 -1
  151. package/dist/sketchFaceDraftKernel.js +19 -11
  152. package/dist/sketchFaceDraftKernel.js.map +1 -1
  153. package/dist/sketchRevolve.d.ts +13 -0
  154. package/dist/sketchRevolve.d.ts.map +1 -1
  155. package/dist/sketchRevolve.js +4 -1
  156. package/dist/sketchRevolve.js.map +1 -1
  157. package/dist/skfProject.d.ts +1 -1
  158. package/dist/skfProject.d.ts.map +1 -1
  159. package/dist/skfProject.js +63 -4
  160. package/dist/skfProject.js.map +1 -1
  161. package/dist/sphereTessellation.d.ts.map +1 -1
  162. package/dist/stepAssemblyExplode.d.ts +45 -0
  163. package/dist/stepAssemblyExplode.d.ts.map +1 -0
  164. package/dist/stepAssemblyExplode.js +195 -0
  165. package/dist/stepAssemblyExplode.js.map +1 -0
  166. package/dist/stepAssemblyHierarchy.js.map +1 -1
  167. package/dist/stepComponentMetadata.d.ts +1 -1
  168. package/dist/stepComponentMetadata.d.ts.map +1 -1
  169. package/dist/stepComponentMetadata.js +93 -39
  170. package/dist/stepComponentMetadata.js.map +1 -1
  171. package/dist/stepExport.d.ts +14 -1
  172. package/dist/stepExport.d.ts.map +1 -1
  173. package/dist/stepExport.js +81 -32
  174. package/dist/stepExport.js.map +1 -1
  175. package/dist/stepImportCommon.d.ts +4 -1
  176. package/dist/stepImportCommon.d.ts.map +1 -1
  177. package/dist/stepImportCommon.js +7 -6
  178. package/dist/stepImportCommon.js.map +1 -1
  179. package/dist/stlImport.js.map +1 -1
  180. package/dist/support/cadModifierTypes.d.ts +100 -1
  181. package/dist/support/cadModifierTypes.d.ts.map +1 -1
  182. package/dist/support/i18n/LocalizedError.d.ts.map +1 -1
  183. package/dist/support/i18n/locales/en/messages.json +42 -2
  184. package/dist/support/i18n/locales.d.ts.map +1 -1
  185. package/dist/support/lib/appTheme.d.ts.map +1 -1
  186. package/dist/support/lib/materialPresets.js.map +1 -1
  187. package/dist/support/lib/measurementUnits.d.ts.map +1 -1
  188. package/dist/support/lib/operator-configuration.json +13 -1
  189. package/dist/support/lib/operatorConfiguration.d.ts +5 -5
  190. package/dist/support/lib/workplaneGrid.js.map +1 -1
  191. package/dist/svgImport.d.ts +2 -0
  192. package/dist/svgImport.d.ts.map +1 -1
  193. package/dist/svgImport.js +7 -0
  194. package/dist/svgImport.js.map +1 -1
  195. package/dist/threadCatalog.js.map +1 -1
  196. package/dist/workplaneSettings.js.map +1 -1
  197. package/dist/workplaneShapes.d.ts +2 -2
  198. package/dist/workplaneShapes.d.ts.map +1 -1
  199. package/dist/workplaneShapes.js.map +1 -1
  200. package/package.json +7 -6
@@ -0,0 +1,104 @@
1
+ /**
2
+ * A 2D drawing of a triangle mesh by its feature edges (issue #506).
3
+ *
4
+ * A mesh has no curves and no faces bigger than a triangle, so handing it to
5
+ * OCCT's hidden-line removal draws every triangle edge: a 57.6k-triangle part
6
+ * came out as a 9.4 MB SVG after 161 s, its flat faces a dense wireframe and
7
+ * its curved ones solid black. A mesh viewer draws the same mesh with a
8
+ * "crease angle" instead, and so does this:
9
+ *
10
+ * - a **feature edge** is one whose two triangles meet at more than
11
+ * `featureAngle` degrees, so the triangulation of a flat or gently curved
12
+ * face disappears and a real corner stays;
13
+ * - a **boundary** edge (one triangle) or a non-manifold one (three or more)
14
+ * is always drawn;
15
+ * - a **silhouette** edge is a smooth edge where one triangle faces the camera
16
+ * and the other faces away; it is found per view, which is what gives a
17
+ * faceted cylinder its outline without its seams.
18
+ *
19
+ * Which of those edges a camera can see is answered by a depth buffer of the
20
+ * whole scene's triangles, sampled along each edge, rather than by the kernel.
21
+ * Everything here is arithmetic on arrays: no kernel, no DOM, testable alone.
22
+ * `serverCadProjection.ts` combines it with the exact solids' drawing.
23
+ */
24
+ import { type DrawingPolyline, type ViewBasis } from "./cadProjection.js";
25
+ /** Below this, the triangulation of a gently curved surface is not drawn. */
26
+ export declare const DEFAULT_FEATURE_ANGLE = 30;
27
+ /** Corners of triangles as a flat `[x, y, z, ...]` list, nine numbers per triangle. */
28
+ export type TriangleSoup = ArrayLike<number>;
29
+ /**
30
+ * A mesh's drawable edges, independent of any view.
31
+ *
32
+ * `always` holds feature, boundary and non-manifold edges; `smooth` holds the
33
+ * rest, with the two triangles' normals oriented consistently, because only a
34
+ * view can tell which of them are silhouettes.
35
+ */
36
+ export type MeshEdgeSet = {
37
+ /** Six numbers per edge: both ends. */
38
+ always: Float64Array;
39
+ /** Six numbers per edge: both ends. */
40
+ smooth: Float64Array;
41
+ /** Six numbers per smooth edge: the two adjacent triangles' unit normals. */
42
+ smoothNormals: Float64Array;
43
+ /** Three numbers per always-drawn edge: a normal of a triangle on it, for its depth slope. */
44
+ alwaysNormals: Float64Array;
45
+ };
46
+ /**
47
+ * Whether a crease angle is one this drawing accepts: a finite number of
48
+ * degrees from 0 (every edge) to 180 (only boundaries and silhouettes).
49
+ */
50
+ export declare function isFeatureAngle(value: unknown): value is number;
51
+ /**
52
+ * The edges of a triangle soup worth drawing at `featureAngle` degrees.
53
+ *
54
+ * Corners are welded on a grid a ten-millionth of the mesh's diagonal wide,
55
+ * which joins the copies of a vertex an STL repeats per triangle without
56
+ * joining two vertices a real model keeps apart. Degenerate triangles carry no
57
+ * normal and contribute no edges.
58
+ */
59
+ export declare function meshEdgeSet(soup: TriangleSoup, featureAngle?: number): MeshEdgeSet;
60
+ /** The pixel grid a view's depth buffers share. */
61
+ export type ViewRaster = {
62
+ basis: ViewBasis;
63
+ minU: number;
64
+ minV: number;
65
+ /** Model units per pixel. */
66
+ pixel: number;
67
+ width: number;
68
+ height: number;
69
+ /** How far in front an occluder must be, in model units, before it hides anything. */
70
+ tolerance: number;
71
+ };
72
+ /**
73
+ * Per pixel, the nearest surface's distance toward the camera, or -Infinity
74
+ * where nothing is drawn.
75
+ */
76
+ export type DepthBuffer = {
77
+ raster: ViewRaster;
78
+ closeness: Float32Array;
79
+ };
80
+ /**
81
+ * The pixel grid covering every soup and every extra 2D point in the view,
82
+ * a thousand and twenty-four pixels across its longer side.
83
+ */
84
+ export declare function viewRaster(basis: ViewBasis, soups: readonly TriangleSoup[], points?: readonly DrawingPolyline[]): ViewRaster;
85
+ /** The soups rasterised into one depth buffer on `raster`. */
86
+ export declare function depthBuffer(raster: ViewRaster, soups: readonly TriangleSoup[]): DepthBuffer;
87
+ /**
88
+ * The mesh's edges as this view draws them, split into what the camera sees
89
+ * and what the scene in `occluders` hides.
90
+ */
91
+ export declare function drawMeshEdges(edgeSet: MeshEdgeSet, occluders: readonly DepthBuffer[], raster: ViewRaster): {
92
+ visible: DrawingPolyline[];
93
+ hidden: DrawingPolyline[];
94
+ };
95
+ /**
96
+ * Exact-solid edges the kernel drew as visible, with the stretches a mesh
97
+ * stands in front of moved to `hidden`.
98
+ *
99
+ * The kernel's hidden-line removal never saw the meshes, and its 2D output
100
+ * has no depth, so a point's depth is read back off the exact solids' own
101
+ * buffer: a visible edge lies on the nearest exact surface at that point.
102
+ */
103
+ export declare function occludeByMeshes(lines: readonly DrawingPolyline[], own: DepthBuffer, meshes: DepthBuffer, visible: DrawingPolyline[], hidden: DrawingPolyline[]): void;
104
+ //# sourceMappingURL=meshEdgeProjection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meshEdgeProjection.d.ts","sourceRoot":"","sources":["../src/meshEdgeProjection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAU,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAElF,6EAA6E;AAC7E,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,uFAAuF;AACvF,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,uCAAuC;IACvC,MAAM,EAAE,YAAY,CAAC;IACrB,uCAAuC;IACvC,MAAM,EAAE,YAAY,CAAC;IACrB,6EAA6E;IAC7E,aAAa,EAAE,YAAY,CAAC;IAC5B,8FAA8F;IAC9F,aAAa,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAaD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,GAAE,MAA8B,GAAG,WAAW,CA8FzG;AAID,mDAAmD;AACnD,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,YAAY,CAAA;CAAE,CAAC;AAe1E;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,EAAE,MAAM,GAAE,SAAS,eAAe,EAAO,GAAG,UAAU,CA+BhI;AAED,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,WAAW,CAiC3F;AAoHD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU;;;EA4BxG;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,eAAe,EAAE,EACjC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,eAAe,EAAE,EAC1B,MAAM,EAAE,eAAe,EAAE,QAmB1B"}
@@ -0,0 +1,439 @@
1
+ /**
2
+ * A 2D drawing of a triangle mesh by its feature edges (issue #506).
3
+ *
4
+ * A mesh has no curves and no faces bigger than a triangle, so handing it to
5
+ * OCCT's hidden-line removal draws every triangle edge: a 57.6k-triangle part
6
+ * came out as a 9.4 MB SVG after 161 s, its flat faces a dense wireframe and
7
+ * its curved ones solid black. A mesh viewer draws the same mesh with a
8
+ * "crease angle" instead, and so does this:
9
+ *
10
+ * - a **feature edge** is one whose two triangles meet at more than
11
+ * `featureAngle` degrees, so the triangulation of a flat or gently curved
12
+ * face disappears and a real corner stays;
13
+ * - a **boundary** edge (one triangle) or a non-manifold one (three or more)
14
+ * is always drawn;
15
+ * - a **silhouette** edge is a smooth edge where one triangle faces the camera
16
+ * and the other faces away; it is found per view, which is what gives a
17
+ * faceted cylinder its outline without its seams.
18
+ *
19
+ * Which of those edges a camera can see is answered by a depth buffer of the
20
+ * whole scene's triangles, sampled along each edge, rather than by the kernel.
21
+ * Everything here is arithmetic on arrays: no kernel, no DOM, testable alone.
22
+ * `serverCadProjection.ts` combines it with the exact solids' drawing.
23
+ */
24
+ import { viewUp } from "./cadProjection.js";
25
+ /** Below this, the triangulation of a gently curved surface is not drawn. */
26
+ export const DEFAULT_FEATURE_ANGLE = 30;
27
+ /**
28
+ * Whether a crease angle is one this drawing accepts: a finite number of
29
+ * degrees from 0 (every edge) to 180 (only boundaries and silhouettes).
30
+ */
31
+ export function isFeatureAngle(value) {
32
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= 180;
33
+ }
34
+ function soupDiagonal(soup) {
35
+ let minX = Infinity, minY = Infinity, minZ = Infinity, maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;
36
+ for (let index = 0; index + 2 < soup.length; index += 3) {
37
+ const x = soup[index], y = soup[index + 1], z = soup[index + 2];
38
+ if (x < minX)
39
+ minX = x;
40
+ if (x > maxX)
41
+ maxX = x;
42
+ if (y < minY)
43
+ minY = y;
44
+ if (y > maxY)
45
+ maxY = y;
46
+ if (z < minZ)
47
+ minZ = z;
48
+ if (z > maxZ)
49
+ maxZ = z;
50
+ }
51
+ return Number.isFinite(minX) ? Math.hypot(maxX - minX, maxY - minY, maxZ - minZ) : 0;
52
+ }
53
+ /**
54
+ * The edges of a triangle soup worth drawing at `featureAngle` degrees.
55
+ *
56
+ * Corners are welded on a grid a ten-millionth of the mesh's diagonal wide,
57
+ * which joins the copies of a vertex an STL repeats per triangle without
58
+ * joining two vertices a real model keeps apart. Degenerate triangles carry no
59
+ * normal and contribute no edges.
60
+ */
61
+ export function meshEdgeSet(soup, featureAngle = DEFAULT_FEATURE_ANGLE) {
62
+ const triangleCount = Math.floor(soup.length / 9);
63
+ const quantum = Math.max(soupDiagonal(soup) * 1e-7, 1e-12);
64
+ const vertexIds = new Map();
65
+ const vertices = [];
66
+ const corner = new Int32Array(triangleCount * 3);
67
+ for (let index = 0; index < triangleCount * 3; index += 1) {
68
+ const x = soup[index * 3], y = soup[index * 3 + 1], z = soup[index * 3 + 2];
69
+ const key = `${Math.round(x / quantum)},${Math.round(y / quantum)},${Math.round(z / quantum)}`;
70
+ let id = vertexIds.get(key);
71
+ if (id === undefined) {
72
+ id = vertices.length / 3;
73
+ vertexIds.set(key, id);
74
+ vertices.push(x, y, z);
75
+ }
76
+ corner[index] = id;
77
+ }
78
+ const normals = new Float64Array(triangleCount * 3);
79
+ const valid = new Uint8Array(triangleCount);
80
+ for (let triangle = 0; triangle < triangleCount; triangle += 1) {
81
+ const [a, b, c] = [corner[triangle * 3], corner[triangle * 3 + 1], corner[triangle * 3 + 2]];
82
+ if (a === b || b === c || a === c)
83
+ continue;
84
+ const ux = vertices[b * 3] - vertices[a * 3], uy = vertices[b * 3 + 1] - vertices[a * 3 + 1], uz = vertices[b * 3 + 2] - vertices[a * 3 + 2];
85
+ const vx = vertices[c * 3] - vertices[a * 3], vy = vertices[c * 3 + 1] - vertices[a * 3 + 1], vz = vertices[c * 3 + 2] - vertices[a * 3 + 2];
86
+ const nx = uy * vz - uz * vy, ny = uz * vx - ux * vz, nz = ux * vy - uy * vx;
87
+ const length = Math.hypot(nx, ny, nz);
88
+ if (!(length > 0))
89
+ continue;
90
+ normals[triangle * 3] = nx / length;
91
+ normals[triangle * 3 + 1] = ny / length;
92
+ normals[triangle * 3 + 2] = nz / length;
93
+ valid[triangle] = 1;
94
+ }
95
+ // Each undirected edge, with the triangles on it and the direction each one
96
+ // walks it in: consistently wound neighbours walk a shared edge oppositely.
97
+ const vertexCount = vertices.length / 3;
98
+ const edges = new Map();
99
+ for (let triangle = 0; triangle < triangleCount; triangle += 1) {
100
+ if (!valid[triangle])
101
+ continue;
102
+ for (let side = 0; side < 3; side += 1) {
103
+ const from = corner[triangle * 3 + side];
104
+ const to = corner[triangle * 3 + ((side + 1) % 3)];
105
+ const low = Math.min(from, to), high = Math.max(from, to);
106
+ const key = low * vertexCount + high;
107
+ let edge = edges.get(key);
108
+ if (!edge) {
109
+ edge = { from: low, to: high, triangles: [], forward: [] };
110
+ edges.set(key, edge);
111
+ }
112
+ edge.triangles.push(triangle);
113
+ edge.forward.push(from === low);
114
+ }
115
+ }
116
+ const cosine = Math.cos((featureAngle * Math.PI) / 180);
117
+ const always = [];
118
+ const alwaysNormals = [];
119
+ const smooth = [];
120
+ const smoothNormals = [];
121
+ const ends = (edge) => [
122
+ vertices[edge.from * 3], vertices[edge.from * 3 + 1], vertices[edge.from * 3 + 2],
123
+ vertices[edge.to * 3], vertices[edge.to * 3 + 1], vertices[edge.to * 3 + 2],
124
+ ];
125
+ for (const edge of edges.values()) {
126
+ const first = edge.triangles[0];
127
+ const n1 = [normals[first * 3], normals[first * 3 + 1], normals[first * 3 + 2]];
128
+ if (edge.triangles.length !== 2) {
129
+ always.push(...ends(edge));
130
+ alwaysNormals.push(...n1);
131
+ continue;
132
+ }
133
+ const second = edge.triangles[1];
134
+ // A neighbour wound the same way round the edge is wound inconsistently;
135
+ // turning its normal over is what makes a flat face read as flat.
136
+ const flip = edge.forward[0] === edge.forward[1] ? -1 : 1;
137
+ const n2 = [normals[second * 3] * flip, normals[second * 3 + 1] * flip, normals[second * 3 + 2] * flip];
138
+ const alignment = n1[0] * n2[0] + n1[1] * n2[1] + n1[2] * n2[2];
139
+ // Strictly greater than the angle, so at 0 degrees every edge that is not
140
+ // exactly flat is drawn.
141
+ if (alignment < cosine - 1e-12) {
142
+ always.push(...ends(edge));
143
+ alwaysNormals.push(...n1);
144
+ }
145
+ else {
146
+ smooth.push(...ends(edge));
147
+ smoothNormals.push(...n1, ...n2);
148
+ }
149
+ }
150
+ return {
151
+ always: Float64Array.from(always),
152
+ alwaysNormals: Float64Array.from(alwaysNormals),
153
+ smooth: Float64Array.from(smooth),
154
+ smoothNormals: Float64Array.from(smoothNormals),
155
+ };
156
+ }
157
+ const RASTER_RESOLUTION = 1024;
158
+ const MAX_SLOPE = 20;
159
+ function projector(basis) {
160
+ const up = viewUp(basis);
161
+ const { right, toward } = basis;
162
+ return (x, y, z) => [
163
+ x * right.x + y * right.y + z * right.z,
164
+ x * up.x + y * up.y + z * up.z,
165
+ x * toward.x + y * toward.y + z * toward.z,
166
+ ];
167
+ }
168
+ /**
169
+ * The pixel grid covering every soup and every extra 2D point in the view,
170
+ * a thousand and twenty-four pixels across its longer side.
171
+ */
172
+ export function viewRaster(basis, soups, points = []) {
173
+ const project = projector(basis);
174
+ let minU = Infinity, maxU = -Infinity, minV = Infinity, maxV = -Infinity, diagonal = 0;
175
+ for (const soup of soups) {
176
+ diagonal = Math.max(diagonal, soupDiagonal(soup));
177
+ for (let index = 0; index + 2 < soup.length; index += 3) {
178
+ const [u, v] = project(soup[index], soup[index + 1], soup[index + 2]);
179
+ if (u < minU)
180
+ minU = u;
181
+ if (u > maxU)
182
+ maxU = u;
183
+ if (v < minV)
184
+ minV = v;
185
+ if (v > maxV)
186
+ maxV = v;
187
+ }
188
+ }
189
+ for (const line of points) {
190
+ for (let index = 0; index + 1 < line.length; index += 2) {
191
+ if (line[index] < minU)
192
+ minU = line[index];
193
+ if (line[index] > maxU)
194
+ maxU = line[index];
195
+ if (line[index + 1] < minV)
196
+ minV = line[index + 1];
197
+ if (line[index + 1] > maxV)
198
+ maxV = line[index + 1];
199
+ }
200
+ }
201
+ if (!Number.isFinite(minU)) {
202
+ minU = maxU = minV = maxV = 0;
203
+ }
204
+ const range = Math.max(maxU - minU, maxV - minV, 1e-9);
205
+ const pixel = range / RASTER_RESOLUTION;
206
+ const margin = 2 * pixel;
207
+ diagonal = Math.max(diagonal, range);
208
+ return {
209
+ basis,
210
+ minU: minU - margin,
211
+ minV: minV - margin,
212
+ pixel,
213
+ width: Math.ceil((maxU - minU) / pixel) + 5,
214
+ height: Math.ceil((maxV - minV) / pixel) + 5,
215
+ tolerance: diagonal * 0.002 + pixel,
216
+ };
217
+ }
218
+ /** The soups rasterised into one depth buffer on `raster`. */
219
+ export function depthBuffer(raster, soups) {
220
+ const { width, height, minU, minV, pixel } = raster;
221
+ const closeness = new Float32Array(width * height).fill(-Infinity);
222
+ const project = projector(raster.basis);
223
+ for (const soup of soups) {
224
+ for (let index = 0; index + 8 < soup.length; index += 9) {
225
+ const a = project(soup[index], soup[index + 1], soup[index + 2]);
226
+ const b = project(soup[index + 3], soup[index + 4], soup[index + 5]);
227
+ const c = project(soup[index + 6], soup[index + 7], soup[index + 8]);
228
+ // Into pixel coordinates, pixel centres at half-integers.
229
+ const ax = (a[0] - minU) / pixel, ay = (a[1] - minV) / pixel;
230
+ const bx = (b[0] - minU) / pixel, by = (b[1] - minV) / pixel;
231
+ const cx = (c[0] - minU) / pixel, cy = (c[1] - minV) / pixel;
232
+ const area = (bx - ax) * (cy - ay) - (by - ay) * (cx - ax);
233
+ if (Math.abs(area) < 1e-12)
234
+ continue;
235
+ const x0 = Math.max(0, Math.floor(Math.min(ax, bx, cx))), x1 = Math.min(width - 1, Math.ceil(Math.max(ax, bx, cx)));
236
+ const y0 = Math.max(0, Math.floor(Math.min(ay, by, cy))), y1 = Math.min(height - 1, Math.ceil(Math.max(ay, by, cy)));
237
+ for (let y = y0; y <= y1; y += 1) {
238
+ const py = y + 0.5;
239
+ for (let x = x0; x <= x1; x += 1) {
240
+ const px = x + 0.5;
241
+ const wa = ((bx - px) * (cy - py) - (by - py) * (cx - px)) / area;
242
+ const wb = ((cx - px) * (ay - py) - (cy - py) * (ax - px)) / area;
243
+ const wc = 1 - wa - wb;
244
+ if (wa < -1e-9 || wb < -1e-9 || wc < -1e-9)
245
+ continue;
246
+ const depth = wa * a[2] + wb * b[2] + wc * c[2];
247
+ const at = y * width + x;
248
+ if (depth > closeness[at])
249
+ closeness[at] = depth;
250
+ }
251
+ }
252
+ }
253
+ }
254
+ return { raster, closeness };
255
+ }
256
+ /**
257
+ * The surface a point would have to be behind to be hidden: the farthest of
258
+ * the covered pixels around it, or nothing when the pixel itself is empty.
259
+ *
260
+ * Taking the farthest neighbour is what keeps an edge from being hidden by
261
+ * the very faces it bounds -- a pixel centre beside a steep face, or across a
262
+ * silhouette, reads nearer than the edge itself.
263
+ */
264
+ function occluderAt(buffer, u, v) {
265
+ const { raster, closeness } = buffer;
266
+ const x = Math.floor((u - raster.minU) / raster.pixel);
267
+ const y = Math.floor((v - raster.minV) / raster.pixel);
268
+ if (x < 0 || y < 0 || x >= raster.width || y >= raster.height)
269
+ return -Infinity;
270
+ if (closeness[y * raster.width + x] === -Infinity)
271
+ return -Infinity;
272
+ let farthest = Infinity;
273
+ for (let dy = -1; dy <= 1; dy += 1) {
274
+ const row = y + dy;
275
+ if (row < 0 || row >= raster.height)
276
+ continue;
277
+ for (let dx = -1; dx <= 1; dx += 1) {
278
+ const column = x + dx;
279
+ if (column < 0 || column >= raster.width)
280
+ continue;
281
+ const value = closeness[row * raster.width + column];
282
+ if (value !== -Infinity && value < farthest)
283
+ farthest = value;
284
+ }
285
+ }
286
+ return farthest;
287
+ }
288
+ /** The nearest covered surface around a point, or -Infinity when none is. */
289
+ function nearestAt(buffer, u, v) {
290
+ const { raster, closeness } = buffer;
291
+ const x = Math.floor((u - raster.minU) / raster.pixel);
292
+ const y = Math.floor((v - raster.minV) / raster.pixel);
293
+ let nearest = -Infinity;
294
+ for (let dy = -1; dy <= 1; dy += 1) {
295
+ const row = y + dy;
296
+ if (row < 0 || row >= raster.height)
297
+ continue;
298
+ for (let dx = -1; dx <= 1; dx += 1) {
299
+ const column = x + dx;
300
+ if (column < 0 || column >= raster.width)
301
+ continue;
302
+ const value = closeness[row * raster.width + column];
303
+ if (value > nearest)
304
+ nearest = value;
305
+ }
306
+ }
307
+ return nearest;
308
+ }
309
+ /** Runs shorter than this many samples (pixels of a 1024-pixel view) take their neighbours' visibility. */
310
+ const MIN_RUN = 6;
311
+ /**
312
+ * A segment split into visible and hidden straight runs by `hiddenAt`, which
313
+ * answers for a parameter along it. Specks shorter than a few pixels -- where
314
+ * an edge passes within the tolerance of a surface, as a hidden edge does at
315
+ * the silhouette vertex it runs into -- join the run beside them.
316
+ */
317
+ function splitSegment(u0, v0, u1, v1, pixel, hiddenAt, visible, hidden) {
318
+ const samples = Math.min(4096, Math.max(2, Math.ceil(Math.hypot(u1 - u0, v1 - v0) / pixel) + 1));
319
+ const states = [];
320
+ for (let index = 0; index < samples; index += 1)
321
+ states.push(hiddenAt(index / (samples - 1)));
322
+ // Run-length encode, then fold specks into the run before them (or after,
323
+ // for a speck at the start).
324
+ const runs = [];
325
+ for (let index = 0; index < samples; index += 1) {
326
+ const last = runs[runs.length - 1];
327
+ if (last && last.hidden === states[index])
328
+ last.end = index;
329
+ else
330
+ runs.push({ hidden: states[index], start: index, end: index });
331
+ }
332
+ for (let changed = true; changed && runs.length > 1;) {
333
+ changed = false;
334
+ for (let index = 0; index < runs.length; index += 1) {
335
+ const run = runs[index];
336
+ if (run.end - run.start + 1 >= MIN_RUN)
337
+ continue;
338
+ const neighbour = index > 0 ? runs[index - 1] : runs[index + 1];
339
+ neighbour.start = Math.min(neighbour.start, run.start);
340
+ neighbour.end = Math.max(neighbour.end, run.end);
341
+ runs.splice(index, 1);
342
+ // Two runs of one kind that now touch become one.
343
+ for (let merge = 1; merge < runs.length; merge += 1) {
344
+ if (runs[merge].hidden === runs[merge - 1].hidden) {
345
+ runs[merge - 1].end = runs[merge].end;
346
+ runs.splice(merge, 1);
347
+ merge -= 1;
348
+ }
349
+ }
350
+ changed = true;
351
+ break;
352
+ }
353
+ }
354
+ for (const run of runs) {
355
+ const t0 = run.start / (samples - 1);
356
+ const t1 = run.end / (samples - 1);
357
+ if (t1 <= t0)
358
+ continue;
359
+ const line = [u0 + (u1 - u0) * t0, v0 + (v1 - v0) * t0, u0 + (u1 - u0) * t1, v0 + (v1 - v0) * t1];
360
+ (run.hidden ? hidden : visible).push(line);
361
+ }
362
+ }
363
+ /**
364
+ * How steeply a surface with this normal recedes per model unit across the
365
+ * screen, capped: an edge-on face would otherwise ask for infinite tolerance.
366
+ */
367
+ function slopeOf(project, nx, ny, nz) {
368
+ const [nu, nv, nc] = project(nx, ny, nz);
369
+ if (Math.abs(nc) < 1 / MAX_SLOPE)
370
+ return MAX_SLOPE;
371
+ return Math.min(MAX_SLOPE, Math.hypot(nu, nv) / Math.abs(nc));
372
+ }
373
+ /**
374
+ * The mesh's edges as this view draws them, split into what the camera sees
375
+ * and what the scene in `occluders` hides.
376
+ */
377
+ export function drawMeshEdges(edgeSet, occluders, raster) {
378
+ const project = projector(raster.basis);
379
+ const { toward } = raster.basis;
380
+ const visible = [];
381
+ const hidden = [];
382
+ const draw = (ends, offset, slope) => {
383
+ const [u0, v0, c0] = project(ends[offset], ends[offset + 1], ends[offset + 2]);
384
+ const [u1, v1, c1] = project(ends[offset + 3], ends[offset + 4], ends[offset + 5]);
385
+ // Seen end on, an edge is a point and draws nothing.
386
+ if (Math.hypot(u1 - u0, v1 - v0) < raster.pixel * 1e-3)
387
+ return;
388
+ const tolerance = raster.tolerance + 2 * raster.pixel * slope;
389
+ splitSegment(u0, v0, u1, v1, raster.pixel, (t) => {
390
+ const u = u0 + (u1 - u0) * t, v = v0 + (v1 - v0) * t, c = c0 + (c1 - c0) * t;
391
+ return occluders.some((buffer) => occluderAt(buffer, u, v) > c + tolerance);
392
+ }, visible, hidden);
393
+ };
394
+ for (let edge = 0; edge * 6 < edgeSet.always.length; edge += 1) {
395
+ const n = edgeSet.alwaysNormals;
396
+ draw(edgeSet.always, edge * 6, slopeOf(project, n[edge * 3], n[edge * 3 + 1], n[edge * 3 + 2]));
397
+ }
398
+ for (let edge = 0; edge * 6 < edgeSet.smooth.length; edge += 1) {
399
+ const n = edgeSet.smoothNormals;
400
+ const first = n[edge * 6] * toward.x + n[edge * 6 + 1] * toward.y + n[edge * 6 + 2] * toward.z;
401
+ const second = n[edge * 6 + 3] * toward.x + n[edge * 6 + 4] * toward.y + n[edge * 6 + 5] * toward.z;
402
+ if ((first > 0) === (second > 0))
403
+ continue;
404
+ draw(edgeSet.smooth, edge * 6, MAX_SLOPE);
405
+ }
406
+ return { visible, hidden };
407
+ }
408
+ /**
409
+ * Exact-solid edges the kernel drew as visible, with the stretches a mesh
410
+ * stands in front of moved to `hidden`.
411
+ *
412
+ * The kernel's hidden-line removal never saw the meshes, and its 2D output
413
+ * has no depth, so a point's depth is read back off the exact solids' own
414
+ * buffer: a visible edge lies on the nearest exact surface at that point.
415
+ */
416
+ export function occludeByMeshes(lines, own, meshes, visible, hidden) {
417
+ const { raster } = own;
418
+ const tolerance = raster.tolerance + 2 * raster.pixel;
419
+ for (const line of lines) {
420
+ const seen = [];
421
+ const behind = [];
422
+ for (let index = 0; index + 3 < line.length; index += 2) {
423
+ const u0 = line[index], v0 = line[index + 1], u1 = line[index + 2], v1 = line[index + 3];
424
+ splitSegment(u0, v0, u1, v1, raster.pixel, (t) => {
425
+ const u = u0 + (u1 - u0) * t, v = v0 + (v1 - v0) * t;
426
+ const depth = nearestAt(own, u, v);
427
+ return depth !== -Infinity && occluderAt(meshes, u, v) > depth + tolerance;
428
+ }, seen, behind);
429
+ }
430
+ // A line nothing hides keeps its own vertices rather than one stroke per segment.
431
+ if (!behind.length)
432
+ visible.push(line);
433
+ else {
434
+ visible.push(...seen);
435
+ hidden.push(...behind);
436
+ }
437
+ }
438
+ }
439
+ //# sourceMappingURL=meshEdgeProjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meshEdgeProjection.js","sourceRoot":"","sources":["../src/meshEdgeProjection.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"meshImport.d.ts","sourceRoot":"","sources":["../src/meshImport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE5E,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,gCAAiC,CAAC;AAEtE,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAE1E,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAKlF;AAiBD;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CAmBvB"}
1
+ {"version":3,"file":"meshImport.d.ts","sourceRoot":"","sources":["../src/meshImport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE5E,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,YAAI,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAEtE,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAE1E,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAKlF;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CAgBvB"}
@@ -29,7 +29,7 @@
29
29
  import { importedShapeFromObj } from "./objImport.js";
30
30
  import { attachProjectAsset, projectAssetFromBytes, sourceFormatForFileName, } from "./projectAssets.js";
31
31
  import { importedShapeFromStl } from "./stlImport.js";
32
- import { importedShapeFromSvg } from "./svgImport.js";
32
+ import { importedShapeFromSvgOnHost } from "./svgImport.js";
33
33
  /** The file formats an import can read with no browser and no CAD kernel. */
34
34
  export const IMPORTABLE_MESH_FORMATS = ["stl", "obj", "svg"];
35
35
  /** The format a file name names, or null when nothing here can read it. */
@@ -39,21 +39,6 @@ export function importableMeshFormat(fileName) {
39
39
  ? format
40
40
  : null;
41
41
  }
42
- /**
43
- * Why an import could not be read, in words, or null when it can be.
44
- *
45
- * SVG is read by `three`'s `SVGLoader`, which parses with a `DOMParser`. A
46
- * browser has one and a bare Node process does not, and the difference shows
47
- * up as a `ReferenceError` from inside a loader -- so it is said plainly here
48
- * instead, before any bytes are touched.
49
- */
50
- function unreadableReason(format) {
51
- if (format !== "svg")
52
- return null;
53
- return typeof DOMParser === "undefined"
54
- ? "SVG import needs a DOMParser, which this runtime does not provide; export the drawing as STL or OBJ instead."
55
- : null;
56
- }
57
42
  /**
58
43
  * The shape a model file describes, with the asset that keeps the file itself.
59
44
  *
@@ -69,13 +54,10 @@ export async function importedMeshFromFile(fileName, bytes, mediaType) {
69
54
  if (!format) {
70
55
  throw new Error(`Cannot import "${fileName}": the readable formats are ${IMPORTABLE_MESH_FORMATS.join(", ")}.`);
71
56
  }
72
- const unreadable = unreadableReason(format);
73
- if (unreadable)
74
- throw new Error(unreadable);
75
57
  const shape = format === "obj"
76
58
  ? importedShapeFromObj(fileName, new TextDecoder().decode(bytes))
77
59
  : format === "svg"
78
- ? importedShapeFromSvg(fileName, new TextDecoder().decode(bytes))
60
+ ? await importedShapeFromSvgOnHost(fileName, new TextDecoder().decode(bytes))
79
61
  // A fresh buffer rather than the view's own: an importer reads the whole
80
62
  // `ArrayBuffer`, and a `Uint8Array` decoded from base64 or read off a
81
63
  // form may be a window onto a larger one.
@@ -1 +1 @@
1
- {"version":3,"file":"meshImport.js","sourceRoot":"","sources":["../src/meshImport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAMtE,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,MAAM,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,MAAM,IAAK,uBAA6C,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9E,CAAC,CAAE,MAA+B;QAClC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gBAAgB,CAAC,MAA4B;IACpD,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,OAAO,SAAS,KAAK,WAAW;QACrC,CAAC,CAAC,8GAA8G;QAChH,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAgB,EAChB,KAAiB,EACjB,SAAkB;IAElB,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,+BAA+B,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClH,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAE5C,MAAM,KAAK,GAAG,MAAM,KAAK,KAAK;QAC5B,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjE,CAAC,CAAC,MAAM,KAAK,KAAK;YAChB,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjE,yEAAyE;YACzE,sEAAsE;YACtE,0CAA0C;YAC1C,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,MAAqB,CAAC,CAAC;IAE1E,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9E,OAAO,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"meshImport.js","sourceRoot":"","sources":["../src/meshImport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAG5D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAMtE,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,MAAM,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,MAAM,IAAK,uBAA6C,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9E,CAAC,CAAE,MAA+B;QAClC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAgB,EAChB,KAAiB,EACjB,SAAkB;IAElB,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,+BAA+B,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,KAAK,KAAK;QAC5B,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjE,CAAC,CAAC,MAAM,KAAK,KAAK;YAChB,CAAC,CAAC,MAAM,0BAA0B,CAAC,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7E,yEAAyE;YACzE,sEAAsE;YACtE,0CAA0C;YAC1C,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,MAAqB,CAAC,CAAC;IAE1E,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9E,OAAO,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AAC/D,CAAC"}