abstract-3d 2.12.2 → 3.0.1
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 +33 -6
- package/lib/abstract-3d.d.ts.map +1 -1
- package/lib/abstract-3d.js +1 -1
- package/lib/abstract-3d.js.map +1 -1
- package/lib/renderers/ifc/ifc-encoding.d.ts +5 -2
- package/lib/renderers/ifc/ifc-encoding.d.ts.map +1 -1
- package/lib/renderers/ifc/ifc-encoding.js +30 -7
- package/lib/renderers/ifc/ifc-encoding.js.map +1 -1
- package/lib/renderers/ifc/ifc.d.ts +35 -22
- package/lib/renderers/ifc/ifc.d.ts.map +1 -1
- package/lib/renderers/ifc/ifc.js +124 -49
- package/lib/renderers/ifc/ifc.js.map +1 -1
- package/lib/renderers/react/index.d.ts +0 -1
- package/lib/renderers/react/index.d.ts.map +1 -1
- package/lib/renderers/react/index.js.map +1 -1
- package/lib/renderers/react/react-dimension.d.ts +2 -2
- package/lib/renderers/react/react-dimension.d.ts.map +1 -1
- package/lib/renderers/react/react-dimension.js +2 -2
- package/lib/renderers/react/react-dimension.js.map +1 -1
- package/lib/renderers/react/react-group.d.ts +3 -2
- package/lib/renderers/react/react-group.d.ts.map +1 -1
- package/lib/renderers/react/react-group.js +3 -3
- package/lib/renderers/react/react-group.js.map +1 -1
- package/lib/renderers/react/react-material.d.ts +2 -2
- package/lib/renderers/react/react-material.d.ts.map +1 -1
- package/lib/renderers/react/react-material.js +3 -3
- package/lib/renderers/react/react-material.js.map +1 -1
- package/lib/renderers/react/react-relation.d.ts +10 -0
- package/lib/renderers/react/react-relation.d.ts.map +1 -0
- package/lib/renderers/react/react-relation.js +31 -0
- package/lib/renderers/react/react-relation.js.map +1 -0
- package/lib/renderers/react/react-scene.d.ts +4 -7
- package/lib/renderers/react/react-scene.d.ts.map +1 -1
- package/lib/renderers/react/react-scene.js +4 -4
- package/lib/renderers/react/react-scene.js.map +1 -1
- package/lib/renderers/react/react.d.ts +8 -7
- package/lib/renderers/react/react.d.ts.map +1 -1
- package/lib/renderers/react/react.js +2 -2
- package/lib/renderers/react/react.js.map +1 -1
- package/package.json +2 -2
- package/src/abstract-3d.ts +39 -8
- package/src/renderers/ifc/ifc-encoding.ts +31 -7
- package/src/renderers/ifc/ifc.test.ts +233 -102
- package/src/renderers/ifc/ifc.ts +263 -80
- package/src/renderers/react/index.ts +0 -1
- package/src/renderers/react/react-dimension.tsx +3 -3
- package/src/renderers/react/react-group.test.ts +2 -2
- package/src/renderers/react/react-group.tsx +5 -4
- package/src/renderers/react/react-material.tsx +4 -4
- package/src/renderers/react/react-relation.tsx +86 -0
- package/src/renderers/react/react-scene.tsx +9 -21
- package/src/renderers/react/react.tsx +11 -14
- 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/src/renderers/react/react-hotspot.tsx +0 -112
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
import type { ThreeEvent } from "@react-three/fiber";
|
|
2
2
|
import React from "react";
|
|
3
|
-
import type { Scene, Group } from "../../abstract-3d.js";
|
|
4
|
-
import type { HotSpotInfo } from "./react-hotspot.js";
|
|
3
|
+
import type { Scene, Group, Relation } from "../../abstract-3d.js";
|
|
5
4
|
import type { MaterialState } from "./react-material.js";
|
|
6
5
|
import type { ReactPopover } from "./react-types.js";
|
|
7
6
|
export type SceneMouseEvent = ThreeEvent<MouseEvent>;
|
|
8
|
-
export declare function ReactScene({ scene, selectedIds, hoveredIdsExternal,
|
|
7
|
+
export declare function ReactScene({ scene, selectedIds, hoveredIdsExternal, activeRelations, activeComponents, showDimensions, useAlphaTest, materialStateImages, reactPopovers, onClickGroup, onHoverGroup, onContextMenuGroup, getTooltips, onClickRelation, createGroupKey, createGroupId, }: {
|
|
9
8
|
readonly scene: Scene;
|
|
10
9
|
readonly selectedIds: Record<string, boolean> | undefined;
|
|
11
10
|
readonly hoveredIdsExternal: ReadonlyArray<string> | undefined;
|
|
12
|
-
readonly
|
|
11
|
+
readonly activeRelations: ReadonlyArray<string> | undefined;
|
|
13
12
|
readonly activeComponents: Record<string, MaterialState> | undefined;
|
|
14
|
-
readonly showHotSpotTexts: boolean;
|
|
15
13
|
readonly showDimensions: boolean;
|
|
16
14
|
readonly useAlphaTest?: boolean;
|
|
17
|
-
readonly hotSpotTexts?: Record<string, string>;
|
|
18
15
|
readonly materialStateImages?: Record<string, string>;
|
|
19
16
|
readonly reactPopovers?: ReadonlyArray<ReactPopover>;
|
|
20
17
|
readonly onClickGroup?: (id: string | undefined, rootData: Record<string, string> | undefined, data: Record<string, string> | undefined, e: SceneMouseEvent) => void;
|
|
21
18
|
readonly onHoverGroup?: (id: string | undefined, rootData: Record<string, string> | undefined, data: Record<string, string> | undefined, e: SceneMouseEvent) => void;
|
|
22
19
|
readonly onContextMenuGroup?: (id: string, rootData: Record<string, string> | undefined, data: Record<string, string> | undefined, left: number, top: number, e: SceneMouseEvent) => void;
|
|
23
20
|
readonly getTooltips?: (id: string) => ReadonlyArray<ReactPopover>;
|
|
24
|
-
readonly
|
|
21
|
+
readonly onClickRelation?: (relation: Relation, e: SceneMouseEvent) => void;
|
|
25
22
|
readonly createGroupKey?: (g: Group, idx: number, rootData: Record<string, string> | undefined, id: string) => string;
|
|
26
23
|
readonly createGroupId?: (g: Group) => string;
|
|
27
24
|
}): React.JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-scene.d.ts","sourceRoot":"","sources":["../../../src/renderers/react/react-scene.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"react-scene.d.ts","sourceRoot":"","sources":["../../../src/renderers/react/react-scene.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,11 @@ import { Html } from "@react-three/drei";
|
|
|
3
3
|
import React from "react";
|
|
4
4
|
import { ReactDimensions } from "./react-dimension.js";
|
|
5
5
|
import { ReactGroup } from "./react-group.js";
|
|
6
|
-
import {
|
|
7
|
-
export function ReactScene({ scene, selectedIds, hoveredIdsExternal,
|
|
6
|
+
import { ReactRelations } from "./react-relation.js";
|
|
7
|
+
export function ReactScene({ scene, selectedIds, hoveredIdsExternal, activeRelations, activeComponents, showDimensions, useAlphaTest, materialStateImages, reactPopovers, onClickGroup, onHoverGroup, onContextMenuGroup, getTooltips, onClickRelation, createGroupKey, createGroupId, }) {
|
|
8
8
|
return (_jsxs("group", { rotation: [scene.rotation_deprecated?.x ?? 0, scene.rotation_deprecated?.y ?? 0, scene.rotation_deprecated?.z ?? 0], position: [-(scene.center_deprecated?.x ?? 0), -(scene.center_deprecated?.y ?? 0), -(scene.center_deprecated?.z ?? 0)], children: [scene.groups.map((g, i) => {
|
|
9
9
|
const id = createGroupId ? createGroupId(g) : "";
|
|
10
|
-
return (_jsx(ReactGroup, { g: g, selectedIds: selectedIds,
|
|
11
|
-
}), _jsx(ReactDimensions, { dimensions: scene.dimensions_deprecated, showDimensions: showDimensions, sceneRotation: scene.rotation_deprecated, sceneCenter: scene.center_deprecated, selectedIds: selectedIds,
|
|
10
|
+
return (_jsx(ReactGroup, { g: g, selectedIds: selectedIds, relationsActive: activeRelations !== undefined, activeComponents: activeComponents, materialStateImages: materialStateImages, hoveredIdsExternal: hoveredIdsExternal, onClickGroup: onClickGroup, onHoverGroup: onHoverGroup, onContextMenuGroup: onContextMenuGroup, getTooltips: getTooltips, createGroupKey: createGroupKey, id: id, useAlphaTest: useAlphaTest, rootData: g.data }, createGroupKey ? createGroupKey(g, 0, g.data, id) : i));
|
|
11
|
+
}), _jsx(ReactDimensions, { dimensions: scene.dimensions_deprecated, showDimensions: showDimensions, sceneRotation: scene.rotation_deprecated, sceneCenter: scene.center_deprecated, selectedIds: selectedIds, relationsActive: activeRelations !== undefined, onClickGroup: onClickGroup, onHoverGroup: onHoverGroup, onContextMenuGroup: onContextMenuGroup }), _jsx(ReactRelations, { relations: scene.relations, activeRelations: activeRelations, onClickRelation: onClickRelation }), reactPopovers?.map((p) => (_jsx(Html, { position: [p.pos.x, p.pos.y, p.pos.z], center: true, pointerEvents: "none", style: { pointerEvents: "none" }, children: p.content }, p.id)))] }));
|
|
12
12
|
}
|
|
13
13
|
//# sourceMappingURL=react-scene.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-scene.js","sourceRoot":"","sources":["../../../src/renderers/react/react-scene.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"react-scene.js","sourceRoot":"","sources":["../../../src/renderers/react/react-scene.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import { type OrbitControlsProps } from "@react-three/drei";
|
|
2
2
|
import { type CanvasProps, type ThreeEvent } from "@react-three/fiber";
|
|
3
3
|
import React from "react";
|
|
4
|
-
import type { Scene, View, Group } from "../../abstract-3d.js";
|
|
4
|
+
import type { Scene, View, Group, Relation } from "../../abstract-3d.js";
|
|
5
5
|
import type { ControlsHelper, Camera, BufferZones } from "./react-camera.js";
|
|
6
|
-
import type { HotSpotInfo } from "./react-hotspot.js";
|
|
7
6
|
import type { MaterialState } from "./react-material.js";
|
|
8
7
|
import type { ReactPopover } from "./react-types.js";
|
|
9
8
|
type ReactProps = {
|
|
10
9
|
readonly scene: Scene | undefined;
|
|
11
10
|
readonly selectedIds: Record<string, boolean> | undefined;
|
|
12
|
-
|
|
11
|
+
/**
|
|
12
|
+
* The ids of the relations whose shape is drawn to be clicked, e.g. where a component can be inserted. While defined, even when empty, only the
|
|
13
|
+
* groups whose material state is Accept can be clicked
|
|
14
|
+
*/
|
|
15
|
+
readonly activeRelations?: ReadonlyArray<string> | undefined;
|
|
13
16
|
readonly activeComponents?: Record<string, MaterialState> | undefined;
|
|
14
17
|
readonly hoveredIdsExternal?: ReadonlyArray<string> | undefined;
|
|
15
|
-
readonly showHotSpotTexts?: boolean;
|
|
16
18
|
readonly showDimensions?: boolean;
|
|
17
|
-
readonly hotSpotTexts?: Record<string, string>;
|
|
18
19
|
readonly popovers?: ReadonlyArray<ReactPopover>;
|
|
19
20
|
readonly useAnimations?: boolean;
|
|
20
21
|
readonly camera?: Camera;
|
|
@@ -32,10 +33,10 @@ type ReactProps = {
|
|
|
32
33
|
readonly onHoverGroup?: (id: string | undefined, rootData: Record<string, string> | undefined, data: Record<string, string> | undefined, e: ThreeEvent<MouseEvent>) => void;
|
|
33
34
|
readonly onContextMenuGroup?: (id: string, rootData: Record<string, string> | undefined, data: Record<string, string> | undefined, left: number, top: number, e: ThreeEvent<MouseEvent>) => void;
|
|
34
35
|
readonly getTooltips?: (id: string) => ReadonlyArray<ReactPopover>;
|
|
35
|
-
readonly
|
|
36
|
+
readonly onClickRelation?: (relation: Relation, e: ThreeEvent<MouseEvent>) => void;
|
|
36
37
|
readonly createGroupKey?: (g: Group, idx: number, rootData: Record<string, string> | undefined, id: string) => string;
|
|
37
38
|
readonly createGroupId?: (g: Group) => string;
|
|
38
39
|
};
|
|
39
|
-
export declare const render: React.MemoExoticComponent<({ scene, selectedIds, useOldMode,
|
|
40
|
+
export declare const render: React.MemoExoticComponent<({ scene, selectedIds, useOldMode, activeRelations, activeComponents, hoveredIdsExternal, popovers: reactPopovers, showDimensions, useAnimations, camera, view, controlsHelper, canvasProps, orbitContolsProps, materialStateImages, sceneFallback, useAlphaTest, onClickGroup, onHoverGroup, onContextMenuGroup, getTooltips, onClickRelation, createGroupKey, createGroupId, bufferZones, fitPadding, }: ReactProps) => React.JSX.Element>;
|
|
40
41
|
export {};
|
|
41
42
|
//# sourceMappingURL=react.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../../src/renderers/react/react.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAU,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../../src/renderers/react/react.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { EffectComposer, N8AO } from "@react-three/postprocessing";
|
|
|
5
5
|
import React, { memo, useMemo } from "react";
|
|
6
6
|
import { ReactCamera } from "./react-camera.js";
|
|
7
7
|
import { ReactScene } from "./react-scene.js";
|
|
8
|
-
export const render = memo(({ scene, selectedIds, useOldMode,
|
|
8
|
+
export const render = memo(({ scene, selectedIds, useOldMode, activeRelations, activeComponents, hoveredIdsExternal, popovers: reactPopovers, showDimensions = true, useAnimations = false, camera = { type: "Perspective" }, view = "front", controlsHelper, canvasProps, orbitContolsProps, materialStateImages, sceneFallback, useAlphaTest = true, onClickGroup, onHoverGroup, onContextMenuGroup, getTooltips, onClickRelation, createGroupKey, createGroupId, bufferZones, fitPadding, }) => {
|
|
9
9
|
const intensity = useOldMode ? 2 : 0.4;
|
|
10
10
|
const suspenseFallback = useMemo(() => _jsx(Html, { center: true, children: sceneFallback ?? _jsx(_Fragment, {}) }), [sceneFallback]);
|
|
11
11
|
return scene ? (_jsx(Canvas, { dpr: [1, window.devicePixelRatio], frameloop: "demand", ...canvasProps, children: _jsxs(React.Suspense, { fallback: suspenseFallback, children: [_jsx(ReactCamera, { bufferZones: bufferZones, fitPadding: fitPadding, scene: scene, useAnimations: useAnimations, camera: camera, view: view, controlsHelper: controlsHelper, orbitContolsProps: orbitContolsProps }), _jsx("ambientLight", { intensity: 3.5 }), _jsx("directionalLight", { position: [
|
|
@@ -28,6 +28,6 @@ export const render = memo(({ scene, selectedIds, useOldMode, activeHotSpots, ac
|
|
|
28
28
|
-(scene.center_deprecated?.x ?? 0) + 1.5 * scene.size_deprecated.x,
|
|
29
29
|
-(scene.center_deprecated?.y ?? 0),
|
|
30
30
|
-(scene.center_deprecated?.z ?? 0),
|
|
31
|
-
], intensity: 0.4 }), _jsx(ReactScene, { scene: scene, selectedIds: selectedIds,
|
|
31
|
+
], intensity: 0.4 }), _jsx(ReactScene, { scene: scene, selectedIds: selectedIds, activeRelations: activeRelations, activeComponents: activeComponents, showDimensions: showDimensions, hoveredIdsExternal: hoveredIdsExternal, reactPopovers: reactPopovers, materialStateImages: materialStateImages, onClickGroup: onClickGroup, onHoverGroup: onHoverGroup, onContextMenuGroup: onContextMenuGroup, getTooltips: getTooltips, onClickRelation: onClickRelation, createGroupKey: createGroupKey, createGroupId: createGroupId, useAlphaTest: useAlphaTest }), !useOldMode && (_jsx(EffectComposer, { multisampling: 8, children: _jsx(N8AO, { aoRadius: 40, denoiseSamples: 4, distanceFalloff: 0.2, intensity: 2, screenSpaceRadius: true, halfRes: true }) }))] }) })) : ((sceneFallback ?? _jsx(_Fragment, {})));
|
|
32
32
|
});
|
|
33
33
|
//# sourceMappingURL=react.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../../src/renderers/react/react.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAA2B,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAqC,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../../src/renderers/react/react.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "abstract-3d",
|
|
3
|
-
"version": "
|
|
4
|
-
"gitHead": "
|
|
3
|
+
"version": "3.0.1",
|
|
4
|
+
"gitHead": "b425fc78d976f7dccc6a85a4b2007a98dc02c7cb",
|
|
5
5
|
"description": "Abstract 3D",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Divid AB <info@divid.se>",
|
package/src/abstract-3d.ts
CHANGED
|
@@ -4,13 +4,13 @@ import type { AbstractImage } from "abstract-image";
|
|
|
4
4
|
export type Scene = {
|
|
5
5
|
readonly size_deprecated: Vec3; //move size calculation to every renderer??
|
|
6
6
|
readonly groups: ReadonlyArray<Group>;
|
|
7
|
+
readonly relations?: ReadonlyArray<Relation>;
|
|
7
8
|
readonly data?: Record<string, string>;
|
|
8
9
|
//should be removed
|
|
9
10
|
readonly center_deprecated?: Vec3;
|
|
10
11
|
readonly rotation_deprecated?: Vec3;
|
|
11
12
|
//might be removed
|
|
12
13
|
readonly dimensions_deprecated?: Dimensions;
|
|
13
|
-
readonly hotSpots_deprecated?: ReadonlyArray<HotSpot>;
|
|
14
14
|
};
|
|
15
15
|
//dummy
|
|
16
16
|
export type Renderer = "react" | "ai_schematic" | "ai_detailed" | "dxf";
|
|
@@ -67,20 +67,47 @@ export type DimensionBounds = {
|
|
|
67
67
|
readonly threeD: Bounds3;
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
-
export type HotSpot = {
|
|
71
|
-
readonly id: string;
|
|
72
|
-
readonly mesh: Mesh;
|
|
73
|
-
};
|
|
74
|
-
|
|
75
70
|
export type Group = {
|
|
76
71
|
readonly pos: Vec3;
|
|
77
72
|
readonly rot?: Vec3;
|
|
78
73
|
readonly groups?: ReadonlyArray<Group>;
|
|
79
74
|
readonly meshes?: ReadonlyArray<Mesh>;
|
|
75
|
+
/**
|
|
76
|
+
* Identifies what the group is, e.g. for the relations and as the IFC GlobalId. Sibling groups with the same id are parts of the same thing, e.g.
|
|
77
|
+
* something in several places, and one IFC element
|
|
78
|
+
*/
|
|
79
|
+
readonly id?: string;
|
|
80
|
+
readonly name?: string;
|
|
81
|
+
/** What the group is beyond its name, e.g. the IFC element's Description */
|
|
82
|
+
readonly description?: string;
|
|
83
|
+
/** The layer of the group's meshes and of the groups below it that don't have their own */
|
|
84
|
+
readonly layer?: string;
|
|
85
|
+
/** The application's own data, not read by the renderers */
|
|
80
86
|
readonly data?: Record<string, string>;
|
|
81
87
|
readonly animation?: Animation;
|
|
82
88
|
};
|
|
83
89
|
|
|
90
|
+
/**
|
|
91
|
+
* A connection between two groups, e.g. where air flows from one section of a unit to the next, or a connection with one end, where something outside
|
|
92
|
+
* the scene connects to a group. `pos` and `rot` are in the scene's coordinates like the top-level groups, and the relation's local x points along
|
|
93
|
+
* the flow from `from` to `to`
|
|
94
|
+
*/
|
|
95
|
+
export type Relation = {
|
|
96
|
+
readonly id: string;
|
|
97
|
+
/** The `id` of the group the flow comes from, none when it comes from outside the scene */
|
|
98
|
+
readonly from?: string;
|
|
99
|
+
/** The `id` of the group the flow goes to, none when it goes outside the scene */
|
|
100
|
+
readonly to?: string;
|
|
101
|
+
readonly name?: string;
|
|
102
|
+
readonly pos: Vec3;
|
|
103
|
+
readonly rot?: Vec3;
|
|
104
|
+
/**
|
|
105
|
+
* The relation's own shape, in the scene's coordinates like the top-level groups, e.g. merged into its IFC port's shape, or what the react renderer
|
|
106
|
+
* draws to be clicked when the relation is active
|
|
107
|
+
*/
|
|
108
|
+
readonly groups?: ReadonlyArray<Group>;
|
|
109
|
+
};
|
|
110
|
+
|
|
84
111
|
export type Mesh = {
|
|
85
112
|
readonly material: Material;
|
|
86
113
|
readonly geometry: Cylinder | Cone | Box | Line | CulledLine | Text | Polygon | Plane | Tube | Sphere | Shape | ImageMesh;
|
|
@@ -858,8 +885,12 @@ export const group = (
|
|
|
858
885
|
rot = vec3Zero,
|
|
859
886
|
groups: ReadonlyArray<Group> = Array<Group>(),
|
|
860
887
|
data = {},
|
|
861
|
-
animation?: Animation
|
|
862
|
-
|
|
888
|
+
animation?: Animation,
|
|
889
|
+
id?: string,
|
|
890
|
+
name?: string,
|
|
891
|
+
description?: string,
|
|
892
|
+
layer?: string,
|
|
893
|
+
): Group => ({ meshes, pos, rot, data, groups, animation: animation!, layer, name, id, description });
|
|
863
894
|
|
|
864
895
|
export const boxMesh = (box: Box, material: Material): Mesh => ({ geometry: box, material });
|
|
865
896
|
export const boxGeometry = (size: Vec3, pos: Vec3 = vec3Zero, rot = vec3Zero, holes: ReadonlyArray<Hole> = []): Box => ({
|
|
@@ -65,13 +65,37 @@ function compressGuid(bytes: ReadonlyArray<number>): string {
|
|
|
65
65
|
return guid;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
/**
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
68
|
+
/**
|
|
69
|
+
* IFC GlobalId derived from `id` so re-exports keep the same ids, from a uuid's own bytes and from a hash of any other id. Random without an id or
|
|
70
|
+
* when the id's GlobalId is already used in the file
|
|
71
|
+
*/
|
|
72
|
+
export function guid(m: MutableIfc, id?: string): string {
|
|
73
|
+
const hex = id !== undefined && UUID_REGEX.test(id) ? id.replaceAll("-", "") : undefined;
|
|
74
|
+
const bytes = hex ? Array.from({ length: 16 }, (_, i) => parseInt(hex.slice(i * 2, i * 2 + 2), 16)) : id === undefined ? undefined : hash128(id);
|
|
75
|
+
const fromId = bytes && compressGuid(bytes);
|
|
76
|
+
const globalId = fromId && !m.usedGuids.has(fromId) ? fromId : compressGuid(Array.from(crypto.getRandomValues(new Uint8Array(16))));
|
|
77
|
+
m.usedGuids.add(globalId);
|
|
78
|
+
return globalId;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** The 16 bytes of cyrb128, a fast non-cryptographic hash */
|
|
82
|
+
function hash128(s: string): ReadonlyArray<number> {
|
|
83
|
+
// oxlint-disable no-bitwise
|
|
84
|
+
let [h1, h2, h3, h4] = [1779033703, 3144134277, 1013904242, 2773480762];
|
|
85
|
+
for (let i = 0; i < s.length; i++) {
|
|
86
|
+
const k = s.charCodeAt(i);
|
|
87
|
+
h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
|
|
88
|
+
h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);
|
|
89
|
+
h3 = h4 ^ Math.imul(h3 ^ k, 951274213);
|
|
90
|
+
h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);
|
|
91
|
+
}
|
|
92
|
+
h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067);
|
|
93
|
+
h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);
|
|
94
|
+
h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);
|
|
95
|
+
h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);
|
|
96
|
+
h1 ^= h2 ^ h3 ^ h4;
|
|
97
|
+
return [h1, h2 ^ h1, h3 ^ h1, h4 ^ h1].flatMap((h) => [(h >>> 24) & 255, (h >>> 16) & 255, (h >>> 8) & 255, h & 255]);
|
|
98
|
+
// oxlint-enable no-bitwise
|
|
75
99
|
}
|
|
76
100
|
|
|
77
101
|
/** FILE_NAME header fields, `originatingSystem` is the application that produced the scene */
|