sunrize 1.7.44 → 1.7.46

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 (32) hide show
  1. package/package.json +12 -12
  2. package/src/Application/Document.js +1 -9
  3. package/src/Components/Geometry2D/Arc2D.js +16 -0
  4. package/src/Components/Geometry2D/ArcClose2D.js +14 -0
  5. package/src/Components/Geometry2D/Circle2D.js +23 -0
  6. package/src/Components/Geometry2D/Disk2D.js +53 -0
  7. package/src/Components/Geometry2D/Polyline2D.js +16 -0
  8. package/src/Components/Geometry2D/Polypoint2D.js +20 -0
  9. package/src/Components/Geometry2D/Rectangle2D.js +27 -0
  10. package/src/Components/Geometry2D/TriangleSet2D.js +33 -0
  11. package/src/Components/Geometry3D/Box.js +27 -0
  12. package/src/Components/Geometry3D/Cone.js +79 -0
  13. package/src/Components/Geometry3D/Cylinder.js +81 -0
  14. package/src/Components/Geometry3D/ElevationGrid.js +23 -0
  15. package/src/Components/Geometry3D/Extrusion.js +194 -0
  16. package/src/Components/Geometry3D/IndexedFaceSet.js +158 -0
  17. package/src/Components/Geometry3D/Sphere.js +27 -0
  18. package/src/Components/NURBS/NurbsCurve.js +17 -0
  19. package/src/Components/NURBS/NurbsSweptSurface.js +24 -0
  20. package/src/Components/NURBS/NurbsSwungSurface.js +24 -0
  21. package/src/Components/NURBS/X3DNurbsSurfaceGeometryNode.js +19 -0
  22. package/src/Components/Rendering/IndexedLineSet.js +24 -0
  23. package/src/Components/Rendering/LineSet.js +34 -0
  24. package/src/Components/Rendering/X3DComposedGeometryNode.js +44 -0
  25. package/src/Components/Rendering/X3DGeometryNode.js +195 -0
  26. package/src/Components/Text/Text.js +17 -0
  27. package/src/Components.js +33 -0
  28. package/src/Editors/OutlineEditor.js +183 -18
  29. package/src/Editors/OutlineView.js +3 -3
  30. package/src/Editors/ScriptEditor.js +79 -17
  31. package/src/Tools/Geometry2D/Disk2DTool.js +16 -18
  32. package/src/Undo/Editor.js +198 -144
@@ -0,0 +1,158 @@
1
+ const X3D = require ("../../X3D");
2
+
3
+ Object .assign (X3D .IndexedFaceSet .prototype,
4
+ {
5
+ toIndexedTriangleSet (executionContext = this .getExecutionContext ())
6
+ {
7
+ const geometry = executionContext .createNode ("IndexedTriangleSet", false);
8
+
9
+ geometry ._metadata = this ._metadata;
10
+ geometry ._solid = this ._solid;
11
+ geometry ._ccw = this ._ccw;
12
+ geometry ._colorPerVertex = this ._colorPerVertex;
13
+ geometry ._normalPerVertex = this ._normalPerVertex;
14
+ geometry ._attrib = this ._attrib;
15
+ geometry ._fogCoord = this ._fogCoord;
16
+ geometry ._coord = this ._coord;
17
+
18
+ if (!this ._colorIndex .length || this ._colorIndex .equals (this ._coordIndex))
19
+ {
20
+ geometry ._color = this ._color;
21
+ }
22
+
23
+ if (!this ._texCoordIndex .length || this ._texCoordIndex .equals (this ._coordIndex))
24
+ {
25
+ geometry ._texCoord = this ._texCoord;
26
+ }
27
+
28
+ if (!this ._normalIndex .length || this ._normalIndex .equals (this ._coordIndex))
29
+ {
30
+ geometry ._tangent = this ._tangent;
31
+ geometry ._normal = this ._normal;
32
+ }
33
+
34
+ const polygons = this .triangulate ();
35
+
36
+ for (const { triangles } of polygons)
37
+ {
38
+ for (const i of triangles)
39
+ {
40
+ geometry ._index .push (this ._coordIndex [i]);
41
+ }
42
+ }
43
+
44
+ geometry .setup ();
45
+
46
+ return geometry;
47
+ },
48
+ toPrimitive (executionContext = this .getExecutionContext ())
49
+ {
50
+ const geometry = executionContext .createNode ("IndexedLineSet", false);
51
+
52
+ geometry ._metadata = this ._metadata;
53
+ geometry ._colorPerVertex = this ._colorPerVertex;
54
+ geometry ._attrib = this ._attrib;
55
+ geometry ._fogCoord = this ._fogCoord;
56
+ geometry ._color = this ._color;
57
+ geometry ._coord = this ._coord;
58
+
59
+ if (this ._normalPerVertex .getValue ())
60
+ {
61
+ if (!this ._normalIndex .length || this ._normalIndex .equals (this ._coordIndex))
62
+ {
63
+ geometry ._tangent = this ._tangent;
64
+ geometry ._normal = this ._normal;
65
+ }
66
+ }
67
+
68
+ // The coord index must end with -1!
69
+
70
+ const
71
+ lineIndex = new Set (),
72
+ colorIndex = geometry ._colorIndex,
73
+ coordIndex = geometry ._coordIndex,
74
+ length = this ._coordIndex .length;
75
+
76
+ let
77
+ line = false,
78
+ last = -1,
79
+ first = 0,
80
+ face = 0;
81
+
82
+ for (let i = 1; i < length; ++ i)
83
+ {
84
+ const
85
+ p = i - 1,
86
+ previous = this ._coordIndex [p];
87
+
88
+ let
89
+ index = this ._coordIndex [i],
90
+ c = i;
91
+
92
+ if (index === -1)
93
+ {
94
+ index = this ._coordIndex [first];
95
+ c = first;
96
+ }
97
+
98
+ const
99
+ minMax = `${Math .min (previous, index)} ${Math .max (previous, index)}`,
100
+ exists = lineIndex .has (minMax);
101
+
102
+ if (!exists)
103
+ lineIndex .add (minMax);
104
+
105
+ if ((previous === -1 || exists) && line)
106
+ {
107
+ if (this ._color .getValue ())
108
+ {
109
+ if (this ._colorPerVertex .getValue ())
110
+ colorIndex .push (-1);
111
+ else
112
+ colorIndex .push (this .getColorPerFaceIndex (face));
113
+ }
114
+
115
+ coordIndex .push (-1);
116
+
117
+ line = false;
118
+ }
119
+
120
+ if (previous === -1)
121
+ {
122
+ first = i;
123
+ face += 1;
124
+ last = -1;
125
+ continue;
126
+ }
127
+
128
+ if (exists)
129
+ continue;
130
+
131
+ if (last !== previous)
132
+ {
133
+ if (this ._color .getValue ())
134
+ {
135
+ if (this ._colorPerVertex .getValue ())
136
+ colorIndex .push (this .getColorPerVertexIndex (p));
137
+ }
138
+
139
+ coordIndex .push (previous);
140
+ }
141
+
142
+ if (this ._color .getValue ())
143
+ {
144
+ if (this ._colorPerVertex .getValue ())
145
+ colorIndex .push (this .getColorPerVertexIndex (c));
146
+ }
147
+
148
+ coordIndex .push (index);
149
+
150
+ last = index;
151
+ line = true;
152
+ }
153
+
154
+ geometry .setup ();
155
+
156
+ return geometry;
157
+ },
158
+ });
@@ -0,0 +1,27 @@
1
+ const X3D = require ("../../X3D");
2
+
3
+ Object .assign (X3D .Sphere .prototype,
4
+ {
5
+ toPrimitive (executionContext = this .getExecutionContext ())
6
+ {
7
+ const
8
+ browser = this .getBrowser (),
9
+ geometry = browser .getSphereOptions () .getGeometry () .copy (executionContext),
10
+ radius = this ._radius .getValue ();
11
+
12
+ geometry ._metadata = this ._metadata;
13
+ geometry ._solid = this ._solid;
14
+
15
+ geometry ._texCoord = geometry ._texCoord .getValue () .copy (executionContext);
16
+ geometry ._coord = geometry ._coord .getValue () .copy (executionContext);
17
+
18
+ for (const [i, point] of geometry ._coord .point .entries ())
19
+ geometry ._coord .point [i] = point .multiply (radius);
20
+
21
+ geometry ._texCoord .getValue () .setup ();
22
+ geometry ._coord .getValue () .setup ();
23
+ geometry .setup ();
24
+
25
+ return geometry;
26
+ },
27
+ });
@@ -0,0 +1,17 @@
1
+ const X3D = require ("../../X3D");
2
+
3
+ Object .assign (X3D .NurbsCurve .prototype,
4
+ {
5
+ toPrimitive (executionContext = this .getExecutionContext ())
6
+ {
7
+ const geometry = this .toIndexedLineSet (executionContext,
8
+ {
9
+ double: !!X3D .X3DCast (X3D .X3DConstants .CoordinateDouble, this ._controlPoint),
10
+ polyline: true,
11
+ });
12
+
13
+ geometry ._metadata = this ._metadata;
14
+
15
+ return geometry;
16
+ },
17
+ });
@@ -0,0 +1,24 @@
1
+ const X3D = require ("../../X3D");
2
+
3
+ Object .assign (X3D .NurbsSweptSurface .prototype,
4
+ {
5
+ traverse (type, renderObject)
6
+ {
7
+ this .getTrajectoryCurve () ?.traverse (type, renderObject);
8
+ },
9
+ toPrimitive (executionContext = this .getExecutionContext ())
10
+ {
11
+ const geometry = this .toIndexedFaceSet (executionContext,
12
+ {
13
+ double: true,
14
+ texCoord: true,
15
+ });
16
+
17
+ geometry ._metadata = this ._metadata;
18
+ geometry ._solid = this ._solid;
19
+ geometry ._ccw = this ._ccw;
20
+ geometry ._creaseAngle = Math .PI;
21
+
22
+ return geometry;
23
+ },
24
+ });
@@ -0,0 +1,24 @@
1
+ const X3D = require ("../../X3D");
2
+
3
+ Object .assign (X3D .NurbsSwungSurface .prototype,
4
+ {
5
+ traverse (type, renderObject)
6
+ {
7
+ this .getTrajectoryCurve () ?.traverse (type, renderObject);
8
+ },
9
+ toPrimitive (executionContext = this .getExecutionContext ())
10
+ {
11
+ const geometry = this .toIndexedFaceSet (executionContext,
12
+ {
13
+ double: true,
14
+ texCoord: true,
15
+ });
16
+
17
+ geometry ._metadata = this ._metadata;
18
+ geometry ._solid = this ._solid;
19
+ geometry ._ccw = this ._ccw;
20
+ geometry ._creaseAngle = Math .PI;
21
+
22
+ return geometry;
23
+ },
24
+ });
@@ -0,0 +1,19 @@
1
+ const X3D = require ("../../X3D");
2
+
3
+ Object .assign (X3D .X3DNurbsSurfaceGeometryNode .prototype,
4
+ {
5
+ toPrimitive (executionContext = this .getExecutionContext ())
6
+ {
7
+ const geometry = this .toIndexedFaceSet (executionContext,
8
+ {
9
+ double: !!X3D .X3DCast (X3D .X3DConstants .CoordinateDouble, this ._controlPoint),
10
+ texCoord: true,
11
+ });
12
+
13
+ geometry ._metadata = this ._metadata;
14
+ geometry ._solid = this ._solid;
15
+ geometry ._creaseAngle = Math .PI;
16
+
17
+ return geometry;
18
+ },
19
+ });
@@ -0,0 +1,24 @@
1
+ const X3D = require ("../../X3D");
2
+
3
+ Object .assign (X3D .IndexedLineSet .prototype,
4
+ {
5
+ toPrimitive (executionContext = this .getExecutionContext)
6
+ {
7
+ const geometry = executionContext .createNode ("PointSet", false);
8
+
9
+ geometry ._metadata = this ._metadata;
10
+ geometry ._attrib = this ._attrib;
11
+ geometry ._fogCoord = this ._fogCoord;
12
+
13
+ if (this ._colorPerVertex .getValue ())
14
+ geometry ._color = this ._color;
15
+
16
+ geometry ._tangent = this ._tangent;
17
+ geometry ._normal = this ._normal;
18
+ geometry ._coord = this ._coord;
19
+
20
+ geometry .setup ();
21
+
22
+ return geometry;
23
+ },
24
+ });
@@ -0,0 +1,34 @@
1
+ const X3D = require ("../../X3D");
2
+
3
+ Object .assign (X3D .LineSet .prototype,
4
+ {
5
+ toPrimitive (executionContext = this .getExecutionContext)
6
+ {
7
+ const geometry = executionContext .createNode ("IndexedLineSet", false);
8
+
9
+ geometry ._metadata = this ._metadata;
10
+ geometry ._attrib = this ._attrib;
11
+ geometry ._fogCoord = this ._fogCoord;
12
+ geometry ._color = this ._color;
13
+ geometry ._tangent = this ._tangent;
14
+ geometry ._normal = this ._normal;
15
+ geometry ._coord = this ._coord;
16
+
17
+ let index = 0;
18
+
19
+ for (const length of this ._vertexCount)
20
+ {
21
+ if (length < 2)
22
+ continue;
23
+
24
+ for (let i = 0; i < length; ++ i, ++ index)
25
+ geometry ._coordIndex .push (index);
26
+
27
+ geometry ._coordIndex .push (-1);
28
+ }
29
+
30
+ geometry .setup ();
31
+
32
+ return geometry;
33
+ },
34
+ });
@@ -0,0 +1,44 @@
1
+ const X3D = require ("../../X3D");
2
+
3
+ Object .assign (X3D .X3DComposedGeometryNode .prototype,
4
+ {
5
+ toPrimitive (executionContext = this .getExecutionContext)
6
+ {
7
+ const geometry = executionContext .createNode ("IndexedFaceSet", false);
8
+
9
+ geometry ._metadata = this ._metadata;
10
+ geometry ._solid = this ._solid;
11
+ geometry ._ccw = this ._ccw;
12
+ geometry ._creaseAngle = Math .PI;
13
+ geometry ._colorPerVertex = this ._colorPerVertex;
14
+ geometry ._normalPerVertex = this ._normalPerVertex;
15
+
16
+ geometry ._attrib = this ._attrib;
17
+ geometry ._fogCoord = this ._fogCoord;
18
+ geometry ._color = this ._color;
19
+ geometry ._tangent = this ._tangent;
20
+ geometry ._normal = this ._normal;
21
+ geometry ._coord = this ._coord;
22
+
23
+ let
24
+ verticesPerPolygon = this .getVerticesPerPolygon (),
25
+ numVertices = this .getNumVertices ();
26
+
27
+ // Set size to a multiple of vertexCount.
28
+ numVertices -= numVertices % verticesPerPolygon;
29
+
30
+ for (let i = 0; i < numVertices; ++ i)
31
+ {
32
+ const index = this .getPolygonIndex (i);
33
+
34
+ geometry ._coordIndex .push (index);
35
+
36
+ if (i % verticesPerPolygon === verticesPerPolygon - 1)
37
+ geometry ._coordIndex .push (-1);
38
+ }
39
+
40
+ geometry .setup ();
41
+
42
+ return geometry;
43
+ },
44
+ });
@@ -0,0 +1,195 @@
1
+ const X3D = require ("../../X3D");
2
+
3
+ Object .assign (X3D .X3DGeometryNode .prototype,
4
+ {
5
+ /**
6
+ * Converts any line geometry to IndexedLineSet.
7
+ * @param {X3D .X3DExecutionContext} executionContext
8
+ * @param {object} options
9
+ * @returns
10
+ */
11
+ toIndexedLineSet (executionContext = this .getExecutionContext (), options = { })
12
+ {
13
+ const geometry = executionContext .createNode ("IndexedLineSet", false);
14
+
15
+ // Coordinate
16
+
17
+ const
18
+ vertexArray = this .getVertices (),
19
+ numVertices = vertexArray .length;
20
+
21
+ geometry ._coord = executionContext .createNode (options .double ? "CoordinateDouble" : "Coordinate", false);
22
+
23
+ if (numVertices)
24
+ {
25
+ if (options .polyline)
26
+ {
27
+ const
28
+ SFVec3 = options .double ? X3D .SFVec3d : X3D .SFVec3f,
29
+ first = new SFVec3 (vertexArray .at (0), vertexArray .at (1), 0),
30
+ last = new SFVec3 (vertexArray .at (-4), vertexArray .at (-3), 0);
31
+
32
+ for (let i = 0, length = numVertices / 8; i < length; ++ i)
33
+ geometry ._coordIndex .push (i);
34
+
35
+ if (last .equals (first))
36
+ geometry ._coordIndex .push (0, -1);
37
+ else
38
+ geometry ._coordIndex .push (geometry ._coordIndex .at (-1) + 1, -1);
39
+
40
+ for (let i = 0; i < numVertices; i += 8)
41
+ geometry ._coord .point .push (new SFVec3 (vertexArray [i], vertexArray [i + 1], 0));
42
+
43
+ if (!last .equals (first))
44
+ geometry ._coord .point .push (last);
45
+ }
46
+ else
47
+ {
48
+ const [coordIndex, points] = this .mergePoints (vertexArray);
49
+
50
+ geometry ._coordIndex = coordIndex .flatMap ((index, i) => i % 2 === 1 ? [index, -1] : index);
51
+ geometry ._coord .point = points .filter ((point, i) => i % 4 < 3);
52
+ }
53
+ }
54
+
55
+ // Setup
56
+
57
+ geometry ._coord .getValue () ?.setup ();
58
+ geometry .setup ();
59
+
60
+ return geometry;
61
+ },
62
+ /**
63
+ * Converts any polygon geometry to IndexedFaceSet.
64
+ * @param {X3D .X3DExecutionContext} executionContext
65
+ * @param {object} options
66
+ * @returns
67
+ */
68
+ toIndexedFaceSet (executionContext = this .getExecutionContext (), options = { })
69
+ {
70
+ const geometry = executionContext .createNode ("IndexedFaceSet", false);
71
+
72
+ // Coordinate
73
+
74
+ const [coordIndex, points] = this .mergePoints (this .getVertices ());
75
+
76
+ geometry ._coordIndex = coordIndex .flatMap ((index, i) => i % 3 === 2 ? [index, -1] : index);
77
+ geometry ._coord = executionContext .createNode (options .double ? "CoordinateDouble" : "Coordinate", false);
78
+ geometry ._coord .point = points .filter ((p, i) => i % 4 < 3);
79
+
80
+ // Tangent
81
+
82
+ if (options .fogCoord)
83
+ {
84
+ geometry ._fogCoord = executionContext .createNode ("FogCoordinate", false);
85
+ geometry ._fogCoord .depth = this .getFogDepths ();
86
+ }
87
+
88
+ // Color
89
+
90
+ if (options .color)
91
+ {
92
+ const [colorIndex, colors] = this .mergePoints (this .getColors ());
93
+
94
+ geometry ._colorIndex = colorIndex .flatMap ((index, i) => i % 3 === 2 ? [index, -1] : index);
95
+
96
+ if (geometry ._colorIndex .equals (geometry ._coordIndex))
97
+ geometry ._colorIndex = [ ];
98
+
99
+ if (colors .some ((p, i)=> i === 3 && p !== 1))
100
+ {
101
+ geometry ._color = executionContext .createNode ("ColorRGBA", false);
102
+ geometry ._color .color = colors;
103
+ }
104
+ else
105
+ {
106
+ geometry ._color = executionContext .createNode ("Color", false);
107
+ geometry ._color .color = colors .filter ((p, i) => i % 4 < 3);
108
+ }
109
+ }
110
+
111
+ // TextureCoordinate
112
+
113
+ if (options .texCoord)
114
+ {
115
+ const [texCoordIndex, texCoords] = this .mergePoints (this .getTexCoords ());
116
+
117
+ geometry ._texCoordIndex = texCoordIndex .flatMap ((index, i) => i % 3 === 2 ? [index, -1] : index);
118
+
119
+ if (geometry ._texCoordIndex .equals (geometry ._coordIndex))
120
+ geometry ._texCoordIndex = [ ];
121
+
122
+ if (texCoords .some ((p, i)=> (i === 2 && p !== 0) || (i === 3 && p !== 1)))
123
+ {
124
+ geometry ._texCoord = executionContext .createNode ("TextureCoordinate3D", false);
125
+ geometry ._texCoord .point = texCoords;
126
+ }
127
+ else
128
+ {
129
+ geometry ._texCoord = executionContext .createNode ("TextureCoordinate", false);
130
+ geometry ._texCoord .point = texCoords .filter ((p, i) => i % 4 < 2);
131
+ }
132
+ }
133
+
134
+ // Tangent
135
+
136
+ if (options .tangent)
137
+ {
138
+ // TODO: Implement Tangent
139
+ }
140
+
141
+ // Normal
142
+
143
+ if (options .normal)
144
+ {
145
+ const [normalIndex, normals] = this .mergePoints (this .getNormals ());
146
+
147
+ geometry ._normalIndex = normalIndex .flatMap ((index, i) => i % 3 === 2 ? [index, -1] : index);
148
+ geometry ._normal = executionContext .createNode ("Normal", false);
149
+ geometry ._normal .point = normals;
150
+
151
+ if (geometry ._normalIndex .equals (geometry ._coordIndex))
152
+ geometry ._normalIndex = [ ];
153
+ }
154
+
155
+ // Setup
156
+
157
+ geometry ._fogCoord .getValue () ?.setup ();
158
+ geometry ._color .getValue () ?.setup ();
159
+ geometry ._texCoord .getValue () ?.setup ();
160
+ geometry ._tangent .getValue () ?.setup ();
161
+ geometry ._normal .getValue () ?.setup ();
162
+ geometry ._coord .getValue () ?.setup ();
163
+ geometry .setup ();
164
+
165
+ return geometry;
166
+ },
167
+ mergePoints (array)
168
+ {
169
+ const
170
+ index = [ ],
171
+ points = [ ],
172
+ map = new Map (),
173
+ length = array .length;
174
+
175
+ for (let i = 0; i < length; i += 4)
176
+ {
177
+ const key = `${array [i]} ${array [i + 1]} ${array [i + 2]} ${array [i + 3]}`;
178
+
179
+ if (map .has (key))
180
+ {
181
+ index .push (map .get (key));
182
+ }
183
+ else
184
+ {
185
+ const next = points .length / 4;
186
+
187
+ map .set (key, next);
188
+ index .push (next);
189
+ points .push (array [i], array [i + 1], array [i + 2], array [i + 3]);
190
+ }
191
+ }
192
+
193
+ return [index, points];
194
+ },
195
+ });
@@ -0,0 +1,17 @@
1
+ const X3D = require ("../../X3D");
2
+
3
+ Object .assign (X3D .Text .prototype,
4
+ {
5
+ toPrimitive (executionContext = this .getExecutionContext ())
6
+ {
7
+ const geometry = this .toIndexedFaceSet (executionContext,
8
+ {
9
+ texCoord: true,
10
+ });
11
+
12
+ geometry ._metadata = this ._metadata;
13
+ geometry ._solid = this ._solid;
14
+
15
+ return geometry;
16
+ },
17
+ });
@@ -0,0 +1,33 @@
1
+ // Geometry2D
2
+ require ("./Components/Geometry2D/Arc2D");
3
+ require ("./Components/Geometry2D/ArcClose2D");
4
+ require ("./Components/Geometry2D/Circle2D");
5
+ require ("./Components/Geometry2D/Disk2D");
6
+ require ("./Components/Geometry2D/Polyline2D");
7
+ require ("./Components/Geometry2D/Polypoint2D");
8
+ require ("./Components/Geometry2D/Rectangle2D");
9
+ require ("./Components/Geometry2D/TriangleSet2D");
10
+
11
+ // Geometry3D
12
+ require ("./Components/Geometry3D/Box");
13
+ require ("./Components/Geometry3D/Cone");
14
+ require ("./Components/Geometry3D/Cylinder");
15
+ require ("./Components/Geometry3D/ElevationGrid");
16
+ require ("./Components/Geometry3D/Extrusion");
17
+ require ("./Components/Geometry3D/IndexedFaceSet");
18
+ require ("./Components/Geometry3D/Sphere");
19
+
20
+ // NURBS
21
+ require ("./Components/NURBS/NurbsCurve");
22
+ require ("./Components/NURBS/NurbsSweptSurface");
23
+ require ("./Components/NURBS/NurbsSwungSurface");
24
+ require ("./Components/NURBS/X3DNurbsSurfaceGeometryNode");
25
+
26
+ // Rendering
27
+ require ("./Components/Rendering/IndexedLineSet");
28
+ require ("./Components/Rendering/LineSet");
29
+ require ("./Components/Rendering/X3DComposedGeometryNode");
30
+ require ("./Components/Rendering/X3DGeometryNode");
31
+
32
+ // Text
33
+ require ("./Components/Text/Text");