@jfk-solutions/demo3d-file-format 1.5.0 → 1.6.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/dist/raw3d.js ADDED
@@ -0,0 +1,281 @@
1
+ import { decodeText, toUint8Array } from "./binary.js";
2
+ import { Demo3DUnsupportedError, Demo3DZipError } from "./errors.js";
3
+ import { parseDemo3DXmlFast } from "./fast-xml.js";
4
+ import { Demo3DResource } from "./model.js";
5
+ import { defaultParseXml, xmlDocumentToElement } from "./xml.js";
6
+ import { parseZip } from "./zip.js";
7
+ export class Raw3DView {
8
+ name;
9
+ position;
10
+ target;
11
+ constructor(name, position, target) {
12
+ this.name = name;
13
+ this.position = position;
14
+ this.target = target;
15
+ }
16
+ }
17
+ export class Raw3DNode {
18
+ index;
19
+ name;
20
+ parentIndex;
21
+ meshIndex;
22
+ layerIndex;
23
+ materialIndices;
24
+ location;
25
+ rotation;
26
+ scale;
27
+ castsShadow;
28
+ customAttributes;
29
+ xml;
30
+ constructor(index, name, parentIndex, meshIndex, layerIndex, materialIndices, location, rotation, scale, castsShadow, customAttributes, xml) {
31
+ this.index = index;
32
+ this.name = name;
33
+ this.parentIndex = parentIndex;
34
+ this.meshIndex = meshIndex;
35
+ this.layerIndex = layerIndex;
36
+ this.materialIndices = materialIndices;
37
+ this.location = location;
38
+ this.rotation = rotation;
39
+ this.scale = scale;
40
+ this.castsShadow = castsShadow;
41
+ this.customAttributes = customAttributes;
42
+ this.xml = xml;
43
+ }
44
+ }
45
+ export class Raw3DLayer {
46
+ name;
47
+ materialIndex;
48
+ xml;
49
+ constructor(name, materialIndex, xml) {
50
+ this.name = name;
51
+ this.materialIndex = materialIndex;
52
+ this.xml = xml;
53
+ }
54
+ }
55
+ export class Raw3DMaterial {
56
+ red;
57
+ green;
58
+ blue;
59
+ transparency;
60
+ reflectivity;
61
+ textureIndex;
62
+ normalTextureIndex;
63
+ normalScale;
64
+ scaleU;
65
+ scaleV;
66
+ xml;
67
+ constructor(red, green, blue, transparency, reflectivity, textureIndex, normalTextureIndex, normalScale, scaleU, scaleV, xml) {
68
+ this.red = red;
69
+ this.green = green;
70
+ this.blue = blue;
71
+ this.transparency = transparency;
72
+ this.reflectivity = reflectivity;
73
+ this.textureIndex = textureIndex;
74
+ this.normalTextureIndex = normalTextureIndex;
75
+ this.normalScale = normalScale;
76
+ this.scaleU = scaleU;
77
+ this.scaleV = scaleV;
78
+ this.xml = xml;
79
+ }
80
+ }
81
+ export class Raw3DTexture {
82
+ path;
83
+ data;
84
+ xml;
85
+ constructor(path, data, xml) {
86
+ this.path = path;
87
+ this.data = data;
88
+ this.xml = xml;
89
+ }
90
+ }
91
+ export class Raw3DVertexAttribute {
92
+ usage;
93
+ type;
94
+ componentCount;
95
+ offset;
96
+ xml;
97
+ constructor(usage, type, componentCount, offset, xml) {
98
+ this.usage = usage;
99
+ this.type = type;
100
+ this.componentCount = componentCount;
101
+ this.offset = offset;
102
+ this.xml = xml;
103
+ }
104
+ }
105
+ export class Raw3DVertexBuffer {
106
+ path;
107
+ attributes;
108
+ stride;
109
+ data;
110
+ xml;
111
+ constructor(path, attributes, stride, data, xml) {
112
+ this.path = path;
113
+ this.attributes = attributes;
114
+ this.stride = stride;
115
+ this.data = data;
116
+ this.xml = xml;
117
+ }
118
+ }
119
+ export class Raw3DIndexBuffer {
120
+ path;
121
+ data;
122
+ xml;
123
+ constructor(path, data, xml) {
124
+ this.path = path;
125
+ this.data = data;
126
+ this.xml = xml;
127
+ }
128
+ }
129
+ export class Raw3DMesh {
130
+ vertexBufferIndex;
131
+ indexBufferIndices;
132
+ xml;
133
+ constructor(vertexBufferIndex, indexBufferIndices, xml) {
134
+ this.vertexBufferIndex = vertexBufferIndex;
135
+ this.indexBufferIndices = indexBufferIndices;
136
+ this.xml = xml;
137
+ }
138
+ }
139
+ export class Raw3DProject {
140
+ root;
141
+ origin;
142
+ views;
143
+ nodes;
144
+ layers;
145
+ materials;
146
+ textures;
147
+ meshes;
148
+ vertexBuffers;
149
+ indexBuffers;
150
+ constructor(root, origin, views, nodes, layers, materials, textures, meshes, vertexBuffers, indexBuffers) {
151
+ this.root = root;
152
+ this.origin = origin;
153
+ this.views = views;
154
+ this.nodes = nodes;
155
+ this.layers = layers;
156
+ this.materials = materials;
157
+ this.textures = textures;
158
+ this.meshes = meshes;
159
+ this.vertexBuffers = vertexBuffers;
160
+ this.indexBuffers = indexBuffers;
161
+ }
162
+ }
163
+ export class Raw3DPackage {
164
+ entries;
165
+ modelEntryName;
166
+ modelXml;
167
+ model;
168
+ thumbnail;
169
+ aspects;
170
+ constructor(entries, modelEntryName, modelXml, model, thumbnail, aspects) {
171
+ this.entries = entries;
172
+ this.modelEntryName = modelEntryName;
173
+ this.modelXml = modelXml;
174
+ this.model = model;
175
+ this.thumbnail = thumbnail;
176
+ this.aspects = aspects;
177
+ }
178
+ }
179
+ export async function parseRaw3D(input, options = {}) {
180
+ const archive = parseZip(toUint8Array(input));
181
+ const entryByPath = new Map(archive.entries.map((entry) => [entry.name.toLowerCase(), entry]));
182
+ const modelEntry = entryByPath.get("model.xml");
183
+ if (!modelEntry) {
184
+ throw new Demo3DZipError('No "Model.xml" scene entry was found in the RAW3D package.');
185
+ }
186
+ if (modelEntry.uncompressedSize === 0) {
187
+ throw new Demo3DUnsupportedError('RAW3D scene entry "Model.xml" is empty.', "RAW3D_EMPTY_MODEL");
188
+ }
189
+ const modelXml = decodeText(await modelEntry.arrayBuffer(), "utf-8");
190
+ const root = options.parseXml || options.xmlParser === "dom"
191
+ ? xmlDocumentToElement((options.parseXml ?? defaultParseXml)(modelXml))
192
+ : parseDemo3DXmlFast(modelXml);
193
+ if (root.localName !== "Scene") {
194
+ throw new Demo3DUnsupportedError(`RAW3D Model.xml has unsupported root element "${root.name}".`, "RAW3D_MODEL_ROOT_UNSUPPORTED");
195
+ }
196
+ const loadData = async (path) => {
197
+ const entry = entryByPath.get(path.toLowerCase());
198
+ return entry ? entry.arrayBuffer() : undefined;
199
+ };
200
+ const model = await extractRaw3DProject(root, loadData);
201
+ const thumbnailEntry = entryByPath.get("thumbnail.png");
202
+ const aspectsEntry = entryByPath.get("aspects.json");
203
+ const [thumbnail, aspects] = await Promise.all([
204
+ thumbnailEntry ? toResource(thumbnailEntry) : undefined,
205
+ aspectsEntry ? toResource(aspectsEntry) : undefined
206
+ ]);
207
+ return new Raw3DPackage(archive.entries.map(toEntryInfo), modelEntry.name, modelXml, model, thumbnail, aspects);
208
+ }
209
+ async function extractRaw3DProject(root, loadData) {
210
+ const textureElements = root.child("Textures")?.childrenNamed("Texture") ?? [];
211
+ const vertexBufferElements = root.child("VertexBuffers")?.childrenNamed("VertexBuffer") ?? [];
212
+ const indexBufferElements = root.child("IndexBuffers")?.childrenNamed("IndexBuffer") ?? [];
213
+ const [textureData, vertexData, indexData] = await Promise.all([
214
+ Promise.all(textureElements.map((element) => loadData(attribute(element, "Path") ?? ""))),
215
+ Promise.all(vertexBufferElements.map((element) => loadData(attribute(element, "Path") ?? ""))),
216
+ Promise.all(indexBufferElements.map((element) => loadData(attribute(element, "Path") ?? "")))
217
+ ]);
218
+ return new Raw3DProject(root, attribute(root, "Origin"), (root.child("Views")?.childrenNamed("View") ?? []).map((element) => new Raw3DView(attribute(element, "Name") ?? "", numberList(attribute(element, "Position")), numberList(attribute(element, "Target")))), (root.child("Nodes")?.childrenNamed("Node") ?? []).map((element, position) => new Raw3DNode(integerAttribute(element, "Index") ?? position, attribute(element, "Name") ?? "", integerAttribute(element, "Parent"), integerAttribute(element, "Mesh"), integerAttribute(element, "Layer"), integerList(attribute(element, "Materials")), numberList(attribute(element, "Location")), numberList(attribute(element, "Rotation")), numberList(attribute(element, "Scale"), [1, 1, 1]), booleanAttribute(element, "CastsShadow", true), parseCustomAttributes(attribute(element, "CustomAttributes")), element)), (root.child("Layers")?.childrenNamed("Layer") ?? []).map((element) => new Raw3DLayer(attribute(element, "Name") ?? "", integerAttribute(element, "Material"), element)), (root.child("Materials")?.childrenNamed("Material") ?? []).map((element) => new Raw3DMaterial(numberAttribute(element, "R", 0), numberAttribute(element, "G", 0), numberAttribute(element, "B", 0), numberAttribute(element, "A", 0), numberAttribute(element, "Reflectivity", 0), integerAttribute(element, "Texture"), integerAttribute(element, "NormalTexture"), numberAttribute(element, "NormalScale", 1), numberAttribute(element, "SU", 1), numberAttribute(element, "SV", 1), element)), textureElements.map((element, index) => new Raw3DTexture(attribute(element, "Path") ?? "", textureData[index], element)), (root.child("Meshes")?.childrenNamed("Mesh") ?? []).map((element) => new Raw3DMesh(integerAttribute(element, "VertexBuffer") ?? -1, integerList(attribute(element, "IndexBuffers")), element)), vertexBufferElements.map((element, index) => {
219
+ let offset = 0;
220
+ const attributes = element.childrenNamed("Attribute").map((attributeElement) => {
221
+ const type = attribute(attributeElement, "Type") ?? "Vector3";
222
+ const componentCount = vectorComponentCount(type);
223
+ const result = new Raw3DVertexAttribute(attribute(attributeElement, "Usage") ?? "", type, componentCount, offset, attributeElement);
224
+ offset += componentCount * 4;
225
+ return result;
226
+ });
227
+ return new Raw3DVertexBuffer(attribute(element, "Path") ?? "", attributes, offset, vertexData[index], element);
228
+ }), indexBufferElements.map((element, index) => new Raw3DIndexBuffer(attribute(element, "Path") ?? "", indexData[index], element)));
229
+ }
230
+ function attribute(element, name) {
231
+ return element.attributes.find((item) => item.localName === name)?.value;
232
+ }
233
+ function numberAttribute(element, name, fallback) {
234
+ const parsed = Number.parseFloat(attribute(element, name) ?? "");
235
+ return Number.isFinite(parsed) ? parsed : fallback;
236
+ }
237
+ function integerAttribute(element, name) {
238
+ const parsed = Number.parseInt(attribute(element, name) ?? "", 10);
239
+ return Number.isFinite(parsed) ? parsed : undefined;
240
+ }
241
+ function booleanAttribute(element, name, fallback) {
242
+ const value = attribute(element, name)?.toLowerCase();
243
+ return value === undefined ? fallback : value !== "false" && value !== "0";
244
+ }
245
+ function numberList(value, fallback = []) {
246
+ if (!value) {
247
+ return [...fallback];
248
+ }
249
+ return value.trim().split(/\s+/).map(Number).filter(Number.isFinite);
250
+ }
251
+ function integerList(value) {
252
+ return numberList(value).map((item) => Math.trunc(item));
253
+ }
254
+ function vectorComponentCount(type) {
255
+ const match = /Vector([1-4])$/i.exec(type);
256
+ return match ? Number.parseInt(match[1], 10) : 3;
257
+ }
258
+ function parseCustomAttributes(value) {
259
+ const attributes = new Map();
260
+ const parts = value?.split("|") ?? [];
261
+ for (let index = 0; index + 1 < parts.length; index += 2) {
262
+ if (parts[index]) {
263
+ attributes.set(parts[index], parts[index + 1]);
264
+ }
265
+ }
266
+ return attributes;
267
+ }
268
+ function toEntryInfo(entry) {
269
+ return {
270
+ name: entry.name,
271
+ compressedSize: entry.compressedSize,
272
+ uncompressedSize: entry.uncompressedSize,
273
+ compressionMethod: entry.compressionMethod,
274
+ flags: entry.flags,
275
+ crc32: entry.crc32
276
+ };
277
+ }
278
+ async function toResource(entry) {
279
+ return new Demo3DResource(entry.name, toEntryInfo(entry), await entry.arrayBuffer());
280
+ }
281
+ //# sourceMappingURL=raw3d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw3d.js","sourceRoot":"","sources":["../src/raw3d.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type * as Three from "three";
2
2
  import { Demo3DMaterial, Demo3DMesh, Demo3DPackage, Demo3DProject } from "../model.js";
3
+ export { createRaw3DThreeGroup, createRaw3DThreeScene, decodeRaw3DThreeGeometry, type Raw3DThreeModule, type Raw3DThreeOptions, type Raw3DThreeScene, type Raw3DThreeStats, type Raw3DThreeWarning } from "./raw3d.js";
3
4
  export { createDemo3DThreeRenderer, type Demo3DThreeCanvasRendererOptions, type Demo3DThreeModule, type Demo3DThreeRendererInstance, type Demo3DThreeRendererFallback, type Demo3DThreeRendererResult, type Demo3DThreeRenderBackend, type Demo3DThreeWebGPUModule } from "./renderer.js";
4
5
  export type ThreeModule = typeof Three;
5
6
  export interface Demo3DThreeWarning {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/three/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/three/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { Demo3DConveyorSideProperties, Demo3DDimensionAspect, Demo3DDimensionPoint, Demo3DExtrusionPolygon, Demo3DExtrusionProfile, Demo3DMaterial, Demo3DMesh, Demo3DPackage, Demo3DProject, Demo3DPhotoEye, Demo3DResource, Demo3DSupportStand, Demo3DVisual } from "../model.js";
2
2
  import { Demo3DBinaryBlock, Demo3DXmlElement } from "../xml.js";
3
+ export { createRaw3DThreeGroup, createRaw3DThreeScene, decodeRaw3DThreeGeometry } from "./raw3d.js";
3
4
  export { createDemo3DThreeRenderer } from "./renderer.js";
4
5
  export async function createDemo3DThreeScene(parsed, options = {}) {
5
6
  const three = await resolveThree(options);
@@ -88,6 +89,7 @@ export function decodeDemo3DThreeGeometry(mesh, three) {
88
89
  if (mesh.indices) {
89
90
  geometry.setIndex(new three.BufferAttribute(readIndexBuffer(mesh.indices, mesh.indexFormat), 1));
90
91
  }
92
+ addMeshSubsetGroups(geometry, mesh);
91
93
  convertTriangleGeometryToThreeCoordinates(geometry);
92
94
  if (!normals) {
93
95
  geometry.computeVertexNormals();
@@ -96,6 +98,25 @@ export function decodeDemo3DThreeGeometry(mesh, three) {
96
98
  geometry.computeBoundingSphere();
97
99
  return geometry;
98
100
  }
101
+ function addMeshSubsetGroups(geometry, mesh) {
102
+ const subsets = mesh.auxiliary?.toUint8Array();
103
+ const drawCount = geometry.getIndex()?.count ?? geometry.getAttribute("position").count;
104
+ const faceCount = Math.floor(drawCount / 3);
105
+ if (!subsets || subsets.length !== faceCount || faceCount === 0) {
106
+ return;
107
+ }
108
+ let runStart = 0;
109
+ let materialIndex = subsets[0] ?? 0;
110
+ for (let face = 1; face <= faceCount; face += 1) {
111
+ const nextMaterialIndex = face < faceCount ? subsets[face] : undefined;
112
+ if (face < faceCount && nextMaterialIndex === materialIndex) {
113
+ continue;
114
+ }
115
+ geometry.addGroup(runStart * 3, (face - runStart) * 3, materialIndex);
116
+ runStart = face;
117
+ materialIndex = nextMaterialIndex ?? 0;
118
+ }
119
+ }
99
120
  export function createDemo3DThreeMaterial(material, three) {
100
121
  const diffuse = material?.diffuse;
101
122
  const color = diffuse === undefined ? 0x9aa0a6 : demo3dColorToHex(diffuse);
@@ -192,7 +213,7 @@ function createVisualObject(visual, state, inheritedLayer, parentVisual) {
192
213
  meshes.push(directVisualObject);
193
214
  }
194
215
  for (const ref of refs) {
195
- const mesh = createMeshObject(ref, visual, visual.materials[0], state);
216
+ const mesh = createMeshObject(ref, visual, visual.materials, state);
196
217
  if (mesh) {
197
218
  if (mesh.userData.demo3d?.kind === "missing-geometry-placeholder") {
198
219
  placeholderObjects.push(mesh);
@@ -281,11 +302,13 @@ function createAspectRenderableObjects(visual, state) {
281
302
  for (const renderable of renderables.children) {
282
303
  const meshIds = findMeshReferenceIds(renderable);
283
304
  for (const meshId of meshIds) {
284
- const material = firstMaterial(renderable) ?? visual.materials[0];
305
+ const serializedMaterials = renderableMaterials(renderable);
306
+ const materials = serializedMaterials.length > 0 ? serializedMaterials : visual.materials;
307
+ const primaryMaterial = materials[0];
285
308
  const mesh = state.meshById.has(meshId)
286
- ? createMeshObject(meshId, renderable, material, state)
287
- : createPrimitiveRenderableObject(aspect, renderable, meshId, material, state) ??
288
- createMeshObject(meshId, renderable, material, state);
309
+ ? createMeshObject(meshId, renderable, materials, state)
310
+ : createPrimitiveRenderableObject(aspect, renderable, meshId, primaryMaterial, state) ??
311
+ createMeshObject(meshId, renderable, materials, state);
289
312
  if (!mesh) {
290
313
  continue;
291
314
  }
@@ -1604,6 +1627,7 @@ function getDirectVisualGeometry(visual, state) {
1604
1627
  properties.textOf("Length") ?? "",
1605
1628
  properties.textOf("Radius") ?? "",
1606
1629
  properties.textOf("StartAngle") ?? "",
1630
+ properties.textOf("Thickness") ?? "",
1607
1631
  properties.textOf("Width") ?? ""
1608
1632
  ].join("|")}`;
1609
1633
  const cached = state.primitiveGeometryCache.get(key);
@@ -1611,9 +1635,12 @@ function getDirectVisualGeometry(visual, state) {
1611
1635
  return cached;
1612
1636
  }
1613
1637
  let geometry;
1614
- if (visual.typeName === "e3d:BoxVisual" || visual.typeName === "e3d:BoxTubeVisual") {
1638
+ if (visual.typeName === "e3d:BoxVisual") {
1615
1639
  geometry = new state.three.BoxGeometry(numberChild(properties, "Width", 1), numberChild(properties, "Height", 1), numberChild(properties, "Depth", 1));
1616
1640
  }
1641
+ else if (visual.typeName === "e3d:BoxTubeVisual") {
1642
+ geometry = createBoxTubeGeometry(numberChild(properties, "Width", 0.25), numberChild(properties, "Height", 1), numberChild(properties, "Depth", 0.25), numberChild(properties, "Thickness", 0.015), state);
1643
+ }
1617
1644
  else if (visual.typeName === "e3d:CylinderVisual") {
1618
1645
  geometry = new state.three.CylinderGeometry(numberChild(properties, "Radius", 0.5), numberChild(properties, "Radius", 0.5), numberChild(properties, "Length", 1), 32, 1, false, degreesToRadians(numberChild(properties, "StartAngle", 0)), degreesToRadians(numberChild(properties, "Angle", 360)));
1619
1646
  }
@@ -1630,6 +1657,37 @@ function getDirectVisualGeometry(visual, state) {
1630
1657
  state.stats.geometries += 1;
1631
1658
  return geometry;
1632
1659
  }
1660
+ function createBoxTubeGeometry(width, height, depth, thickness, state) {
1661
+ const halfWidth = Math.max(width, 0) / 2;
1662
+ const halfDepth = Math.max(depth, 0) / 2;
1663
+ const edge = clamp(thickness, 0, Math.min(halfWidth, halfDepth));
1664
+ const shape = new state.three.Shape();
1665
+ shape.moveTo(-halfWidth, -halfDepth);
1666
+ shape.lineTo(-halfWidth, halfDepth);
1667
+ shape.lineTo(halfWidth, halfDepth);
1668
+ shape.lineTo(halfWidth, -halfDepth);
1669
+ shape.closePath();
1670
+ const innerHalfWidth = halfWidth - edge;
1671
+ const innerHalfDepth = halfDepth - edge;
1672
+ if (innerHalfWidth > 0 && innerHalfDepth > 0) {
1673
+ const hole = new state.three.Path();
1674
+ hole.moveTo(-innerHalfWidth, -innerHalfDepth);
1675
+ hole.lineTo(innerHalfWidth, -innerHalfDepth);
1676
+ hole.lineTo(innerHalfWidth, innerHalfDepth);
1677
+ hole.lineTo(-innerHalfWidth, innerHalfDepth);
1678
+ hole.closePath();
1679
+ shape.holes.push(hole);
1680
+ }
1681
+ const geometry = new state.three.ExtrudeGeometry(shape, {
1682
+ depth: Math.max(height, 0),
1683
+ steps: 1,
1684
+ bevelEnabled: false
1685
+ });
1686
+ // ExtrudeGeometry uses Z for its extrusion. Demo3D box tubes extrude along Y.
1687
+ geometry.rotateX(-Math.PI / 2);
1688
+ geometry.translate(0, -Math.max(height, 0) / 2, 0);
1689
+ return geometry;
1690
+ }
1633
1691
  function createWedgeGeometry(width, height, length, state) {
1634
1692
  const x = width / 2;
1635
1693
  const y = height / 2;
@@ -1696,8 +1754,12 @@ function getDrawingBlockGeometry(blockId, state) {
1696
1754
  state.stats.geometries += 1;
1697
1755
  return geometry;
1698
1756
  }
1699
- function createMeshObject(meshId, source, material, state) {
1757
+ function createMeshObject(meshId, source, materialSelection, state) {
1700
1758
  const mesh = state.meshById.get(meshId);
1759
+ const materials = Array.isArray(materialSelection)
1760
+ ? materialSelection
1761
+ : materialSelection ? [materialSelection] : [];
1762
+ const primaryMaterial = materials[0];
1701
1763
  const sourceId = source instanceof Demo3DVisual ? source.id : source.textOf("Id");
1702
1764
  const sourceType = source instanceof Demo3DVisual ? source.typeName : source.xsiType ?? source.localName;
1703
1765
  const xmlPath = source instanceof Demo3DVisual ? source.xml.path : source.path;
@@ -1710,20 +1772,24 @@ function createMeshObject(meshId, source, material, state) {
1710
1772
  xmlPath
1711
1773
  });
1712
1774
  return state.options.showPlaceholders === true
1713
- ? createPlaceholderMesh(sourceId ?? meshId, meshId, material, state)
1775
+ ? createPlaceholderMesh(sourceId ?? meshId, meshId, primaryMaterial, state)
1714
1776
  : undefined;
1715
1777
  }
1716
1778
  const geometry = getGeometry(mesh, state);
1717
1779
  if (!geometry) {
1718
1780
  return state.options.showPlaceholders === true
1719
- ? createPlaceholderMesh(sourceId ?? meshId, meshId, material, state)
1781
+ ? createPlaceholderMesh(sourceId ?? meshId, meshId, primaryMaterial, state)
1720
1782
  : undefined;
1721
1783
  }
1722
- const object = new state.three.Mesh(geometry, getMaterial(material, state));
1784
+ const threeMaterial = materials.length > 1
1785
+ ? materials.map((material) => getMaterial(material, state))
1786
+ : getMaterial(primaryMaterial, state);
1787
+ const object = new state.three.Mesh(geometry, threeMaterial);
1723
1788
  object.name = source instanceof Demo3DVisual ? source.displayName ?? meshId : meshId;
1724
1789
  object.userData.demo3d = {
1725
1790
  kind: "mesh",
1726
1791
  meshId,
1792
+ materialSlots: materials.length,
1727
1793
  sourceId,
1728
1794
  sourceType,
1729
1795
  xmlPath
@@ -2217,8 +2283,7 @@ function createSerializedRenderableGroup(state) {
2217
2283
  }
2218
2284
  const meshIds = findMeshReferenceIds(renderable);
2219
2285
  for (const meshId of meshIds) {
2220
- const material = firstMaterial(renderable);
2221
- const mesh = createMeshObject(meshId, renderable, material, state);
2286
+ const mesh = createMeshObject(meshId, renderable, renderableMaterials(renderable), state);
2222
2287
  if (!mesh) {
2223
2288
  continue;
2224
2289
  }
@@ -2418,6 +2483,23 @@ function findVisualMeshReferenceIds(root) {
2418
2483
  }
2419
2484
  return [...ids];
2420
2485
  }
2486
+ function renderableMaterials(renderable) {
2487
+ const materials = [];
2488
+ const materialProperties = renderable.child("MaterialProperties");
2489
+ for (const entry of materialProperties?.children ?? []) {
2490
+ const material = firstMaterial(entry);
2491
+ if (material) {
2492
+ materials.push(material);
2493
+ }
2494
+ }
2495
+ if (materials.length === 0) {
2496
+ const material = firstMaterial(renderable);
2497
+ if (material) {
2498
+ materials.push(material);
2499
+ }
2500
+ }
2501
+ return materials;
2502
+ }
2421
2503
  function firstMaterial(root) {
2422
2504
  let found;
2423
2505
  visit(root, (node) => {
@@ -2501,7 +2583,9 @@ function applyDemo3DTransform(object, transformText) {
2501
2583
  return;
2502
2584
  }
2503
2585
  object.position.set(values[0] ?? 0, values[1] ?? 0, -(values[2] ?? 0));
2504
- object.rotation.set(-(values[3] ?? 0), -(values[4] ?? 0), values[5] ?? 0);
2586
+ // Demo3D rotation triples are pitch (X), yaw (Y), and roll (Z). Its
2587
+ // RotationYawPitchRoll matrix corresponds to Three's intrinsic YXZ order.
2588
+ object.rotation.set(-(values[3] ?? 0), -(values[4] ?? 0), values[5] ?? 0, "YXZ");
2505
2589
  }
2506
2590
  function convertTriangleGeometryToThreeCoordinates(geometry) {
2507
2591
  geometry.scale(1, 1, -1);