abstract-3d 2.12.1 → 2.12.2
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/renderers/ifc/ifc-geometry.d.ts +4 -0
- package/lib/renderers/ifc/ifc-geometry.d.ts.map +1 -1
- package/lib/renderers/ifc/ifc-geometry.js +8 -0
- package/lib/renderers/ifc/ifc-geometry.js.map +1 -1
- package/lib/renderers/ifc/ifc.d.ts +4 -4
- package/lib/renderers/ifc/ifc.d.ts.map +1 -1
- package/lib/renderers/ifc/ifc.js +48 -26
- package/lib/renderers/ifc/ifc.js.map +1 -1
- package/package.json +2 -2
- package/src/renderers/ifc/ifc-geometry.ts +12 -0
- package/src/renderers/ifc/ifc.test.ts +63 -10
- package/src/renderers/ifc/ifc.ts +64 -32
|
@@ -4,8 +4,12 @@ export type Triangulation = {
|
|
|
4
4
|
readonly points: ReadonlyArray<string>;
|
|
5
5
|
readonly triangles: ReadonlyArray<readonly [number, number, number]>;
|
|
6
6
|
};
|
|
7
|
+
/** Encoded IFC coordinates of a line's start and end */
|
|
8
|
+
export type Polyline = readonly [string, string];
|
|
7
9
|
/** Abstract 3D is Y-up like three.js, IFC is Z-up */
|
|
8
10
|
export declare const toIfc: (v: Vec3) => Vec3;
|
|
11
|
+
/** The line's start and end in the coordinate system where its parent group is at parentPos/parentRot, undefined for geometries that aren't lines */
|
|
12
|
+
export declare function polyline(geometry: Mesh["geometry"], parentPos?: Vec3, parentRot?: Vec3): Polyline | undefined;
|
|
9
13
|
/**
|
|
10
14
|
* Triangulates the mesh in the coordinate system where its parent group is at parentPos/parentRot, undefined for geometries without a solid surface
|
|
11
15
|
* (lines, text, images)
|
|
@@ -1 +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"}
|
|
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,wDAAwD;AACxD,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjD,qDAAqD;AACrD,eAAO,MAAM,KAAK,MAAO,IAAI,KAAG,IAA4B,CAAC;AAE7D,qJAAqJ;AACrJ,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,OAAW,EAAE,SAAS,OAAW,GAAG,QAAQ,GAAG,SAAS,CAMrH;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,OAAW,EAAE,SAAS,OAAW,GAAG,aAAa,GAAG,SAAS,CAyB7H"}
|
|
@@ -8,6 +8,14 @@ const SPHERE_SEGMENTS = [24, 16];
|
|
|
8
8
|
const TUBE_SEGMENTS = [32, 12];
|
|
9
9
|
/** Abstract 3D is Y-up like three.js, IFC is Z-up */
|
|
10
10
|
export const toIfc = (v) => vec3(v.x, -v.z, v.y);
|
|
11
|
+
/** The line's start and end in the coordinate system where its parent group is at parentPos/parentRot, undefined for geometries that aren't lines */
|
|
12
|
+
export function polyline(geometry, parentPos = vec3Zero, parentRot = vec3Zero) {
|
|
13
|
+
if (geometry.type !== "Line" && geometry.type !== "CulledLine") {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
const ifcPoint = (p) => point(toIfc(vec3TransRot(p, parentPos, parentRot)));
|
|
17
|
+
return [ifcPoint(geometry.start), ifcPoint(geometry.end)];
|
|
18
|
+
}
|
|
11
19
|
/**
|
|
12
20
|
* Triangulates the mesh in the coordinate system where its parent group is at parentPos/parentRot, undefined for geometries without a solid surface
|
|
13
21
|
* (lines, text, images)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc-geometry.js","sourceRoot":"","sources":["../../../src/renderers/ifc/ifc-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,KAAK,EACL,aAAa,EACb,cAAc,EACd,YAAY,EACZ,OAAO,EACP,OAAO,GACR,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3H,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,CAAU,CAAC;AAC1C,MAAM,aAAa,GAAG,CAAC,EAAE,EAAE,EAAE,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ifc-geometry.js","sourceRoot":"","sources":["../../../src/renderers/ifc/ifc-geometry.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,10 +35,10 @@ export type IfcOptions = {
|
|
|
35
35
|
readonly layer?: (path: ReadonlyArray<Record<string, string>>) => string | undefined;
|
|
36
36
|
};
|
|
37
37
|
/**
|
|
38
|
-
* IFC4 (Reference View) with every mesh as an IfcTriangulatedFaceSet
|
|
39
|
-
* `data.name` becomes an IfcBuildingElementProxy placed relative to its parent element and
|
|
40
|
-
* metadata, so their meshes are merged into the parent element. With `layer`, the face sets
|
|
41
|
-
* layer, the presentation layer of the Reference View
|
|
38
|
+
* IFC4 (Reference View) with every mesh as an IfcTriangulatedFaceSet and every line as an IfcPolyline without thickness, in millimetres. Every
|
|
39
|
+
* top-level group and every group with a `data.id` or `data.name` becomes an IfcBuildingElementProxy placed relative to its parent element and
|
|
40
|
+
* aggregated into it. Other groups are only transforms or metadata, so their meshes are merged into the parent element. With `layer`, the face sets
|
|
41
|
+
* and polylines are assigned to an IfcPresentationLayerAssignment per layer, the presentation layer of the Reference View
|
|
42
42
|
*/
|
|
43
43
|
export declare function render(scene: Scene, options?: IfcOptions): string;
|
|
44
44
|
//# sourceMappingURL=ifc.d.ts.map
|
|
@@ -1 +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,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,yDAAyD;IACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,yGAAyG;IACzG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,iIAAiI;IACjI,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAC1C;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;CACtF,CAAC;
|
|
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,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,yDAAyD;IACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,yGAAyG;IACzG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,iIAAiI;IACjI,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAC1C;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;CACtF,CAAC;AAwCF;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,CAgDrE"}
|
package/lib/renderers/ifc/ifc.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Color, SRGBColorSpace } from "three";
|
|
2
2
|
import { vec3Zero, vec3PosX, vec3PosY, vec3Rot, vec3TransRot, vec3RotCombine } from "../../abstract-3d.js";
|
|
3
3
|
import { add, guid, ifcFile, point, real, ref, refs, serialize, str } from "./ifc-encoding.js";
|
|
4
|
-
import { toIfc, triangulate } from "./ifc-geometry.js";
|
|
4
|
+
import { polyline, toIfc, triangulate } from "./ifc-geometry.js";
|
|
5
|
+
const representationTypes = ["Tessellation", "Curve3D"];
|
|
5
6
|
const proxyClass = { entity: "IfcBuildingElementProxy" };
|
|
6
7
|
/**
|
|
7
|
-
* IFC4 (Reference View) with every mesh as an IfcTriangulatedFaceSet
|
|
8
|
-
* `data.name` becomes an IfcBuildingElementProxy placed relative to its parent element and
|
|
9
|
-
* metadata, so their meshes are merged into the parent element. With `layer`, the face sets
|
|
10
|
-
* layer, the presentation layer of the Reference View
|
|
8
|
+
* IFC4 (Reference View) with every mesh as an IfcTriangulatedFaceSet and every line as an IfcPolyline without thickness, in millimetres. Every
|
|
9
|
+
* top-level group and every group with a `data.id` or `data.name` becomes an IfcBuildingElementProxy placed relative to its parent element and
|
|
10
|
+
* aggregated into it. Other groups are only transforms or metadata, so their meshes are merged into the parent element. With `layer`, the face sets
|
|
11
|
+
* and polylines are assigned to an IfcPresentationLayerAssignment per layer, the presentation layer of the Reference View
|
|
11
12
|
*/
|
|
12
13
|
export function render(scene, options = {}) {
|
|
13
14
|
const name = options.name ?? "Abstract 3D";
|
|
@@ -74,8 +75,15 @@ function elementNode(group, pos, rot, layering, elementClass = proxyClass) {
|
|
|
74
75
|
*/
|
|
75
76
|
function elementContent(group, pos, rot, layering) {
|
|
76
77
|
const meshes = (group.meshes ?? []).flatMap((mesh) => {
|
|
78
|
+
const { material } = mesh;
|
|
79
|
+
const { layer } = layering;
|
|
77
80
|
const triangulation = triangulate(mesh.geometry, pos, rot);
|
|
78
|
-
|
|
81
|
+
const line = polyline(mesh.geometry, pos, rot);
|
|
82
|
+
return triangulation
|
|
83
|
+
? [{ type: "Tessellation", material, layer, triangulation }]
|
|
84
|
+
: line
|
|
85
|
+
? [{ type: "Curve3D", material, layer, polyline: line }]
|
|
86
|
+
: [];
|
|
79
87
|
});
|
|
80
88
|
const nested = (group.groups ?? []).map((child) => {
|
|
81
89
|
const childPos = vec3TransRot(child.pos, pos, rot);
|
|
@@ -100,10 +108,11 @@ function groupLayering(group, parent) {
|
|
|
100
108
|
/** `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 */
|
|
101
109
|
function element(m, node, path, parentPlacement, c) {
|
|
102
110
|
const placement = add(m, `IFCLOCALPLACEMENT(${ref(parentPlacement)},${ref(axisPlacement(m, node.pos, node.rot))})`);
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
?
|
|
106
|
-
|
|
111
|
+
const representations = representationTypes.flatMap((type) => {
|
|
112
|
+
const items = node.meshes.filter((mesh) => mesh.type === type).map((mesh) => representationItem(m, mesh, c));
|
|
113
|
+
return items.length > 0 ? [add(m, `IFCSHAPEREPRESENTATION(${ref(c.body)},'Body',${str(type)},${refs(items)})`)] : [];
|
|
114
|
+
});
|
|
115
|
+
const shape = representations.length > 0 ? ref(add(m, `IFCPRODUCTDEFINITIONSHAPE($,$,${refs(representations)})`)) : "$";
|
|
107
116
|
const id = node.group.data?.["id"];
|
|
108
117
|
const name = node.group.data?.["name"] ?? id ?? `Element ${path}`;
|
|
109
118
|
const { entity, predefinedType = "NOTDEFINED" } = node.elementClass;
|
|
@@ -111,37 +120,50 @@ function element(m, node, path, parentPlacement, c) {
|
|
|
111
120
|
aggregate(m, c, ifcElement, node.children.map((child, i) => element(m, child, `${path}.${i + 1}`, placement, c)));
|
|
112
121
|
return ifcElement;
|
|
113
122
|
}
|
|
114
|
-
/** One face set per mesh, so meshes on different layers are never in the same item */
|
|
115
|
-
function
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
123
|
+
/** One face set or polyline per mesh, so meshes on different layers are never in the same item */
|
|
124
|
+
function representationItem(m, mesh, c) {
|
|
125
|
+
const [item, style] = mesh.type === "Tessellation"
|
|
126
|
+
? [faceSet(m, mesh.triangulation), surfaceStyle(m, mesh.material, c)]
|
|
127
|
+
: [add(m, `IFCPOLYLINE(${refs(mesh.polyline.map((p) => add(m, `IFCCARTESIANPOINT(${p})`)))})`), curveStyle(m, mesh.material, c)];
|
|
128
|
+
add(m, `IFCSTYLEDITEM(${ref(item)},(${ref(style)}),$)`);
|
|
129
|
+
if (mesh.layer !== undefined) {
|
|
130
|
+
const items = c.layers.get(mesh.layer);
|
|
121
131
|
if (items) {
|
|
122
|
-
items.push(
|
|
132
|
+
items.push(item);
|
|
123
133
|
}
|
|
124
134
|
else {
|
|
125
|
-
c.layers.set(layer, [
|
|
135
|
+
c.layers.set(mesh.layer, [item]);
|
|
126
136
|
}
|
|
127
137
|
}
|
|
128
|
-
return
|
|
138
|
+
return item;
|
|
139
|
+
}
|
|
140
|
+
function faceSet(m, { points, triangles }) {
|
|
141
|
+
const pointList = add(m, `IFCCARTESIANPOINTLIST3D((${points.join(",")}))`);
|
|
142
|
+
return add(m, `IFCTRIANGULATEDFACESET(${ref(pointList)},$,.F.,(${triangles.map((t) => `(${t.join(",")})`).join(",")}),$)`);
|
|
129
143
|
}
|
|
130
144
|
function surfaceStyle(m, material, c) {
|
|
131
145
|
const opacity = material.opacity ?? 1;
|
|
132
|
-
|
|
146
|
+
return cachedStyle(c, `surface_${material.normal}_${opacity}`, () => {
|
|
147
|
+
// Rendering rather than its supertype shading, since many viewers only read the transparency from rendering
|
|
148
|
+
const rendering = add(m, `IFCSURFACESTYLERENDERING(${ref(colour(m, material))},${real(1 - opacity)},$,$,$,$,$,$,.NOTDEFINED.)`);
|
|
149
|
+
return add(m, `IFCSURFACESTYLE(${str(material.normal)},.BOTH.,(${ref(rendering)}))`);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/** Only the colour, IFC has no line width that viewers reliably show */
|
|
153
|
+
const curveStyle = (m, material, c) => cachedStyle(c, `curve_${material.normal}`, () => add(m, `IFCCURVESTYLE($,$,$,${ref(colour(m, material))},.T.)`));
|
|
154
|
+
function cachedStyle(c, key, create) {
|
|
133
155
|
const cached = c.styles.get(key);
|
|
134
156
|
if (cached !== undefined) {
|
|
135
157
|
return cached;
|
|
136
158
|
}
|
|
137
|
-
const
|
|
138
|
-
const colour = add(m, `IFCCOLOURRGB($,${real(r)},${real(g)},${real(b)})`);
|
|
139
|
-
// Rendering rather than its supertype shading, since many viewers only read the transparency from rendering
|
|
140
|
-
const rendering = add(m, `IFCSURFACESTYLERENDERING(${ref(colour)},${real(1 - opacity)},$,$,$,$,$,$,.NOTDEFINED.)`);
|
|
141
|
-
const style = add(m, `IFCSURFACESTYLE(${str(material.normal)},.BOTH.,(${ref(rendering)}))`);
|
|
159
|
+
const style = create();
|
|
142
160
|
c.styles.set(key, style);
|
|
143
161
|
return style;
|
|
144
162
|
}
|
|
163
|
+
function colour(m, material) {
|
|
164
|
+
const { r, g, b } = new Color(material.normal).getRGB({ r: 0, g: 0, b: 0 }, SRGBColorSpace);
|
|
165
|
+
return add(m, `IFCCOLOURRGB($,${real(r)},${real(g)},${real(b)})`);
|
|
166
|
+
}
|
|
145
167
|
/** The group's local axes, converted to IFC's Z-up where three.js' up (Y) becomes the placement's Axis (Z) */
|
|
146
168
|
function axisPlacement(m, pos, rot) {
|
|
147
169
|
const location = add(m, `IFCCARTESIANPOINT(${point(toIfc(pos))})`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc.js","sourceRoot":"","sources":["../../../src/renderers/ifc/ifc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ifc.js","sourceRoot":"","sources":["../../../src/renderers/ifc/ifc.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "abstract-3d",
|
|
3
|
-
"version": "2.12.
|
|
4
|
-
"gitHead": "
|
|
3
|
+
"version": "2.12.2",
|
|
4
|
+
"gitHead": "a3fb140d99d3dbbff9f312445b2ae8dcbf8c88e0",
|
|
5
5
|
"description": "Abstract 3D",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Divid AB <info@divid.se>",
|
|
@@ -29,9 +29,21 @@ export type Triangulation = {
|
|
|
29
29
|
readonly triangles: ReadonlyArray<readonly [number, number, number]>;
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
+
/** Encoded IFC coordinates of a line's start and end */
|
|
33
|
+
export type Polyline = readonly [string, string];
|
|
34
|
+
|
|
32
35
|
/** Abstract 3D is Y-up like three.js, IFC is Z-up */
|
|
33
36
|
export const toIfc = (v: Vec3): Vec3 => vec3(v.x, -v.z, v.y);
|
|
34
37
|
|
|
38
|
+
/** The line's start and end in the coordinate system where its parent group is at parentPos/parentRot, undefined for geometries that aren't lines */
|
|
39
|
+
export function polyline(geometry: Mesh["geometry"], parentPos = vec3Zero, parentRot = vec3Zero): Polyline | undefined {
|
|
40
|
+
if (geometry.type !== "Line" && geometry.type !== "CulledLine") {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
const ifcPoint = (p: Vec3): string => point(toIfc(vec3TransRot(p, parentPos, parentRot)));
|
|
44
|
+
return [ifcPoint(geometry.start), ifcPoint(geometry.end)];
|
|
45
|
+
}
|
|
46
|
+
|
|
35
47
|
/**
|
|
36
48
|
* Triangulates the mesh in the coordinate system where its parent group is at parentPos/parentRot, undefined for geometries without a solid surface
|
|
37
49
|
* (lines, text, images)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { describe, expect, it, vi } from "vitest";
|
|
2
2
|
import type { Scene } from "../../abstract-3d.js";
|
|
3
|
-
import { box, cylinder, group, line, roundHole, sphere, vec2, vec3, vec3Zero } from "../../abstract-3d.js";
|
|
3
|
+
import { box, culledLine, cylinder, group, line, roundHole, sphere, vec2, vec3, vec3Zero } from "../../abstract-3d.js";
|
|
4
4
|
import { guid, ifcFile, real, str } from "./ifc-encoding.js";
|
|
5
|
-
import { triangulate } from "./ifc-geometry.js";
|
|
5
|
+
import { polyline, triangulate } from "./ifc-geometry.js";
|
|
6
6
|
import { render } from "./ifc.js";
|
|
7
7
|
|
|
8
8
|
const red = { normal: "rgb(255, 0, 0)", opacity: 0.5 };
|
|
@@ -12,17 +12,19 @@ const ids = (s: string): ReadonlyArray<string> => Array.from(s.matchAll(/#(\d+)/
|
|
|
12
12
|
/** Random GlobalIds replaced, to compare files */
|
|
13
13
|
const normalize = (ifc: string): string => ifc.replaceAll(/'[0-9A-Za-z_$]{22}'/g, "'guid'");
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
const entities = (ifc: string): ReadonlyMap<string, string> => new Map(Array.from(ifc.matchAll(/^#(\d+)=(.*);$/gm), (match) => [match[1], match[2]]));
|
|
16
|
+
|
|
17
|
+
/** The layer of every face set and polyline of the element named `name`, in order */
|
|
16
18
|
function elementLayers(ifc: string, name: string): ReadonlyArray<string | undefined> {
|
|
17
|
-
const
|
|
19
|
+
const byId = entities(ifc);
|
|
18
20
|
const layers = new Map(
|
|
19
21
|
Array.from(ifc.matchAll(/[=]IFCPRESENTATIONLAYERASSIGNMENT\('([^']*)',\$,\(([^)]*)\),\$\);/g)).flatMap(([, layer, items]) =>
|
|
20
22
|
ids(items).map((item) => [item, layer] as const)
|
|
21
23
|
)
|
|
22
24
|
);
|
|
23
|
-
// The element's owner history, placement and shape, the shape's
|
|
24
|
-
const [, , shape] = ids(Array.from(
|
|
25
|
-
const
|
|
25
|
+
// The element's owner history, placement and shape, the shape's representations and their context and items
|
|
26
|
+
const [, , shape] = ids(Array.from(byId.values()).find((e) => e.includes(`,'${name}',$,$,#`))!);
|
|
27
|
+
const items = ids(byId.get(shape)!).flatMap((representation) => ids(byId.get(representation)!).slice(1));
|
|
26
28
|
return items.map((item) => layers.get(item));
|
|
27
29
|
}
|
|
28
30
|
|
|
@@ -76,6 +78,12 @@ describe("ifc triangulation", () => {
|
|
|
76
78
|
expect(triangulate(cylinder(vec3Zero, 1, 2, red, vec3Zero, false, [], 0, Math.PI).geometry)!.triangles.length).toBeGreaterThan(0);
|
|
77
79
|
expect(triangulate(line(vec3Zero, vec3(1, 1, 1), 1, red).geometry)).toBeUndefined();
|
|
78
80
|
});
|
|
81
|
+
|
|
82
|
+
it("converts the end points of lines like the triangle points and nothing else", () => {
|
|
83
|
+
expect(polyline(line(vec3(1, 2, 3), vec3(4, 5, 6), 1, red).geometry, vec3(0, 10, 0))).toEqual(["(1.,-3.,12.)", "(4.,-6.,15.)"]);
|
|
84
|
+
expect(polyline(culledLine(vec3Zero, vec3(1, 0, 0), vec3(0, 0, 1), 1, red).geometry)).toEqual(["(0.,0.,0.)", "(1.,0.,0.)"]);
|
|
85
|
+
expect(polyline(box(vec3(1, 1, 1), red).geometry)).toBeUndefined();
|
|
86
|
+
});
|
|
79
87
|
});
|
|
80
88
|
|
|
81
89
|
describe("ifc render", () => {
|
|
@@ -100,8 +108,8 @@ describe("ifc render", () => {
|
|
|
100
108
|
expect(ifc).toMatch(/^ISO-10303-21;/);
|
|
101
109
|
expect(ifc).toContain("FILE_SCHEMA(('IFC4'));");
|
|
102
110
|
expect(ifc.trimEnd()).toMatch(/END-ISO-10303-21;$/);
|
|
103
|
-
// The
|
|
104
|
-
expect(count(ifc, "IFCBUILDINGELEMENTPROXY")).toBe(
|
|
111
|
+
// The empty group is left out, the group without data is merged into its parent
|
|
112
|
+
expect(count(ifc, "IFCBUILDINGELEMENTPROXY")).toBe(4);
|
|
105
113
|
expect(count(ifc, "IFCTRIANGULATEDFACESET")).toBe(4);
|
|
106
114
|
expect(count(ifc, "IFCRELAGGREGATES")).toBe(4);
|
|
107
115
|
expect(count(ifc, "IFCRELCONTAINEDINSPATIALSTRUCTURE")).toBe(1);
|
|
@@ -129,6 +137,49 @@ describe("ifc render", () => {
|
|
|
129
137
|
expect(count(ifc, "IFCSURFACESTYLE")).toBe(2);
|
|
130
138
|
});
|
|
131
139
|
|
|
140
|
+
it("writes a line as a polyline in a Curve3D representation next to the face sets, styled with its colour and on its group's layer", () => {
|
|
141
|
+
const green = { normal: "rgb(0, 255, 0)" };
|
|
142
|
+
const ifc = render(
|
|
143
|
+
scene([
|
|
144
|
+
group([box(vec3(1, 1, 1), red)], vec3Zero, vec3Zero, [group([line(vec3(1, 2, 3), vec3(4, 5, 6), 2, green)], vec3(0, 100, 0))], {
|
|
145
|
+
layer: "A",
|
|
146
|
+
}),
|
|
147
|
+
]),
|
|
148
|
+
{ layer: (path) => path.at(-1)?.layer }
|
|
149
|
+
);
|
|
150
|
+
const byId = entities(ifc);
|
|
151
|
+
expect(count(ifc, "IFCPOLYLINE")).toBe(1);
|
|
152
|
+
const [, polylineId, start, end] = /^#(\d+)=IFCPOLYLINE\(\(#(\d+),#(\d+)\)\);$/m.exec(ifc)!;
|
|
153
|
+
// The line keeps its group's offset, Y-up 100 becomes Z
|
|
154
|
+
expect([byId.get(start), byId.get(end)]).toEqual(["IFCCARTESIANPOINT((1.,-3.,102.))", "IFCCARTESIANPOINT((4.,-6.,105.))"]);
|
|
155
|
+
const [tessellation, curve] = ids(Array.from(byId.values()).find((e) => e.startsWith("IFCPRODUCTDEFINITIONSHAPE("))!);
|
|
156
|
+
expect(byId.get(tessellation)).toMatch(/^IFCSHAPEREPRESENTATION\(#\d+,'Body','Tessellation',\(#\d+\)\)$/);
|
|
157
|
+
expect(byId.get(curve)).toMatch(new RegExp(`^IFCSHAPEREPRESENTATION\\(#\\d+,'Body','Curve3D',\\(#${polylineId}\\)\\)$`));
|
|
158
|
+
const [, style] = ids(Array.from(byId.values()).find((e) => e.startsWith(`IFCSTYLEDITEM(#${polylineId},`))!);
|
|
159
|
+
const [colour] = ids(byId.get(style)!);
|
|
160
|
+
expect(byId.get(style)).toBe(`IFCCURVESTYLE($,$,$,#${colour},.T.)`);
|
|
161
|
+
expect(byId.get(colour)).toBe("IFCCOLOURRGB($,0.,1.,0.)");
|
|
162
|
+
expect(elementLayers(ifc, "Element 1")).toEqual(["A", "A"]);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it("writes an element with only lines, styling each colour once", () => {
|
|
166
|
+
const green = { normal: "rgb(0, 255, 0)" };
|
|
167
|
+
const ifc = render(
|
|
168
|
+
scene([
|
|
169
|
+
group([line(vec3Zero, vec3(1, 0, 0), 1, green), culledLine(vec3Zero, vec3(0, 1, 0), vec3(0, 0, 1), 1, green)], vec3Zero, vec3Zero, [], {
|
|
170
|
+
name: "Lines only",
|
|
171
|
+
}),
|
|
172
|
+
])
|
|
173
|
+
);
|
|
174
|
+
expect(count(ifc, "IFCBUILDINGELEMENTPROXY")).toBe(1);
|
|
175
|
+
expect(ifc).toContain(",'Lines only',$,$,#");
|
|
176
|
+
expect(count(ifc, "IFCPOLYLINE")).toBe(2);
|
|
177
|
+
expect(count(ifc, "IFCCURVESTYLE")).toBe(1);
|
|
178
|
+
expect(count(ifc, "IFCTRIANGULATEDFACESET")).toBe(0);
|
|
179
|
+
expect(count(ifc, "IFCSHAPEREPRESENTATION")).toBe(1);
|
|
180
|
+
expect(ifc).toMatch(/[=]IFCSHAPEREPRESENTATION\(#\d+,'Body','Curve3D',\(#\d+,#\d+\)\);/);
|
|
181
|
+
});
|
|
182
|
+
|
|
132
183
|
it("wraps the scene in one root element", () => {
|
|
133
184
|
const ifc = render(
|
|
134
185
|
scene([
|
|
@@ -262,7 +313,9 @@ describe("ifc render", () => {
|
|
|
262
313
|
});
|
|
263
314
|
|
|
264
315
|
it("only references entities that exist", () => {
|
|
265
|
-
const ifc = render(
|
|
316
|
+
const ifc = render(
|
|
317
|
+
scene([group([box(vec3(1, 1, 1), red), line(vec3Zero, vec3(1, 1, 1), 1, red)], vec3(1, 2, 3), vec3(0.1, 0.2, 0.3), [group([sphere(1, red)])])])
|
|
318
|
+
);
|
|
266
319
|
const ids = new Set(Array.from(ifc.matchAll(/^#(\d+)=/gm), (match) => match[1]));
|
|
267
320
|
const referenced = Array.from(ifc.matchAll(/[(,]#(\d+)/g), (match) => match[1]);
|
|
268
321
|
expect(referenced.filter((id) => !ids.has(id))).toEqual([]);
|
package/src/renderers/ifc/ifc.ts
CHANGED
|
@@ -3,8 +3,8 @@ import type { Scene, Group, Material, Vec3 } from "../../abstract-3d.js";
|
|
|
3
3
|
import { vec3Zero, vec3PosX, vec3PosY, vec3Rot, vec3TransRot, vec3RotCombine } from "../../abstract-3d.js";
|
|
4
4
|
import type { MutableIfc } from "./ifc-encoding.js";
|
|
5
5
|
import { add, guid, ifcFile, point, real, ref, refs, serialize, str } from "./ifc-encoding.js";
|
|
6
|
-
import type { Triangulation } from "./ifc-geometry.js";
|
|
7
|
-
import { toIfc, triangulate } from "./ifc-geometry.js";
|
|
6
|
+
import type { Polyline, Triangulation } from "./ifc-geometry.js";
|
|
7
|
+
import { polyline, toIfc, triangulate } from "./ifc-geometry.js";
|
|
8
8
|
|
|
9
9
|
/** Element classes with the same attributes as IfcBuildingElementProxy (GlobalId, ..., Tag, PredefinedType) */
|
|
10
10
|
export type IfcElementEntity = "IfcBuildingElementProxy" | "IfcUnitaryEquipment";
|
|
@@ -43,7 +43,13 @@ export type IfcOptions = {
|
|
|
43
43
|
readonly layer?: (path: ReadonlyArray<Record<string, string>>) => string | undefined;
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
/** A triangulated mesh or a line, `type` is the RepresentationType of the shape representation it's written in */
|
|
47
|
+
type NodeMesh = { readonly material: Material; readonly layer: string | undefined } & (
|
|
48
|
+
| { readonly type: "Tessellation"; readonly triangulation: Triangulation }
|
|
49
|
+
| { readonly type: "Curve3D"; readonly polyline: Polyline }
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const representationTypes = ["Tessellation", "Curve3D"] as const;
|
|
47
53
|
|
|
48
54
|
/** The `data` of the groups from the root down to a group and the layer its meshes are on */
|
|
49
55
|
type Layering = {
|
|
@@ -52,7 +58,7 @@ type Layering = {
|
|
|
52
58
|
readonly layer: string | undefined;
|
|
53
59
|
};
|
|
54
60
|
|
|
55
|
-
/** A group that becomes an element, groups without any triangulated geometry in them are left out */
|
|
61
|
+
/** A group that becomes an element, groups without any triangulated geometry or lines in them are left out */
|
|
56
62
|
type ElementNode = {
|
|
57
63
|
readonly group: Group;
|
|
58
64
|
readonly elementClass: IfcElementClass;
|
|
@@ -66,7 +72,7 @@ const proxyClass: IfcElementClass = { entity: "IfcBuildingElementProxy" };
|
|
|
66
72
|
|
|
67
73
|
/**
|
|
68
74
|
* `owner` is the encoded GlobalId and OwnerHistory every IfcRoot entity starts with, call it once per entity since the GlobalId must be unique.
|
|
69
|
-
* `layers` are the face sets on each layer
|
|
75
|
+
* `layers` are the representation items (face sets and polylines) on each layer
|
|
70
76
|
*/
|
|
71
77
|
type IfcContext = {
|
|
72
78
|
readonly body: number;
|
|
@@ -76,10 +82,10 @@ type IfcContext = {
|
|
|
76
82
|
};
|
|
77
83
|
|
|
78
84
|
/**
|
|
79
|
-
* IFC4 (Reference View) with every mesh as an IfcTriangulatedFaceSet
|
|
80
|
-
* `data.name` becomes an IfcBuildingElementProxy placed relative to its parent element and
|
|
81
|
-
* metadata, so their meshes are merged into the parent element. With `layer`, the face sets
|
|
82
|
-
* layer, the presentation layer of the Reference View
|
|
85
|
+
* IFC4 (Reference View) with every mesh as an IfcTriangulatedFaceSet and every line as an IfcPolyline without thickness, in millimetres. Every
|
|
86
|
+
* top-level group and every group with a `data.id` or `data.name` becomes an IfcBuildingElementProxy placed relative to its parent element and
|
|
87
|
+
* aggregated into it. Other groups are only transforms or metadata, so their meshes are merged into the parent element. With `layer`, the face sets
|
|
88
|
+
* and polylines are assigned to an IfcPresentationLayerAssignment per layer, the presentation layer of the Reference View
|
|
83
89
|
*/
|
|
84
90
|
export function render(scene: Scene, options: IfcOptions = {}): string {
|
|
85
91
|
const name = options.name ?? "Abstract 3D";
|
|
@@ -154,9 +160,16 @@ function elementNode(group: Group, pos: Vec3, rot: Vec3, layering: Layering, ele
|
|
|
154
160
|
* `data.id` or `data.name` as elements
|
|
155
161
|
*/
|
|
156
162
|
function elementContent(group: Group, pos: Vec3, rot: Vec3, layering: Layering): Pick<ElementNode, "meshes" | "children"> {
|
|
157
|
-
const meshes = (group.meshes ?? []).flatMap((mesh) => {
|
|
163
|
+
const meshes = (group.meshes ?? []).flatMap((mesh): ReadonlyArray<NodeMesh> => {
|
|
164
|
+
const { material } = mesh;
|
|
165
|
+
const { layer } = layering;
|
|
158
166
|
const triangulation = triangulate(mesh.geometry, pos, rot);
|
|
159
|
-
|
|
167
|
+
const line = polyline(mesh.geometry, pos, rot);
|
|
168
|
+
return triangulation
|
|
169
|
+
? [{ type: "Tessellation", material, layer, triangulation }]
|
|
170
|
+
: line
|
|
171
|
+
? [{ type: "Curve3D", material, layer, polyline: line }]
|
|
172
|
+
: [];
|
|
160
173
|
});
|
|
161
174
|
const nested = (group.groups ?? []).map((child) => {
|
|
162
175
|
const childPos = vec3TransRot(child.pos, pos, rot);
|
|
@@ -183,11 +196,11 @@ function groupLayering(group: Group, parent: Layering): Layering {
|
|
|
183
196
|
/** `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 */
|
|
184
197
|
function element(m: MutableIfc, node: ElementNode, path: string, parentPlacement: number, c: IfcContext): number {
|
|
185
198
|
const placement = add(m, `IFCLOCALPLACEMENT(${ref(parentPlacement)},${ref(axisPlacement(m, node.pos, node.rot))})`);
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
items.length > 0
|
|
189
|
-
|
|
190
|
-
|
|
199
|
+
const representations = representationTypes.flatMap((type) => {
|
|
200
|
+
const items = node.meshes.filter((mesh) => mesh.type === type).map((mesh) => representationItem(m, mesh, c));
|
|
201
|
+
return items.length > 0 ? [add(m, `IFCSHAPEREPRESENTATION(${ref(c.body)},'Body',${str(type)},${refs(items)})`)] : [];
|
|
202
|
+
});
|
|
203
|
+
const shape = representations.length > 0 ? ref(add(m, `IFCPRODUCTDEFINITIONSHAPE($,$,${refs(representations)})`)) : "$";
|
|
191
204
|
const id = node.group.data?.["id"];
|
|
192
205
|
const name = node.group.data?.["name"] ?? id ?? `Element ${path}`;
|
|
193
206
|
const { entity, predefinedType = "NOTDEFINED" } = node.elementClass;
|
|
@@ -201,38 +214,57 @@ function element(m: MutableIfc, node: ElementNode, path: string, parentPlacement
|
|
|
201
214
|
return ifcElement;
|
|
202
215
|
}
|
|
203
216
|
|
|
204
|
-
/** One face set per mesh, so meshes on different layers are never in the same item */
|
|
205
|
-
function
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
217
|
+
/** One face set or polyline per mesh, so meshes on different layers are never in the same item */
|
|
218
|
+
function representationItem(m: MutableIfc, mesh: NodeMesh, c: IfcContext): number {
|
|
219
|
+
const [item, style] =
|
|
220
|
+
mesh.type === "Tessellation"
|
|
221
|
+
? [faceSet(m, mesh.triangulation), surfaceStyle(m, mesh.material, c)]
|
|
222
|
+
: [add(m, `IFCPOLYLINE(${refs(mesh.polyline.map((p) => add(m, `IFCCARTESIANPOINT(${p})`)))})`), curveStyle(m, mesh.material, c)];
|
|
223
|
+
add(m, `IFCSTYLEDITEM(${ref(item)},(${ref(style)}),$)`);
|
|
224
|
+
if (mesh.layer !== undefined) {
|
|
225
|
+
const items = c.layers.get(mesh.layer);
|
|
211
226
|
if (items) {
|
|
212
|
-
items.push(
|
|
227
|
+
items.push(item);
|
|
213
228
|
} else {
|
|
214
|
-
c.layers.set(layer, [
|
|
229
|
+
c.layers.set(mesh.layer, [item]);
|
|
215
230
|
}
|
|
216
231
|
}
|
|
217
|
-
return
|
|
232
|
+
return item;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function faceSet(m: MutableIfc, { points, triangles }: Triangulation): number {
|
|
236
|
+
const pointList = add(m, `IFCCARTESIANPOINTLIST3D((${points.join(",")}))`);
|
|
237
|
+
return add(m, `IFCTRIANGULATEDFACESET(${ref(pointList)},$,.F.,(${triangles.map((t) => `(${t.join(",")})`).join(",")}),$)`);
|
|
218
238
|
}
|
|
219
239
|
|
|
220
240
|
function surfaceStyle(m: MutableIfc, material: Material, c: IfcContext): number {
|
|
221
241
|
const opacity = material.opacity ?? 1;
|
|
222
|
-
|
|
242
|
+
return cachedStyle(c, `surface_${material.normal}_${opacity}`, () => {
|
|
243
|
+
// Rendering rather than its supertype shading, since many viewers only read the transparency from rendering
|
|
244
|
+
const rendering = add(m, `IFCSURFACESTYLERENDERING(${ref(colour(m, material))},${real(1 - opacity)},$,$,$,$,$,$,.NOTDEFINED.)`);
|
|
245
|
+
return add(m, `IFCSURFACESTYLE(${str(material.normal)},.BOTH.,(${ref(rendering)}))`);
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/** Only the colour, IFC has no line width that viewers reliably show */
|
|
250
|
+
const curveStyle = (m: MutableIfc, material: Material, c: IfcContext): number =>
|
|
251
|
+
cachedStyle(c, `curve_${material.normal}`, () => add(m, `IFCCURVESTYLE($,$,$,${ref(colour(m, material))},.T.)`));
|
|
252
|
+
|
|
253
|
+
function cachedStyle(c: IfcContext, key: string, create: () => number): number {
|
|
223
254
|
const cached = c.styles.get(key);
|
|
224
255
|
if (cached !== undefined) {
|
|
225
256
|
return cached;
|
|
226
257
|
}
|
|
227
|
-
const
|
|
228
|
-
const colour = add(m, `IFCCOLOURRGB($,${real(r)},${real(g)},${real(b)})`);
|
|
229
|
-
// Rendering rather than its supertype shading, since many viewers only read the transparency from rendering
|
|
230
|
-
const rendering = add(m, `IFCSURFACESTYLERENDERING(${ref(colour)},${real(1 - opacity)},$,$,$,$,$,$,.NOTDEFINED.)`);
|
|
231
|
-
const style = add(m, `IFCSURFACESTYLE(${str(material.normal)},.BOTH.,(${ref(rendering)}))`);
|
|
258
|
+
const style = create();
|
|
232
259
|
c.styles.set(key, style);
|
|
233
260
|
return style;
|
|
234
261
|
}
|
|
235
262
|
|
|
263
|
+
function colour(m: MutableIfc, material: Material): number {
|
|
264
|
+
const { r, g, b } = new Color(material.normal).getRGB({ r: 0, g: 0, b: 0 }, SRGBColorSpace);
|
|
265
|
+
return add(m, `IFCCOLOURRGB($,${real(r)},${real(g)},${real(b)})`);
|
|
266
|
+
}
|
|
267
|
+
|
|
236
268
|
/** The group's local axes, converted to IFC's Z-up where three.js' up (Y) becomes the placement's Axis (Z) */
|
|
237
269
|
function axisPlacement(m: MutableIfc, pos: Vec3, rot: Vec3): number {
|
|
238
270
|
const location = add(m, `IFCCARTESIANPOINT(${point(toIfc(pos))})`);
|