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.
- package/lib/abstract-3d.d.ts +63 -6
- package/lib/abstract-3d.d.ts.map +1 -1
- package/lib/abstract-3d.js +277 -74
- package/lib/abstract-3d.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.d.ts +2 -2
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js +6 -6
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.d.ts +2 -2
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js +3 -3
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js.map +1 -1
- package/lib/renderers/dxf/dxf.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf.js +12 -8
- package/lib/renderers/dxf/dxf.js.map +1 -1
- package/lib/renderers/ifc/ifc.d.ts.map +1 -1
- package/lib/renderers/ifc/ifc.js +5 -3
- package/lib/renderers/ifc/ifc.js.map +1 -1
- package/lib/renderers/step/step.d.ts.map +1 -1
- package/lib/renderers/step/step.js +3 -2
- package/lib/renderers/step/step.js.map +1 -1
- package/lib/renderers/stl/stl.d.ts.map +1 -1
- package/lib/renderers/stl/stl.js +7 -3
- package/lib/renderers/stl/stl.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-text.d.ts +1 -1
- package/lib/renderers/svg/svg-geometries/svg-text.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-text.js +2 -2
- package/lib/renderers/svg/svg-geometries/svg-text.js.map +1 -1
- package/lib/renderers/svg/svg.d.ts.map +1 -1
- package/lib/renderers/svg/svg.js +13 -10
- package/lib/renderers/svg/svg.js.map +1 -1
- package/lib/renderers/svg-bsp/svg-geometries/svg-text.d.ts +1 -1
- package/lib/renderers/svg-bsp/svg-geometries/svg-text.d.ts.map +1 -1
- package/lib/renderers/svg-bsp/svg-geometries/svg-text.js +2 -2
- package/lib/renderers/svg-bsp/svg-geometries/svg-text.js.map +1 -1
- package/lib/renderers/svg-bsp/svg.d.ts.map +1 -1
- package/lib/renderers/svg-bsp/svg.js +13 -10
- package/lib/renderers/svg-bsp/svg.js.map +1 -1
- package/lib/renderers/three/build/build.js +1 -1
- package/lib/renderers/three/build/build.js.map +1 -1
- package/lib/renderers/three/compile/compile.d.ts +2 -0
- package/lib/renderers/three/compile/compile.d.ts.map +1 -1
- package/lib/renderers/three/compile/compile.js +6 -4
- package/lib/renderers/three/compile/compile.js.map +1 -1
- package/package.json +1 -1
- package/src/abstract-3d.test.ts +254 -0
- package/src/abstract-3d.ts +427 -85
- package/src/renderers/dxf/dxf-encoding/dxf-dimension.ts +22 -2
- package/src/renderers/dxf/dxf-geometries/dxf-dimension.ts +12 -2
- package/src/renderers/dxf/dxf.ts +21 -4
- package/src/renderers/ifc/ifc.ts +16 -3
- package/src/renderers/step/step.ts +3 -2
- package/src/renderers/stl/stl.ts +12 -4
- package/src/renderers/svg/svg-geometries/svg-text.ts +3 -2
- package/src/renderers/svg/svg.ts +29 -9
- package/src/renderers/svg-bsp/svg-geometries/svg-text.ts +3 -2
- package/src/renderers/svg-bsp/svg.ts +29 -9
- package/src/renderers/three/build/build.test.ts +2 -2
- package/src/renderers/three/build/build.ts +1 -1
- package/src/renderers/three/compile/compile.ts +22 -4
- package/lib/renderers/dxf/color.d.ts +0 -7
- package/lib/renderers/dxf/color.d.ts.map +0 -1
- package/lib/renderers/dxf/color.js +0 -311
- package/lib/renderers/dxf/color.js.map +0 -1
- package/lib/renderers/dxf/dxf-encoding.d.ts +0 -17
- package/lib/renderers/dxf/dxf-encoding.d.ts.map +0 -1
- package/lib/renderers/dxf/dxf-encoding.js +0 -18467
- package/lib/renderers/dxf/dxf-encoding.js.map +0 -1
- package/lib/renderers/react/react-camera.d.ts +0 -71
- package/lib/renderers/react/react-camera.d.ts.map +0 -1
- package/lib/renderers/react/react-camera.js +0 -179
- package/lib/renderers/react/react-camera.js.map +0 -1
- package/lib/renderers/react/react-dimension.d.ts +0 -16
- package/lib/renderers/react/react-dimension.d.ts.map +0 -1
- package/lib/renderers/react/react-dimension.js +0 -29
- package/lib/renderers/react/react-dimension.js.map +0 -1
- package/lib/renderers/react/react-group.d.ts +0 -23
- package/lib/renderers/react/react-group.d.ts.map +0 -1
- package/lib/renderers/react/react-group.js +0 -68
- package/lib/renderers/react/react-group.js.map +0 -1
- package/lib/renderers/react/react-hotspot.d.ts +0 -27
- package/lib/renderers/react/react-hotspot.d.ts.map +0 -1
- package/lib/renderers/react/react-hotspot.js +0 -37
- package/lib/renderers/react/react-hotspot.js.map +0 -1
- package/lib/renderers/react/react-image-material.d.ts +0 -28
- package/lib/renderers/react/react-image-material.d.ts.map +0 -1
- package/lib/renderers/react/react-image-material.js +0 -81
- package/lib/renderers/react/react-image-material.js.map +0 -1
- package/lib/renderers/react/react-material.d.ts +0 -19
- package/lib/renderers/react/react-material.d.ts.map +0 -1
- package/lib/renderers/react/react-material.js +0 -50
- package/lib/renderers/react/react-material.js.map +0 -1
- package/lib/renderers/react/react-mesh.d.ts +0 -11
- package/lib/renderers/react/react-mesh.d.ts.map +0 -1
- package/lib/renderers/react/react-mesh.js +0 -229
- package/lib/renderers/react/react-mesh.js.map +0 -1
- package/lib/renderers/react/react-scene.d.ts +0 -28
- package/lib/renderers/react/react-scene.d.ts.map +0 -1
- package/lib/renderers/react/react-scene.js +0 -20
- package/lib/renderers/react/react-scene.js.map +0 -1
- package/lib/renderers/react/react-types.d.ts +0 -7
- package/lib/renderers/react/react-types.d.ts.map +0 -1
- package/lib/renderers/react/react-types.js +0 -3
- package/lib/renderers/react/react-types.js.map +0 -1
- package/lib/renderers/shared.d.ts +0 -30
- package/lib/renderers/shared.d.ts.map +0 -1
- package/lib/renderers/shared.js +0 -164
- package/lib/renderers/shared.js.map +0 -1
package/lib/abstract-3d.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
444
|
-
|
|
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
|
package/lib/abstract-3d.d.ts.map
CHANGED
|
@@ -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":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,6HAA6H;IAC7H,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC;IAClC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC;IAEpC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,UAAU,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,cAAc,GAAG,aAAa,GAAG,KAAK,CAAC;AAExE,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gJAAgJ;IAChJ,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAElE,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAEzD,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,8GAA8G;IAC9G,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC;IAK9B,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAK5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,8GAA8G;IAC9G,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AASF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,2FAA2F;IAC3F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,qFAAqF;AACrF,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,WAAW,GACX,QAAQ,GACR,iBAAiB,GACjB,gBAAgB,GAChB,WAAW,GACX,WAAW,GACX,qBAAqB,GACrB,oBAAoB,GACpB,eAAe,GACf,UAAU,GACV,YAAY,GACZ,iBAAiB,GACjB,iBAAiB,GACjB,MAAM,CAAC;AAEX,4IAA4I;AAC5I,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;CAC3H,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,yHAAyH;IACzH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,gJAAgJ;IAChJ,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,wGAAwG;AACxG,eAAO,MAAM,aAAa,YAAI,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAE3I,2FAA2F;AAC3F,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAU3D,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,KAAK,GACb;IACE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;CAC/B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2BAA2B;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4GAA4G;IAC5G,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAK3B,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,WAAW,GAAG,WAAW,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC;AAEjG,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;CACtC,CAAC;AAEF,uIAAuI;AACvI,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG;IAChB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,iHAAiH;IACjH,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CAChD,CAAC;AAEF,uFAAuF;AACvF,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,eAAO,MAAM,QAAQ,YACnB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,SAAS,EACT,UAAU,CACF,CAAC;AAEX,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,UAAU,CAAC;AAE1C,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,KAAK,YAAI,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAClF,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1C,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAClF,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAC9E,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AACxF,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAChF,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAChF,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAC5F,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAChF,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AACtF,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAChF,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AACpF,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAElF,eAAO,MAAM,IAAI,MAAO,MAAM,KAAK,MAAM,KAAK,MAAM,KAAG,IAAqB,CAAC;AAC7E,eAAO,MAAM,IAAI,MAAO,MAAM,KAAK,MAAM,KAAG,IAAkB,CAAC;AAE/D,eAAO,MAAM,QAAQ,MAAgB,CAAC;AACtC,eAAO,MAAM,QAAQ,MAAgB,CAAC;AACtC,eAAO,MAAM,QAAQ,MAAiB,CAAC;AACvC,eAAO,MAAM,QAAQ,MAAgB,CAAC;AACtC,eAAO,MAAM,QAAQ,MAAiB,CAAC;AACvC,eAAO,MAAM,QAAQ,MAAgB,CAAC;AACtC,eAAO,MAAM,QAAQ,MAAiB,CAAC;AAEvC,eAAO,MAAM,QAAQ,MAAa,CAAC;AAEnC,eAAO,MAAM,QAAQ,MAAO,IAAI,KAAG,IAAwB,CAAC;AAC5D,eAAO,MAAM,QAAQ,MAAO,IAAI,KAAG,IAA8B,CAAC;AAElE,eAAO,MAAM,SAAS,MAAO,IAAI,KAAK,MAAM,KAAG,IAA8B,CAAC;AAC9E,eAAO,MAAM,SAAS,MAAO,IAAI,KAAK,MAAM,KAAG,IAAuC,CAAC;AAEvF,eAAO,MAAM,OAAO,MAAO,IAAI,KAAK,IAAI,KAAG,IAAkC,CAAC;AAC9E,eAAO,MAAM,OAAO,MAAO,IAAI,KAAK,IAAI,KAAG,IAA6C,CAAC;AAEzF,eAAO,MAAM,OAAO,MAAO,IAAI,KAAK,IAAI,KAAG,IAAkC,CAAC;AAC9E,eAAO,MAAM,OAAO,MAAO,IAAI,KAAK,IAAI,KAAG,IAA6C,CAAC;AAEzF,eAAO,MAAM,OAAO,MAAO,IAAI,KAAK,IAAI,KAAG,MAA+B,CAAC;AAC3E,eAAO,MAAM,OAAO,MAAO,IAAI,KAAK,IAAI,KAAG,MAA2C,CAAC;AAEvF,eAAO,MAAM,UAAU,MAAO,IAAI,KAAG,MAA0C,CAAC;AAChF,eAAO,MAAM,UAAU,MAAO,IAAI,KAAG,MAAsD,CAAC;AAE5F,eAAO,MAAM,aAAa,MAAO,IAAI,KAAG,IAAuC,CAAC;AAChF,eAAO,MAAM,aAAa,MAAO,IAAI,KAAG,IAAuC,CAAC;AAEhF,eAAO,MAAM,WAAW,MAAO,IAAI,KAAK,IAAI,KAAG,IAA0D,CAAC;AAE1G,eAAO,MAAM,eAAe,MAAO,IAAI,KAAK,IAAI,KAAG,MAA6C,CAAC;AAEjG,eAAO,MAAM,QAAQ,MAAO,IAAI,KAAK,IAAI,KAAG,MAA+B,CAAC;AAE5E,eAAO,MAAM,QAAQ,MAAO,IAAI,KAAK,IAAI,KAAG,IAAkC,CAAC;AAC/E,eAAO,MAAM,QAAQ,MAAO,IAAI,KAAK,IAAI,KAAG,IAA6C,CAAC;AAE1F,eAAO,MAAM,QAAQ,QAAS,MAAM,KAAG,IAAsB,CAAC;AAC9D,eAAO,MAAM,QAAQ,QAAS,MAAM,KAAG,IAA2B,CAAC;AAEnE,eAAO,MAAM,UAAU,MAAO,IAAI,KAAK,IAAI,KAAG,OAA+C,CAAC;AAC9F,eAAO,MAAM,UAAU,MAAO,IAAI,KAAK,IAAI,KAAG,OAAmE,CAAC;AAElH,eAAO,MAAM,SAAS,SAAU,aAAa,CAAC,IAAI,CAAC,KAAG,MAAmD,CAAC;AAC1G,eAAO,MAAM,SAAS,SAAU,aAAa,CAAC,IAAI,CAAC,KAAG,MAAmD,CAAC;AAC1G,eAAO,MAAM,SAAS,SAAU,aAAa,CAAC,IAAI,CAAC,KAAG,MAAmD,CAAC;AAE1G,eAAO,MAAM,WAAW,MAAO,IAAI,KAAK,IAAI,KAAG,IAAiF,CAAC;AAEjI,eAAO,MAAM,eAAe,MAAO,IAAI,KAAK,IAAI,KAAG,MAAgE,CAAC;AAEpH,eAAO,MAAM,QAAQ,MAAO,IAAI,KAAK,IAAI,KAAG,MAA+B,CAAC;AAE5E,eAAO,MAAM,SAAS,SAAU,IAAI,SAAS,IAAI,KAAG,IACiE,CAAC;AAItH,eAAO,MAAM,MAAM,SAAU,MAAM,QAAQ,MAAM,yBAA0B,OAA6C,CAAC;AACzH,eAAO,MAAM,MAAM,QAAS,MAAM,yBAA0B,OAAqC,CAAC;AAClG,eAAO,MAAM,GAAG,SAAU,MAAM,QAAQ,MAAM,yBAA0B,OAAmC,CAAC;AAC5G,eAAO,MAAM,OAAO,SAAU,MAAM,QAAQ,MAAM,yBAA0B,OAAkC,CAAC;AAC/G,eAAO,MAAM,GAAG,SAAU,MAAM,QAAQ,MAAM,yBAA0B,OAAmC,CAAC;AAC5G,eAAO,MAAM,IAAI,SAAU,MAAM,QAAQ,MAAM,yBAA0B,OAAkC,CAAC;AAI5G,eAAO,MAAM,MAAM,QAAS,MAAM,OAAO,MAAM,KAAG,MAAwB,CAAC;AAC3E,eAAO,MAAM,OAAO,QAAS,IAAI,OAAO,IAAI,KAAG,OAAyB,CAAC;AACzE,eAAO,MAAM,OAAO,QAAS,IAAI,OAAO,IAAI,KAAG,OAAyB,CAAC;AAEzE,eAAO,MAAM,UAAU,EAAE,MAAqB,CAAC;AAC/C,eAAO,MAAM,WAAW,EAAE,OAAqC,CAAC;AAChE,eAAO,MAAM,WAAW,EAAE,OAAqC,CAAC;AAEhE,eAAO,MAAM,aAAa,WAAY,OAAO,KAAG,IAAsE,CAAC;AAEvH,eAAO,MAAM,YAAY,WAAY,OAAO,UAAU,IAAI,KAAG,OAA4E,CAAC;AAE1I,eAAO,MAAM,aAAa,WAAY,OAAO,KAAG,IAAmG,CAAC;AAEpJ,eAAO,MAAM,cAAc,MAAO,OAAO,KAAK,OAAO,yBAA0B,OAQ5E,CAAC;AAEJ,eAAO,MAAM,cAAc,MAAO,MAAM,KAAK,MAAM,yBAA0B,OAAuE,CAAC;AAErJ,eAAO,MAAM,aAAa,MAAO,MAAM,KAAK,MAAM,yBAA0B,OACgE,CAAC;AAE7I,eAAO,MAAM,eAAe,MAAO,OAAO,KAAK,OAAO,yBAA0B,OAEH,CAAC;AAE9E,eAAO,MAAM,eAAe,MAAO,OAAO,KAAK,OAAO,yBAA0B,OAEH,CAAC;AAE9E,eAAO,MAAM,eAAe,MAAO,OAAO,KAAK,OAAO,yBAA0B,OAC8D,CAAC;AAE/I,eAAO,MAAM,aAAa,WAAY,OAAO,KAAG,IAAkF,CAAC;AAEnI,eAAO,MAAM,aAAa,WAAY,OAAO,KAAG,IAC+D,CAAC;AAEhH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAIpE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAKpE;AAED,eAAO,MAAM,YAAY,cAAe,aAAa,CAAC,OAAO,CAAC,KAAG,OAqBhE,CAAC;AAEF,eAAO,MAAM,YAAY,cAAe,aAAa,CAAC,OAAO,CAAC,KAAG,OA2BhE,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,CAoB5E;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,CAwB5E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAOjD;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAE,MAAmC,GAAG,aAAa,CAAC,OAAO,CAAC,CAwCnJ;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAIjF;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAe/E;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAe3E;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAgBrF;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAY7E;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAE,MAAmC,GAAG,OAAO,CAI9H;AAED,gJAAgJ;AAChJ,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAG7D;AAQD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAGpD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,MAAM,CAOpE;AAED,uJAAuJ;AACvJ,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,GAAG,KAAK,CAmCxE;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,CA2C7D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CA8BnD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,CAqBvE;AAED,eAAO,MAAM,YAAY,MAAO,IAAI,OAAO,IAAI,OAAO,IAAI,KAAG,IAkB5D,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,CA2BpE;AAED,wBAAgB,MAAM,CAAC,CAAC,SAAS,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,CAE/G;AACD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,CAEzG;AACD,wBAAgB,WAAW,CAAC,CAAC,SAAS,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,CAE3H;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,CAEzE;AAED,eAAO,MAAM,OAAO,MAAO,IAAI,UAAU,IAAI,OAAO,IAAI,KAAG,IAIzD,CAAC;AACH,eAAO,MAAM,SAAS,MAAO,IAAI,eAAe,IAAI,KAAG,IAIrD,CAAC;AACH,eAAO,MAAM,YAAY,MAAO,IAAI,UAAU,IAAI,OAAO,IAAI,KAAG,IAI9D,CAAC;AAEH,eAAO,MAAM,UAAU,MAAO,OAAO,UAAU,IAAI,OAAO,IAAI,KAAG,OAG/D,CAAC;AACH,eAAO,MAAM,YAAY,MAAO,OAAO,eAAe,IAAI,KAAG,OAG3D,CAAC;AACH,eAAO,MAAM,eAAe,MAAO,OAAO,UAAU,IAAI,OAAO,IAAI,KAAG,OAGpE,CAAC;AAIH,eAAO,MAAM,KAAK,WACR,aAAa,CAAC,IAAI,CAAC,mCAGnB,aAAa,CAAC,KAAK,CAAC,yBAEhB,SAAS,OAChB,MAAM,SACJ,MAAM,gBACC,MAAM,UACZ,MAAM,KACb,KAAkG,CAAC;AAEtG,eAAO,MAAM,OAAO,QAAS,GAAG,YAAY,QAAQ,KAAG,IAAqC,CAAC;AAC7F,eAAO,MAAM,WAAW,SAAU,IAAI,QAAO,IAAI,sBAAoC,aAAa,CAAC,IAAI,CAAC,KAAQ,GAM9G,CAAC;AACH,eAAO,MAAM,GAAG,SACR,IAAI,YACA,QAAQ,QACb,IAAI,sBAEF,aAAa,CAAC,IAAI,CAAC,WACjB,MAAM,iBACA,aAAa,CAAC,OAAO,CAAC,KACpC,OAWD,CAAC;AACH,eAAO,MAAM,KAAK,SAAU,IAAI,YAAY,QAAQ,SAAS,SAAS,CAAC,OAAO,CAAC,QAAO,IAAI,QAAkB,IAAI,KAAc,IAS5H,CAAC;AAEH,eAAO,MAAM,SAAS,QAAS,IAAI,UAAU,MAAM,KAAG,IAA4C,CAAC;AACnG,eAAO,MAAM,UAAU,QAAS,IAAI,QAAQ,IAAI,KAAG,IAA2C,CAAC;AAE/F,eAAO,MAAM,KAAK,QAAS,IAAI,QAAQ,IAAI,YAAY,QAAQ,sBAAyB,aAAa,CAAC,IAAI,CAAC,KAAQ,SAGjH,CAAC;AAEH,eAAO,MAAM,IAAI,QAAS,IAAI,UAAU,MAAM,UAAU,MAAM,YAAY,QAAQ,iBAAmB,QAGnG,CAAC;AAEH,eAAO,MAAM,QAAQ,QACd,IAAI,UACD,MAAM,UACN,MAAM,YACJ,QAAQ,sCAGX,aAAa,CAAC,IAAI,CAAC,eACb,MAAM,gBACL,MAAM,cACR,MAAM,KACjB,YAcD,CAAC;AAEH,eAAO,MAAM,MAAM,WAAY,MAAM,YAAY,QAAQ,iBAAmB,UAG1E,CAAC;AAEH,eAAO,MAAM,KAAK,WACR,aAAa,CAAC,IAAI,CAAC,OACtB,IAAI,YACC,QAAQ,0CAGX,aAAa,CAAC,IAAI,CAAC,KACzB,SAA4F,CAAC;AAEhG,eAAO,MAAM,OAAO,WAAY,aAAa,CAAC,IAAI,CAAC,YAAY,QAAQ,6BAAmC,WAGxG,CAAC;AAEH,eAAO,MAAM,QAAQ,SAAU,IAAI,YAAY,QAAQ,KAAG,IAAsC,CAAC;AACjG,eAAO,MAAM,OAAO,UAAW,IAAI,OAAO,IAAI,aAAa,MAAM,KAAG,IAAiD,CAAC;AACtH,eAAO,MAAM,IAAI,UAAW,IAAI,OAAO,IAAI,aAAa,MAAM,YAAY,QAAQ,KAAG,QAGnF,CAAC;AAEH,eAAO,MAAM,cAAc,eAAgB,UAAU,YAAY,QAAQ,KAAG,IAG1E,CAAC;AACH,eAAO,MAAM,aAAa,UAAW,IAAI,OAAO,IAAI,UAAU,IAAI,aAAa,MAAM,KAAG,UAMtF,CAAC;AACH,eAAO,MAAM,UAAU,UAAW,IAAI,OAAO,IAAI,UAAU,IAAI,aAAa,MAAM,YAAY,QAAQ,KAAG,cAGvG,CAAC;AAEH,eAAO,MAAM,IAAI,QACV,IAAI,QACH,MAAM,YACF,MAAM,GAAG,SAAS,YAClB,QAAQ,2BAEL,cAAc,KAC1B,QAGD,CAAC;AAEH,eAAO,MAAM,IAAI,UAAW,KAAK,UAAU,MAAM,YAAY,QAAQ,QAAO,IAAI,iBAA8B,IAG5G,CAAC;AAEH,eAAO,MAAM,WAAW,WAAY,MAAM,cAAc,MAAM,eAAe,MAAM,KAAG,WAKpF,CAAC;AACH,eAAO,MAAM,WAAW,WAAY,aAAa,CAAC,IAAI,CAAC,KAAG,WAAgD,CAAC;AAE3G,eAAO,MAAM,gBAAgB,qBACT,IAAI,kBACN,IAAI,gBACN,IAAI,QACZ,MAAM,UACJ,aAAa,CAAC,IAAI,CAAC,aAChB,QAAQ,OACd,MAAM,KACV,gBAQD,CAAC;AAEH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,IAAI,gBAAgB,CAE5F;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,IAAI,aAAa,CAEtF;AAmDD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,EACpC,UAAU,GAAE,MAAmC,GAC9C,aAAa,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAuK/C;AAED,qHAAqH;AACrH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,gBAAgB,EAC3B,aAAa,EAAE,IAAI,EACnB,aAAa,EAAE,IAAI,EACnB,YAAY,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,KAAK,IAAI,EAC5F,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,IAAI,EAC3H,eAAe,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,KAAK,IAAI,EACtE,kBAAkB,CAAC,EAAE,QAAQ,EAC7B,UAAU,GAAE,MAAmC,EAC/C,SAAS,CAAC,EAAE,kBAAkB,GAC7B,IAAI,CAiFN;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,IAAI,EACnB,kBAAkB,CAAC,EAAE,QAAQ,EAC7B,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,kBAAkB,GAC7B,aAAa,CAkCf;AAsDD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAmBzG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAgBrD"}
|
package/lib/abstract-3d.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
323
|
-
|
|
324
|
-
const
|
|
325
|
-
const
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
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
|
-
|
|
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
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
const
|
|
634
|
-
const
|
|
635
|
-
const
|
|
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
|
|
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
|
|
654
|
-
const dirBetweenLines = vec3Normalize(
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
const
|
|
660
|
-
const
|
|
661
|
-
|
|
662
|
-
|
|
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
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
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,
|