sunrize 1.7.30 → 1.7.32
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 +6 -5
- package/src/Editors/Library.js +5 -3
- package/src/Editors/NodeList.js +2 -6
- package/src/Editors/OutlineView.js +93 -53
- package/src/Tools/Core/X3DNodeTool.js +5 -2
- package/src/Undo/Editor.js +166 -88
- package/src/assets/Info.plist +8 -8
- package/src/assets/themes/default-template.css +4 -3
- package/src/assets/themes/default.css +4 -3
- package/src/Application/Traverse.js +0 -368
- /package/src/assets/{entitlements.plist → Entitlements.plist} +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sunrize",
|
|
3
3
|
"productName": "Sunrize X3D Editor",
|
|
4
|
-
"version": "1.7.
|
|
4
|
+
"version": "1.7.32",
|
|
5
5
|
"description": "A Multi-Platform X3D Editor",
|
|
6
6
|
"main": "src/main.js",
|
|
7
7
|
"bin": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"postgithub": "npm i -P electron",
|
|
26
26
|
"predocs": "rm -f -r docs/_site/",
|
|
27
27
|
"docs": "cd docs && bundle exec jekyll serve --ssl-key ssl/server.key --ssl-cert ssl/server.crt --incremental --host=`ipconfig getifaddr en0`",
|
|
28
|
-
"docs-install": "cd docs && bundle install",
|
|
28
|
+
"docs-install": "cd docs && gem install bundler && bundle install",
|
|
29
29
|
"docs-update": "cd docs && bundle update",
|
|
30
30
|
"merge-development": "sh build/merge-development.sh",
|
|
31
31
|
"make-x_ite-for-sunrize": "sh build/make-x_ite-for-sunrize.sh"
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"dependencies": {
|
|
91
91
|
"capitalize": "^2.0.4",
|
|
92
92
|
"console": "^0.7.2",
|
|
93
|
-
"electron": "^33.0
|
|
93
|
+
"electron": "^33.2.0",
|
|
94
94
|
"electron-prompt": "^1.7.0",
|
|
95
95
|
"electron-squirrel-startup": "^1.0.1",
|
|
96
96
|
"electron-tabs": "^1.0.4",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"jquery-ui-dist": "^1.13.3",
|
|
100
100
|
"jstree": "^3.3.17",
|
|
101
101
|
"material-icons": "^1.13.12",
|
|
102
|
-
"material-symbols": "^0.
|
|
102
|
+
"material-symbols": "^0.27.0",
|
|
103
103
|
"md5": "^2.3.0",
|
|
104
104
|
"mime-types": "^2.1.35",
|
|
105
105
|
"monaco-editor": "^0.50.0",
|
|
@@ -109,6 +109,7 @@
|
|
|
109
109
|
"string-similarity": "^4.0.4",
|
|
110
110
|
"tweakpane": "^3.1.10",
|
|
111
111
|
"update-electron-app": "^3.0.0",
|
|
112
|
-
"x_ite": "^10.5.
|
|
112
|
+
"x_ite": "^10.5.12",
|
|
113
|
+
"x3d-traverse": "^1.0.5"
|
|
113
114
|
}
|
|
114
115
|
}
|
package/src/Editors/Library.js
CHANGED
|
@@ -7,7 +7,7 @@ const
|
|
|
7
7
|
Dialog = require ("../Controls/Dialog"),
|
|
8
8
|
Editor = require ("../Undo/Editor"),
|
|
9
9
|
UndoManager = require ("../Undo/UndoManager"),
|
|
10
|
-
Traverse = require ("
|
|
10
|
+
Traverse = require ("x3d-traverse") (X3D),
|
|
11
11
|
_ = require ("../Application/GetText");
|
|
12
12
|
|
|
13
13
|
module .exports = new class Library extends Dialog
|
|
@@ -209,8 +209,10 @@ module .exports = new class Library extends Dialog
|
|
|
209
209
|
|
|
210
210
|
if (this .browser .getBrowserOption ("ColorSpace") === "LINEAR")
|
|
211
211
|
{
|
|
212
|
-
Traverse .traverse (node, Traverse .ROOT_NODES
|
|
212
|
+
for (const object of Traverse .traverse (node, Traverse .ROOT_NODES))
|
|
213
213
|
{
|
|
214
|
+
const node = object .getValue ();
|
|
215
|
+
|
|
214
216
|
for (const field of node .getFields ())
|
|
215
217
|
{
|
|
216
218
|
switch (field .getType ())
|
|
@@ -225,7 +227,7 @@ module .exports = new class Library extends Dialog
|
|
|
225
227
|
break;
|
|
226
228
|
}
|
|
227
229
|
}
|
|
228
|
-
}
|
|
230
|
+
}
|
|
229
231
|
}
|
|
230
232
|
|
|
231
233
|
switch (field ?.getType ())
|
package/src/Editors/NodeList.js
CHANGED
|
@@ -4,7 +4,7 @@ const
|
|
|
4
4
|
$ = require ("jquery"),
|
|
5
5
|
X3D = require ("../X3D"),
|
|
6
6
|
Interface = require ("../Application/Interface"),
|
|
7
|
-
Traverse = require ("
|
|
7
|
+
Traverse = require ("x3d-traverse") (X3D),
|
|
8
8
|
_ = require ("../Application/GetText");
|
|
9
9
|
|
|
10
10
|
module .exports = class NodeList extends Interface
|
|
@@ -92,11 +92,7 @@ module .exports = class NodeList extends Interface
|
|
|
92
92
|
|
|
93
93
|
getNodes ()
|
|
94
94
|
{
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
Traverse .traverse (this .executionContext, Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES, node => nodes .push (node));
|
|
98
|
-
|
|
99
|
-
return nodes;
|
|
95
|
+
return Array .from (this .executionContext .traverse (Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES), node => node instanceof X3D .SFNode ? node .getValue () : node);
|
|
100
96
|
}
|
|
101
97
|
|
|
102
98
|
getName (node)
|
|
@@ -8,7 +8,7 @@ const
|
|
|
8
8
|
X3D = require ("../X3D"),
|
|
9
9
|
Interface = require ("../Application/Interface"),
|
|
10
10
|
ActionKeys = require ("../Application/ActionKeys"),
|
|
11
|
-
Traverse = require ("
|
|
11
|
+
Traverse = require ("x3d-traverse") (X3D),
|
|
12
12
|
X3DUOM = require ("../Bits/X3DUOM"),
|
|
13
13
|
_ = require ("../Application/GetText");
|
|
14
14
|
|
|
@@ -3144,76 +3144,96 @@ module .exports = class OutlineView extends Interface
|
|
|
3144
3144
|
{
|
|
3145
3145
|
// Hide all X3DShapeNode nodes and show all other nodes.
|
|
3146
3146
|
|
|
3147
|
-
|
|
3147
|
+
for (const object of this .executionContext .traverse (Traverse .INLINE_SCENE | Traverse .PROTOTYPE_INSTANCES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES))
|
|
3148
3148
|
{
|
|
3149
|
+
if (!(object instanceof X3D .SFNode))
|
|
3150
|
+
continue;
|
|
3151
|
+
|
|
3152
|
+
const node = object .getValue ();
|
|
3153
|
+
|
|
3149
3154
|
if (!node .setHidden)
|
|
3150
|
-
|
|
3155
|
+
continue;
|
|
3151
3156
|
|
|
3152
|
-
node .setHidden (node .getType () .includes (X3D .X3DConstants .X3DShapeNode))
|
|
3157
|
+
node .setHidden (node .getType () .includes (X3D .X3DConstants .X3DShapeNode));
|
|
3153
3158
|
|
|
3154
3159
|
this .sceneGraph .find (`.node[node-id=${node .getId ()}]`)
|
|
3155
3160
|
.find ("> .item .toggle-visibility")
|
|
3156
3161
|
.removeClass (["on", "off"])
|
|
3157
3162
|
.addClass (node .isHidden () ? "off" : "on")
|
|
3158
|
-
.text (node .isHidden () ? "visibility_off" : "visibility")
|
|
3159
|
-
}
|
|
3163
|
+
.text (node .isHidden () ? "visibility_off" : "visibility");
|
|
3164
|
+
}
|
|
3160
3165
|
|
|
3161
3166
|
// Show all nodes in selection.
|
|
3162
3167
|
|
|
3163
3168
|
const selection = require ("../Application/Selection");
|
|
3164
3169
|
|
|
3165
|
-
Traverse .traverse (selection .nodes, Traverse .INLINE_SCENE | Traverse .PROTOTYPE_INSTANCES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES
|
|
3170
|
+
for (const object of Traverse .traverse (selection .nodes, Traverse .INLINE_SCENE | Traverse .PROTOTYPE_INSTANCES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES))
|
|
3166
3171
|
{
|
|
3172
|
+
if (!(object instanceof X3D .SFNode))
|
|
3173
|
+
continue;
|
|
3174
|
+
|
|
3175
|
+
const node = object .getValue ();
|
|
3176
|
+
|
|
3167
3177
|
if (!node .setHidden)
|
|
3168
|
-
|
|
3178
|
+
continue;
|
|
3169
3179
|
|
|
3170
3180
|
if (!node .getType () .includes (X3D .X3DConstants .X3DShapeNode))
|
|
3171
|
-
|
|
3181
|
+
continue;
|
|
3172
3182
|
|
|
3173
|
-
node .setHidden (false)
|
|
3183
|
+
node .setHidden (false);
|
|
3174
3184
|
|
|
3175
3185
|
this .sceneGraph .find (`.node[node-id=${node .getId ()}]`)
|
|
3176
3186
|
.find ("> .item .toggle-visibility")
|
|
3177
3187
|
.removeClass ("off")
|
|
3178
3188
|
.addClass ("on")
|
|
3179
|
-
.text ("visibility")
|
|
3180
|
-
}
|
|
3189
|
+
.text ("visibility");
|
|
3190
|
+
}
|
|
3181
3191
|
}
|
|
3182
3192
|
|
|
3183
3193
|
showSelectedObjects ()
|
|
3184
3194
|
{
|
|
3185
3195
|
const selection = require ("../Application/Selection")
|
|
3186
3196
|
|
|
3187
|
-
Traverse .traverse (selection .nodes .length ? selection .nodes : this .executionContext, Traverse .INLINE_SCENE | Traverse .PROTOTYPE_INSTANCES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES
|
|
3197
|
+
for (const object of Traverse .traverse (selection .nodes .length ? selection .nodes : this .executionContext, Traverse .INLINE_SCENE | Traverse .PROTOTYPE_INSTANCES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES))
|
|
3188
3198
|
{
|
|
3199
|
+
if (!(object instanceof X3D .SFNode))
|
|
3200
|
+
continue;
|
|
3201
|
+
|
|
3202
|
+
const node = object .getValue ();
|
|
3203
|
+
|
|
3189
3204
|
if (!node .setHidden)
|
|
3190
|
-
|
|
3205
|
+
continue;
|
|
3191
3206
|
|
|
3192
|
-
node .setHidden (false)
|
|
3207
|
+
node .setHidden (false);
|
|
3193
3208
|
|
|
3194
3209
|
this .sceneGraph .find (`.node[node-id=${node .getId ()}]`)
|
|
3195
3210
|
.find ("> .item .toggle-visibility")
|
|
3196
3211
|
.removeClass ("off")
|
|
3197
3212
|
.addClass ("on")
|
|
3198
|
-
.text ("visibility")
|
|
3199
|
-
}
|
|
3213
|
+
.text ("visibility");
|
|
3214
|
+
}
|
|
3200
3215
|
}
|
|
3201
3216
|
|
|
3202
3217
|
showAllObjects ()
|
|
3203
3218
|
{
|
|
3204
|
-
|
|
3219
|
+
for (const object of this .executionContext .traverse (Traverse .INLINE_SCENE | Traverse .PROTOTYPE_INSTANCES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES))
|
|
3205
3220
|
{
|
|
3221
|
+
if (!(object instanceof X3D .SFNode))
|
|
3222
|
+
continue;
|
|
3223
|
+
|
|
3224
|
+
const node = object .getValue ();
|
|
3225
|
+
|
|
3206
3226
|
if (!node .setHidden)
|
|
3207
|
-
|
|
3227
|
+
continue;
|
|
3208
3228
|
|
|
3209
|
-
node .setHidden (false)
|
|
3229
|
+
node .setHidden (false);
|
|
3210
3230
|
|
|
3211
3231
|
this .sceneGraph .find (`.node[node-id=${node .getId ()}]`)
|
|
3212
3232
|
.find ("> .item .toggle-visibility")
|
|
3213
3233
|
.removeClass ("off")
|
|
3214
3234
|
.addClass ("on")
|
|
3215
|
-
.text ("visibility")
|
|
3216
|
-
}
|
|
3235
|
+
.text ("visibility");
|
|
3236
|
+
}
|
|
3217
3237
|
}
|
|
3218
3238
|
|
|
3219
3239
|
selectNone (event)
|
|
@@ -3637,16 +3657,15 @@ module .exports = class OutlineView extends Interface
|
|
|
3637
3657
|
|
|
3638
3658
|
flags |= Traverse .IMPORTED_NODES;
|
|
3639
3659
|
|
|
3640
|
-
const
|
|
3641
|
-
|
|
3642
|
-
for (const hierarchy of hierarchies)
|
|
3660
|
+
for (const hierarchy of this .executionContext .find (object, flags))
|
|
3643
3661
|
{
|
|
3644
3662
|
hierarchy .shift (); // execution context
|
|
3663
|
+
hierarchy .shift (); // rootNode | protos ...
|
|
3645
3664
|
|
|
3646
3665
|
if (!expandObject)
|
|
3647
3666
|
hierarchy .pop ();
|
|
3648
3667
|
|
|
3649
|
-
this .expandHierarchy (hierarchy, this .sceneGraph);
|
|
3668
|
+
this .expandHierarchy (hierarchy, this .sceneGraph, this .executionContext);
|
|
3650
3669
|
break;
|
|
3651
3670
|
}
|
|
3652
3671
|
}
|
|
@@ -3658,46 +3677,67 @@ module .exports = class OutlineView extends Interface
|
|
|
3658
3677
|
"X3DExecutionContext": "scene",
|
|
3659
3678
|
};
|
|
3660
3679
|
|
|
3661
|
-
expandHierarchy (hierarchy, parent)
|
|
3680
|
+
expandHierarchy (hierarchy, parent, parentObject)
|
|
3662
3681
|
{
|
|
3663
|
-
|
|
3682
|
+
let object = hierarchy .shift ();
|
|
3664
3683
|
|
|
3665
|
-
if (
|
|
3684
|
+
if (object === undefined)
|
|
3666
3685
|
return;
|
|
3667
3686
|
|
|
3668
|
-
|
|
3687
|
+
switch (true)
|
|
3669
3688
|
{
|
|
3670
|
-
|
|
3671
|
-
|
|
3672
|
-
if (element .length === 0)
|
|
3689
|
+
case typeof object === "string":
|
|
3673
3690
|
{
|
|
3674
|
-
|
|
3675
|
-
parent .jstree ("open_node", parent);
|
|
3691
|
+
object = parentObject .getField (object);
|
|
3676
3692
|
|
|
3677
|
-
element = parent .find (`.field[field-id=${object .getId ()}]`);
|
|
3678
|
-
}
|
|
3693
|
+
let element = parent .find (`.field[field-id=${object .getId ()}]`);
|
|
3679
3694
|
|
|
3680
|
-
|
|
3695
|
+
if (element .length === 0)
|
|
3696
|
+
{
|
|
3697
|
+
parent .jstree ("close_node", parent);
|
|
3698
|
+
parent .jstree ("open_node", parent);
|
|
3681
3699
|
|
|
3682
|
-
|
|
3683
|
-
|
|
3684
|
-
else if (object instanceof X3D .X3DImportedNode)
|
|
3685
|
-
{
|
|
3686
|
-
const element = parent .find (`.imported-node[imported-node-id=${object .getId ()}]`);
|
|
3700
|
+
element = parent .find (`.field[field-id=${object .getId ()}]`);
|
|
3701
|
+
}
|
|
3687
3702
|
|
|
3688
|
-
|
|
3703
|
+
element .jstree ("open_node", element);
|
|
3689
3704
|
|
|
3690
|
-
|
|
3691
|
-
|
|
3692
|
-
|
|
3693
|
-
|
|
3694
|
-
|
|
3695
|
-
|
|
3696
|
-
|
|
3705
|
+
this .expandHierarchy (hierarchy, element);
|
|
3706
|
+
break;
|
|
3707
|
+
}
|
|
3708
|
+
case typeof object === "number":
|
|
3709
|
+
{
|
|
3710
|
+
this .expandHierarchy (hierarchy, parent);
|
|
3711
|
+
break;
|
|
3712
|
+
}
|
|
3713
|
+
case object instanceof X3D .X3DImportedNode:
|
|
3714
|
+
{
|
|
3715
|
+
const element = parent .find (`.imported-node[imported-node-id=${object .getId ()}]`);
|
|
3697
3716
|
|
|
3698
|
-
|
|
3717
|
+
element .jstree ("open_node", element);
|
|
3718
|
+
|
|
3719
|
+
this .expandHierarchy (hierarchy, element);
|
|
3720
|
+
break;
|
|
3721
|
+
}
|
|
3722
|
+
case object instanceof X3D .SFNode:
|
|
3723
|
+
{
|
|
3724
|
+
object = object .getValue ();
|
|
3725
|
+
// Proceed with next case:
|
|
3726
|
+
}
|
|
3727
|
+
default: // X3DBaseNode
|
|
3728
|
+
{
|
|
3729
|
+
const
|
|
3730
|
+
objectClass = OutlineView .objectClasses [object .getTypeName ()] || "node",
|
|
3731
|
+
element = parent .find (`.${objectClass}[node-id=${object .getId ()}]`);
|
|
3732
|
+
|
|
3733
|
+
element .jstree ("open_node", element);
|
|
3734
|
+
|
|
3735
|
+
if (object instanceof X3D .X3DExecutionContext)
|
|
3736
|
+
hierarchy .shift (); // rootNode | protos ...
|
|
3699
3737
|
|
|
3700
|
-
|
|
3738
|
+
this .expandHierarchy (hierarchy, element, object);
|
|
3739
|
+
break;
|
|
3740
|
+
}
|
|
3701
3741
|
}
|
|
3702
3742
|
}
|
|
3703
3743
|
|
|
@@ -5,7 +5,7 @@ const
|
|
|
5
5
|
X3D = require ("../../X3D"),
|
|
6
6
|
Editor = require ("../../Undo/Editor"),
|
|
7
7
|
UndoManager = require ("../../Undo/UndoManager"),
|
|
8
|
-
Traverse = require ("
|
|
8
|
+
Traverse = require ("x3d-traverse") (X3D),
|
|
9
9
|
path = require ("path"),
|
|
10
10
|
url = require ("url"),
|
|
11
11
|
_ = require ("../../Application/GetText");
|
|
@@ -218,7 +218,10 @@ class X3DNodeTool extends X3DBaseTool
|
|
|
218
218
|
|
|
219
219
|
for (const tool of this .#tools)
|
|
220
220
|
{
|
|
221
|
-
Traverse .traverse (this [tool], Traverse .ROOT_NODES | Traverse .INLINE_SCENE | Traverse .PROTOTYPE_INSTANCES
|
|
221
|
+
for (const node of Traverse .traverse (this [tool], Traverse .ROOT_NODES | Traverse .INLINE_SCENE | Traverse .PROTOTYPE_INSTANCES))
|
|
222
|
+
{
|
|
223
|
+
nodesToDispose .push (node instanceof X3D .SFNode ? node .getValue () : node);
|
|
224
|
+
}
|
|
222
225
|
}
|
|
223
226
|
|
|
224
227
|
for (const node of nodesToDispose .filter (node => !this .#externalNodes .has (node)))
|
package/src/Undo/Editor.js
CHANGED
|
@@ -7,7 +7,7 @@ const
|
|
|
7
7
|
fs = require ("fs"),
|
|
8
8
|
zlib = require ("zlib"),
|
|
9
9
|
X3D = require ("../X3D"),
|
|
10
|
-
Traverse = require ("
|
|
10
|
+
Traverse = require ("x3d-traverse") (X3D),
|
|
11
11
|
UndoManager = require ("./UndoManager"),
|
|
12
12
|
_ = require ("../Application/GetText")
|
|
13
13
|
|
|
@@ -90,13 +90,20 @@ module .exports = class Editor
|
|
|
90
90
|
|
|
91
91
|
const protoNodes = new Set ()
|
|
92
92
|
|
|
93
|
-
Traverse .traverse (objects, Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES | Traverse .PROTOTYPE_INSTANCES
|
|
93
|
+
for (const object of Traverse .traverse (objects, Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES | Traverse .PROTOTYPE_INSTANCES))
|
|
94
94
|
{
|
|
95
|
-
if (
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
if (object instanceof X3D .X3DProtoDeclarationNode)
|
|
96
|
+
{
|
|
97
|
+
protoNodes .add (object);
|
|
98
|
+
}
|
|
99
|
+
else if (object instanceof X3D .SFNode)
|
|
100
|
+
{
|
|
101
|
+
const node = object .getValue ();
|
|
102
|
+
|
|
103
|
+
if (node .getType () .includes (X3D .X3DConstants .X3DPrototypeInstance))
|
|
104
|
+
protoNodes .add (node .getProtoNode ());
|
|
105
|
+
}
|
|
106
|
+
}
|
|
100
107
|
|
|
101
108
|
for (const protoNode of protoNodes)
|
|
102
109
|
{
|
|
@@ -125,8 +132,10 @@ module .exports = class Editor
|
|
|
125
132
|
childRoutes = new Set (),
|
|
126
133
|
inlineNodes = new Set ();
|
|
127
134
|
|
|
128
|
-
|
|
135
|
+
for (const object of nodes .traverse (Traverse .ROOT_NODES))
|
|
129
136
|
{
|
|
137
|
+
const node = object .getValue ();
|
|
138
|
+
|
|
130
139
|
componentNames .add (node .getComponentInfo () .name);
|
|
131
140
|
children .add (node .valueOf ());
|
|
132
141
|
|
|
@@ -141,7 +150,7 @@ module .exports = class Editor
|
|
|
141
150
|
|
|
142
151
|
if (node .getType () .includes (X3D .X3DConstants .Inline))
|
|
143
152
|
inlineNodes .add (node .valueOf ());
|
|
144
|
-
}
|
|
153
|
+
}
|
|
145
154
|
|
|
146
155
|
// Add exported nodes.
|
|
147
156
|
|
|
@@ -295,13 +304,18 @@ module .exports = class Editor
|
|
|
295
304
|
updatedProtos = new Map (),
|
|
296
305
|
removedProtoNodes = new Set ();
|
|
297
306
|
|
|
298
|
-
Traverse .traverse ([... newProtos, ... nodes], Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES
|
|
307
|
+
for (const object of Traverse .traverse ([... newProtos, ... nodes], Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES))
|
|
299
308
|
{
|
|
309
|
+
if (!(object instanceof X3D .SFNode))
|
|
310
|
+
continue;
|
|
311
|
+
|
|
312
|
+
const node = object .getValue ();
|
|
313
|
+
|
|
300
314
|
if (!node .getType () .includes (X3D .X3DConstants .X3DPrototypeInstance))
|
|
301
|
-
|
|
315
|
+
continue;
|
|
302
316
|
|
|
303
317
|
if (node .getProtoNode () .getExecutionContext () !== executionContext)
|
|
304
|
-
|
|
318
|
+
continue;
|
|
305
319
|
|
|
306
320
|
const proto = protos .get (node .getTypeName ());
|
|
307
321
|
|
|
@@ -309,7 +323,7 @@ module .exports = class Editor
|
|
|
309
323
|
{
|
|
310
324
|
updatedProtos .set (node .getTypeName (), proto);
|
|
311
325
|
this .setProtoNode (executionContext, node, proto, undoManager);
|
|
312
|
-
|
|
326
|
+
continue;
|
|
313
327
|
}
|
|
314
328
|
|
|
315
329
|
const externproto = externprotos .get (node .getTypeName ());
|
|
@@ -318,7 +332,7 @@ module .exports = class Editor
|
|
|
318
332
|
{
|
|
319
333
|
updatedExternProtos .set (node .getTypeName (), externproto);
|
|
320
334
|
this .setProtoNode (executionContext, node, externproto, undoManager);
|
|
321
|
-
|
|
335
|
+
continue;
|
|
322
336
|
}
|
|
323
337
|
|
|
324
338
|
const available = this .getNextAvailableProtoNode (executionContext, node .getTypeName ());
|
|
@@ -327,9 +341,9 @@ module .exports = class Editor
|
|
|
327
341
|
{
|
|
328
342
|
removedProtoNodes .add (node .getProtoNode ());
|
|
329
343
|
this .setProtoNode (executionContext, node, available, undoManager);
|
|
330
|
-
|
|
344
|
+
continue;
|
|
331
345
|
}
|
|
332
|
-
}
|
|
346
|
+
}
|
|
333
347
|
|
|
334
348
|
for (const [name, externproto] of updatedExternProtos)
|
|
335
349
|
this .updateExternProtoDeclaration (executionContext, name, externproto, undoManager);
|
|
@@ -398,9 +412,8 @@ module .exports = class Editor
|
|
|
398
412
|
|
|
399
413
|
fs .writeFileSync (filePath, this .getContents (scene, path .extname (filePath)));
|
|
400
414
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
scene .dispose ();
|
|
415
|
+
for (const object of scene .traverse (Traverse .ROOT_NODES | Traverse .PROTOTYPE_INSTANCES))
|
|
416
|
+
object .dispose ();
|
|
404
417
|
|
|
405
418
|
browser .setBrowserOption ("LoadUrlObjects", loadUrlObjects);
|
|
406
419
|
}
|
|
@@ -486,14 +499,18 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
486
499
|
{
|
|
487
500
|
undoManager .beginUndo (_("Rewrite URLs"))
|
|
488
501
|
|
|
489
|
-
Traverse .traverse (objects, Traverse .EXTERNPROTO_DECLARATIONS | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES
|
|
502
|
+
for (const object of Traverse .traverse (objects, Traverse .EXTERNPROTO_DECLARATIONS | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES))
|
|
490
503
|
{
|
|
504
|
+
if (!(object instanceof X3D .SFNode))
|
|
505
|
+
continue;
|
|
506
|
+
|
|
491
507
|
const
|
|
508
|
+
node = object .getValue (),
|
|
492
509
|
urlObject = node .getType () .includes (X3D .X3DConstants .X3DUrlObject),
|
|
493
510
|
fontStyleNode = node .getType () .includes (X3D .X3DConstants .X3DFontStyleNode);
|
|
494
511
|
|
|
495
512
|
if (!(urlObject || fontStyleNode))
|
|
496
|
-
|
|
513
|
+
continue;
|
|
497
514
|
|
|
498
515
|
const newURL = new X3D .MFString ();
|
|
499
516
|
|
|
@@ -557,7 +574,7 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
557
574
|
const uniqueURL = new X3D .MFString (... new Set (newURL));
|
|
558
575
|
|
|
559
576
|
this .setFieldValue (executionContext, node, node ._url, uniqueURL, undoManager);
|
|
560
|
-
}
|
|
577
|
+
}
|
|
561
578
|
|
|
562
579
|
undoManager .endUndo ();
|
|
563
580
|
}
|
|
@@ -616,13 +633,17 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
616
633
|
{
|
|
617
634
|
// Add nodes and child nodes.
|
|
618
635
|
|
|
619
|
-
const children = new Set ()
|
|
636
|
+
const children = new Set ();
|
|
620
637
|
|
|
621
|
-
Traverse .traverse (nodesToRemove, Traverse .ROOT_NODES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY
|
|
638
|
+
Array .from (Traverse .traverse (nodesToRemove, Traverse .ROOT_NODES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY))
|
|
639
|
+
.filter (object => object instanceof X3D .SFNode)
|
|
640
|
+
.forEach (node => children .add (node .getValue () .valueOf ()));
|
|
622
641
|
|
|
623
642
|
// Remove nodes still in scene graph.
|
|
624
643
|
|
|
625
|
-
Traverse .traverse (executionContext, Traverse .ROOT_NODES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY
|
|
644
|
+
Array .from (Traverse .traverse (executionContext, Traverse .ROOT_NODES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY))
|
|
645
|
+
.filter (object => object instanceof X3D .SFNode)
|
|
646
|
+
.forEach (node => children .delete (node .getValue () .valueOf ()));
|
|
626
647
|
|
|
627
648
|
if (children .size === 0)
|
|
628
649
|
continue;
|
|
@@ -755,16 +776,18 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
755
776
|
{
|
|
756
777
|
const components = new Set ();
|
|
757
778
|
|
|
758
|
-
|
|
779
|
+
for (const object of scene .traverse (Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES | Traverse .PROTOTYPE_INSTANCES))
|
|
759
780
|
{
|
|
760
|
-
if (!
|
|
761
|
-
|
|
781
|
+
if (!(object instanceof X3D .SFNode))
|
|
782
|
+
continue;
|
|
783
|
+
|
|
784
|
+
const node = object .getValue ();
|
|
762
785
|
|
|
763
786
|
if (node .getScene () !== scene)
|
|
764
|
-
|
|
787
|
+
continue;
|
|
765
788
|
|
|
766
789
|
components .add (node .getComponentInfo () .name);
|
|
767
|
-
}
|
|
790
|
+
}
|
|
768
791
|
|
|
769
792
|
return components;
|
|
770
793
|
}
|
|
@@ -1361,11 +1384,21 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
1361
1384
|
*/
|
|
1362
1385
|
static protoIsUsedInProto (proto, parent)
|
|
1363
1386
|
{
|
|
1364
|
-
|
|
1387
|
+
for (const object of parent .traverse (Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODE))
|
|
1365
1388
|
{
|
|
1366
|
-
if (
|
|
1367
|
-
|
|
1368
|
-
|
|
1389
|
+
if (!(object instanceof X3D .SFNode))
|
|
1390
|
+
continue;
|
|
1391
|
+
|
|
1392
|
+
const node = object .getValue ();
|
|
1393
|
+
|
|
1394
|
+
if (!node .getType () .includes (X3D .X3DConstants .X3DPrototypeInstance))
|
|
1395
|
+
continue;
|
|
1396
|
+
|
|
1397
|
+
if (node .getProtoNode () === proto)
|
|
1398
|
+
return true;
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
return false;
|
|
1369
1402
|
}
|
|
1370
1403
|
|
|
1371
1404
|
/**
|
|
@@ -1529,11 +1562,21 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
1529
1562
|
*/
|
|
1530
1563
|
static isProtoNodeUsed (executionContext, protoNode)
|
|
1531
1564
|
{
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1565
|
+
for (const object of executionContext .traverse (Traverse .ROOT_NODES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY))
|
|
1566
|
+
{
|
|
1567
|
+
if (!(object instanceof X3D .SFNode))
|
|
1568
|
+
continue;
|
|
1569
|
+
|
|
1570
|
+
const node = object .getValue ();
|
|
1571
|
+
|
|
1572
|
+
if (!node .getType () .includes (X3D .X3DConstants .X3DPrototypeInstance))
|
|
1573
|
+
continue;
|
|
1574
|
+
|
|
1575
|
+
if (node .getProtoNode () === protoNode)
|
|
1576
|
+
return true;
|
|
1577
|
+
}
|
|
1578
|
+
|
|
1579
|
+
return false;
|
|
1537
1580
|
}
|
|
1538
1581
|
|
|
1539
1582
|
/**
|
|
@@ -1707,14 +1750,19 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
1707
1750
|
{
|
|
1708
1751
|
undoManager .beginUndo (_("Replace Proto Node %s"), protoNode .getName ());
|
|
1709
1752
|
|
|
1710
|
-
|
|
1753
|
+
for (const object of executionContext .traverse (Traverse .ROOT_NODES | Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY))
|
|
1711
1754
|
{
|
|
1755
|
+
if (!(object instanceof X3D .SFNode))
|
|
1756
|
+
continue;
|
|
1757
|
+
|
|
1758
|
+
const node = object .getValue ();
|
|
1759
|
+
|
|
1712
1760
|
if (node .getType () .includes (X3D .X3DConstants .X3DPrototypeInstance))
|
|
1713
1761
|
{
|
|
1714
1762
|
if (node .getProtoNode () === protoNode)
|
|
1715
1763
|
this .setProtoNode (node .getExecutionContext (), node, by, undoManager);
|
|
1716
1764
|
}
|
|
1717
|
-
}
|
|
1765
|
+
}
|
|
1718
1766
|
|
|
1719
1767
|
this .requestUpdateInstances (executionContext, undoManager);
|
|
1720
1768
|
|
|
@@ -1953,8 +2001,10 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
1953
2001
|
|
|
1954
2002
|
undoManager .beginUndo (_("Remove Node"));
|
|
1955
2003
|
|
|
1956
|
-
|
|
2004
|
+
for (const object of executionContext .traverse (Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES))
|
|
1957
2005
|
{
|
|
2006
|
+
const node = object instanceof X3D .SFNode ? object .getValue () : object;
|
|
2007
|
+
|
|
1958
2008
|
if (node instanceof X3D .X3DExecutionContext)
|
|
1959
2009
|
{
|
|
1960
2010
|
for (let i = node .rootNodes .length - 1; i >= 0; -- i)
|
|
@@ -1989,7 +2039,7 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
1989
2039
|
}
|
|
1990
2040
|
}
|
|
1991
2041
|
}
|
|
1992
|
-
}
|
|
2042
|
+
}
|
|
1993
2043
|
|
|
1994
2044
|
undoManager .endUndo ();
|
|
1995
2045
|
}
|
|
@@ -2051,8 +2101,13 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
2051
2101
|
proto = node,
|
|
2052
2102
|
updatedField = field;
|
|
2053
2103
|
|
|
2054
|
-
|
|
2104
|
+
for (const object of proto .traverse (Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES))
|
|
2055
2105
|
{
|
|
2106
|
+
if (!(object instanceof X3D .SFNode))
|
|
2107
|
+
continue;
|
|
2108
|
+
|
|
2109
|
+
const node = object .getValue ();
|
|
2110
|
+
|
|
2056
2111
|
for (const field of node .getFields ())
|
|
2057
2112
|
{
|
|
2058
2113
|
// Remove references.
|
|
@@ -2063,33 +2118,41 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
2063
2118
|
this .removeReference (proto, updatedField, node, field, undoManager);
|
|
2064
2119
|
}
|
|
2065
2120
|
}
|
|
2066
|
-
}
|
|
2121
|
+
}
|
|
2067
2122
|
|
|
2068
2123
|
// Remove routes.
|
|
2069
2124
|
|
|
2070
|
-
|
|
2125
|
+
for (const object of executionContext .traverse (Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES))
|
|
2071
2126
|
{
|
|
2072
|
-
if (
|
|
2073
|
-
|
|
2074
|
-
|
|
2127
|
+
if (!(object instanceof X3D .SFNode))
|
|
2128
|
+
continue;
|
|
2129
|
+
|
|
2130
|
+
const node = object .getValue ();
|
|
2131
|
+
|
|
2132
|
+
if (!node .getType () .includes (X3D .X3DConstants .X3DPrototypeInstance))
|
|
2133
|
+
continue;
|
|
2134
|
+
|
|
2135
|
+
if (node .getProtoNode () !== proto)
|
|
2136
|
+
continue;
|
|
2137
|
+
|
|
2138
|
+
const field = node .getField (oldName);
|
|
2075
2139
|
|
|
2076
|
-
|
|
2140
|
+
if (!updatedField .isInput ())
|
|
2141
|
+
{
|
|
2142
|
+
for (const route of field .getInputRoutes ())
|
|
2077
2143
|
{
|
|
2078
|
-
|
|
2079
|
-
{
|
|
2080
|
-
this .deleteRoute (route .getExecutionContext (), route .sourceNode, route .sourceField, route .destinationNode, route .destinationField, undoManager);
|
|
2081
|
-
}
|
|
2144
|
+
this .deleteRoute (route .getExecutionContext (), route .sourceNode, route .sourceField, route .destinationNode, route .destinationField, undoManager);
|
|
2082
2145
|
}
|
|
2146
|
+
}
|
|
2083
2147
|
|
|
2084
|
-
|
|
2148
|
+
if (!updatedField .isOutput ())
|
|
2149
|
+
{
|
|
2150
|
+
for (const route of field .getOutputRoutes ())
|
|
2085
2151
|
{
|
|
2086
|
-
|
|
2087
|
-
{
|
|
2088
|
-
this .deleteRoute (route .getExecutionContext (), route .sourceNode, route .sourceField, route .destinationNode, route .destinationField, undoManager);
|
|
2089
|
-
}
|
|
2152
|
+
this .deleteRoute (route .getExecutionContext (), route .sourceNode, route .sourceField, route .destinationNode, route .destinationField, undoManager);
|
|
2090
2153
|
}
|
|
2091
2154
|
}
|
|
2092
|
-
}
|
|
2155
|
+
}
|
|
2093
2156
|
|
|
2094
2157
|
this .updateInstances (proto, undoManager);
|
|
2095
2158
|
}
|
|
@@ -2176,8 +2239,13 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
2176
2239
|
|
|
2177
2240
|
// Remove references.
|
|
2178
2241
|
|
|
2179
|
-
|
|
2242
|
+
for (const object of proto .traverse (Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES))
|
|
2180
2243
|
{
|
|
2244
|
+
if (!(object instanceof X3D .SFNode))
|
|
2245
|
+
continue;
|
|
2246
|
+
|
|
2247
|
+
const node = object .getValue ();
|
|
2248
|
+
|
|
2181
2249
|
for (const field of node .getFields ())
|
|
2182
2250
|
{
|
|
2183
2251
|
for (const removedField of removedFields)
|
|
@@ -2192,42 +2260,50 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
2192
2260
|
this .removeReference (proto, reference, node, field, undoManager);
|
|
2193
2261
|
}
|
|
2194
2262
|
}
|
|
2195
|
-
}
|
|
2263
|
+
}
|
|
2196
2264
|
|
|
2197
2265
|
// Remove routes, and undo set value.
|
|
2198
2266
|
|
|
2199
|
-
|
|
2267
|
+
for (const object of executionContext .traverse (Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES))
|
|
2200
2268
|
{
|
|
2201
|
-
if (
|
|
2269
|
+
if (!(object instanceof X3D .SFNode))
|
|
2270
|
+
continue;
|
|
2271
|
+
|
|
2272
|
+
const node = object .getValue ();
|
|
2273
|
+
|
|
2274
|
+
if (!node .getType () .includes (X3D .X3DConstants .X3DPrototypeInstance))
|
|
2275
|
+
continue;
|
|
2276
|
+
|
|
2277
|
+
if (node .getProtoNode () !== proto)
|
|
2278
|
+
continue;
|
|
2279
|
+
|
|
2280
|
+
for (const removedField of removedFields)
|
|
2202
2281
|
{
|
|
2203
|
-
|
|
2282
|
+
const field = node .getField (removedField .getName ());
|
|
2283
|
+
|
|
2284
|
+
if (field .isInitializable ())
|
|
2204
2285
|
{
|
|
2205
|
-
const
|
|
2286
|
+
const
|
|
2287
|
+
name = field .getName (),
|
|
2288
|
+
oldValue = field .copy ();
|
|
2206
2289
|
|
|
2207
|
-
|
|
2290
|
+
undoManager .registerUndo (() =>
|
|
2208
2291
|
{
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
undoManager .registerUndo (() =>
|
|
2214
|
-
{
|
|
2215
|
-
this .setFieldValue (node .getExecutionContext (), node, name, oldValue, undoManager);
|
|
2216
|
-
});
|
|
2217
|
-
}
|
|
2292
|
+
this .setFieldValue (node .getExecutionContext (), node, name, oldValue, undoManager);
|
|
2293
|
+
});
|
|
2294
|
+
}
|
|
2218
2295
|
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2296
|
+
for (const route of field .getInputRoutes ())
|
|
2297
|
+
{
|
|
2298
|
+
this .deleteRoute (route .getExecutionContext (), route .sourceNode, route .sourceField, route .destinationNode, route .destinationField, undoManager);
|
|
2299
|
+
}
|
|
2223
2300
|
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
}
|
|
2301
|
+
for (const route of field .getOutputRoutes ())
|
|
2302
|
+
{
|
|
2303
|
+
this .deleteRoute (route .getExecutionContext (), route .sourceNode, route .sourceField, route .destinationNode, route .destinationField, undoManager);
|
|
2228
2304
|
}
|
|
2229
2305
|
}
|
|
2230
|
-
}
|
|
2306
|
+
}
|
|
2231
2307
|
|
|
2232
2308
|
this .updateInstances (proto, undoManager);
|
|
2233
2309
|
}
|
|
@@ -2843,9 +2919,11 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
2843
2919
|
|
|
2844
2920
|
undoManager .beginUndo (_("Replace All Occurrences of %s by %s"), original .getTypeName (), replacement .getTypeName ());
|
|
2845
2921
|
|
|
2846
|
-
|
|
2922
|
+
for (const object of executionContext .traverse (Traverse .PROTO_DECLARATIONS | Traverse .PROTO_DECLARATION_BODY | Traverse .ROOT_NODES))
|
|
2847
2923
|
{
|
|
2848
|
-
const
|
|
2924
|
+
const
|
|
2925
|
+
node = object instanceof X3D .SFNode ? object .getValue () : object,
|
|
2926
|
+
fields = node instanceof X3D .X3DExecutionContext ? [node .getRootNodes ()] : node .getFields ()
|
|
2849
2927
|
|
|
2850
2928
|
for (const field of fields)
|
|
2851
2929
|
{
|
|
@@ -2870,7 +2948,7 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
|
|
|
2870
2948
|
}
|
|
2871
2949
|
}
|
|
2872
2950
|
}
|
|
2873
|
-
}
|
|
2951
|
+
}
|
|
2874
2952
|
|
|
2875
2953
|
undoManager .endUndo ();
|
|
2876
2954
|
}
|
package/src/assets/Info.plist
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
<string>Owner</string>
|
|
25
25
|
<key>LSIsAppleDefaultForType</key>
|
|
26
26
|
<true/>
|
|
27
|
-
<key>
|
|
27
|
+
<key>UTTypeConformsTo</key>
|
|
28
28
|
<array>
|
|
29
29
|
<string>io.github.create3000.x3d</string>
|
|
30
30
|
<string>io.castleengine.view3dscene.x3d</string>
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
<string>Owner</string>
|
|
55
55
|
<key>LSIsAppleDefaultForType</key>
|
|
56
56
|
<true/>
|
|
57
|
-
<key>
|
|
57
|
+
<key>UTTypeConformsTo</key>
|
|
58
58
|
<array>
|
|
59
59
|
<string>io.github.create3000.x3d</string>
|
|
60
60
|
<string>io.castleengine.view3dscene.x3d</string>
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
<string>Owner</string>
|
|
82
82
|
<key>LSIsAppleDefaultForType</key>
|
|
83
83
|
<true/>
|
|
84
|
-
<key>
|
|
84
|
+
<key>UTTypeConformsTo</key>
|
|
85
85
|
<array>
|
|
86
86
|
<string>io.github.create3000.x3dv</string>
|
|
87
87
|
<string>io.castleengine.view3dscene.x3dv</string>
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
<string>Owner</string>
|
|
112
112
|
<key>LSIsAppleDefaultForType</key>
|
|
113
113
|
<true/>
|
|
114
|
-
<key>
|
|
114
|
+
<key>UTTypeConformsTo</key>
|
|
115
115
|
<array>
|
|
116
116
|
<string>io.github.create3000.x3dv</string>
|
|
117
117
|
<string>io.castleengine.view3dscene.x3dv</string>
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
<string>Owner</string>
|
|
139
139
|
<key>LSIsAppleDefaultForType</key>
|
|
140
140
|
<true/>
|
|
141
|
-
<key>
|
|
141
|
+
<key>UTTypeConformsTo</key>
|
|
142
142
|
<array>
|
|
143
143
|
<string>io.github.create3000.x3dj</string>
|
|
144
144
|
<string>io.castleengine.view3dscene.x3dj</string>
|
|
@@ -168,7 +168,7 @@
|
|
|
168
168
|
<string>Owner</string>
|
|
169
169
|
<key>LSIsAppleDefaultForType</key>
|
|
170
170
|
<true/>
|
|
171
|
-
<key>
|
|
171
|
+
<key>UTTypeConformsTo</key>
|
|
172
172
|
<array>
|
|
173
173
|
<string>io.github.create3000.x3dj</string>
|
|
174
174
|
<string>io.castleengine.view3dscene.x3dj</string>
|
|
@@ -198,7 +198,7 @@
|
|
|
198
198
|
<string>Owner</string>
|
|
199
199
|
<key>LSIsAppleDefaultForType</key>
|
|
200
200
|
<true/>
|
|
201
|
-
<key>
|
|
201
|
+
<key>UTTypeConformsTo</key>
|
|
202
202
|
<array>
|
|
203
203
|
<string>io.github.create3000.vrml</string>
|
|
204
204
|
<string>io.castleengine.view3dscene.vrml</string>
|
|
@@ -229,7 +229,7 @@
|
|
|
229
229
|
<string>Owner</string>
|
|
230
230
|
<key>LSIsAppleDefaultForType</key>
|
|
231
231
|
<true/>
|
|
232
|
-
<key>
|
|
232
|
+
<key>UTTypeConformsTo</key>
|
|
233
233
|
<array>
|
|
234
234
|
<string>io.github.create3000.vrml</string>
|
|
235
235
|
<string>io.castleengine.view3dscene.vrml</string>
|
|
@@ -1057,7 +1057,7 @@ body.dark .ui-widget .library-list .component {
|
|
|
1057
1057
|
display: none;
|
|
1058
1058
|
}
|
|
1059
1059
|
|
|
1060
|
-
.scene-graph .description {
|
|
1060
|
+
.scene-graph .description .jstree-anchor {
|
|
1061
1061
|
padding: 2px 0;
|
|
1062
1062
|
font-size: smaller;
|
|
1063
1063
|
}
|
|
@@ -1078,11 +1078,12 @@ body.dark .ui-widget .library-list .component {
|
|
|
1078
1078
|
color: var(--system-red);
|
|
1079
1079
|
}
|
|
1080
1080
|
|
|
1081
|
+
/* make drag & drop work */
|
|
1081
1082
|
.scene-graph .last {
|
|
1082
|
-
height:
|
|
1083
|
+
height: 2px;
|
|
1083
1084
|
}
|
|
1084
1085
|
|
|
1085
|
-
.scene-graph .last
|
|
1086
|
+
.scene-graph .last .item *:not(.route-curves-wrapper, .route-curves) {
|
|
1086
1087
|
visibility: hidden;
|
|
1087
1088
|
}
|
|
1088
1089
|
|
|
@@ -1057,7 +1057,7 @@ body.dark .ui-widget .library-list .component {
|
|
|
1057
1057
|
display: none;
|
|
1058
1058
|
}
|
|
1059
1059
|
|
|
1060
|
-
.scene-graph .description {
|
|
1060
|
+
.scene-graph .description .jstree-anchor {
|
|
1061
1061
|
padding: 2px 0;
|
|
1062
1062
|
font-size: smaller;
|
|
1063
1063
|
}
|
|
@@ -1078,11 +1078,12 @@ body.dark .ui-widget .library-list .component {
|
|
|
1078
1078
|
color: var(--system-red);
|
|
1079
1079
|
}
|
|
1080
1080
|
|
|
1081
|
+
/* make drag & drop work */
|
|
1081
1082
|
.scene-graph .last {
|
|
1082
|
-
height:
|
|
1083
|
+
height: 2px;
|
|
1083
1084
|
}
|
|
1084
1085
|
|
|
1085
|
-
.scene-graph .last
|
|
1086
|
+
.scene-graph .last .item *:not(.route-curves-wrapper, .route-curves) {
|
|
1086
1087
|
visibility: hidden;
|
|
1087
1088
|
}
|
|
1088
1089
|
|
|
@@ -1,368 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const X3D = require ("../X3D");
|
|
4
|
-
|
|
5
|
-
let flags = 1;
|
|
6
|
-
|
|
7
|
-
module .exports = class Traverse
|
|
8
|
-
{
|
|
9
|
-
static NONE = 0;
|
|
10
|
-
static EXTERNPROTO_DECLARATIONS = flags;
|
|
11
|
-
static PROTO_DECLARATIONS = flags <<= 1;
|
|
12
|
-
static ROOT_NODES = flags <<= 1;
|
|
13
|
-
static IMPORTED_NODES = flags <<= 1;
|
|
14
|
-
static EXTERNPROTO_DECLARATION_SCENE = flags <<= 1;
|
|
15
|
-
static PROTO_DECLARATION_BODY = flags <<= 1;
|
|
16
|
-
static PROTOTYPE_INSTANCES = flags <<= 1;
|
|
17
|
-
static INLINE_SCENE = flags <<= 1;
|
|
18
|
-
static ALL = (flags << 1) - 1;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
*
|
|
22
|
-
* @param {X3DScene|X3DExecutionContext|MFNode|Array<SFNode>|SFNode} object
|
|
23
|
-
* @param {number} flags
|
|
24
|
-
* @param {Function} callback
|
|
25
|
-
* @returns boolean
|
|
26
|
-
*/
|
|
27
|
-
static traverse (object, flags, callback)
|
|
28
|
-
{
|
|
29
|
-
const seen = new Set ()
|
|
30
|
-
|
|
31
|
-
if (object instanceof X3D .X3DExecutionContext)
|
|
32
|
-
return this .traverseScene (object, flags, callback, seen);
|
|
33
|
-
|
|
34
|
-
if (object instanceof X3D .MFNode || Array .isArray (object))
|
|
35
|
-
return this .traverseNodes (object, flags, callback, seen);
|
|
36
|
-
|
|
37
|
-
if (object instanceof X3D .SFNode)
|
|
38
|
-
return this .traverseNode (object .getValue (), flags, callback, seen);
|
|
39
|
-
|
|
40
|
-
if (object instanceof X3D .X3DBaseNode)
|
|
41
|
-
return this .traverseNode (object, flags, callback, seen);
|
|
42
|
-
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
static traverseScene (executionContext, flags, callback, seen)
|
|
47
|
-
{
|
|
48
|
-
if (!executionContext)
|
|
49
|
-
return true;
|
|
50
|
-
|
|
51
|
-
if (flags & Traverse .PROTO_DECLARATIONS)
|
|
52
|
-
{
|
|
53
|
-
for (const proto of executionContext .protos)
|
|
54
|
-
{
|
|
55
|
-
if (this .traverseNode (proto, flags, callback, seen) === false)
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (flags & Traverse .ROOT_NODES)
|
|
61
|
-
{
|
|
62
|
-
if (this .traverseNodes (executionContext .rootNodes, flags, callback, seen) === false)
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return callback (executionContext) !== false;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
static traverseNodes (nodes, flags, callback, seen)
|
|
70
|
-
{
|
|
71
|
-
for (const node of nodes)
|
|
72
|
-
{
|
|
73
|
-
if (this .traverseNode (node instanceof X3D .SFNode ? node .getValue () : node, flags, callback, seen) === false)
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return true;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
static traverseNode (node, flags, callback, seen)
|
|
81
|
-
{
|
|
82
|
-
if (!node)
|
|
83
|
-
return true;
|
|
84
|
-
|
|
85
|
-
if (seen .has (node))
|
|
86
|
-
return true;
|
|
87
|
-
|
|
88
|
-
seen .add (node);
|
|
89
|
-
|
|
90
|
-
if (this .traverseFields (node .getUserDefinedFields (), flags, callback, seen) === false)
|
|
91
|
-
return false;
|
|
92
|
-
|
|
93
|
-
if (this .traverseFields (node .getPredefinedFields (), flags, callback, seen) === false)
|
|
94
|
-
return false;
|
|
95
|
-
|
|
96
|
-
const type = node .getType ();
|
|
97
|
-
|
|
98
|
-
for (let t = type .length - 1; t >= 0; -- t)
|
|
99
|
-
{
|
|
100
|
-
switch (type [t])
|
|
101
|
-
{
|
|
102
|
-
case X3D .X3DConstants .X3DExternProtoDeclaration:
|
|
103
|
-
{
|
|
104
|
-
if (flags & this .EXTERNPROTO_DECLARATION_SCENE)
|
|
105
|
-
{
|
|
106
|
-
if (this .traverseScene (node .getInternalScene (), flags, callback, seen) === false)
|
|
107
|
-
return false;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
break;
|
|
111
|
-
}
|
|
112
|
-
case X3D .X3DConstants .X3DProtoDeclaration:
|
|
113
|
-
{
|
|
114
|
-
if (flags & Traverse .PROTO_DECLARATION_BODY)
|
|
115
|
-
{
|
|
116
|
-
if (this .traverseScene (node .getBody (), flags, callback, seen) === false)
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
break;
|
|
121
|
-
}
|
|
122
|
-
case X3D .X3DConstants .X3DPrototypeInstance:
|
|
123
|
-
{
|
|
124
|
-
if (flags & Traverse .PROTOTYPE_INSTANCES)
|
|
125
|
-
{
|
|
126
|
-
if (this .traverseScene (node .getBody (), flags, callback, seen) === false)
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
case X3D .X3DConstants .Inline:
|
|
133
|
-
{
|
|
134
|
-
if (flags & this .INLINE_SCENE)
|
|
135
|
-
{
|
|
136
|
-
if (this .traverseScene (node .getInternalScene (), flags, callback, seen) === false)
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
default:
|
|
143
|
-
{
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
break;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return callback (node) !== false;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
static traverseFields (fields, flags, callback, seen)
|
|
155
|
-
{
|
|
156
|
-
for (const field of fields)
|
|
157
|
-
{
|
|
158
|
-
switch (field .getType ())
|
|
159
|
-
{
|
|
160
|
-
case X3D .X3DConstants .SFNode:
|
|
161
|
-
{
|
|
162
|
-
if (this .traverseNode (field .getValue (), flags, callback, seen) === false)
|
|
163
|
-
return false;
|
|
164
|
-
|
|
165
|
-
break;
|
|
166
|
-
}
|
|
167
|
-
case X3D .X3DConstants .MFNode:
|
|
168
|
-
{
|
|
169
|
-
if (this .traverseNodes (field, flags, callback, seen) === false)
|
|
170
|
-
return false;
|
|
171
|
-
|
|
172
|
-
break;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
return true;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
static find (scene, object, flags)
|
|
181
|
-
{
|
|
182
|
-
const
|
|
183
|
-
hierarchies = [ ],
|
|
184
|
-
hierarchy = [ ],
|
|
185
|
-
seen = new Set ();
|
|
186
|
-
|
|
187
|
-
this .findInScene (scene, object, flags, hierarchies, hierarchy, seen);
|
|
188
|
-
|
|
189
|
-
return hierarchies;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
static findInScene (executionContext, object, flags, hierarchies, hierarchy, seen)
|
|
193
|
-
{
|
|
194
|
-
if (!executionContext)
|
|
195
|
-
return;
|
|
196
|
-
|
|
197
|
-
hierarchy .push (executionContext);
|
|
198
|
-
|
|
199
|
-
if (executionContext === object)
|
|
200
|
-
{
|
|
201
|
-
hierarchies .push (hierarchy .slice ());
|
|
202
|
-
}
|
|
203
|
-
else
|
|
204
|
-
{
|
|
205
|
-
if (flags & this .EXTERNPROTO_DECLARATIONS)
|
|
206
|
-
{
|
|
207
|
-
const externprotos = executionContext .getExternProtoDeclarations ();
|
|
208
|
-
|
|
209
|
-
for (const externproto of externprotos)
|
|
210
|
-
{
|
|
211
|
-
this .findInNode (externproto, object, flags, hierarchies, hierarchy, seen);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if (flags & this .PROTO_DECLARATIONS)
|
|
216
|
-
{
|
|
217
|
-
const prototypes = executionContext .getProtoDeclarations ();
|
|
218
|
-
|
|
219
|
-
for (const prototype of prototypes)
|
|
220
|
-
{
|
|
221
|
-
this .findInNode (prototype, object, flags, hierarchies, hierarchy, seen);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
if (flags & this .ROOT_NODES)
|
|
226
|
-
{
|
|
227
|
-
const rootNodes = executionContext .getRootNodes ();
|
|
228
|
-
|
|
229
|
-
for (const rootNode of rootNodes)
|
|
230
|
-
{
|
|
231
|
-
this .findInNode (rootNode .getValue (), object, flags, hierarchies, hierarchy, seen);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
if (flags & this .IMPORTED_NODES)
|
|
236
|
-
{
|
|
237
|
-
for (const importedNode of executionContext .getImportedNodes ())
|
|
238
|
-
{
|
|
239
|
-
hierarchy .push (importedNode);
|
|
240
|
-
|
|
241
|
-
if (importedNode === object)
|
|
242
|
-
{
|
|
243
|
-
hierarchies .push (hierarchy .slice ());
|
|
244
|
-
}
|
|
245
|
-
else
|
|
246
|
-
{
|
|
247
|
-
try
|
|
248
|
-
{
|
|
249
|
-
const exportedNode = importedNode .getExportedNode ();
|
|
250
|
-
|
|
251
|
-
this .findInNode (exportedNode, object, flags, hierarchies, hierarchy, seen);
|
|
252
|
-
}
|
|
253
|
-
catch (error)
|
|
254
|
-
{
|
|
255
|
-
//console .log (error .message)
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
hierarchy .pop ();
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
hierarchy .pop ();
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
static findInNode (node, object, flags, hierarchies, hierarchy, seen)
|
|
268
|
-
{
|
|
269
|
-
if (!node)
|
|
270
|
-
return;
|
|
271
|
-
|
|
272
|
-
if (seen .has (node))
|
|
273
|
-
return;
|
|
274
|
-
|
|
275
|
-
seen .add (node);
|
|
276
|
-
hierarchy .push (node);
|
|
277
|
-
|
|
278
|
-
if (node .valueOf () === object .valueOf ())
|
|
279
|
-
{
|
|
280
|
-
hierarchies .push (hierarchy .slice ());
|
|
281
|
-
}
|
|
282
|
-
else
|
|
283
|
-
{
|
|
284
|
-
if (!node .getType () .includes (X3D .X3DConstants .X3DExternProtoDeclaration))
|
|
285
|
-
{
|
|
286
|
-
this .findInFields (node .getUserDefinedFields (), object, flags, hierarchies, hierarchy, seen);
|
|
287
|
-
this .findInFields (node .getPredefinedFields (), object, flags, hierarchies, hierarchy, seen);
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
const type = node .getType ();
|
|
291
|
-
|
|
292
|
-
for (let t = type .length - 1; t >= 0; -- t)
|
|
293
|
-
{
|
|
294
|
-
switch (type [t])
|
|
295
|
-
{
|
|
296
|
-
case X3D .X3DConstants .X3DExternProtoDeclaration:
|
|
297
|
-
{
|
|
298
|
-
if (flags & this .EXTERNPROTO_DECLARATION_SCENE)
|
|
299
|
-
this .findInScene (node .getInternalScene (), object, flags, hierarchies, hierarchy, seen);
|
|
300
|
-
|
|
301
|
-
break;
|
|
302
|
-
}
|
|
303
|
-
case X3D .X3DConstants .X3DProtoDeclaration:
|
|
304
|
-
{
|
|
305
|
-
if (flags & this .PROTO_DECLARATION_BODY)
|
|
306
|
-
this .findInScene (node .getBody (), object, flags, hierarchies, hierarchy, seen);
|
|
307
|
-
|
|
308
|
-
break;
|
|
309
|
-
}
|
|
310
|
-
case X3D .X3DConstants .X3DPrototypeInstance:
|
|
311
|
-
{
|
|
312
|
-
if (flags & this .PROTOTYPE_INSTANCES)
|
|
313
|
-
this .findInScene (node .getBody (), object, flags, hierarchies, hierarchy, seen);
|
|
314
|
-
|
|
315
|
-
break;
|
|
316
|
-
}
|
|
317
|
-
case X3D .X3DConstants .Inline:
|
|
318
|
-
{
|
|
319
|
-
if (flags & this .INLINE_SCENE)
|
|
320
|
-
this .findInScene (node .getInternalScene (), object, flags, hierarchies, hierarchy, seen);
|
|
321
|
-
|
|
322
|
-
break
|
|
323
|
-
}
|
|
324
|
-
default:
|
|
325
|
-
break;
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
hierarchy .pop ();
|
|
331
|
-
seen .delete (node);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
static findInFields (fields, object, flags, hierarchies, hierarchy, seen)
|
|
335
|
-
{
|
|
336
|
-
for (const field of fields)
|
|
337
|
-
{
|
|
338
|
-
hierarchy .push (field);
|
|
339
|
-
|
|
340
|
-
if (field === object)
|
|
341
|
-
{
|
|
342
|
-
hierarchies .push (hierarchy .slice ());
|
|
343
|
-
}
|
|
344
|
-
else
|
|
345
|
-
{
|
|
346
|
-
switch (field .getType ())
|
|
347
|
-
{
|
|
348
|
-
case X3D .X3DConstants .SFNode:
|
|
349
|
-
{
|
|
350
|
-
this .findInNode (field .getValue (), object, flags, hierarchies, hierarchy, seen);
|
|
351
|
-
break;
|
|
352
|
-
}
|
|
353
|
-
case X3D .X3DConstants .MFNode:
|
|
354
|
-
{
|
|
355
|
-
for (const node of field)
|
|
356
|
-
this .findInNode (node ?.getValue (), object, flags, hierarchies, hierarchy, seen);
|
|
357
|
-
|
|
358
|
-
break;
|
|
359
|
-
}
|
|
360
|
-
default:
|
|
361
|
-
break;
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
hierarchy .pop ();
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
};
|
|
File without changes
|