abstract-3d 4.1.6 → 4.2.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 (108) hide show
  1. package/lib/abstract-3d.d.ts +63 -6
  2. package/lib/abstract-3d.d.ts.map +1 -1
  3. package/lib/abstract-3d.js +277 -74
  4. package/lib/abstract-3d.js.map +1 -1
  5. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.d.ts +2 -2
  6. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.d.ts.map +1 -1
  7. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js +6 -6
  8. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js.map +1 -1
  9. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.d.ts +2 -2
  10. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.d.ts.map +1 -1
  11. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js +3 -3
  12. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js.map +1 -1
  13. package/lib/renderers/dxf/dxf.d.ts.map +1 -1
  14. package/lib/renderers/dxf/dxf.js +12 -8
  15. package/lib/renderers/dxf/dxf.js.map +1 -1
  16. package/lib/renderers/ifc/ifc.d.ts.map +1 -1
  17. package/lib/renderers/ifc/ifc.js +5 -3
  18. package/lib/renderers/ifc/ifc.js.map +1 -1
  19. package/lib/renderers/step/step.d.ts.map +1 -1
  20. package/lib/renderers/step/step.js +3 -2
  21. package/lib/renderers/step/step.js.map +1 -1
  22. package/lib/renderers/stl/stl.d.ts.map +1 -1
  23. package/lib/renderers/stl/stl.js +7 -3
  24. package/lib/renderers/stl/stl.js.map +1 -1
  25. package/lib/renderers/svg/svg-geometries/svg-text.d.ts +1 -1
  26. package/lib/renderers/svg/svg-geometries/svg-text.d.ts.map +1 -1
  27. package/lib/renderers/svg/svg-geometries/svg-text.js +2 -2
  28. package/lib/renderers/svg/svg-geometries/svg-text.js.map +1 -1
  29. package/lib/renderers/svg/svg.d.ts.map +1 -1
  30. package/lib/renderers/svg/svg.js +13 -10
  31. package/lib/renderers/svg/svg.js.map +1 -1
  32. package/lib/renderers/svg-bsp/svg-geometries/svg-text.d.ts +1 -1
  33. package/lib/renderers/svg-bsp/svg-geometries/svg-text.d.ts.map +1 -1
  34. package/lib/renderers/svg-bsp/svg-geometries/svg-text.js +2 -2
  35. package/lib/renderers/svg-bsp/svg-geometries/svg-text.js.map +1 -1
  36. package/lib/renderers/svg-bsp/svg.d.ts.map +1 -1
  37. package/lib/renderers/svg-bsp/svg.js +13 -10
  38. package/lib/renderers/svg-bsp/svg.js.map +1 -1
  39. package/lib/renderers/three/build/build.js +1 -1
  40. package/lib/renderers/three/build/build.js.map +1 -1
  41. package/lib/renderers/three/compile/compile.d.ts +2 -0
  42. package/lib/renderers/three/compile/compile.d.ts.map +1 -1
  43. package/lib/renderers/three/compile/compile.js +6 -4
  44. package/lib/renderers/three/compile/compile.js.map +1 -1
  45. package/package.json +1 -1
  46. package/src/abstract-3d.test.ts +254 -0
  47. package/src/abstract-3d.ts +427 -85
  48. package/src/renderers/dxf/dxf-encoding/dxf-dimension.ts +22 -2
  49. package/src/renderers/dxf/dxf-geometries/dxf-dimension.ts +12 -2
  50. package/src/renderers/dxf/dxf.ts +21 -4
  51. package/src/renderers/ifc/ifc.ts +16 -3
  52. package/src/renderers/step/step.ts +3 -2
  53. package/src/renderers/stl/stl.ts +12 -4
  54. package/src/renderers/svg/svg-geometries/svg-text.ts +3 -2
  55. package/src/renderers/svg/svg.ts +29 -9
  56. package/src/renderers/svg-bsp/svg-geometries/svg-text.ts +3 -2
  57. package/src/renderers/svg-bsp/svg.ts +29 -9
  58. package/src/renderers/three/build/build.test.ts +2 -2
  59. package/src/renderers/three/build/build.ts +1 -1
  60. package/src/renderers/three/compile/compile.ts +22 -4
  61. package/lib/renderers/dxf/color.d.ts +0 -7
  62. package/lib/renderers/dxf/color.d.ts.map +0 -1
  63. package/lib/renderers/dxf/color.js +0 -311
  64. package/lib/renderers/dxf/color.js.map +0 -1
  65. package/lib/renderers/dxf/dxf-encoding.d.ts +0 -17
  66. package/lib/renderers/dxf/dxf-encoding.d.ts.map +0 -1
  67. package/lib/renderers/dxf/dxf-encoding.js +0 -18467
  68. package/lib/renderers/dxf/dxf-encoding.js.map +0 -1
  69. package/lib/renderers/react/react-camera.d.ts +0 -71
  70. package/lib/renderers/react/react-camera.d.ts.map +0 -1
  71. package/lib/renderers/react/react-camera.js +0 -179
  72. package/lib/renderers/react/react-camera.js.map +0 -1
  73. package/lib/renderers/react/react-dimension.d.ts +0 -16
  74. package/lib/renderers/react/react-dimension.d.ts.map +0 -1
  75. package/lib/renderers/react/react-dimension.js +0 -29
  76. package/lib/renderers/react/react-dimension.js.map +0 -1
  77. package/lib/renderers/react/react-group.d.ts +0 -23
  78. package/lib/renderers/react/react-group.d.ts.map +0 -1
  79. package/lib/renderers/react/react-group.js +0 -68
  80. package/lib/renderers/react/react-group.js.map +0 -1
  81. package/lib/renderers/react/react-hotspot.d.ts +0 -27
  82. package/lib/renderers/react/react-hotspot.d.ts.map +0 -1
  83. package/lib/renderers/react/react-hotspot.js +0 -37
  84. package/lib/renderers/react/react-hotspot.js.map +0 -1
  85. package/lib/renderers/react/react-image-material.d.ts +0 -28
  86. package/lib/renderers/react/react-image-material.d.ts.map +0 -1
  87. package/lib/renderers/react/react-image-material.js +0 -81
  88. package/lib/renderers/react/react-image-material.js.map +0 -1
  89. package/lib/renderers/react/react-material.d.ts +0 -19
  90. package/lib/renderers/react/react-material.d.ts.map +0 -1
  91. package/lib/renderers/react/react-material.js +0 -50
  92. package/lib/renderers/react/react-material.js.map +0 -1
  93. package/lib/renderers/react/react-mesh.d.ts +0 -11
  94. package/lib/renderers/react/react-mesh.d.ts.map +0 -1
  95. package/lib/renderers/react/react-mesh.js +0 -229
  96. package/lib/renderers/react/react-mesh.js.map +0 -1
  97. package/lib/renderers/react/react-scene.d.ts +0 -28
  98. package/lib/renderers/react/react-scene.d.ts.map +0 -1
  99. package/lib/renderers/react/react-scene.js +0 -20
  100. package/lib/renderers/react/react-scene.js.map +0 -1
  101. package/lib/renderers/react/react-types.d.ts +0 -7
  102. package/lib/renderers/react/react-types.d.ts.map +0 -1
  103. package/lib/renderers/react/react-types.js +0 -3
  104. package/lib/renderers/react/react-types.js.map +0 -1
  105. package/lib/renderers/shared.d.ts +0 -30
  106. package/lib/renderers/shared.d.ts.map +0 -1
  107. package/lib/renderers/shared.js +0 -164
  108. package/lib/renderers/shared.js.map +0 -1
@@ -17,6 +17,26 @@ export type Dimensions = {
17
17
  readonly dimensions: ReadonlyArray<Dimension>;
18
18
  readonly material: Material;
19
19
  };
20
+ /** Where a dimension's line and text are drawn, see `dimensionPlacements` */
21
+ export type DimensionPlacement = {
22
+ /** The dimension's `linePosition`, moved out where its line is too near the line inside it or the measured points for the texts between them */
23
+ readonly linePosition: Vec3;
24
+ readonly text: DimensionTextPlacement;
25
+ /**
26
+ * The lines at the dimension's ends: the marks across its dimension line and the extension lines from the measured points to them, broken around
27
+ * the texts they'd cross
28
+ */
29
+ readonly endLines: ReadonlyArray<readonly [Vec3, Vec3]>;
30
+ /** Everything the dimension draws: its dimension line, the lines at its ends and its text */
31
+ readonly bounds: Bounds3;
32
+ };
33
+ /**
34
+ * The text a gap from the dimension line, out from its middle, out from the line or, `inward`, towards the measured points; a text of several rows
35
+ * has its first row over the line, as the text reads, and the rest under it
36
+ */
37
+ export type DimensionTextPlacement = {
38
+ readonly inward: boolean;
39
+ };
20
40
  export type Dimension = DimensionMesh | DimensionAligned;
21
41
  export type DimensionMesh = {
22
42
  readonly views: ReadonlyArray<View>;
@@ -217,7 +237,18 @@ export type Text = {
217
237
  readonly pos: Vec3;
218
238
  readonly rot?: Vec3;
219
239
  readonly text: string;
220
- readonly fontSize: number;
240
+ /** The scene's text height, see `sceneTextHeight`, if not set */
241
+ readonly fontSize?: number;
242
+ readonly background?: TextBackground;
243
+ };
244
+ /** A circle or a rectangle `depth` behind the text, half as thick, `padding` past it on every side, its edge an `outline` wide band */
245
+ export type TextBackground = {
246
+ readonly shape: "circle" | "rectangle";
247
+ readonly padding: number;
248
+ readonly outline: number;
249
+ readonly depth: number;
250
+ readonly material: Material;
251
+ readonly outlineMaterial: Material;
221
252
  };
222
253
  export type Box = {
223
254
  readonly type: "Box";
@@ -392,13 +423,29 @@ export declare const bounds3Merge: (...bounds: ReadonlyArray<Bounds3>) => Bounds
392
423
  export declare function bounds2FromVec2Array(vec2Array: ReadonlyArray<Vec2>): Bounds2;
393
424
  export declare function bounds3FromVec3Array(vec3Array: ReadonlyArray<Vec3>): Bounds3;
394
425
  export declare function boundsScene(scene: Scene): Bounds3;
395
- export declare function boundsGroup(group: Group, parentPos: Vec3, parentRot: Vec3): ReadonlyArray<Bounds3>;
426
+ /** The bounds of the group's meshes, its texts without a font size `textHeight` high */
427
+ export declare function boundsGroup(group: Group, parentPos: Vec3, parentRot: Vec3, textHeight?: number): ReadonlyArray<Bounds3>;
396
428
  export declare function boundsSphere(s: Sphere, parentPos: Vec3, parentRot: Vec3): Bounds3;
397
429
  export declare function boundsPlane(p: Plane, parentPos: Vec3, parentRot: Vec3): Bounds3;
398
430
  export declare function boundsBox(b: Box, parentPos: Vec3, parentRot: Vec3): Bounds3;
399
431
  export declare function boundsCylinder(c: Cylinder, parentPos: Vec3, parentRot: Vec3): Bounds3;
400
432
  export declare function boundsCone(c: Cone, parentPos: Vec3, parentRot: Vec3): Bounds3;
401
- export declare function boundsText(t: Text, parentPos: Vec3, parentRot: Vec3): Bounds3;
433
+ /** The bounds of the text and its background, `textHeight` high without a font size */
434
+ export declare function boundsText(t: Text, parentPos: Vec3, parentRot: Vec3, textHeight?: number): Bounds3;
435
+ /** How wide and high a text is drawn at the font size, its widest row by a rough character width and its rows a fifth of the font size apart */
436
+ export declare function textSize(text: string, fontSize: number): Vec2;
437
+ /**
438
+ * The text height for a scene whose objects take `size`, without its dimensions and texts: 32 up to the base size, else as many steps of 2^¼ above it
439
+ * as the longest side needs, rounded up, so a text is never smaller on the drawing than 32 on the base size
440
+ */
441
+ export declare function textHeightForSize(size: Vec3): number;
442
+ /**
443
+ * The text height of a scene of the groups, its texts without a font size and its dimensions': `textHeightForSize` of its objects' size, without its
444
+ * texts, which the text height would size
445
+ */
446
+ export declare function sceneTextHeight(groups: ReadonlyArray<Group>): number;
447
+ /** The group with its texts' backgrounds as the meshes just behind each text, in a group after its own, sized by its font size or else `textHeight` */
448
+ export declare function groupTextBackgrounds(g: Group, textHeight: number): Group;
402
449
  export declare function vec3RotCombine(outer: Vec3, inner: Vec3): Vec3;
403
450
  export declare function vec3RotInverse(rotation: Vec3): Vec3;
404
451
  export declare function vec3Rot(point: Vec3, origin: Vec3, rotation: Vec3): Vec3;
@@ -433,15 +480,25 @@ export declare const line: (start: Vec3, end: Vec3, thickness: number, material:
433
480
  export declare const culledLineMesh: (culledLine: CulledLine, material: Material) => Mesh;
434
481
  export declare const culledLineGeo: (start: Vec3, end: Vec3, normal: Vec3, thickness: number) => CulledLine;
435
482
  export declare const culledLine: (start: Vec3, end: Vec3, normal: Vec3, thickness: number, material: Material) => CulledLineMesh;
436
- export declare const text: (pos: Vec3, text: string, fontSize: number, material: Material, rot?: Vec3) => TextMesh;
483
+ export declare const text: (pos: Vec3, text: string, fontSize: number | undefined, material: Material, rot?: Vec3, background?: TextBackground) => TextMesh;
437
484
  export declare const tube: (curve: Curve, radius: number, material: Material, pos?: Vec3, rot?: Vec3) => Mesh;
438
485
  export declare const circleCurve: (radius: number, angleStart: number, angleLength: number) => CircleCurve;
439
486
  export declare const splineCurve: (points: ReadonlyArray<Vec3>) => SplineCurve;
440
487
  export declare const alignedDimension: (measurementStart: Vec3, measurementEnd: Vec3, linePosition: Vec3, text: string, views?: ReadonlyArray<View>, material?: Material, id?: string) => DimensionAligned;
441
488
  export declare function dimensionIsOfTypeAligned(dimension: Dimension): dimension is DimensionAligned;
442
489
  export declare function dimensionIsOfTypeMesh(dimension: Dimension): dimension is DimensionMesh;
443
- export declare function dimensionMeshifyAlignedDimension(dimension: DimensionAligned, sceneRotation: Vec3, _viewRotation: Vec3, onCreateLine: (start: Vec3, end: Vec3, norm: Vec3, thickness: number, mat: Material) => void, onCreateText: (pos: Vec3, measurement: string, fontSize: number, mat: Material, rot: Vec3, dir: Vec3, normal: Vec3) => void, onCreatePolygon: (p1: Vec3, p2: Vec3, p3: Vec3, mat: Material) => void, dimensionsMaterial?: Material): void;
444
- export declare function dimensionConvertToTypeMesh(dimension: Dimension, sceneRotation: Vec3, dimensionsMaterial?: Material): DimensionMesh;
490
+ /**
491
+ * Where each dimension's line and text are drawn, decided for the dimensions on the same line together, undefined for a mesh dimension:
492
+ *
493
+ * - The text a gap out from the line, out from the dimension's middle, wider than the dimension where nothing's in the way
494
+ * - Else on the other side of the line, towards the measured points, alternating with its neighbours'
495
+ * - Placed together for the dimensions on a line, whichever together are the clearest: texts out from the line, and apart
496
+ * - Each line moved out where it's too near the measured points or the line inside it on the same side for the texts between them
497
+ */
498
+ export declare function dimensionPlacements(dimensions: ReadonlyArray<Dimension>, textHeight?: number): ReadonlyArray<DimensionPlacement | undefined>;
499
+ /** Draws the dimension as `placement` places it, its text `textHeight` high; as if alone on its line if not given */
500
+ export declare function dimensionMeshifyAlignedDimension(dimension: DimensionAligned, sceneRotation: Vec3, _viewRotation: Vec3, onCreateLine: (start: Vec3, end: Vec3, norm: Vec3, thickness: number, mat: Material) => void, onCreateText: (pos: Vec3, measurement: string, fontSize: number, mat: Material, rot: Vec3, dir: Vec3, normal: Vec3) => void, onCreatePolygon: (p1: Vec3, p2: Vec3, p3: Vec3, mat: Material) => void, dimensionsMaterial?: Material, textHeight?: number, placement?: DimensionPlacement): void;
501
+ export declare function dimensionConvertToTypeMesh(dimension: Dimension, sceneRotation: Vec3, dimensionsMaterial?: Material, textHeight?: number, placement?: DimensionPlacement): DimensionMesh;
445
502
  export declare function sizeBoundsForCameraPos(size: Vec3, center: Vec3, rotation: Vec3): readonly [Vec3, Bounds3];
446
503
  export declare function rotationForCameraPos(view: View): Vec3;
447
504
  //# sourceMappingURL=abstract-3d.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"abstract-3d.d.ts","sourceRoot":"","sources":["../src/abstract-3d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abstract-3d.d.ts","sourceRoot":"","sources":["../src/abstract-3d.ts"],"names":[],"mappings":"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"}
@@ -207,13 +207,15 @@ export function bounds3FromVec3Array(vec3Array) {
207
207
  return bounds3(min, max);
208
208
  }
209
209
  export function boundsScene(scene) {
210
+ const textHeight = sceneTextHeight(scene.groups);
210
211
  const bounds = [];
211
212
  for (const group of scene.groups) {
212
- bounds.push(...boundsGroup(group, vec3Zero, vec3Zero));
213
+ bounds.push(...boundsGroup(group, vec3Zero, vec3Zero, textHeight));
213
214
  }
214
215
  return bounds3Merge(...bounds);
215
216
  }
216
- export function boundsGroup(group, parentPos, parentRot) {
217
+ /** The bounds of the group's meshes, its texts without a font size `textHeight` high */
218
+ export function boundsGroup(group, parentPos, parentRot, textHeight = defaultDimensionTextHeight) {
217
219
  const pos = vec3TransRot(group.pos, parentPos, parentRot);
218
220
  const rot = vec3RotCombine(parentRot, group.rot ?? vec3Zero);
219
221
  const bounds = [];
@@ -240,7 +242,7 @@ export function boundsGroup(group, parentPos, parentRot) {
240
242
  break;
241
243
  }
242
244
  case "Text": {
243
- bounds.push(boundsText(childMesh.geometry, pos, rot));
245
+ bounds.push(boundsText(childMesh.geometry, pos, rot, textHeight));
244
246
  break;
245
247
  }
246
248
  default:
@@ -248,7 +250,7 @@ export function boundsGroup(group, parentPos, parentRot) {
248
250
  }
249
251
  }
250
252
  for (const childGroup of group.groups ?? []) {
251
- bounds.push(...boundsGroup(childGroup, pos, rot));
253
+ bounds.push(...boundsGroup(childGroup, pos, rot, textHeight));
252
254
  }
253
255
  return bounds;
254
256
  }
@@ -319,18 +321,74 @@ export function boundsCone(c, parentPos, parentRot) {
319
321
  ].map((p) => vec3Add(pos, vec3Rot(p, vec3Zero, rot)));
320
322
  return bounds3FromVec3Array(points);
321
323
  }
322
- export function boundsText(t, parentPos, parentRot) {
323
- const characterRatio = 9.0 / 16.0;
324
- const charWidth = t.fontSize * characterRatio;
325
- const rows = t.text.split("\n");
326
- const width = Math.max(...rows.map((v) => v.length)) * charWidth;
327
- const height = rows.length * t.fontSize * 1.2;
328
- return boundsPlane({
329
- type: "Plane",
330
- pos: t.pos,
331
- size: vec2(width, height),
332
- rot: t.rot,
333
- }, parentPos, parentRot);
324
+ /** The bounds of the text and its background, `textHeight` high without a font size */
325
+ export function boundsText(t, parentPos, parentRot, textHeight = defaultDimensionTextHeight) {
326
+ const size = textSize(t.text, t.fontSize ?? textHeight);
327
+ const padding = 2 * (t.background?.padding ?? 0);
328
+ return boundsPlane({ type: "Plane", pos: t.pos, size: vec2(size.x + padding, size.y + padding), rot: t.rot }, parentPos, parentRot);
329
+ }
330
+ /** How wide and high a text is drawn at the font size, its widest row by a rough character width and its rows a fifth of the font size apart */
331
+ export function textSize(text, fontSize) {
332
+ const rows = text.split("\n");
333
+ return vec2(Math.max(...rows.map((v) => v.length)) * fontSize * (9 / 16), rows.length * fontSize * 1.2);
334
+ }
335
+ /** The longest side of the scene's objects that the text height 32 is for */
336
+ const textHeightBaseSize = 3600;
337
+ const textHeightBase = 32;
338
+ /** A step of the text height, half of ISO 3098's √2, so a scene just past a step has its text at most 19% larger than in proportion to its size */
339
+ const textHeightStep = 2 ** (1 / 4);
340
+ /**
341
+ * The text height for a scene whose objects take `size`, without its dimensions and texts: 32 up to the base size, else as many steps of 2^¼ above it
342
+ * as the longest side needs, rounded up, so a text is never smaller on the drawing than 32 on the base size
343
+ */
344
+ export function textHeightForSize(size) {
345
+ const steps = Math.ceil(Math.log(Math.max(size.x, size.y, size.z) / textHeightBaseSize) / Math.log(textHeightStep) - 1e-9);
346
+ return textHeightBase * textHeightStep ** Math.max(0, steps);
347
+ }
348
+ /**
349
+ * The text height of a scene of the groups, its texts without a font size and its dimensions': `textHeightForSize` of its objects' size, without its
350
+ * texts, which the text height would size
351
+ */
352
+ export function sceneTextHeight(groups) {
353
+ const withoutTexts = (g) => ({
354
+ ...g,
355
+ meshes: g.meshes?.filter((m) => m.geometry.type !== "Text"),
356
+ groups: g.groups?.map(withoutTexts),
357
+ });
358
+ return textHeightForSize(bounds3ToSize(bounds3Merge(...groups.flatMap((g) => boundsGroup(withoutTexts(g), vec3Zero, vec3Zero)))));
359
+ }
360
+ /** The group with its texts' backgrounds as the meshes just behind each text, in a group after its own, sized by its font size or else `textHeight` */
361
+ export function groupTextBackgrounds(g, textHeight) {
362
+ const backgrounds = (g.meshes ?? []).flatMap((m) => {
363
+ if (m.geometry.type !== "Text" || !m.geometry.background) {
364
+ return [];
365
+ }
366
+ const { padding, outline, depth, material, outlineMaterial, shape } = m.geometry.background;
367
+ const size = textSize(m.geometry.text, m.geometry.fontSize ?? textHeight);
368
+ const width = size.x + 2 * padding;
369
+ const height = size.y + 2 * padding;
370
+ const thickness = depth / 2;
371
+ const back = vec3(0, 0, -depth);
372
+ const radius = Math.max(width, height) / 2;
373
+ return [
374
+ group(shape === "circle"
375
+ ? [
376
+ cylinder(back, radius - outline, thickness, material, vec3(Math.PI / 2, 0, 0)),
377
+ cylinder(back, radius, thickness, outlineMaterial, vec3(Math.PI / 2, 0, 0), false, [
378
+ { type: "RoundHole", radius: radius - outline, pos: vec2Zero },
379
+ ]),
380
+ ]
381
+ : [
382
+ plane(back, vec2(width - 2 * outline, height - 2 * outline), material),
383
+ box(vec3(width, outline, thickness), outlineMaterial, vec3Add(back, vec3(0, (height - outline) / 2, 0))),
384
+ box(vec3(width, outline, thickness), outlineMaterial, vec3Add(back, vec3(0, -(height - outline) / 2, 0))),
385
+ box(vec3(outline, height - 2 * outline, thickness), outlineMaterial, vec3Add(back, vec3((width - outline) / 2, 0, 0))),
386
+ box(vec3(outline, height - 2 * outline, thickness), outlineMaterial, vec3Add(back, vec3(-(width - outline) / 2, 0, 0))),
387
+ ], m.geometry.pos, m.geometry.rot ?? vec3Zero),
388
+ ];
389
+ });
390
+ const groups = (g.groups ?? []).map((c) => groupTextBackgrounds(c, textHeight));
391
+ return backgrounds.length === 0 && g.groups === undefined ? g : { ...g, groups: [...groups, ...backgrounds] };
334
392
  }
335
393
  // -- Transformations
336
394
  export function vec3RotCombine(outer, inner) {
@@ -593,8 +651,8 @@ export const culledLine = (start, end, normal, thickness, material) => ({
593
651
  geometry: { type: "CulledLine", start, end, normal, thickness },
594
652
  material,
595
653
  });
596
- export const text = (pos, text, fontSize, material, rot = vec3Zero) => ({
597
- geometry: { type: "Text", pos, text, fontSize, rot },
654
+ export const text = (pos, text, fontSize, material, rot = vec3Zero, background) => ({
655
+ geometry: { type: "Text", pos, text, fontSize, rot, background },
598
656
  material,
599
657
  });
600
658
  export const tube = (curve, radius, material, pos = vec3Zero, rot = vec3Zero) => ({
@@ -623,23 +681,178 @@ export function dimensionIsOfTypeAligned(dimension) {
623
681
  export function dimensionIsOfTypeMesh(dimension) {
624
682
  return "meshes" in dimension;
625
683
  }
626
- export function dimensionMeshifyAlignedDimension(dimension, sceneRotation, _viewRotation, onCreateLine, onCreateText, onCreatePolygon, dimensionsMaterial) {
684
+ const defaultDimensionTextHeight = 44;
685
+ // The sizes as shares of the text height
686
+ const dimensionGap = 8 / defaultDimensionTextHeight;
687
+ /** How far the marks at a dimension's ends go to each side of the dimension line, short of the text's digits a gap from it */
688
+ const dimensionMark = 10 / defaultDimensionTextHeight;
689
+ const dimensionArrowLength = 22.5 / defaultDimensionTextHeight;
690
+ const dimensionArrowHalfBase = 5.625 / defaultDimensionTextHeight;
691
+ /** How far apart the rows of a dimension's text are, as `textSize` measures them, each drawn as a text of its own so every renderer spaces them alike */
692
+ const dimensionTextRowStep = 1.2;
693
+ /** The lines' thickness, whatever the text height, as the three renderer draws it in pixels */
694
+ const dimensionLineThickness = 0.5;
695
+ /** A dimension's measured length, its text and how wide the text is drawn, as `textSize` measures it */
696
+ function dimensionMeasure(dimension, textHeight) {
697
+ const length = vec3Length(vec3Sub(dimension.measurementEnd, dimension.measurementStart));
698
+ const text = dimension.text ?? length.toFixed(1).replace(/[.,]0$/, "");
699
+ const rows = text.split("\n");
700
+ return { length, text, rows, textWidth: textSize(text, textHeight).x };
701
+ }
702
+ /**
703
+ * Where each dimension's line and text are drawn, decided for the dimensions on the same line together, undefined for a mesh dimension:
704
+ *
705
+ * - The text a gap out from the line, out from the dimension's middle, wider than the dimension where nothing's in the way
706
+ * - Else on the other side of the line, towards the measured points, alternating with its neighbours'
707
+ * - Placed together for the dimensions on a line, whichever together are the clearest: texts out from the line, and apart
708
+ * - Each line moved out where it's too near the measured points or the line inside it on the same side for the texts between them
709
+ */
710
+ export function dimensionPlacements(dimensions, textHeight = defaultDimensionTextHeight) {
711
+ const tolerance = textHeight * 0.01;
712
+ const gap = textHeight * dimensionGap;
713
+ const lines = Array();
714
+ dimensions.forEach((d, index) => {
715
+ if (dimensionIsOfTypeMesh(d)) {
716
+ return;
717
+ }
718
+ const direction = vec3Normalize(vec3Sub(d.measurementEnd, d.measurementStart));
719
+ const flip = Math.abs(direction.x) > 1e-6 ? direction.x < 0 : Math.abs(direction.y) > 1e-6 ? direction.y < 0 : direction.z < 0;
720
+ const along = flip ? vec3Scale(direction, -1) : direction;
721
+ const start = vec3Dot(d.measurementStart, along);
722
+ const end = vec3Dot(d.measurementEnd, along);
723
+ const linePoint = vec3Sub(d.linePosition, vec3Scale(along, vec3Dot(d.linePosition, along)));
724
+ const outward = vec3Normalize(vec3Sub(linePoint, vec3Sub(d.measurementStart, vec3Scale(along, start))));
725
+ const { textWidth, rows } = dimensionMeasure(d, textHeight);
726
+ const span = {
727
+ index,
728
+ view: d.views?.[0] ?? "front",
729
+ along,
730
+ linePoint,
731
+ linePosition: d.linePosition,
732
+ measurementStart: d.measurementStart,
733
+ measurementEnd: d.measurementEnd,
734
+ outward,
735
+ row: vec3Dot(d.linePosition, outward),
736
+ measured: Math.max(vec3Dot(d.measurementStart, outward), vec3Dot(d.measurementEnd, outward)),
737
+ min: Math.min(start, end),
738
+ max: Math.max(start, end),
739
+ startIsMin: start <= end,
740
+ textWidth,
741
+ split: rows.length > 1,
742
+ // Its first row on one side, the rest on the other
743
+ textBlockHeight: textHeight * (1 + dimensionTextRowStep * Math.max(0, rows.length - 2)),
744
+ };
745
+ const line = lines.find(([s]) => s && s.view === span.view && vec3Dot(s.along, along) > 1 - 1e-6 && vec3Length(vec3Sub(s.linePoint, span.linePoint)) < tolerance);
746
+ if (line) {
747
+ line.push(span);
748
+ }
749
+ else {
750
+ lines.push([span]);
751
+ }
752
+ });
753
+ const sameSide = (a, b) => a !== undefined && a.view === b.view && vec3Dot(a.along, b.along) > 1 - 1e-6 && vec3Dot(a.outward, b.outward) > 1 - 1e-6;
754
+ // The lines' texts, placed before the lines are moved out, as the room on each side of a line is left for its texts
755
+ const decisions = lines.flatMap((line) => {
756
+ const [first] = line;
757
+ if (!first) {
758
+ return [];
759
+ }
760
+ // How far apart two texts out from their dimensions' middles are
761
+ const apart = (l, o) => Math.abs((l.s.min + l.s.max) / 2 - (o.s.min + o.s.max) / 2) - (l.s.textWidth + o.s.textWidth) / 2;
762
+ const sorted = line.toSorted((a, b) => a.min - b.min);
763
+ // What makes a text unclear, worst first: across its neighbour's, so they alternate even where every other one's still clash, across another text,
764
+ // two texts on one side so close they read as one, and a text towards the measured points, more at an end of the line, with room past it
765
+ const placeCost = (l, placed) => (l.inward ? (l.s === sorted[0] || l.s === sorted.at(-1) ? 5 : 4) : 0) +
766
+ placed
767
+ .filter((o) => o.inward === l.inward || o.s.split || l.s.split)
768
+ .reduce((sum, o) => sum +
769
+ (apart(l, o) < 2 * gap - tolerance
770
+ ? o === placed.at(-1)
771
+ ? 100000
772
+ : 1000
773
+ : apart(l, o) < textHeight / 2
774
+ ? 10 * (1 - (2 * apart(l, o)) / textHeight)
775
+ : 0), 0);
776
+ const placed = sorted
777
+ .reduce((states, s) => states
778
+ .flatMap(({ placed, cost }) => (s.split ? [false] : [false, true]).map((inward) => ({
779
+ placed: [...placed, { s, inward }],
780
+ cost: cost + placeCost({ s, inward }, placed),
781
+ })))
782
+ .toSorted((a, b) => a.cost - b.cost)
783
+ .slice(0, 64), [{ placed: [], cost: 0 }])
784
+ .at(0)?.placed ?? [];
785
+ return [{ line, first, placed }];
786
+ });
787
+ // How far a line's texts, or the marks at its ends, take on each side of it
788
+ const mark = textHeight * dimensionMark;
789
+ const reach = (placed, inward) => Math.max(mark, ...placed.filter((l) => l.inward === inward || l.s.split).map((l) => gap + l.s.textBlockHeight));
790
+ // How far out each line is moved to: its texts towards the measured points a gap past them or past the texts out from the line inside it on the same
791
+ // side
792
+ const rows = new Map();
793
+ for (const { line, first, placed } of decisions.toSorted((a, b) => a.first.row - b.first.row)) {
794
+ rows.set(first, Math.max(first.row, Math.max(...line.map((s) => s.measured)) + gap + reach(placed, true), ...decisions
795
+ .filter((d) => sameSide(d.first, first) && d.first.row < first.row - tolerance)
796
+ .map((d) => (rows.get(d.first) ?? 0) + reach(d.placed, false) + gap + reach(placed, true))));
797
+ }
798
+ // Every text's rectangle on each side it's on, along its line from its left to its right and out from its bottom to its top
799
+ const texts = decisions.flatMap(({ first, placed }) => placed.flatMap(({ s, inward }) => (s.split ? [false, true] : [inward]).map((side) => {
800
+ const row = rows.get(first) ?? first.row;
801
+ const middle = (s.min + s.max) / 2;
802
+ return {
803
+ s,
804
+ left: middle - s.textWidth / 2,
805
+ right: middle + s.textWidth / 2,
806
+ bottom: side ? row - gap - s.textBlockHeight : row + gap,
807
+ top: side ? row - gap : row + gap + s.textBlockHeight,
808
+ };
809
+ })));
810
+ const placements = new Map();
811
+ for (const { first, placed } of decisions) {
812
+ const row = rows.get(first) ?? first.row;
813
+ for (const { s, inward } of placed) {
814
+ const linePoint = vec3Add(s.linePoint, vec3Scale(s.outward, row - s.row));
815
+ const at = (t, u) => vec3Add(linePoint, vec3Add(vec3Scale(s.along, t), vec3Scale(s.outward, u - row)));
816
+ // At each end the mark across the line, and the extension line from the measured point to it, broken half a gap short of each text
817
+ // it'd cross on the same side
818
+ const endLines = [
819
+ [s.min, s.startIsMin ? s.measurementStart : s.measurementEnd],
820
+ [s.max, s.startIsMin ? s.measurementEnd : s.measurementStart],
821
+ ].flatMap(([t, point]) => {
822
+ const extension = texts
823
+ .filter((o) => sameSide(o.s, s) && t > o.left && t < o.right)
824
+ .reduce((pieces, o) => pieces.flatMap(([from, to]) => [[from, Math.min(to, o.bottom - gap / 2)], [Math.max(from, o.top + gap / 2), to]]), [[vec3Dot(point, s.outward), row - mark]])
825
+ .filter(([from, to]) => to - from >= gap);
826
+ return [...extension, [row - mark, row + mark]].map(([from, to]) => [at(t, from), at(t, to)]);
827
+ });
828
+ // The rectangle the dimension line, the marks at its ends and its text take, and the extension lines
829
+ const middle = (s.min + s.max) / 2;
830
+ const corners = [Math.min(s.min, middle - s.textWidth / 2), Math.max(s.max, middle + s.textWidth / 2)].flatMap((t) => [inward || s.split ? -gap - s.textBlockHeight : -mark, inward && !s.split ? mark : gap + s.textBlockHeight].map((u) => at(t, row + u)));
831
+ const linePosition = vec3Add(s.linePosition, vec3Scale(s.outward, row - s.row));
832
+ placements.set(s.index, {
833
+ linePosition,
834
+ text: { inward },
835
+ endLines,
836
+ bounds: bounds3FromVec3Array([...corners, ...endLines.flat()]),
837
+ });
838
+ }
839
+ }
840
+ return dimensions.map((_, i) => placements.get(i));
841
+ }
842
+ /** Draws the dimension as `placement` places it, its text `textHeight` high; as if alone on its line if not given */
843
+ export function dimensionMeshifyAlignedDimension(dimension, sceneRotation, _viewRotation, onCreateLine, onCreateText, onCreatePolygon, dimensionsMaterial, textHeight = defaultDimensionTextHeight, placement) {
627
844
  const defaultMaterial = { normal: "rgb(0, 0, 0)", opacity: 1.0, roughness: 1.0, metalness: 0.0 };
628
845
  const material = dimension.material ?? dimensionsMaterial ?? defaultMaterial;
629
- const fontGlyphWidthRatio = 0.4815;
630
- const textSize = 44;
631
- const textOffset = 8;
632
- const textThreshold = textOffset + textSize * fontGlyphWidthRatio * 7;
633
- const lineThickness = 0.5;
634
- const arrowLength = 40;
635
- const arrowHalfBase = 10;
636
- const lp = dimension.linePosition;
846
+ const place = placement ?? dimensionPlacements([dimension], textHeight)[0];
847
+ if (!place) {
848
+ return;
849
+ }
850
+ const gap = textHeight * dimensionGap;
851
+ const lineThickness = dimensionLineThickness;
852
+ const lp = place.linePosition;
637
853
  const ms = dimension.measurementStart;
638
854
  const me = dimension.measurementEnd;
639
- const measurementLength = vec3Length(vec3Sub(me, ms));
640
- const measurement = dimension.text ?? measurementLength.toFixed(1).replace(/[.,]0$/, "");
641
- const measurementRows = measurement.split("\n");
642
- const textHeight = measurementRows.length * textSize;
855
+ const { rows: measurementRows } = dimensionMeasure(dimension, textHeight);
643
856
  const view = dimension.views?.[0] ?? "front";
644
857
  const basis = dimensionViewBasises[view];
645
858
  //calculate the line positions
@@ -650,16 +863,31 @@ export function dimensionMeshifyAlignedDimension(dimension, sceneRotation, _view
650
863
  const offset = vec3Sub(lp, projected);
651
864
  const ls = vec3Add(ms, offset);
652
865
  const le = vec3Add(me, offset);
653
- const linesDiff = vec3Sub(ls, ms);
654
- const dirBetweenLines = vec3Normalize(linesDiff);
655
- const measurementWidth = vec3Length(linesDiff);
656
- const displacedDistance = measurementWidth - textHeight / 2;
657
- const offsetDisplaced = vec3Scale(offset, displacedDistance / measurementWidth);
658
- const lsDisplaced = vec3Add(ms, offsetDisplaced);
659
- const leDisplaced = vec3Add(me, offsetDisplaced);
660
- const lcDisplaced = vec3Scale(vec3Add(lsDisplaced, leDisplaced), 0.5);
661
- onCreateLine(ms, ls, basis.normal, lineThickness, material);
662
- onCreateLine(me, le, basis.normal, lineThickness, material);
866
+ const lc = vec3Scale(vec3Add(ls, le), 0.5);
867
+ const dirBetweenLines = vec3Normalize(offset);
868
+ // The lines at its ends and the dimension line
869
+ place.endLines.forEach(([start, end]) => onCreateLine(start, end, basis.normal, lineThickness, material));
870
+ onCreateLine(ls, le, basis.normal, lineThickness, material);
871
+ // An arrow inside each end, pointing at its mark, where both fit with a gap of the line between them
872
+ const arrowLength = textHeight * dimensionArrowLength;
873
+ const arrowHalfBase = textHeight * dimensionArrowHalfBase;
874
+ if (vec3Length(vec3Sub(le, ls)) >= 2 * arrowLength + gap) {
875
+ for (const [tip, inward] of [
876
+ [ls, direction],
877
+ [le, vec3Scale(direction, -1)],
878
+ ]) {
879
+ const base = vec3Add(tip, vec3Scale(inward, arrowLength));
880
+ const a = vec3Add(base, vec3Scale(dirBetweenLines, arrowHalfBase));
881
+ const b = vec3Sub(base, vec3Scale(dirBetweenLines, arrowHalfBase));
882
+ // The winding order facing the view's normal
883
+ if (vec3Dot(vec3Cross(vec3Sub(a, tip), vec3Sub(b, tip)), basis.normal) >= 0) {
884
+ onCreatePolygon(tip, a, b, material);
885
+ }
886
+ else {
887
+ onCreatePolygon(tip, b, a, material);
888
+ }
889
+ }
890
+ }
663
891
  const rotatedDirBetweenLines = vec3TransRot(dirBetweenLines, vec3Zero, sceneRotation);
664
892
  const rotatedNormal = vec3TransRot(basis.normal, vec3Zero, sceneRotation);
665
893
  const renderedBasis = getDimensionViewBasisFromNormal(rotatedNormal);
@@ -671,39 +899,14 @@ export function dimensionMeshifyAlignedDimension(dimension, sceneRotation, _view
671
899
  const finalBasis = dimensionViewBasises.front;
672
900
  const finalSide = getDimensionSide(dirBetweenLines, finalBasis);
673
901
  const finalDir = getDimensionTextDirection(finalSide, finalBasis);
674
- onCreateText(lcDisplaced, measurement, textSize, material, textRot, finalDir, vec3(0, 0, 1));
675
- if (measurementLength > textThreshold) {
676
- const textWidth = Math.max(...measurementRows.map((t) => t.length)) * (textSize * fontGlyphWidthRatio);
677
- const lineDir = vec3Normalize(vec3Sub(leDisplaced, lsDisplaced));
678
- const halfTextWidth = textOffset + textWidth * 0.5;
679
- const leftEnd = vec3Sub(lcDisplaced, vec3Scale(lineDir, halfTextWidth));
680
- const rightStart = vec3Add(lcDisplaced, vec3Scale(lineDir, halfTextWidth));
681
- onCreateLine(lsDisplaced, leftEnd, basis.normal, lineThickness, material);
682
- onCreateLine(rightStart, leDisplaced, basis.normal, lineThickness, material);
683
- //arrows
684
- const arrowBaseStart = vec3Add(lsDisplaced, vec3Scale(lineDir, arrowLength));
685
- const arrowBaseEnd = vec3Add(leDisplaced, vec3Scale(lineDir, -arrowLength));
686
- const arrowBaseStart1 = vec3Add(arrowBaseStart, vec3Scale(dirBetweenLines, arrowHalfBase));
687
- const arrowBaseStart2 = vec3Add(arrowBaseStart, vec3Scale(dirBetweenLines, -arrowHalfBase));
688
- const arrowBaseEnd1 = vec3Add(arrowBaseEnd, vec3Scale(dirBetweenLines, arrowHalfBase));
689
- const arrowBaseEnd2 = vec3Add(arrowBaseEnd, vec3Scale(dirBetweenLines, -arrowHalfBase));
690
- //the winding order needs to be correct according to the normal
691
- const polygonFacing = (a, b, c) => {
692
- const ab = vec3Sub(b, a);
693
- const ac = vec3Sub(c, a);
694
- const triangleNormal = vec3Cross(ab, ac);
695
- if (vec3Dot(triangleNormal, basis.normal) >= 0) {
696
- onCreatePolygon(a, b, c, material);
697
- }
698
- else {
699
- onCreatePolygon(a, c, b, material);
700
- }
701
- };
702
- polygonFacing(lsDisplaced, arrowBaseStart2, arrowBaseStart1);
703
- polygonFacing(leDisplaced, arrowBaseEnd1, arrowBaseEnd2);
704
- }
902
+ // Each row a text of its own: one row a gap out from the line or towards the measured points, of several the first a gap over the line, as the
903
+ // text reads, and the rest from a gap under it
904
+ const textUp = vec3Normalize(vec3Cross(basis.normal, textDir));
905
+ measurementRows.forEach((row, i) => onCreateText(measurementRows.length === 1
906
+ ? vec3Add(lc, vec3Scale(dirBetweenLines, (place.text.inward ? -1 : 1) * (gap + textHeight / 2)))
907
+ : vec3Add(lc, vec3Scale(textUp, i === 0 ? gap + textHeight / 2 : -(gap + textHeight / 2 + (i - 1) * dimensionTextRowStep * textHeight))), row, textHeight, material, textRot, finalDir, vec3(0, 0, 1)));
705
908
  }
706
- export function dimensionConvertToTypeMesh(dimension, sceneRotation, dimensionsMaterial) {
909
+ export function dimensionConvertToTypeMesh(dimension, sceneRotation, dimensionsMaterial, textHeight, placement) {
707
910
  if (dimensionIsOfTypeMesh(dimension)) {
708
911
  return dimension;
709
912
  }
@@ -717,7 +920,7 @@ export function dimensionConvertToTypeMesh(dimension, sceneRotation, dimensionsM
717
920
  const onCreatePolygon = (p1, p2, p3, mat) => {
718
921
  meshes.push(polygon([p1, p2, p3], mat));
719
922
  };
720
- dimensionMeshifyAlignedDimension(dimension, sceneRotation, vec3Zero, onCreateLine, onCreateText, onCreatePolygon, dimensionsMaterial);
923
+ dimensionMeshifyAlignedDimension(dimension, sceneRotation, vec3Zero, onCreateLine, onCreateText, onCreatePolygon, dimensionsMaterial, textHeight, placement);
721
924
  return {
722
925
  meshes,
723
926
  pos: vec3Zero,