@shapediver/viewer.data-engine.material-engine 2.0.12 → 2.1.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.
@@ -19,9 +19,11 @@ export declare class MaterialEngine {
19
19
  private getClassAndSpecificId;
20
20
  loadMap(url: string, id?: string): Promise<MapData | null>;
21
21
  loadMapWithProperties(texture: ITexture): Promise<MapData | null>;
22
- loadMaterialV1(data: IMaterialContentDataV1, material: MaterialStandardData): Promise<void>;
23
- loadMaterialV2(data: IMaterialContentDataV2, material: MaterialStandardData): Promise<void>;
24
- loadMaterialV3(data: IMaterialContentDataV3, material: MaterialStandardData): Promise<void>;
25
- loadPresetMaterial(preset: number, material: MaterialStandardData): Promise<void>;
22
+ loadMaterialDefinitionV1(data: IMaterialContentDataV1, presetData?: IMaterialContentDataV3): IMaterialContentDataV3;
23
+ loadMaterialDefinitionV2(data: IMaterialContentDataV2, presetData?: IMaterialContentDataV3): IMaterialContentDataV3;
24
+ loadMaterialDefinitionV3(data: IMaterialContentDataV3, presetData?: IMaterialContentDataV3): IMaterialContentDataV3;
25
+ loadMaterialV3(data: IMaterialContentDataV3): Promise<MaterialStandardData>;
26
+ loadPresetMaterialDefinition(preset: number): IMaterialContentDataV3;
27
+ loadPresetMaterial(preset: number): Promise<MaterialStandardData>;
26
28
  }
27
29
  //# sourceMappingURL=MaterialEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MaterialEngine.d.ts","sourceRoot":"","sources":["../src/MaterialEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,qCAAqC,CAAA;AAGzE,OAAO,EACH,OAAO,EAEP,oBAAoB,EAGvB,MAAM,iCAAiC,CAAA;AAIxC,OAAO,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAA;AACrF,OAAO,EAAwB,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAA6B,QAAQ,EAAE,MAAM,6CAA6C,CAAA;AAE/L,qBACa,cAAc;IAGvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;IACjF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyD;IACrF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;;IAYrE;;;;;SAKK;IACQ,WAAW,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,SAAS,CAAC;YA0CxE,uBAAuB;YAkCvB,wBAAwB;IAkCtC,OAAO,CAAC,qBAAqB;IAkBhB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAe1D,qBAAqB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAmBjE,cAAc,CAAC,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,oBAAoB;IAsC3E,cAAc,CAAC,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,oBAAoB;IAqD3E,cAAc,CAAC,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,oBAAoB;IAwD3E,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB;CAejF"}
1
+ {"version":3,"file":"MaterialEngine.d.ts","sourceRoot":"","sources":["../src/MaterialEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,qCAAqC,CAAA;AAGzE,OAAO,EACH,OAAO,EAEP,oBAAoB,EAGvB,MAAM,iCAAiC,CAAA;AAIxC,OAAO,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAA;AACrF,OAAO,EAAwB,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAA6B,QAAQ,EAAE,MAAM,6CAA6C,CAAA;AAE/L,qBACa,cAAc;IAGvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;IACjF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyD;IACrF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;;IAYrE;;;;;SAKK;IACQ,WAAW,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,SAAS,CAAC;IA6CtF,OAAO,CAAC,uBAAuB;IAuD/B,OAAO,CAAC,wBAAwB;IAqDhC,OAAO,CAAC,qBAAqB;IAkBhB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAe1D,qBAAqB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAmBvE,wBAAwB,CAAC,IAAI,EAAE,sBAAsB,EAAE,UAAU,GAAE,sBAA2B,GAAG,sBAAsB;IAuCvH,wBAAwB,CAAC,IAAI,EAAE,sBAAsB,EAAE,UAAU,GAAE,sBAA2B,GAAG,sBAAsB;IAqDvH,wBAAwB,CAAC,IAAI,EAAE,sBAAsB,EAAE,UAAU,GAAE,sBAA2B,GAAG,sBAAsB;IA8CjH,cAAc,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAqFjF,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB;IAgB9D,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAKjF"}
@@ -49,25 +49,25 @@ let MaterialEngine = class MaterialEngine {
49
49
  const error = new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Invalid content was provided to material engine.');
50
50
  throw this._logger.handleError(viewer_shared_services_1.LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
51
51
  }
52
- const material = new viewer_shared_types_1.MaterialStandardData();
53
- node.data.push(material);
52
+ let material = new viewer_shared_types_1.MaterialStandardData();
54
53
  if (content.data) {
55
54
  const data = content.data;
55
+ let presetData;
56
56
  if (data.materialpreset)
57
- yield this.loadPresetMaterial(data.materialpreset, material);
57
+ presetData = this.loadPresetMaterialDefinition(data.materialpreset);
58
58
  if (data.materialType && data.materialType !== 'standard') {
59
59
  // gem material https://shapediver.atlassian.net/browse/SS-2514
60
60
  }
61
61
  else {
62
62
  if (data.version) {
63
63
  if (data.version === '1.0') {
64
- yield this.loadMaterialV1(data, material);
64
+ material = yield this.loadMaterialV3(this.loadMaterialDefinitionV1(data, presetData));
65
65
  }
66
66
  else if (data.version === '2.0') {
67
- yield this.loadMaterialV2(data, material);
67
+ material = yield this.loadMaterialV3(this.loadMaterialDefinitionV2(data, presetData));
68
68
  }
69
69
  else if (data.version === '3.0') {
70
- yield this.loadMaterialV3(data, material);
70
+ material = yield this.loadMaterialV3(this.loadMaterialDefinitionV3(data, presetData));
71
71
  }
72
72
  else {
73
73
  const error = new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Material data version not supported.');
@@ -80,106 +80,92 @@ let MaterialEngine = class MaterialEngine {
80
80
  const error = new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: No material data was provided to material engine.');
81
81
  throw this._logger.handleError(viewer_shared_services_1.LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
82
82
  }
83
+ node.data.push(material);
83
84
  return node;
84
85
  });
85
86
  }
86
87
  // #endregion Public Methods (1)
87
88
  // #region Private Methods (9)
88
- assignGeneralDefinition(id, generalDefinition, specificDefinition, material) {
89
- return __awaiter(this, void 0, void 0, function* () {
90
- if (generalDefinition.transparencytexture && !specificDefinition.transparencytexture) {
91
- const map = yield this.loadMap(generalDefinition.transparencytexture, id.class);
92
- if (map)
93
- material.alphaMap = map;
94
- }
95
- if (generalDefinition.hasOwnProperty('alphaThreshold') && !specificDefinition.hasOwnProperty('alphaThreshold'))
96
- material.alphaCutoff = generalDefinition.alphaThreshold;
97
- if (generalDefinition.bumptexture && !specificDefinition.bumptexture) {
98
- const map = yield this.loadMap(generalDefinition.bumptexture, id.class);
99
- if (map)
100
- material.bumpMap = map;
101
- }
102
- if (generalDefinition.hasOwnProperty('bumpAmplitude') && !specificDefinition.hasOwnProperty('bumpAmplitude'))
103
- material.bumpScale = generalDefinition.bumpAmplitude;
104
- if (generalDefinition.color && !specificDefinition.color)
105
- material.color = this._converter.toColor(generalDefinition.color);
106
- if (generalDefinition.bitmaptexture && !specificDefinition.bitmaptexture) {
107
- const map = yield this.loadMap(generalDefinition.bitmaptexture, id.class);
108
- if (map)
109
- material.map = map;
110
- }
111
- if (generalDefinition.hasOwnProperty('metalness') && !specificDefinition.hasOwnProperty('metalness'))
112
- material.metalness = generalDefinition.metalness;
113
- if (generalDefinition.metalnesstexture && !specificDefinition.metalnesstexture) {
114
- const map = yield this.loadMap(generalDefinition.metalnesstexture, id.class);
115
- if (map)
116
- material.metalnessMap = map;
117
- }
118
- if (generalDefinition.normaltexture && !specificDefinition.normaltexture) {
119
- const map = yield this.loadMap(generalDefinition.normaltexture, id.class);
120
- if (map)
121
- material.normalMap = map;
122
- }
123
- if (generalDefinition.hasOwnProperty('transparency') && !specificDefinition.hasOwnProperty('transparency'))
124
- material.opacity = 1 - generalDefinition.transparency;
125
- if (generalDefinition.hasOwnProperty('roughness') && !specificDefinition.hasOwnProperty('roughness'))
126
- material.roughness = generalDefinition.roughness;
127
- if (generalDefinition.roughnesstexture && !specificDefinition.roughnesstexture) {
128
- const map = yield this.loadMap(generalDefinition.roughnesstexture, id.class);
129
- if (map)
130
- material.roughnessMap = map;
131
- }
132
- if (generalDefinition.side && !specificDefinition.side)
133
- material.side = generalDefinition.side === 'front' ? viewer_shared_types_1.MATERIAL_SIDE.FRONT : generalDefinition.side === 'back' ? viewer_shared_types_1.MATERIAL_SIDE.BACK : viewer_shared_types_1.MATERIAL_SIDE.DOUBLE;
134
- });
89
+ assignGeneralDefinition(id, generalDefinition, specificDefinition, definition) {
90
+ const promises = [];
91
+ if (generalDefinition.transparencytexture && !specificDefinition.transparencytexture)
92
+ definition.transparencytexture = {
93
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.transparencytexture
94
+ };
95
+ if (generalDefinition.hasOwnProperty('alphaThreshold') && !specificDefinition.hasOwnProperty('alphaThreshold'))
96
+ definition.alphaThreshold = generalDefinition.alphaThreshold;
97
+ if (generalDefinition.bumptexture && !specificDefinition.bumptexture)
98
+ definition.bumptexture = {
99
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.bumptexture
100
+ };
101
+ if (generalDefinition.hasOwnProperty('bumpAmplitude') && !specificDefinition.hasOwnProperty('bumpAmplitude'))
102
+ definition.bumpAmplitude = generalDefinition.bumpAmplitude;
103
+ if (generalDefinition.color && !specificDefinition.color)
104
+ definition.color = generalDefinition.color;
105
+ if (generalDefinition.bitmaptexture && !specificDefinition.bitmaptexture)
106
+ definition.bitmaptexture = {
107
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.bitmaptexture
108
+ };
109
+ if (generalDefinition.hasOwnProperty('metalness') && !specificDefinition.hasOwnProperty('metalness'))
110
+ definition.metalness = generalDefinition.metalness;
111
+ if (generalDefinition.metalnesstexture && !specificDefinition.metalnesstexture)
112
+ definition.metalnesstexture = {
113
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.metalnesstexture
114
+ };
115
+ if (generalDefinition.normaltexture && !specificDefinition.normaltexture)
116
+ definition.normaltexture = {
117
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.normaltexture
118
+ };
119
+ if (generalDefinition.hasOwnProperty('transparency') && !specificDefinition.hasOwnProperty('transparency'))
120
+ definition.transparency = generalDefinition.transparency;
121
+ if (generalDefinition.hasOwnProperty('roughness') && !specificDefinition.hasOwnProperty('roughness'))
122
+ definition.roughness = generalDefinition.roughness;
123
+ if (generalDefinition.roughnesstexture && !specificDefinition.roughnesstexture)
124
+ definition.roughnesstexture = {
125
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.roughnesstexture
126
+ };
127
+ if (generalDefinition.side && !specificDefinition.side)
128
+ definition.side = generalDefinition.side;
135
129
  }
136
- assignSpecificDefinition(id, specificDefinition, material) {
137
- return __awaiter(this, void 0, void 0, function* () {
138
- if (specificDefinition.transparencytexture) {
139
- const map = yield this.loadMap(specificDefinition.transparencytexture, id.class + '/' + id.specific);
140
- if (map)
141
- material.alphaMap = map;
142
- }
143
- if (specificDefinition.hasOwnProperty('alphaThreshold'))
144
- material.alphaCutoff = specificDefinition.alphaThreshold;
145
- if (specificDefinition.bumptexture) {
146
- const map = yield this.loadMap(specificDefinition.bumptexture, id.class + '/' + id.specific);
147
- if (map)
148
- material.bumpMap = map;
149
- }
150
- if (specificDefinition.hasOwnProperty('bumpAmplitude'))
151
- material.bumpScale = specificDefinition.bumpAmplitude;
152
- if (specificDefinition.color)
153
- material.color = this._converter.toColor(specificDefinition.color);
154
- if (specificDefinition.bitmaptexture) {
155
- const map = yield this.loadMap(specificDefinition.bitmaptexture, id.class + '/' + id.specific);
156
- if (map)
157
- material.map = map;
158
- }
159
- if (specificDefinition.hasOwnProperty('metalness'))
160
- material.metalness = specificDefinition.metalness;
161
- if (specificDefinition.metalnesstexture) {
162
- const map = yield this.loadMap(specificDefinition.metalnesstexture, id.class + '/' + id.specific);
163
- if (map)
164
- material.metalnessMap = map;
165
- }
166
- if (specificDefinition.normaltexture) {
167
- const map = yield this.loadMap(specificDefinition.normaltexture, id.class + '/' + id.specific);
168
- if (map)
169
- material.normalMap = map;
170
- }
171
- if (specificDefinition.hasOwnProperty('transparency'))
172
- material.opacity = 1 - specificDefinition.transparency;
173
- if (specificDefinition.hasOwnProperty('roughness'))
174
- material.roughness = specificDefinition.roughness;
175
- if (specificDefinition.roughnesstexture) {
176
- const map = yield this.loadMap(specificDefinition.roughnesstexture, id.class + '/' + id.specific);
177
- if (map)
178
- material.roughnessMap = map;
179
- }
180
- if (specificDefinition.side)
181
- material.side = specificDefinition.side === 'front' ? viewer_shared_types_1.MATERIAL_SIDE.FRONT : specificDefinition.side === 'back' ? viewer_shared_types_1.MATERIAL_SIDE.BACK : viewer_shared_types_1.MATERIAL_SIDE.DOUBLE;
182
- });
130
+ assignSpecificDefinition(id, specificDefinition, definition) {
131
+ if (specificDefinition.transparencytexture)
132
+ definition.transparencytexture = {
133
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.transparencytexture
134
+ };
135
+ if (specificDefinition.hasOwnProperty('alphaThreshold'))
136
+ definition.alphaThreshold = specificDefinition.alphaThreshold;
137
+ if (specificDefinition.bumptexture)
138
+ definition.bumptexture = {
139
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.bumptexture
140
+ };
141
+ if (specificDefinition.hasOwnProperty('bumpAmplitude'))
142
+ definition.bumpAmplitude = specificDefinition.bumpAmplitude;
143
+ if (specificDefinition.color)
144
+ definition.color = specificDefinition.color;
145
+ if (specificDefinition.bitmaptexture)
146
+ definition.bitmaptexture = {
147
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.bitmaptexture
148
+ };
149
+ if (specificDefinition.hasOwnProperty('metalness'))
150
+ definition.metalness = specificDefinition.metalness;
151
+ if (specificDefinition.metalnesstexture)
152
+ definition.metalnesstexture = {
153
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.metalnesstexture
154
+ };
155
+ if (specificDefinition.normaltexture)
156
+ definition.normaltexture = {
157
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.normaltexture
158
+ };
159
+ if (specificDefinition.hasOwnProperty('transparency'))
160
+ definition.transparency = specificDefinition.transparency;
161
+ if (specificDefinition.hasOwnProperty('roughness'))
162
+ definition.roughness = specificDefinition.roughness;
163
+ if (specificDefinition.roughnesstexture)
164
+ definition.roughnesstexture = {
165
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.roughnesstexture
166
+ };
167
+ if (specificDefinition.side)
168
+ definition.side = specificDefinition.side;
183
169
  }
184
170
  getClassAndSpecificId(id) {
185
171
  // for a while, we had documented the presets to be 10, 20, 30 and 40 here, we allow for the few cases where this was used to succeed
@@ -236,90 +222,109 @@ let MaterialEngine = class MaterialEngine {
236
222
  return new viewer_shared_types_1.MapData(image, wrapS, wrapT, viewer_shared_types_1.TEXTURE_FILTERING.LINEAR_MIPMAP_LINEAR, viewer_shared_types_1.TEXTURE_FILTERING.LINEAR, center, this._converter.toColor(color), offset, repeat, texture.rotation || 0);
237
223
  });
238
224
  }
239
- loadMaterialV1(data, material) {
240
- return __awaiter(this, void 0, void 0, function* () {
241
- // ambient is ignored
242
- if (data.color) {
243
- material.color = this._converter.toColor(data.color);
244
- }
245
- else if (data.diffuse) {
246
- material.color = this._converter.toColor(data.diffuse);
247
- }
248
- if (data.emission)
249
- material.emissiveness = this._converter.toColor(data.emission);
250
- // specular is ignored
251
- if (data.shine || data.shine === 0) {
252
- material.metalness = Math.min(1, data.shine);
253
- material.roughness = 1 - (Math.min(1, data.shine));
254
- }
255
- if (data.hasOwnProperty('transparency'))
256
- material.opacity = 1 - data.transparency;
257
- if (data.bitmaptexture) {
258
- const map = yield this.loadMap(data.bitmaptexture);
259
- if (map)
260
- material.map = map;
261
- }
262
- if (data.bumptexture) {
263
- const map = yield this.loadMap(data.bumptexture);
264
- if (map)
265
- material.bumpMap = map;
266
- }
267
- if (data.transparencytexture) {
268
- const map = yield this.loadMap(data.transparencytexture);
269
- if (map)
270
- material.alphaMap = map;
271
- }
272
- });
225
+ loadMaterialDefinitionV1(data, presetData = {}) {
226
+ // ambient is ignored
227
+ if (data.color) {
228
+ presetData.color = data.color;
229
+ }
230
+ else if (data.diffuse) {
231
+ presetData.color = data.diffuse;
232
+ }
233
+ // emission is ignored
234
+ // specular is ignored
235
+ if (data.shine || data.shine === 0) {
236
+ presetData.metalness = Math.min(1, data.shine);
237
+ presetData.roughness = 1 - (Math.min(1, data.shine));
238
+ }
239
+ if (data.hasOwnProperty('transparency'))
240
+ presetData.transparency = data.transparency;
241
+ if (data.bitmaptexture)
242
+ presetData.bitmaptexture = {
243
+ href: data.bitmaptexture
244
+ };
245
+ if (data.bumptexture)
246
+ presetData.bumptexture = {
247
+ href: data.bumptexture
248
+ };
249
+ if (data.transparencytexture)
250
+ presetData.transparencytexture = {
251
+ href: data.transparencytexture
252
+ };
253
+ return presetData;
273
254
  }
274
- loadMaterialV2(data, material) {
275
- return __awaiter(this, void 0, void 0, function* () {
276
- // ambient is ignored
277
- if (data.color)
278
- material.color = this._converter.toColor(data.color);
279
- material.side = data.side === 'front' ? viewer_shared_types_1.MATERIAL_SIDE.FRONT : data.side === 'back' ? viewer_shared_types_1.MATERIAL_SIDE.BACK : viewer_shared_types_1.MATERIAL_SIDE.DOUBLE;
280
- if (data.metalness || data.metalness === 0)
281
- material.metalness = data.metalness;
282
- if (data.roughness || data.roughness === 0)
283
- material.roughness = data.roughness;
284
- if (data.hasOwnProperty('transparency'))
285
- material.opacity = 1 - data.transparency;
286
- if (data.alphaThreshold || data.alphaThreshold === 0)
287
- material.alphaCutoff = data.alphaThreshold;
288
- if (data.bitmaptexture) {
289
- const map = yield this.loadMap(data.bitmaptexture);
290
- if (map)
291
- material.map = map;
292
- }
293
- if (data.metalnesstexture) {
294
- const map = yield this.loadMap(data.metalnesstexture);
295
- if (map)
296
- material.metalnessMap = map;
297
- }
298
- if (data.roughnesstexture) {
299
- const map = yield this.loadMap(data.roughnesstexture);
300
- if (map)
301
- material.roughnessMap = map;
302
- }
303
- if (data.bumptexture) {
304
- const map = yield this.loadMap(data.bumptexture);
305
- if (map)
306
- material.bumpMap = map;
307
- }
308
- if (data.normaltexture) {
309
- const map = yield this.loadMap(data.normaltexture);
310
- if (map)
311
- material.normalMap = map;
312
- }
313
- if (data.transparencytexture) {
314
- const map = yield this.loadMap(data.transparencytexture);
315
- if (map)
316
- material.alphaMap = map;
317
- }
318
- // line material https://shapediver.atlassian.net/browse/SS-2272
319
- });
255
+ loadMaterialDefinitionV2(data, presetData = {}) {
256
+ // ambient is ignored
257
+ if (data.color)
258
+ presetData.color = data.color;
259
+ presetData.side = data.side;
260
+ if (data.metalness || data.metalness === 0)
261
+ presetData.metalness = data.metalness;
262
+ if (data.roughness || data.roughness === 0)
263
+ presetData.roughness = data.roughness;
264
+ if (data.hasOwnProperty('transparency'))
265
+ presetData.transparency = data.transparency;
266
+ if (data.alphaThreshold || data.alphaThreshold === 0)
267
+ presetData.alphaThreshold = data.alphaThreshold;
268
+ if (data.bitmaptexture)
269
+ presetData.bitmaptexture = {
270
+ href: data.bitmaptexture
271
+ };
272
+ if (data.metalnesstexture)
273
+ presetData.metalnesstexture = {
274
+ href: data.metalnesstexture
275
+ };
276
+ if (data.roughnesstexture)
277
+ presetData.roughnesstexture = {
278
+ href: data.roughnesstexture
279
+ };
280
+ if (data.bumptexture)
281
+ presetData.bumptexture = {
282
+ href: data.bumptexture
283
+ };
284
+ if (data.normaltexture)
285
+ presetData.normaltexture = {
286
+ href: data.normaltexture
287
+ };
288
+ if (data.transparencytexture)
289
+ presetData.transparencytexture = {
290
+ href: data.transparencytexture
291
+ };
292
+ return presetData;
293
+ }
294
+ loadMaterialDefinitionV3(data, presetData = {}) {
295
+ // ambient is ignored
296
+ if (data.color)
297
+ presetData.color = data.color;
298
+ presetData.side = data.side;
299
+ if (data.metalness || data.metalness === 0)
300
+ presetData.metalness = data.metalness;
301
+ if (data.roughness || data.roughness === 0)
302
+ presetData.roughness = data.roughness;
303
+ if (data.hasOwnProperty('transparency'))
304
+ presetData.transparency = data.transparency;
305
+ if (data.alphaThreshold || data.alphaThreshold === 0)
306
+ presetData.alphaThreshold = data.alphaThreshold;
307
+ if (data.bumpAmplitude || data.bumpAmplitude === 0)
308
+ presetData.bumpAmplitude = data.bumpAmplitude;
309
+ if (data.bitmaptexture)
310
+ presetData.bitmaptexture = data.bitmaptexture;
311
+ if (data.metalnesstexture)
312
+ presetData.metalnesstexture = data.metalnesstexture;
313
+ if (data.roughnesstexture)
314
+ presetData.roughnesstexture = data.roughnesstexture;
315
+ if (data.bumptexture)
316
+ presetData.bumptexture = data.bumptexture;
317
+ if (data.normaltexture)
318
+ presetData.normaltexture = data.normaltexture;
319
+ if (data.transparencytexture)
320
+ presetData.transparencytexture = data.transparencytexture;
321
+ // line material https://shapediver.atlassian.net/browse/SS-2272
322
+ return presetData;
320
323
  }
321
- loadMaterialV3(data, material) {
324
+ loadMaterialV3(data) {
322
325
  return __awaiter(this, void 0, void 0, function* () {
326
+ const material = new viewer_shared_types_1.MaterialStandardData();
327
+ const promises = [];
323
328
  // ambient is ignored
324
329
  if (data.color)
325
330
  material.color = this._converter.toColor(data.color);
@@ -335,53 +340,72 @@ let MaterialEngine = class MaterialEngine {
335
340
  if (data.bumpAmplitude || data.bumpAmplitude === 0)
336
341
  material.bumpScale = data.bumpAmplitude;
337
342
  if (data.bitmaptexture) {
338
- const map = yield this.loadMapWithProperties(data.bitmaptexture);
339
- if (map)
340
- material.map = map;
343
+ promises.push(this.loadMapWithProperties(data.bitmaptexture).then(map => {
344
+ if (map)
345
+ material.map = map;
346
+ return map;
347
+ }));
341
348
  }
342
349
  if (data.metalnesstexture) {
343
- const map = yield this.loadMapWithProperties(data.metalnesstexture);
344
- if (map)
345
- material.metalnessMap = map;
350
+ promises.push(this.loadMapWithProperties(data.metalnesstexture).then(map => {
351
+ if (map)
352
+ material.metalnessMap = map;
353
+ return map;
354
+ }));
346
355
  }
347
356
  if (data.roughnesstexture) {
348
- const map = yield this.loadMapWithProperties(data.roughnesstexture);
349
- if (map)
350
- material.roughnessMap = map;
357
+ promises.push(this.loadMapWithProperties(data.roughnesstexture).then(map => {
358
+ if (map)
359
+ material.roughnessMap = map;
360
+ return map;
361
+ }));
351
362
  }
352
363
  if (data.bumptexture) {
353
- const map = yield this.loadMapWithProperties(data.bumptexture);
354
- if (map)
355
- material.bumpMap = map;
364
+ promises.push(this.loadMapWithProperties(data.bumptexture).then(map => {
365
+ if (map)
366
+ material.bumpMap = map;
367
+ return map;
368
+ }));
356
369
  }
357
370
  if (data.normaltexture) {
358
- const map = yield this.loadMapWithProperties(data.normaltexture);
359
- if (map)
360
- material.normalMap = map;
371
+ promises.push(this.loadMapWithProperties(data.normaltexture).then(map => {
372
+ if (map)
373
+ material.normalMap = map;
374
+ return map;
375
+ }));
361
376
  }
362
377
  if (data.transparencytexture) {
363
- const map = yield this.loadMapWithProperties(data.transparencytexture);
364
- if (map)
365
- material.alphaMap = map;
378
+ promises.push(this.loadMapWithProperties(data.transparencytexture).then(map => {
379
+ if (map)
380
+ material.alphaMap = map;
381
+ return map;
382
+ }));
366
383
  }
367
384
  // line material https://shapediver.atlassian.net/browse/SS-2272
385
+ yield Promise.all(promises);
386
+ return material;
368
387
  });
369
388
  }
370
- loadPresetMaterial(preset, material) {
389
+ loadPresetMaterialDefinition(preset) {
390
+ const definition = {};
391
+ const idStrings = this.getClassAndSpecificId(preset);
392
+ if (materialDatabase_1.materialDatabase[idStrings.class] && materialDatabase_1.materialDatabase[idStrings.class][idStrings.specific]) {
393
+ this.assignSpecificDefinition(idStrings, materialDatabase_1.materialDatabase[idStrings.class][idStrings.specific], definition);
394
+ this.assignGeneralDefinition(idStrings, materialDatabase_1.materialDatabase[idStrings.class].properties, materialDatabase_1.materialDatabase[idStrings.class][idStrings.specific], definition);
395
+ }
396
+ else if (materialDatabase_1.materialDatabase[idStrings.class] && materialDatabase_1.materialDatabase[idStrings.class]['00']) {
397
+ this.assignSpecificDefinition({ class: idStrings.class, specific: '00' }, materialDatabase_1.materialDatabase[idStrings.class]['00'], definition);
398
+ this.assignGeneralDefinition({ class: idStrings.class, specific: '00' }, materialDatabase_1.materialDatabase[idStrings.class].properties, materialDatabase_1.materialDatabase[idStrings.class]['00'], definition);
399
+ }
400
+ else {
401
+ this.assignSpecificDefinition({ class: '00', specific: '00' }, materialDatabase_1.materialDatabase['00']['00'], definition);
402
+ this.assignGeneralDefinition({ class: '00', specific: '00' }, materialDatabase_1.materialDatabase['00'].properties, materialDatabase_1.materialDatabase['00']['00'], definition);
403
+ }
404
+ return definition;
405
+ }
406
+ loadPresetMaterial(preset) {
371
407
  return __awaiter(this, void 0, void 0, function* () {
372
- const idStrings = this.getClassAndSpecificId(preset);
373
- if (materialDatabase_1.materialDatabase[idStrings.class] && materialDatabase_1.materialDatabase[idStrings.class][idStrings.specific]) {
374
- yield this.assignSpecificDefinition(idStrings, materialDatabase_1.materialDatabase[idStrings.class][idStrings.specific], material);
375
- yield this.assignGeneralDefinition(idStrings, materialDatabase_1.materialDatabase[idStrings.class].properties, materialDatabase_1.materialDatabase[idStrings.class][idStrings.specific], material);
376
- }
377
- else if (materialDatabase_1.materialDatabase[idStrings.class] && materialDatabase_1.materialDatabase[idStrings.class]['00']) {
378
- yield this.assignSpecificDefinition({ class: idStrings.class, specific: '00' }, materialDatabase_1.materialDatabase[idStrings.class]['00'], material);
379
- yield this.assignGeneralDefinition({ class: idStrings.class, specific: '00' }, materialDatabase_1.materialDatabase[idStrings.class].properties, materialDatabase_1.materialDatabase[idStrings.class]['00'], material);
380
- }
381
- else {
382
- yield this.assignSpecificDefinition({ class: '00', specific: '00' }, materialDatabase_1.materialDatabase['00']['00'], material);
383
- yield this.assignGeneralDefinition({ class: '00', specific: '00' }, materialDatabase_1.materialDatabase['00'].properties, materialDatabase_1.materialDatabase['00']['00'], material);
384
- }
408
+ return this.loadMaterialV3(this.loadPresetMaterialDefinition(preset));
385
409
  });
386
410
  }
387
411
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MaterialEngine.js","sourceRoot":"","sources":["../src/MaterialEngine.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,iFAAyE;AACzE,uCAA+C;AAC/C,+EAAmM;AACnM,yEAMwC;AACxC,yCAA4C;AAE5C,yDAAqD;AAKrD,IAAa,cAAc,GAA3B,MAAa,cAAc;IAOvB,4BAA4B;IAE5B,2BAA2B;IAE3B;QAVA,yBAAyB;QAER,eAAU,GAAyB,oBAAS,CAAC,OAAO,CAAC,kCAAS,CAAC,CAAC;QAChE,gBAAW,GAA2B,oBAAS,CAAC,OAAO,CAAC,mCAAU,CAAC,CAAC;QACpE,YAAO,GAAmB,oBAAS,CAAC,OAAO,CAAC,+BAAM,CAAC,CAAC;IAMrD,CAAC;IAEjB,8BAA8B;IAE9B,6BAA6B;IAE7B;;;;;SAKK;IACQ,WAAW,CAAC,OAAwC;;YAC7D,MAAM,IAAI,GAAG,IAAI,kCAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE;gBACV,MAAM,KAAK,GAAG,IAAI,4DAAmC,CAAC,8EAA8E,CAAC,CAAC;gBACtI,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,sCAAa,CAAC,eAAe,EAAE,4BAA4B,EAAE,KAAK,CAAC,CAAC;aACtG;YAED,MAAM,QAAQ,GAAG,IAAI,0CAAoB,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEzB,IAAI,OAAO,CAAC,IAAI,EAAE;gBACd,MAAM,IAAI,GAAyB,OAAO,CAAC,IAAI,CAAC;gBAChD,IAAI,IAAI,CAAC,cAAc;oBACnB,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBAEjE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,EAAE;oBACvD,+DAA+D;iBAClE;qBAAM;oBACH,IAAI,IAAI,CAAC,OAAO,EAAE;wBACd,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;4BACxB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;yBAC7C;6BAAM,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;4BAC/B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;yBAC7C;6BAAM,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;4BAC/B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;yBAC7C;6BAAM;4BACH,MAAM,KAAK,GAAG,IAAI,4DAAmC,CAAC,kEAAkE,CAAC,CAAC;4BAC1H,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,sCAAa,CAAC,eAAe,EAAE,4BAA4B,EAAE,KAAK,CAAC,CAAC;yBACtG;qBACJ;iBACJ;aACJ;iBAAM;gBACH,MAAM,KAAK,GAAG,IAAI,4DAAmC,CAAC,+EAA+E,CAAC,CAAC;gBACvI,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,sCAAa,CAAC,eAAe,EAAE,4BAA4B,EAAE,KAAK,CAAC,CAAC;aACtG;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;KAAA;IAED,gCAAgC;IAEhC,8BAA8B;IAEhB,uBAAuB,CAAC,EAAuC,EAAE,iBAA4C,EAAE,kBAA6C,EAAE,QAA8B;;YACtM,IAAI,iBAAiB,CAAC,mBAAmB,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAAE;gBAClF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAChF,IAAI,GAAG;oBAAE,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;aACpC;YACD,IAAI,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,gBAAgB,CAAC;gBAAE,QAAQ,CAAC,WAAW,GAAG,iBAAiB,CAAC,cAAe,CAAC;YACzK,IAAI,iBAAiB,CAAC,WAAW,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;gBAClE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBACxE,IAAI,GAAG;oBAAE,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC;aACnC;YACD,IAAI,iBAAiB,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,eAAe,CAAC;gBAAE,QAAQ,CAAC,SAAS,GAAG,iBAAiB,CAAC,aAAc,CAAC;YACpK,IAAI,iBAAiB,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK;gBAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC5H,IAAI,iBAAiB,CAAC,aAAa,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;gBACtE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC1E,IAAI,GAAG;oBAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;aAC/B;YACD,IAAI,iBAAiB,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,WAAW,CAAC;gBAAE,QAAQ,CAAC,SAAS,GAAG,iBAAiB,CAAC,SAAU,CAAC;YACxJ,IAAI,iBAAiB,CAAC,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE;gBAC5E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC7E,IAAI,GAAG;oBAAE,QAAQ,CAAC,YAAY,GAAG,GAAG,CAAC;aACxC;YACD,IAAI,iBAAiB,CAAC,aAAa,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;gBACtE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC1E,IAAI,GAAG;oBAAE,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;aACrC;YACD,IAAI,iBAAiB,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC;gBAAE,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,iBAAiB,CAAC,YAAa,CAAC;YACnK,IAAI,iBAAiB,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,WAAW,CAAC;gBAAE,QAAQ,CAAC,SAAS,GAAG,iBAAiB,CAAC,SAAU,CAAC;YACxJ,IAAI,iBAAiB,CAAC,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE;gBAC5E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC7E,IAAI,GAAG;oBAAE,QAAQ,CAAC,YAAY,GAAG,GAAG,CAAC;aACxC;YACD,IAAI,iBAAiB,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI;gBAAE,QAAQ,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,mCAAa,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,mCAAa,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAa,CAAC,MAAM,CAAC;QACrN,CAAC;KAAA;IAEa,wBAAwB,CAAC,EAAuC,EAAE,kBAA6C,EAAE,QAA8B;;YACzJ,IAAI,kBAAkB,CAAC,mBAAmB,EAAE;gBACxC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;gBACrG,IAAI,GAAG;oBAAE,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;aACpC;YACD,IAAI,kBAAkB,CAAC,cAAc,CAAC,gBAAgB,CAAC;gBAAE,QAAQ,CAAC,WAAW,GAAG,kBAAkB,CAAC,cAAe,CAAC;YACnH,IAAI,kBAAkB,CAAC,WAAW,EAAE;gBAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAC7F,IAAI,GAAG;oBAAE,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC;aACnC;YACD,IAAI,kBAAkB,CAAC,cAAc,CAAC,eAAe,CAAC;gBAAE,QAAQ,CAAC,SAAS,GAAG,kBAAkB,CAAC,aAAc,CAAC;YAC/G,IAAI,kBAAkB,CAAC,KAAK;gBAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACjG,IAAI,kBAAkB,CAAC,aAAa,EAAE;gBAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAC/F,IAAI,GAAG;oBAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;aAC/B;YACD,IAAI,kBAAkB,CAAC,cAAc,CAAC,WAAW,CAAC;gBAAE,QAAQ,CAAC,SAAS,GAAG,kBAAkB,CAAC,SAAU,CAAC;YACvG,IAAI,kBAAkB,CAAC,gBAAgB,EAAE;gBACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAClG,IAAI,GAAG;oBAAE,QAAQ,CAAC,YAAY,GAAG,GAAG,CAAC;aACxC;YACD,IAAI,kBAAkB,CAAC,aAAa,EAAE;gBAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAC/F,IAAI,GAAG;oBAAE,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;aACrC;YACD,IAAI,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC;gBAAE,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,kBAAkB,CAAC,YAAa,CAAC;YAC/G,IAAI,kBAAkB,CAAC,cAAc,CAAC,WAAW,CAAC;gBAAE,QAAQ,CAAC,SAAS,GAAG,kBAAkB,CAAC,SAAU,CAAC;YACvG,IAAI,kBAAkB,CAAC,gBAAgB,EAAE;gBACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAClG,IAAI,GAAG;oBAAE,QAAQ,CAAC,YAAY,GAAG,GAAG,CAAC;aACxC;YACD,IAAI,kBAAkB,CAAC,IAAI;gBAAE,QAAQ,CAAC,IAAI,GAAG,kBAAkB,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,mCAAa,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,mCAAa,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAa,CAAC,MAAM,CAAC;QAC5L,CAAC;KAAA;IAEO,qBAAqB,CAAC,EAAU;QACpC,qIAAqI;QACrI,IAAI,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;YAAE,EAAE,IAAI,EAAE,CAAC;QAEvC,gDAAgD;QAChD,IAAI,EAAE,GAAG,EAAE;YAAE,EAAE,IAAI,GAAG,CAAC;QAEvB,MAAM,IAAI,GAAG,CAAC,EAAU,EAAU,EAAE;YAChC,IAAI,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1B,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;YACjC,QAAQ,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;SACpD,CAAC;IACN,CAAC;IAEY,OAAO,CAAC,GAAW,EAAE,EAAW;;YACzC,IAAI,KAAuB,CAAC;YAC5B,IAAI;gBACA,IAAI,CAAC,EAAE,EAAE;oBACL,KAAK,IAAqB,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA,CAAC;iBAC5G;qBAAM;oBACH,KAAK,IAAqB,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,kDAAkD,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA,CAAC;iBAC5K;aACJ;YAAC,OAAO,CAAC,EAAE;gBACR,IAAI,CAAC,YAAY,8CAAqB,IAAI,CAAC,YAAY,+CAAsB;oBAAE,MAAM,CAAC,CAAC;gBACvF,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,sCAAa,CAAC,eAAe,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC;aAC9F;YACD,OAAO,IAAI,6BAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;KAAA;IAEY,qBAAqB,CAAC,OAAiB;;YAChD,IAAI,KAAuB,CAAC;YAC5B,IAAI;gBACA,KAAK,IAAqB,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,IAAK,CAAC,CAAC,CAAA,CAAC;aACtH;YAAC,OAAO,CAAC,EAAE;gBACR,IAAI,CAAC,YAAY,8CAAqB,IAAI,CAAC,YAAY,+CAAsB;oBAAE,MAAM,CAAC,CAAC;gBACvF,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,sCAAa,CAAC,eAAe,EAAE,sCAAsC,EAAE,CAAC,CAAC,CAAC;aAC5G;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,sCAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,sCAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,sCAAgB,CAAC,MAAM,CAAC;YACtJ,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,sCAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,sCAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,sCAAgB,CAAC,MAAM,CAAC;YACtJ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9G,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5K,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9G,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9G,OAAO,IAAI,6BAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAiB,CAAC,oBAAoB,EAAE,uCAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;QAC7L,CAAC;KAAA;IAEY,cAAc,CAAC,IAA4B,EAAE,QAA8B;;YACpF,qBAAqB;YAErB,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACxD;iBAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBACrB,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC1D;YAED,IAAI,IAAI,CAAC,QAAQ;gBACb,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEnE,sBAAsB;YAEtB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;gBAChC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7C,QAAQ,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACtD;YAED,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;gBACnC,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,YAAa,CAAC;YAE9C,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACnD,IAAI,GAAG;oBAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;aAC/B;YAED,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACjD,IAAI,GAAG;oBAAE,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC;aACnC;YAED,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC1B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBACzD,IAAI,GAAG;oBAAE,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;aACpC;QACL,CAAC;KAAA;IAEY,cAAc,CAAC,IAA4B,EAAE,QAA8B;;YACpF,qBAAqB;YAErB,IAAI,IAAI,CAAC,KAAK;gBACV,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEzD,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,mCAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,mCAAa,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAa,CAAC,MAAM,CAAC;YAE/H,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC;gBACtC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAExC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC;gBACtC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAExC,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;gBACnC,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,YAAa,CAAC;YAE9C,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC;gBAChD,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;YAE/C,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACnD,IAAI,GAAG;oBAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;aAC/B;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACtD,IAAI,GAAG;oBAAE,QAAQ,CAAC,YAAY,GAAG,GAAG,CAAC;aACxC;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACtD,IAAI,GAAG;oBAAE,QAAQ,CAAC,YAAY,GAAG,GAAG,CAAC;aACxC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACjD,IAAI,GAAG;oBAAE,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC;aACnC;YAED,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACnD,IAAI,GAAG;oBAAE,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;aACrC;YAED,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC1B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBACzD,IAAI,GAAG;oBAAE,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;aACpC;YAED,gEAAgE;QACpE,CAAC;KAAA;IAEY,cAAc,CAAC,IAA4B,EAAE,QAA8B;;YACpF,qBAAqB;YAErB,IAAI,IAAI,CAAC,KAAK;gBACV,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEzD,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,mCAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,mCAAa,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAa,CAAC,MAAM,CAAC;YAE/H,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC;gBACtC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAExC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC;gBACtC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAExC,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;gBACnC,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,YAAa,CAAC;YAE9C,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC;gBAChD,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;YAE/C,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC;gBAC9C,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;YAE5C,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACjE,IAAI,GAAG;oBAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;aAC/B;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACpE,IAAI,GAAG;oBAAE,QAAQ,CAAC,YAAY,GAAG,GAAG,CAAC;aACxC;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACpE,IAAI,GAAG;oBAAE,QAAQ,CAAC,YAAY,GAAG,GAAG,CAAC;aACxC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC/D,IAAI,GAAG;oBAAE,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC;aACnC;YAED,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACjE,IAAI,GAAG;oBAAE,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;aACrC;YAED,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC1B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBACvE,IAAI,GAAG;oBAAE,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;aACpC;YAED,gEAAgE;QACpE,CAAC;KAAA;IAEY,kBAAkB,CAAC,MAAc,EAAE,QAA8B;;YAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,mCAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,mCAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;gBAC5F,MAAM,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,mCAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAChH,MAAM,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,mCAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,mCAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;aAChK;iBAAM,IAAI,mCAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,mCAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE;gBACrF,MAAM,IAAI,CAAC,wBAAwB,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,mCAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACnI,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,mCAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,mCAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;aACnL;iBAAM;gBACH,MAAM,IAAI,CAAC,wBAAwB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,mCAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC7G,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,mCAAgB,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,mCAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;aAClJ;QACL,CAAC;KAAA;CAGJ,CAAA;AA3VY,cAAc;IAD1B,IAAA,oBAAS,GAAE;;GACC,cAAc,CA2V1B;AA3VY,wCAAc"}
1
+ {"version":3,"file":"MaterialEngine.js","sourceRoot":"","sources":["../src/MaterialEngine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapediver/viewer.data-engine.material-engine",
3
- "version": "2.0.12",
3
+ "version": "2.1.2",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "Michael Oppitz <michael@shapediver.com>",
@@ -40,13 +40,13 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@shapediver/sdk.geometry-api-sdk-v2": "^1.0.26",
43
- "@shapediver/viewer.data-engine.shared-types": "2.0.12",
44
- "@shapediver/viewer.shared.node-tree": "2.0.12",
45
- "@shapediver/viewer.shared.services": "2.0.12",
46
- "@shapediver/viewer.shared.types": "2.0.12",
43
+ "@shapediver/viewer.data-engine.shared-types": "2.1.2",
44
+ "@shapediver/viewer.shared.node-tree": "2.1.2",
45
+ "@shapediver/viewer.shared.services": "2.1.2",
46
+ "@shapediver/viewer.shared.types": "2.1.2",
47
47
  "axios": "^0.21.1",
48
48
  "gl-matrix": "3.3.0",
49
49
  "tsyringe": "^4.5.0"
50
50
  },
51
- "gitHead": "75172f37f302e63a35fcc7b6e2bd920eb86675aa"
51
+ "gitHead": "fb0624317d043edaa75b7341beeb674b1c0cb43f"
52
52
  }
@@ -45,24 +45,25 @@ export class MaterialEngine {
45
45
  throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
46
46
  }
47
47
 
48
- const material = new MaterialStandardData();
49
- node.data.push(material);
48
+ let material = new MaterialStandardData();
50
49
 
51
50
  if (content.data) {
51
+
52
52
  const data: IMaterialContentData = content.data;
53
+ let presetData: IMaterialContentDataV3 | undefined;
53
54
  if (data.materialpreset)
54
- await this.loadPresetMaterial(data.materialpreset, material);
55
+ presetData = this.loadPresetMaterialDefinition(data.materialpreset);
55
56
 
56
57
  if (data.materialType && data.materialType !== 'standard') {
57
58
  // gem material https://shapediver.atlassian.net/browse/SS-2514
58
59
  } else {
59
60
  if (data.version) {
60
61
  if (data.version === '1.0') {
61
- await this.loadMaterialV1(data, material);
62
+ material = await this.loadMaterialV3(this.loadMaterialDefinitionV1(data, presetData));
62
63
  } else if (data.version === '2.0') {
63
- await this.loadMaterialV2(data, material);
64
+ material = await this.loadMaterialV3(this.loadMaterialDefinitionV2(data, presetData));
64
65
  } else if (data.version === '3.0') {
65
- await this.loadMaterialV3(data, material);
66
+ material = await this.loadMaterialV3(this.loadMaterialDefinitionV3(data, presetData));
66
67
  } else {
67
68
  const error = new ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Material data version not supported.');
68
69
  throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
@@ -73,6 +74,8 @@ export class MaterialEngine {
73
74
  const error = new ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: No material data was provided to material engine.');
74
75
  throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
75
76
  }
77
+
78
+ node.data.push(material);
76
79
  return node;
77
80
  }
78
81
 
@@ -80,72 +83,112 @@ export class MaterialEngine {
80
83
 
81
84
  // #region Private Methods (9)
82
85
 
83
- private async assignGeneralDefinition(id: { class: string, specific: string }, generalDefinition: IPresetMaterialDefinition, specificDefinition: IPresetMaterialDefinition, material: MaterialStandardData) {
84
- if (generalDefinition.transparencytexture && !specificDefinition.transparencytexture) {
85
- const map = await this.loadMap(generalDefinition.transparencytexture, id.class);
86
- if (map) material.alphaMap = map;
87
- }
88
- if (generalDefinition.hasOwnProperty('alphaThreshold') && !specificDefinition.hasOwnProperty('alphaThreshold')) material.alphaCutoff = generalDefinition.alphaThreshold!;
89
- if (generalDefinition.bumptexture && !specificDefinition.bumptexture) {
90
- const map = await this.loadMap(generalDefinition.bumptexture, id.class);
91
- if (map) material.bumpMap = map;
92
- }
93
- if (generalDefinition.hasOwnProperty('bumpAmplitude') && !specificDefinition.hasOwnProperty('bumpAmplitude')) material.bumpScale = generalDefinition.bumpAmplitude!;
94
- if (generalDefinition.color && !specificDefinition.color) material.color = this._converter.toColor(generalDefinition.color);
95
- if (generalDefinition.bitmaptexture && !specificDefinition.bitmaptexture) {
96
- const map = await this.loadMap(generalDefinition.bitmaptexture, id.class);
97
- if (map) material.map = map;
98
- }
99
- if (generalDefinition.hasOwnProperty('metalness') && !specificDefinition.hasOwnProperty('metalness')) material.metalness = generalDefinition.metalness!;
100
- if (generalDefinition.metalnesstexture && !specificDefinition.metalnesstexture) {
101
- const map = await this.loadMap(generalDefinition.metalnesstexture, id.class);
102
- if (map) material.metalnessMap = map;
103
- }
104
- if (generalDefinition.normaltexture && !specificDefinition.normaltexture) {
105
- const map = await this.loadMap(generalDefinition.normaltexture, id.class);
106
- if (map) material.normalMap = map;
107
- }
108
- if (generalDefinition.hasOwnProperty('transparency') && !specificDefinition.hasOwnProperty('transparency')) material.opacity = 1 - generalDefinition.transparency!;
109
- if (generalDefinition.hasOwnProperty('roughness') && !specificDefinition.hasOwnProperty('roughness')) material.roughness = generalDefinition.roughness!;
110
- if (generalDefinition.roughnesstexture && !specificDefinition.roughnesstexture) {
111
- const map = await this.loadMap(generalDefinition.roughnesstexture, id.class);
112
- if (map) material.roughnessMap = map;
113
- }
114
- if (generalDefinition.side && !specificDefinition.side) material.side = generalDefinition.side === 'front' ? MATERIAL_SIDE.FRONT : generalDefinition.side === 'back' ? MATERIAL_SIDE.BACK : MATERIAL_SIDE.DOUBLE;
86
+ private assignGeneralDefinition(id: { class: string, specific: string }, generalDefinition: IPresetMaterialDefinition, specificDefinition: IPresetMaterialDefinition, definition: IMaterialContentDataV3) {
87
+ const promises: Promise<MapData | null>[] = [];
88
+
89
+ if (generalDefinition.transparencytexture && !specificDefinition.transparencytexture)
90
+ definition.transparencytexture = {
91
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.transparencytexture
92
+ }
93
+
94
+ if (generalDefinition.hasOwnProperty('alphaThreshold') && !specificDefinition.hasOwnProperty('alphaThreshold'))
95
+ definition.alphaThreshold = generalDefinition.alphaThreshold;
96
+
97
+ if (generalDefinition.bumptexture && !specificDefinition.bumptexture)
98
+ definition.bumptexture = {
99
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.bumptexture
100
+ }
101
+
102
+ if (generalDefinition.hasOwnProperty('bumpAmplitude') && !specificDefinition.hasOwnProperty('bumpAmplitude'))
103
+ definition.bumpAmplitude = generalDefinition.bumpAmplitude!;
104
+
105
+ if (generalDefinition.color && !specificDefinition.color)
106
+ definition.color = generalDefinition.color;
107
+
108
+ if (generalDefinition.bitmaptexture && !specificDefinition.bitmaptexture)
109
+ definition.bitmaptexture = {
110
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.bitmaptexture
111
+ }
112
+
113
+ if (generalDefinition.hasOwnProperty('metalness') && !specificDefinition.hasOwnProperty('metalness'))
114
+ definition.metalness = generalDefinition.metalness!;
115
+
116
+ if (generalDefinition.metalnesstexture && !specificDefinition.metalnesstexture)
117
+ definition.metalnesstexture = {
118
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.metalnesstexture
119
+ }
120
+
121
+ if (generalDefinition.normaltexture && !specificDefinition.normaltexture)
122
+ definition.normaltexture = {
123
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.normaltexture
124
+ }
125
+
126
+ if (generalDefinition.hasOwnProperty('transparency') && !specificDefinition.hasOwnProperty('transparency'))
127
+ definition.transparency = generalDefinition.transparency;
128
+
129
+ if (generalDefinition.hasOwnProperty('roughness') && !specificDefinition.hasOwnProperty('roughness'))
130
+ definition.roughness = generalDefinition.roughness!;
131
+
132
+ if (generalDefinition.roughnesstexture && !specificDefinition.roughnesstexture)
133
+ definition.roughnesstexture = {
134
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.roughnesstexture
135
+ }
136
+
137
+ if (generalDefinition.side && !specificDefinition.side)
138
+ definition.side = generalDefinition.side;
115
139
  }
116
140
 
117
- private async assignSpecificDefinition(id: { class: string, specific: string }, specificDefinition: IPresetMaterialDefinition, material: MaterialStandardData) {
118
- if (specificDefinition.transparencytexture) {
119
- const map = await this.loadMap(specificDefinition.transparencytexture, id.class + '/' + id.specific);
120
- if (map) material.alphaMap = map;
121
- }
122
- if (specificDefinition.hasOwnProperty('alphaThreshold')) material.alphaCutoff = specificDefinition.alphaThreshold!;
123
- if (specificDefinition.bumptexture) {
124
- const map = await this.loadMap(specificDefinition.bumptexture, id.class + '/' + id.specific);
125
- if (map) material.bumpMap = map;
126
- }
127
- if (specificDefinition.hasOwnProperty('bumpAmplitude')) material.bumpScale = specificDefinition.bumpAmplitude!;
128
- if (specificDefinition.color) material.color = this._converter.toColor(specificDefinition.color);
129
- if (specificDefinition.bitmaptexture) {
130
- const map = await this.loadMap(specificDefinition.bitmaptexture, id.class + '/' + id.specific);
131
- if (map) material.map = map;
132
- }
133
- if (specificDefinition.hasOwnProperty('metalness')) material.metalness = specificDefinition.metalness!;
134
- if (specificDefinition.metalnesstexture) {
135
- const map = await this.loadMap(specificDefinition.metalnesstexture, id.class + '/' + id.specific);
136
- if (map) material.metalnessMap = map;
137
- }
138
- if (specificDefinition.normaltexture) {
139
- const map = await this.loadMap(specificDefinition.normaltexture, id.class + '/' + id.specific);
140
- if (map) material.normalMap = map;
141
- }
142
- if (specificDefinition.hasOwnProperty('transparency')) material.opacity = 1 - specificDefinition.transparency!;
143
- if (specificDefinition.hasOwnProperty('roughness')) material.roughness = specificDefinition.roughness!;
144
- if (specificDefinition.roughnesstexture) {
145
- const map = await this.loadMap(specificDefinition.roughnesstexture, id.class + '/' + id.specific);
146
- if (map) material.roughnessMap = map;
147
- }
148
- if (specificDefinition.side) material.side = specificDefinition.side === 'front' ? MATERIAL_SIDE.FRONT : specificDefinition.side === 'back' ? MATERIAL_SIDE.BACK : MATERIAL_SIDE.DOUBLE;
141
+ private assignSpecificDefinition(id: { class: string, specific: string }, specificDefinition: IPresetMaterialDefinition, definition: IMaterialContentDataV3) {
142
+ if (specificDefinition.transparencytexture)
143
+ definition.transparencytexture = {
144
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.transparencytexture
145
+ }
146
+
147
+ if (specificDefinition.hasOwnProperty('alphaThreshold'))
148
+ definition.alphaThreshold = specificDefinition.alphaThreshold!;
149
+
150
+ if (specificDefinition.bumptexture)
151
+ definition.bumptexture = {
152
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.bumptexture
153
+ }
154
+
155
+ if (specificDefinition.hasOwnProperty('bumpAmplitude'))
156
+ definition.bumpAmplitude = specificDefinition.bumpAmplitude!;
157
+
158
+ if (specificDefinition.color)
159
+ definition.color = specificDefinition.color;
160
+
161
+ if (specificDefinition.bitmaptexture)
162
+ definition.bitmaptexture = {
163
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.bitmaptexture
164
+ }
165
+
166
+ if (specificDefinition.hasOwnProperty('metalness'))
167
+ definition.metalness = specificDefinition.metalness!;
168
+
169
+ if (specificDefinition.metalnesstexture)
170
+ definition.metalnesstexture = {
171
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.metalnesstexture
172
+ }
173
+
174
+ if (specificDefinition.normaltexture)
175
+ definition.normaltexture = {
176
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.normaltexture
177
+ }
178
+
179
+ if (specificDefinition.hasOwnProperty('transparency'))
180
+ definition.transparency = specificDefinition.transparency!;
181
+
182
+ if (specificDefinition.hasOwnProperty('roughness'))
183
+ definition.roughness = specificDefinition.roughness!;
184
+
185
+ if (specificDefinition.roughnesstexture)
186
+ definition.roughnesstexture = {
187
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.roughnesstexture
188
+ }
189
+
190
+ if (specificDefinition.side)
191
+ definition.side = specificDefinition.side;
149
192
  }
150
193
 
151
194
  private getClassAndSpecificId(id: number): { class: string, specific: string } {
@@ -199,99 +242,148 @@ export class MaterialEngine {
199
242
 
200
243
  return new MapData(image, wrapS, wrapT, TEXTURE_FILTERING.LINEAR_MIPMAP_LINEAR, TEXTURE_FILTERING.LINEAR, center, this._converter.toColor(color), offset, repeat, texture.rotation || 0);
201
244
  }
202
-
203
- public async loadMaterialV1(data: IMaterialContentDataV1, material: MaterialStandardData) {
245
+
246
+ public loadMaterialDefinitionV1(data: IMaterialContentDataV1, presetData: IMaterialContentDataV3 = {}): IMaterialContentDataV3 {
204
247
  // ambient is ignored
205
248
 
206
249
  if (data.color) {
207
- material.color = this._converter.toColor(data.color);
250
+ presetData.color = data.color;
208
251
  } else if (data.diffuse) {
209
- material.color = this._converter.toColor(data.diffuse);
252
+ presetData.color = data.diffuse;
210
253
  }
211
254
 
212
- if (data.emission)
213
- material.emissiveness = this._converter.toColor(data.emission);
255
+ // emission is ignored
214
256
 
215
257
  // specular is ignored
216
258
 
217
259
  if (data.shine || data.shine === 0) {
218
- material.metalness = Math.min(1, data.shine);
219
- material.roughness = 1 - (Math.min(1, data.shine));
260
+ presetData.metalness = Math.min(1, data.shine);
261
+ presetData.roughness = 1 - (Math.min(1, data.shine));
220
262
  }
221
263
 
222
264
  if (data.hasOwnProperty('transparency'))
223
- material.opacity = 1 - data.transparency!;
265
+ presetData.transparency = data.transparency!;
224
266
 
225
- if (data.bitmaptexture) {
226
- const map = await this.loadMap(data.bitmaptexture);
227
- if (map) material.map = map;
228
- }
267
+ if (data.bitmaptexture)
268
+ presetData.bitmaptexture = {
269
+ href: data.bitmaptexture
270
+ }
229
271
 
230
- if (data.bumptexture) {
231
- const map = await this.loadMap(data.bumptexture);
232
- if (map) material.bumpMap = map;
233
- }
272
+ if (data.bumptexture)
273
+ presetData.bumptexture = {
274
+ href: data.bumptexture
275
+ }
234
276
 
235
- if (data.transparencytexture) {
236
- const map = await this.loadMap(data.transparencytexture);
237
- if (map) material.alphaMap = map;
238
- }
277
+ if (data.transparencytexture)
278
+ presetData.transparencytexture = {
279
+ href: data.transparencytexture
280
+ }
281
+
282
+ return presetData;
283
+ }
284
+
285
+ public loadMaterialDefinitionV2(data: IMaterialContentDataV2, presetData: IMaterialContentDataV3 = {}): IMaterialContentDataV3 {
286
+ // ambient is ignored
287
+
288
+ if (data.color)
289
+ presetData.color = data.color;
290
+
291
+ presetData.side = data.side;
292
+
293
+ if (data.metalness || data.metalness === 0)
294
+ presetData.metalness = data.metalness;
295
+
296
+ if (data.roughness || data.roughness === 0)
297
+ presetData.roughness = data.roughness;
298
+
299
+ if (data.hasOwnProperty('transparency'))
300
+ presetData.transparency = data.transparency!;
301
+
302
+ if (data.alphaThreshold || data.alphaThreshold === 0)
303
+ presetData.alphaThreshold = data.alphaThreshold;
304
+
305
+ if (data.bitmaptexture)
306
+ presetData.bitmaptexture = {
307
+ href: data.bitmaptexture
308
+ }
309
+
310
+ if (data.metalnesstexture)
311
+ presetData.metalnesstexture = {
312
+ href: data.metalnesstexture
313
+ }
314
+
315
+ if (data.roughnesstexture)
316
+ presetData.roughnesstexture = {
317
+ href: data.roughnesstexture
318
+ }
319
+
320
+ if (data.bumptexture)
321
+ presetData.bumptexture = {
322
+ href: data.bumptexture
323
+ }
324
+
325
+ if (data.normaltexture)
326
+ presetData.normaltexture = {
327
+ href: data.normaltexture
328
+ }
329
+
330
+ if (data.transparencytexture)
331
+ presetData.transparencytexture = {
332
+ href: data.transparencytexture
333
+ }
334
+
335
+ return presetData;
239
336
  }
240
337
 
241
- public async loadMaterialV2(data: IMaterialContentDataV2, material: MaterialStandardData) {
338
+ public loadMaterialDefinitionV3(data: IMaterialContentDataV3, presetData: IMaterialContentDataV3 = {}): IMaterialContentDataV3 {
242
339
  // ambient is ignored
243
340
 
244
341
  if (data.color)
245
- material.color = this._converter.toColor(data.color);
342
+ presetData.color = data.color;
246
343
 
247
- material.side = data.side === 'front' ? MATERIAL_SIDE.FRONT : data.side === 'back' ? MATERIAL_SIDE.BACK : MATERIAL_SIDE.DOUBLE;
344
+ presetData.side = data.side;
248
345
 
249
346
  if (data.metalness || data.metalness === 0)
250
- material.metalness = data.metalness;
347
+ presetData.metalness = data.metalness;
251
348
 
252
349
  if (data.roughness || data.roughness === 0)
253
- material.roughness = data.roughness;
350
+ presetData.roughness = data.roughness;
254
351
 
255
352
  if (data.hasOwnProperty('transparency'))
256
- material.opacity = 1 - data.transparency!;
353
+ presetData.transparency = data.transparency!;
257
354
 
258
355
  if (data.alphaThreshold || data.alphaThreshold === 0)
259
- material.alphaCutoff = data.alphaThreshold;
356
+ presetData.alphaThreshold = data.alphaThreshold;
260
357
 
261
- if (data.bitmaptexture) {
262
- const map = await this.loadMap(data.bitmaptexture);
263
- if (map) material.map = map;
264
- }
358
+ if (data.bumpAmplitude || data.bumpAmplitude === 0)
359
+ presetData.bumpAmplitude = data.bumpAmplitude;
265
360
 
266
- if (data.metalnesstexture) {
267
- const map = await this.loadMap(data.metalnesstexture);
268
- if (map) material.metalnessMap = map;
269
- }
361
+ if (data.bitmaptexture)
362
+ presetData.bitmaptexture = data.bitmaptexture;
270
363
 
271
- if (data.roughnesstexture) {
272
- const map = await this.loadMap(data.roughnesstexture);
273
- if (map) material.roughnessMap = map;
274
- }
364
+ if (data.metalnesstexture)
365
+ presetData.metalnesstexture = data.metalnesstexture;
275
366
 
276
- if (data.bumptexture) {
277
- const map = await this.loadMap(data.bumptexture);
278
- if (map) material.bumpMap = map;
279
- }
367
+ if (data.roughnesstexture)
368
+ presetData.roughnesstexture = data.roughnesstexture;
280
369
 
281
- if (data.normaltexture) {
282
- const map = await this.loadMap(data.normaltexture);
283
- if (map) material.normalMap = map;
284
- }
370
+ if (data.bumptexture)
371
+ presetData.bumptexture = data.bumptexture;
285
372
 
286
- if (data.transparencytexture) {
287
- const map = await this.loadMap(data.transparencytexture);
288
- if (map) material.alphaMap = map;
289
- }
373
+ if (data.normaltexture)
374
+ presetData.normaltexture = data.normaltexture;
375
+
376
+ if (data.transparencytexture)
377
+ presetData.transparencytexture = data.transparencytexture;
290
378
 
291
379
  // line material https://shapediver.atlassian.net/browse/SS-2272
380
+
381
+ return presetData;
292
382
  }
293
383
 
294
- public async loadMaterialV3(data: IMaterialContentDataV3, material: MaterialStandardData) {
384
+ public async loadMaterialV3(data: IMaterialContentDataV3): Promise<MaterialStandardData> {
385
+ const material = new MaterialStandardData();
386
+ const promises: Promise<MapData | null>[] = [];
295
387
  // ambient is ignored
296
388
 
297
389
  if (data.color)
@@ -315,50 +407,83 @@ export class MaterialEngine {
315
407
  material.bumpScale = data.bumpAmplitude;
316
408
 
317
409
  if (data.bitmaptexture) {
318
- const map = await this.loadMapWithProperties(data.bitmaptexture);
319
- if (map) material.map = map;
410
+ promises.push(
411
+ this.loadMapWithProperties(data.bitmaptexture).then(map => {
412
+ if (map) material.map = map;
413
+ return map;
414
+ })
415
+ )
320
416
  }
321
417
 
322
418
  if (data.metalnesstexture) {
323
- const map = await this.loadMapWithProperties(data.metalnesstexture);
324
- if (map) material.metalnessMap = map;
419
+ promises.push(
420
+ this.loadMapWithProperties(data.metalnesstexture).then(map => {
421
+ if (map) material.metalnessMap = map;
422
+ return map;
423
+ })
424
+ )
325
425
  }
326
426
 
327
427
  if (data.roughnesstexture) {
328
- const map = await this.loadMapWithProperties(data.roughnesstexture);
329
- if (map) material.roughnessMap = map;
428
+ promises.push(
429
+ this.loadMapWithProperties(data.roughnesstexture).then(map => {
430
+ if (map) material.roughnessMap = map;
431
+ return map;
432
+ })
433
+ )
330
434
  }
331
435
 
332
436
  if (data.bumptexture) {
333
- const map = await this.loadMapWithProperties(data.bumptexture);
334
- if (map) material.bumpMap = map;
437
+ promises.push(
438
+ this.loadMapWithProperties(data.bumptexture).then(map => {
439
+ if (map) material.bumpMap = map;
440
+ return map;
441
+ })
442
+ )
335
443
  }
336
444
 
337
445
  if (data.normaltexture) {
338
- const map = await this.loadMapWithProperties(data.normaltexture);
339
- if (map) material.normalMap = map;
446
+ promises.push(
447
+ this.loadMapWithProperties(data.normaltexture).then(map => {
448
+ if (map) material.normalMap = map;
449
+ return map;
450
+ })
451
+ )
340
452
  }
341
453
 
342
454
  if (data.transparencytexture) {
343
- const map = await this.loadMapWithProperties(data.transparencytexture);
344
- if (map) material.alphaMap = map;
455
+ promises.push(
456
+ this.loadMapWithProperties(data.transparencytexture).then(map => {
457
+ if (map) material.alphaMap = map;
458
+ return map;
459
+ })
460
+ )
345
461
  }
346
462
 
347
463
  // line material https://shapediver.atlassian.net/browse/SS-2272
464
+ await Promise.all(promises);
465
+
466
+ return material;
348
467
  }
349
468
 
350
- public async loadPresetMaterial(preset: number, material: MaterialStandardData) {
469
+ public loadPresetMaterialDefinition(preset: number): IMaterialContentDataV3 {
470
+ const definition: IMaterialContentDataV3 = {};
351
471
  const idStrings = this.getClassAndSpecificId(preset);
352
472
  if (materialDatabase[idStrings.class] && materialDatabase[idStrings.class][idStrings.specific]) {
353
- await this.assignSpecificDefinition(idStrings, materialDatabase[idStrings.class][idStrings.specific], material);
354
- await this.assignGeneralDefinition(idStrings, materialDatabase[idStrings.class].properties, materialDatabase[idStrings.class][idStrings.specific], material);
473
+ this.assignSpecificDefinition(idStrings, materialDatabase[idStrings.class][idStrings.specific], definition);
474
+ this.assignGeneralDefinition(idStrings, materialDatabase[idStrings.class].properties, materialDatabase[idStrings.class][idStrings.specific], definition);
355
475
  } else if (materialDatabase[idStrings.class] && materialDatabase[idStrings.class]['00']) {
356
- await this.assignSpecificDefinition({ class: idStrings.class, specific: '00' }, materialDatabase[idStrings.class]['00'], material);
357
- await this.assignGeneralDefinition({ class: idStrings.class, specific: '00' }, materialDatabase[idStrings.class].properties, materialDatabase[idStrings.class]['00'], material);
476
+ this.assignSpecificDefinition({ class: idStrings.class, specific: '00' }, materialDatabase[idStrings.class]['00'], definition);
477
+ this.assignGeneralDefinition({ class: idStrings.class, specific: '00' }, materialDatabase[idStrings.class].properties, materialDatabase[idStrings.class]['00'], definition);
358
478
  } else {
359
- await this.assignSpecificDefinition({ class: '00', specific: '00' }, materialDatabase['00']['00'], material);
360
- await this.assignGeneralDefinition({ class: '00', specific: '00' }, materialDatabase['00'].properties, materialDatabase['00']['00'], material);
479
+ this.assignSpecificDefinition({ class: '00', specific: '00' }, materialDatabase['00']['00'], definition);
480
+ this.assignGeneralDefinition({ class: '00', specific: '00' }, materialDatabase['00'].properties, materialDatabase['00']['00'], definition);
361
481
  }
482
+ return definition;
483
+ }
484
+
485
+ public async loadPresetMaterial(preset: number): Promise<MaterialStandardData> {
486
+ return this.loadMaterialV3(this.loadPresetMaterialDefinition(preset));
362
487
  }
363
488
 
364
489
  // #endregion Private Methods (9)