x_ite 8.6.1 → 8.6.3
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/dist/assets/components/Annotation.js +13 -13
- package/dist/assets/components/Annotation.min.js +1 -1
- package/dist/assets/components/CADGeometry.js +13 -13
- package/dist/assets/components/CADGeometry.min.js +1 -1
- package/dist/assets/components/CubeMapTexturing.js +25 -25
- package/dist/assets/components/CubeMapTexturing.min.js +1 -1
- package/dist/assets/components/DIS.js +13 -13
- package/dist/assets/components/DIS.min.js +1 -1
- package/dist/assets/components/EventUtilities.js +9 -9
- package/dist/assets/components/EventUtilities.min.js +1 -1
- package/dist/assets/components/Geometry2D.js +19 -19
- package/dist/assets/components/Geometry2D.min.js +1 -1
- package/dist/assets/components/Geospatial.js +33 -33
- package/dist/assets/components/Geospatial.min.js +1 -1
- package/dist/assets/components/HAnim.js +18 -18
- package/dist/assets/components/HAnim.min.js +1 -1
- package/dist/assets/components/KeyDeviceSensor.js +8 -8
- package/dist/assets/components/KeyDeviceSensor.min.js +1 -1
- package/dist/assets/components/Layout.js +27 -27
- package/dist/assets/components/Layout.min.js +1 -1
- package/dist/assets/components/NURBS.js +24 -24
- package/dist/assets/components/NURBS.min.js +1 -1
- package/dist/assets/components/ParticleSystems.js +23 -23
- package/dist/assets/components/ParticleSystems.min.js +1 -1
- package/dist/assets/components/Picking.js +19 -19
- package/dist/assets/components/Picking.min.js +1 -1
- package/dist/assets/components/RigidBodyPhysics.js +18 -18
- package/dist/assets/components/RigidBodyPhysics.min.js +1 -1
- package/dist/assets/components/Scripting.js +28 -28
- package/dist/assets/components/Scripting.min.js +1 -1
- package/dist/assets/components/Text.js +33 -36
- package/dist/assets/components/Text.min.js +1 -1
- package/dist/assets/components/TextureProjector.js +14 -14
- package/dist/assets/components/TextureProjector.min.js +1 -1
- package/dist/assets/components/Texturing3D.js +30 -30
- package/dist/assets/components/Texturing3D.min.js +1 -1
- package/dist/assets/components/VolumeRendering.js +19 -19
- package/dist/assets/components/VolumeRendering.min.js +1 -1
- package/dist/assets/components/X_ITE.js +9 -9
- package/dist/assets/components/X_ITE.min.js +1 -1
- package/dist/x_ite.css +1 -1
- package/dist/x_ite.js +221 -186
- package/dist/x_ite.min.js +1 -1
- package/dist/x_ite.zip +0 -0
- package/docs/_config.yml +2 -2
- package/docs/_posts/getting-started.md +1 -1
- package/docs/_posts/laboratory/x3d-file-converter.md +183 -0
- package/docs/laboratory/3d-l-system-generator.html +1 -1
- package/docs/laboratory/gltf-sample-viewer.html +1 -1
- package/docs/laboratory/online-dicom-and-nrrd-file-viewer.html +1 -1
- package/docs/laboratory/real-time-earth-quake-information.html +1 -1
- package/docs/laboratory/x3d-visual-blend-mode-editor.html +1 -1
- package/package.json +1 -1
- package/src/standard/Math/Algorithms/Bezier.js +3 -15
- package/src/standard/Math/Numbers/Matrix2.js +5 -5
- package/src/tests.js +11 -0
- package/src/x_ite/Browser/Core/X3DCoreContext.js +4 -6
- package/src/x_ite/Browser/Text/PolygonText.js +9 -12
- package/src/x_ite/Browser/VERSION.js +1 -1
- package/src/x_ite/Components/Core/X3DNode.js +12 -0
- package/src/x_ite/Components/Core/X3DPrototypeInstance.js +18 -0
- package/src/x_ite/Configuration/UnitInfo.js +2 -0
- package/src/x_ite/Execution/X3DExportedNode.js +4 -0
- package/src/x_ite/Execution/X3DImportedNode.js +14 -0
- package/src/x_ite/Execution/X3DScene.js +4 -0
- package/src/x_ite/Fields/SFString.js +4 -6
- package/src/x_ite/InputOutput/FileLoader.js +1 -1
- package/src/x_ite/InputOutput/Generator.js +35 -55
- package/src/x_ite/Parser/SVGParser.js +41 -41
- package/src/x_ite/Parser/X3DParser.js +3 -2
- package/src/x_ite/Prototype/X3DExternProtoDeclaration.js +4 -0
- package/src/x_ite/Prototype/X3DProtoDeclaration.js +4 -0
- package/src/x_ite/Routing/X3DRoute.js +8 -0
|
@@ -350,7 +350,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
|
|
|
350
350
|
generator .string += '"';
|
|
351
351
|
generator .string += ':';
|
|
352
352
|
generator .string += generator .TidySpace ();
|
|
353
|
+
generator .string += '"';
|
|
353
354
|
generator .string += generator .JSONEncode (generator .Name (this .getInlineNode ()));
|
|
355
|
+
generator .string += '"';
|
|
354
356
|
generator .string += ',';
|
|
355
357
|
generator .string += generator .TidyBreak ();
|
|
356
358
|
|
|
@@ -360,7 +362,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
|
|
|
360
362
|
generator .string += '"';
|
|
361
363
|
generator .string += ':';
|
|
362
364
|
generator .string += generator .TidySpace ();
|
|
365
|
+
generator .string += '"';
|
|
363
366
|
generator .string += generator .JSONEncode (this .getExportedName ());
|
|
367
|
+
generator .string += '"';
|
|
364
368
|
|
|
365
369
|
if (this .getImportedName () !== this .getExportedName ())
|
|
366
370
|
{
|
|
@@ -372,7 +376,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
|
|
|
372
376
|
generator .string += '"';
|
|
373
377
|
generator .string += ':';
|
|
374
378
|
generator .string += generator .TidySpace ();
|
|
379
|
+
generator .string += '"';
|
|
375
380
|
generator .string += generator .JSONEncode (this .getImportedName ());
|
|
381
|
+
generator .string += '"';
|
|
376
382
|
generator .string += generator .TidyBreak ();
|
|
377
383
|
}
|
|
378
384
|
else
|
|
@@ -437,7 +443,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
|
|
|
437
443
|
generator .string += '"';
|
|
438
444
|
generator .string += ':';
|
|
439
445
|
generator .string += generator .TidySpace ();
|
|
446
|
+
generator .string += '"';
|
|
440
447
|
generator .string += generator .JSONEncode (sourceNodeName);
|
|
448
|
+
generator .string += '"';
|
|
441
449
|
generator .string += ',';
|
|
442
450
|
generator .string += generator .TidyBreak ();
|
|
443
451
|
|
|
@@ -447,7 +455,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
|
|
|
447
455
|
generator .string += '"';
|
|
448
456
|
generator .string += ':';
|
|
449
457
|
generator .string += generator .TidySpace ();
|
|
458
|
+
generator .string += '"';
|
|
450
459
|
generator .string += generator .JSONEncode (sourceField);
|
|
460
|
+
generator .string += '"';
|
|
451
461
|
generator .string += ',';
|
|
452
462
|
generator .string += generator .TidyBreak ();
|
|
453
463
|
|
|
@@ -457,7 +467,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
|
|
|
457
467
|
generator .string += '"';
|
|
458
468
|
generator .string += ':';
|
|
459
469
|
generator .string += generator .TidySpace ();
|
|
470
|
+
generator .string += '"';
|
|
460
471
|
generator .string += generator .JSONEncode (destinationNodeName);
|
|
472
|
+
generator .string += '"';
|
|
461
473
|
generator .string += ',';
|
|
462
474
|
generator .string += generator .TidyBreak ();
|
|
463
475
|
|
|
@@ -467,7 +479,9 @@ X3DImportedNode .prototype = Object .assign (Object .create (X3DNode .prototype)
|
|
|
467
479
|
generator .string += '"';
|
|
468
480
|
generator .string += ':';
|
|
469
481
|
generator .string += generator .TidySpace ();
|
|
482
|
+
generator .string += '"';
|
|
470
483
|
generator .string += generator .JSONEncode (destinationField);
|
|
484
|
+
generator .string += '"';
|
|
471
485
|
generator .string += generator .TidyBreak ();
|
|
472
486
|
|
|
473
487
|
generator .string += generator .DecIndent ();
|
|
@@ -762,7 +762,9 @@ X3DScene .prototype = Object .assign (Object .create (X3DExecutionContext .proto
|
|
|
762
762
|
generator .string += '"';
|
|
763
763
|
generator .string += ':';
|
|
764
764
|
generator .string += generator .TidySpace ();
|
|
765
|
+
generator .string += '"';
|
|
765
766
|
generator .string += generator .JSONEncode (key);
|
|
767
|
+
generator .string += '"';
|
|
766
768
|
generator .string += ',';
|
|
767
769
|
generator .string += generator .TidyBreak ();
|
|
768
770
|
|
|
@@ -772,7 +774,9 @@ X3DScene .prototype = Object .assign (Object .create (X3DExecutionContext .proto
|
|
|
772
774
|
generator .string += '"';
|
|
773
775
|
generator .string += ':';
|
|
774
776
|
generator .string += generator .TidySpace ();
|
|
777
|
+
generator .string += '"';
|
|
775
778
|
generator .string += generator .JSONEncode (value);
|
|
779
|
+
generator .string += '"';
|
|
776
780
|
generator .string += generator .TidyBreak ();
|
|
777
781
|
|
|
778
782
|
generator .string += generator .DecIndent ();
|
|
@@ -48,10 +48,6 @@
|
|
|
48
48
|
import X3DField from "../Base/X3DField.js";
|
|
49
49
|
import X3DConstants from "../Base/X3DConstants.js";
|
|
50
50
|
|
|
51
|
-
const
|
|
52
|
-
unescape = /\\([\\"])/g,
|
|
53
|
-
escape = /([\\"])/g;
|
|
54
|
-
|
|
55
51
|
function SFString (value)
|
|
56
52
|
{
|
|
57
53
|
return X3DField .call (this, arguments .length ? "" + value : "");
|
|
@@ -61,11 +57,11 @@ Object .assign (SFString,
|
|
|
61
57
|
{
|
|
62
58
|
unescape: function (string)
|
|
63
59
|
{
|
|
64
|
-
return string .replace (
|
|
60
|
+
return string .replace (/\\([\\"])/g, "$1");
|
|
65
61
|
},
|
|
66
62
|
escape: function (string)
|
|
67
63
|
{
|
|
68
|
-
return string .replace (
|
|
64
|
+
return string .replace (/([\\"])/g, "\\$1");
|
|
69
65
|
},
|
|
70
66
|
});
|
|
71
67
|
|
|
@@ -115,7 +111,9 @@ SFString .prototype = Object .assign (Object .create (X3DField .prototype),
|
|
|
115
111
|
},
|
|
116
112
|
toJSONStreamValue: function (generator)
|
|
117
113
|
{
|
|
114
|
+
generator .string += '"';
|
|
118
115
|
generator .string += generator .JSONEncode (this .getValue ());
|
|
116
|
+
generator .string += '"';
|
|
119
117
|
},
|
|
120
118
|
});
|
|
121
119
|
|
|
@@ -282,7 +282,7 @@ FileLoader .prototype = Object .assign (Object .create (X3DObject .prototype),
|
|
|
282
282
|
|
|
283
283
|
const
|
|
284
284
|
options = { cache: this .node .getCache () ? "default" : "reload" },
|
|
285
|
-
response = this .handleErrors (await fetch (
|
|
285
|
+
response = this .handleErrors (await fetch (this .URL .href, options)),
|
|
286
286
|
contentType = response .headers .get ("content-type") .replace (/;.*$/, "");
|
|
287
287
|
|
|
288
288
|
if (this .foreign)
|
|
@@ -499,68 +499,48 @@ Generator .prototype =
|
|
|
499
499
|
|
|
500
500
|
return value;
|
|
501
501
|
},
|
|
502
|
-
XMLEncode: function (
|
|
503
|
-
{
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
502
|
+
XMLEncode: (function ()
|
|
503
|
+
{
|
|
504
|
+
const map = {
|
|
505
|
+
"\\": "\\\\",
|
|
506
|
+
"\r": "
",
|
|
507
|
+
"\n": "
",
|
|
508
|
+
"\t": "	",
|
|
509
|
+
"\"": "\\\"",
|
|
510
|
+
"'": "'",
|
|
511
|
+
"<": "<",
|
|
512
|
+
">": ">",
|
|
513
|
+
"&": "&",
|
|
514
|
+
};
|
|
515
|
+
|
|
516
|
+
const regex = /([\\\r\n\t"'<>&])/g;
|
|
517
|
+
|
|
518
|
+
return function (string)
|
|
519
|
+
{
|
|
520
|
+
return string .replace (regex, char => map [char]);
|
|
521
|
+
};
|
|
522
|
+
})(),
|
|
515
523
|
escapeCDATA: function (string)
|
|
516
524
|
{
|
|
517
525
|
return string .replace (/\]\]\>/g, "\\]\\]\\>");
|
|
518
526
|
},
|
|
519
|
-
JSONEncode: function (
|
|
527
|
+
JSONEncode: (function ()
|
|
520
528
|
{
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
{
|
|
529
|
-
result += "\\r";
|
|
530
|
-
break;
|
|
531
|
-
}
|
|
532
|
-
case '\n':
|
|
533
|
-
{
|
|
534
|
-
result += "\\n";
|
|
535
|
-
break;
|
|
536
|
-
}
|
|
537
|
-
case '\t':
|
|
538
|
-
{
|
|
539
|
-
result += "\\t";
|
|
540
|
-
break;
|
|
541
|
-
}
|
|
542
|
-
case '"':
|
|
543
|
-
{
|
|
544
|
-
result += "\\\"";
|
|
545
|
-
break;
|
|
546
|
-
}
|
|
547
|
-
case '\\':
|
|
548
|
-
{
|
|
549
|
-
result += "\\\\";
|
|
550
|
-
break;
|
|
551
|
-
}
|
|
552
|
-
default:
|
|
553
|
-
{
|
|
554
|
-
result += character;
|
|
555
|
-
break;
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
}
|
|
529
|
+
const map = {
|
|
530
|
+
"\\": "\\\\",
|
|
531
|
+
"\r": "\\r",
|
|
532
|
+
"\n": "\\n",
|
|
533
|
+
"\t": "\\t",
|
|
534
|
+
"\"": "\\\"",
|
|
535
|
+
};
|
|
559
536
|
|
|
560
|
-
|
|
537
|
+
const regex = /([\\\t\n\r"])/g;
|
|
561
538
|
|
|
562
|
-
return
|
|
563
|
-
|
|
539
|
+
return function (string)
|
|
540
|
+
{
|
|
541
|
+
return string .replace (regex, char => map [char]);
|
|
542
|
+
};
|
|
543
|
+
})(),
|
|
564
544
|
JSONNumber: function (value)
|
|
565
545
|
{
|
|
566
546
|
switch (value)
|
|
@@ -103,9 +103,9 @@ const
|
|
|
103
103
|
PICA = INCH / 6, // One pica in meters.
|
|
104
104
|
PIXEL = INCH / 90, // One pixel in meters.
|
|
105
105
|
EM = 16, // One em in pixels,
|
|
106
|
-
BEZIER_STEPS = 10,
|
|
107
|
-
CIRCLE_STEPS = 64,
|
|
108
|
-
GRADIENT_SIZE = 256;
|
|
106
|
+
BEZIER_STEPS = 10, // Subdivisions of a span.
|
|
107
|
+
CIRCLE_STEPS = 64, // Subdivisions of a circle, used for arc.
|
|
108
|
+
GRADIENT_SIZE = 256; // In pixels.
|
|
109
109
|
|
|
110
110
|
/*
|
|
111
111
|
* Parser
|
|
@@ -124,7 +124,7 @@ function SVGParser (scene)
|
|
|
124
124
|
|
|
125
125
|
// Options
|
|
126
126
|
|
|
127
|
-
this .solid = false;
|
|
127
|
+
this .solid = false; // Are 2D primitives solid.
|
|
128
128
|
|
|
129
129
|
// Globals
|
|
130
130
|
|
|
@@ -260,9 +260,12 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
260
260
|
// Get attributes of svg element.
|
|
261
261
|
|
|
262
262
|
const
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
263
|
+
defaultWidth = this .lengthAttribute (xmlElement .getAttribute ("width", 100)),
|
|
264
|
+
defaultHeight = this .lengthAttribute (xmlElement .getAttribute ("height", 100)),
|
|
265
|
+
defaultViewBox = new Vector4 (0, 0, defaultWidth, defaultHeight),
|
|
266
|
+
viewBox = this .viewBoxAttribute (xmlElement .getAttribute ("viewBox"), defaultViewBox),
|
|
267
|
+
width = this .lengthAttribute (xmlElement .getAttribute ("width", viewBox [2])),
|
|
268
|
+
height = this .lengthAttribute (xmlElement .getAttribute ("height", viewBox [3]));
|
|
266
269
|
|
|
267
270
|
// Create viewpoint.
|
|
268
271
|
|
|
@@ -855,7 +858,7 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
855
858
|
for (const [o, c, a] of g .stops)
|
|
856
859
|
gradient .addColorStop (o, `rgba(${c .r * 255},${c .g * 255},${c .b * 255},${a})`);
|
|
857
860
|
|
|
858
|
-
return this .drawGradient (gradient, g .transform, bbox);
|
|
861
|
+
return this .drawGradient (gradient, g .transform, bbox, g .units);
|
|
859
862
|
},
|
|
860
863
|
linearGradientElement: function (xmlElement, gradient)
|
|
861
864
|
{
|
|
@@ -873,9 +876,9 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
873
876
|
|
|
874
877
|
gradient .x1 = this .lengthAttribute (xmlElement .getAttribute ("x1"), gradient .x1 || 0);
|
|
875
878
|
gradient .y1 = this .lengthAttribute (xmlElement .getAttribute ("y1"), gradient .y1 || 0);
|
|
876
|
-
gradient .x2 = this .lengthAttribute (xmlElement .getAttribute ("x2"), gradient .x2 ||
|
|
879
|
+
gradient .x2 = this .lengthAttribute (xmlElement .getAttribute ("x2"), gradient .x2 || 1);
|
|
877
880
|
gradient .y2 = this .lengthAttribute (xmlElement .getAttribute ("y2"), gradient .y2 || 0);
|
|
878
|
-
gradient .units = xmlElement .getAttribute ("gradientUnits");
|
|
881
|
+
gradient .units = xmlElement .getAttribute ("gradientUnits") || "objectBoundingBox";
|
|
879
882
|
gradient .transform = this .transformAttribute (xmlElement .getAttribute ("gradientTransform"));
|
|
880
883
|
|
|
881
884
|
// Stops
|
|
@@ -889,12 +892,12 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
889
892
|
{
|
|
890
893
|
const
|
|
891
894
|
g = this .radialGradientElement (xmlElement, { stops: [ ] }),
|
|
892
|
-
gradient = this .context .createRadialGradient (g .fx, g .fy,
|
|
895
|
+
gradient = this .context .createRadialGradient (g .fx, g .fy, g. fr, g .cx, g .cy, g .r);
|
|
893
896
|
|
|
894
897
|
for (const [o, c, a] of g .stops)
|
|
895
898
|
gradient .addColorStop (o, `rgba(${c .r * 255},${c .g * 255},${c .b * 255},${a})`);
|
|
896
899
|
|
|
897
|
-
return this .drawGradient (gradient, g .transform, bbox);
|
|
900
|
+
return this .drawGradient (gradient, g .transform, bbox, g .units);
|
|
898
901
|
},
|
|
899
902
|
radialGradientElement: function (xmlElement, gradient)
|
|
900
903
|
{
|
|
@@ -907,14 +910,13 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
907
910
|
|
|
908
911
|
// Attributes
|
|
909
912
|
|
|
910
|
-
gradient .cx = this .lengthAttribute (xmlElement .getAttribute ("cx"), gradient .cx || 0),
|
|
911
|
-
gradient .cy = this .lengthAttribute (xmlElement .getAttribute ("cy"), gradient .cy || 0),
|
|
912
|
-
gradient .
|
|
913
|
-
gradient .
|
|
914
|
-
gradient .
|
|
915
|
-
gradient .
|
|
916
|
-
gradient .
|
|
917
|
-
gradient .units = xmlElement .getAttribute ("gradientUnits");
|
|
913
|
+
gradient .cx = this .lengthAttribute (xmlElement .getAttribute ("cx"), gradient .cx || 0.5),
|
|
914
|
+
gradient .cy = this .lengthAttribute (xmlElement .getAttribute ("cy"), gradient .cy || 0.5),
|
|
915
|
+
gradient .r = this .lengthAttribute (xmlElement .getAttribute ("r"), gradient .r || 0.5),
|
|
916
|
+
gradient .fx = this .lengthAttribute (xmlElement .getAttribute ("fx"), gradient .fx || gradient .cx),
|
|
917
|
+
gradient .fy = this .lengthAttribute (xmlElement .getAttribute ("fy"), gradient .fy || gradient .cy),
|
|
918
|
+
gradient .fr = this .lengthAttribute (xmlElement .getAttribute ("fr"), gradient .fr || 0),
|
|
919
|
+
gradient .units = xmlElement .getAttribute ("gradientUnits") || "objectBoundingBox";
|
|
918
920
|
gradient .spreadMethod = xmlElement .getAttribute ("spreadMethod");
|
|
919
921
|
gradient .transform = this .transformAttribute (xmlElement .getAttribute ("gradientTransform"));
|
|
920
922
|
|
|
@@ -956,14 +958,19 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
956
958
|
|
|
957
959
|
this .styles .pop ();
|
|
958
960
|
},
|
|
959
|
-
drawGradient: function (gradient, transform, bbox)
|
|
961
|
+
drawGradient: function (gradient, transform, bbox, units)
|
|
960
962
|
{
|
|
961
963
|
const m = new Matrix3 ();
|
|
962
964
|
|
|
963
965
|
m .scale (new Vector2 (GRADIENT_SIZE / 2, GRADIENT_SIZE / 2));
|
|
964
966
|
m .translate (Vector2 .One);
|
|
965
967
|
m .scale (new Vector2 (1, -1));
|
|
966
|
-
|
|
968
|
+
|
|
969
|
+
if (units === "userSpaceOnUse")
|
|
970
|
+
m .multLeft (Matrix3 .inverse (bbox .matrix));
|
|
971
|
+
else
|
|
972
|
+
m .multLeft (new Matrix3 (2, 0, 0, 0, 2, 0, -1, -1, 1));
|
|
973
|
+
|
|
967
974
|
m .multLeft (transform);
|
|
968
975
|
|
|
969
976
|
// Paint.
|
|
@@ -1026,6 +1033,9 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
1026
1033
|
},
|
|
1027
1034
|
hrefAttribute: function (attribute)
|
|
1028
1035
|
{
|
|
1036
|
+
if (!attribute)
|
|
1037
|
+
return;
|
|
1038
|
+
|
|
1029
1039
|
const
|
|
1030
1040
|
scene = this .getExecutionContext (),
|
|
1031
1041
|
hash = new URL (attribute, scene .getWorldURL ()) .hash .slice (1);
|
|
@@ -1169,8 +1179,6 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
1169
1179
|
{
|
|
1170
1180
|
// moveto
|
|
1171
1181
|
|
|
1172
|
-
points = this .removeConsecutiveIdenticalPoints (points);
|
|
1173
|
-
|
|
1174
1182
|
if (points .length > 2)
|
|
1175
1183
|
{
|
|
1176
1184
|
contours .push (Object .assign (points, { index: index, closed: false }));
|
|
@@ -1342,7 +1350,7 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
1342
1350
|
y += ay;
|
|
1343
1351
|
}
|
|
1344
1352
|
|
|
1345
|
-
|
|
1353
|
+
Bezier .quadric (ax, ay, 0, x1, y1, 0, x, y, 0, BEZIER_STEPS, points);
|
|
1346
1354
|
|
|
1347
1355
|
ax = x;
|
|
1348
1356
|
ay = y;
|
|
@@ -1403,7 +1411,7 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
1403
1411
|
}
|
|
1404
1412
|
}
|
|
1405
1413
|
|
|
1406
|
-
|
|
1414
|
+
Bezier .quadric (ax, ay, 0, x1, y1, 0, x, y, 0, BEZIER_STEPS, points);
|
|
1407
1415
|
|
|
1408
1416
|
ax = x;
|
|
1409
1417
|
ay = y;
|
|
@@ -1469,7 +1477,7 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
1469
1477
|
y += ay;
|
|
1470
1478
|
}
|
|
1471
1479
|
|
|
1472
|
-
|
|
1480
|
+
Bezier .cubic (ax, ay, 0, x1, y1, 0, x2, y2, 0, x, y, 0, BEZIER_STEPS, points);
|
|
1473
1481
|
|
|
1474
1482
|
ax = x;
|
|
1475
1483
|
ay = y;
|
|
@@ -1534,19 +1542,19 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
1534
1542
|
case 'S':
|
|
1535
1543
|
case 's':
|
|
1536
1544
|
{
|
|
1537
|
-
x1 = ax + (ax - px);
|
|
1538
|
-
y1 = ay + (ay - py);
|
|
1545
|
+
var x1 = ax + (ax - px);
|
|
1546
|
+
var y1 = ay + (ay - py);
|
|
1539
1547
|
break;
|
|
1540
1548
|
}
|
|
1541
1549
|
default:
|
|
1542
1550
|
{
|
|
1543
|
-
x1 = ax;
|
|
1544
|
-
y1 = ay;
|
|
1551
|
+
var x1 = ax;
|
|
1552
|
+
var y1 = ay;
|
|
1545
1553
|
break;
|
|
1546
1554
|
}
|
|
1547
1555
|
}
|
|
1548
1556
|
|
|
1549
|
-
|
|
1557
|
+
Bezier .cubic (ax, ay, 0, x1, y1, 0, x2, y2, 0, x, y, 0, BEZIER_STEPS, points);
|
|
1550
1558
|
|
|
1551
1559
|
ax = x;
|
|
1552
1560
|
ay = y;
|
|
@@ -1618,7 +1626,7 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
1618
1626
|
y += ay;
|
|
1619
1627
|
}
|
|
1620
1628
|
|
|
1621
|
-
|
|
1629
|
+
Bezier .arc (ax, ay, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y, CIRCLE_STEPS, points);
|
|
1622
1630
|
|
|
1623
1631
|
ax = x;
|
|
1624
1632
|
ay = y;
|
|
@@ -1643,8 +1651,6 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
1643
1651
|
{
|
|
1644
1652
|
// closepath
|
|
1645
1653
|
|
|
1646
|
-
points = this .removeConsecutiveIdenticalPoints (points);
|
|
1647
|
-
|
|
1648
1654
|
if (points .length > 2)
|
|
1649
1655
|
{
|
|
1650
1656
|
ax = points [0] .x;
|
|
@@ -1665,17 +1671,11 @@ SVGParser .prototype = Object .assign (Object .create (X3DParser .prototype),
|
|
|
1665
1671
|
break;
|
|
1666
1672
|
}
|
|
1667
1673
|
|
|
1668
|
-
points = this .removeConsecutiveIdenticalPoints (points);
|
|
1669
|
-
|
|
1670
1674
|
if (points .length > 2)
|
|
1671
1675
|
contours .push (Object .assign (points, { index: index, closed: false }));
|
|
1672
1676
|
|
|
1673
1677
|
return !! contours .length;
|
|
1674
1678
|
},
|
|
1675
|
-
removeConsecutiveIdenticalPoints: function (points)
|
|
1676
|
-
{
|
|
1677
|
-
return points .filter ((p, i, a) => !p .equals (a [(i + 1) % a .length]));
|
|
1678
|
-
},
|
|
1679
1679
|
transformAttribute: function (attribute)
|
|
1680
1680
|
{
|
|
1681
1681
|
const matrix = new Matrix3 ();
|
|
@@ -142,11 +142,12 @@ X3DParser .prototype = {
|
|
|
142
142
|
convertColor: function (value)
|
|
143
143
|
{
|
|
144
144
|
const
|
|
145
|
-
|
|
145
|
+
wrap = $("<div></div>") .hide () .css ("color", "black") .appendTo ($("body")),
|
|
146
|
+
div = $("<div></div>").css ("color", value) .appendTo (wrap),
|
|
146
147
|
rgb = window .getComputedStyle (div [0]) .color,
|
|
147
148
|
values = rgb .replace (/^rgba?\(|\)$/g, "") .split (/[\s,]+/) .map (s => parseFloat (s));
|
|
148
149
|
|
|
149
|
-
|
|
150
|
+
wrap .remove ();
|
|
150
151
|
|
|
151
152
|
values [0] /= 255;
|
|
152
153
|
values [1] /= 255;
|
|
@@ -296,7 +296,9 @@ X3DExternProtoDeclaration .prototype = Object .assign (Object .create (X3DProtoD
|
|
|
296
296
|
generator .string += "@name";
|
|
297
297
|
generator .string += '"';
|
|
298
298
|
generator .string += ':';
|
|
299
|
+
generator .string += '"';
|
|
299
300
|
generator .string += generator .JSONEncode (this .getName ());
|
|
301
|
+
generator .string += '"';
|
|
300
302
|
generator .string += ',';
|
|
301
303
|
generator .string += generator .TidyBreak ();
|
|
302
304
|
|
|
@@ -354,7 +356,9 @@ X3DExternProtoDeclaration .prototype = Object .assign (Object .create (X3DProtoD
|
|
|
354
356
|
generator .string += '"';
|
|
355
357
|
generator .string += ':';
|
|
356
358
|
generator .string += generator .TidySpace ();
|
|
359
|
+
generator .string += '"';
|
|
357
360
|
generator .string += generator .JSONEncode (field .getName ());
|
|
361
|
+
generator .string += '"';
|
|
358
362
|
generator .string += generator .TidyBreak ();
|
|
359
363
|
|
|
360
364
|
generator .string += generator .DecIndent ();
|
|
@@ -326,7 +326,9 @@ X3DProtoDeclaration .prototype = Object .assign (Object .create (X3DProtoDeclara
|
|
|
326
326
|
generator .string += "@name";
|
|
327
327
|
generator .string += '"';
|
|
328
328
|
generator .string += ':';
|
|
329
|
+
generator .string += '"';
|
|
329
330
|
generator .string += generator .JSONEncode (this .getName ());
|
|
331
|
+
generator .string += '"';
|
|
330
332
|
generator .string += ',';
|
|
331
333
|
generator .string += generator .TidyBreak ();
|
|
332
334
|
|
|
@@ -396,7 +398,9 @@ X3DProtoDeclaration .prototype = Object .assign (Object .create (X3DProtoDeclara
|
|
|
396
398
|
generator .string += '"';
|
|
397
399
|
generator .string += ':';
|
|
398
400
|
generator .string += generator .TidySpace ();
|
|
401
|
+
generator .string += '"';
|
|
399
402
|
generator .string += generator .JSONEncode (field .getName ());
|
|
403
|
+
generator .string += '"';
|
|
400
404
|
|
|
401
405
|
if (field .isDefaultValue ())
|
|
402
406
|
{
|
|
@@ -198,7 +198,9 @@ X3DRoute .prototype = Object .assign (Object .create (X3DObject .prototype),
|
|
|
198
198
|
generator .string += '"';
|
|
199
199
|
generator .string += ':';
|
|
200
200
|
generator .string += generator .TidySpace ();
|
|
201
|
+
generator .string += '"';
|
|
201
202
|
generator .string += generator .JSONEncode (sourceNodeName);
|
|
203
|
+
generator .string += '"';
|
|
202
204
|
generator .string += ',';
|
|
203
205
|
generator .string += generator .TidyBreak ();
|
|
204
206
|
|
|
@@ -208,7 +210,9 @@ X3DRoute .prototype = Object .assign (Object .create (X3DObject .prototype),
|
|
|
208
210
|
generator .string += '"';
|
|
209
211
|
generator .string += ':';
|
|
210
212
|
generator .string += generator .TidySpace ();
|
|
213
|
+
generator .string += '"';
|
|
211
214
|
generator .string += generator .JSONEncode (this [_sourceField] .getName ());
|
|
215
|
+
generator .string += '"';
|
|
212
216
|
generator .string += ',';
|
|
213
217
|
generator .string += generator .TidyBreak ();
|
|
214
218
|
|
|
@@ -218,7 +222,9 @@ X3DRoute .prototype = Object .assign (Object .create (X3DObject .prototype),
|
|
|
218
222
|
generator .string += '"';
|
|
219
223
|
generator .string += ':';
|
|
220
224
|
generator .string += generator .TidySpace ();
|
|
225
|
+
generator .string += '"';
|
|
221
226
|
generator .string += generator .JSONEncode (destinationNodeName);
|
|
227
|
+
generator .string += '"';
|
|
222
228
|
generator .string += ',';
|
|
223
229
|
generator .string += generator .TidyBreak ();
|
|
224
230
|
|
|
@@ -228,7 +234,9 @@ X3DRoute .prototype = Object .assign (Object .create (X3DObject .prototype),
|
|
|
228
234
|
generator .string += '"';
|
|
229
235
|
generator .string += ':';
|
|
230
236
|
generator .string += generator .TidySpace ();
|
|
237
|
+
generator .string += '"';
|
|
231
238
|
generator .string += generator .JSONEncode (this [_destinationField] .getName ());
|
|
239
|
+
generator .string += '"';
|
|
232
240
|
generator .string += generator .TidyBreak ();
|
|
233
241
|
|
|
234
242
|
generator .string += generator .DecIndent ();
|