x_ite 5.0.0 → 5.0.2

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 (69) hide show
  1. package/dist/assets/components/annotation.js +2 -2
  2. package/dist/assets/components/annotation.min.js +1 -1
  3. package/dist/assets/components/cad-geometry.js +2 -2
  4. package/dist/assets/components/cad-geometry.min.js +1 -1
  5. package/dist/assets/components/cube-map-texturing.js +2 -2
  6. package/dist/assets/components/cube-map-texturing.min.js +1 -1
  7. package/dist/assets/components/dis.js +2 -2
  8. package/dist/assets/components/dis.min.js +1 -1
  9. package/dist/assets/components/event-utilities.js +2 -2
  10. package/dist/assets/components/event-utilities.min.js +1 -1
  11. package/dist/assets/components/geometry2d.js +2 -2
  12. package/dist/assets/components/geometry2d.min.js +1 -1
  13. package/dist/assets/components/geospatial.js +2 -2
  14. package/dist/assets/components/geospatial.min.js +1 -1
  15. package/dist/assets/components/h-anim.js +2 -2
  16. package/dist/assets/components/h-anim.min.js +1 -1
  17. package/dist/assets/components/key-device-sensor.js +2 -2
  18. package/dist/assets/components/key-device-sensor.min.js +1 -1
  19. package/dist/assets/components/layout.js +2 -2
  20. package/dist/assets/components/layout.min.js +1 -1
  21. package/dist/assets/components/nurbs.js +2 -2
  22. package/dist/assets/components/nurbs.min.js +1 -1
  23. package/dist/assets/components/particle-systems.js +2 -2
  24. package/dist/assets/components/particle-systems.min.js +1 -1
  25. package/dist/assets/components/picking.js +2 -2
  26. package/dist/assets/components/picking.min.js +1 -1
  27. package/dist/assets/components/projective-texture-mapping.js +2 -2
  28. package/dist/assets/components/projective-texture-mapping.min.js +1 -1
  29. package/dist/assets/components/rigid-body-physics.js +2 -2
  30. package/dist/assets/components/rigid-body-physics.min.js +1 -1
  31. package/dist/assets/components/scripting.js +2 -2
  32. package/dist/assets/components/scripting.min.js +1 -1
  33. package/dist/assets/components/texturing-3d.js +2 -2
  34. package/dist/assets/components/texturing-3d.min.js +1 -1
  35. package/dist/assets/components/volume-rendering.js +2 -2
  36. package/dist/assets/components/volume-rendering.min.js +1 -1
  37. package/dist/assets/components/x_ite.js +2 -2
  38. package/dist/assets/components/x_ite.min.js +1 -1
  39. package/dist/assets/shaders/webgl1/Phong.fs +3 -3
  40. package/dist/assets/shaders/webgl2/Phong.fs +3 -3
  41. package/dist/example.html +2 -2
  42. package/dist/x_ite.css +2 -2
  43. package/dist/x_ite.js +14 -45
  44. package/dist/x_ite.min.js +4 -4
  45. package/dist/x_ite.zip +0 -0
  46. package/docs/_config.yml +1 -1
  47. package/docs/index.md +2 -2
  48. package/package.json +3 -3
  49. package/src/assets/shaders/webgl1/Phong.fs +3 -3
  50. package/src/assets/shaders/webgl2/Phong.fs +3 -3
  51. package/src/x_ite/Base/X3DBaseNode.js +8 -2
  52. package/src/x_ite/Browser/NURBS/NURBS.js +51 -51
  53. package/src/x_ite/Browser/VERSION.js +1 -1
  54. package/src/x_ite/Components/Grouping/X3DGroupingNode.js +17 -16
  55. package/src/x_ite/Components/NURBS/Contour2D.js +53 -14
  56. package/src/x_ite/Components/NURBS/ContourPolyline2D.js +15 -12
  57. package/src/x_ite/Components/NURBS/NurbsCurve2D.js +9 -9
  58. package/src/x_ite/Components/NURBS/NurbsOrientationInterpolator.js +9 -9
  59. package/src/x_ite/Components/NURBS/NurbsPositionInterpolator.js +6 -6
  60. package/src/x_ite/Components/NURBS/NurbsSet.js +31 -27
  61. package/src/x_ite/Components/NURBS/NurbsSurfaceInterpolator.js +10 -10
  62. package/src/x_ite/Components/NURBS/NurbsSweptSurface.js +5 -5
  63. package/src/x_ite/Components/NURBS/NurbsSwungSurface.js +4 -4
  64. package/src/x_ite/Components/NURBS/NurbsTextureCoordinate.js +6 -6
  65. package/src/x_ite/Components/NURBS/NurbsTrimmedSurface.js +46 -7
  66. package/src/x_ite/Components/NURBS/X3DNurbsSurfaceGeometryNode.js +30 -32
  67. package/src/x_ite/Components/Shape/Material.js +0 -20
  68. package/src/x_ite/Components/Shape/PhysicalMaterial.js +0 -12
  69. package/src/x_ite/Components/Shape/X3DOneSidedMaterialNode.js +0 -8
package/dist/x_ite.zip CHANGED
Binary file
package/docs/_config.yml CHANGED
@@ -20,7 +20,7 @@ github: [metadata]
20
20
  author:
21
21
  name: *title
22
22
  avatar: "assets/images/logo.png"
23
- bio: "Version 5.0.0"
23
+ bio: "Version 5.0.2"
24
24
  links:
25
25
  - label: "GitHub"
26
26
  icon: "fab fa-2x fa-fw fa-github"
package/docs/index.md CHANGED
@@ -838,8 +838,8 @@ If you are a developer or you always wanna be up to date:
838
838
  If you are on production and everything works fine, then use a numbered version.
839
839
 
840
840
  ```html
841
- <link rel="stylesheet" type="text/css" href="https://create3000.github.io/code/x_ite/5.0.0/dist/x_ite.css"/>
842
- <script type="text/javascript" src="https://create3000.github.io/code/x_ite/5.0.0/dist/x_ite.min.js"></script>
841
+ <link rel="stylesheet" type="text/css" href="https://create3000.github.io/code/x_ite/5.0.2/dist/x_ite.css"/>
842
+ <script type="text/javascript" src="https://create3000.github.io/code/x_ite/5.0.2/dist/x_ite.min.js"></script>
843
843
  ```
844
844
 
845
845
  ### jsDelivr CDN
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "x_ite",
3
- "version": "5.0.0",
4
- "revision": "1145",
3
+ "version": "5.0.2",
4
+ "revision": "1147",
5
5
  "description": "X_ITE X3D Browser, a framework for integrating and manipulating X3D and VRML scenes in HTML.",
6
6
  "main": "dist/x_ite.js",
7
7
  "repository": {
@@ -63,7 +63,7 @@
63
63
  "OpenJPEG.js": "^0.10.2",
64
64
  "opentype.js": "^1.3.4",
65
65
  "pako": "^2.0.4",
66
- "require": "2.4.20",
66
+ "require": "^2.4.20",
67
67
  "requirejs": "^2.3.6",
68
68
  "requirejs-text": "^2.0.16",
69
69
  "terser": "^5.12.1"
@@ -53,11 +53,11 @@ uniform x3d_OcclusionTextureParameters x3d_OcclusionTexture;
53
53
  #endif
54
54
 
55
55
  vec3
56
- getAmbientColor ()
56
+ getAmbientColor (in vec3 diffuseColor)
57
57
  {
58
58
  // Get ambient parameter.
59
59
 
60
- vec3 ambientParameter = x3d_Material .ambientIntensity * x3d_Material .diffuseColor;
60
+ vec3 ambientParameter = x3d_Material .ambientIntensity * diffuseColor;
61
61
 
62
62
  // Get texture color.
63
63
 
@@ -192,7 +192,7 @@ getMaterialColor ()
192
192
  vec4 diffuseColorAlpha = getDiffuseColor ();
193
193
  float alpha = diffuseColorAlpha .a;
194
194
  vec3 diffuseColor = diffuseColorAlpha .rgb;
195
- vec3 ambientColor = getAmbientColor ();
195
+ vec3 ambientColor = getAmbientColor (diffuseColor);
196
196
  vec3 specularColor = getSpecularColor ();
197
197
  float shininessFactor = getShininessFactor ();
198
198
 
@@ -51,11 +51,11 @@ uniform x3d_OcclusionTextureParameters x3d_OcclusionTexture;
51
51
  #endif
52
52
 
53
53
  vec3
54
- getAmbientColor ()
54
+ getAmbientColor (in vec3 diffuseColor)
55
55
  {
56
56
  // Get ambient parameter.
57
57
 
58
- vec3 ambientParameter = x3d_Material .ambientIntensity * x3d_Material .diffuseColor;
58
+ vec3 ambientParameter = x3d_Material .ambientIntensity * diffuseColor;
59
59
 
60
60
  // Get texture color.
61
61
 
@@ -202,7 +202,7 @@ getMaterialColor ()
202
202
  vec4 diffuseColorAlpha = getDiffuseColor ();
203
203
  float alpha = diffuseColorAlpha .a;
204
204
  vec3 diffuseColor = diffuseColorAlpha .rgb;
205
- vec3 ambientColor = getAmbientColor ();
205
+ vec3 ambientColor = getAmbientColor (diffuseColor);
206
206
  vec3 specularColor = getSpecularColor ();
207
207
  float shininessFactor = getShininessFactor ();
208
208
 
@@ -188,7 +188,10 @@ function (X3DEventObject,
188
188
 
189
189
  // Connect to execution context.
190
190
 
191
- if (this [_executionContext] !== this)
191
+ if (this .getOuterNode && this .getOuterNode ())
192
+ this .getOuterNode () .isLive () .addInterest (_set_live__, this);
193
+
194
+ else if (this [_executionContext] !== this)
192
195
  this [_executionContext] .isLive () .addInterest (_set_live__, this);
193
196
 
194
197
  // Return field
@@ -215,7 +218,10 @@ function (X3DEventObject,
215
218
  {
216
219
  /// Determines the live state of this node.
217
220
 
218
- if (this !== this [_executionContext])
221
+ if (this .getOuterNode && this .getOuterNode ())
222
+ return this .getLive () && this .getOuterNode () .isLive () .getValue ();
223
+
224
+ else if (this !== this [_executionContext])
219
225
  return this .getLive () && this [_executionContext] .isLive () .getValue ();
220
226
 
221
227
  return this .getLive ();
@@ -58,7 +58,7 @@ function (Vector2,
58
58
  {
59
59
  "use strict";
60
60
 
61
- var NURBS = {
61
+ const NURBS = {
62
62
  getTessellation: function (tessellation, dimension)
63
63
  {
64
64
  if (tessellation > 0)
@@ -71,7 +71,7 @@ function (Vector2,
71
71
  },
72
72
  getClosed2D: function (order, knot, weight, controlPoint)
73
73
  {
74
- var
74
+ const
75
75
  dimension = controlPoint .length,
76
76
  haveWeights = weight .length === dimension;
77
77
 
@@ -97,13 +97,13 @@ function (Vector2,
97
97
  },
98
98
  getClosed: (function ()
99
99
  {
100
- var
100
+ const
101
101
  firstPoint = new Vector3 (0, 0, 0),
102
102
  lastPoint = new Vector3 (0, 0, 0);
103
103
 
104
104
  return function (order, knot, weight, controlPointNode)
105
105
  {
106
- var
106
+ const
107
107
  dimension = controlPointNode .getSize (),
108
108
  haveWeights = weight .length === dimension;
109
109
 
@@ -130,17 +130,17 @@ function (Vector2,
130
130
  })(),
131
131
  getUClosed: (function ()
132
132
  {
133
- var
133
+ const
134
134
  firstPoint = new Vector3 (0, 0, 0),
135
135
  lastPoint = new Vector3 (0, 0, 0);
136
136
 
137
137
  return function (uOrder, uDimension, vDimension, uKnot, weight, controlPointNode)
138
138
  {
139
- var haveWeights = weight .length === controlPointNode .getSize ();
139
+ const haveWeights = weight .length === controlPointNode .getSize ();
140
140
 
141
- for (var v = 0, length = vDimension; v < length; ++ v)
141
+ for (let v = 0, length = vDimension; v < length; ++ v)
142
142
  {
143
- var
143
+ const
144
144
  first = v * uDimension,
145
145
  last = v * uDimension + uDimension - 1;
146
146
 
@@ -168,17 +168,17 @@ function (Vector2,
168
168
  })(),
169
169
  getVClosed: (function ()
170
170
  {
171
- var
171
+ const
172
172
  firstPoint = new Vector3 (0, 0, 0),
173
173
  lastPoint = new Vector3 (0, 0, 0);
174
174
 
175
175
  return function (vOrder, uDimension, vDimension, vKnot, weight, controlPointNode)
176
176
  {
177
- var haveWeights = weight .length === controlPointNode .getSize ();
177
+ const haveWeights = weight .length === controlPointNode .getSize ();
178
178
 
179
- for (var u = 0, size = uDimension; u < size; ++ u)
179
+ for (let u = 0, size = uDimension; u < size; ++ u)
180
180
  {
181
- var
181
+ const
182
182
  first = u,
183
183
  last = (vDimension - 1) * uDimension + u;
184
184
 
@@ -211,9 +211,9 @@ function (Vector2,
211
211
  if (knot .length === dimension + order)
212
212
  {
213
213
  {
214
- var count = 1;
214
+ let count = 1;
215
215
 
216
- for (var i = 1, size = order; i < size; ++ i)
216
+ for (let i = 1, size = order; i < size; ++ i)
217
217
  {
218
218
  count += knot [i] === knot [0];
219
219
  }
@@ -223,9 +223,9 @@ function (Vector2,
223
223
  }
224
224
 
225
225
  {
226
- var count = 1;
226
+ let count = 1;
227
227
 
228
- for (var i = knot .length - order, size = knot .length - 1; i < size; ++ i)
228
+ for (let i = knot .length - order, size = knot .length - 1; i < size; ++ i)
229
229
  {
230
230
  count += knot [i] === knot [size];
231
231
  }
@@ -239,9 +239,9 @@ function (Vector2,
239
239
  },
240
240
  getKnots: function (result, closed, order, dimension, knot)
241
241
  {
242
- var knots = result || [ ];
242
+ const knots = result || [ ];
243
243
 
244
- for (var i = 0, length = knot .length; i < length; ++ i)
244
+ for (let i = 0, length = knot .length; i < length; ++ i)
245
245
  knots [i] = knot [i];
246
246
 
247
247
  knots .length = knot .length;
@@ -249,15 +249,15 @@ function (Vector2,
249
249
  // check the knot-vectors. If they are not according to standard
250
250
  // default uniform knot vectors will be generated.
251
251
 
252
- var generateUniform = true;
252
+ let generateUniform = true;
253
253
 
254
254
  if (knots .length === dimension + order)
255
255
  {
256
256
  generateUniform = false;
257
257
 
258
- var consecutiveKnots = 0;
258
+ let consecutiveKnots = 0;
259
259
 
260
- for (var i = 1, length = knots .length; i < length; ++ i)
260
+ for (let i = 1, length = knots .length; i < length; ++ i)
261
261
  {
262
262
  if (knots [i] == knots [i - 1])
263
263
  ++ consecutiveKnots;
@@ -274,13 +274,13 @@ function (Vector2,
274
274
 
275
275
  if (generateUniform)
276
276
  {
277
- for (var i = 0, length = dimension + order; i < length; ++ i)
277
+ for (let i = 0, length = dimension + order; i < length; ++ i)
278
278
  knots [i] = i / (length - 1);
279
279
  }
280
280
 
281
281
  if (closed)
282
282
  {
283
- for (var i = 1, length = order - 1; i < length; ++ i)
283
+ for (let i = 1, length = order - 1; i < length; ++ i)
284
284
  knots .push (knots .at (-1) + (knots [i] - knots [i - 1]));
285
285
  }
286
286
 
@@ -291,9 +291,9 @@ function (Vector2,
291
291
  if (weight .length !== dimension)
292
292
  return undefined;
293
293
 
294
- var weights = result || [ ];
294
+ const weights = result || [ ];
295
295
 
296
- for (var i = 0; i < dimension; ++ i)
296
+ for (let i = 0; i < dimension; ++ i)
297
297
  {
298
298
  weights [i] = weight [i];
299
299
  }
@@ -304,16 +304,16 @@ function (Vector2,
304
304
  },
305
305
  getUVWeights: function (result, uDimension, vDimension, weight)
306
306
  {
307
- var dimension = uDimension * vDimension;
307
+ const dimension = uDimension * vDimension;
308
308
 
309
309
  if (weight .length !== dimension)
310
310
  return undefined;
311
311
 
312
- var weights = result || [ ];
312
+ const weights = result || [ ];
313
313
 
314
- for (var u = 0, i = 0; u < uDimension; ++ u)
314
+ for (let u = 0, i = 0; u < uDimension; ++ u)
315
315
  {
316
- for (var v = 0; v < vDimension; ++ v, ++ i)
316
+ for (let v = 0; v < vDimension; ++ v, ++ i)
317
317
  {
318
318
  weights [i] = weight [i];
319
319
  }
@@ -325,7 +325,7 @@ function (Vector2,
325
325
  },
326
326
  getControlPoints2D: function (result, closed, order, weights, controlPoint)
327
327
  {
328
- var
328
+ const
329
329
  controlPoints = result || [ ],
330
330
  controlPointArray = controlPoint .getValue (),
331
331
  dimension = controlPoint .length,
@@ -338,9 +338,9 @@ function (Vector2,
338
338
  controlPoints .length = 0;
339
339
  }
340
340
 
341
- for (var i = 0; i < dimension; ++ i)
341
+ for (let i = 0; i < dimension; ++ i)
342
342
  {
343
- var
343
+ const
344
344
  i2 = i * 2,
345
345
  p = controlPoints [i] || new Vector (0, 0, 0);
346
346
 
@@ -351,7 +351,7 @@ function (Vector2,
351
351
 
352
352
  if (closed)
353
353
  {
354
- for (var i = 1, size = order - 1; i < size; ++ i)
354
+ for (let i = 1, size = order - 1; i < size; ++ i)
355
355
  controlPoints .push (controlPoints [i]);
356
356
  }
357
357
 
@@ -359,7 +359,7 @@ function (Vector2,
359
359
  },
360
360
  getControlPoints: function (result, closed, order, weights, controlPointNode)
361
361
  {
362
- var
362
+ const
363
363
  controlPoints = result || [ ],
364
364
  dimension = controlPointNode .getSize (),
365
365
  haveWeights = Boolean (weights),
@@ -371,9 +371,9 @@ function (Vector2,
371
371
  controlPoints .length = 0;
372
372
  }
373
373
 
374
- for (var i = 0; i < dimension; ++ i)
374
+ for (let i = 0; i < dimension; ++ i)
375
375
  {
376
- var cp = controlPoints [i] = controlPointNode .get1Point (i, controlPoints [i] || new Vector (0, 0, 0, 0));
376
+ const cp = controlPoints [i] = controlPointNode .get1Point (i, controlPoints [i] || new Vector (0, 0, 0, 0));
377
377
 
378
378
  if (haveWeights)
379
379
  cp .w = weights [i];
@@ -383,7 +383,7 @@ function (Vector2,
383
383
 
384
384
  if (closed)
385
385
  {
386
- for (var i = 1, size = order - 1; i < size; ++ i)
386
+ for (let i = 1, size = order - 1; i < size; ++ i)
387
387
  controlPoints .push (controlPoints [i]);
388
388
  }
389
389
 
@@ -391,7 +391,7 @@ function (Vector2,
391
391
  },
392
392
  getUVControlPoints: function (result, uClosed, vClosed, uOrder, vOrder, uDimension, vDimension, weights, controlPointNode)
393
393
  {
394
- var
394
+ const
395
395
  controlPoints = result || [ ],
396
396
  haveWeights = Boolean (weights),
397
397
  Vector = haveWeights ? Vector4 : Vector3;
@@ -402,16 +402,16 @@ function (Vector2,
402
402
  controlPoints .length = 0;
403
403
  }
404
404
 
405
- for (var u = 0; u < uDimension; ++ u)
405
+ for (let u = 0; u < uDimension; ++ u)
406
406
  {
407
- var cp = controlPoints [u];
407
+ let cp = controlPoints [u];
408
408
 
409
409
  if (! cp)
410
410
  cp = controlPoints [u] = [ ];
411
411
 
412
- for (var v = 0; v < vDimension; ++ v)
412
+ for (let v = 0; v < vDimension; ++ v)
413
413
  {
414
- var index = v * uDimension + u;
414
+ const index = v * uDimension + u;
415
415
 
416
416
  cp [v] = controlPointNode .get1Point (index, cp [v] || new Vector (0, 0, 0, 0));
417
417
 
@@ -423,7 +423,7 @@ function (Vector2,
423
423
 
424
424
  if (vClosed)
425
425
  {
426
- for (var i = 1, length = vOrder - 1; i < length; ++ i)
426
+ for (let i = 1, length = vOrder - 1; i < length; ++ i)
427
427
  cp .push (cp [i]);
428
428
  }
429
429
  }
@@ -432,7 +432,7 @@ function (Vector2,
432
432
 
433
433
  if (uClosed)
434
434
  {
435
- for (var i = 1, length = uOrder - 1; i < length; ++ i)
435
+ for (let i = 1, length = uOrder - 1; i < length; ++ i)
436
436
  controlPoints .push (controlPoints [i]);
437
437
  }
438
438
 
@@ -440,18 +440,18 @@ function (Vector2,
440
440
  },
441
441
  getTexControlPoints: function (result, uClosed, vClosed, uOrder, vOrder, uDimension, vDimension, controlPointNode)
442
442
  {
443
- var controlPoints = result || [ ];
443
+ const controlPoints = result || [ ];
444
444
 
445
- for (var u = 0; u < uDimension; ++ u)
445
+ for (let u = 0; u < uDimension; ++ u)
446
446
  {
447
- var cp = controlPoints [u];
447
+ let cp = controlPoints [u];
448
448
 
449
449
  if (! cp)
450
450
  cp = controlPoints [u] = [ ];
451
451
 
452
- for (var v = 0; v < vDimension; ++ v)
452
+ for (let v = 0; v < vDimension; ++ v)
453
453
  {
454
- var index = v * uDimension + u;
454
+ const index = v * uDimension + u;
455
455
 
456
456
  cp [v] = controlPointNode .get1Point (index, cp [v] || new Vector4 (0, 0, 0, 0));
457
457
  }
@@ -460,7 +460,7 @@ function (Vector2,
460
460
 
461
461
  if (vClosed)
462
462
  {
463
- for (var i = 1, length = vOrder - 1; i < length; ++ i)
463
+ for (let i = 1, length = vOrder - 1; i < length; ++ i)
464
464
  cp .push (cp [i]);
465
465
  }
466
466
  }
@@ -469,7 +469,7 @@ function (Vector2,
469
469
 
470
470
  if (uClosed)
471
471
  {
472
- for (var i = 1, length = uOrder - 1; i < length; ++ i)
472
+ for (let i = 1, length = uOrder - 1; i < length; ++ i)
473
473
  controlPoints .push (controlPoints [i]);
474
474
  }
475
475
 
@@ -49,5 +49,5 @@
49
49
 
50
50
  define (function ()
51
51
  {
52
- return "5.0.0";
52
+ return "5.0.2";
53
53
  });
@@ -62,20 +62,6 @@ function (X3DChildNode,
62
62
  {
63
63
  "use strict";
64
64
 
65
- function getId (value) { return value ? value .getValue () .getId () : -1; }
66
-
67
- function remove (array, first, last, range, rfirst, rlast)
68
- {
69
- const set = { };
70
-
71
- for (let i = rfirst; i < rlast; ++ i)
72
- set [getId (range [i])] = true;
73
-
74
- function compare (value) { return set [getId (value)]; }
75
-
76
- return array .remove (first, last, compare);
77
- }
78
-
79
65
  function X3DGroupingNode (executionContext)
80
66
  {
81
67
  X3DChildNode .call (this, executionContext);
@@ -167,7 +153,7 @@ function (X3DChildNode,
167
153
  this ._children .insert (this ._children .length, this ._addChildren, 0, this ._addChildren .length);
168
154
  this .add (this ._addChildren);
169
155
 
170
- this ._addChildren .set ([ ]);
156
+ this ._addChildren .length = 0;
171
157
  this ._addChildren .setTainted (false);
172
158
  },
173
159
  set_removeChildren__: function ()
@@ -175,6 +161,8 @@ function (X3DChildNode,
175
161
  if (this ._removeChildren .length === 0)
176
162
  return;
177
163
 
164
+ this ._removeChildren .setTainted (true);
165
+
178
166
  if (this ._children .length > 0)
179
167
  {
180
168
  if (!this ._children .isTainted ())
@@ -190,7 +178,8 @@ function (X3DChildNode,
190
178
  this .remove (this ._removeChildren);
191
179
  }
192
180
 
193
- this ._removeChildren .set ([ ]);
181
+ this ._removeChildren .length = 0;
182
+ this ._removeChildren .setTainted (false);
194
183
  },
195
184
  set_children__: function ()
196
185
  {
@@ -720,5 +709,17 @@ function (X3DChildNode,
720
709
  },
721
710
  });
722
711
 
712
+ function remove (array, first, last, range, rfirst, rlast)
713
+ {
714
+ const set = new Set ();
715
+
716
+ for (let i = rfirst; i < rlast; ++ i)
717
+ set .add (range [i]);
718
+
719
+ function compare (value) { return set .has (value); }
720
+
721
+ return array .remove (first, last, compare);
722
+ }
723
+
723
724
  return X3DGroupingNode;
724
725
  });
@@ -98,43 +98,82 @@ function (Fields,
98
98
  {
99
99
  X3DNode .prototype .initialize .call (this);
100
100
 
101
- this ._children .addInterest ("set_children__", this);
101
+ this ._addChildren .addInterest ("set_addChildren__", this);
102
+ this ._removeChildren .addInterest ("set_removeChildren__", this);
103
+ this ._children .addInterest ("set_children__", this);
102
104
 
103
105
  this .set_children__ ();
104
106
  },
107
+ set_addChildren__: function ()
108
+ {
109
+ this ._addChildren .setTainted (true);
110
+
111
+ this ._addChildren .erase (remove (this ._addChildren, 0, this ._addChildren .length,
112
+ this ._children, 0, this ._children .length),
113
+ this ._addChildren .length);
114
+
115
+ for (const child of this ._addChildren)
116
+ this ._children .push (child);
117
+
118
+ this ._addChildren .length = 0;
119
+ this ._addChildren .setTainted (false);
120
+ },
121
+ set_removeChildren__: function ()
122
+ {
123
+ this ._removeChildren .setTainted (true);
124
+
125
+ this ._children .erase (remove (this ._children, 0, this ._children .length,
126
+ this ._removeChildren, 0, this ._removeChildren .length),
127
+ this ._children .length);
128
+
129
+ this ._removeChildren .length = 0;
130
+ this ._removeChildren .setTainted (false);
131
+ },
105
132
  set_children__: function ()
106
133
  {
107
- var childNodes = this .childNodes;
134
+ const childNodes = this .childNodes;
108
135
 
109
136
  childNodes .length = 0;
110
137
 
111
- for (var i = 0, length = this ._children .length; i < length; ++ i)
138
+ for (const node of this ._children)
112
139
  {
113
- var childNode = X3DCast (X3DConstants .NurbsCurve2D, this ._children [i]);
140
+ const childNode = X3DCast (X3DConstants .NurbsCurve2D, node);
114
141
 
115
142
  if (childNode)
116
143
  {
117
144
  childNodes .push (childNode);
118
145
  continue;
119
146
  }
120
-
121
- var childNode = X3DCast (X3DConstants .ContourPolyline2D, this ._children [i]);
122
-
123
- if (childNode)
147
+ else
124
148
  {
125
- childNodes .push (childNode);
126
- continue;
149
+ const childNode = X3DCast (X3DConstants .ContourPolyline2D, node);
150
+
151
+ if (childNode)
152
+ {
153
+ childNodes .push (childNode);
154
+ continue;
155
+ }
127
156
  }
128
157
  }
129
158
  },
130
159
  addTrimmingContour: function (trimmingContours)
131
160
  {
132
- var childNodes = this .childNodes;
133
-
134
- for (var i = 0, length = childNodes .length; i < length; ++ i)
135
- trimmingContours .push (childNodes [i] .tessellate (2));
161
+ for (const childNode of this .childNodes)
162
+ trimmingContours .push (childNode .tessellate (2));
136
163
  }
137
164
  });
138
165
 
166
+ function remove (array, first, last, range, rfirst, rlast)
167
+ {
168
+ const set = new Set ();
169
+
170
+ for (let i = rfirst; i < rlast; ++ i)
171
+ set .add (range [i]);
172
+
173
+ function compare (value) { return set .has (value); }
174
+
175
+ return array .remove (first, last, compare);
176
+ }
177
+
139
178
  return Contour2D;
140
179
  });
@@ -98,13 +98,14 @@ function (Fields,
98
98
  {
99
99
  case 0:
100
100
  {
101
- var
101
+ const
102
102
  controlPointArray = this ._controlPoint .getValue (),
103
- controlPoints = this .controlPoints;
103
+ controlPoints = this .controlPoints,
104
+ length = this ._controlPoint .length;
104
105
 
105
- for (var i = 0, length = this ._controlPoint .length; i < length; ++ i)
106
+ for (let i = 0; i < length; ++ i)
106
107
  {
107
- var i2 = i * 2;
108
+ const i2 = i * 2;
108
109
 
109
110
  controlPoints [i2 + 0] = controlPointArray [i2 + 0];
110
111
  controlPoints [i2 + 1] = controlPointArray [i2 + 1];
@@ -116,13 +117,14 @@ function (Fields,
116
117
  }
117
118
  case 1:
118
119
  {
119
- var
120
+ const
120
121
  controlPointArray = this ._controlPoint .getValue (),
121
- controlPoints = this .controlPoints;
122
+ controlPoints = this .controlPoints,
123
+ length = this ._controlPoint .length;
122
124
 
123
- for (var i = 0, length = this ._controlPoint .length; i < length; ++ i)
125
+ for (let i = 0; i < length; ++ i)
124
126
  {
125
- var
127
+ const
126
128
  i2 = i * 2,
127
129
  i3 = i * 3;
128
130
 
@@ -137,13 +139,14 @@ function (Fields,
137
139
  }
138
140
  case 3:
139
141
  {
140
- var
142
+ const
141
143
  controlPointArray = this ._controlPoint .getValue (),
142
- controlPoints = this .controlPoints;
144
+ controlPoints = this .controlPoints,
145
+ length = this ._controlPoint .length;
143
146
 
144
- for (var i = 0, length = this ._controlPoint .length; i < length; ++ i)
147
+ for (let i = 0; i < length; ++ i)
145
148
  {
146
- var i2 = i * 2;
149
+ const i2 = i * 2;
147
150
 
148
151
  controlPoints [i] = new Vector3 (controlPointArray [i2 + 0], controlPointArray [i2 + 1], 0);
149
152
  }