@jscad/modeling 3.0.1-alpha.0 → 3.0.3-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/jscad-modeling.es.js +2 -2
  3. package/dist/jscad-modeling.min.js +2 -2
  4. package/package.json +2 -2
  5. package/src/colors/colorize.test.js +1 -1
  6. package/src/geometries/geom2/index.d.ts +0 -2
  7. package/src/geometries/geom2/index.js +0 -2
  8. package/src/geometries/geom3/applyTransforms.test.js +2 -2
  9. package/src/geometries/geom3/clone.test.js +2 -2
  10. package/src/geometries/geom3/create.js +1 -9
  11. package/src/geometries/geom3/{fromPoints.d.ts → fromVertices.d.ts} +1 -1
  12. package/src/geometries/geom3/{fromPoints.js → fromVertices.js} +3 -2
  13. package/src/geometries/geom3/{fromPoints.test.js → fromVertices.test.js} +6 -6
  14. package/src/geometries/geom3/{fromPointsConvex.d.ts → fromVerticesConvex.d.ts} +1 -1
  15. package/src/geometries/geom3/fromVerticesConvex.js +25 -0
  16. package/src/geometries/geom3/{fromPointsConvex.test.js → fromVerticesConvex.test.js} +3 -3
  17. package/src/geometries/geom3/index.d.ts +3 -5
  18. package/src/geometries/geom3/index.js +4 -6
  19. package/src/geometries/geom3/invert.test.js +2 -2
  20. package/src/geometries/geom3/isA.test.js +2 -2
  21. package/src/geometries/geom3/toString.test.js +2 -2
  22. package/src/geometries/geom3/{toPoints.d.ts → toVertices.d.ts} +1 -1
  23. package/src/geometries/geom3/{toPoints.js → toVertices.js} +3 -2
  24. package/src/geometries/geom3/{toPoints.test.js → toVertices.test.js} +4 -4
  25. package/src/geometries/geom3/transform.test.js +2 -2
  26. package/src/geometries/geom3/validate.test.js +4 -4
  27. package/src/geometries/index.d.ts +1 -0
  28. package/src/geometries/index.js +1 -0
  29. package/src/geometries/path2/appendBezier.js +1 -1
  30. package/src/geometries/path2/create.js +1 -10
  31. package/src/geometries/path2/index.d.ts +0 -2
  32. package/src/geometries/path2/index.js +0 -2
  33. package/src/geometries/path3/applyTransforms.js +22 -0
  34. package/src/geometries/path3/applyTransforms.test.js +28 -0
  35. package/src/geometries/path3/close.d.ts +3 -0
  36. package/src/geometries/path3/close.js +31 -0
  37. package/src/geometries/path3/close.test.js +43 -0
  38. package/src/geometries/path3/concat.d.ts +3 -0
  39. package/src/geometries/path3/concat.js +36 -0
  40. package/src/geometries/path3/concat.test.js +35 -0
  41. package/src/geometries/path3/create.d.ts +4 -0
  42. package/src/geometries/path3/create.js +30 -0
  43. package/src/geometries/path3/create.test.js +8 -0
  44. package/src/geometries/path3/equals.d.ts +3 -0
  45. package/src/geometries/path3/equals.js +48 -0
  46. package/src/geometries/path3/equals.test.js +38 -0
  47. package/src/geometries/path3/fromVertices.d.ts +8 -0
  48. package/src/geometries/path3/fromVertices.js +45 -0
  49. package/src/geometries/path3/fromVertices.test.js +33 -0
  50. package/src/geometries/path3/index.d.ts +13 -0
  51. package/src/geometries/path3/index.js +21 -0
  52. package/src/geometries/path3/isA.d.ts +3 -0
  53. package/src/geometries/path3/isA.js +20 -0
  54. package/src/geometries/path3/isA.test.js +19 -0
  55. package/src/geometries/path3/reverse.d.ts +3 -0
  56. package/src/geometries/path3/reverse.js +19 -0
  57. package/src/geometries/path3/reverse.test.js +9 -0
  58. package/src/geometries/path3/toString.d.ts +3 -0
  59. package/src/geometries/path3/toString.js +24 -0
  60. package/src/geometries/path3/toVertices.d.ts +4 -0
  61. package/src/geometries/path3/toVertices.js +16 -0
  62. package/src/geometries/path3/toVertices.test.js +13 -0
  63. package/src/geometries/path3/transform.d.ts +4 -0
  64. package/src/geometries/path3/transform.js +21 -0
  65. package/src/geometries/path3/transform.test.js +50 -0
  66. package/src/geometries/path3/type.d.ts +10 -0
  67. package/src/geometries/path3/validate.d.ts +1 -0
  68. package/src/geometries/path3/validate.js +41 -0
  69. package/src/geometries/poly2/create.js +1 -6
  70. package/src/geometries/poly3/create.js +1 -6
  71. package/src/geometries/poly3/index.js +1 -1
  72. package/src/geometries/poly3/measureBoundingBox.js +2 -0
  73. package/src/geometries/poly3/measureBoundingSphere.d.ts +2 -1
  74. package/src/geometries/poly3/measureBoundingSphere.js +25 -8
  75. package/src/geometries/poly3/measureBoundingSphere.test.js +12 -8
  76. package/src/index.js +41 -0
  77. package/src/measurements/measureBoundingSphere.js +2 -6
  78. package/src/operations/booleans/intersectGeom3.test.js +4 -4
  79. package/src/operations/booleans/martinez/compareEvents.js +2 -7
  80. package/src/operations/booleans/martinez/connectEdges.js +30 -41
  81. package/src/operations/booleans/martinez/contour.js +1 -1
  82. package/src/operations/booleans/martinez/divideSegment.js +12 -11
  83. package/src/operations/booleans/martinez/fillQueue.js +24 -28
  84. package/src/operations/booleans/martinez/index.js +2 -1
  85. package/src/operations/booleans/martinez/possibleIntersection.js +41 -30
  86. package/src/operations/booleans/martinez/segmentIntersection.js +7 -9
  87. package/src/operations/booleans/martinez/splaytree.js +59 -457
  88. package/src/operations/booleans/martinez/subdivideSegments.js +4 -4
  89. package/src/operations/booleans/martinez/sweepEvent.js +3 -17
  90. package/src/operations/booleans/subtractGeom3.test.js +4 -4
  91. package/src/operations/booleans/trees/Node.js +25 -27
  92. package/src/operations/booleans/trees/PolygonTreeNode.js +153 -106
  93. package/src/operations/booleans/trees/Tree.js +9 -4
  94. package/src/operations/booleans/trees/splitLineSegmentByPlane.js +5 -3
  95. package/src/operations/booleans/trees/splitPolygonByPlane.js +39 -34
  96. package/src/operations/booleans/unionGeom3.test.js +5 -5
  97. package/src/operations/extrusions/extrudeFromSlices.test.js +6 -6
  98. package/src/operations/extrusions/extrudeLinear.test.js +8 -8
  99. package/src/operations/extrusions/extrudeRotate.test.js +12 -12
  100. package/src/operations/extrusions/extrudeWalls.js +3 -1
  101. package/src/operations/hulls/hull.test.js +5 -5
  102. package/src/operations/hulls/hullChain.test.js +5 -5
  103. package/src/operations/hulls/hullPoints2.js +20 -28
  104. package/src/operations/hulls/toUniquePoints.js +2 -2
  105. package/src/operations/modifiers/generalize.test.js +6 -6
  106. package/src/operations/modifiers/insertTjunctions.test.js +2 -2
  107. package/src/operations/modifiers/mergePolygons.js +2 -3
  108. package/src/operations/modifiers/reTesselateCoplanarPolygons.js +7 -7
  109. package/src/operations/modifiers/retessellate.test.js +10 -10
  110. package/src/operations/modifiers/snap.test.js +4 -4
  111. package/src/operations/offsets/offsetGeom3.test.js +4 -4
  112. package/src/operations/transforms/center.test.js +7 -7
  113. package/src/operations/transforms/mirror.test.js +7 -7
  114. package/src/operations/transforms/rotate.test.js +7 -7
  115. package/src/operations/transforms/scale.test.js +7 -7
  116. package/src/operations/transforms/transform.test.js +2 -2
  117. package/src/operations/transforms/translate.test.js +7 -7
  118. package/src/primitives/cube.test.js +4 -4
  119. package/src/primitives/cuboid.test.js +4 -4
  120. package/src/primitives/cylinder.test.js +5 -5
  121. package/src/primitives/cylinderElliptic.test.js +9 -9
  122. package/src/primitives/ellipsoid.test.js +5 -5
  123. package/src/primitives/geodesicSphere.test.js +4 -4
  124. package/src/primitives/polyhedron.test.js +2 -2
  125. package/src/primitives/roundedCuboid.test.js +7 -7
  126. package/src/primitives/roundedCylinder.test.js +9 -9
  127. package/src/primitives/sphere.test.js +5 -5
  128. package/src/primitives/torus.test.js +4 -4
  129. package/src/geometries/geom2/fromCompactBinary.d.ts +0 -3
  130. package/src/geometries/geom2/fromCompactBinary.js +0 -40
  131. package/src/geometries/geom2/fromToCompactBinary.test.js +0 -100
  132. package/src/geometries/geom2/toCompactBinary.d.ts +0 -3
  133. package/src/geometries/geom2/toCompactBinary.js +0 -56
  134. package/src/geometries/geom3/fromCompactBinary.d.ts +0 -3
  135. package/src/geometries/geom3/fromCompactBinary.js +0 -42
  136. package/src/geometries/geom3/fromPointsConvex.js +0 -25
  137. package/src/geometries/geom3/fromToCompactBinary.test.js +0 -139
  138. package/src/geometries/geom3/toCompactBinary.d.ts +0 -3
  139. package/src/geometries/geom3/toCompactBinary.js +0 -66
  140. package/src/geometries/path2/fromCompactBinary.d.ts +0 -3
  141. package/src/geometries/path2/fromCompactBinary.js +0 -31
  142. package/src/geometries/path2/fromToCompactBinary.test.js +0 -114
  143. package/src/geometries/path2/toCompactBinary.d.ts +0 -3
  144. package/src/geometries/path2/toCompactBinary.js +0 -50
@@ -1,139 +0,0 @@
1
- import test from 'ava'
2
-
3
- import { fromCompactBinary, toCompactBinary, create, fromPoints } from './index.js'
4
-
5
- test('toCompactBinary: converts geom3 (default)', (t) => {
6
- const geometry = create()
7
- const compacted = toCompactBinary(geometry)
8
- const expected = new Float32Array(
9
- [
10
- 1, // type
11
- 1, 0, 0, 0, // transforms
12
- 0, 1, 0, 0,
13
- 0, 0, 1, 0,
14
- 0, 0, 0, 1,
15
- -1, -1, -1, -1, // color
16
- 0 // number of vertices
17
- ]
18
- )
19
- t.deepEqual(compacted, expected)
20
- })
21
-
22
- test('toCompactBinary: converts geom3 into a compact form', (t) => {
23
- // two polygons; 3 vertices, 4 vertices
24
- const vertices = [[[0, 0, 0], [1, 0, 0], [2, 0, 2]], [[0, 0, 0], [1, 0, 0], [2, 0, 2], [-3, 0, 3]]]
25
- const geometry = fromPoints(vertices)
26
- const compacted = toCompactBinary(geometry)
27
- const expected = new Float32Array(
28
- [
29
- 1, // type
30
- 1, 0, 0, 0, // transforms
31
- 0, 1, 0, 0,
32
- 0, 0, 1, 0,
33
- 0, 0, 0, 1,
34
- -1, -1, -1, -1, // color
35
- 7, // number of vertices
36
- 3, // number of vertices per polygon (2)
37
- 4,
38
- 0, 0, 0, // vertices (7)
39
- 1, 0, 0,
40
- 2, 0, 2,
41
- 0, 0, 0,
42
- 1, 0, 0,
43
- 2, 0, 2,
44
- -3, 0, 3
45
- ]
46
- )
47
-
48
- t.deepEqual(compacted, expected)
49
-
50
- // test color as well
51
- geometry.color = [1, 2, 3, 4]
52
- const compacted2 = toCompactBinary(geometry)
53
- const expected2 = new Float32Array(
54
- [
55
- 1, // type
56
- 1, 0, 0, 0, // transforms
57
- 0, 1, 0, 0,
58
- 0, 0, 1, 0,
59
- 0, 0, 0, 1,
60
- 1, 2, 3, 4, // color
61
- 7, // number of vertices
62
- 3, // number of vertices per polygon (2)
63
- 4,
64
- 0, 0, 0, // vertices (7)
65
- 1, 0, 0,
66
- 2, 0, 2,
67
- 0, 0, 0,
68
- 1, 0, 0,
69
- 2, 0, 2,
70
- -3, 0, 3
71
- ]
72
- )
73
-
74
- t.deepEqual(compacted2, expected2)
75
- })
76
-
77
- test('fromCompactBinary: convert a compact form into a geom3', (t) => {
78
- const compactedDefault = [
79
- 1, // type
80
- 1, 0, 0, 0, // transforms
81
- 0, 1, 0, 0,
82
- 0, 0, 1, 0,
83
- 0, 0, 0, 1,
84
- -1, -1, -1, -1, // color
85
- 0 // number of vertices
86
- ]
87
- let expected = create()
88
- let geometry = fromCompactBinary(compactedDefault)
89
-
90
- t.deepEqual(geometry, expected)
91
-
92
- const compacted1 = [
93
- 1, // type
94
- 1, 0, 0, 0, // transforms
95
- 0, 1, 0, 0,
96
- 0, 0, 1, 0,
97
- 0, 0, 0, 1,
98
- -1, -1, -1, -1, // color
99
- 7, // number of vertices
100
- 3, // number of vertices per polygon (2)
101
- 4,
102
- 0, 0, 0, // vertices (7)
103
- 1, 0, 0,
104
- 2, 0, 2,
105
- 0, 0, 0,
106
- 1, 0, 0,
107
- 2, 0, 2,
108
- -3, 0, 3
109
- ]
110
- const vertices = [[[0, 0, 0], [1, 0, 0], [2, 0, 2]], [[0, 0, 0], [1, 0, 0], [2, 0, 2], [-3, 0, 3]]]
111
- expected = fromPoints(vertices)
112
- geometry = fromCompactBinary(compacted1)
113
-
114
- t.deepEqual(geometry, expected)
115
-
116
- // test color as well
117
- const compacted2 = [
118
- 1, // type
119
- 1, 0, 0, 0, // transforms
120
- 0, 1, 0, 0,
121
- 0, 0, 1, 0,
122
- 0, 0, 0, 1,
123
- 4, 5, 6, 7, // color
124
- 7, // number of vertices
125
- 3, // number of vertices per polygon (2)
126
- 4,
127
- 0, 0, 0, // vertices (7)
128
- 1, 0, 0,
129
- 2, 0, 2,
130
- 0, 0, 0,
131
- 1, 0, 0,
132
- 2, 0, 2,
133
- -3, 0, 3
134
- ]
135
- expected.color = [4, 5, 6, 7]
136
- geometry = fromCompactBinary(compacted2)
137
-
138
- t.deepEqual(geometry, expected)
139
- })
@@ -1,3 +0,0 @@
1
- import type { Geom3 } from './type.d.ts'
2
-
3
- export function toCompactBinary(geom: Geom3): Float32Array
@@ -1,66 +0,0 @@
1
- import * as poly3 from '../poly3/index.js'
2
-
3
- /**
4
- * Return the given geometry in compact binary representation.
5
- * @param {Geom3} geometry - the geometry
6
- * @return {TypedArray} compact binary representation
7
- * @alias module:modeling/geometries/geom3.toCompactBinary
8
- */
9
- export const toCompactBinary = (geometry) => {
10
- const polygons = geometry.polygons
11
- const transforms = geometry.transforms
12
-
13
- const numberOfPolygons = polygons.length
14
- const numberOfVertices = polygons.reduce((count, polygon) => count + polygon.vertices.length, 0)
15
- let color = [-1, -1, -1, -1]
16
- if (geometry.color) color = geometry.color
17
-
18
- // FIXME why Float32Array?
19
- const compacted = new Float32Array(1 + 16 + 4 + 1 + numberOfPolygons + (numberOfVertices * 3))
20
- // type + transforms + color + numberOfPolygons + numberOfVerticesPerPolygon[] + vertices data[]
21
-
22
- compacted[0] = 1 // type code: 0 => geom2, 1 => geom3 , 2 => path2
23
-
24
- compacted[1] = transforms[0]
25
- compacted[2] = transforms[1]
26
- compacted[3] = transforms[2]
27
- compacted[4] = transforms[3]
28
- compacted[5] = transforms[4]
29
- compacted[6] = transforms[5]
30
- compacted[7] = transforms[6]
31
- compacted[8] = transforms[7]
32
- compacted[9] = transforms[8]
33
- compacted[10] = transforms[9]
34
- compacted[11] = transforms[10]
35
- compacted[12] = transforms[11]
36
- compacted[13] = transforms[12]
37
- compacted[14] = transforms[13]
38
- compacted[15] = transforms[14]
39
- compacted[16] = transforms[15]
40
-
41
- compacted[17] = color[0]
42
- compacted[18] = color[1]
43
- compacted[19] = color[2]
44
- compacted[20] = color[3]
45
-
46
- compacted[21] = numberOfVertices
47
-
48
- let ci = 22
49
- let vi = ci + numberOfPolygons
50
- polygons.forEach((polygon) => {
51
- const vertices = poly3.toVertices(polygon)
52
- // record the number of vertices per polygon
53
- compacted[ci] = vertices.length
54
- ci++
55
- // convert the vertices
56
- for (let i = 0; i < vertices.length; i++) {
57
- const vertex = vertices[i]
58
- compacted[vi + 0] = vertex[0]
59
- compacted[vi + 1] = vertex[1]
60
- compacted[vi + 2] = vertex[2]
61
- vi += 3
62
- }
63
- })
64
- // TODO: how about custom properties or fields ?
65
- return compacted
66
- }
@@ -1,3 +0,0 @@
1
- import type { Path2 } from './type.d.ts'
2
-
3
- export function fromCompactBinary(data: Array<number> | Float32Array | Float64Array): Path2
@@ -1,31 +0,0 @@
1
- import * as mat4 from '../../maths/mat4/index.js'
2
- import * as vec2 from '../../maths/vec2/index.js'
3
-
4
- import { create } from './create.js'
5
-
6
- /**
7
- * Create a new path from the given compact binary data.
8
- * @param {TypedArray} data - compact binary data
9
- * @returns {Path2} a new path
10
- * @alias module:modeling/geometries/path2.fromCompactBinary
11
- */
12
- export const fromCompactBinary = (data) => {
13
- if (data[0] !== 2) throw new Error('invalid compact binary data')
14
-
15
- const created = create()
16
-
17
- created.transforms = mat4.clone(data.slice(1, 17))
18
-
19
- created.isClosed = !!data[17]
20
-
21
- for (let i = 22; i < data.length; i += 2) {
22
- const point = vec2.fromValues(data[i], data[i + 1])
23
- created.points.push(point)
24
- }
25
- // transfer known properties, i.e. color
26
- if (data[18] >= 0) {
27
- created.color = [data[18], data[19], data[20], data[21]]
28
- }
29
- // TODO: how about custom properties or fields ?
30
- return created
31
- }
@@ -1,114 +0,0 @@
1
- import test from 'ava'
2
-
3
- import { fromCompactBinary, toCompactBinary, create, fromPoints } from './index.js'
4
-
5
- test('toCompactBinary: converts path2 into a compact form', (t) => {
6
- const geometry1 = create()
7
- const compacted1 = toCompactBinary(geometry1)
8
- const expected1 = new Float32Array(
9
- [
10
- 2, // type
11
- 1, 0, 0, 0, // transforms
12
- 0, 1, 0, 0,
13
- 0, 0, 1, 0,
14
- 0, 0, 0, 1,
15
- 0, // isClosed
16
- -1, -1, -1, -1 // color
17
- ]
18
- )
19
-
20
- t.deepEqual(compacted1, expected1)
21
-
22
- const points = [[0, 0], [1, 0], [0, 1]]
23
- const geometry2 = fromPoints({ closed: true }, points)
24
- const compacted2 = toCompactBinary(geometry2)
25
- const expected2 = new Float32Array(
26
- [
27
- 2, // type
28
- 1, 0, 0, 0, // transforms
29
- 0, 1, 0, 0,
30
- 0, 0, 1, 0,
31
- 0, 0, 0, 1,
32
- 1, // closed/open flag
33
- -1, -1, -1, -1, // color
34
- 0, 0, // points
35
- 1, 0,
36
- 0, 1
37
- ]
38
- )
39
-
40
- t.deepEqual(compacted2, expected2)
41
-
42
- // test color as well
43
- geometry2.color = [1, 2, 3, 4]
44
- const compacted3 = toCompactBinary(geometry2)
45
- const expected3 = new Float32Array(
46
- [
47
- 2, // type
48
- 1, 0, 0, 0, // transforms
49
- 0, 1, 0, 0,
50
- 0, 0, 1, 0,
51
- 0, 0, 0, 1,
52
- 1, // closed/open flag
53
- 1, 2, 3, 4, // color
54
- 0, 0, // points
55
- 1, 0,
56
- 0, 1
57
- ]
58
- )
59
-
60
- t.deepEqual(compacted3, expected3)
61
- })
62
-
63
- test('fromCompactBinary: convert a compact form into a path2', (t) => {
64
- const compacted1 = [
65
- 2, // type
66
- 1, 0, 0, 0, // transforms
67
- 0, 1, 0, 0,
68
- 0, 0, 1, 0,
69
- 0, 0, 0, 1,
70
- 0, // isClosed
71
- -1, -1, -1, -1 // color
72
- ]
73
- const expected1 = create()
74
- const geometry1 = fromCompactBinary(compacted1)
75
-
76
- t.deepEqual(geometry1, expected1)
77
-
78
- const compacted2 = [
79
- 2, // type
80
- 1, 0, 0, 0, // transforms
81
- 0, 1, 0, 0,
82
- 0, 0, 1, 0,
83
- 0, 0, 0, 1,
84
- 1, // closed/open flag
85
- -1, -1, -1, -1, // color
86
- 0, 0, // points
87
- 1, 0,
88
- 0, 1
89
- ]
90
- const points = [[0, 0], [1, 0], [0, 1]]
91
- const expected2 = fromPoints({ closed: true }, points)
92
- const geometry2 = fromCompactBinary(compacted2)
93
-
94
- t.deepEqual(geometry2, expected2)
95
-
96
- // test color as well
97
- const compacted3 = [
98
- 2, // type
99
- 1, 0, 0, 0, // transforms
100
- 0, 1, 0, 0,
101
- 0, 0, 1, 0,
102
- 0, 0, 0, 1,
103
- 1, // closed/open flag
104
- 5, 6, 7, 8, // color
105
- 0, 0, // points
106
- 1, 0,
107
- 0, 1
108
- ]
109
- const expected3 = fromPoints({ closed: true }, points)
110
- expected3.color = [5, 6, 7, 8]
111
- const geometry3 = fromCompactBinary(compacted3)
112
-
113
- t.deepEqual(geometry3, expected3)
114
- })
@@ -1,3 +0,0 @@
1
- import type { Path2 } from './type.d.ts'
2
-
3
- export function toCompactBinary(geometry: Path2): Float32Array
@@ -1,50 +0,0 @@
1
- /**
2
- * Produce a compact binary representation from the given path.
3
- * @param {Path2} geometry - the path geometry
4
- * @returns {TypedArray} compact binary representation
5
- * @alias module:modeling/geometries/path2.toCompactBinary
6
- */
7
- export const toCompactBinary = (geometry) => {
8
- const points = geometry.points
9
- const transforms = geometry.transforms
10
- let color = [-1, -1, -1, -1]
11
- if (geometry.color) color = geometry.color
12
-
13
- // FIXME why Float32Array?
14
- const compacted = new Float32Array(1 + 16 + 1 + 4 + (points.length * 2)) // type + transforms + isClosed + color + points data
15
-
16
- compacted[0] = 2 // type code: 0 => geom2, 1 => geom3 , 2 => path2
17
-
18
- compacted[1] = transforms[0]
19
- compacted[2] = transforms[1]
20
- compacted[3] = transforms[2]
21
- compacted[4] = transforms[3]
22
- compacted[5] = transforms[4]
23
- compacted[6] = transforms[5]
24
- compacted[7] = transforms[6]
25
- compacted[8] = transforms[7]
26
- compacted[9] = transforms[8]
27
- compacted[10] = transforms[9]
28
- compacted[11] = transforms[10]
29
- compacted[12] = transforms[11]
30
- compacted[13] = transforms[12]
31
- compacted[14] = transforms[13]
32
- compacted[15] = transforms[14]
33
- compacted[16] = transforms[15]
34
-
35
- compacted[17] = geometry.isClosed ? 1 : 0
36
-
37
- compacted[18] = color[0]
38
- compacted[19] = color[1]
39
- compacted[20] = color[2]
40
- compacted[21] = color[3]
41
-
42
- for (let j = 0; j < points.length; j++) {
43
- const ci = j * 2 + 22
44
- const point = points[j]
45
- compacted[ci] = point[0]
46
- compacted[ci + 1] = point[1]
47
- }
48
- // TODO: how about custom properties or fields ?
49
- return compacted
50
- }