@onerjs/serializers 8.41.6 → 8.41.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/3MF/3mfSerializer.configuration.d.ts +9 -0
  2. package/3MF/3mfSerializer.configuration.js +11 -0
  3. package/3MF/3mfSerializer.configuration.js.map +1 -0
  4. package/3MF/3mfSerializer.d.ts +132 -0
  5. package/3MF/3mfSerializer.js +328 -0
  6. package/3MF/3mfSerializer.js.map +1 -0
  7. package/3MF/core/index.d.ts +2 -0
  8. package/3MF/core/index.js +4 -0
  9. package/3MF/core/index.js.map +1 -0
  10. package/3MF/core/model/3mf.builder.d.ts +231 -0
  11. package/3MF/core/model/3mf.builder.js +403 -0
  12. package/3MF/core/model/3mf.builder.js.map +1 -0
  13. package/3MF/core/model/3mf.d.ts +329 -0
  14. package/3MF/core/model/3mf.interfaces.d.ts +321 -0
  15. package/3MF/core/model/3mf.interfaces.js +39 -0
  16. package/3MF/core/model/3mf.interfaces.js.map +1 -0
  17. package/3MF/core/model/3mf.js +377 -0
  18. package/3MF/core/model/3mf.js.map +1 -0
  19. package/3MF/core/model/3mf.opc.d.ts +66 -0
  20. package/3MF/core/model/3mf.opc.interfaces.d.ts +126 -0
  21. package/3MF/core/model/3mf.opc.interfaces.js +75 -0
  22. package/3MF/core/model/3mf.opc.interfaces.js.map +1 -0
  23. package/3MF/core/model/3mf.opc.js +91 -0
  24. package/3MF/core/model/3mf.opc.js.map +1 -0
  25. package/3MF/core/model/3mf.serializer.d.ts +118 -0
  26. package/3MF/core/model/3mf.serializer.js +171 -0
  27. package/3MF/core/model/3mf.serializer.js.map +1 -0
  28. package/3MF/core/model/3mf.types.d.ts +46 -0
  29. package/3MF/core/model/3mf.types.js +2 -0
  30. package/3MF/core/model/3mf.types.js.map +1 -0
  31. package/3MF/core/model/index.d.ts +7 -0
  32. package/3MF/core/model/index.js +8 -0
  33. package/3MF/core/model/index.js.map +1 -0
  34. package/3MF/core/xml/index.d.ts +6 -0
  35. package/3MF/core/xml/index.js +7 -0
  36. package/3MF/core/xml/index.js.map +1 -0
  37. package/3MF/core/xml/xml.builder.bytes.d.ts +33 -0
  38. package/3MF/core/xml/xml.builder.bytes.js +60 -0
  39. package/3MF/core/xml/xml.builder.bytes.js.map +1 -0
  40. package/3MF/core/xml/xml.builder.d.ts +94 -0
  41. package/3MF/core/xml/xml.builder.js +286 -0
  42. package/3MF/core/xml/xml.builder.js.map +1 -0
  43. package/3MF/core/xml/xml.builder.string.d.ts +19 -0
  44. package/3MF/core/xml/xml.builder.string.js +35 -0
  45. package/3MF/core/xml/xml.builder.string.js.map +1 -0
  46. package/3MF/core/xml/xml.interfaces.d.ts +91 -0
  47. package/3MF/core/xml/xml.interfaces.js +110 -0
  48. package/3MF/core/xml/xml.interfaces.js.map +1 -0
  49. package/3MF/core/xml/xml.serializer.d.ts +39 -0
  50. package/3MF/core/xml/xml.serializer.format.d.ts +92 -0
  51. package/3MF/core/xml/xml.serializer.format.js +122 -0
  52. package/3MF/core/xml/xml.serializer.format.js.map +1 -0
  53. package/3MF/core/xml/xml.serializer.js +261 -0
  54. package/3MF/core/xml/xml.serializer.js.map +1 -0
  55. package/3MF/index.d.ts +3 -0
  56. package/3MF/index.js +5 -0
  57. package/3MF/index.js.map +1 -0
  58. package/index.d.ts +1 -0
  59. package/index.js +1 -0
  60. package/index.js.map +1 -1
  61. package/legacy/legacy-3mfSerializer.d.ts +1 -0
  62. package/legacy/legacy-3mfSerializer.js +20 -0
  63. package/legacy/legacy-3mfSerializer.js.map +1 -0
  64. package/legacy/legacy.d.ts +1 -0
  65. package/legacy/legacy.js +1 -0
  66. package/legacy/legacy.js.map +1 -1
  67. package/package.json +3 -3
@@ -0,0 +1,231 @@
1
+ import type { Matrix3d } from "./3mf.js";
2
+ import { ThreeMfModel, ThreeMfObject } from "./3mf.js";
3
+ import type { I3mfBaseMaterials, I3mfModel, I3mfObject, I3mfTriangle, I3mfVertex, ST_ResourceID, ST_ResourceIndex, ST_Unit } from "./3mf.interfaces.js";
4
+ import { ST_ObjectType } from "./3mf.interfaces.js";
5
+ import type { I3mfDocument } from "./3mf.opc.interfaces.js";
6
+ import { type I3mfContentType, type I3mfRelationship } from "./3mf.opc.interfaces.js";
7
+ import type { I3mfRGBAColor, I3mfVertexData } from "./3mf.types.js";
8
+ export type VertexHandler = (vertex: I3mfVertex) => I3mfVertex;
9
+ export type TriangleHandler = (triangle: I3mfTriangle) => I3mfTriangle;
10
+ /** */
11
+ export declare class ThreeMfObjectBuilder {
12
+ /**
13
+ *
14
+ */
15
+ protected _object: ThreeMfObject;
16
+ /**
17
+ *
18
+ * @param id
19
+ * @param type
20
+ */
21
+ constructor(id: ST_ResourceID, type: ST_ObjectType);
22
+ /**
23
+ *
24
+ * @param name
25
+ * @returns
26
+ */
27
+ withName(name: string): ThreeMfObjectBuilder;
28
+ /**
29
+ *
30
+ * @param thumbnail
31
+ * @returns
32
+ */
33
+ withThumbnail(thumbnail: string): ThreeMfObjectBuilder;
34
+ /**
35
+ *
36
+ * @param id
37
+ * @param index
38
+ * @returns
39
+ */
40
+ withProperty(id: ST_ResourceIndex, index?: number): ThreeMfObjectBuilder;
41
+ /**
42
+ *
43
+ * @returns
44
+ */
45
+ build(): I3mfObject;
46
+ /**
47
+ *
48
+ * @param id
49
+ * @param type
50
+ */
51
+ reset(id: ST_ResourceID, type: ST_ObjectType): void;
52
+ }
53
+ /**
54
+ *
55
+ */
56
+ export declare class ThreeMfComponentsBuilder extends ThreeMfObjectBuilder {
57
+ /**
58
+ *
59
+ * @param id
60
+ * @param type
61
+ */
62
+ constructor(id: ST_ResourceID, type?: ST_ObjectType);
63
+ /**
64
+ *
65
+ * @param id
66
+ * @param t
67
+ * @returns
68
+ */
69
+ withComponent(id: ST_ResourceID, t?: Matrix3d): ThreeMfComponentsBuilder;
70
+ }
71
+ /**
72
+ *
73
+ */
74
+ export declare class ThreeMfMeshBuilder extends ThreeMfObjectBuilder {
75
+ /**
76
+ *
77
+ */
78
+ _vh?: VertexHandler;
79
+ /**
80
+ *
81
+ */
82
+ _th?: TriangleHandler;
83
+ /**
84
+ *
85
+ * @param id
86
+ */
87
+ constructor(id: ST_ResourceID);
88
+ /**
89
+ *
90
+ * @param vertex
91
+ * @param triangle
92
+ * @returns
93
+ */
94
+ withPostProcessHandlers(vertex: VertexHandler, triangle?: TriangleHandler): ThreeMfMeshBuilder;
95
+ /**
96
+ *
97
+ * @param data
98
+ * @returns
99
+ */
100
+ withData(data: I3mfVertexData): ThreeMfMeshBuilder;
101
+ /**
102
+ *
103
+ * @param id
104
+ * @param i
105
+ * @returns
106
+ */
107
+ withMaterial(id: ST_ResourceID, i: number): ThreeMfMeshBuilder;
108
+ /**
109
+ *
110
+ * @param data
111
+ * @returns
112
+ */
113
+ private _buildMesh;
114
+ private _buildVertices;
115
+ private _buildTriangle;
116
+ }
117
+ /**
118
+ *
119
+ */
120
+ export declare class ThreeMfMaterialBuilder {
121
+ private _m;
122
+ constructor(id: ST_ResourceID);
123
+ /**
124
+ *
125
+ * @param name
126
+ * @param color
127
+ * @returns
128
+ */
129
+ withColor(name: string, color: I3mfRGBAColor): ThreeMfMaterialBuilder;
130
+ /**
131
+ *
132
+ * @returns
133
+ */
134
+ build(): I3mfBaseMaterials;
135
+ private _rgbaToHex;
136
+ }
137
+ /**
138
+ *
139
+ */
140
+ export declare class ThreeMfModelBuilder {
141
+ /**
142
+ *
143
+ */
144
+ static KnownMetaSet: Set<string>;
145
+ /**
146
+ *
147
+ */
148
+ _model: ThreeMfModel;
149
+ /**
150
+ *
151
+ */
152
+ _objects: Map<string, I3mfObject>;
153
+ /**
154
+ *
155
+ * @param name
156
+ * @param value
157
+ * @param preserve
158
+ * @param type
159
+ * @returns
160
+ */
161
+ withMetaData(name: string, value: string, preserve?: boolean, type?: string): ThreeMfModelBuilder;
162
+ /**
163
+ *
164
+ * @param material
165
+ * @returns
166
+ */
167
+ withMaterial(material: I3mfBaseMaterials | ThreeMfMaterialBuilder): ThreeMfModelBuilder;
168
+ /**
169
+ *
170
+ * @param object
171
+ * @returns
172
+ */
173
+ withMesh(object: I3mfObject | ThreeMfMeshBuilder): ThreeMfModelBuilder;
174
+ /**
175
+ *
176
+ * @param components
177
+ * @returns
178
+ */
179
+ withComponents(components: I3mfObject | ThreeMfComponentsBuilder): ThreeMfModelBuilder;
180
+ /**
181
+ *
182
+ * @param objectid
183
+ * @param transform
184
+ * @param partnumber
185
+ * @returns
186
+ */
187
+ withBuild(objectid: ST_ResourceID, transform?: Matrix3d, partnumber?: string): ThreeMfModelBuilder;
188
+ /**
189
+ *
190
+ * @param unit
191
+ * @returns
192
+ */
193
+ withUnit(unit: ST_Unit): ThreeMfModelBuilder;
194
+ /**
195
+ *
196
+ * @returns
197
+ */
198
+ reset(): ThreeMfModelBuilder;
199
+ /**
200
+ *
201
+ * @returns
202
+ */
203
+ build(): ThreeMfModel;
204
+ }
205
+ /**
206
+ *
207
+ */
208
+ export declare class ThreeMfDocumentBuilder {
209
+ private _cts?;
210
+ private _rs?;
211
+ private _m?;
212
+ /**
213
+ *
214
+ * @param type
215
+ * @returns
216
+ */
217
+ withContentType(type: I3mfContentType): ThreeMfDocumentBuilder;
218
+ /**
219
+ *
220
+ * @param rel
221
+ * @returns
222
+ */
223
+ withRelationship(rel: I3mfRelationship): ThreeMfDocumentBuilder;
224
+ /**
225
+ *
226
+ * @param m
227
+ * @returns
228
+ */
229
+ withModel(m: I3mfModel | ThreeMfModelBuilder): ThreeMfDocumentBuilder;
230
+ build(): I3mfDocument;
231
+ }
@@ -0,0 +1,403 @@
1
+ import { ThreeMfBase, ThreeMfBaseMaterials, ThreeMfBuild, ThreeMfComponent, ThreeMfComponents, ThreeMfItem, ThreeMfMesh, ThreeMfMeta, ThreeMfModel, ThreeMfObject, ThreeMfResources, ThreeMfTriangle, ThreeMfTriangles, ThreeMfVertex, ThreeMfVertices, } from "./3mf.js";
2
+ import { ST_ObjectType } from "./3mf.interfaces.js";
3
+ import { ThreeMfContentType, ThreeMfContentTypes, ThreeMfDocument, ThreeMfRelationship, ThreeMfRelationships } from "./3mf.opc.js";
4
+ import { Known3mfRelationshipTypes, KnownI3mfContentType, ModelFileName, Object3dDirName, } from "./3mf.opc.interfaces.js";
5
+ /** */
6
+ export class ThreeMfObjectBuilder {
7
+ /**
8
+ *
9
+ * @param id
10
+ * @param type
11
+ */
12
+ constructor(id, type) {
13
+ this._object = new ThreeMfObject(id, type);
14
+ }
15
+ /**
16
+ *
17
+ * @param name
18
+ * @returns
19
+ */
20
+ withName(name) {
21
+ this._object.name = name;
22
+ return this;
23
+ }
24
+ /**
25
+ *
26
+ * @param thumbnail
27
+ * @returns
28
+ */
29
+ withThumbnail(thumbnail) {
30
+ this._object.thumbnail = thumbnail;
31
+ return this;
32
+ }
33
+ /**
34
+ *
35
+ * @param id
36
+ * @param index
37
+ * @returns
38
+ */
39
+ withProperty(id, index = 0) {
40
+ this._object.pid = id;
41
+ this._object.id = index;
42
+ return this;
43
+ }
44
+ /**
45
+ *
46
+ * @returns
47
+ */
48
+ build() {
49
+ return this._object;
50
+ }
51
+ /**
52
+ *
53
+ * @param id
54
+ * @param type
55
+ */
56
+ reset(id, type) {
57
+ this._object = new ThreeMfObject(id, type);
58
+ }
59
+ }
60
+ /**
61
+ *
62
+ */
63
+ export class ThreeMfComponentsBuilder extends ThreeMfObjectBuilder {
64
+ /**
65
+ *
66
+ * @param id
67
+ * @param type
68
+ */
69
+ constructor(id, type = ST_ObjectType.model) {
70
+ super(id, type);
71
+ this._object.content = new ThreeMfComponents();
72
+ }
73
+ /**
74
+ *
75
+ * @param id
76
+ * @param t
77
+ * @returns
78
+ */
79
+ withComponent(id, t) {
80
+ this._object.content.component.push(new ThreeMfComponent(id, t));
81
+ return this;
82
+ }
83
+ }
84
+ /**
85
+ *
86
+ */
87
+ export class ThreeMfMeshBuilder extends ThreeMfObjectBuilder {
88
+ /**
89
+ *
90
+ * @param id
91
+ */
92
+ constructor(id) {
93
+ super(id, ST_ObjectType.model);
94
+ }
95
+ /**
96
+ *
97
+ * @param vertex
98
+ * @param triangle
99
+ * @returns
100
+ */
101
+ withPostProcessHandlers(vertex, triangle) {
102
+ this._vh = vertex;
103
+ this._th = triangle;
104
+ return this;
105
+ }
106
+ /**
107
+ *
108
+ * @param data
109
+ * @returns
110
+ */
111
+ withData(data) {
112
+ this._object.content = this._buildMesh(data);
113
+ return this;
114
+ }
115
+ /**
116
+ *
117
+ * @param id
118
+ * @param i
119
+ * @returns
120
+ */
121
+ withMaterial(id, i) {
122
+ this._object.pid = id;
123
+ this._object.pindex = i;
124
+ return this;
125
+ }
126
+ /**
127
+ *
128
+ * @param data
129
+ * @returns
130
+ */
131
+ _buildMesh(data) {
132
+ const vertices = this._buildVertices(data.positions);
133
+ const triangles = this._buildTriangle(data.indices);
134
+ return new ThreeMfMesh(vertices, triangles);
135
+ }
136
+ _buildVertices(p) {
137
+ const container = new ThreeMfVertices();
138
+ if (p) {
139
+ for (let i = 0; i < p.length;) {
140
+ const x = p[i++];
141
+ const y = p[i++];
142
+ const z = p[i++];
143
+ let v = new ThreeMfVertex(x, y, z);
144
+ // might be optimized....
145
+ if (this._vh) {
146
+ v = this._vh(v);
147
+ }
148
+ container.vertex.push(v);
149
+ }
150
+ }
151
+ return container;
152
+ }
153
+ _buildTriangle(indice) {
154
+ const container = new ThreeMfTriangles();
155
+ if (indice) {
156
+ for (let i = 0; i < indice.length;) {
157
+ const a = indice[i++];
158
+ const b = indice[i++];
159
+ const c = indice[i++];
160
+ let t = new ThreeMfTriangle(a, b, c);
161
+ // might be optimized....
162
+ if (this._th) {
163
+ t = this._th(t);
164
+ }
165
+ container.triangle.push(t);
166
+ }
167
+ }
168
+ return container;
169
+ }
170
+ }
171
+ /**
172
+ *
173
+ */
174
+ export class ThreeMfMaterialBuilder {
175
+ constructor(id) {
176
+ this._m = new ThreeMfBaseMaterials(id);
177
+ }
178
+ /**
179
+ *
180
+ * @param name
181
+ * @param color
182
+ * @returns
183
+ */
184
+ withColor(name, color) {
185
+ this._m.base = this._m.base ?? [];
186
+ let m = this._m.base.find((m) => m.name.toLowerCase() === name.toLowerCase());
187
+ if (m) {
188
+ m.displaycolor = this._rgbaToHex(color);
189
+ return this;
190
+ }
191
+ m = new ThreeMfBase(name, this._rgbaToHex(color));
192
+ this._m.base.push(m);
193
+ return this;
194
+ }
195
+ /**
196
+ *
197
+ * @returns
198
+ */
199
+ build() {
200
+ return this._m;
201
+ }
202
+ _rgbaToHex(c) {
203
+ const toSRGB = (c) => Math.round(Math.min(255, Math.max(0, Math.pow(c, 1 / 2.2) * 255)));
204
+ const r = toSRGB(c.r).toString(16).padStart(2, "0").toUpperCase();
205
+ const g = toSRGB(c.g).toString(16).padStart(2, "0").toUpperCase();
206
+ const b = toSRGB(c.b).toString(16).padStart(2, "0").toUpperCase();
207
+ if (typeof c.a === "number") {
208
+ const a = Math.round(Math.min(255, Math.max(0, c.a * 255)))
209
+ .toString(16)
210
+ .padStart(2, "0")
211
+ .toUpperCase();
212
+ return `#${r}${g}${b}${a}`;
213
+ }
214
+ return `#${r}${g}${b}`;
215
+ }
216
+ }
217
+ /**
218
+ *
219
+ */
220
+ export class ThreeMfModelBuilder {
221
+ constructor() {
222
+ /**
223
+ *
224
+ */
225
+ this._model = new ThreeMfModel();
226
+ /**
227
+ *
228
+ */
229
+ this._objects = new Map();
230
+ }
231
+ /**
232
+ *
233
+ * @param name
234
+ * @param value
235
+ * @param preserve
236
+ * @param type
237
+ * @returns
238
+ */
239
+ withMetaData(name, value, preserve, type) {
240
+ if (!this._model.metadata) {
241
+ // lazzy
242
+ this._model.metadata = new Array();
243
+ }
244
+ //const isKnownMeta = (s: string): boolean => TMFBuilder.knownMetaSet.has(s.toLowerCase());
245
+ //const qn:IQName = xmlNameToParts(name);
246
+ this._model.metadata.push(new ThreeMfMeta(name, value, preserve, type));
247
+ return this;
248
+ }
249
+ /**
250
+ *
251
+ * @param material
252
+ * @returns
253
+ */
254
+ withMaterial(material) {
255
+ if (material instanceof ThreeMfMaterialBuilder) {
256
+ material = material.build();
257
+ }
258
+ if (material) {
259
+ this._model.resources = this._model.resources ?? new ThreeMfResources();
260
+ this._model.resources.basematerials = this._model.resources.basematerials ?? [];
261
+ this._model.resources.basematerials.push(material);
262
+ }
263
+ return this;
264
+ }
265
+ /**
266
+ *
267
+ * @param object
268
+ * @returns
269
+ */
270
+ withMesh(object) {
271
+ if (object instanceof ThreeMfMeshBuilder) {
272
+ object = object.build();
273
+ }
274
+ this._model.resources = this._model.resources ?? new ThreeMfResources();
275
+ this._model.resources.object.push(object);
276
+ return this;
277
+ }
278
+ /**
279
+ *
280
+ * @param components
281
+ * @returns
282
+ */
283
+ withComponents(components) {
284
+ if (components instanceof ThreeMfComponentsBuilder) {
285
+ components = components.build();
286
+ }
287
+ this._model.resources = this._model.resources ?? new ThreeMfResources();
288
+ this._model.resources.object.push(components);
289
+ return this;
290
+ }
291
+ /**
292
+ *
293
+ * @param objectid
294
+ * @param transform
295
+ * @param partnumber
296
+ * @returns
297
+ */
298
+ withBuild(objectid, transform, partnumber) {
299
+ this._model.build = this._model.build ?? new ThreeMfBuild();
300
+ this._model.build.item?.push(new ThreeMfItem(objectid, transform, partnumber));
301
+ return this;
302
+ }
303
+ /**
304
+ *
305
+ * @param unit
306
+ * @returns
307
+ */
308
+ withUnit(unit) {
309
+ this._model.unit = unit;
310
+ return this;
311
+ }
312
+ /**
313
+ *
314
+ * @returns
315
+ */
316
+ reset() {
317
+ this._model = new ThreeMfModel();
318
+ this._objects = new Map();
319
+ return this;
320
+ }
321
+ /**
322
+ *
323
+ * @returns
324
+ */
325
+ build() {
326
+ // quick surface check..
327
+ if (!this._model.resources?.object?.length) {
328
+ throw new Error("Invalid state: resources MUST be defined ");
329
+ }
330
+ if (!this._model.build?.item?.length) {
331
+ throw new Error("Invalid state: Build MUST be defined ");
332
+ }
333
+ return this._model;
334
+ }
335
+ }
336
+ /**
337
+ *
338
+ */
339
+ ThreeMfModelBuilder.KnownMetaSet = new Set(ThreeMfModel.KnownMeta.map((m) => m.toLowerCase()));
340
+ /**
341
+ *
342
+ */
343
+ export class ThreeMfDocumentBuilder {
344
+ /**
345
+ *
346
+ * @param type
347
+ * @returns
348
+ */
349
+ withContentType(type) {
350
+ if (!this._cts) {
351
+ this._cts = new ThreeMfContentTypes();
352
+ }
353
+ const arr = this._cts.items;
354
+ if (!arr.some((x) => x.ext === type.ext && x.ct === type.ct)) {
355
+ arr.push(type);
356
+ }
357
+ return this;
358
+ }
359
+ /**
360
+ *
361
+ * @param rel
362
+ * @returns
363
+ */
364
+ withRelationship(rel) {
365
+ if (!this._rs) {
366
+ this._rs = new ThreeMfRelationships();
367
+ }
368
+ const arr = this._rs.items;
369
+ if (!arr.some((x) => x.id === rel.id)) {
370
+ arr.push(rel);
371
+ }
372
+ // here we ensure that the content type is declared.
373
+ this.withContentType(new ThreeMfContentType("rels", KnownI3mfContentType.Relationships));
374
+ return this;
375
+ }
376
+ /**
377
+ *
378
+ * @param m
379
+ * @returns
380
+ */
381
+ withModel(m) {
382
+ if (m instanceof ThreeMfModelBuilder) {
383
+ m = m.build();
384
+ }
385
+ this._m = m;
386
+ // here we ensure that the content type is declared.
387
+ this.withContentType(new ThreeMfContentType("model", KnownI3mfContentType.Model));
388
+ return this;
389
+ }
390
+ build() {
391
+ if (!this._m) {
392
+ throw new Error("Invalid state: you Must provide at least a model.");
393
+ }
394
+ // we automate the build of the relationship if not provided..
395
+ const path = `${Object3dDirName}${ModelFileName}`;
396
+ if (!this._rs) {
397
+ const absolutePath = `/${path}`;
398
+ this.withRelationship(new ThreeMfRelationship(`rel${0}`, Known3mfRelationshipTypes.ThreeDimModel, absolutePath));
399
+ }
400
+ return new ThreeMfDocument(this._cts, this._rs, this._m);
401
+ }
402
+ }
403
+ //# sourceMappingURL=3mf.builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"3mf.builder.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/3MF/core/model/3mf.builder.ts"],"names":[],"mappings":"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","sourcesContent":["// 3MF\r\nimport type { Matrix3d } from \"./3mf\";\r\nimport {\r\n ThreeMfBase,\r\n ThreeMfBaseMaterials,\r\n ThreeMfBuild,\r\n ThreeMfComponent,\r\n ThreeMfComponents,\r\n ThreeMfItem,\r\n ThreeMfMesh,\r\n ThreeMfMeta,\r\n ThreeMfModel,\r\n ThreeMfObject,\r\n ThreeMfResources,\r\n ThreeMfTriangle,\r\n ThreeMfTriangles,\r\n ThreeMfVertex,\r\n ThreeMfVertices,\r\n} from \"./3mf\";\r\nimport type {\r\n I3mfBaseMaterials,\r\n I3mfComponents,\r\n I3mfMesh,\r\n I3mfMetadata,\r\n I3mfModel,\r\n I3mfObject,\r\n I3mfTriangle,\r\n I3mfTriangles,\r\n I3mfVertex,\r\n I3mfVertices,\r\n ST_ResourceID,\r\n ST_ResourceIndex,\r\n ST_Unit,\r\n} from \"./3mf.interfaces\";\r\nimport { ST_ObjectType } from \"./3mf.interfaces\";\r\nimport { ThreeMfContentType, ThreeMfContentTypes, ThreeMfDocument, ThreeMfRelationship, ThreeMfRelationships } from \"./3mf.opc\";\r\nimport type { I3mfDocument } from \"./3mf.opc.interfaces\";\r\nimport {\r\n Known3mfRelationshipTypes,\r\n KnownI3mfContentType,\r\n ModelFileName,\r\n Object3dDirName,\r\n type I3mfContentType,\r\n type I3mfContentTypes,\r\n type I3mfRelationship,\r\n type I3mfRelationships,\r\n} from \"./3mf.opc.interfaces\";\r\nimport type { I3mfRGBAColor, I3mfVertexData, ThreeMfFloatArray, ThreeMfIndicesArray } from \"./3mf.types\";\r\n\r\nexport type VertexHandler = (vertex: I3mfVertex) => I3mfVertex;\r\nexport type TriangleHandler = (triangle: I3mfTriangle) => I3mfTriangle;\r\n\r\n/** */\r\nexport class ThreeMfObjectBuilder {\r\n /**\r\n *\r\n */\r\n protected _object: ThreeMfObject;\r\n\r\n /**\r\n *\r\n * @param id\r\n * @param type\r\n */\r\n public constructor(id: ST_ResourceID, type: ST_ObjectType) {\r\n this._object = new ThreeMfObject(id, type);\r\n }\r\n\r\n /**\r\n *\r\n * @param name\r\n * @returns\r\n */\r\n public withName(name: string): ThreeMfObjectBuilder {\r\n this._object.name = name;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param thumbnail\r\n * @returns\r\n */\r\n public withThumbnail(thumbnail: string): ThreeMfObjectBuilder {\r\n this._object.thumbnail = thumbnail;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param id\r\n * @param index\r\n * @returns\r\n */\r\n public withProperty(id: ST_ResourceIndex, index: number = 0): ThreeMfObjectBuilder {\r\n this._object.pid = id;\r\n this._object.id = index;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @returns\r\n */\r\n public build(): I3mfObject {\r\n return this._object;\r\n }\r\n\r\n /**\r\n *\r\n * @param id\r\n * @param type\r\n */\r\n public reset(id: ST_ResourceID, type: ST_ObjectType) {\r\n this._object = new ThreeMfObject(id, type);\r\n }\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport class ThreeMfComponentsBuilder extends ThreeMfObjectBuilder {\r\n /**\r\n *\r\n * @param id\r\n * @param type\r\n */\r\n public constructor(id: ST_ResourceID, type: ST_ObjectType = ST_ObjectType.model) {\r\n super(id, type);\r\n this._object.content = new ThreeMfComponents();\r\n }\r\n\r\n /**\r\n *\r\n * @param id\r\n * @param t\r\n * @returns\r\n */\r\n public withComponent(id: ST_ResourceID, t?: Matrix3d): ThreeMfComponentsBuilder {\r\n (this._object.content as I3mfComponents).component.push(new ThreeMfComponent(id, t));\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport class ThreeMfMeshBuilder extends ThreeMfObjectBuilder {\r\n /**\r\n *\r\n */\r\n _vh?: VertexHandler;\r\n /**\r\n *\r\n */\r\n _th?: TriangleHandler;\r\n\r\n /**\r\n *\r\n * @param id\r\n */\r\n public constructor(id: ST_ResourceID) {\r\n super(id, ST_ObjectType.model);\r\n }\r\n\r\n /**\r\n *\r\n * @param vertex\r\n * @param triangle\r\n * @returns\r\n */\r\n public withPostProcessHandlers(vertex: VertexHandler, triangle?: TriangleHandler): ThreeMfMeshBuilder {\r\n this._vh = vertex;\r\n this._th = triangle;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param data\r\n * @returns\r\n */\r\n withData(data: I3mfVertexData): ThreeMfMeshBuilder {\r\n this._object.content = this._buildMesh(data);\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param id\r\n * @param i\r\n * @returns\r\n */\r\n withMaterial(id: ST_ResourceID, i: number): ThreeMfMeshBuilder {\r\n this._object.pid = id;\r\n this._object.pindex = i;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param data\r\n * @returns\r\n */\r\n private _buildMesh(data: I3mfVertexData): I3mfMesh {\r\n const vertices = this._buildVertices(data.positions);\r\n const triangles = this._buildTriangle(data.indices);\r\n return new ThreeMfMesh(vertices, triangles);\r\n }\r\n\r\n private _buildVertices(p: ThreeMfFloatArray | null): I3mfVertices {\r\n const container = new ThreeMfVertices();\r\n if (p) {\r\n for (let i = 0; i < p.length; ) {\r\n const x = p[i++];\r\n const y = p[i++];\r\n const z = p[i++];\r\n let v = new ThreeMfVertex(x, y, z);\r\n // might be optimized....\r\n if (this._vh) {\r\n v = this._vh(v);\r\n }\r\n container.vertex.push(v);\r\n }\r\n }\r\n return container;\r\n }\r\n\r\n private _buildTriangle(indice: ThreeMfIndicesArray | null): I3mfTriangles {\r\n const container = new ThreeMfTriangles();\r\n if (indice) {\r\n for (let i = 0; i < indice.length; ) {\r\n const a = indice[i++];\r\n const b = indice[i++];\r\n const c = indice[i++];\r\n let t = new ThreeMfTriangle(a, b, c);\r\n // might be optimized....\r\n if (this._th) {\r\n t = this._th(t);\r\n }\r\n container.triangle.push(t);\r\n }\r\n }\r\n return container;\r\n }\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport class ThreeMfMaterialBuilder {\r\n private _m: I3mfBaseMaterials;\r\n\r\n public constructor(id: ST_ResourceID) {\r\n this._m = new ThreeMfBaseMaterials(id);\r\n }\r\n\r\n /**\r\n *\r\n * @param name\r\n * @param color\r\n * @returns\r\n */\r\n public withColor(name: string, color: I3mfRGBAColor): ThreeMfMaterialBuilder {\r\n this._m.base = this._m.base ?? [];\r\n let m = this._m.base.find((m) => m.name.toLowerCase() === name.toLowerCase());\r\n if (m) {\r\n m.displaycolor = this._rgbaToHex(color);\r\n return this;\r\n }\r\n m = new ThreeMfBase(name, this._rgbaToHex(color));\r\n this._m.base.push(m);\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @returns\r\n */\r\n public build(): I3mfBaseMaterials {\r\n return this._m;\r\n }\r\n\r\n private _rgbaToHex(c: I3mfRGBAColor | { r: number; g: number; b: number; a?: number }): string {\r\n const toSRGB = (c: number) => Math.round(Math.min(255, Math.max(0, Math.pow(c, 1 / 2.2) * 255)));\r\n\r\n const r = toSRGB(c.r).toString(16).padStart(2, \"0\").toUpperCase();\r\n const g = toSRGB(c.g).toString(16).padStart(2, \"0\").toUpperCase();\r\n const b = toSRGB(c.b).toString(16).padStart(2, \"0\").toUpperCase();\r\n\r\n if (typeof (c as any).a === \"number\") {\r\n const a = Math.round(Math.min(255, Math.max(0, c.a! * 255)))\r\n .toString(16)\r\n .padStart(2, \"0\")\r\n .toUpperCase();\r\n return `#${r}${g}${b}${a}`;\r\n }\r\n\r\n return `#${r}${g}${b}`;\r\n }\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport class ThreeMfModelBuilder {\r\n /**\r\n *\r\n */\r\n static KnownMetaSet = new Set(ThreeMfModel.KnownMeta.map((m) => m.toLowerCase()));\r\n\r\n /**\r\n *\r\n */\r\n _model: ThreeMfModel = new ThreeMfModel();\r\n /**\r\n *\r\n */\r\n _objects = new Map<string, I3mfObject>();\r\n\r\n /**\r\n *\r\n * @param name\r\n * @param value\r\n * @param preserve\r\n * @param type\r\n * @returns\r\n */\r\n public withMetaData(name: string, value: string, preserve?: boolean, type?: string): ThreeMfModelBuilder {\r\n if (!this._model.metadata) {\r\n // lazzy\r\n this._model.metadata = new Array<I3mfMetadata>();\r\n }\r\n //const isKnownMeta = (s: string): boolean => TMFBuilder.knownMetaSet.has(s.toLowerCase());\r\n //const qn:IQName = xmlNameToParts(name);\r\n this._model.metadata.push(new ThreeMfMeta(name, value, preserve, type));\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param material\r\n * @returns\r\n */\r\n public withMaterial(material: I3mfBaseMaterials | ThreeMfMaterialBuilder): ThreeMfModelBuilder {\r\n if (material instanceof ThreeMfMaterialBuilder) {\r\n material = material.build();\r\n }\r\n if (material) {\r\n this._model.resources = this._model.resources ?? new ThreeMfResources();\r\n this._model.resources.basematerials = this._model.resources.basematerials ?? [];\r\n this._model.resources.basematerials.push(material);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param object\r\n * @returns\r\n */\r\n public withMesh(object: I3mfObject | ThreeMfMeshBuilder): ThreeMfModelBuilder {\r\n if (object instanceof ThreeMfMeshBuilder) {\r\n object = object.build();\r\n }\r\n this._model.resources = this._model.resources ?? new ThreeMfResources();\r\n this._model.resources.object.push(object);\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param components\r\n * @returns\r\n */\r\n public withComponents(components: I3mfObject | ThreeMfComponentsBuilder): ThreeMfModelBuilder {\r\n if (components instanceof ThreeMfComponentsBuilder) {\r\n components = components.build();\r\n }\r\n this._model.resources = this._model.resources ?? new ThreeMfResources();\r\n this._model.resources.object.push(components);\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param objectid\r\n * @param transform\r\n * @param partnumber\r\n * @returns\r\n */\r\n public withBuild(objectid: ST_ResourceID, transform?: Matrix3d, partnumber?: string): ThreeMfModelBuilder {\r\n this._model.build = this._model.build ?? new ThreeMfBuild();\r\n this._model.build.item?.push(new ThreeMfItem(objectid, transform, partnumber));\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param unit\r\n * @returns\r\n */\r\n public withUnit(unit: ST_Unit): ThreeMfModelBuilder {\r\n this._model.unit = unit;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @returns\r\n */\r\n public reset(): ThreeMfModelBuilder {\r\n this._model = new ThreeMfModel();\r\n this._objects = new Map<string, I3mfObject>();\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @returns\r\n */\r\n public build(): ThreeMfModel {\r\n // quick surface check..\r\n if (!this._model.resources?.object?.length) {\r\n throw new Error(\"Invalid state: resources MUST be defined \");\r\n }\r\n if (!this._model.build?.item?.length) {\r\n throw new Error(\"Invalid state: Build MUST be defined \");\r\n }\r\n return this._model;\r\n }\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport class ThreeMfDocumentBuilder {\r\n private _cts?: I3mfContentTypes;\r\n private _rs?: I3mfRelationships;\r\n private _m?: I3mfModel;\r\n\r\n /**\r\n *\r\n * @param type\r\n * @returns\r\n */\r\n public withContentType(type: I3mfContentType): ThreeMfDocumentBuilder {\r\n if (!this._cts) {\r\n this._cts = new ThreeMfContentTypes();\r\n }\r\n const arr = this._cts.items;\r\n if (!arr.some((x) => x.ext === type.ext && x.ct === type.ct)) {\r\n arr.push(type);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param rel\r\n * @returns\r\n */\r\n public withRelationship(rel: I3mfRelationship): ThreeMfDocumentBuilder {\r\n if (!this._rs) {\r\n this._rs = new ThreeMfRelationships();\r\n }\r\n const arr = this._rs.items;\r\n if (!arr.some((x) => x.id === rel.id)) {\r\n arr.push(rel);\r\n }\r\n // here we ensure that the content type is declared.\r\n this.withContentType(new ThreeMfContentType(\"rels\", KnownI3mfContentType.Relationships));\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param m\r\n * @returns\r\n */\r\n public withModel(m: I3mfModel | ThreeMfModelBuilder): ThreeMfDocumentBuilder {\r\n if (m instanceof ThreeMfModelBuilder) {\r\n m = m.build();\r\n }\r\n this._m = m;\r\n // here we ensure that the content type is declared.\r\n this.withContentType(new ThreeMfContentType(\"model\", KnownI3mfContentType.Model));\r\n return this;\r\n }\r\n\r\n public build(): I3mfDocument {\r\n if (!this._m) {\r\n throw new Error(\"Invalid state: you Must provide at least a model.\");\r\n }\r\n\r\n // we automate the build of the relationship if not provided..\r\n const path = `${Object3dDirName}${ModelFileName}`;\r\n if (!this._rs) {\r\n const absolutePath = `/${path}`;\r\n this.withRelationship(new ThreeMfRelationship(`rel${0}`, Known3mfRelationshipTypes.ThreeDimModel, absolutePath));\r\n }\r\n\r\n return new ThreeMfDocument(this._cts!, this._rs!, this._m);\r\n }\r\n}\r\n"]}