@jscad/x3d-deserializer 2.2.5 → 2.2.6

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 CHANGED
@@ -3,6 +3,20 @@
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.6](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/x3d-deserializer@2.2.5...@jscad/x3d-deserializer@2.2.6) (2024-02-18)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **x3d-deserializer:** corrected to accept commas as MF value delimiters ([03a1145](https://github.com/jscad/OpenJSCAD.org/commit/03a114543303c17afc50908cdc0946a38197058d))
12
+
13
+
14
+
15
+
16
+
17
+ - allow commas as delimiter in MF fields
18
+
19
+
6
20
  ## [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
21
 
8
22
  **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.5",
3
+ "version": "2.2.6",
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.0",
30
+ "@jscad/modeling": "2.12.1",
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": "e269f212db5a00cda740d2f7ad3e5206d1eb839f"
37
+ "gitHead": "e07bb27d61f638348c73cc1383dfb5339060a02a"
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ -1/)
397
- obj.indexes = indexes.map((index) => index.trim().split(/ +/).map((v) => parseFloat(v)))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ -1/)
509
- obj.fans = indexes.map((index) => index.trim().split(/ +/).map((v) => parseFloat(v))).filter((index) => index.length > 2)
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.trim().split(/ -1/)
524
- obj.strips = indexes.map((index) => index.trim().split(/ +/).map((v) => parseFloat(v))).filter((index) => index.length > 2)
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ -1/)
553
- obj.faces = indexes.map((index) => index.trim().split(/ +/).map((v) => parseFloat(v))).filter((index) => index.length > 2)
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.trim().split(/ -1/)
563
- obj.colorIndex = indexes.map((index) => index.trim().split(/ +/).map((v) => parseFloat(v))).filter((index) => index.length > 2)
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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.trim().split(/ +/).map((v) => parseFloat(v))
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
 
@@ -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)
@@ -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)