abstract-3d 2.10.5 → 2.11.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 (40) hide show
  1. package/README.md +1 -1
  2. package/lib/renderers/ifc/ifc-encoding.d.ts +21 -0
  3. package/lib/renderers/ifc/ifc-encoding.d.ts.map +1 -0
  4. package/lib/renderers/ifc/ifc-encoding.js +78 -0
  5. package/lib/renderers/ifc/ifc-encoding.js.map +1 -0
  6. package/lib/renderers/ifc/ifc-geometry.d.ts +14 -0
  7. package/lib/renderers/ifc/ifc-geometry.d.ts.map +1 -0
  8. package/lib/renderers/ifc/ifc-geometry.js +114 -0
  9. package/lib/renderers/ifc/ifc-geometry.js.map +1 -0
  10. package/lib/renderers/ifc/ifc.d.ts +26 -0
  11. package/lib/renderers/ifc/ifc.d.ts.map +1 -0
  12. package/lib/renderers/ifc/ifc.js +111 -0
  13. package/lib/renderers/ifc/ifc.js.map +1 -0
  14. package/lib/renderers/ifc/index.d.ts +2 -0
  15. package/lib/renderers/ifc/index.d.ts.map +1 -0
  16. package/lib/renderers/ifc/index.js +2 -0
  17. package/lib/renderers/ifc/index.js.map +1 -0
  18. package/lib/renderers/index.d.ts +1 -0
  19. package/lib/renderers/index.d.ts.map +1 -1
  20. package/lib/renderers/index.js +1 -0
  21. package/lib/renderers/index.js.map +1 -1
  22. package/lib/renderers/react/react-dimension.js +2 -2
  23. package/lib/renderers/react/react-dimension.js.map +1 -1
  24. package/lib/renderers/react/react-mesh.d.ts.map +1 -1
  25. package/lib/renderers/react/react-mesh.js +10 -75
  26. package/lib/renderers/react/react-mesh.js.map +1 -1
  27. package/lib/renderers/shared/three-geometry.d.ts +17 -0
  28. package/lib/renderers/shared/three-geometry.d.ts.map +1 -0
  29. package/lib/renderers/shared/three-geometry.js +73 -0
  30. package/lib/renderers/shared/three-geometry.js.map +1 -0
  31. package/package.json +7 -2
  32. package/src/renderers/ifc/ifc-encoding.ts +91 -0
  33. package/src/renderers/ifc/ifc-geometry.ts +149 -0
  34. package/src/renderers/ifc/ifc.test.ts +110 -0
  35. package/src/renderers/ifc/ifc.ts +167 -0
  36. package/src/renderers/ifc/index.ts +1 -0
  37. package/src/renderers/index.ts +1 -0
  38. package/src/renderers/react/react-dimension.tsx +2 -2
  39. package/src/renderers/react/react-mesh.tsx +10 -103
  40. package/src/renderers/shared/three-geometry.ts +87 -0
package/README.md CHANGED
@@ -4,4 +4,4 @@
4
4
  [![code style: oxfmt][oxfmt-image]][oxfmt-url]
5
5
  [![MIT license][license-image]][license-url]
6
6
 
7
- Abstract 3d with 4 renderers, react (three js + react three fiber), svg, stl and dxf
7
+ Abstract 3d with renderers for react (three js + react three fiber), svg, stl, step, ifc and dxf
@@ -0,0 +1,21 @@
1
+ import type { Vec3 } from "../../abstract-3d.js";
2
+ export type MutableIfc = {
3
+ readonly entities: Array<string>;
4
+ readonly usedGuids: Set<string>;
5
+ };
6
+ export declare const ifcFile: () => MutableIfc;
7
+ /** Appends an entity and returns its #id */
8
+ export declare const add: (m: MutableIfc, entity: string) => number;
9
+ export declare const ref: (id: number) => string;
10
+ export declare const refs: (ids: ReadonlyArray<number>) => string;
11
+ /** STEP REAL, always with a decimal point, rounded to 6 decimals to keep the file small */
12
+ export declare function real(num: number): string;
13
+ export declare const point: (p: Vec3) => string;
14
+ /** STEP string literal, non-ASCII characters are encoded as \X2\ / \X4\ */
15
+ export declare function str(s: string | undefined): string;
16
+ /** IFC GlobalId, derived from `uuid` when it's a valid uuid not used before in the file so re-exports keep the same ids, otherwise random */
17
+ export declare function guid(m: MutableIfc, uuid?: string): string;
18
+ export declare const header: (fileName: string, date: string) => string;
19
+ export declare const footer: () => string;
20
+ export declare const serialize: (m: MutableIfc, fileName: string, date: string) => string;
21
+ //# sourceMappingURL=ifc-encoding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifc-encoding.d.ts","sourceRoot":"","sources":["../../../src/renderers/ifc/ifc-encoding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAE/F,eAAO,MAAM,OAAO,QAAO,UAAsD,CAAC;AAElF,4CAA4C;AAC5C,eAAO,MAAM,GAAG,MAAO,UAAU,UAAU,MAAM,KAAG,MAAiC,CAAC;AAEtF,eAAO,MAAM,GAAG,OAAQ,MAAM,KAAG,MAAkB,CAAC;AAEpD,eAAO,MAAM,IAAI,QAAS,aAAa,CAAC,MAAM,CAAC,KAAG,MAAuC,CAAC;AAE1F,2FAA2F;AAC3F,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGxC;AAED,eAAO,MAAM,KAAK,MAAO,IAAI,KAAG,MAAoD,CAAC;AAErF,2EAA2E;AAC3E,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAoBjD;AAyBD,6IAA6I;AAC7I,wBAAgB,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED,eAAO,MAAM,MAAM,aAAc,MAAM,QAAQ,MAAM,KAAG,MAOvD,CAAC;AAEF,eAAO,MAAM,MAAM,QAAO,MAEzB,CAAC;AAEF,eAAO,MAAM,SAAS,MAAO,UAAU,YAAY,MAAM,QAAQ,MAAM,KAAG,MACkB,CAAC"}
@@ -0,0 +1,78 @@
1
+ export const ifcFile = () => ({ entities: [], usedGuids: new Set() });
2
+ /** Appends an entity and returns its #id */
3
+ export const add = (m, entity) => m.entities.push(entity);
4
+ export const ref = (id) => `#${id}`;
5
+ export const refs = (ids) => `(${ids.map(ref).join(",")})`;
6
+ /** STEP REAL, always with a decimal point, rounded to 6 decimals to keep the file small */
7
+ export function real(num) {
8
+ const rounded = Number(num.toFixed(6));
9
+ return Number.isInteger(rounded) ? `${rounded}.` : `${rounded}`;
10
+ }
11
+ export const point = (p) => `(${real(p.x)},${real(p.y)},${real(p.z)})`;
12
+ /** STEP string literal, non-ASCII characters are encoded as \X2\ / \X4\ */
13
+ export function str(s) {
14
+ if (s === undefined) {
15
+ return "$";
16
+ }
17
+ let encoded = "";
18
+ for (const char of s) {
19
+ const cp = char.codePointAt(0) ?? 0;
20
+ if (char === "'") {
21
+ encoded += "''";
22
+ }
23
+ else if (char === "\\") {
24
+ encoded += "\\\\";
25
+ }
26
+ else if (cp >= 32 && cp <= 126) {
27
+ encoded += char;
28
+ }
29
+ else if (cp <= 0xffff) {
30
+ encoded += `\\X2\\${cp.toString(16).toUpperCase().padStart(4, "0")}\\X0\\`;
31
+ }
32
+ else {
33
+ encoded += `\\X4\\${cp.toString(16).toUpperCase().padStart(8, "0")}\\X0\\`;
34
+ }
35
+ }
36
+ return `'${encoded}'`;
37
+ }
38
+ const GUID_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$";
39
+ const UUID_REGEX = /^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i;
40
+ /** Encodes a number as a fixed number of base 64 IFC characters */
41
+ function base64(num, chars) {
42
+ let result = "";
43
+ let rest = num;
44
+ for (let i = 0; i < chars; i++) {
45
+ result = GUID_CHARS[rest % 64] + result;
46
+ rest = Math.floor(rest / 64);
47
+ }
48
+ return result;
49
+ }
50
+ /** Compresses 16 bytes into the 22 character IFC GlobalId, first byte into 2 chars, then 5 chunks of 3 bytes into 4 chars */
51
+ function compressGuid(bytes) {
52
+ let guid = base64(bytes[0], 2);
53
+ for (let i = 1; i < 16; i += 3) {
54
+ guid += base64(bytes[i] * 65536 + bytes[i + 1] * 256 + bytes[i + 2], 4);
55
+ }
56
+ return guid;
57
+ }
58
+ /** IFC GlobalId, derived from `uuid` when it's a valid uuid not used before in the file so re-exports keep the same ids, otherwise random */
59
+ export function guid(m, uuid) {
60
+ const hex = uuid !== undefined && UUID_REGEX.test(uuid) ? uuid.replaceAll("-", "") : undefined;
61
+ const fromUuid = hex && compressGuid(Array.from({ length: 16 }, (_, i) => parseInt(hex.slice(i * 2, i * 2 + 2), 16)));
62
+ const id = fromUuid && !m.usedGuids.has(fromUuid) ? fromUuid : compressGuid(Array.from(crypto.getRandomValues(new Uint8Array(16))));
63
+ m.usedGuids.add(id);
64
+ return id;
65
+ }
66
+ export const header = (fileName, date) => `ISO-10303-21;
67
+ HEADER;
68
+ FILE_DESCRIPTION(('ViewDefinition [ReferenceView_V1.2]'),'2;1');
69
+ FILE_NAME(${str(fileName)},${str(date)},(''),('Divid AB'),'Abstract 3D to IFC Exporter','Abstract 3D','');
70
+ FILE_SCHEMA(('IFC4'));
71
+ ENDSEC;
72
+ DATA;
73
+ `;
74
+ export const footer = () => `ENDSEC;
75
+ END-ISO-10303-21;
76
+ `;
77
+ export const serialize = (m, fileName, date) => header(fileName, date) + m.entities.map((e, i) => `#${i + 1}=${e};\n`).join("") + footer();
78
+ //# sourceMappingURL=ifc-encoding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifc-encoding.js","sourceRoot":"","sources":["../../../src/renderers/ifc/ifc-encoding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Mesh, Vec3 } from "../../abstract-3d.js";
2
+ /** Indexed triangles, `points` are encoded IFC coordinates and `triangles` 1-based indices into them */
3
+ export type Triangulation = {
4
+ readonly points: ReadonlyArray<string>;
5
+ readonly triangles: ReadonlyArray<readonly [number, number, number]>;
6
+ };
7
+ /** Abstract 3D is Y-up like three.js, IFC is Z-up */
8
+ export declare const toIfc: (v: Vec3) => Vec3;
9
+ /**
10
+ * Triangulates the mesh in the coordinate system where its parent group is at parentPos/parentRot, undefined for geometries without a solid surface
11
+ * (lines, text, images)
12
+ */
13
+ export declare function triangulate(geometry: Mesh["geometry"], parentPos?: Vec3, parentRot?: Vec3): Triangulation | undefined;
14
+ //# sourceMappingURL=ifc-geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifc-geometry.d.ts","sourceRoot":"","sources":["../../../src/renderers/ifc/ifc-geometry.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAQ,IAAI,EAAQ,IAAI,EAAE,MAAM,sBAAsB,CAAC;AASnE,wGAAwG;AACxG,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtE,CAAC;AAEF,qDAAqD;AACrD,eAAO,MAAM,KAAK,MAAO,IAAI,KAAG,IAA4B,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,OAAW,EAAE,SAAS,OAAW,GAAG,aAAa,GAAG,SAAS,CAyB7H"}
@@ -0,0 +1,114 @@
1
+ import { BoxGeometry, CatmullRomCurve3, ConeGeometry, CylinderGeometry, ExtrudeGeometry, PlaneGeometry, Shape, ShapeGeometry, SphereGeometry, TubeGeometry, Vector2, Vector3, } from "three";
2
+ import { exhaustiveCheck } from "ts-exhaustive-check";
3
+ import { vec3, vec3TransRot, vec3RotCombine, vec3Zero, isZero } from "../../abstract-3d.js";
4
+ import { addHoles, CircleCurve, CYLINDER_SEGMENTS, cylinderCutPositions, nonZeroHoles } from "../shared/three-geometry.js";
5
+ import { point } from "./ifc-encoding.js";
6
+ const CONE_SEGMENTS = 32;
7
+ const SPHERE_SEGMENTS = [24, 16];
8
+ const TUBE_SEGMENTS = [32, 12];
9
+ /** Abstract 3D is Y-up like three.js, IFC is Z-up */
10
+ export const toIfc = (v) => vec3(v.x, -v.z, v.y);
11
+ /**
12
+ * Triangulates the mesh in the coordinate system where its parent group is at parentPos/parentRot, undefined for geometries without a solid surface
13
+ * (lines, text, images)
14
+ */
15
+ export function triangulate(geometry, parentPos = vec3Zero, parentRot = vec3Zero) {
16
+ const local = localPositions(geometry);
17
+ if (local === undefined || !("pos" in geometry)) {
18
+ return undefined;
19
+ }
20
+ const pos = vec3TransRot(geometry.pos, parentPos, parentRot);
21
+ const rot = vec3RotCombine(parentRot, "rot" in geometry ? (geometry.rot ?? vec3Zero) : vec3Zero);
22
+ const indexByPoint = new Map();
23
+ const index = (i) => {
24
+ const key = point(toIfc(vec3TransRot(vec3(local[i], local[i + 1], local[i + 2]), pos, rot)));
25
+ const existing = indexByPoint.get(key);
26
+ if (existing !== undefined) {
27
+ return existing;
28
+ }
29
+ indexByPoint.set(key, indexByPoint.size + 1);
30
+ return indexByPoint.size;
31
+ };
32
+ const triangles = [];
33
+ for (let i = 0; i + 8 < local.length; i += 9) {
34
+ const [a, b, c] = [index(i), index(i + 3), index(i + 6)];
35
+ if (a !== b && b !== c && c !== a) {
36
+ triangles.push([a, b, c]);
37
+ }
38
+ }
39
+ return triangles.length > 0 ? { points: Array.from(indexByPoint.keys()), triangles } : undefined;
40
+ }
41
+ /** Flat xyz positions of non-indexed triangles, relative to the geometry's own pos and rot, built the same way as in the react renderer */
42
+ function localPositions(g) {
43
+ switch (g.type) {
44
+ case "Box":
45
+ return positions(nonZeroHoles(g.holes).length === 0 ? new BoxGeometry(g.size.x, g.size.y, g.size.z) : extrude(rectangle(g.size, g.holes), g.size.z));
46
+ case "Plane":
47
+ return positions(nonZeroHoles(g.holes).length === 0 ? new PlaneGeometry(g.size.x, g.size.y) : new ShapeGeometry(rectangle(g.size, g.holes)));
48
+ case "Cylinder": {
49
+ const { radius, radiusEnd = radius, length, open, holes, angleStart = 0, angleLength = Math.PI * 2 } = g;
50
+ const isWhole = isZero(Math.PI * 2 - angleLength);
51
+ // Holes are extruded along the length, which can't taper
52
+ if (isWhole && radiusEnd === radius && nonZeroHoles(holes).length > 0) {
53
+ const circle = new Shape().moveTo(0, radius).absellipse(0, 0, radius, radius, 0, Math.PI * 2, true);
54
+ addHoles(holes, circle);
55
+ return positions(new ExtrudeGeometry(circle, { depth: length, bevelEnabled: false }).rotateX(Math.PI / 2).translate(0, length / 2, 0));
56
+ }
57
+ if (isWhole) {
58
+ return positions(new CylinderGeometry(radiusEnd, radius, length, CYLINDER_SEGMENTS, 1, open ?? false));
59
+ }
60
+ return [
61
+ ...positions(new CylinderGeometry(radiusEnd, radius, length, CYLINDER_SEGMENTS, 1, false, angleStart, angleLength)),
62
+ ...cylinderCutPositions(radiusEnd, radius, length, angleStart, angleLength),
63
+ ];
64
+ }
65
+ case "Cone":
66
+ return positions(new ConeGeometry(g.radius, g.length, CONE_SEGMENTS, 1));
67
+ case "Sphere":
68
+ return positions(new SphereGeometry(g.radius, ...SPHERE_SEGMENTS));
69
+ case "Shape": {
70
+ const shape = polygonShape(g.points, g.holes);
71
+ return positions(g.thickness > 0 ? extrude(shape, g.thickness) : new ShapeGeometry(shape));
72
+ }
73
+ case "Polygon": {
74
+ // A quad is two triangles, otherwise every three points is a triangle
75
+ const [v0, v1, v2, v3] = g.points;
76
+ const points = g.points.length === 4 ? [v0, v1, v2, v2, v3, v0] : g.points.slice(0, g.points.length - (g.points.length % 3));
77
+ return points.flatMap((p) => [p.x, p.y, p.z]);
78
+ }
79
+ case "Tube": {
80
+ const curve = g.curve.type === "SplineCurve" ? new CatmullRomCurve3(g.curve.points.map((p) => new Vector3(p.x, p.y, p.z))) : new CircleCurve(g.curve);
81
+ return positions(new TubeGeometry(curve, TUBE_SEGMENTS[0], g.radius, TUBE_SEGMENTS[1], false));
82
+ }
83
+ case "Line":
84
+ case "CulledLine":
85
+ case "Text":
86
+ case "Image":
87
+ return undefined;
88
+ default:
89
+ return exhaustiveCheck(g);
90
+ }
91
+ }
92
+ function positions(geometry) {
93
+ const position = geometry.getAttribute("position");
94
+ const index = geometry.getIndex();
95
+ const vertex = (i) => [position.getX(i), position.getY(i), position.getZ(i)];
96
+ return Array.from({ length: index?.count ?? position.count }, (_, i) => vertex(index?.getX(i) ?? i)).flat();
97
+ }
98
+ /** Extruded along z, centered around z = 0 like Box and Shape */
99
+ const extrude = (shape, depth) => new ExtrudeGeometry(shape, { depth, bevelEnabled: false }).translate(0, 0, -depth / 2);
100
+ function rectangle(size, holes) {
101
+ const [x, y] = [size.x / 2, size.y / 2];
102
+ return polygonShape([
103
+ { x: -x, y: -y },
104
+ { x: -x, y },
105
+ { x, y },
106
+ { x, y: -y },
107
+ ], holes);
108
+ }
109
+ function polygonShape(points, holes) {
110
+ const shape = new Shape(points.map((p) => new Vector2(p.x, p.y)));
111
+ addHoles(holes, shape);
112
+ return shape;
113
+ }
114
+ //# sourceMappingURL=ifc-geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifc-geometry.js","sourceRoot":"","sources":["../../../src/renderers/ifc/ifc-geometry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Scene } from "../../abstract-3d.js";
2
+ /** Element classes with the same attributes as IfcBuildingElementProxy (GlobalId, ..., Tag, PredefinedType) */
3
+ export type IfcElementEntity = "IfcBuildingElementProxy" | "IfcUnitaryEquipment";
4
+ export type IfcElementClass = {
5
+ readonly entity: IfcElementEntity;
6
+ /** The entity's PredefinedType, e.g. "AIRHANDLER" for IfcUnitaryEquipment, defaults to "NOTDEFINED" */
7
+ readonly predefinedType?: string;
8
+ };
9
+ export type IfcOptions = {
10
+ /** Name of the IFC project, defaults to "Abstract 3D" */
11
+ readonly name?: string;
12
+ /**
13
+ * Wraps the whole scene in one element, e.g. `{ entity: "IfcUnitaryEquipment", predefinedType: "AIRHANDLER", name: "AHU" }`, otherwise the
14
+ * top-level groups are placed directly in the storey
15
+ */
16
+ readonly root?: IfcElementClass & {
17
+ readonly name: string;
18
+ };
19
+ };
20
+ /**
21
+ * IFC4 (Reference View) with every mesh as an IfcTriangulatedFaceSet, in millimetres. Every top-level group and every group with `data` becomes an
22
+ * IfcBuildingElementProxy placed relative to its parent element and aggregated into it. Groups without `data` are only transforms, so their meshes
23
+ * are merged into the parent element
24
+ */
25
+ export declare function render(scene: Scene, options?: IfcOptions): string;
26
+ //# sourceMappingURL=ifc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifc.d.ts","sourceRoot":"","sources":["../../../src/renderers/ifc/ifc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAyB,MAAM,sBAAsB,CAAC;AAOzE,+GAA+G;AAC/G,MAAM,MAAM,gBAAgB,GAAG,yBAAyB,GAAG,qBAAqB,CAAC;AAEjF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,uGAAuG;IACvG,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,yDAAyD;IACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7D,CAAC;AAkBF;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,CAsCrE"}
@@ -0,0 +1,111 @@
1
+ import { Color, SRGBColorSpace } from "three";
2
+ import { vec3Zero, vec3PosX, vec3PosY, vec3Rot, vec3TransRot, vec3RotCombine } from "../../abstract-3d.js";
3
+ import { add, guid, ifcFile, point, real, ref, refs, serialize, str } from "./ifc-encoding.js";
4
+ import { toIfc, triangulate } from "./ifc-geometry.js";
5
+ const proxyClass = { entity: "IfcBuildingElementProxy" };
6
+ /**
7
+ * IFC4 (Reference View) with every mesh as an IfcTriangulatedFaceSet, in millimetres. Every top-level group and every group with `data` becomes an
8
+ * IfcBuildingElementProxy placed relative to its parent element and aggregated into it. Groups without `data` are only transforms, so their meshes
9
+ * are merged into the parent element
10
+ */
11
+ export function render(scene, options = {}) {
12
+ const name = options.name ?? "Abstract 3D";
13
+ const m = ifcFile();
14
+ const world = axisPlacement(m, vec3Zero, vec3Zero);
15
+ const context = add(m, `IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,${ref(world)},$)`);
16
+ const body = add(m, `IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,${ref(context)},$,.MODEL_VIEW.,$)`);
17
+ const units = [
18
+ add(m, "IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.)"),
19
+ add(m, "IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.)"),
20
+ add(m, "IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.)"),
21
+ add(m, "IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.)"),
22
+ ];
23
+ const project = add(m, `IFCPROJECT(${str(guid(m))},$,${str(name)},$,$,$,$,(${ref(context)}),${ref(add(m, `IFCUNITASSIGNMENT(${refs(units)})`))})`);
24
+ const sitePlacement = add(m, `IFCLOCALPLACEMENT($,${ref(world)})`);
25
+ const site = add(m, `IFCSITE(${str(guid(m))},$,'Site',$,$,${ref(sitePlacement)},$,$,.ELEMENT.,$,$,$,$,$)`);
26
+ const buildingPlacement = add(m, `IFCLOCALPLACEMENT(${ref(sitePlacement)},${ref(world)})`);
27
+ const building = add(m, `IFCBUILDING(${str(guid(m))},$,'Building',$,$,${ref(buildingPlacement)},$,$,.ELEMENT.,$,$,$)`);
28
+ const storeyPlacement = add(m, `IFCLOCALPLACEMENT(${ref(buildingPlacement)},${ref(world)})`);
29
+ const storey = add(m, `IFCBUILDINGSTOREY(${str(guid(m))},$,'Storey',$,$,${ref(storeyPlacement)},$,$,.ELEMENT.,0.)`);
30
+ aggregate(m, project, [site]);
31
+ aggregate(m, site, [building]);
32
+ aggregate(m, building, [storey]);
33
+ const center = scene.center_deprecated ?? vec3Zero;
34
+ const sceneRot = scene.rotation_deprecated ?? vec3Zero;
35
+ const c = { body, styles: new Map() };
36
+ const nodes = options.root
37
+ ? [elementNode({ pos: center, rot: sceneRot, groups: scene.groups, data: { name: options.root.name } }, center, sceneRot, options.root)]
38
+ : scene.groups.map((g) => elementNode(g, vec3TransRot(g.pos, center, sceneRot), vec3RotCombine(sceneRot, g.rot ?? vec3Zero)));
39
+ const elements = nodes.flatMap((node) => node ?? []).map((node, i) => element(m, node, `${i + 1}`, storeyPlacement, c));
40
+ if (elements.length > 0) {
41
+ add(m, `IFCRELCONTAINEDINSPATIALSTRUCTURE(${str(guid(m))},$,$,$,${refs(elements)},${ref(storey)})`);
42
+ }
43
+ const date = new Date().toISOString().split(".")[0] ?? "1970-01-01T00:00:00";
44
+ return serialize(m, `${name}.ifc`, date);
45
+ }
46
+ function elementNode(group, pos, rot, elementClass = proxyClass) {
47
+ const { meshes, children } = elementContent(group, vec3Zero, vec3Zero);
48
+ return meshes.length > 0 || children.length > 0 ? { group, elementClass, pos, rot, meshes, children } : undefined;
49
+ }
50
+ /** Meshes of the group and its descendants without data, relative to the element the group is at pos/rot in, and the descendants with data as elements */
51
+ function elementContent(group, pos, rot) {
52
+ const meshes = (group.meshes ?? []).flatMap((mesh) => {
53
+ const triangulation = triangulate(mesh.geometry, pos, rot);
54
+ return triangulation ? [{ material: mesh.material, triangulation }] : [];
55
+ });
56
+ const nested = (group.groups ?? []).map((child) => {
57
+ const childPos = vec3TransRot(child.pos, pos, rot);
58
+ const childRot = vec3RotCombine(rot, child.rot ?? vec3Zero);
59
+ return Object.keys(child.data ?? {}).length > 0
60
+ ? { meshes: [], children: [elementNode(child, childPos, childRot)].flatMap((node) => node ?? []) }
61
+ : elementContent(child, childPos, childRot);
62
+ });
63
+ return { meshes: [...meshes, ...nested.flatMap((n) => n.meshes)], children: nested.flatMap((n) => n.children) };
64
+ }
65
+ /** `path` is the element's position in the tree (e.g. "2.1"), named after it when the group has no `data.name` or `data.id` since IFC requires a name */
66
+ function element(m, node, path, parentPlacement, c) {
67
+ const placement = add(m, `IFCLOCALPLACEMENT(${ref(parentPlacement)},${ref(axisPlacement(m, node.pos, node.rot))})`);
68
+ const items = node.meshes.map(({ material, triangulation }) => faceSet(m, triangulation, material, c));
69
+ const shape = items.length > 0
70
+ ? ref(add(m, `IFCPRODUCTDEFINITIONSHAPE($,$,(${ref(add(m, `IFCSHAPEREPRESENTATION(${ref(c.body)},'Body','Tessellation',${refs(items)})`))}))`))
71
+ : "$";
72
+ const id = node.group.data?.["id"];
73
+ const name = node.group.data?.["name"] ?? id ?? `Element ${path}`;
74
+ const { entity, predefinedType = "NOTDEFINED" } = node.elementClass;
75
+ const ifcElement = add(m, `${entity.toUpperCase()}(${str(guid(m, id))},$,${str(name)},$,$,${ref(placement)},${shape},${str(id)},.${predefinedType}.)`);
76
+ aggregate(m, ifcElement, node.children.map((child, i) => element(m, child, `${path}.${i + 1}`, placement, c)));
77
+ return ifcElement;
78
+ }
79
+ function faceSet(m, { points, triangles }, material, c) {
80
+ const pointList = add(m, `IFCCARTESIANPOINTLIST3D((${points.join(",")}))`);
81
+ const faces = add(m, `IFCTRIANGULATEDFACESET(${ref(pointList)},$,.F.,(${triangles.map((t) => `(${t.join(",")})`).join(",")}),$)`);
82
+ add(m, `IFCSTYLEDITEM(${ref(faces)},(${ref(surfaceStyle(m, material, c))}),$)`);
83
+ return faces;
84
+ }
85
+ function surfaceStyle(m, material, c) {
86
+ const opacity = material.opacity ?? 1;
87
+ const key = `${material.normal}_${opacity}`;
88
+ const cached = c.styles.get(key);
89
+ if (cached !== undefined) {
90
+ return cached;
91
+ }
92
+ const { r, g, b } = new Color(material.normal).getRGB({ r: 0, g: 0, b: 0 }, SRGBColorSpace);
93
+ const colour = add(m, `IFCCOLOURRGB($,${real(r)},${real(g)},${real(b)})`);
94
+ const shading = add(m, `IFCSURFACESTYLESHADING(${ref(colour)},${real(1 - opacity)})`);
95
+ const style = add(m, `IFCSURFACESTYLE(${str(material.normal)},.BOTH.,(${ref(shading)}))`);
96
+ c.styles.set(key, style);
97
+ return style;
98
+ }
99
+ /** The group's local axes, converted to IFC's Z-up where three.js' up (Y) becomes the placement's Axis (Z) */
100
+ function axisPlacement(m, pos, rot) {
101
+ const location = add(m, `IFCCARTESIANPOINT(${point(toIfc(pos))})`);
102
+ const axis = add(m, `IFCDIRECTION(${point(toIfc(vec3Rot(vec3PosY, vec3Zero, rot)))})`);
103
+ const refDirection = add(m, `IFCDIRECTION(${point(toIfc(vec3Rot(vec3PosX, vec3Zero, rot)))})`);
104
+ return add(m, `IFCAXIS2PLACEMENT3D(${ref(location)},${ref(axis)},${ref(refDirection)})`);
105
+ }
106
+ function aggregate(m, parent, children) {
107
+ if (children.length > 0) {
108
+ add(m, `IFCRELAGGREGATES(${str(guid(m))},$,$,$,${ref(parent)},${refs(children)})`);
109
+ }
110
+ }
111
+ //# sourceMappingURL=ifc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifc.js","sourceRoot":"","sources":["../../../src/renderers/ifc/ifc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./ifc.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderers/ifc/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./ifc.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/renderers/ifc/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -3,4 +3,5 @@ export * as Svg from "./svg/index.js";
3
3
  export * as Stl from "./stl/index.js";
4
4
  export * as React3Js from "./react/index.js";
5
5
  export * as Step from "./step/index.js";
6
+ export * as Ifc from "./ifc/index.js";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC"}
@@ -3,4 +3,5 @@ export * as Svg from "./svg/index.js";
3
3
  export * as Stl from "./stl/index.js";
4
4
  export * as React3Js from "./react/index.js";
5
5
  export * as Step from "./step/index.js";
6
+ export * as Ifc from "./ifc/index.js";
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC"}
@@ -11,9 +11,9 @@ export const ReactDimensions = React.memo(({ dimensions, showDimensions, sceneRo
11
11
  /** A dimension with an id is clickable like a group when there is an onClickGroup, and drawn in the select color when selected or hovered. */
12
12
  export function ReactDimension({ dimension, material, visible, children, sceneRotation, selectedIds, hotSpotsActive, onClickGroup, onHoverGroup, onContextMenuGroup, }) {
13
13
  const [hovered, setHovered] = React.useState(false);
14
- const dim = dimensionConvertToTypeMesh(dimension, sceneRotation ?? vec3Zero, material);
15
- const id = hotSpotsActive || !onClickGroup ? undefined : dim.id;
14
+ const id = hotSpotsActive || !onClickGroup ? undefined : dimension.id;
16
15
  const highlighted = !!id && (hovered || !!selectedIds?.[id]);
16
+ const dim = dimensionConvertToTypeMesh(highlighted ? { ...dimension, material: selectMat } : dimension, sceneRotation ?? vec3Zero, material);
17
17
  return visible ? (_jsx("group", { position: [dim.pos.x, dim.pos.y, dim.pos.z], rotation: [dim.rot.x, dim.rot.y, dim.rot.z], ...(id && {
18
18
  onClick: (e) => {
19
19
  if (onClickGroup) {
@@ -1 +1 @@
1
- {"version":3,"file":"react-dimension.js","sourceRoot":"","sources":["../../../src/renderers/react/react-dimension.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react-dimension.js","sourceRoot":"","sources":["../../../src/renderers/react/react-dimension.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"react-mesh.d.ts","sourceRoot":"","sources":["../../../src/renderers/react/react-mesh.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,EASL,KAAK,EAML,UAAU,EAKV,OAAO,EACR,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,IAAI,EAUL,MAAM,sBAAsB,CAAC;AA0B9B,eAAO,MAAM,KAAK,OAAc,CAAC;AACjC,eAAO,MAAM,OAAO,SAAgB,CAAC;AACrC,eAAO,MAAM,UAAU,YAAmB,CAAC;AAE3C,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAgM/H"}
1
+ {"version":3,"file":"react-mesh.d.ts","sourceRoot":"","sources":["../../../src/renderers/react/react-mesh.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,EAQL,KAAK,EAML,UAAU,EAKV,OAAO,EACR,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,IAAI,EAAkF,MAAM,sBAAsB,CAAC;AA0BjI,eAAO,MAAM,KAAK,OAAc,CAAC;AACjC,eAAO,MAAM,OAAO,SAAgB,CAAC;AACrC,eAAO,MAAM,UAAU,YAAmB,CAAC;AAE3C,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA6L/H"}