sunrize 1.7.43 → 1.7.45
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/package.json +3 -3
- package/src/Application/Application.js +17 -5
- package/src/Application/Dashboard.js +5 -2
- package/src/Application/Document.js +1 -9
- package/src/Application/Tabs.js +2 -1
- package/src/Components/Geometry2D/Arc2D.js +16 -0
- package/src/Components/Geometry2D/ArcClose2D.js +14 -0
- package/src/Components/Geometry2D/Circle2D.js +23 -0
- package/src/Components/Geometry2D/Disk2D.js +53 -0
- package/src/Components/Geometry2D/Polyline2D.js +16 -0
- package/src/Components/Geometry2D/Polypoint2D.js +20 -0
- package/src/Components/Geometry2D/Rectangle2D.js +27 -0
- package/src/Components/Geometry2D/TriangleSet2D.js +33 -0
- package/src/Components/Geometry3D/Box.js +27 -0
- package/src/Components/Geometry3D/Cone.js +79 -0
- package/src/Components/Geometry3D/Cylinder.js +81 -0
- package/src/Components/Geometry3D/ElevationGrid.js +23 -0
- package/src/Components/Geometry3D/Extrusion.js +194 -0
- package/src/Components/Geometry3D/IndexedFaceSet.js +112 -0
- package/src/Components/Geometry3D/Sphere.js +27 -0
- package/src/Components/NURBS/NurbsCurve.js +17 -0
- package/src/Components/NURBS/NurbsSweptSurface.js +24 -0
- package/src/Components/NURBS/NurbsSwungSurface.js +24 -0
- package/src/Components/NURBS/X3DNurbsSurfaceGeometryNode.js +19 -0
- package/src/Components/Rendering/IndexedLineSet.js +24 -0
- package/src/Components/Rendering/LineSet.js +34 -0
- package/src/Components/Rendering/X3DComposedGeometryNode.js +44 -0
- package/src/Components/Rendering/X3DGeometryNode.js +183 -0
- package/src/Components/Text/Text.js +17 -0
- package/src/Components.js +33 -0
- package/src/Editors/Library.js +2 -0
- package/src/Editors/LibraryPane.js +6 -1
- package/src/Editors/NodesLibrary.js +41 -1
- package/src/Editors/OutlineEditor.js +118 -25
- package/src/Editors/OutlineView.js +53 -22
- package/src/Editors/PrimitivesLibrary.js +58 -2
- package/src/Tools/Geometry2D/Disk2DTool.js +16 -18
- package/src/Undo/Editor.js +207 -153
package/src/Undo/Editor.js
CHANGED
|
@@ -607,150 +607,6 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
607
607
|
return executionContext === parentContext
|
|
608
608
|
}
|
|
609
609
|
|
|
610
|
-
static nodesToRemove = new Map ()
|
|
611
|
-
|
|
612
|
-
/**
|
|
613
|
-
*
|
|
614
|
-
* @param {X3DExecutionContext} executionContext
|
|
615
|
-
* @param {Array<X3DNode|SFNode>|MFNode} nodes
|
|
616
|
-
* @param {UndoManager} undoManager
|
|
617
|
-
*/
|
|
618
|
-
static removeNodesFromExecutionContextIfNecessary (executionContext, nodes, undoManager = UndoManager .shared)
|
|
619
|
-
{
|
|
620
|
-
if (!nodes .length)
|
|
621
|
-
return;
|
|
622
|
-
|
|
623
|
-
if (!this .nodesToRemove .has (executionContext))
|
|
624
|
-
this .nodesToRemove .set (executionContext, [ ]);
|
|
625
|
-
|
|
626
|
-
const nodesToRemove = this .nodesToRemove .get (executionContext);
|
|
627
|
-
|
|
628
|
-
for (const node of nodes)
|
|
629
|
-
nodesToRemove .push (node);
|
|
630
|
-
|
|
631
|
-
if (undoManager .defer ("removeNodesFromExecutionContextIfNecessary"))
|
|
632
|
-
return;
|
|
633
|
-
|
|
634
|
-
undoManager .defer ("removeNodesFromExecutionContextIfNecessary", () =>
|
|
635
|
-
{
|
|
636
|
-
for (const [executionContext, nodesToRemove] of this .nodesToRemove)
|
|
637
|
-
{
|
|
638
|
-
// Add nodes and child nodes.
|
|
639
|
-
|
|
640
|
-
const children = new Set ();
|
|
641
|
-
|
|
642
|
-
Array .from (Traverse .traverse (nodesToRemove, Traverse .ROOT_NODES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY))
|
|
643
|
-
.filter (object => object instanceof X3D .SFNode)
|
|
644
|
-
.forEach (node => children .add (node .getValue () .valueOf ()));
|
|
645
|
-
|
|
646
|
-
// Remove nodes still in scene graph.
|
|
647
|
-
|
|
648
|
-
Array .from (Traverse .traverse (executionContext, Traverse .ROOT_NODES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY))
|
|
649
|
-
.filter (object => object instanceof X3D .SFNode)
|
|
650
|
-
.forEach (node => children .delete (node .getValue () .valueOf ()));
|
|
651
|
-
|
|
652
|
-
if (children .size === 0)
|
|
653
|
-
continue;
|
|
654
|
-
|
|
655
|
-
undoManager .beginUndo (_("Remove %s Nodes from Execution Context"), children .size);
|
|
656
|
-
|
|
657
|
-
for (const node of children)
|
|
658
|
-
{
|
|
659
|
-
// Rebind X3DBindableNode nodes.
|
|
660
|
-
|
|
661
|
-
if (node .getType () .includes (X3D .X3DConstants .X3DBindableNode))
|
|
662
|
-
{
|
|
663
|
-
if (node ._isBound .getValue ())
|
|
664
|
-
{
|
|
665
|
-
undoManager .registerUndo (() =>
|
|
666
|
-
{
|
|
667
|
-
this .setFieldValue (executionContext, node, node ._set_bind, true, undoManager);
|
|
668
|
-
});
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
// Remove named nodes.
|
|
673
|
-
|
|
674
|
-
if (node .getName ())
|
|
675
|
-
this .removeNamedNode (executionContext, node, undoManager);
|
|
676
|
-
|
|
677
|
-
// Remove routes.
|
|
678
|
-
|
|
679
|
-
this .deleteRoutes (executionContext, node, undoManager);
|
|
680
|
-
|
|
681
|
-
// Remove imported nodes if node is an Inline node.
|
|
682
|
-
|
|
683
|
-
for (const importedNode of executionContext .getImportedNodes ())
|
|
684
|
-
{
|
|
685
|
-
if (importedNode .getInlineNode () .valueOf () === node)
|
|
686
|
-
this .removeImportedNode (executionContext, importedNode .getImportedName (), undoManager);
|
|
687
|
-
}
|
|
688
|
-
|
|
689
|
-
// Remove exported nodes.
|
|
690
|
-
|
|
691
|
-
if (executionContext instanceof X3D .X3DScene)
|
|
692
|
-
{
|
|
693
|
-
for (const exportedNode of executionContext .getExportedNodes ())
|
|
694
|
-
{
|
|
695
|
-
if (exportedNode .getLocalNode () .valueOf () === node)
|
|
696
|
-
this .removeExportedNode (executionContext, exportedNode .getExportedName (), undoManager);
|
|
697
|
-
}
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
// Clear fields, to get right clone count.
|
|
701
|
-
|
|
702
|
-
for (const field of node .getFields ())
|
|
703
|
-
{
|
|
704
|
-
switch (field .getType ())
|
|
705
|
-
{
|
|
706
|
-
case X3D .X3DConstants .SFNode:
|
|
707
|
-
{
|
|
708
|
-
this .setFieldValue (executionContext, node, field, null, undoManager);
|
|
709
|
-
break;
|
|
710
|
-
}
|
|
711
|
-
case X3D .X3DConstants .MFNode:
|
|
712
|
-
{
|
|
713
|
-
this .setFieldValue (executionContext, node, field, new X3D .MFNode (), undoManager);
|
|
714
|
-
break;
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
}
|
|
718
|
-
|
|
719
|
-
this .#setLive (node, false, undoManager);
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
this .requestUpdateInstances (executionContext, undoManager);
|
|
723
|
-
|
|
724
|
-
undoManager .endUndo ();
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
this .nodesToRemove .clear ();
|
|
728
|
-
});
|
|
729
|
-
}
|
|
730
|
-
|
|
731
|
-
/**
|
|
732
|
-
*
|
|
733
|
-
* @param {X3DBaseNode} node
|
|
734
|
-
* @param {boolean} value
|
|
735
|
-
*/
|
|
736
|
-
static #setLive (node, value, undoManager = UndoManager .shared)
|
|
737
|
-
{
|
|
738
|
-
node = node .valueOf ();
|
|
739
|
-
|
|
740
|
-
const oldValue = node .isLive ();
|
|
741
|
-
|
|
742
|
-
undoManager .beginUndo (_("Set live state to »%s«"), value);
|
|
743
|
-
|
|
744
|
-
node .setLive (value);
|
|
745
|
-
|
|
746
|
-
undoManager .registerUndo (() =>
|
|
747
|
-
{
|
|
748
|
-
this .#setLive (node, oldValue, undoManager);
|
|
749
|
-
});
|
|
750
|
-
|
|
751
|
-
undoManager .endUndo ();
|
|
752
|
-
}
|
|
753
|
-
|
|
754
610
|
/**
|
|
755
611
|
*
|
|
756
612
|
* @param {X3DScene} scene
|
|
@@ -2996,12 +2852,12 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
2996
2852
|
const
|
|
2997
2853
|
instance = node .getType () .includes (X3D .X3DConstants .X3DPrototypeInstance),
|
|
2998
2854
|
name = field .getName (),
|
|
2999
|
-
|
|
2855
|
+
auxiliary = field .create ();
|
|
3000
2856
|
|
|
3001
|
-
|
|
3002
|
-
|
|
2857
|
+
auxiliary .setUnit (field .getUnit ());
|
|
2858
|
+
auxiliary .fromString (string, executionContext);
|
|
3003
2859
|
|
|
3004
|
-
if (
|
|
2860
|
+
if (auxiliary .equals (field))
|
|
3005
2861
|
{
|
|
3006
2862
|
field .addEvent ();
|
|
3007
2863
|
return;
|
|
@@ -3014,7 +2870,7 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
3014
2870
|
else
|
|
3015
2871
|
undoManager .beginUndo (_("Change Field »%s« of Node %s"), field .getName (), node .getTypeName ());
|
|
3016
2872
|
|
|
3017
|
-
field .assign (
|
|
2873
|
+
field .assign (auxiliary);
|
|
3018
2874
|
|
|
3019
2875
|
if (node .isDefaultValue (field))
|
|
3020
2876
|
field .setModificationTime (0);
|
|
@@ -3045,11 +2901,11 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
3045
2901
|
const
|
|
3046
2902
|
instance = node .getType () .includes (X3D .X3DConstants .X3DPrototypeInstance),
|
|
3047
2903
|
name = field .getName (),
|
|
3048
|
-
|
|
2904
|
+
auxiliary = field .create ();
|
|
3049
2905
|
|
|
3050
|
-
|
|
2906
|
+
auxiliary .setValue (value);
|
|
3051
2907
|
|
|
3052
|
-
if (
|
|
2908
|
+
if (auxiliary .equals (field))
|
|
3053
2909
|
{
|
|
3054
2910
|
field .addEvent ();
|
|
3055
2911
|
return;
|
|
@@ -3062,7 +2918,7 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
3062
2918
|
else
|
|
3063
2919
|
undoManager .beginUndo (_("Change Field »%s« of Node %s"), field .getName (), node .getTypeName ());
|
|
3064
2920
|
|
|
3065
|
-
field .assign (
|
|
2921
|
+
field .assign (auxiliary);
|
|
3066
2922
|
|
|
3067
2923
|
if (node .isDefaultValue (field))
|
|
3068
2924
|
field .setModificationTime (0);
|
|
@@ -3542,6 +3398,204 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
3542
3398
|
});
|
|
3543
3399
|
}
|
|
3544
3400
|
|
|
3401
|
+
static #nodesToRemove = new Map ();
|
|
3402
|
+
|
|
3403
|
+
/**
|
|
3404
|
+
*
|
|
3405
|
+
* @param {X3DExecutionContext} executionContext
|
|
3406
|
+
* @param {Array<X3DNode|SFNode>|MFNode} nodes
|
|
3407
|
+
* @param {UndoManager} undoManager
|
|
3408
|
+
*/
|
|
3409
|
+
static removeNodesFromExecutionContextIfNecessary (executionContext, nodes, undoManager = UndoManager .shared)
|
|
3410
|
+
{
|
|
3411
|
+
if (!nodes .length)
|
|
3412
|
+
return;
|
|
3413
|
+
|
|
3414
|
+
if (!this .#nodesToRemove .has (executionContext))
|
|
3415
|
+
this .#nodesToRemove .set (executionContext, [ ]);
|
|
3416
|
+
|
|
3417
|
+
const nodesToRemove = this .#nodesToRemove .get (executionContext);
|
|
3418
|
+
|
|
3419
|
+
for (const node of nodes)
|
|
3420
|
+
nodesToRemove .push (node .valueOf ());
|
|
3421
|
+
|
|
3422
|
+
if (undoManager .defer ("removeNodesFromExecutionContextIfNecessary"))
|
|
3423
|
+
return;
|
|
3424
|
+
|
|
3425
|
+
undoManager .defer ("removeNodesFromExecutionContextIfNecessary", () =>
|
|
3426
|
+
{
|
|
3427
|
+
for (const [executionContext, nodesToRemove] of this .#nodesToRemove)
|
|
3428
|
+
{
|
|
3429
|
+
// Add nodes and child nodes.
|
|
3430
|
+
|
|
3431
|
+
const children = new Set ();
|
|
3432
|
+
|
|
3433
|
+
Array .from (Traverse .traverse (nodesToRemove, Traverse .ROOT_NODES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY))
|
|
3434
|
+
.filter (object => object instanceof X3D .SFNode)
|
|
3435
|
+
.forEach (node => children .add (node .getValue () .valueOf ()));
|
|
3436
|
+
|
|
3437
|
+
// Remove nodes still in scene graph.
|
|
3438
|
+
|
|
3439
|
+
Array .from (Traverse .traverse (executionContext, Traverse .ROOT_NODES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY))
|
|
3440
|
+
.filter (object => object instanceof X3D .SFNode)
|
|
3441
|
+
.forEach (node => children .delete (node .getValue () .valueOf ()));
|
|
3442
|
+
|
|
3443
|
+
if (children .size === 0)
|
|
3444
|
+
continue;
|
|
3445
|
+
|
|
3446
|
+
undoManager .beginUndo (_("Remove %s Nodes from Execution Context"), children .size);
|
|
3447
|
+
|
|
3448
|
+
for (const node of children)
|
|
3449
|
+
{
|
|
3450
|
+
// Rebind X3DBindableNode nodes.
|
|
3451
|
+
|
|
3452
|
+
if (node .getType () .includes (X3D .X3DConstants .X3DBindableNode))
|
|
3453
|
+
{
|
|
3454
|
+
if (node ._isBound .getValue ())
|
|
3455
|
+
{
|
|
3456
|
+
undoManager .registerUndo (() =>
|
|
3457
|
+
{
|
|
3458
|
+
this .setFieldValue (executionContext, node, node ._set_bind, true, undoManager);
|
|
3459
|
+
});
|
|
3460
|
+
}
|
|
3461
|
+
}
|
|
3462
|
+
|
|
3463
|
+
// Remove named nodes.
|
|
3464
|
+
|
|
3465
|
+
if (node .getName ())
|
|
3466
|
+
this .removeNamedNode (executionContext, node, undoManager);
|
|
3467
|
+
|
|
3468
|
+
// Remove routes.
|
|
3469
|
+
|
|
3470
|
+
this .deleteRoutes (executionContext, node, undoManager);
|
|
3471
|
+
|
|
3472
|
+
// Remove imported nodes if node is an Inline node.
|
|
3473
|
+
|
|
3474
|
+
for (const importedNode of Array .from (executionContext .getImportedNodes ()))
|
|
3475
|
+
{
|
|
3476
|
+
if (importedNode .getInlineNode () .valueOf () === node)
|
|
3477
|
+
this .removeImportedNode (executionContext, importedNode .getImportedName (), undoManager);
|
|
3478
|
+
}
|
|
3479
|
+
|
|
3480
|
+
// Remove exported nodes.
|
|
3481
|
+
|
|
3482
|
+
if (executionContext instanceof X3D .X3DScene)
|
|
3483
|
+
{
|
|
3484
|
+
for (const exportedNode of Array .from (executionContext .getExportedNodes ()))
|
|
3485
|
+
{
|
|
3486
|
+
if (exportedNode .getLocalNode () .valueOf () === node)
|
|
3487
|
+
this .removeExportedNode (executionContext, exportedNode .getExportedName (), undoManager);
|
|
3488
|
+
}
|
|
3489
|
+
}
|
|
3490
|
+
|
|
3491
|
+
// Clear fields, to get right clone count.
|
|
3492
|
+
|
|
3493
|
+
for (const field of node .getFields ())
|
|
3494
|
+
{
|
|
3495
|
+
switch (field .getType ())
|
|
3496
|
+
{
|
|
3497
|
+
case X3D .X3DConstants .SFNode:
|
|
3498
|
+
{
|
|
3499
|
+
this .setFieldValue (executionContext, node, field, null, undoManager);
|
|
3500
|
+
break;
|
|
3501
|
+
}
|
|
3502
|
+
case X3D .X3DConstants .MFNode:
|
|
3503
|
+
{
|
|
3504
|
+
this .setFieldValue (executionContext, node, field, new X3D .MFNode (), undoManager);
|
|
3505
|
+
break;
|
|
3506
|
+
}
|
|
3507
|
+
}
|
|
3508
|
+
}
|
|
3509
|
+
|
|
3510
|
+
this .#setLive (node, false, undoManager);
|
|
3511
|
+
this .#removeSelection (node, undoManager);
|
|
3512
|
+
}
|
|
3513
|
+
|
|
3514
|
+
this .requestUpdateInstances (executionContext, undoManager);
|
|
3515
|
+
|
|
3516
|
+
undoManager .endUndo ();
|
|
3517
|
+
}
|
|
3518
|
+
|
|
3519
|
+
this .#nodesToRemove .clear ();
|
|
3520
|
+
});
|
|
3521
|
+
}
|
|
3522
|
+
|
|
3523
|
+
/**
|
|
3524
|
+
*
|
|
3525
|
+
* @param {X3DBaseNode} node
|
|
3526
|
+
* @param {boolean} value
|
|
3527
|
+
* @param {UndoManager} undoManager
|
|
3528
|
+
*/
|
|
3529
|
+
static #setLive (node, value, undoManager = UndoManager .shared)
|
|
3530
|
+
{
|
|
3531
|
+
node = node .valueOf ();
|
|
3532
|
+
|
|
3533
|
+
const oldValue = node .isLive ();
|
|
3534
|
+
|
|
3535
|
+
undoManager .beginUndo (_("Set live state to »%s«"), value);
|
|
3536
|
+
|
|
3537
|
+
node .setLive (value);
|
|
3538
|
+
|
|
3539
|
+
undoManager .registerUndo (() =>
|
|
3540
|
+
{
|
|
3541
|
+
this .#setLive (node, oldValue, undoManager);
|
|
3542
|
+
});
|
|
3543
|
+
|
|
3544
|
+
undoManager .endUndo ();
|
|
3545
|
+
}
|
|
3546
|
+
|
|
3547
|
+
/**
|
|
3548
|
+
*
|
|
3549
|
+
* @param {X3DBaseNode} node
|
|
3550
|
+
* @param {UndoManager} undoManager
|
|
3551
|
+
*/
|
|
3552
|
+
static #addSelection (node, undoManager = UndoManager .shared)
|
|
3553
|
+
{
|
|
3554
|
+
node = node .valueOf ();
|
|
3555
|
+
|
|
3556
|
+
const selection = require ("../Application/Selection");
|
|
3557
|
+
|
|
3558
|
+
if (selection .has (node))
|
|
3559
|
+
return;
|
|
3560
|
+
|
|
3561
|
+
undoManager .beginUndo (_("Select node"));
|
|
3562
|
+
|
|
3563
|
+
selection .add (node);
|
|
3564
|
+
|
|
3565
|
+
undoManager .registerUndo (() =>
|
|
3566
|
+
{
|
|
3567
|
+
this .#removeSelection (node, undoManager);
|
|
3568
|
+
});
|
|
3569
|
+
|
|
3570
|
+
undoManager .endUndo ();
|
|
3571
|
+
}
|
|
3572
|
+
|
|
3573
|
+
/**
|
|
3574
|
+
*
|
|
3575
|
+
* @param {X3DBaseNode} node
|
|
3576
|
+
* @param {UndoManager} undoManager
|
|
3577
|
+
*/
|
|
3578
|
+
static #removeSelection (node, undoManager = UndoManager .shared)
|
|
3579
|
+
{
|
|
3580
|
+
node = node .valueOf ();
|
|
3581
|
+
|
|
3582
|
+
const selection = require ("../Application/Selection");
|
|
3583
|
+
|
|
3584
|
+
if (!selection .has (node))
|
|
3585
|
+
return;
|
|
3586
|
+
|
|
3587
|
+
undoManager .beginUndo (_("Deselect node"));
|
|
3588
|
+
|
|
3589
|
+
selection .remove (node);
|
|
3590
|
+
|
|
3591
|
+
undoManager .registerUndo (() =>
|
|
3592
|
+
{
|
|
3593
|
+
this .#addSelection (node, undoManager);
|
|
3594
|
+
});
|
|
3595
|
+
|
|
3596
|
+
undoManager .endUndo ();
|
|
3597
|
+
}
|
|
3598
|
+
|
|
3545
3599
|
/**
|
|
3546
3600
|
*
|
|
3547
3601
|
* @param {function} callback
|