@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.
- package/3MF/3mfSerializer.configuration.d.ts +9 -0
- package/3MF/3mfSerializer.configuration.js +11 -0
- package/3MF/3mfSerializer.configuration.js.map +1 -0
- package/3MF/3mfSerializer.d.ts +132 -0
- package/3MF/3mfSerializer.js +328 -0
- package/3MF/3mfSerializer.js.map +1 -0
- package/3MF/core/index.d.ts +2 -0
- package/3MF/core/index.js +4 -0
- package/3MF/core/index.js.map +1 -0
- package/3MF/core/model/3mf.builder.d.ts +231 -0
- package/3MF/core/model/3mf.builder.js +403 -0
- package/3MF/core/model/3mf.builder.js.map +1 -0
- package/3MF/core/model/3mf.d.ts +329 -0
- package/3MF/core/model/3mf.interfaces.d.ts +321 -0
- package/3MF/core/model/3mf.interfaces.js +39 -0
- package/3MF/core/model/3mf.interfaces.js.map +1 -0
- package/3MF/core/model/3mf.js +377 -0
- package/3MF/core/model/3mf.js.map +1 -0
- package/3MF/core/model/3mf.opc.d.ts +66 -0
- package/3MF/core/model/3mf.opc.interfaces.d.ts +126 -0
- package/3MF/core/model/3mf.opc.interfaces.js +75 -0
- package/3MF/core/model/3mf.opc.interfaces.js.map +1 -0
- package/3MF/core/model/3mf.opc.js +91 -0
- package/3MF/core/model/3mf.opc.js.map +1 -0
- package/3MF/core/model/3mf.serializer.d.ts +118 -0
- package/3MF/core/model/3mf.serializer.js +171 -0
- package/3MF/core/model/3mf.serializer.js.map +1 -0
- package/3MF/core/model/3mf.types.d.ts +46 -0
- package/3MF/core/model/3mf.types.js +2 -0
- package/3MF/core/model/3mf.types.js.map +1 -0
- package/3MF/core/model/index.d.ts +7 -0
- package/3MF/core/model/index.js +8 -0
- package/3MF/core/model/index.js.map +1 -0
- package/3MF/core/xml/index.d.ts +6 -0
- package/3MF/core/xml/index.js +7 -0
- package/3MF/core/xml/index.js.map +1 -0
- package/3MF/core/xml/xml.builder.bytes.d.ts +33 -0
- package/3MF/core/xml/xml.builder.bytes.js +60 -0
- package/3MF/core/xml/xml.builder.bytes.js.map +1 -0
- package/3MF/core/xml/xml.builder.d.ts +94 -0
- package/3MF/core/xml/xml.builder.js +286 -0
- package/3MF/core/xml/xml.builder.js.map +1 -0
- package/3MF/core/xml/xml.builder.string.d.ts +19 -0
- package/3MF/core/xml/xml.builder.string.js +35 -0
- package/3MF/core/xml/xml.builder.string.js.map +1 -0
- package/3MF/core/xml/xml.interfaces.d.ts +91 -0
- package/3MF/core/xml/xml.interfaces.js +110 -0
- package/3MF/core/xml/xml.interfaces.js.map +1 -0
- package/3MF/core/xml/xml.serializer.d.ts +39 -0
- package/3MF/core/xml/xml.serializer.format.d.ts +92 -0
- package/3MF/core/xml/xml.serializer.format.js +122 -0
- package/3MF/core/xml/xml.serializer.format.js.map +1 -0
- package/3MF/core/xml/xml.serializer.js +261 -0
- package/3MF/core/xml/xml.serializer.js.map +1 -0
- package/3MF/index.d.ts +3 -0
- package/3MF/index.js +5 -0
- package/3MF/index.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/legacy/legacy-3mfSerializer.d.ts +1 -0
- package/legacy/legacy-3mfSerializer.js +20 -0
- package/legacy/legacy-3mfSerializer.js.map +1 -0
- package/legacy/legacy.d.ts +1 -0
- package/legacy/legacy.js +1 -0
- package/legacy/legacy.js.map +1 -1
- 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"]}
|