@shapediver/viewer.data-engine.material-engine 2.7.9 → 2.8.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.
@@ -6,7 +6,8 @@ export declare class MaterialEngine {
6
6
  private readonly _converter;
7
7
  private readonly _httpClient;
8
8
  private readonly _logger;
9
- constructor();
9
+ private static _instance;
10
+ static get instance(): MaterialEngine;
10
11
  /**
11
12
  * Load the material content into a scene graph node.
12
13
  *
@@ -14,16 +15,16 @@ export declare class MaterialEngine {
14
15
  * @returns the scene graph node
15
16
  */
16
17
  loadContent(content: ShapeDiverResponseOutputContent): Promise<ITreeNode>;
17
- private assignGeneralDefinition;
18
- private assignSpecificDefinition;
19
- private getClassAndSpecificId;
20
18
  loadMap(url: string, id?: string): Promise<MapData | null>;
21
19
  loadMapWithProperties(texture: ITexture): Promise<MapData | null>;
22
20
  loadMaterialDefinitionV1(data: IMaterialContentDataV1, presetData?: IMaterialContentDataV3): IMaterialContentDataV3;
23
21
  loadMaterialDefinitionV2(data: IMaterialContentDataV2, presetData?: IMaterialContentDataV3): IMaterialContentDataV3;
24
22
  loadMaterialDefinitionV3(data: IMaterialContentDataV3, presetData?: IMaterialContentDataV3): IMaterialContentDataV3;
25
23
  loadMaterialV3(data: IMaterialContentDataV3): Promise<MaterialStandardData>;
26
- loadPresetMaterialDefinition(preset: number): IMaterialContentDataV3;
27
24
  loadPresetMaterial(preset: number): Promise<MaterialStandardData>;
25
+ loadPresetMaterialDefinition(preset: number): IMaterialContentDataV3;
26
+ private assignGeneralDefinition;
27
+ private assignSpecificDefinition;
28
+ private getClassAndSpecificId;
28
29
  }
29
30
  //# 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;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"}
1
+ {"version":3,"file":"MaterialEngine.d.ts","sourceRoot":"","sources":["../src/MaterialEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,qCAAqC,CAAA;AAEzE,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,qBAAa,cAAc;IAGvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmC;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IAEnD,OAAO,CAAC,MAAM,CAAC,SAAS,CAAiB;IAMzC,WAAkB,QAAQ,mBAEzB;IAMD;;;;;SAKK;IACQ,WAAW,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,SAAS,CAAC;IAoCzE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAU1D,qBAAqB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAavE,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;IAqF3E,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIvE,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB;IAoB3E,OAAO,CAAC,uBAAuB;IAuD/B,OAAO,CAAC,wBAAwB;IAqDhC,OAAO,CAAC,qBAAqB;CAmBhC"}
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -20,22 +11,25 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
20
11
  Object.defineProperty(exports, "__esModule", { value: true });
21
12
  exports.MaterialEngine = void 0;
22
13
  const viewer_shared_node_tree_1 = require("@shapediver/viewer.shared.node-tree");
23
- const tsyringe_1 = require("tsyringe");
24
14
  const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
25
15
  const viewer_shared_types_1 = require("@shapediver/viewer.shared.types");
26
16
  const gl_matrix_1 = require("gl-matrix");
27
17
  const materialDatabase_1 = require("./materialDatabase");
28
- let MaterialEngine = class MaterialEngine {
29
- // #endregion Properties (3)
30
- // #region Constructors (1)
18
+ class MaterialEngine {
31
19
  constructor() {
32
- // #region Properties (3)
33
- this._converter = tsyringe_1.container.resolve(viewer_shared_services_1.Converter);
34
- this._httpClient = tsyringe_1.container.resolve(viewer_shared_services_1.HttpClient);
35
- this._logger = tsyringe_1.container.resolve(viewer_shared_services_1.Logger);
20
+ // #region Properties (4)
21
+ this._converter = viewer_shared_services_1.Converter.instance;
22
+ this._httpClient = viewer_shared_services_1.HttpClient.instance;
23
+ this._logger = viewer_shared_services_1.Logger.instance;
24
+ // #endregion Private Methods (3)
36
25
  }
37
- // #endregion Constructors (1)
38
- // #region Public Methods (1)
26
+ // #endregion Properties (4)
27
+ // #region Public Static Accessors (1)
28
+ static get instance() {
29
+ return this._instance || (this._instance = new this());
30
+ }
31
+ // #endregion Public Static Accessors (1)
32
+ // #region Public Methods (9)
39
33
  /**
40
34
  * Load the material content into a scene graph node.
41
35
  *
@@ -45,10 +39,8 @@ let MaterialEngine = class MaterialEngine {
45
39
  loadContent(content) {
46
40
  return __awaiter(this, void 0, void 0, function* () {
47
41
  const node = new viewer_shared_node_tree_1.TreeNode(content.name || 'material');
48
- if (!content) {
49
- const error = new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Invalid content was provided to material engine.');
50
- throw this._logger.handleError(viewer_shared_services_1.LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
51
- }
42
+ if (!content)
43
+ throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Invalid content was provided to material engine.');
52
44
  let material = new viewer_shared_types_1.MaterialStandardData();
53
45
  if (content.data) {
54
46
  const data = content.data;
@@ -70,149 +62,33 @@ let MaterialEngine = class MaterialEngine {
70
62
  material = yield this.loadMaterialV3(this.loadMaterialDefinitionV3(data, presetData));
71
63
  }
72
64
  else {
73
- const error = new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Material data version not supported.');
74
- throw this._logger.handleError(viewer_shared_services_1.LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
65
+ throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Material data version not supported.');
75
66
  }
76
67
  }
77
68
  }
78
69
  }
79
70
  else {
80
- const error = new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: No material data was provided to material engine.');
81
- throw this._logger.handleError(viewer_shared_services_1.LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
71
+ throw new viewer_shared_services_1.ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: No material data was provided to material engine.');
82
72
  }
83
73
  node.data.push(material);
84
74
  return node;
85
75
  });
86
76
  }
87
- // #endregion Public Methods (1)
88
- // #region Private Methods (9)
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;
129
- }
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;
169
- }
170
- getClassAndSpecificId(id) {
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
172
- if (id < 100 && id % 10 == 0)
173
- id /= 10;
174
- // if the id is less than 10, multiply it by 100
175
- if (id < 10)
176
- id *= 100;
177
- const cast = (id) => {
178
- let idString = String(id);
179
- return idString.padStart(2, '0').slice(0, 2);
180
- };
181
- return {
182
- class: cast(Math.floor(id / 100)),
183
- specific: cast(id - (Math.floor(id / 100) * 100))
184
- };
185
- }
186
77
  loadMap(url, id) {
187
78
  return __awaiter(this, void 0, void 0, function* () {
188
79
  let image;
189
- try {
190
- if (!id) {
191
- image = (yield this._converter.responseToImage(yield this._httpClient.loadTexture(url)));
192
- }
193
- else {
194
- image = (yield this._converter.responseToImage(yield this._httpClient.loadTexture('https://viewer.shapediver.com/v2/materials/1024/' + id + '/' + url)));
195
- }
80
+ if (!id) {
81
+ image = (yield this._converter.responseToImage(yield this._httpClient.loadTexture(url)));
196
82
  }
197
- catch (e) {
198
- if (e instanceof viewer_shared_services_1.ShapeDiverViewerError || e instanceof viewer_shared_services_1.ShapeDiverBackendError)
199
- throw e;
200
- throw this._logger.handleError(viewer_shared_services_1.LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadMap`, e);
83
+ else {
84
+ image = (yield this._converter.responseToImage(yield this._httpClient.loadTexture('https://viewer.shapediver.com/v2/materials/1024/' + id + '/' + url)));
201
85
  }
202
86
  return new viewer_shared_types_1.MapData(image);
203
87
  });
204
88
  }
205
89
  loadMapWithProperties(texture) {
206
90
  return __awaiter(this, void 0, void 0, function* () {
207
- let image;
208
- try {
209
- image = (yield this._converter.responseToImage(yield this._httpClient.loadTexture(texture.href)));
210
- }
211
- catch (e) {
212
- if (e instanceof viewer_shared_services_1.ShapeDiverViewerError || e instanceof viewer_shared_services_1.ShapeDiverBackendError)
213
- throw e;
214
- throw this._logger.handleError(viewer_shared_services_1.LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadMapWithProperties`, e);
215
- }
91
+ let image = yield this._converter.responseToImage(yield this._httpClient.loadTexture(texture.href));
216
92
  const wrapS = texture.wrapS === 1 ? viewer_shared_types_1.TEXTURE_WRAPPING.CLAMP_TO_EDGE : texture.wrapS === 2 ? viewer_shared_types_1.TEXTURE_WRAPPING.MIRRORED_REPEAT : viewer_shared_types_1.TEXTURE_WRAPPING.REPEAT;
217
93
  const wrapT = texture.wrapT === 1 ? viewer_shared_types_1.TEXTURE_WRAPPING.CLAMP_TO_EDGE : texture.wrapT === 2 ? viewer_shared_types_1.TEXTURE_WRAPPING.MIRRORED_REPEAT : viewer_shared_types_1.TEXTURE_WRAPPING.REPEAT;
218
94
  const center = texture.center ? gl_matrix_1.vec2.fromValues(texture.center[0], texture.center[1]) : gl_matrix_1.vec2.fromValues(0, 0);
@@ -386,6 +262,11 @@ let MaterialEngine = class MaterialEngine {
386
262
  return material;
387
263
  });
388
264
  }
265
+ loadPresetMaterial(preset) {
266
+ return __awaiter(this, void 0, void 0, function* () {
267
+ return this.loadMaterialV3(this.loadPresetMaterialDefinition(preset));
268
+ });
269
+ }
389
270
  loadPresetMaterialDefinition(preset) {
390
271
  const definition = {};
391
272
  const idStrings = this.getClassAndSpecificId(preset);
@@ -403,15 +284,105 @@ let MaterialEngine = class MaterialEngine {
403
284
  }
404
285
  return definition;
405
286
  }
406
- loadPresetMaterial(preset) {
407
- return __awaiter(this, void 0, void 0, function* () {
408
- return this.loadMaterialV3(this.loadPresetMaterialDefinition(preset));
409
- });
287
+ // #endregion Public Methods (9)
288
+ // #region Private Methods (3)
289
+ assignGeneralDefinition(id, generalDefinition, specificDefinition, definition) {
290
+ const promises = [];
291
+ if (generalDefinition.transparencytexture && !specificDefinition.transparencytexture)
292
+ definition.transparencytexture = {
293
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.transparencytexture
294
+ };
295
+ if (generalDefinition.hasOwnProperty('alphaThreshold') && !specificDefinition.hasOwnProperty('alphaThreshold'))
296
+ definition.alphaThreshold = generalDefinition.alphaThreshold;
297
+ if (generalDefinition.bumptexture && !specificDefinition.bumptexture)
298
+ definition.bumptexture = {
299
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.bumptexture
300
+ };
301
+ if (generalDefinition.hasOwnProperty('bumpAmplitude') && !specificDefinition.hasOwnProperty('bumpAmplitude'))
302
+ definition.bumpAmplitude = generalDefinition.bumpAmplitude;
303
+ if (generalDefinition.color && !specificDefinition.color)
304
+ definition.color = generalDefinition.color;
305
+ if (generalDefinition.bitmaptexture && !specificDefinition.bitmaptexture)
306
+ definition.bitmaptexture = {
307
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.bitmaptexture
308
+ };
309
+ if (generalDefinition.hasOwnProperty('metalness') && !specificDefinition.hasOwnProperty('metalness'))
310
+ definition.metalness = generalDefinition.metalness;
311
+ if (generalDefinition.metalnesstexture && !specificDefinition.metalnesstexture)
312
+ definition.metalnesstexture = {
313
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.metalnesstexture
314
+ };
315
+ if (generalDefinition.normaltexture && !specificDefinition.normaltexture)
316
+ definition.normaltexture = {
317
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.normaltexture
318
+ };
319
+ if (generalDefinition.hasOwnProperty('transparency') && !specificDefinition.hasOwnProperty('transparency'))
320
+ definition.transparency = generalDefinition.transparency;
321
+ if (generalDefinition.hasOwnProperty('roughness') && !specificDefinition.hasOwnProperty('roughness'))
322
+ definition.roughness = generalDefinition.roughness;
323
+ if (generalDefinition.roughnesstexture && !specificDefinition.roughnesstexture)
324
+ definition.roughnesstexture = {
325
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.roughnesstexture
326
+ };
327
+ if (generalDefinition.side && !specificDefinition.side)
328
+ definition.side = generalDefinition.side;
410
329
  }
411
- };
412
- MaterialEngine = __decorate([
413
- (0, tsyringe_1.singleton)(),
414
- __metadata("design:paramtypes", [])
415
- ], MaterialEngine);
330
+ assignSpecificDefinition(id, specificDefinition, definition) {
331
+ if (specificDefinition.transparencytexture)
332
+ definition.transparencytexture = {
333
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.transparencytexture
334
+ };
335
+ if (specificDefinition.hasOwnProperty('alphaThreshold'))
336
+ definition.alphaThreshold = specificDefinition.alphaThreshold;
337
+ if (specificDefinition.bumptexture)
338
+ definition.bumptexture = {
339
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.bumptexture
340
+ };
341
+ if (specificDefinition.hasOwnProperty('bumpAmplitude'))
342
+ definition.bumpAmplitude = specificDefinition.bumpAmplitude;
343
+ if (specificDefinition.color)
344
+ definition.color = specificDefinition.color;
345
+ if (specificDefinition.bitmaptexture)
346
+ definition.bitmaptexture = {
347
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.bitmaptexture
348
+ };
349
+ if (specificDefinition.hasOwnProperty('metalness'))
350
+ definition.metalness = specificDefinition.metalness;
351
+ if (specificDefinition.metalnesstexture)
352
+ definition.metalnesstexture = {
353
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.metalnesstexture
354
+ };
355
+ if (specificDefinition.normaltexture)
356
+ definition.normaltexture = {
357
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.normaltexture
358
+ };
359
+ if (specificDefinition.hasOwnProperty('transparency'))
360
+ definition.transparency = specificDefinition.transparency;
361
+ if (specificDefinition.hasOwnProperty('roughness'))
362
+ definition.roughness = specificDefinition.roughness;
363
+ if (specificDefinition.roughnesstexture)
364
+ definition.roughnesstexture = {
365
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.roughnesstexture
366
+ };
367
+ if (specificDefinition.side)
368
+ definition.side = specificDefinition.side;
369
+ }
370
+ getClassAndSpecificId(id) {
371
+ // 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
372
+ if (id < 100 && id % 10 == 0)
373
+ id /= 10;
374
+ // if the id is less than 10, multiply it by 100
375
+ if (id < 10)
376
+ id *= 100;
377
+ const cast = (id) => {
378
+ let idString = String(id);
379
+ return idString.padStart(2, '0').slice(0, 2);
380
+ };
381
+ return {
382
+ class: cast(Math.floor(id / 100)),
383
+ specific: cast(id - (Math.floor(id / 100) * 100))
384
+ };
385
+ }
386
+ }
416
387
  exports.MaterialEngine = MaterialEngine;
417
388
  //# sourceMappingURL=MaterialEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MaterialEngine.js","sourceRoot":"","sources":["../src/MaterialEngine.ts"],"names":[],"mappings":"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"}
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.7.9",
3
+ "version": "2.8.0",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "Michael Oppitz <michael@shapediver.com>",
@@ -40,13 +40,12 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@shapediver/sdk.geometry-api-sdk-v2": "1.3.0",
43
- "@shapediver/viewer.data-engine.shared-types": "2.7.9",
44
- "@shapediver/viewer.shared.node-tree": "2.7.9",
45
- "@shapediver/viewer.shared.services": "2.7.9",
46
- "@shapediver/viewer.shared.types": "2.7.9",
43
+ "@shapediver/viewer.data-engine.shared-types": "2.8.0",
44
+ "@shapediver/viewer.shared.node-tree": "2.8.0",
45
+ "@shapediver/viewer.shared.services": "2.8.0",
46
+ "@shapediver/viewer.shared.types": "2.8.0",
47
47
  "axios": "^1.2.6",
48
- "gl-matrix": "3.3.0",
49
- "tsyringe": "^4.5.0"
48
+ "gl-matrix": "3.3.0"
50
49
  },
51
- "gitHead": "eeddc9b2e9837296a03711e7f5b5bfcab9b50d82"
50
+ "gitHead": "9caee20107c5d71e43de33edc14ee19d62ec268b"
52
51
  }
@@ -1,6 +1,5 @@
1
1
  import { ITreeNode, TreeNode } from '@shapediver/viewer.shared.node-tree'
2
- import { container, singleton } from 'tsyringe'
3
- import { Converter, HttpClient, HttpResponse, Logger, LOGGING_TOPIC, ShapeDiverBackendError, ShapeDiverViewerDataProcessingError, ShapeDiverViewerError } from '@shapediver/viewer.shared.services'
2
+ import { Converter, HttpClient, HttpResponse, Logger, ShapeDiverBackendError, ShapeDiverViewerDataProcessingError, ShapeDiverViewerError } from '@shapediver/viewer.shared.services'
4
3
  import {
5
4
  MapData,
6
5
  MATERIAL_SIDE,
@@ -14,23 +13,26 @@ import { materialDatabase } from './materialDatabase'
14
13
  import { ShapeDiverResponseOutputContent } from '@shapediver/sdk.geometry-api-sdk-v2'
15
14
  import { IMaterialContentData, IMaterialContentDataV1, IMaterialContentDataV2, IMaterialContentDataV3, IPresetMaterialDefinition, ITexture } from '@shapediver/viewer.data-engine.shared-types'
16
15
 
17
- @singleton()
18
16
  export class MaterialEngine {
19
- // #region Properties (3)
17
+ // #region Properties (4)
20
18
 
21
- private readonly _converter: Converter = <Converter>container.resolve(Converter);
22
- private readonly _httpClient: HttpClient = <HttpClient>container.resolve(HttpClient);
23
- private readonly _logger: Logger = <Logger>container.resolve(Logger);
19
+ private readonly _converter: Converter = Converter.instance;
20
+ private readonly _httpClient: HttpClient = HttpClient.instance;
21
+ private readonly _logger: Logger = Logger.instance;
24
22
 
25
- // #endregion Properties (3)
23
+ private static _instance: MaterialEngine;
26
24
 
27
- // #region Constructors (1)
25
+ // #endregion Properties (4)
28
26
 
29
- constructor() { }
27
+ // #region Public Static Accessors (1)
30
28
 
31
- // #endregion Constructors (1)
29
+ public static get instance() {
30
+ return this._instance || (this._instance = new this());
31
+ }
32
+
33
+ // #endregion Public Static Accessors (1)
32
34
 
33
- // #region Public Methods (1)
35
+ // #region Public Methods (9)
34
36
 
35
37
  /**
36
38
  * Load the material content into a scene graph node.
@@ -40,15 +42,12 @@ export class MaterialEngine {
40
42
  */
41
43
  public async loadContent(content: ShapeDiverResponseOutputContent): Promise<ITreeNode> {
42
44
  const node = new TreeNode(content.name || 'material');
43
- if (!content) {
44
- const error = new ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Invalid content was provided to material engine.');
45
- throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
46
- }
45
+ if (!content)
46
+ throw new ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Invalid content was provided to material engine.');
47
47
 
48
48
  let material = new MaterialStandardData();
49
49
 
50
50
  if (content.data) {
51
-
52
51
  const data: IMaterialContentData = content.data;
53
52
  let presetData: IMaterialContentDataV3 | undefined;
54
53
  if (data.materialpreset)
@@ -65,174 +64,31 @@ export class MaterialEngine {
65
64
  } else if (data.version === '3.0') {
66
65
  material = await this.loadMaterialV3(this.loadMaterialDefinitionV3(data, presetData));
67
66
  } else {
68
- const error = new ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Material data version not supported.');
69
- throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
67
+ throw new ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: Material data version not supported.');
70
68
  }
71
69
  }
72
70
  }
73
71
  } else {
74
- const error = new ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: No material data was provided to material engine.');
75
- throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadContent`, error);
72
+ throw new ShapeDiverViewerDataProcessingError('MaterialEngine.loadContent: No material data was provided to material engine.');
76
73
  }
77
74
 
78
75
  node.data.push(material);
79
76
  return node;
80
77
  }
81
78
 
82
- // #endregion Public Methods (1)
83
-
84
- // #region Private Methods (9)
85
-
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;
139
- }
140
-
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;
192
- }
193
-
194
- private getClassAndSpecificId(id: number): { class: string, specific: string } {
195
- // 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
196
- if (id < 100 && id % 10 == 0) id /= 10;
197
-
198
- // if the id is less than 10, multiply it by 100
199
- if (id < 10) id *= 100;
200
-
201
- const cast = (id: number): string => {
202
- let idString = String(id);
203
- return idString.padStart(2, '0').slice(0, 2);
204
- };
205
-
206
- return {
207
- class: cast(Math.floor(id / 100)),
208
- specific: cast(id - (Math.floor(id / 100) * 100))
209
- };
210
- }
211
-
212
79
  public async loadMap(url: string, id?: string): Promise<MapData | null> {
213
80
  let image: HTMLImageElement;
214
- try {
215
- if (!id) {
216
- image = <HTMLImageElement>await this._converter.responseToImage(await this._httpClient.loadTexture(url));
217
- } else {
218
- image = <HTMLImageElement>await this._converter.responseToImage(await this._httpClient.loadTexture('https://viewer.shapediver.com/v2/materials/1024/' + id + '/' + url));
219
- }
220
- } catch (e) {
221
- if (e instanceof ShapeDiverViewerError || e instanceof ShapeDiverBackendError) throw e;
222
- throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadMap`, e);
81
+ if (!id) {
82
+ image = <HTMLImageElement>await this._converter.responseToImage(await this._httpClient.loadTexture(url));
83
+ } else {
84
+ image = <HTMLImageElement>await this._converter.responseToImage(await this._httpClient.loadTexture('https://viewer.shapediver.com/v2/materials/1024/' + id + '/' + url));
223
85
  }
224
86
  return new MapData(image);
225
87
  }
226
88
 
227
89
  public async loadMapWithProperties(texture: ITexture): Promise<MapData | null> {
228
- let image: HTMLImageElement;
229
- try {
230
- image = <HTMLImageElement>await this._converter.responseToImage(await this._httpClient.loadTexture(texture.href!));
231
- } catch (e) {
232
- if (e instanceof ShapeDiverViewerError || e instanceof ShapeDiverBackendError) throw e;
233
- throw this._logger.handleError(LOGGING_TOPIC.DATA_PROCESSING, `MaterialEngine.loadMapWithProperties`, e);
234
- }
235
-
90
+ let image: HTMLImageElement = <HTMLImageElement>await this._converter.responseToImage(await this._httpClient.loadTexture(texture.href!));
91
+
236
92
  const wrapS = texture.wrapS === 1 ? TEXTURE_WRAPPING.CLAMP_TO_EDGE : texture.wrapS === 2 ? TEXTURE_WRAPPING.MIRRORED_REPEAT : TEXTURE_WRAPPING.REPEAT;
237
93
  const wrapT = texture.wrapT === 1 ? TEXTURE_WRAPPING.CLAMP_TO_EDGE : texture.wrapT === 2 ? TEXTURE_WRAPPING.MIRRORED_REPEAT : TEXTURE_WRAPPING.REPEAT;
238
94
  const center = texture.center ? vec2.fromValues(texture.center[0], texture.center[1]) : vec2.fromValues(0, 0);
@@ -242,7 +98,7 @@ export class MaterialEngine {
242
98
 
243
99
  return new MapData(image, wrapS, wrapT, TEXTURE_FILTERING.LINEAR_MIPMAP_LINEAR, TEXTURE_FILTERING.LINEAR, center, color, offset, repeat, texture.rotation || 0);
244
100
  }
245
-
101
+
246
102
  public loadMaterialDefinitionV1(data: IMaterialContentDataV1, presetData: IMaterialContentDataV3 = {}): IMaterialContentDataV3 {
247
103
  // ambient is ignored
248
104
 
@@ -281,7 +137,7 @@ export class MaterialEngine {
281
137
 
282
138
  return presetData;
283
139
  }
284
-
140
+
285
141
  public loadMaterialDefinitionV2(data: IMaterialContentDataV2, presetData: IMaterialContentDataV3 = {}): IMaterialContentDataV3 {
286
142
  // ambient is ignored
287
143
 
@@ -466,6 +322,10 @@ export class MaterialEngine {
466
322
  return material;
467
323
  }
468
324
 
325
+ public async loadPresetMaterial(preset: number): Promise<MaterialStandardData> {
326
+ return this.loadMaterialV3(this.loadPresetMaterialDefinition(preset));
327
+ }
328
+
469
329
  public loadPresetMaterialDefinition(preset: number): IMaterialContentDataV3 {
470
330
  const definition: IMaterialContentDataV3 = {};
471
331
  const idStrings = this.getClassAndSpecificId(preset);
@@ -482,9 +342,135 @@ export class MaterialEngine {
482
342
  return definition;
483
343
  }
484
344
 
485
- public async loadPresetMaterial(preset: number): Promise<MaterialStandardData> {
486
- return this.loadMaterialV3(this.loadPresetMaterialDefinition(preset));
345
+ // #endregion Public Methods (9)
346
+
347
+ // #region Private Methods (3)
348
+
349
+ private assignGeneralDefinition(id: { class: string, specific: string }, generalDefinition: IPresetMaterialDefinition, specificDefinition: IPresetMaterialDefinition, definition: IMaterialContentDataV3) {
350
+ const promises: Promise<MapData | null>[] = [];
351
+
352
+ if (generalDefinition.transparencytexture && !specificDefinition.transparencytexture)
353
+ definition.transparencytexture = {
354
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.transparencytexture
355
+ }
356
+
357
+ if (generalDefinition.hasOwnProperty('alphaThreshold') && !specificDefinition.hasOwnProperty('alphaThreshold'))
358
+ definition.alphaThreshold = generalDefinition.alphaThreshold;
359
+
360
+ if (generalDefinition.bumptexture && !specificDefinition.bumptexture)
361
+ definition.bumptexture = {
362
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.bumptexture
363
+ }
364
+
365
+ if (generalDefinition.hasOwnProperty('bumpAmplitude') && !specificDefinition.hasOwnProperty('bumpAmplitude'))
366
+ definition.bumpAmplitude = generalDefinition.bumpAmplitude!;
367
+
368
+ if (generalDefinition.color && !specificDefinition.color)
369
+ definition.color = generalDefinition.color;
370
+
371
+ if (generalDefinition.bitmaptexture && !specificDefinition.bitmaptexture)
372
+ definition.bitmaptexture = {
373
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.bitmaptexture
374
+ }
375
+
376
+ if (generalDefinition.hasOwnProperty('metalness') && !specificDefinition.hasOwnProperty('metalness'))
377
+ definition.metalness = generalDefinition.metalness!;
378
+
379
+ if (generalDefinition.metalnesstexture && !specificDefinition.metalnesstexture)
380
+ definition.metalnesstexture = {
381
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.metalnesstexture
382
+ }
383
+
384
+ if (generalDefinition.normaltexture && !specificDefinition.normaltexture)
385
+ definition.normaltexture = {
386
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.normaltexture
387
+ }
388
+
389
+ if (generalDefinition.hasOwnProperty('transparency') && !specificDefinition.hasOwnProperty('transparency'))
390
+ definition.transparency = generalDefinition.transparency;
391
+
392
+ if (generalDefinition.hasOwnProperty('roughness') && !specificDefinition.hasOwnProperty('roughness'))
393
+ definition.roughness = generalDefinition.roughness!;
394
+
395
+ if (generalDefinition.roughnesstexture && !specificDefinition.roughnesstexture)
396
+ definition.roughnesstexture = {
397
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + generalDefinition.roughnesstexture
398
+ }
399
+
400
+ if (generalDefinition.side && !specificDefinition.side)
401
+ definition.side = generalDefinition.side;
402
+ }
403
+
404
+ private assignSpecificDefinition(id: { class: string, specific: string }, specificDefinition: IPresetMaterialDefinition, definition: IMaterialContentDataV3) {
405
+ if (specificDefinition.transparencytexture)
406
+ definition.transparencytexture = {
407
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.transparencytexture
408
+ }
409
+
410
+ if (specificDefinition.hasOwnProperty('alphaThreshold'))
411
+ definition.alphaThreshold = specificDefinition.alphaThreshold!;
412
+
413
+ if (specificDefinition.bumptexture)
414
+ definition.bumptexture = {
415
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.bumptexture
416
+ }
417
+
418
+ if (specificDefinition.hasOwnProperty('bumpAmplitude'))
419
+ definition.bumpAmplitude = specificDefinition.bumpAmplitude!;
420
+
421
+ if (specificDefinition.color)
422
+ definition.color = specificDefinition.color;
423
+
424
+ if (specificDefinition.bitmaptexture)
425
+ definition.bitmaptexture = {
426
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.bitmaptexture
427
+ }
428
+
429
+ if (specificDefinition.hasOwnProperty('metalness'))
430
+ definition.metalness = specificDefinition.metalness!;
431
+
432
+ if (specificDefinition.metalnesstexture)
433
+ definition.metalnesstexture = {
434
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.metalnesstexture
435
+ }
436
+
437
+ if (specificDefinition.normaltexture)
438
+ definition.normaltexture = {
439
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.normaltexture
440
+ }
441
+
442
+ if (specificDefinition.hasOwnProperty('transparency'))
443
+ definition.transparency = specificDefinition.transparency!;
444
+
445
+ if (specificDefinition.hasOwnProperty('roughness'))
446
+ definition.roughness = specificDefinition.roughness!;
447
+
448
+ if (specificDefinition.roughnesstexture)
449
+ definition.roughnesstexture = {
450
+ href: 'https://viewer.shapediver.com/v2/materials/1024/' + id.class + '/' + id.specific + '/' + specificDefinition.roughnesstexture
451
+ }
452
+
453
+ if (specificDefinition.side)
454
+ definition.side = specificDefinition.side;
455
+ }
456
+
457
+ private getClassAndSpecificId(id: number): { class: string, specific: string } {
458
+ // 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
459
+ if (id < 100 && id % 10 == 0) id /= 10;
460
+
461
+ // if the id is less than 10, multiply it by 100
462
+ if (id < 10) id *= 100;
463
+
464
+ const cast = (id: number): string => {
465
+ let idString = String(id);
466
+ return idString.padStart(2, '0').slice(0, 2);
467
+ };
468
+
469
+ return {
470
+ class: cast(Math.floor(id / 100)),
471
+ specific: cast(id - (Math.floor(id / 100) * 100))
472
+ };
487
473
  }
488
474
 
489
- // #endregion Private Methods (9)
475
+ // #endregion Private Methods (3)
490
476
  }