@jscad/x3d-deserializer 2.2.5 → 2.2.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/CHANGELOG.md +25 -0
- package/package.json +3 -3
- package/src/objects.js +43 -36
- package/src/parse.js +33 -26
- package/tests/IndexedTriangleSets_CommaMF.x3d +82 -0
- package/tests/TriangleSets_CommaMF.x3d +54 -0
- package/tests/instantiate.test.js +28 -0
- package/tests/translate.test.js +26 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,31 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [2.2.7](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/x3d-deserializer@2.2.6...@jscad/x3d-deserializer@2.2.7) (2024-06-02)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **x3d-deserializer:** correcting caching of x3d attributes in createX3DParser, allowing continuous parsing of X3D files ([7f44197](https://github.com/jscad/OpenJSCAD.org/commit/7f4419776e2b0d485a4b2621d9f12927d31a0bbc))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [2.2.6](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/x3d-deserializer@2.2.5...@jscad/x3d-deserializer@2.2.6) (2024-02-18)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **x3d-deserializer:** corrected to accept commas as MF value delimiters ([03a1145](https://github.com/jscad/OpenJSCAD.org/commit/03a114543303c17afc50908cdc0946a38197058d))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
- allow commas as delimiter in MF fields
|
|
29
|
+
|
|
30
|
+
|
|
6
31
|
## [2.2.5](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/x3d-deserializer@2.2.4...@jscad/x3d-deserializer@2.2.5) (2023-06-27)
|
|
7
32
|
|
|
8
33
|
**Note:** Version bump only for package @jscad/x3d-deserializer
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jscad/x3d-deserializer",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.7",
|
|
4
4
|
"description": "X3D Deserializer for JSCAD",
|
|
5
5
|
"repository": "https://github.com/jscad/OpenJSCAD.org/",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@jscad/array-utils": "2.1.4",
|
|
30
|
-
"@jscad/modeling": "2.12.
|
|
30
|
+
"@jscad/modeling": "2.12.2",
|
|
31
31
|
"saxes": "5.0.1"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"ava": "3.15.0",
|
|
35
35
|
"nyc": "15.1.0"
|
|
36
36
|
},
|
|
37
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "5fbb5fea458c28b0d96450dde9231e1d4d8ce6a4"
|
|
38
38
|
}
|
package/src/objects.js
CHANGED
|
@@ -89,31 +89,31 @@ const x3dTransform = (element) => {
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
if (element.center) {
|
|
92
|
-
const values = element.center
|
|
92
|
+
const values = parseNumbers(element.center)
|
|
93
93
|
if (values.length > 2) {
|
|
94
94
|
obj.center = values
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
if (element.rotation) {
|
|
98
|
-
const values = element.rotation
|
|
98
|
+
const values = parseNumbers(element.rotation)
|
|
99
99
|
if (values.length > 3) {
|
|
100
100
|
obj.rotation = values
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
if (element.scale) {
|
|
104
|
-
const values = element.scale
|
|
104
|
+
const values = parseNumbers(element.scale)
|
|
105
105
|
if (values.length > 2) {
|
|
106
106
|
obj.scale = values
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
if (element.scaleorientation) {
|
|
110
|
-
const values = element.scaleorientation
|
|
110
|
+
const values = parseNumbers(element.scaleorientation)
|
|
111
111
|
if (values.length > 3) {
|
|
112
112
|
obj.scaleOrientation = values
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
if (element.translation) {
|
|
116
|
-
const values = element.translation
|
|
116
|
+
const values = parseNumbers(element.translation)
|
|
117
117
|
if (values.length > 2) {
|
|
118
118
|
obj.translation = values
|
|
119
119
|
}
|
|
@@ -138,7 +138,7 @@ const x3dBox = (element) => {
|
|
|
138
138
|
const obj = { definition: x3dTypes.BOX, size: [2, 2, 2] }
|
|
139
139
|
|
|
140
140
|
if (element.size) {
|
|
141
|
-
const values = element.size
|
|
141
|
+
const values = parseNumbers(element.size)
|
|
142
142
|
if (values.length > 2) {
|
|
143
143
|
obj.size = values
|
|
144
144
|
}
|
|
@@ -187,7 +187,7 @@ const x3dSphere = (element) => {
|
|
|
187
187
|
obj.radius = parseFloat(element.radius)
|
|
188
188
|
}
|
|
189
189
|
if (element.subdivision) {
|
|
190
|
-
const values = element.subdivision
|
|
190
|
+
const values = parseNumbers(element.subdivision)
|
|
191
191
|
if (values.length > 1) {
|
|
192
192
|
obj.subdivision = Math.max(...values)
|
|
193
193
|
}
|
|
@@ -217,7 +217,7 @@ const x3dExtrusion = (element) => {
|
|
|
217
217
|
obj.endCap = element.endCap.includes('TRUE') || element.endCap.includes('true')
|
|
218
218
|
}
|
|
219
219
|
if (element.crossSection) {
|
|
220
|
-
const values = element.crossSection
|
|
220
|
+
const values = parseNumbers(element.crossSection)
|
|
221
221
|
const numpoints = Math.trunc(values.length / 2)
|
|
222
222
|
const points = []
|
|
223
223
|
for (let i = 0; i < numpoints; i++) {
|
|
@@ -228,7 +228,7 @@ const x3dExtrusion = (element) => {
|
|
|
228
228
|
obj.crossSection = points
|
|
229
229
|
}
|
|
230
230
|
if (element.orientation) {
|
|
231
|
-
const values = element.orientation
|
|
231
|
+
const values = parseNumbers(element.orientation)
|
|
232
232
|
const numpoints = Math.trunc(values.length / 4)
|
|
233
233
|
const points = []
|
|
234
234
|
for (let i = 0; i < numpoints; i++) {
|
|
@@ -238,7 +238,7 @@ const x3dExtrusion = (element) => {
|
|
|
238
238
|
obj.orientations = points
|
|
239
239
|
}
|
|
240
240
|
if (element.scale) {
|
|
241
|
-
const values = element.scale
|
|
241
|
+
const values = parseNumbers(element.scale)
|
|
242
242
|
const numpoints = Math.trunc(values.length / 2)
|
|
243
243
|
const points = []
|
|
244
244
|
for (let i = 0; i < numpoints; i++) {
|
|
@@ -251,7 +251,7 @@ const x3dExtrusion = (element) => {
|
|
|
251
251
|
obj.scales = points
|
|
252
252
|
}
|
|
253
253
|
if (element.spine) {
|
|
254
|
-
const values = element.spine
|
|
254
|
+
const values = parseNumbers(element.spine)
|
|
255
255
|
const numpoints = Math.trunc(values.length / 3)
|
|
256
256
|
const points = []
|
|
257
257
|
for (let i = 0; i < numpoints; i++) {
|
|
@@ -337,7 +337,7 @@ const x3dPolyline2D = (element) => {
|
|
|
337
337
|
const obj = { definition: x3dTypes.POLYLINE2D, lineSegments: [] }
|
|
338
338
|
|
|
339
339
|
if (element.lineSegments) {
|
|
340
|
-
const values = element.lineSegments
|
|
340
|
+
const values = parseNumbers(element.lineSegments)
|
|
341
341
|
for (let i = 0; i < values.length; i = i + 2) {
|
|
342
342
|
const point = [values[i], values[i + 1]]
|
|
343
343
|
obj.lineSegments.push(point)
|
|
@@ -350,7 +350,7 @@ const x3dRectangle2D = (element) => {
|
|
|
350
350
|
const obj = { definition: x3dTypes.RECTANGLE2D, size: [2, 2] }
|
|
351
351
|
|
|
352
352
|
if (element.size) {
|
|
353
|
-
const values = element.size
|
|
353
|
+
const values = parseNumbers(element.size)
|
|
354
354
|
if (values.length > 1) {
|
|
355
355
|
obj.size = values
|
|
356
356
|
}
|
|
@@ -362,7 +362,7 @@ const x3dTriangleSet2D = (element) => {
|
|
|
362
362
|
const obj = { definition: x3dTypes.TRIANGLESET2D, vertices: [] }
|
|
363
363
|
|
|
364
364
|
if (element.vertices) {
|
|
365
|
-
const values = element.vertices
|
|
365
|
+
const values = parseNumbers(element.vertices)
|
|
366
366
|
for (let i = 0; i < values.length; i = i + 2) {
|
|
367
367
|
const point = [values[i], values[i + 1]]
|
|
368
368
|
obj.vertices.push(point)
|
|
@@ -379,7 +379,7 @@ const x3dLineSet = (element) => {
|
|
|
379
379
|
const obj = { definition: x3dTypes.LINESET, vertexCount: [], colorPerVertex: true }
|
|
380
380
|
|
|
381
381
|
if (element.vertexCount) {
|
|
382
|
-
obj.vertexCount = element.vertexCount
|
|
382
|
+
obj.vertexCount = parseNumbers(element.vertexCount)
|
|
383
383
|
}
|
|
384
384
|
// color attributes
|
|
385
385
|
if (element.colorPerVertex) {
|
|
@@ -393,9 +393,8 @@ const x3dIndexedLineSet = (element) => {
|
|
|
393
393
|
const obj = { definition: x3dTypes.INDEXEDLINESET, indexes: [], colorPerVertex: true }
|
|
394
394
|
|
|
395
395
|
if (element.coordIndex) {
|
|
396
|
-
const indexes = element.coordIndex
|
|
397
|
-
obj.indexes = indexes.
|
|
398
|
-
obj.indexes = obj.indexes.filter((index) => index.length > 1)
|
|
396
|
+
const indexes = parseIndices(element.coordIndex)
|
|
397
|
+
obj.indexes = indexes.filter((index) => index.length > 1)
|
|
399
398
|
}
|
|
400
399
|
// color attributes
|
|
401
400
|
if (element.colorPerVertex) {
|
|
@@ -413,7 +412,7 @@ const x3dColor = (element) => {
|
|
|
413
412
|
const obj = { definition: x3dTypes.COLOR, colors: [] }
|
|
414
413
|
|
|
415
414
|
if (element.color) {
|
|
416
|
-
const values = element.color
|
|
415
|
+
const values = parseNumbers(element.color)
|
|
417
416
|
const numvalues = values.length
|
|
418
417
|
const numcolors = Math.trunc(numvalues / 3)
|
|
419
418
|
for (let i = 0; i < numcolors; i++) {
|
|
@@ -428,7 +427,7 @@ const x3dCoordinate = (element) => {
|
|
|
428
427
|
const obj = { definition: x3dTypes.COORDINATE, points: [] }
|
|
429
428
|
|
|
430
429
|
if (element.point) {
|
|
431
|
-
const values = element.point
|
|
430
|
+
const values = parseNumbers(element.point)
|
|
432
431
|
const numvalues = values.length
|
|
433
432
|
const numpoints = Math.trunc(numvalues / 3)
|
|
434
433
|
for (let i = 0; i < numpoints; i++) {
|
|
@@ -456,7 +455,7 @@ const x3dTriangleFanSet = (element) => {
|
|
|
456
455
|
obj.ccw = element.ccw.includes('TRUE') || element.ccw.includes('true')
|
|
457
456
|
}
|
|
458
457
|
if (element.fanCount) {
|
|
459
|
-
obj.fanCount = element.fanCount
|
|
458
|
+
obj.fanCount = parseNumbers(element.fanCount)
|
|
460
459
|
}
|
|
461
460
|
obj.objects = []
|
|
462
461
|
return obj
|
|
@@ -469,7 +468,7 @@ const x3dTriangleStripSet = (element) => {
|
|
|
469
468
|
obj.ccw = element.ccw.includes('TRUE') || element.ccw.includes('true')
|
|
470
469
|
}
|
|
471
470
|
if (element.stripCount) {
|
|
472
|
-
obj.stripCount = element.stripCount
|
|
471
|
+
obj.stripCount = parseNumbers(element.stripCount)
|
|
473
472
|
}
|
|
474
473
|
obj.objects = []
|
|
475
474
|
return obj
|
|
@@ -492,7 +491,7 @@ const x3dIndexedTriangleSet = (element) => {
|
|
|
492
491
|
obj.ccw = element.ccw.includes('TRUE') || element.ccw.includes('true')
|
|
493
492
|
}
|
|
494
493
|
if (element.index) {
|
|
495
|
-
obj.index = element.index
|
|
494
|
+
obj.index = parseNumbers(element.index)
|
|
496
495
|
}
|
|
497
496
|
obj.objects = []
|
|
498
497
|
return obj
|
|
@@ -505,8 +504,8 @@ const x3dIndexedTriangleFanSet = (element) => {
|
|
|
505
504
|
obj.ccw = element.ccw.includes('TRUE') || element.ccw.includes('true')
|
|
506
505
|
}
|
|
507
506
|
if (element.index) {
|
|
508
|
-
const indexes = element.index
|
|
509
|
-
obj.fans = indexes.
|
|
507
|
+
const indexes = parseIndices(element.index)
|
|
508
|
+
obj.fans = indexes.filter((index) => index.length > 2)
|
|
510
509
|
}
|
|
511
510
|
obj.objects = []
|
|
512
511
|
return obj
|
|
@@ -520,8 +519,8 @@ const x3dIndexedTriangleStripSet = (element) => {
|
|
|
520
519
|
obj.ccw = element.ccw.includes('TRUE') || element.ccw.includes('true')
|
|
521
520
|
}
|
|
522
521
|
if (element.index) {
|
|
523
|
-
const indexes = element.index
|
|
524
|
-
obj.strips = indexes.
|
|
522
|
+
const indexes = parseIndices(element.index)
|
|
523
|
+
obj.strips = indexes.filter((index) => index.length > 2)
|
|
525
524
|
}
|
|
526
525
|
return obj
|
|
527
526
|
}
|
|
@@ -533,7 +532,7 @@ const x3dIndexedQuadSet = (element) => {
|
|
|
533
532
|
obj.ccw = element.ccw.includes('TRUE') || element.ccw.includes('true')
|
|
534
533
|
}
|
|
535
534
|
if (element.index) {
|
|
536
|
-
obj.index = element.index
|
|
535
|
+
obj.index = parseNumbers(element.index)
|
|
537
536
|
}
|
|
538
537
|
obj.objects = []
|
|
539
538
|
return obj
|
|
@@ -549,8 +548,8 @@ const x3dIndexedFaceSet = (element) => {
|
|
|
549
548
|
obj.convex = element.convex.includes('TRUE') || element.convex.includes('true')
|
|
550
549
|
}
|
|
551
550
|
if (element.coordIndex) {
|
|
552
|
-
const indexes = element.coordIndex
|
|
553
|
-
obj.faces = indexes.
|
|
551
|
+
const indexes = parseIndices(element.coordIndex)
|
|
552
|
+
obj.faces = indexes.filter((index) => index.length > 2)
|
|
554
553
|
}
|
|
555
554
|
// color attributes
|
|
556
555
|
if (element.colorPerVertex) {
|
|
@@ -559,11 +558,11 @@ const x3dIndexedFaceSet = (element) => {
|
|
|
559
558
|
if (element.colorIndex) {
|
|
560
559
|
if (obj.colorPerVertex) {
|
|
561
560
|
// indexes are provided for each VERTEX
|
|
562
|
-
const indexes = element.colorIndex
|
|
563
|
-
obj.colorIndex = indexes.
|
|
561
|
+
const indexes = parseIndices(element.colorIndex)
|
|
562
|
+
obj.colorIndex = indexes.filter((index) => index.length > 2)
|
|
564
563
|
} else {
|
|
565
564
|
// indexes are provided for each FACE
|
|
566
|
-
obj.colorIndex = element.colorIndex
|
|
565
|
+
obj.colorIndex = parseNumbers(element.colorIndex)
|
|
567
566
|
}
|
|
568
567
|
} else {
|
|
569
568
|
// reuse the indexes for the FACES
|
|
@@ -589,7 +588,7 @@ const x3dElevationGrid = (element) => {
|
|
|
589
588
|
obj.zSpacing = parseFloat(element.zSpacing)
|
|
590
589
|
}
|
|
591
590
|
if (element.height) {
|
|
592
|
-
obj.height = element.height
|
|
591
|
+
obj.height = parseNumbers(element.height)
|
|
593
592
|
}
|
|
594
593
|
if (element.ccw) {
|
|
595
594
|
obj.ccw = element.ccw.includes('TRUE') || element.ccw.includes('true')
|
|
@@ -632,14 +631,14 @@ const x3dMaterial = (element) => {
|
|
|
632
631
|
alpha = 1.0 - element.transparency
|
|
633
632
|
}
|
|
634
633
|
if (element.diffuseColor) {
|
|
635
|
-
const values = element.diffuseColor
|
|
634
|
+
const values = parseNumbers(element.diffuseColor)
|
|
636
635
|
if (values.length > 2) {
|
|
637
636
|
if (values.length < 4) values.push(alpha)
|
|
638
637
|
obj.color = values
|
|
639
638
|
}
|
|
640
639
|
}
|
|
641
640
|
if (element.emissiveColor) {
|
|
642
|
-
const values = element.emissiveColor
|
|
641
|
+
const values = parseNumbers(element.emissiveColor)
|
|
643
642
|
if (values.length > 2) {
|
|
644
643
|
if (values.length < 4) values.push(alpha)
|
|
645
644
|
obj.color = values
|
|
@@ -657,6 +656,14 @@ const x3dGroup = (element) => {
|
|
|
657
656
|
return obj
|
|
658
657
|
}
|
|
659
658
|
|
|
659
|
+
const parseNumbers = (attribute) =>
|
|
660
|
+
attribute.trim().replace(/,/g, ' ').split(/ +/).map((v) => parseFloat(v))
|
|
661
|
+
|
|
662
|
+
const parseIndices = (attribute) => {
|
|
663
|
+
const indexes = attribute.replace(/,/g, ' ').trim().split(/ -1/)
|
|
664
|
+
return indexes.map((index) => parseNumbers(index))
|
|
665
|
+
}
|
|
666
|
+
|
|
660
667
|
module.exports = {
|
|
661
668
|
x3dTypes,
|
|
662
669
|
|
package/src/parse.js
CHANGED
|
@@ -45,21 +45,6 @@ const {
|
|
|
45
45
|
x3dMaterial
|
|
46
46
|
} = require('./objects')
|
|
47
47
|
|
|
48
|
-
let x3dLast = null // last object found
|
|
49
|
-
let x3dDefinition = x3dTypes.X3D // what kind of object beinging created
|
|
50
|
-
|
|
51
|
-
// high level elements / definitions
|
|
52
|
-
const x3dObjects = [] // list of objects
|
|
53
|
-
const x3dDefs = new Map() // list of named objects
|
|
54
|
-
|
|
55
|
-
const x3dMaterials = [] // list of materials
|
|
56
|
-
const x3dTextures = [] // list of textures
|
|
57
|
-
|
|
58
|
-
const x3dLength = { factor: 1.0, name: 'meters' }
|
|
59
|
-
const x3dAngle = { factor: 1.0, name: 'radians' }
|
|
60
|
-
|
|
61
|
-
let x3dObj = null // x3d in object form
|
|
62
|
-
|
|
63
48
|
const nodeToObjectMap = {
|
|
64
49
|
X3D: x3dX3D,
|
|
65
50
|
UNIT: x3dUnit,
|
|
@@ -110,15 +95,31 @@ const getObjectId = () => ('0000' + objectId++).slice(-4)
|
|
|
110
95
|
const createX3DParser = (src, pxPmm) => {
|
|
111
96
|
// create a parser for the XML
|
|
112
97
|
const parser = new saxes.SaxesParser()
|
|
98
|
+
const x3dDefs = new Map() // list of named objects
|
|
99
|
+
let x3dLast = null // last object found
|
|
100
|
+
let x3dDefinition = x3dTypes.X3D // what kind of object beinging created
|
|
101
|
+
let x3dObj = null // x3d in object form
|
|
102
|
+
|
|
103
|
+
// high level elements / definitions
|
|
104
|
+
const x3dObjects = [] // list of objects
|
|
105
|
+
const x3dMaterials = [] // list of materials
|
|
106
|
+
const x3dTextures = [] // list of textures
|
|
107
|
+
|
|
108
|
+
const x3dLength = { factor: 1.0, name: 'meters' }
|
|
109
|
+
const x3dAngle = { factor: 1.0, name: 'radians' }
|
|
113
110
|
|
|
114
111
|
parser.on('error', (e) => {
|
|
115
|
-
console.log(
|
|
112
|
+
console.log(
|
|
113
|
+
`error: line ${e.line}, column ${e.column}, bad character [${e.c}]`
|
|
114
|
+
)
|
|
116
115
|
})
|
|
117
116
|
|
|
118
117
|
parser.on('opentag', (node) => {
|
|
119
118
|
// convert known XML tags to objects
|
|
120
119
|
const elementname = node.name.toUpperCase()
|
|
121
|
-
let obj = nodeToObjectMap[elementname]
|
|
120
|
+
let obj = nodeToObjectMap[elementname]
|
|
121
|
+
? nodeToObjectMap[elementname](node.attributes, { x3dObjects })
|
|
122
|
+
: null
|
|
122
123
|
|
|
123
124
|
if (obj) {
|
|
124
125
|
obj.id = getObjectId()
|
|
@@ -129,17 +130,23 @@ const createX3DParser = (src, pxPmm) => {
|
|
|
129
130
|
if (x3dDefs.has(objectname)) {
|
|
130
131
|
const def = x3dDefs.get(objectname)
|
|
131
132
|
if (def.definition !== obj.definition) {
|
|
132
|
-
console.log(
|
|
133
|
+
console.log(
|
|
134
|
+
`WARNING: using a definition "${objectname}" of a different type; ${obj.definition} vs ${def.definition}`
|
|
135
|
+
)
|
|
133
136
|
}
|
|
134
137
|
obj = def
|
|
135
138
|
} else {
|
|
136
|
-
console.log(
|
|
139
|
+
console.log(
|
|
140
|
+
`WARNING: definition "${objectname}" does not exist, using default for ${obj.definition}`
|
|
141
|
+
)
|
|
137
142
|
}
|
|
138
143
|
} else {
|
|
139
144
|
if (node.attributes.DEF) {
|
|
140
145
|
const objectname = node.attributes.DEF
|
|
141
146
|
if (x3dDefs.has(objectname)) {
|
|
142
|
-
console.log(
|
|
147
|
+
console.log(
|
|
148
|
+
`WARNING: redefintion of ${objectname} has been ignored`
|
|
149
|
+
)
|
|
143
150
|
} else {
|
|
144
151
|
x3dDefs.set(objectname, obj)
|
|
145
152
|
}
|
|
@@ -331,12 +338,12 @@ const createX3DParser = (src, pxPmm) => {
|
|
|
331
338
|
|
|
332
339
|
// start the parser
|
|
333
340
|
parser.write(src).close()
|
|
334
|
-
}
|
|
335
341
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
342
|
+
return {
|
|
343
|
+
x3dObj,
|
|
344
|
+
x3dMaterials,
|
|
345
|
+
x3dTextures
|
|
346
|
+
}
|
|
340
347
|
}
|
|
341
348
|
|
|
342
|
-
module.exports =
|
|
349
|
+
module.exports = createX3DParser
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
|
|
3
|
+
<X3D profile='Interchange' version='3.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance'>
|
|
4
|
+
<head>
|
|
5
|
+
<component level='2' name='TriangleSets'/>
|
|
6
|
+
<unit category='length' conversionFactor='0.001' name='millimeters'/>
|
|
7
|
+
<meta content='TriangleSets.x3d' name='title'/>
|
|
8
|
+
</head>
|
|
9
|
+
<!-- ==================== -->
|
|
10
|
+
<!-- Examples from https://x3dgraphics.com/examples/X3dForWebAuthors/Chapter13GeometryTrianglesQuadrilaterals/ -->
|
|
11
|
+
<!-- ==================== -->
|
|
12
|
+
<Scene>
|
|
13
|
+
<!-- Default Shapes -->
|
|
14
|
+
<Group>
|
|
15
|
+
|
|
16
|
+
<Shape>
|
|
17
|
+
<IndexedTriangleFanSet/>
|
|
18
|
+
</Shape>
|
|
19
|
+
|
|
20
|
+
<Shape>
|
|
21
|
+
<IndexedTriangleSet/>
|
|
22
|
+
</Shape>
|
|
23
|
+
|
|
24
|
+
<Shape>
|
|
25
|
+
<IndexedTriangleStripSet/>
|
|
26
|
+
</Shape>
|
|
27
|
+
|
|
28
|
+
<Shape>
|
|
29
|
+
<IndexedFaceSet/>
|
|
30
|
+
</Shape>
|
|
31
|
+
|
|
32
|
+
</Group>
|
|
33
|
+
<Group>
|
|
34
|
+
|
|
35
|
+
<Shape>
|
|
36
|
+
<IndexedTriangleFanSet ccw='true' colorPerVertex='true' index='18,19,20,21,22,23,24,25,26,-1,27,28,29,30,31,32,-1' normalPerVertex='true' solid='false'>
|
|
37
|
+
<Coordinate point='-4 1 3 -2 2 1.5 -3 4 0.5 -2 3 1.5 0 4 0.0 2 3 1.5 5 5 -2.5 4 3 1.5 6 4 2.0 -4 1 3 -2 2 1.0 -3 4 0.0 -2 3 1.0 0 4 0.0 2 3 1.0 5 5 -2.0 4 3 1.5 6 4 2.0 0 -2 4 1 -3 3.5 1.5 -1.5 3 0 -1 2 -.5 0 2.5 -1.5 1 3 -2 0 3.5 -3 -2 2 -3 -4 3 2 -4 -2 0 -3 -.5 1.3 -1.5 -1 4 -2 -1.5 4.2 -4.2 -1 3 -6 -.5'/>
|
|
38
|
+
<Color color='0 .8 0 0 1 1 1 0 0 1 .5 0 .8 0 1 1 1 0 .6 .3 .1 1 0 .5 0 1 .5 1 0 0 .8 0 1 1 1 0 0 1 1 1 .5 0 .6 .3 .1 1 0 .5 0 .8 0 0 1 .5 0 .8 0 0 1 1 1 0 0 1 .5 0 .8 0 1 1 1 0 .6 .3 .1 1 0 .5 0 1 .5 1 0 0 .8 0 1 1 1 0 0 1 1 1 .5 0 .6 .3 .1 1 0 .5 0 .8 0 0 1 .5'/>
|
|
39
|
+
</IndexedTriangleFanSet>
|
|
40
|
+
</Shape>
|
|
41
|
+
|
|
42
|
+
<Shape>
|
|
43
|
+
<IndexedTriangleSet ccw='true' colorPerVertex='true' index='0,1,2,3,4,5,6,7,8' normalPerVertex='true' solid='false'>
|
|
44
|
+
<Coordinate point='-4 1 3 -2 2 1.5 -3 4 0.5 -2 3 1.5 0 4 0 2 3 1.5 5 5 -2.5 4 3 1.5 6 4 2'/>
|
|
45
|
+
<Color color='0 0.8 0 0 1 1 1 0 0 1 0.5 0 0.8 0 1 1 1 0 0.6 0.3 0.1 1 0 0.5 0 1 0.5'/>
|
|
46
|
+
</IndexedTriangleSet>
|
|
47
|
+
</Shape>
|
|
48
|
+
|
|
49
|
+
<Shape>
|
|
50
|
+
<IndexedTriangleStripSet ccw='true' colorPerVertex='true' index='9,10,11,12,13,-1,14,15,16,17,-1' normalPerVertex='true' solid='false'>
|
|
51
|
+
<Coordinate point='-4 1 3 -2 2 1.5 -3 4 0.5 -2 3 1.5 0 4 0.0 2 3 1.5 5 5 -2.5 4 3 1.5 6 4 2.0 -4 1 3 -2 2 1.0 -3 4 0.0 -2 3 1.0 0 4 0.0 2 3 1.0 5 5 -2.0 4 3 1.5 6 4 2.0 0 -2 4 1 -3 3.5 1.5 -1.5 3 0 -1 2 -.5 0 2.5 -1.5 1 3 -2 0 3.5 -3 -2 2 -3 -4 3 2 -4 -2 0 -3 -.5 1.3 -1.5 -1 4 -2 -1.5 4.2 -4.2 -1 3 -6 -.5'/>
|
|
52
|
+
<Color color='0 .8 0 0 1 1 1 0 0 1 .5 0 .8 0 1 1 1 0 .6 .3 .1 1 0 .5 0 1 .5 1 0 0 .8 0 1 1 1 0 0 1 1 1 .5 0 .6 .3 .1 1 0 .5 0 .8 0 0 1 .5'/>
|
|
53
|
+
</IndexedTriangleStripSet>
|
|
54
|
+
</Shape>
|
|
55
|
+
|
|
56
|
+
<Shape>
|
|
57
|
+
<IndexedQuadSet ccw='true' colorPerVertex='true' index='0,1,2,3,4,5,6,7' normalPerVertex='true' solid='false'>
|
|
58
|
+
<Coordinate point='-6 -2 0 -1 -2 0 -1 2 0 -6 2 0 1 -2 0 6 -2 0 6 2 0 1 2 0'/>
|
|
59
|
+
<Color color='0.2 0.2 0.2 1 0.058824 0.227451 0.4 1 0.121569 0 0.007843 0.960784 0.6 0.235294 0 0.94902 1 0.380392 0.239216 1 0.886275 1 0.121569 0.964706'/>
|
|
60
|
+
</IndexedQuadSet>
|
|
61
|
+
</Shape>
|
|
62
|
+
|
|
63
|
+
<Shape>
|
|
64
|
+
<Appearance>
|
|
65
|
+
<Material ambientIntensity='0.0534211' diffuseColor='0.756863 0.729412 0.537255' emissiveColor='0.18 0.17 0.13' shininess='0.19' specularColor='0.38 0.38 0.27'/>
|
|
66
|
+
</Appearance>
|
|
67
|
+
<IndexedFaceSet colorIndex='0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,2,1,3,224,225' colorPerVertex='false' convex='false' coordIndex='0,1,2,-1,12,13,14,-1,15,16,17,-1,18,19,20,-1,21,22,23,-1,24,25,26,-1,27,28,29,-1,30,31,32,-1,33,34,35,-1,36,37,38,-1,39,40,41,-1,42,43,44,-1,45,46,47,-1,48,49,50,-1,51,52,53,-1,54,55,56,-1,57,58,59,-1,60,61,62,-1,63,64,65,-1,66,67,68,-1,69,70,71,-1,72,73,74,-1,75,76,77,-1,78,79,80,-1,81,82,83,-1,84,85,86,-1,87,88,89,-1,90,91,92,-1,93,94,95,-1,96,97,98,-1,99,100,101,-1,102,103,104,-1,105,106,107,-1,108,109,110,-1,111,112,113,-1,114,115,116,-1,117,118,119,-1,120,121,122,-1,123,124,125,-1,126,127,128,-1,129,130,131,-1,132,133,134,-1,135,136,137,-1,138,139,140,-1,141,142,143,-1,144,145,146,-1,147,148,149,-1,150,151,152,-1,153,154,155,-1,156,157,158,-1,159,160,161,-1,162,163,164,-1,165,166,167,-1,168,169,170,-1,171,172,173,-1,174,175,176,-1,177,178,179,-1,180,181,182,-1,183,184,185,-1,186,187,188,-1,189,190,191,-1,192,193,194,-1,195,196,197,-1,198,199,200,-1,201,202,203,-1,204,205,206,-1,207,208,209,-1,210,211,212,-1,213,214,215,-1,216,217,218,-1,219,220,221,-1,222,223,224,-1,225,226,227,-1,228,229,230,-1,231,232,233,-1,234,235,236,-1,237,238,239,-1,240,241,242,-1,243,244,245,-1,246,247,248,-1,249,250,251,-1,252,253,254,-1,255,256,257,-1,258,259,260,-1,261,262,263,-1,264,265,266,-1,267,268,269,-1,270,271,272,-1,273,274,275,-1,276,277,278,-1,279,280,281,-1,282,283,284,-1,285,286,287,-1,288,289,290,-1,291,292,293,-1,294,295,296,-1,297,298,299,-1,300,301,302,-1,303,304,305,-1,306,307,308,-1,309,310,311,-1,312,313,314,-1,315,316,317,-1,318,319,320,-1,321,322,323,-1,324,325,326,-1,327,328,329,-1,330,331,332,-1,333,334,335,-1,336,337,338,-1,339,340,341,-1,342,343,344,-1,345,346,347,-1,348,349,350,-1,351,352,353,-1,354,355,356,-1,357,358,359,-1,360,361,362,-1,363,364,365,-1,366,367,368,-1,369,370,371,-1,372,373,374,-1,375,376,377,-1,378,379,380,-1,381,382,383,-1,384,385,386,-1,387,388,389,-1,390,391,392,-1,393,394,395,-1,396,397,398,-1,399,400,401,-1,402,403,404,-1,405,406,407,-1,408,409,410,-1,411,412,413,-1,414,415,416,-1,417,418,419,-1,420,421,422,-1,423,424,425,-1,426,427,428,-1,429,430,431,-1,432,433,434,-1,435,436,437,-1,438,439,440,-1,441,442,443,-1,444,445,446,-1,447,448,449,-1,450,451,452,-1,453,454,455,-1,456,457,458,-1,459,460,461,-1,462,463,464,-1,465,466,467,-1,468,469,470,-1,471,472,473,-1,474,475,476,-1,477,478,479,-1,480,481,482,-1,483,484,485,-1,486,487,488,-1,489,490,491,-1,492,493,494,-1,495,496,497,-1,498,499,500,-1,501,502,503,-1,504,505,506,-1,507,508,509,-1,510,511,512,-1,513,514,515,-1,516,517,518,-1,519,520,521,-1,522,523,524,-1,525,526,527,-1,528,529,530,-1,531,532,533,-1,534,535,536,-1,537,538,539,-1,540,541,542,-1,543,544,545,-1,546,547,548,-1,549,550,551,-1,552,553,554,-1,555,556,557,-1,558,559,560,-1,561,562,563,-1,564,565,566,-1,567,568,569,-1,570,571,572,-1,573,574,575,-1,576,577,578,-1,579,580,581,-1,582,583,584,-1,585,586,587,-1,588,589,590,-1,591,592,593,-1,594,595,596,-1,597,598,599,-1,600,601,602,-1,603,604,605,-1,606,607,608,-1,609,610,611,-1,612,613,614,-1,615,616,617,-1,618,619,620,-1,621,622,623,-1,624,625,626,-1,627,628,629,-1,630,631,632,-1,633,634,635,-1,636,637,638,-1,639,640,641,-1,642,643,644,-1,645,646,647,-1,648,649,650,-1,651,652,653,-1,654,655,656,-1,657,658,659,-1,660,661,662,-1,663,664,665,-1,666,667,668,-1,669,670,671,-1,6,7,8,-1,3,4,5,-1,9,10,11,-1,672,673,674,-1,675,676,677,-1' creaseAngle='3.14159' normalIndex='0,1,2,-1,10,10,10,-1,11,11,11,-1,12,12,12,-1,13,13,13,-1,14,14,14,-1,15,16,17,-1,18,19,20,-1,21,22,23,-1,24,25,26,-1,27,27,27,-1,28,28,28,-1,29,29,29,-1,30,31,32,-1,33,34,35,-1,36,37,38,-1,39,40,41,-1,42,43,44,-1,45,46,47,-1,48,49,50,-1,51,51,51,-1,52,53,54,-1,55,56,57,-1,58,59,60,-1,61,62,63,-1,64,65,66,-1,67,67,67,-1,68,69,70,-1,71,72,73,-1,74,74,74,-1,75,75,75,-1,76,76,76,-1,77,78,79,-1,80,80,80,-1,81,82,83,-1,84,84,84,-1,85,85,85,-1,86,86,86,-1,87,87,87,-1,88,88,88,-1,89,89,89,-1,90,91,92,-1,93,94,95,-1,96,96,96,-1,97,98,99,-1,100,101,102,-1,103,104,105,-1,106,107,108,-1,109,110,111,-1,112,113,114,-1,115,115,115,-1,116,117,118,-1,119,119,119,-1,120,121,122,-1,123,124,125,-1,126,127,128,-1,129,129,129,-1,130,131,132,-1,133,134,135,-1,136,136,136,-1,137,138,139,-1,140,141,142,-1,143,143,143,-1,144,145,146,-1,147,148,149,-1,150,151,152,-1,153,154,155,-1,156,156,156,-1,157,157,157,-1,158,159,160,-1,161,162,163,-1,164,164,164,-1,165,165,165,-1,166,167,168,-1,169,170,171,-1,172,173,174,-1,175,176,177,-1,178,178,178,-1,179,179,179,-1,180,181,182,-1,183,184,185,-1,186,187,188,-1,189,189,189,-1,190,190,190,-1,191,192,193,-1,194,195,196,-1,197,197,197,-1,198,198,198,-1,199,199,199,-1,200,201,202,-1,203,204,205,-1,206,206,206,-1,207,208,209,-1,210,210,210,-1,211,211,211,-1,212,212,212,-1,213,213,213,-1,214,215,216,-1,217,218,219,-1,220,220,220,-1,221,221,221,-1,222,222,222,-1,223,224,225,-1,226,227,228,-1,229,229,229,-1,230,231,232,-1,233,234,235,-1,236,237,238,-1,239,240,241,-1,242,243,244,-1,245,246,247,-1,248,248,248,-1,249,249,249,-1,250,251,252,-1,253,254,255,-1,256,257,258,-1,259,260,261,-1,262,263,264,-1,265,265,265,-1,266,266,266,-1,267,267,267,-1,268,269,270,-1,271,272,273,-1,274,275,276,-1,277,278,279,-1,280,281,282,-1,283,284,285,-1,286,287,288,-1,289,289,289,-1,290,291,292,-1,293,294,295,-1,296,297,298,-1,299,300,301,-1,302,303,304,-1,305,305,305,-1,306,307,308,-1,309,310,311,-1,312,312,312,-1,313,313,313,-1,314,314,314,-1,315,316,317,-1,318,318,318,-1,319,320,321,-1,322,322,322,-1,323,323,323,-1,324,324,324,-1,325,325,325,-1,326,326,326,-1,327,327,327,-1,328,329,330,-1,331,332,333,-1,334,334,334,-1,335,336,337,-1,338,339,340,-1,341,342,343,-1,344,345,346,-1,347,348,349,-1,350,351,352,-1,353,353,353,-1,354,355,356,-1,357,357,357,-1,358,359,360,-1,361,362,363,-1,364,365,366,-1,367,367,367,-1,368,369,370,-1,371,372,373,-1,374,374,374,-1,375,376,377,-1,378,379,380,-1,381,381,381,-1,382,383,384,-1,385,386,387,-1,388,389,390,-1,391,392,393,-1,394,394,394,-1,395,395,395,-1,396,397,398,-1,399,400,401,-1,402,402,402,-1,403,403,403,-1,404,405,406,-1,407,408,409,-1,410,411,412,-1,413,414,415,-1,416,416,416,-1,417,417,417,-1,418,419,420,-1,421,422,423,-1,424,425,426,-1,427,427,427,-1,428,428,428,-1,429,430,431,-1,432,433,434,-1,435,435,435,-1,436,436,436,-1,437,437,437,-1,438,439,440,-1,441,442,443,-1,444,444,444,-1,445,446,447,-1,448,448,448,-1,449,449,449,-1,450,450,450,-1,451,451,451,-1,452,453,454,-1,455,456,457,-1,458,458,458,-1,459,459,459,-1,460,460,460,-1,461,462,463,-1,464,465,466,-1,467,467,467,-1,468,469,470,-1,471,472,473,-1,474,475,476,-1,477,478,479,-1,480,481,482,-1,483,484,485,-1,486,486,486,-1,487,487,487,-1,4,5,6,-1,3,3,3,-1,7,8,9,-1,488,488,488,-1,489,490,491,-1' solid='false'>
|
|
68
|
+
<Coordinate point='-0.0902426 0.707736 -0.361894 -0.126242 0.7163 -0.510588 -0.0821966 0.717949 -0.490936 1.05985e-006 0.934617 0.0504887 -0.00664806 0.898872 -0.0277972 0 0.901021 0.122661 1.05985e-006 0.934617 0.0504887 0 0.901021 0.122661 -2.03005e-006 0.90317 0.277591 1.06986e-006 1.0793 3.47475e-007 1.05985e-006 0.934617 0.0504887 -2.03005e-006 0.90317 0.277591 -0.114758 0.901562 -0.463227 -0.118379 0.85895 -0.478181 -0.098076 0.874364 -0.394307 -0.118483 0.948969 -0.478612 -0.114758 0.901562 -0.463227 -0.098076 0.874364 -0.394307 -0.148198 0.693025 -0.60134 -0.153978 0.652374 -0.625216 -0.140082 0.684348 -0.567816 -0.126187 0.716322 -0.510419 -0.148198 0.693025 -0.60134 -0.140082 0.684348 -0.567816 -0.151929 0.723428 -0.61675 -0.148198 0.693025 -0.60134 -0.126187 0.716322 -0.510419 -0.123346 0.739931 -0.0712886 -0.147796 0.734624 -0.210758 -0.142964 0.693107 -0.139234 -0.147796 0.734624 -0.210758 -0.154642 0.690461 -0.206715 -0.142964 0.693107 -0.139234 -0.142964 0.693107 -0.139234 -0.154642 0.690461 -0.206715 -0.170992 0.648327 -0.242015 -0.118464 0.756954 0.588829 -0.134253 0.756954 0.279345 -0.302092 0.706351 0.270908 -0.171744 0.724864 -0.680752 -0.227054 0.740499 -0.761237 -0.221648 0.65237 -0.934256 -0.227054 0.740499 -0.761237 -0.171744 0.724864 -0.680752 -0.156404 0.717949 -0.47297 -0.227054 0.740499 -0.761237 -0.156404 0.717949 -0.47297 -0.193516 0.738534 -0.463984 -0.193516 0.738534 -0.463984 -0.156404 0.717949 -0.47297 -0.10699 0.717949 -0.106569 -0.156404 0.717949 -0.47297 -0.0902276 0.707736 -0.361897 -0.0580738 0.70326 -0.0822888 -0.0902276 0.707736 -0.361897 -0.00919576 0.699209 -0.0271805 -0.0580738 0.70326 -0.0822888 -0.156404 0.717949 -0.47297 -0.0580737 0.70326 -0.0822888 -0.10699 0.717949 -0.106569 -0.10699 0.717949 -0.106569 -0.0580738 0.70326 -0.0822888 -0.0766211 0.707736 0.27759 -0.113414 0.724864 0.27759 -0.10699 0.717949 -0.106569 -0.0766211 0.707736 0.27759 -0.0580738 0.70326 -0.0822888 -0.00919576 0.699209 -0.0271805 -0.0352099 0.699209 0.27759 -0.00919576 0.699209 -0.0271805 -0.0030355 0.697365 0.277591 -0.0352099 0.699209 0.27759 -0.0580738 0.70326 -0.0822888 -0.0352099 0.699209 0.27759 -0.0766211 0.707736 0.27759 -0.00303552 0.697365 0.277591 -0.00303664 0.699209 0.4528 -0.0352099 0.699209 0.27759 -0.131733 0.744141 0.27759 -0.113414 0.724864 0.27759 -0.123031 0.740499 0.495402 -0.123031 0.740499 0.495402 -0.113414 0.724864 0.27759 -0.091476 0.717949 0.518391 -0.113414 0.724864 0.27759 -0.0766211 0.707736 0.27759 -0.091476 0.717949 0.518391 -0.00303936 0.724864 0.878668 -0.047258 0.717949 0.759194 -0.00303808 0.707736 0.678309 -0.0766211 0.707736 0.27759 -0.0430349 0.70326 0.495403 -0.091476 0.717949 0.518391 -0.0352099 0.699209 0.27759 -0.0430349 0.70326 0.495403 -0.0766211 0.707736 0.27759 -0.0430349 0.70326 0.495403 -0.047258 0.717949 0.759194 -0.091476 0.717949 0.518391 -0.00303808 0.707736 0.678309 -0.047258 0.717949 0.759194 -0.0430349 0.70326 0.495403 -0.00303664 0.699209 0.4528 -0.00303808 0.707736 0.678309 -0.0430349 0.70326 0.495403 -0.0352099 0.699209 0.27759 -0.00303664 0.699209 0.4528 -0.0430349 0.70326 0.495403 -0.00303936 0.724864 0.878668 -0.0430376 0.740499 0.931031 -0.047258 0.717949 0.759194 -0.0352143 0.759118 0.978427 -0.076625 0.759118 0.878668 -0.0430376 0.740499 0.931031 -0.0914776 0.738534 0.759194 -0.113416 0.759118 0.678308 -0.123031 0.740499 0.495402 -0.0914776 0.738534 0.759194 -0.123031 0.740499 0.495402 -0.091476 0.717949 0.518391 -0.076625 0.759118 0.878668 -0.113416 0.759118 0.678308 -0.0914776 0.738534 0.759194 -0.0430376 0.740499 0.931031 -0.076625 0.759118 0.878668 -0.0914776 0.738534 0.759194 -0.0430376 0.740499 0.931031 -0.0914776 0.738534 0.759194 -0.047258 0.717949 0.759194 -0.047258 0.717949 0.759194 -0.0914776 0.738534 0.759194 -0.091476 0.717949 0.518391 -0.113416 0.759118 0.678308 -0.131734 0.759118 0.452799 -0.123031 0.740499 0.495402 -0.131734 0.759118 0.452799 -0.131733 0.744141 0.27759 -0.123031 0.740499 0.495402 -0.135694 0.759118 0.27759 -0.131733 0.744141 0.27759 -0.131734 0.759118 0.452799 -0.125212 0.740499 -0.0660358 -0.193516 0.738534 -0.463984 -0.159365 0.739516 -0.265011 -0.182866 0.759118 -0.339472 -0.193516 0.738534 -0.463984 -0.125212 0.740499 -0.0660358 -0.182866 0.759118 -0.339472 -0.125212 0.740499 -0.0660358 -0.135326 0.759118 -0.00108072 -0.125212 0.740499 -0.0660358 -0.10699 0.717949 -0.106569 -0.113414 0.724864 0.27759 -0.135326 0.759118 -0.00108072 -0.125212 0.740499 -0.0660358 -0.131733 0.744141 0.27759 -0.131733 0.744141 0.27759 -0.125212 0.740499 -0.0660358 -0.113414 0.724864 0.27759 -0.135694 0.759118 0.27759 -0.135326 0.759118 -0.00108072 -0.131733 0.744141 0.27759 -0.182866 0.759118 -0.339472 -0.241643 0.759118 -0.666992 -0.193516 0.738534 -0.463984 -0.241643 0.759118 -0.666992 -0.227054 0.740499 -0.761237 -0.193516 0.738534 -0.463984 -0.235296 0.759118 -0.842319 -0.227054 0.740499 -0.761237 -0.241643 0.759118 -0.666992 -0.235296 0.759118 -0.842319 -0.221648 0.65237 -0.934256 -0.227054 0.740499 -0.761237 -0.235296 0.759118 -0.842319 -0.211867 0.759118 -0.884567 -0.221648 0.65237 -0.934256 -0.00304013 0.759118 0.999996 -0.0352143 0.759118 0.978427 -0.00304 0.744141 0.978427 -0.00304 0.744141 0.978427 -0.0430376 0.740499 0.931031 -0.00303936 0.724864 0.878668 -0.00304 0.744141 0.978427 -0.0352143 0.759118 0.978427 -0.0430376 0.740499 0.931031 -0.131733 0.794038 0.27759 -0.135326 0.759118 -0.00108072 -0.135694 0.759118 0.27759 -0.125212 0.80253 -0.0660358 -0.135326 0.759118 -0.00108072 -0.131733 0.794038 0.27759 -0.125212 0.80253 -0.0660358 -0.182866 0.759118 -0.339472 -0.135326 0.759118 -0.00108072 -0.193516 0.807112 -0.463984 -0.182866 0.759118 -0.339472 -0.125212 0.80253 -0.0660358 -0.193516 0.807112 -0.463984 -0.241643 0.759118 -0.666992 -0.182866 0.759118 -0.339472 -0.193516 0.807112 -0.463984 -0.227054 0.80253 -0.761237 -0.241643 0.759118 -0.666992 -0.246206 1.14936 -1.059 -0.227054 0.80253 -0.761237 -0.171744 0.838984 -0.680752 -0.227054 0.80253 -0.761237 -0.235296 0.759118 -0.842323 -0.241643 0.759118 -0.666992 -0.246206 1.14936 -1.059 -0.235296 0.759118 -0.842323 -0.227054 0.80253 -0.761237 -0.246206 1.14936 -1.059 -0.211867 0.759118 -0.884567 -0.235296 0.759118 -0.842323 -0.113414 0.838984 0.27759 -0.125212 0.80253 -0.0660358 -0.131733 0.794038 0.27759 -0.10699 0.855105 -0.106569 -0.125212 0.80253 -0.0660358 -0.113414 0.838984 0.27759 -0.10699 0.855105 -0.106569 -0.193516 0.807112 -0.463984 -0.125212 0.80253 -0.0660358 -0.156404 0.855105 -0.47297 -0.193516 0.807112 -0.463984 -0.10699 0.855105 -0.106569 -0.156404 0.855105 -0.47297 -0.227054 0.80253 -0.761237 -0.193516 0.807112 -0.463984 -0.156404 0.855105 -0.47297 -0.171744 0.838984 -0.680752 -0.227054 0.80253 -0.761237 -0.076621 0.878917 0.27759 -0.10699 0.855105 -0.106569 -0.113414 0.838984 0.27759 -0.0580738 0.889352 -0.0822888 -0.10699 0.855105 -0.106569 -0.076621 0.878917 0.27759 -0.0580738 0.889352 -0.0822888 -0.156404 0.855105 -0.47297 -0.10699 0.855105 -0.106569 -0.0580738 0.889352 -0.0822888 -0.0902276 0.878917 -0.361897 -0.156404 0.855105 -0.47297 -0.00919576 0.898799 -0.0271805 -0.0902276 0.878917 -0.361897 -0.0580738 0.889352 -0.0822888 -0.0352099 0.898799 0.27759 -0.0580738 0.889352 -0.0822888 -0.076621 0.878917 0.27759 -0.00919576 0.898799 -0.0271805 -0.0580738 0.889352 -0.0822888 -0.0352099 0.898799 0.27759 -0.00919576 0.898799 -0.0271805 -0.0352099 0.898799 0.27759 -0.0030355 0.903097 0.277591 -0.00303999 0.794038 0.978427 -0.0352143 0.759118 0.978427 -0.00304013 0.759118 0.999996 -0.00303999 0.794038 0.978427 -0.0430376 0.80253 0.931031 -0.0352143 0.759118 0.978427 -0.0352143 0.759118 0.978427 -0.0430376 0.80253 0.931031 -0.076625 0.759118 0.878668 -0.0430376 0.80253 0.931031 -0.0914776 0.807112 0.759194 -0.076625 0.759118 0.878668 -0.076625 0.759118 0.878668 -0.0914776 0.807112 0.759194 -0.113416 0.759118 0.678308 -0.0914776 0.807112 0.759194 -0.123031 0.80253 0.495402 -0.113416 0.759118 0.678308 -0.123031 0.80253 0.495402 -0.131734 0.759118 0.452799 -0.113416 0.759118 0.678308 -0.123031 0.80253 0.495402 -0.131733 0.794038 0.27759 -0.131734 0.759118 0.452799 -0.131733 0.794038 0.27759 -0.135694 0.759118 0.27759 -0.131734 0.759118 0.452799 -0.00303999 0.794038 0.978427 -0.00303936 0.838984 0.878668 -0.0430376 0.80253 0.931031 -0.00303936 0.838984 0.878668 -0.047258 0.855105 0.759194 -0.0430376 0.80253 0.931031 -0.0430376 0.80253 0.931031 -0.047258 0.855105 0.759194 -0.0914776 0.807112 0.759194 -0.047258 0.855105 0.759194 -0.091476 0.855105 0.518391 -0.0914776 0.807112 0.759194 -0.091476 0.855105 0.518391 -0.123031 0.80253 0.495402 -0.0914776 0.807112 0.759194 -0.091476 0.855105 0.518391 -0.113414 0.838984 0.27759 -0.123031 0.80253 0.495402 -0.113414 0.838984 0.27759 -0.131733 0.794038 0.27759 -0.123031 0.80253 0.495402 -0.00303808 0.878917 0.678309 -0.047258 0.855105 0.759194 -0.00303936 0.838984 0.878668 -0.00303808 0.878917 0.678309 -0.0430349 0.889352 0.495403 -0.047258 0.855105 0.759194 -0.0430349 0.889352 0.495403 -0.091476 0.855105 0.518391 -0.047258 0.855105 0.759194 -0.0430349 0.889352 0.495403 -0.076621 0.878917 0.27759 -0.091476 0.855105 0.518391 -0.076621 0.878917 0.27759 -0.113414 0.838984 0.27759 -0.091476 0.855105 0.518391 -0.00303808 0.878917 0.678309 -0.00303664 0.898799 0.4528 -0.0430349 0.889352 0.495403 -0.00303664 0.898799 0.4528 -0.0352099 0.898799 0.27759 -0.0430349 0.889352 0.495403 -0.0352099 0.898799 0.27759 -0.076621 0.878917 0.27759 -0.0430349 0.889352 0.495403 -0.00303551 0.903097 0.277591 -0.0352099 0.898799 0.27759 -0.00303664 0.898799 0.4528 -0.126225 0.85895 -0.510592 -0.171744 0.838984 -0.680752 -0.156404 0.855105 -0.47297 -0.0902276 0.878917 -0.361897 -0.126225 0.85895 -0.510592 -0.156404 0.855105 -0.47297 -0.159365 0.739516 -0.265011 -0.193516 0.738534 -0.463984 -0.10699 0.717949 -0.106569 -0.125212 0.740499 -0.0660358 -0.159365 0.739516 -0.265011 -0.10699 0.717949 -0.106569 -0.171744 0.724864 -0.680752 -0.126225 0.7163 -0.510592 -0.156404 0.717949 -0.47297 -0.156404 0.717949 -0.47297 -0.126225 0.7163 -0.510592 -0.0902276 0.707736 -0.361897 0.0584968 0.693107 -0.188007 0.0300801 0.734624 -0.253822 0.0721283 0.739931 -0.118612 0.0584968 0.693107 -0.188007 0.0380172 0.690461 -0.253357 0.0300801 0.734624 -0.253822 0.036411 0.648327 -0.292226 0.0380172 0.690461 -0.253357 0.0584968 0.693107 -0.188007 0.296012 0.706351 0.270908 0.128173 0.756954 0.279345 0.112384 0.756954 0.588829 -0.221672 0.65237 -0.934251 -0.151089 0.740499 -0.776192 -0.171766 0.724864 -0.680748 -0.0821966 0.717949 -0.490936 -0.171766 0.724864 -0.680748 -0.151089 0.740499 -0.776192 -0.0450844 0.738534 -0.49992 -0.0821966 0.717949 -0.490936 -0.151089 0.740499 -0.776192 0.0414473 0.717949 -0.142505 -0.0821966 0.717949 -0.490936 -0.0450844 0.738534 -0.49992 0.00905313 0.70326 -0.0985401 -0.0902426 0.707736 -0.361894 -0.0821966 0.717949 -0.490936 0.00905313 0.70326 -0.0985401 -0.00920661 0.699209 -0.0271778 -0.0902426 0.707736 -0.361894 0.0414473 0.717949 -0.142505 0.00905313 0.70326 -0.0985401 -0.0821966 0.717949 -0.490936 0.0705411 0.707736 0.27759 0.00905313 0.70326 -0.0985401 0.0414473 0.717949 -0.142505 0.0705411 0.707736 0.27759 0.0414473 0.717949 -0.142505 0.107334 0.724864 0.27759 0.0291299 0.699209 0.27759 -0.00920661 0.699209 -0.0271778 0.00905313 0.70326 -0.0985401 0.0291299 0.699209 0.27759 -0.00304449 0.697365 0.277591 -0.00920661 0.699209 -0.0271778 0.0705411 0.707736 0.27759 0.0291299 0.699209 0.27759 0.00905313 0.70326 -0.0985401 0.0291299 0.699209 0.27759 -0.00304335 0.699209 0.4528 -0.00304447 0.697365 0.277591 0.116951 0.740499 0.495402 0.107334 0.724864 0.27759 0.125653 0.744141 0.27759 0.085396 0.717949 0.518391 0.107334 0.724864 0.27759 0.116951 0.740499 0.495402 0.085396 0.717949 0.518391 0.0705411 0.707736 0.27759 0.107334 0.724864 0.27759 -0.00304191 0.707736 0.678309 0.041178 0.717949 0.759194 -0.00304063 0.724864 0.878668 0.085396 0.717949 0.518391 0.0369549 0.70326 0.495403 0.0705411 0.707736 0.27759 0.0705411 0.707736 0.27759 0.0369549 0.70326 0.495403 0.0291299 0.699209 0.27759 0.085396 0.717949 0.518391 0.041178 0.717949 0.759194 0.0369549 0.70326 0.495403 0.0369549 0.70326 0.495403 0.041178 0.717949 0.759194 -0.00304191 0.707736 0.678309 0.0369549 0.70326 0.495403 -0.00304191 0.707736 0.678309 -0.00304335 0.699209 0.4528 0.0369549 0.70326 0.495403 -0.00304335 0.699209 0.4528 0.0291299 0.699209 0.27759 0.041178 0.717949 0.759194 0.0369577 0.740499 0.931031 -0.00304063 0.724864 0.878668 0.0369577 0.740499 0.931031 0.070545 0.759118 0.878668 0.0291344 0.759118 0.978427 0.116951 0.740499 0.495402 0.107336 0.759118 0.678308 0.0853976 0.738534 0.759194 0.085396 0.717949 0.518391 0.116951 0.740499 0.495402 0.0853976 0.738534 0.759194 0.0853976 0.738534 0.759194 0.107336 0.759118 0.678308 0.070545 0.759118 0.878668 0.0853976 0.738534 0.759194 0.070545 0.759118 0.878668 0.0369577 0.740499 0.931031 0.041178 0.717949 0.759194 0.0853976 0.738534 0.759194 0.0369577 0.740499 0.931031 0.085396 0.717949 0.518391 0.0853976 0.738534 0.759194 0.041178 0.717949 0.759194 0.116951 0.740499 0.495402 0.125654 0.759118 0.452799 0.107336 0.759118 0.678308 0.116951 0.740499 0.495402 0.125653 0.744141 0.27759 0.125654 0.759118 0.452799 0.125654 0.759118 0.452799 0.125653 0.744141 0.27759 0.129614 0.759118 0.27759 0.0155534 0.739516 -0.307358 -0.0450844 0.738534 -0.49992 0.0761915 0.740499 -0.114795 0.0761915 0.740499 -0.114795 -0.0450844 0.738534 -0.49992 0.00239428 0.759118 -0.384322 0.0988058 0.759118 -0.053328 0.0761915 0.740499 -0.114795 0.00239428 0.759118 -0.384322 0.107334 0.724864 0.27759 0.0414473 0.717949 -0.142505 0.0761915 0.740499 -0.114795 0.125653 0.744141 0.27759 0.0761915 0.740499 -0.114795 0.0988058 0.759118 -0.053328 0.107334 0.724864 0.27759 0.0761915 0.740499 -0.114795 0.125653 0.744141 0.27759 0.125653 0.744141 0.27759 0.0988058 0.759118 -0.053328 0.129614 0.759118 0.27759 -0.0450844 0.738534 -0.49992 -0.101867 0.759118 -0.694509 0.00239428 0.759118 -0.384322 -0.0450844 0.738534 -0.49992 -0.151089 0.740499 -0.776192 -0.101867 0.759118 -0.694509 -0.101867 0.759118 -0.694509 -0.151089 0.740499 -0.776192 -0.174195 0.759118 -0.854348 -0.151089 0.740499 -0.776192 -0.221672 0.65237 -0.934251 -0.174195 0.759118 -0.854348 -0.221672 0.65237 -0.934251 -0.21189 0.759118 -0.884562 -0.174195 0.759118 -0.854348 -0.00303999 0.744141 0.978427 0.0291344 0.759118 0.978427 -0.00303985 0.759118 0.999996 -0.00304063 0.724864 0.878668 0.0369577 0.740499 0.931031 -0.00303999 0.744141 0.978427 0.0369577 0.740499 0.931031 0.0291344 0.759118 0.978427 -0.00303999 0.744141 0.978427 0.129614 0.759118 0.27759 0.0988058 0.759118 -0.053328 0.125653 0.794038 0.27759 0.125653 0.794038 0.27759 0.0988058 0.759118 -0.053328 0.0761915 0.80253 -0.114795 0.0988058 0.759118 -0.053328 0.00239428 0.759118 -0.384322 0.0761915 0.80253 -0.114795 0.0761915 0.80253 -0.114795 0.00239428 0.759118 -0.384322 -0.0450844 0.807112 -0.49992 0.00239428 0.759118 -0.384322 -0.101867 0.759118 -0.694509 -0.0450844 0.807112 -0.49992 -0.101867 0.759118 -0.694509 -0.151089 0.80253 -0.776192 -0.0450844 0.807112 -0.49992 -0.171766 0.838984 -0.680748 -0.151089 0.80253 -0.776192 -0.246233 1.14936 -1.05901 -0.101867 0.759118 -0.694509 -0.174196 0.759118 -0.854351 -0.151089 0.80253 -0.776192 -0.151089 0.80253 -0.776192 -0.174196 0.759118 -0.854351 -0.246233 1.14936 -1.05901 -0.174196 0.759118 -0.854351 -0.21189 0.759118 -0.884562 -0.246233 1.14936 -1.05901 0.125653 0.794038 0.27759 0.0761915 0.80253 -0.114795 0.107334 0.838984 0.27759 0.107334 0.838984 0.27759 0.0761915 0.80253 -0.114795 0.0414473 0.855105 -0.142505 0.0761915 0.80253 -0.114795 -0.0450844 0.807112 -0.49992 0.0414473 0.855105 -0.142505 0.0414473 0.855105 -0.142505 -0.0450844 0.807112 -0.49992 -0.0821966 0.855105 -0.490936 -0.0450844 0.807112 -0.49992 -0.151089 0.80253 -0.776192 -0.0821966 0.855105 -0.490936 -0.151089 0.80253 -0.776192 -0.171766 0.838984 -0.680748 -0.0821966 0.855105 -0.490936 0.107334 0.838984 0.27759 0.0414473 0.855105 -0.142505 0.070541 0.878917 0.27759 0.070541 0.878917 0.27759 0.0414473 0.855105 -0.142505 0.00905313 0.889352 -0.0985401 0.0414473 0.855105 -0.142505 -0.0821966 0.855105 -0.490936 0.00905313 0.889352 -0.0985401 -0.0821966 0.855105 -0.490936 -0.0902426 0.878917 -0.361894 0.00905313 0.889352 -0.0985401 0.00905313 0.889352 -0.0985401 -0.0902426 0.878917 -0.361894 -0.00920661 0.898799 -0.0271778 0.070541 0.878917 0.27759 0.00905313 0.889352 -0.0985401 0.0291299 0.898799 0.27759 0.0291299 0.898799 0.27759 0.00905313 0.889352 -0.0985401 -0.00920661 0.898799 -0.0271778 -0.00304449 0.903097 0.277591 0.0291299 0.898799 0.27759 -0.00920661 0.898799 -0.0271778 -0.00303986 0.759118 0.999996 0.0291344 0.759118 0.978427 -0.00303999 0.794038 0.978427 0.0291344 0.759118 0.978427 0.0369577 0.80253 0.931031 -0.00303999 0.794038 0.978427 0.070545 0.759118 0.878668 0.0369577 0.80253 0.931031 0.0291344 0.759118 0.978427 0.070545 0.759118 0.878668 0.0853976 0.807112 0.759194 0.0369577 0.80253 0.931031 0.107336 0.759118 0.678308 0.0853976 0.807112 0.759194 0.070545 0.759118 0.878668 0.107336 0.759118 0.678308 0.116951 0.80253 0.495402 0.0853976 0.807112 0.759194 0.107336 0.759118 0.678308 0.125654 0.759118 0.452799 0.116951 0.80253 0.495402 0.125654 0.759118 0.452799 0.125653 0.794038 0.27759 0.116951 0.80253 0.495402 0.125654 0.759118 0.452799 0.129614 0.759118 0.27759 0.125653 0.794038 0.27759 0.0369577 0.80253 0.931031 -0.00304063 0.838984 0.878668 -0.00303999 0.794038 0.978427 0.0369577 0.80253 0.931031 0.041178 0.855105 0.759194 -0.00304063 0.838984 0.878668 0.0853976 0.807112 0.759194 0.041178 0.855105 0.759194 0.0369577 0.80253 0.931031 0.0853976 0.807112 0.759194 0.085396 0.855105 0.518391 0.041178 0.855105 0.759194 0.0853976 0.807112 0.759194 0.116951 0.80253 0.495402 0.085396 0.855105 0.518391 0.116951 0.80253 0.495402 0.107334 0.838984 0.27759 0.085396 0.855105 0.518391 0.116951 0.80253 0.495402 0.125653 0.794038 0.27759 0.107334 0.838984 0.27759 -0.00304063 0.838984 0.878668 0.041178 0.855105 0.759194 -0.00304191 0.878917 0.678309 0.041178 0.855105 0.759194 0.0369549 0.889352 0.495403 -0.00304191 0.878917 0.678309 0.041178 0.855105 0.759194 0.085396 0.855105 0.518391 0.0369549 0.889352 0.495403 0.085396 0.855105 0.518391 0.070541 0.878917 0.27759 0.0369549 0.889352 0.495403 0.085396 0.855105 0.518391 0.107334 0.838984 0.27759 0.070541 0.878917 0.27759 0.0369549 0.889352 0.495403 -0.00304335 0.898799 0.4528 -0.00304191 0.878917 0.678309 0.0369549 0.889352 0.495403 0.0291299 0.898799 0.27759 -0.00304335 0.898799 0.4528 0.0369549 0.889352 0.495403 0.070541 0.878917 0.27759 0.0291299 0.898799 0.27759 -0.00304335 0.898799 0.4528 0.0291299 0.898799 0.27759 -0.00304448 0.903097 0.277591 -0.0821966 0.855105 -0.490936 -0.171766 0.838984 -0.680748 -0.126242 0.85895 -0.510588 -0.0821966 0.855105 -0.490936 -0.126242 0.85895 -0.510588 -0.0902426 0.878917 -0.361894 0.0414473 0.717949 -0.142505 -0.0450844 0.738534 -0.49992 0.0155534 0.739516 -0.307358 0.0414473 0.717949 -0.142505 0.0155534 0.739516 -0.307358 0.0761915 0.740499 -0.114795 -0.0821966 0.717949 -0.490936 -0.126242 0.7163 -0.510588 -0.171766 0.724864 -0.680748 -0.00303241 0.934544 0.0504887 -0.0026253 0.898799 -0.0279467 -0.00303347 0.900948 0.122661 -0.00303241 0.934544 0.0504887 -0.00303347 0.900948 0.122661 -0.0030355 0.903097 0.277591'/>
|
|
69
|
+
<Color color='0.756863 0.729412 0.537255 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.936863 0.899412 0.667255 0.697647 0.487647 0.377059 0.697647 0.487647 0.377059'/>
|
|
70
|
+
</IndexedFaceSet>
|
|
71
|
+
</Shape>
|
|
72
|
+
|
|
73
|
+
<Shape>
|
|
74
|
+
<IndexedFaceSet coordIndex='0, 1, 2, 3' solid='false' texCoordIndex='0, 1, 2, 3'>
|
|
75
|
+
<TextureCoordinate point='0.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0'/>
|
|
76
|
+
<Coordinate point='-1.5 0.0 0.0 1.5 0.0 0.0 1.5 3.0 0.0 -1.5 3.0 0.0'/>
|
|
77
|
+
</IndexedFaceSet>
|
|
78
|
+
</Shape>
|
|
79
|
+
|
|
80
|
+
</Group>
|
|
81
|
+
</Scene>
|
|
82
|
+
</X3D>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
|
|
3
|
+
<X3D profile='Interchange' version='3.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance'>
|
|
4
|
+
<head>
|
|
5
|
+
<component level='2' name='TriangleSets'/>
|
|
6
|
+
<unit category='length' conversionFactor='0.001' name='millimeters'/>
|
|
7
|
+
<meta content='TriangleSets.x3d' name='title'/>
|
|
8
|
+
</head>
|
|
9
|
+
<!-- ==================== -->
|
|
10
|
+
<Scene>
|
|
11
|
+
<!-- Default Shapes -->
|
|
12
|
+
<Group>
|
|
13
|
+
<Shape>
|
|
14
|
+
<TriangleFanSet/>
|
|
15
|
+
</Shape>
|
|
16
|
+
<Shape>
|
|
17
|
+
<TriangleSet/>
|
|
18
|
+
</Shape>
|
|
19
|
+
<Shape>
|
|
20
|
+
<TriangleStripSet/>
|
|
21
|
+
</Shape>
|
|
22
|
+
</Group>
|
|
23
|
+
<Group>
|
|
24
|
+
<Shape containerField='shape'>
|
|
25
|
+
<Appearance>
|
|
26
|
+
<Material emissiveColor='0.0 1.0 0.0'/>
|
|
27
|
+
</Appearance>
|
|
28
|
+
<TriangleSet ccw='true' colorPerVertex='true' normalPerVertex='true' solid='true'>
|
|
29
|
+
<Coordinate point='-10.0 0.0 10.0, 10.0 0.0 10.0, 10.0 0.0 -10.0, -10.0 0.0 10.0, 10.0 0.0 -10.0, -10.0 0.0 -10.0'/>
|
|
30
|
+
</TriangleSet>
|
|
31
|
+
</Shape>
|
|
32
|
+
<Shape>
|
|
33
|
+
<TriangleFanSet ccw='true' colorPerVertex='false' fanCount='6 6' normalPerVertex='true' solid='false'>
|
|
34
|
+
<Coordinate point='0 0 0, -.5 -2 .5, -1.5 -2 1, -2.5 -1.5 0.5, -2.5 -.5 0, -2.5 1 .5, 0 0 0, -2.5 1 .5, .5 2 0, 1.5 1.5 .5, 2.5 .5 0, -.5 -2 .5'/>
|
|
35
|
+
<Color color='0.5 0.1 0.5, 0.8 0.3 0.8'/>
|
|
36
|
+
</TriangleFanSet>
|
|
37
|
+
</Shape>
|
|
38
|
+
<Shape>
|
|
39
|
+
<TriangleStripSet ccw='true' colorPerVertex='true' normalPerVertex='true' solid='false' stripCount='13'>
|
|
40
|
+
<Coordinate point='-4.0 -1.0 -.5, -4.5 -2.0 -.5, -3.0 -.5 0, -2.5 -1.5 -.5, -2.0 -.5 -1, -1.5 -1.5 -.5, -.5 .5 -.5, 0 0 0, 1 .5 -.5, 1.5 -2.0 -1, 2.5 -2.0 -.5, 2.5 -2.5 -.5, 3.5 -2.0 -1.0,'/>
|
|
41
|
+
</TriangleStripSet>
|
|
42
|
+
<Appearance>
|
|
43
|
+
<Material diffuseColor='0.5 0.5 0.5'/>
|
|
44
|
+
</Appearance>
|
|
45
|
+
</Shape>
|
|
46
|
+
<Shape>
|
|
47
|
+
<QuadSet ccw='true' colorPerVertex='true' normalPerVertex='true' solid='false'>
|
|
48
|
+
<Coordinate point='-6 -2 0, -1 -2 0, -1 2 0, -6 2 0, 1 -2 0, 6 -2 0, 6 2 0, 1 2 0'/>
|
|
49
|
+
<Color color='0.2 0.2 0.2, 1 0.058824 0.227451, 0.4 1 0.121569, 0 0.007843 0.960784, 0.6 0.235294 0, 0.94902 1 0.380392, 0.239216 1 0.886275, 1 0.121569 0.964706'/>
|
|
50
|
+
</QuadSet>
|
|
51
|
+
</Shape>
|
|
52
|
+
</Group>
|
|
53
|
+
</Scene>
|
|
54
|
+
</X3D>
|
|
@@ -92,6 +92,19 @@ test('deserialize X3D 3D triangle sets to JSCAD geometry', (t) => {
|
|
|
92
92
|
t.true(geometries.geom3.isA(observed[3]))
|
|
93
93
|
})
|
|
94
94
|
|
|
95
|
+
test('deserialize X3D 3D triangle sets with comma delimiters to JSCAD geometry', (t) => {
|
|
96
|
+
const inputPath = path.resolve(samplesPath, 'tests/TriangleSets_CommaMF.x3d')
|
|
97
|
+
const inputFile = fs.readFileSync(inputPath)
|
|
98
|
+
|
|
99
|
+
const observed = deserializer.deserialize({ output: 'geometry', addMetaData: false }, inputFile)
|
|
100
|
+
t.true(Array.isArray(observed))
|
|
101
|
+
t.is(observed.length, 4)
|
|
102
|
+
t.true(geometries.geom3.isA(observed[0]))
|
|
103
|
+
t.true(geometries.geom3.isA(observed[1]))
|
|
104
|
+
t.true(geometries.geom3.isA(observed[2]))
|
|
105
|
+
t.true(geometries.geom3.isA(observed[3]))
|
|
106
|
+
})
|
|
107
|
+
|
|
95
108
|
test('deserialize X3D 3D transforms to JSCAD geometry', (t) => {
|
|
96
109
|
const inputPath = path.resolve(samplesPath, 'tests/Transforms.x3d')
|
|
97
110
|
const inputFile = fs.readFileSync(inputPath)
|
|
@@ -120,6 +133,21 @@ test('deserialize X3D 3D indexed triangle sets to JSCAD geometry', (t) => {
|
|
|
120
133
|
t.true(geometries.geom3.isA(observed[5]))
|
|
121
134
|
})
|
|
122
135
|
|
|
136
|
+
test('deserialize X3D 3D indexed triangle sets with comma delimiters to JSCAD geometry', (t) => {
|
|
137
|
+
const inputPath = path.resolve(samplesPath, 'tests/IndexedTriangleSets_CommaMF.x3d')
|
|
138
|
+
const inputFile = fs.readFileSync(inputPath)
|
|
139
|
+
|
|
140
|
+
const observed = deserializer.deserialize({ output: 'geometry', addMetaData: false }, inputFile)
|
|
141
|
+
t.true(Array.isArray(observed))
|
|
142
|
+
t.is(observed.length, 6)
|
|
143
|
+
t.true(geometries.geom3.isA(observed[0]))
|
|
144
|
+
t.true(geometries.geom3.isA(observed[1]))
|
|
145
|
+
t.true(geometries.geom3.isA(observed[2]))
|
|
146
|
+
t.true(geometries.geom3.isA(observed[3]))
|
|
147
|
+
t.true(geometries.geom3.isA(observed[4]))
|
|
148
|
+
t.true(geometries.geom3.isA(observed[5]))
|
|
149
|
+
})
|
|
150
|
+
|
|
123
151
|
test('deserialize X3D 3D groups to JSCAD geometry', (t) => {
|
|
124
152
|
const inputPath = path.resolve(samplesPath, 'tests/Groups.x3d')
|
|
125
153
|
const inputFile = fs.readFileSync(inputPath)
|
package/tests/translate.test.js
CHANGED
|
@@ -81,6 +81,19 @@ test('deserialize X3D 3D triangle sets to JSCAD script', (t) => {
|
|
|
81
81
|
t.is(countOf('applyTransform', observed), 1)
|
|
82
82
|
})
|
|
83
83
|
|
|
84
|
+
test('deserialize X3D 3D triangle sets with comma delimiters to JSCAD script', (t) => {
|
|
85
|
+
const inputPath = path.resolve(samplesPath, 'tests/TriangleSets_CommaMF.x3d')
|
|
86
|
+
const inputFile = fs.readFileSync(inputPath)
|
|
87
|
+
|
|
88
|
+
const observed = deserializer.deserialize({ output: 'script', addMetaData: false }, inputFile)
|
|
89
|
+
t.is(countOf('createObjects', observed), 18)
|
|
90
|
+
t.is(countOf('points', observed), 12)
|
|
91
|
+
t.is(countOf('faces', observed), 12)
|
|
92
|
+
t.is(countOf('orientation', observed), 8)
|
|
93
|
+
t.is(countOf('primitives.polyhedron', observed), 4)
|
|
94
|
+
t.is(countOf('applyTransform', observed), 1)
|
|
95
|
+
})
|
|
96
|
+
|
|
84
97
|
test('deserialize X3D 3D transforms to JSCAD script', (t) => {
|
|
85
98
|
const inputPath = path.resolve(samplesPath, 'tests/Transforms.x3d')
|
|
86
99
|
const inputFile = fs.readFileSync(inputPath)
|
|
@@ -104,6 +117,19 @@ test('deserialize X3D 3D indexed triangle sets to JSCAD script', (t) => {
|
|
|
104
117
|
t.is(countOf('applyTransform', observed), 1)
|
|
105
118
|
})
|
|
106
119
|
|
|
120
|
+
test('deserialize X3D 3D indexed triangle sets with comma delimiters to JSCAD script', (t) => {
|
|
121
|
+
const inputPath = path.resolve(samplesPath, 'tests/IndexedTriangleSets_CommaMF.x3d')
|
|
122
|
+
const inputFile = fs.readFileSync(inputPath)
|
|
123
|
+
|
|
124
|
+
const observed = deserializer.deserialize({ output: 'script', addMetaData: false }, inputFile)
|
|
125
|
+
t.is(countOf('createObjects', observed), 24)
|
|
126
|
+
t.is(countOf('points', observed), 18)
|
|
127
|
+
t.is(countOf('faces', observed), 20)
|
|
128
|
+
t.is(countOf('orientation', observed), 12)
|
|
129
|
+
t.is(countOf('primitives.polyhedron', observed), 6)
|
|
130
|
+
t.is(countOf('applyTransform', observed), 1)
|
|
131
|
+
})
|
|
132
|
+
|
|
107
133
|
test('deserialize X3D 3D groups to JSCAD script', (t) => {
|
|
108
134
|
const inputPath = path.resolve(samplesPath, 'tests/Groups.x3d')
|
|
109
135
|
const inputFile = fs.readFileSync(inputPath)
|