sunrize 1.7.36 → 1.7.38
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 +4 -4
- package/src/Application/Document.js +17 -4
- package/src/Editors/Console.js +2 -1
- package/src/Editors/OutlineEditor.js +52 -1
- package/src/Editors/OutlineView.js +286 -254
- package/src/Undo/Editor.js +0 -3
- package/src/assets/X3DUOM.xml +22 -10
- package/src/assets/themes/default-template.css +16 -11
- package/src/assets/themes/default.css +16 -11
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.38",
|
|
5
5
|
"description": "A Multi-Platform X3D Editor",
|
|
6
6
|
"main": "src/main.js",
|
|
7
7
|
"bin": {
|
|
@@ -108,8 +108,8 @@
|
|
|
108
108
|
"spectrum-colorpicker2": "^2.0.10",
|
|
109
109
|
"string-similarity": "^4.0.4",
|
|
110
110
|
"tweakpane": "^3.1.10",
|
|
111
|
-
"update-electron-app": "^3.
|
|
112
|
-
"x_ite": "^11.0.
|
|
113
|
-
"x3d-traverse": "^1.0.
|
|
111
|
+
"update-electron-app": "^3.1.0",
|
|
112
|
+
"x_ite": "^11.0.2",
|
|
113
|
+
"x3d-traverse": "^1.0.7"
|
|
114
114
|
}
|
|
115
115
|
}
|
|
@@ -22,10 +22,15 @@ const
|
|
|
22
22
|
|
|
23
23
|
module .exports = class Document extends Interface
|
|
24
24
|
{
|
|
25
|
+
#replaceWorld;
|
|
26
|
+
|
|
25
27
|
constructor ()
|
|
26
28
|
{
|
|
27
29
|
super ("Sunrize.Document.");
|
|
28
30
|
|
|
31
|
+
// Add X3D to window to provide access in Script nodes.
|
|
32
|
+
window .X3D = X3D;
|
|
33
|
+
|
|
29
34
|
// Globals
|
|
30
35
|
|
|
31
36
|
this .config .global .setDefaultValues ({
|
|
@@ -126,6 +131,13 @@ module .exports = class Document extends Interface
|
|
|
126
131
|
|
|
127
132
|
UndoManager .shared .addInterest (this, () => this .undoManager ());
|
|
128
133
|
|
|
134
|
+
// Override replaceWorld and loadURL.
|
|
135
|
+
|
|
136
|
+
this .#replaceWorld = X3D .X3DBrowser .prototype .replaceWorld;
|
|
137
|
+
|
|
138
|
+
X3D .X3DBrowser .prototype .loadURL = () => Promise .resolve ();
|
|
139
|
+
X3D .X3DBrowser .prototype .replaceWorld = () => Promise .resolve ();
|
|
140
|
+
|
|
129
141
|
// Connect browser options.
|
|
130
142
|
|
|
131
143
|
const browserOptions = [
|
|
@@ -376,10 +388,11 @@ Viewpoint {
|
|
|
376
388
|
{
|
|
377
389
|
try
|
|
378
390
|
{
|
|
379
|
-
|
|
380
|
-
await this .browser .
|
|
381
|
-
|
|
382
|
-
|
|
391
|
+
const scene = fileURL
|
|
392
|
+
? await this .browser .createX3DFromURL (new X3D .MFString (fileURL))
|
|
393
|
+
: null;
|
|
394
|
+
|
|
395
|
+
await this .#replaceWorld .call (this .browser, scene);
|
|
383
396
|
|
|
384
397
|
this .browser .currentScene .setSpecificationVersion (X3D .LATEST_VERSION);
|
|
385
398
|
}
|
package/src/Editors/Console.js
CHANGED
|
@@ -98,9 +98,10 @@ module .exports = class Console extends Interface
|
|
|
98
98
|
this .scriptNode .setup ();
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
+
// Add strings to exclude here:
|
|
101
102
|
excludes = new Set ([
|
|
102
103
|
"The vm module of Node.js is deprecated in the renderer process and will be removed.",
|
|
103
|
-
"Invalid asm.js: Invalid member of stdlib",
|
|
104
|
+
// "Invalid asm.js: Invalid member of stdlib",
|
|
104
105
|
]);
|
|
105
106
|
|
|
106
107
|
addMessage (event, level, sourceId, line, message)
|
|
@@ -1884,7 +1884,7 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
|
|
|
1884
1884
|
|
|
1885
1885
|
const
|
|
1886
1886
|
target = $(event .target),
|
|
1887
|
-
element = target .closest (".node", this .sceneGraph),
|
|
1887
|
+
element = target .closest (".node, .exported-node", this .sceneGraph),
|
|
1888
1888
|
layerNode = this .getNode (element),
|
|
1889
1889
|
layerSet = this .browser .getWorld () .getLayerSet (),
|
|
1890
1890
|
index = layerSet ._layers .findIndex (node => node ?.getValue () .valueOf () === layerNode);
|
|
@@ -1898,6 +1898,57 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
|
|
|
1898
1898
|
Editor .setFieldValue (this .browser .currentScene, layerSet, layerSet ._activeLayer, index + 1);
|
|
1899
1899
|
}
|
|
1900
1900
|
|
|
1901
|
+
playNode (event)
|
|
1902
|
+
{
|
|
1903
|
+
const
|
|
1904
|
+
target = $(event .target),
|
|
1905
|
+
element = target .closest (".node, .exported-node", this .sceneGraph),
|
|
1906
|
+
node = this .getNode (element);
|
|
1907
|
+
|
|
1908
|
+
event .preventDefault ();
|
|
1909
|
+
event .stopImmediatePropagation ();
|
|
1910
|
+
|
|
1911
|
+
if (node ._isActive .getValue ())
|
|
1912
|
+
{
|
|
1913
|
+
if (node ._isPaused .getValue ())
|
|
1914
|
+
Editor .setFieldValue (this .browser .currentScene, node, node ._resumeTime, Date .now () / 1000);
|
|
1915
|
+
else
|
|
1916
|
+
Editor .setFieldValue (this .browser .currentScene, node, node ._pauseTime, Date .now () / 1000);
|
|
1917
|
+
}
|
|
1918
|
+
else
|
|
1919
|
+
{
|
|
1920
|
+
node ._isEvenLive = true;
|
|
1921
|
+
|
|
1922
|
+
Editor .setFieldValue (this .browser .currentScene, node, node ._startTime, Date .now () / 1000);
|
|
1923
|
+
}
|
|
1924
|
+
}
|
|
1925
|
+
|
|
1926
|
+
stopNode (event)
|
|
1927
|
+
{
|
|
1928
|
+
const
|
|
1929
|
+
target = $(event .target),
|
|
1930
|
+
element = target .closest (".node, .exported-node", this .sceneGraph),
|
|
1931
|
+
node = this .getNode (element);
|
|
1932
|
+
|
|
1933
|
+
event .preventDefault ();
|
|
1934
|
+
event .stopImmediatePropagation ();
|
|
1935
|
+
|
|
1936
|
+
Editor .setFieldValue (this .browser .currentScene, node, node ._stopTime, Date .now () / 1000);
|
|
1937
|
+
}
|
|
1938
|
+
|
|
1939
|
+
loopNode (event)
|
|
1940
|
+
{
|
|
1941
|
+
const
|
|
1942
|
+
target = $(event .target),
|
|
1943
|
+
element = target .closest (".node, .exported-node", this .sceneGraph),
|
|
1944
|
+
node = this .getNode (element);
|
|
1945
|
+
|
|
1946
|
+
event .preventDefault ();
|
|
1947
|
+
event .stopImmediatePropagation ();
|
|
1948
|
+
|
|
1949
|
+
Editor .setFieldValue (this .browser .currentScene, node, node ._loop, !node ._loop .getValue ());
|
|
1950
|
+
}
|
|
1951
|
+
|
|
1901
1952
|
addBooleanField (button)
|
|
1902
1953
|
{
|
|
1903
1954
|
const
|
|
@@ -248,6 +248,22 @@ module .exports = class OutlineView extends Interface
|
|
|
248
248
|
.wrapInner ("<div class=\"item no-select\"/>")
|
|
249
249
|
.find (".item") .append ("<div class=\"route-curves-wrapper\"><canvas class=\"route-curves\"></canvas></div>");
|
|
250
250
|
|
|
251
|
+
// Connect actions.
|
|
252
|
+
|
|
253
|
+
this .connectNodeActions (parent, child);
|
|
254
|
+
|
|
255
|
+
// Expand children.
|
|
256
|
+
|
|
257
|
+
const
|
|
258
|
+
specialElements = child .find (".externproto, .proto, .imported-node, .exported-node"),
|
|
259
|
+
elements = child .find (".node");
|
|
260
|
+
|
|
261
|
+
child .show ();
|
|
262
|
+
this .expandSceneSubtreeComplete (specialElements, elements);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
connectNodeActions (parent, child)
|
|
266
|
+
{
|
|
251
267
|
if (this .isEditable (parent))
|
|
252
268
|
{
|
|
253
269
|
child .find (".externproto > .item")
|
|
@@ -281,20 +297,39 @@ module .exports = class OutlineView extends Interface
|
|
|
281
297
|
child .find (".bind-node")
|
|
282
298
|
.on ("click", this .bindNode .bind (this));
|
|
283
299
|
|
|
300
|
+
child .find (".play-node")
|
|
301
|
+
.on ("click", this .playNode .bind (this));
|
|
302
|
+
|
|
303
|
+
child .find (".stop-node")
|
|
304
|
+
.on ("click", this .stopNode .bind (this));
|
|
305
|
+
|
|
306
|
+
child .find (".loop-node")
|
|
307
|
+
.on ("click", this .loopNode .bind (this));
|
|
308
|
+
|
|
284
309
|
child .find (".reload-node")
|
|
285
310
|
.on ("click", this .reloadNode .bind (this));
|
|
286
311
|
|
|
287
312
|
child .find (".show-preview")
|
|
288
313
|
.on ("click", this .showPreview .bind (this));
|
|
314
|
+
}
|
|
289
315
|
|
|
290
|
-
|
|
316
|
+
connectFieldActions (child)
|
|
317
|
+
{
|
|
318
|
+
child .find ("area.input-selector")
|
|
319
|
+
.on ("mouseenter", this .hoverInSingleConnector .bind (this, "input"))
|
|
320
|
+
.on ("mouseleave", this .hoverOutSingleConnector .bind (this, "input"))
|
|
321
|
+
.on ("click", this .selectSingleConnector .bind (this, "input"));
|
|
291
322
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
323
|
+
child .find ("area.output-selector")
|
|
324
|
+
.on ("mouseenter", this .hoverInSingleConnector .bind (this, "output"))
|
|
325
|
+
.on ("mouseleave", this .hoverOutSingleConnector .bind (this, "output"))
|
|
326
|
+
.on ("click", this .selectSingleConnector .bind (this, "output"));
|
|
295
327
|
|
|
296
|
-
child .
|
|
297
|
-
|
|
328
|
+
child .find ("area.input-routes-selector")
|
|
329
|
+
.on ("click", this .selectSingleRoute .bind (this, "input"));
|
|
330
|
+
|
|
331
|
+
child .find ("area.output-routes-selector")
|
|
332
|
+
.on ("click", this .selectSingleRoute .bind (this, "output"));
|
|
298
333
|
}
|
|
299
334
|
|
|
300
335
|
expandSceneSubtreeComplete (specialElements, elements)
|
|
@@ -903,6 +938,7 @@ module .exports = class OutlineView extends Interface
|
|
|
903
938
|
#nodeSymbol = Symbol ();
|
|
904
939
|
#updateNodeBoundSymbol = Symbol ();
|
|
905
940
|
#updateNodeLoadStateSymbol = Symbol ();
|
|
941
|
+
#updateNodePlaySymbol = Symbol ();
|
|
906
942
|
|
|
907
943
|
createNodeElement (type, parent, node, index)
|
|
908
944
|
{
|
|
@@ -1001,17 +1037,41 @@ module .exports = class OutlineView extends Interface
|
|
|
1001
1037
|
.text (cloneCount > 1 ? `[${cloneCount}]` : "")
|
|
1002
1038
|
.appendTo (name);
|
|
1003
1039
|
|
|
1004
|
-
//
|
|
1040
|
+
// Add buttons to name.
|
|
1005
1041
|
|
|
1006
|
-
|
|
1042
|
+
this .addNodeButtons (node, name);
|
|
1007
1043
|
|
|
1008
|
-
|
|
1044
|
+
// Append empty tree to enable expander.
|
|
1045
|
+
|
|
1046
|
+
if (!this .isInParents (parent, node))
|
|
1047
|
+
$("<ul><li></li></ul>") .appendTo (child);
|
|
1048
|
+
}
|
|
1049
|
+
else
|
|
1050
|
+
{
|
|
1051
|
+
$("<div></div>")
|
|
1052
|
+
.addClass ("name")
|
|
1053
|
+
.append ($("<span></span>") .addClass ("node-type-name") .text ("NULL"))
|
|
1054
|
+
.appendTo (child);
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
return child;
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
addNodeButtons (node, name)
|
|
1061
|
+
{
|
|
1062
|
+
// Add buttons to name.
|
|
1063
|
+
|
|
1064
|
+
const buttons = [ ];
|
|
1065
|
+
|
|
1066
|
+
if (!(node .getExecutionContext () .getOuterNode () instanceof X3D .X3DProtoDeclaration))
|
|
1067
|
+
{
|
|
1068
|
+
if (node .setHidden)
|
|
1009
1069
|
{
|
|
1010
1070
|
buttons .push ($("<span></span>")
|
|
1011
1071
|
.attr ("order", "0")
|
|
1072
|
+
.attr ("title", "Toggle visibility.")
|
|
1012
1073
|
.addClass (["toggle-visibility", "button", "material-symbols-outlined"])
|
|
1013
1074
|
.addClass (node .isHidden () ? "off" : "on")
|
|
1014
|
-
.attr ("title", "Toggle visibility.")
|
|
1015
1075
|
.text (node .isHidden () ? "visibility_off" : "visibility"));
|
|
1016
1076
|
}
|
|
1017
1077
|
|
|
@@ -1019,99 +1079,124 @@ module .exports = class OutlineView extends Interface
|
|
|
1019
1079
|
{
|
|
1020
1080
|
buttons .push ($("<span></span>")
|
|
1021
1081
|
.attr ("order", "1")
|
|
1082
|
+
.attr ("title", _("Toggle display tool."))
|
|
1022
1083
|
.addClass (["toggle-tool", "button", "material-symbols-outlined"])
|
|
1023
1084
|
.addClass (node .valueOf () === node ? "off" : "on")
|
|
1024
|
-
.attr ("title", _("Toggle display tool."))
|
|
1025
1085
|
.text ("build_circle"));
|
|
1026
1086
|
}
|
|
1087
|
+
}
|
|
1027
1088
|
|
|
1028
|
-
|
|
1089
|
+
for (const type of node .getType ())
|
|
1090
|
+
{
|
|
1091
|
+
switch (type)
|
|
1029
1092
|
{
|
|
1030
|
-
|
|
1093
|
+
case X3D .X3DConstants .X3DLayerNode:
|
|
1031
1094
|
{
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
.attr ("title", _("Activate layer."))
|
|
1039
|
-
.text ("check_circle"));
|
|
1095
|
+
buttons .push ($("<span></span>")
|
|
1096
|
+
.attr ("order", "2")
|
|
1097
|
+
.attr ("title", _("Activate layer."))
|
|
1098
|
+
.addClass (["activate-layer", "button", "material-symbols-outlined"])
|
|
1099
|
+
.addClass (this .browser .getActiveLayer () === node ? "green" : "off")
|
|
1100
|
+
.text ("check_circle"));
|
|
1040
1101
|
|
|
1102
|
+
continue;
|
|
1103
|
+
}
|
|
1104
|
+
case X3D .X3DConstants .X3DBindableNode:
|
|
1105
|
+
{
|
|
1106
|
+
if (node .getExecutionContext () .getOuterNode () instanceof X3D .X3DProtoDeclaration)
|
|
1041
1107
|
continue;
|
|
1042
|
-
}
|
|
1043
|
-
case X3D .X3DConstants .X3DBindableNode:
|
|
1044
|
-
{
|
|
1045
|
-
node ._isBound .addFieldCallback (this .#updateNodeBoundSymbol, this .updateNodeBound .bind (this, node));
|
|
1046
1108
|
|
|
1047
|
-
|
|
1048
|
-
.attr ("order", "3")
|
|
1049
|
-
.addClass (["bind-node", "button", "material-symbols-outlined"])
|
|
1050
|
-
.addClass (node ._isBound .getValue () ? "on" : "off")
|
|
1051
|
-
.attr ("title", _("Bind node."))
|
|
1052
|
-
.text (node ._isBound .getValue () ? "radio_button_checked" : "radio_button_unchecked"));
|
|
1109
|
+
node ._isBound .addFieldCallback (this .#updateNodeBoundSymbol, this .updateNodeBound .bind (this, node));
|
|
1053
1110
|
|
|
1111
|
+
buttons .push ($("<span></span>")
|
|
1112
|
+
.attr ("order", "3")
|
|
1113
|
+
.attr ("title", _("Bind node."))
|
|
1114
|
+
.addClass (["bind-node", "button", "material-symbols-outlined"])
|
|
1115
|
+
.addClass (node ._isBound .getValue () ? "on" : "off")
|
|
1116
|
+
.text (node ._isBound .getValue () ? "radio_button_checked" : "radio_button_unchecked"));
|
|
1117
|
+
|
|
1118
|
+
continue;
|
|
1119
|
+
}
|
|
1120
|
+
case X3D .X3DConstants .X3DTimeDependentNode:
|
|
1121
|
+
{
|
|
1122
|
+
if (node .getExecutionContext () !== this .executionContext)
|
|
1054
1123
|
continue;
|
|
1055
|
-
}
|
|
1056
|
-
case X3D .X3DConstants .X3DUrlObject:
|
|
1057
|
-
{
|
|
1058
|
-
if (node .getExecutionContext () .getOuterNode () instanceof X3D .X3DProtoDeclaration)
|
|
1059
|
-
{
|
|
1060
|
-
if (!node .getType () .includes (X3D .X3DConstants .Inline))
|
|
1061
|
-
continue;
|
|
1062
|
-
}
|
|
1063
1124
|
|
|
1064
|
-
|
|
1125
|
+
node ._enabled .addFieldCallback (this .#updateNodePlaySymbol, this .updateNodePlay .bind (this, node));
|
|
1126
|
+
node ._isActive .addFieldCallback (this .#updateNodePlaySymbol, this .updateNodePlay .bind (this, node));
|
|
1127
|
+
node ._isPaused .addFieldCallback (this .#updateNodePlaySymbol, this .updateNodePlay .bind (this, node));
|
|
1128
|
+
node ._loop .addFieldCallback (this .#updateNodePlaySymbol, this .updateNodePlay .bind (this, node));
|
|
1129
|
+
|
|
1130
|
+
buttons .push ($("<span></span>")
|
|
1131
|
+
.attr ("order", "4")
|
|
1132
|
+
.attr ("title", node ._isActive .getValue () && !node ._isPaused .getValue () ? _("Pause timer.") : _("Start timer."))
|
|
1133
|
+
.addClass (["play-node", "button", "material-icons"])
|
|
1134
|
+
.addClass (node ._isPaused .getValue () ? "on" : "off")
|
|
1135
|
+
.text (node ._isActive .getValue () ? "pause" : "play_arrow"));
|
|
1136
|
+
|
|
1137
|
+
buttons .push ($("<span></span>")
|
|
1138
|
+
.attr ("order", "5")
|
|
1139
|
+
.attr ("title", _("Stop timer."))
|
|
1140
|
+
.addClass (["stop-node", "button", "material-icons"])
|
|
1141
|
+
.addClass (node ._isActive .getValue () ? "on" : "off")
|
|
1142
|
+
.text ("stop"));
|
|
1143
|
+
|
|
1144
|
+
buttons .push ($("<span></span>")
|
|
1145
|
+
.attr ("order", "6")
|
|
1146
|
+
.attr ("title", _("Toggle loop."))
|
|
1147
|
+
.addClass (["loop-node", "button", "material-icons"])
|
|
1148
|
+
.addClass (node ._loop .getValue () ? "on" : "off")
|
|
1149
|
+
.text ("repeat"));
|
|
1150
|
+
|
|
1151
|
+
if (!node ._enabled .getValue ())
|
|
1152
|
+
buttons .slice (-3) .forEach (button => button .hide ());
|
|
1065
1153
|
|
|
1066
|
-
|
|
1154
|
+
continue;
|
|
1155
|
+
}
|
|
1156
|
+
case X3D .X3DConstants .X3DUrlObject:
|
|
1157
|
+
{
|
|
1158
|
+
if (node .getExecutionContext () .getOuterNode () instanceof X3D .X3DProtoDeclaration)
|
|
1159
|
+
{
|
|
1160
|
+
if (!node .getType () .includes (X3D .X3DConstants .Inline))
|
|
1161
|
+
continue;
|
|
1162
|
+
}
|
|
1067
1163
|
|
|
1068
|
-
|
|
1069
|
-
.attr ("order", "4")
|
|
1070
|
-
.addClass (["reload-node", "button", "material-symbols-outlined", className])
|
|
1071
|
-
.attr ("title", "Load now.")
|
|
1072
|
-
.text ("autorenew"));
|
|
1164
|
+
const [className] = this .getLoadState (node .checkLoadState (), node .getTypeName ());
|
|
1073
1165
|
|
|
1074
|
-
|
|
1075
|
-
}
|
|
1076
|
-
case X3D .X3DConstants .AudioClip:
|
|
1077
|
-
case X3D .X3DConstants .BufferAudioSource:
|
|
1078
|
-
case X3D .X3DConstants .X3DMaterialNode:
|
|
1079
|
-
case X3D .X3DConstants .X3DSingleTextureNode:
|
|
1080
|
-
{
|
|
1081
|
-
buttons .push ($("<span></span>")
|
|
1082
|
-
.attr ("order", "5")
|
|
1083
|
-
.addClass (["show-preview", "button", "material-symbols-outlined", "off"])
|
|
1084
|
-
.css ("top", "2px")
|
|
1085
|
-
.attr ("title", _("Show preview."))
|
|
1086
|
-
.text ("preview"));
|
|
1166
|
+
node .getLoadState () .addFieldCallback (this .#updateNodeLoadStateSymbol, this .updateNodeLoadState .bind (this, node));
|
|
1087
1167
|
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1168
|
+
buttons .push ($("<span></span>")
|
|
1169
|
+
.attr ("order", "7")
|
|
1170
|
+
.attr ("title", "Load now.")
|
|
1171
|
+
.addClass (["reload-node", "button", "material-symbols-outlined", className])
|
|
1172
|
+
.text ("autorenew"));
|
|
1092
1173
|
|
|
1093
|
-
|
|
1174
|
+
continue;
|
|
1175
|
+
}
|
|
1176
|
+
case X3D .X3DConstants .AudioClip:
|
|
1177
|
+
case X3D .X3DConstants .BufferAudioSource:
|
|
1178
|
+
case X3D .X3DConstants .X3DMaterialNode:
|
|
1179
|
+
case X3D .X3DConstants .X3DSingleTextureNode:
|
|
1180
|
+
{
|
|
1181
|
+
buttons .push ($("<span></span>")
|
|
1182
|
+
.attr ("order", "8")
|
|
1183
|
+
.attr ("title", _("Show preview."))
|
|
1184
|
+
.addClass (["show-preview", "button", "material-symbols-outlined", "off"])
|
|
1185
|
+
.css ("top", "2px")
|
|
1186
|
+
.text ("preview"));
|
|
1094
1187
|
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
name .append (document .createTextNode (" "));
|
|
1098
|
-
name .append (button);
|
|
1188
|
+
continue;
|
|
1189
|
+
}
|
|
1099
1190
|
}
|
|
1191
|
+
}
|
|
1100
1192
|
|
|
1101
|
-
|
|
1193
|
+
buttons .sort ((a, b) => a .attr ("order") - b .attr ("order"))
|
|
1102
1194
|
|
|
1103
|
-
|
|
1104
|
-
$("<ul><li></li></ul>") .appendTo (child);
|
|
1105
|
-
}
|
|
1106
|
-
else
|
|
1195
|
+
for (const button of buttons)
|
|
1107
1196
|
{
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
.append ($("<span></span>") .addClass ("node-type-name") .text ("NULL"))
|
|
1111
|
-
.appendTo (child);
|
|
1197
|
+
name .append (document .createTextNode (" "));
|
|
1198
|
+
name .append (button);
|
|
1112
1199
|
}
|
|
1113
|
-
|
|
1114
|
-
return child;
|
|
1115
1200
|
}
|
|
1116
1201
|
|
|
1117
1202
|
updateNodeTypeName (node)
|
|
@@ -1162,7 +1247,7 @@ module .exports = class OutlineView extends Interface
|
|
|
1162
1247
|
if (!this .browser .getActiveLayer ())
|
|
1163
1248
|
return;
|
|
1164
1249
|
|
|
1165
|
-
this .sceneGraph .find (`.node[node-id=${this .browser .getActiveLayer () .getId ()}]`)
|
|
1250
|
+
this .sceneGraph .find (`.node[node-id=${this .browser .getActiveLayer () .getId ()}], .exported-node[node-id=${this .browser .getActiveLayer () .getId ()}]`)
|
|
1166
1251
|
.find ("> .item .activate-layer")
|
|
1167
1252
|
.removeClass ("off")
|
|
1168
1253
|
.addClass ("green");
|
|
@@ -1171,7 +1256,7 @@ module .exports = class OutlineView extends Interface
|
|
|
1171
1256
|
updateNodeBound (node)
|
|
1172
1257
|
{
|
|
1173
1258
|
this .sceneGraph
|
|
1174
|
-
.find (`.node[node-id=${node .getId ()}]`)
|
|
1259
|
+
.find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
|
|
1175
1260
|
.find ("> .item .bind-node")
|
|
1176
1261
|
.removeClass (["on", "off"])
|
|
1177
1262
|
.addClass (node ._isBound .getValue () ? "on" : "off")
|
|
@@ -1183,12 +1268,45 @@ module .exports = class OutlineView extends Interface
|
|
|
1183
1268
|
const [className] = this .getLoadState (node .checkLoadState (), node .getTypeName ());
|
|
1184
1269
|
|
|
1185
1270
|
this .sceneGraph
|
|
1186
|
-
.find (`.node[node-id=${node .getId ()}]
|
|
1271
|
+
.find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}], .externproto[node-id=${node .getId ()}]`)
|
|
1187
1272
|
.find ("> .item .reload-node")
|
|
1188
1273
|
.removeClass (["not-started-state", "in-progress-state", "complete-state", "failed-state"])
|
|
1189
1274
|
.addClass (className);
|
|
1190
1275
|
}
|
|
1191
1276
|
|
|
1277
|
+
updateNodePlay (node)
|
|
1278
|
+
{
|
|
1279
|
+
const buttons = [ ];
|
|
1280
|
+
|
|
1281
|
+
buttons .push (this .sceneGraph
|
|
1282
|
+
.find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
|
|
1283
|
+
.find ("> .item .play-node")
|
|
1284
|
+
.removeClass (["on", "off"])
|
|
1285
|
+
.addClass (node ._isPaused .getValue () ? "on" : "off")
|
|
1286
|
+
.attr ("title", node ._isActive .getValue () && !node ._isPaused .getValue () ? _("Pause timer.") : _("Start timer."))
|
|
1287
|
+
.text (node ._isActive .getValue () ? "pause" : "play_arrow"));
|
|
1288
|
+
|
|
1289
|
+
buttons .push (this .sceneGraph
|
|
1290
|
+
.find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
|
|
1291
|
+
.find ("> .item .stop-node")
|
|
1292
|
+
.removeClass (["on", "off"])
|
|
1293
|
+
.addClass (node ._isActive .getValue () ? "on" : "off"));
|
|
1294
|
+
|
|
1295
|
+
buttons .push (this .sceneGraph
|
|
1296
|
+
.find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
|
|
1297
|
+
.find ("> .item .loop-node")
|
|
1298
|
+
.removeClass (["on", "off"])
|
|
1299
|
+
.addClass (node ._loop .getValue () ? "on" : "off"));
|
|
1300
|
+
|
|
1301
|
+
if (node ._enabled .getValue ())
|
|
1302
|
+
buttons .slice (-3) .forEach (button => button .show ());
|
|
1303
|
+
else
|
|
1304
|
+
buttons .slice (-3) .forEach (button => button .hide ());
|
|
1305
|
+
|
|
1306
|
+
if (!node ._isActive .getValue ())
|
|
1307
|
+
node ._isEvenLive = false;
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1192
1310
|
isInParents (parent, node)
|
|
1193
1311
|
{
|
|
1194
1312
|
return parent .closest (".node[node-id=" + node .getId () + "]", this .sceneGraph) .length;
|
|
@@ -1246,6 +1364,10 @@ module .exports = class OutlineView extends Interface
|
|
|
1246
1364
|
.append ($("<span></span>") .addClass ("as-name") .text (importedNode .getImportedName ()));
|
|
1247
1365
|
}
|
|
1248
1366
|
|
|
1367
|
+
// Add buttons to name.
|
|
1368
|
+
|
|
1369
|
+
this .addNodeButtons (importedNode .getExportedNode (), name);
|
|
1370
|
+
|
|
1249
1371
|
// Append empty tree to enable expander.
|
|
1250
1372
|
|
|
1251
1373
|
$("<ul><li></li></ul>") .appendTo (child);
|
|
@@ -1346,6 +1468,10 @@ module .exports = class OutlineView extends Interface
|
|
|
1346
1468
|
if (exportedNode .getExportedName () === node .getName ())
|
|
1347
1469
|
name .find (".node-name") .nextAll () .hide ();
|
|
1348
1470
|
|
|
1471
|
+
// Add buttons to name.
|
|
1472
|
+
|
|
1473
|
+
this .addNodeButtons (node, name);
|
|
1474
|
+
|
|
1349
1475
|
// Append empty tree to enable expander.
|
|
1350
1476
|
|
|
1351
1477
|
$("<ul><li></li></ul>") .appendTo (child);
|
|
@@ -1404,58 +1530,62 @@ module .exports = class OutlineView extends Interface
|
|
|
1404
1530
|
|
|
1405
1531
|
// Color
|
|
1406
1532
|
|
|
1407
|
-
|
|
1533
|
+
if (field .isInitializable ())
|
|
1408
1534
|
{
|
|
1409
|
-
|
|
1535
|
+
switch (field .getType ())
|
|
1410
1536
|
{
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
break;
|
|
1419
|
-
}
|
|
1420
|
-
case X3D .X3DConstants .SFColor:
|
|
1421
|
-
case X3D .X3DConstants .SFColorRGBA:
|
|
1422
|
-
{
|
|
1423
|
-
$("<div></div>")
|
|
1424
|
-
.addClass (["color-button", "field-button"])
|
|
1425
|
-
.attr ("title", _("Open color picker."))
|
|
1426
|
-
.css ("background-color", this .getColorFromField (node, field))
|
|
1427
|
-
.appendTo (child);
|
|
1537
|
+
case X3D .X3DConstants .SFBool:
|
|
1538
|
+
{
|
|
1539
|
+
$("<img></img>")
|
|
1540
|
+
.addClass (["boolean-button", "field-button", "button",])
|
|
1541
|
+
.attr ("src", `../images/OutlineEditor/Values/${field .getValue () ? "TRUE" : "FALSE"}.svg`)
|
|
1542
|
+
.attr ("title", _("Toggle value."))
|
|
1543
|
+
.appendTo (child);
|
|
1428
1544
|
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1545
|
+
field .addFieldCallback (this .#fieldButtonSymbol, this .updateBoolean .bind (this, parent, node, field));
|
|
1546
|
+
break;
|
|
1547
|
+
}
|
|
1548
|
+
case X3D .X3DConstants .SFColor:
|
|
1549
|
+
case X3D .X3DConstants .SFColorRGBA:
|
|
1550
|
+
{
|
|
1551
|
+
$("<div></div>")
|
|
1552
|
+
.addClass (["color-button", "field-button", "button",])
|
|
1553
|
+
.attr ("title", _("Open color picker."))
|
|
1554
|
+
.css ("background-color", this .getColorFromField (node, field))
|
|
1555
|
+
.appendTo (child);
|
|
1439
1556
|
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
if (OutlineView .urlFields .has (field .getName ()) && field .isInitializable ())
|
|
1557
|
+
field .addFieldCallback (this .#fieldButtonSymbol, this .updateColor .bind (this, parent, node, field));
|
|
1558
|
+
break;
|
|
1559
|
+
}
|
|
1560
|
+
case X3D .X3DConstants .SFTime:
|
|
1445
1561
|
{
|
|
1446
|
-
$("<
|
|
1447
|
-
.addClass (["
|
|
1448
|
-
.attr ("
|
|
1449
|
-
.
|
|
1562
|
+
$("<img></img>")
|
|
1563
|
+
.addClass (["time-button", "field-button", "button",])
|
|
1564
|
+
.attr ("src", `../images/OutlineEditor/Values/Bell.svg`)
|
|
1565
|
+
.attr ("title", _("Set current time."))
|
|
1450
1566
|
.appendTo (child);
|
|
1567
|
+
|
|
1568
|
+
break;
|
|
1451
1569
|
}
|
|
1570
|
+
case X3D .X3DConstants .MFString:
|
|
1571
|
+
{
|
|
1572
|
+
if (OutlineView .urlFields .has (field .getName ()) && field .isInitializable ())
|
|
1573
|
+
{
|
|
1574
|
+
$("<span></span>")
|
|
1575
|
+
.addClass (["url-button", "field-button", "button", "material-symbols-outlined"])
|
|
1576
|
+
.attr ("title", _("Add URLs."))
|
|
1577
|
+
.text ("add_circle")
|
|
1578
|
+
.appendTo (child);
|
|
1579
|
+
}
|
|
1452
1580
|
|
|
1453
|
-
|
|
1581
|
+
break;
|
|
1582
|
+
}
|
|
1583
|
+
default:
|
|
1584
|
+
break;
|
|
1454
1585
|
}
|
|
1455
|
-
default:
|
|
1456
|
-
break;
|
|
1457
1586
|
}
|
|
1458
1587
|
|
|
1588
|
+
|
|
1459
1589
|
// Access type
|
|
1460
1590
|
|
|
1461
1591
|
const accessType = $("<div></div>")
|
|
@@ -1985,52 +2115,10 @@ module .exports = class OutlineView extends Interface
|
|
|
1985
2115
|
.wrapInner ("<div class=\"item no-select\"/>")
|
|
1986
2116
|
.find (".item") .append ("<div class=\"route-curves-wrapper\"><canvas class=\"route-curves\"></canvas></div>");
|
|
1987
2117
|
|
|
1988
|
-
|
|
1989
|
-
{
|
|
1990
|
-
child .find (".node:not([node-id=NULL]) > .item")
|
|
1991
|
-
.attr ("draggable", "true")
|
|
1992
|
-
.on ("dragstart", this .onDragStartNode .bind (this));
|
|
1993
|
-
}
|
|
1994
|
-
|
|
1995
|
-
child .find (".node .name, .node .icon")
|
|
1996
|
-
.on ("click", this .selectNode .bind (this));
|
|
2118
|
+
// Connect actions.
|
|
1997
2119
|
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
child .find (".toggle-visibility")
|
|
2002
|
-
.on ("click", this .toggleVisibility .bind (this));
|
|
2003
|
-
|
|
2004
|
-
child .find (".toggle-tool")
|
|
2005
|
-
.on ("click", this .toggleTool .bind (this));
|
|
2006
|
-
|
|
2007
|
-
child .find (".activate-layer")
|
|
2008
|
-
.on ("click", this .activateLayer .bind (this));
|
|
2009
|
-
|
|
2010
|
-
child .find (".bind-node")
|
|
2011
|
-
.on ("click", this .bindNode .bind (this));
|
|
2012
|
-
|
|
2013
|
-
child .find (".reload-node")
|
|
2014
|
-
.on ("click", this .reloadNode .bind (this));
|
|
2015
|
-
|
|
2016
|
-
child .find (".show-preview")
|
|
2017
|
-
.on ("click", this .showPreview .bind (this));
|
|
2018
|
-
|
|
2019
|
-
child .find ("area.input-selector")
|
|
2020
|
-
.on ("mouseenter", this .hoverInSingleConnector .bind (this, "input"))
|
|
2021
|
-
.on ("mouseleave", this .hoverOutSingleConnector .bind (this, "input"))
|
|
2022
|
-
.on ("click", this .selectSingleConnector .bind (this, "input"));
|
|
2023
|
-
|
|
2024
|
-
child .find ("area.output-selector")
|
|
2025
|
-
.on ("mouseenter", this .hoverInSingleConnector .bind (this, "output"))
|
|
2026
|
-
.on ("mouseleave", this .hoverOutSingleConnector .bind (this, "output"))
|
|
2027
|
-
.on ("click", this .selectSingleConnector .bind (this, "output"));
|
|
2028
|
-
|
|
2029
|
-
child .find ("area.input-routes-selector")
|
|
2030
|
-
.on ("click", this .selectSingleRoute .bind (this, "input"));
|
|
2031
|
-
|
|
2032
|
-
child .find ("area.output-routes-selector")
|
|
2033
|
-
.on ("click", this .selectSingleRoute .bind (this, "output"));
|
|
2120
|
+
this .connectNodeActions (parent, child);
|
|
2121
|
+
this .connectFieldActions (child);
|
|
2034
2122
|
|
|
2035
2123
|
// Expand children.
|
|
2036
2124
|
|
|
@@ -2108,52 +2196,10 @@ module .exports = class OutlineView extends Interface
|
|
|
2108
2196
|
.wrapInner ("<div class=\"item no-select\"/>")
|
|
2109
2197
|
.find (".item") .append ("<div class=\"route-curves-wrapper\"><canvas class=\"route-curves\"></canvas></div>");
|
|
2110
2198
|
|
|
2111
|
-
|
|
2112
|
-
{
|
|
2113
|
-
child .find (".node:not([node-id=NULL]) > .item")
|
|
2114
|
-
.attr ("draggable", "true")
|
|
2115
|
-
.on ("dragstart", this .onDragStartNode .bind (this));
|
|
2116
|
-
}
|
|
2117
|
-
|
|
2118
|
-
child .find (".node .name, .node .icon")
|
|
2119
|
-
.on ("click", this .selectNode .bind (this));
|
|
2199
|
+
// Connect actions.
|
|
2120
2200
|
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
child .find (".toggle-visibility")
|
|
2125
|
-
.on ("click", this .toggleVisibility .bind (this));
|
|
2126
|
-
|
|
2127
|
-
child .find (".toggle-tool")
|
|
2128
|
-
.on ("click", this .toggleTool .bind (this));
|
|
2129
|
-
|
|
2130
|
-
child .find (".activate-layer")
|
|
2131
|
-
.on ("click", this .activateLayer .bind (this));
|
|
2132
|
-
|
|
2133
|
-
child .find (".bind-node")
|
|
2134
|
-
.on ("click", this .bindNode .bind (this))
|
|
2135
|
-
|
|
2136
|
-
child .find (".reload-node")
|
|
2137
|
-
.on ("click", this .reloadNode .bind (this));
|
|
2138
|
-
|
|
2139
|
-
child .find (".show-preview")
|
|
2140
|
-
.on ("click", this .showPreview .bind (this));
|
|
2141
|
-
|
|
2142
|
-
child .find ("area.input-selector")
|
|
2143
|
-
.on ("mouseenter", this .hoverInSingleConnector .bind (this, "input"))
|
|
2144
|
-
.on ("mouseleave", this .hoverOutSingleConnector .bind (this, "input"))
|
|
2145
|
-
.on ("click", this .selectSingleConnector .bind (this, "input"));
|
|
2146
|
-
|
|
2147
|
-
child .find ("area.output-selector")
|
|
2148
|
-
.on ("mouseenter", this .hoverInSingleConnector .bind (this, "output"))
|
|
2149
|
-
.on ("mouseleave", this .hoverOutSingleConnector .bind (this, "output"))
|
|
2150
|
-
.on ("click", this .selectSingleConnector .bind (this, "output"));
|
|
2151
|
-
|
|
2152
|
-
child .find ("area.input-routes-selector")
|
|
2153
|
-
.on ("click", this .selectSingleRoute .bind (this, "input"));
|
|
2154
|
-
|
|
2155
|
-
child .find ("area.output-routes-selector")
|
|
2156
|
-
.on ("click", this .selectSingleRoute .bind (this, "output"));
|
|
2201
|
+
this .connectNodeActions (parent, child);
|
|
2202
|
+
this .connectFieldActions (child);
|
|
2157
2203
|
|
|
2158
2204
|
// Expand children.
|
|
2159
2205
|
|
|
@@ -2246,21 +2292,7 @@ module .exports = class OutlineView extends Interface
|
|
|
2246
2292
|
.wrapInner ("<div class=\"item no-select\"/>")
|
|
2247
2293
|
.find (".item") .append ("<div class=\"route-curves-wrapper\"><canvas class=\"route-curves\"></canvas></div>");
|
|
2248
2294
|
|
|
2249
|
-
|
|
2250
|
-
.on ("mouseenter", this .hoverInSingleConnector .bind (this, "input"))
|
|
2251
|
-
.on ("mouseleave", this .hoverOutSingleConnector .bind (this, "input"))
|
|
2252
|
-
.on ("click", this .selectSingleConnector .bind (this, "input"));
|
|
2253
|
-
|
|
2254
|
-
child .find ("area.output-selector")
|
|
2255
|
-
.on ("mouseenter", this .hoverInSingleConnector .bind (this, "output"))
|
|
2256
|
-
.on ("mouseleave", this .hoverOutSingleConnector .bind (this, "output"))
|
|
2257
|
-
.on ("click", this .selectSingleConnector .bind (this, "output"));
|
|
2258
|
-
|
|
2259
|
-
child .find ("area.input-routes-selector")
|
|
2260
|
-
.on ("click", this .selectSingleRoute .bind (this, "input"));
|
|
2261
|
-
|
|
2262
|
-
child .find ("area.output-routes-selector")
|
|
2263
|
-
.on ("click", this .selectSingleRoute .bind (this, "output"));
|
|
2295
|
+
this .connectFieldActions (child);
|
|
2264
2296
|
|
|
2265
2297
|
// Input
|
|
2266
2298
|
|
|
@@ -2368,21 +2400,7 @@ module .exports = class OutlineView extends Interface
|
|
|
2368
2400
|
.wrapInner ("<div class=\"item no-select\"/>")
|
|
2369
2401
|
.find (".item") .append ("<div class=\"route-curves-wrapper\"><canvas class=\"route-curves\"></canvas></div>")
|
|
2370
2402
|
|
|
2371
|
-
|
|
2372
|
-
.on ("mouseenter", this .hoverInSingleConnector .bind (this, "input"))
|
|
2373
|
-
.on ("mouseleave", this .hoverOutSingleConnector .bind (this, "input"))
|
|
2374
|
-
.on ("click", this .selectSingleConnector .bind (this, "input"))
|
|
2375
|
-
|
|
2376
|
-
child .find ("area.output-selector")
|
|
2377
|
-
.on ("mouseenter", this .hoverInSingleConnector .bind (this, "output"))
|
|
2378
|
-
.on ("mouseleave", this .hoverOutSingleConnector .bind (this, "output"))
|
|
2379
|
-
.on ("click", this .selectSingleConnector .bind (this, "output"))
|
|
2380
|
-
|
|
2381
|
-
child .find ("area.input-routes-selector")
|
|
2382
|
-
.on ("click", this .selectSingleRoute .bind (this, "input"))
|
|
2383
|
-
|
|
2384
|
-
child .find ("area.output-routes-selector")
|
|
2385
|
-
.on ("click", this .selectSingleRoute .bind (this, "output"))
|
|
2403
|
+
this .connectFieldActions (child);
|
|
2386
2404
|
|
|
2387
2405
|
// Textarea
|
|
2388
2406
|
|
|
@@ -2904,6 +2922,14 @@ module .exports = class OutlineView extends Interface
|
|
|
2904
2922
|
{
|
|
2905
2923
|
switch (type)
|
|
2906
2924
|
{
|
|
2925
|
+
case X3D .X3DConstants .X3DTimeDependentNode:
|
|
2926
|
+
{
|
|
2927
|
+
node ._enabled .removeFieldCallback (this .#updateNodePlaySymbol);
|
|
2928
|
+
node ._isActive .removeFieldCallback (this .#updateNodePlaySymbol);
|
|
2929
|
+
node ._isPaused .removeFieldCallback (this .#updateNodePlaySymbol);
|
|
2930
|
+
node ._loop .removeFieldCallback (this .#updateNodePlaySymbol);
|
|
2931
|
+
continue;
|
|
2932
|
+
}
|
|
2907
2933
|
case X3D .X3DConstants .X3DBindableNode:
|
|
2908
2934
|
{
|
|
2909
2935
|
node ._isBound .removeFieldCallback (this .#updateNodeBoundSymbol);
|
|
@@ -2987,7 +3013,7 @@ module .exports = class OutlineView extends Interface
|
|
|
2987
3013
|
const
|
|
2988
3014
|
icon = $(event .currentTarget) ,
|
|
2989
3015
|
item = icon .closest (".item", this .sceneGraph),
|
|
2990
|
-
element = icon .closest (".node", this .sceneGraph),
|
|
3016
|
+
element = icon .closest (".node, .exported-node", this .sceneGraph),
|
|
2991
3017
|
node = this .objects .get (parseInt (element .attr ("node-id"))),
|
|
2992
3018
|
on = !!item .attr ("data-hasqtip");
|
|
2993
3019
|
|
|
@@ -3058,7 +3084,7 @@ module .exports = class OutlineView extends Interface
|
|
|
3058
3084
|
{
|
|
3059
3085
|
const
|
|
3060
3086
|
target = $(event .target),
|
|
3061
|
-
element = target .closest (".node", this .sceneGraph),
|
|
3087
|
+
element = target .closest (".node, .exported-node", this .sceneGraph),
|
|
3062
3088
|
node = this .getNode (element),
|
|
3063
3089
|
hidden = !node .isHidden ();
|
|
3064
3090
|
|
|
@@ -3067,7 +3093,7 @@ module .exports = class OutlineView extends Interface
|
|
|
3067
3093
|
|
|
3068
3094
|
node .setHidden (hidden);
|
|
3069
3095
|
|
|
3070
|
-
this .sceneGraph .find (`.node[node-id=${node .getId ()}]`)
|
|
3096
|
+
this .sceneGraph .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
|
|
3071
3097
|
.find ("> .item .toggle-visibility")
|
|
3072
3098
|
.removeClass (["on", "off"])
|
|
3073
3099
|
.addClass (hidden ? "off" : "on")
|
|
@@ -3078,7 +3104,7 @@ module .exports = class OutlineView extends Interface
|
|
|
3078
3104
|
{
|
|
3079
3105
|
const
|
|
3080
3106
|
target = $(event .target),
|
|
3081
|
-
element = target .closest (".node", this .sceneGraph),
|
|
3107
|
+
element = target .closest (".node, .exported-node", this .sceneGraph),
|
|
3082
3108
|
node = this .getNode (element),
|
|
3083
3109
|
tool = node .getTool ();
|
|
3084
3110
|
|
|
@@ -3097,7 +3123,7 @@ module .exports = class OutlineView extends Interface
|
|
|
3097
3123
|
|
|
3098
3124
|
node .setUserData (_changing, true);
|
|
3099
3125
|
|
|
3100
|
-
this .sceneGraph .find (`.node[node-id=${node .getId ()}] > .item .toggle-tool`)
|
|
3126
|
+
this .sceneGraph .find (`.node[node-id=${node .getId ()}] > .item .toggle-tool, .exported-node[node-id=${node .getId ()}] > .item .toggle-tool`)
|
|
3101
3127
|
.removeClass (["on", "off"])
|
|
3102
3128
|
.addClass (tool ? "off" : "on");
|
|
3103
3129
|
}
|
|
@@ -3108,7 +3134,7 @@ module .exports = class OutlineView extends Interface
|
|
|
3108
3134
|
{
|
|
3109
3135
|
const
|
|
3110
3136
|
target = $(event .target),
|
|
3111
|
-
element = target .closest (".node", this .sceneGraph),
|
|
3137
|
+
element = target .closest (".node, .exported-node", this .sceneGraph),
|
|
3112
3138
|
node = this .getNode (element);
|
|
3113
3139
|
|
|
3114
3140
|
event .preventDefault ();
|
|
@@ -3117,11 +3143,17 @@ module .exports = class OutlineView extends Interface
|
|
|
3117
3143
|
node ._set_bind = true;
|
|
3118
3144
|
}
|
|
3119
3145
|
|
|
3146
|
+
playNode (event) { }
|
|
3147
|
+
|
|
3148
|
+
stopNode (event) { }
|
|
3149
|
+
|
|
3150
|
+
loopNode (event) { }
|
|
3151
|
+
|
|
3120
3152
|
reloadNode (event)
|
|
3121
3153
|
{
|
|
3122
3154
|
const
|
|
3123
3155
|
target = $(event .target),
|
|
3124
|
-
element = target .closest (".node, .externproto", this .sceneGraph),
|
|
3156
|
+
element = target .closest (".node, .exported-node, .externproto", this .sceneGraph),
|
|
3125
3157
|
item = target .closest (".item"),
|
|
3126
3158
|
node = this .getNode (element);
|
|
3127
3159
|
|
|
@@ -3156,7 +3188,7 @@ module .exports = class OutlineView extends Interface
|
|
|
3156
3188
|
|
|
3157
3189
|
node .setHidden (node .getType () .includes (X3D .X3DConstants .X3DShapeNode));
|
|
3158
3190
|
|
|
3159
|
-
this .sceneGraph .find (`.node[node-id=${node .getId ()}]`)
|
|
3191
|
+
this .sceneGraph .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
|
|
3160
3192
|
.find ("> .item .toggle-visibility")
|
|
3161
3193
|
.removeClass (["on", "off"])
|
|
3162
3194
|
.addClass (node .isHidden () ? "off" : "on")
|
|
@@ -3182,7 +3214,7 @@ module .exports = class OutlineView extends Interface
|
|
|
3182
3214
|
|
|
3183
3215
|
node .setHidden (false);
|
|
3184
3216
|
|
|
3185
|
-
this .sceneGraph .find (`.node[node-id=${node .getId ()}]`)
|
|
3217
|
+
this .sceneGraph .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
|
|
3186
3218
|
.find ("> .item .toggle-visibility")
|
|
3187
3219
|
.removeClass ("off")
|
|
3188
3220
|
.addClass ("on")
|
|
@@ -3206,7 +3238,7 @@ module .exports = class OutlineView extends Interface
|
|
|
3206
3238
|
|
|
3207
3239
|
node .setHidden (false);
|
|
3208
3240
|
|
|
3209
|
-
this .sceneGraph .find (`.node[node-id=${node .getId ()}]`)
|
|
3241
|
+
this .sceneGraph .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
|
|
3210
3242
|
.find ("> .item .toggle-visibility")
|
|
3211
3243
|
.removeClass ("off")
|
|
3212
3244
|
.addClass ("on")
|
|
@@ -3228,7 +3260,7 @@ module .exports = class OutlineView extends Interface
|
|
|
3228
3260
|
|
|
3229
3261
|
node .setHidden (false);
|
|
3230
3262
|
|
|
3231
|
-
this .sceneGraph .find (`.node[node-id=${node .getId ()}]`)
|
|
3263
|
+
this .sceneGraph .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
|
|
3232
3264
|
.find ("> .item .toggle-visibility")
|
|
3233
3265
|
.removeClass ("off")
|
|
3234
3266
|
.addClass ("on")
|
package/src/Undo/Editor.js
CHANGED
package/src/assets/X3DUOM.xml
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<!-- X3D Unified Object Model (X3DUOM) X3dUnifiedObjectModel-4.0.xml -->
|
|
3
3
|
<!-- Online at https://www.web3d.org/specifications/X3dUnifiedObjectModel-4.0.xml -->
|
|
4
4
|
<!-- This file contains a listing of all abstract and concrete nodes in version 4.0 of X3D -->
|
|
5
|
-
<!-- Generated 2024-
|
|
5
|
+
<!-- Generated 2024-12-10-08:00 12:33:23.8336395-08:00 -->
|
|
6
6
|
<X3dUnifiedObjectModel xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
|
|
7
7
|
version="4.0"
|
|
8
8
|
xsd:noNamespaceSchemaLocation="X3dUnifiedObjectModel.xsd">
|
|
@@ -9301,6 +9301,10 @@
|
|
|
9301
9301
|
accessType="inputOutput"
|
|
9302
9302
|
default="NULL"
|
|
9303
9303
|
acceptableNodeTypes="X3DTexture2DNode"/>
|
|
9304
|
+
<field name="upVector"
|
|
9305
|
+
type="SFVec3f"
|
|
9306
|
+
accessType="inputOutput"
|
|
9307
|
+
default="0 1 0"/>
|
|
9304
9308
|
<field name="DEF"
|
|
9305
9309
|
type="SFString"
|
|
9306
9310
|
accessType="inputOutput"
|
|
@@ -10434,7 +10438,8 @@
|
|
|
10434
10438
|
type="SFNode"
|
|
10435
10439
|
accessType="inputOutput"
|
|
10436
10440
|
default="NULL"
|
|
10437
|
-
acceptableNodeTypes="X3DMaterialNode"
|
|
10441
|
+
acceptableNodeTypes="X3DMaterialNode"
|
|
10442
|
+
description="Single contained Material, PhysicalMaterial or UnlitMaterial node that can specify visual attributes for lighting response (color types, transparency, etc."/>
|
|
10438
10443
|
<field name="fillProperties"
|
|
10439
10444
|
type="SFNode"
|
|
10440
10445
|
accessType="inputOutput"
|
|
@@ -10462,7 +10467,7 @@
|
|
|
10462
10467
|
accessType="inputOutput"
|
|
10463
10468
|
default="NULL"
|
|
10464
10469
|
acceptableNodeTypes="X3DMaterialNode"
|
|
10465
|
-
description="Single contained Material node that can specify visual attributes for lighting response (color types, transparency, etc."/>
|
|
10470
|
+
description="Single contained Material, PhysicalMaterial, TwoSidedMaterial (deprecated), or UnlitMaterial node that can specify visual attributes for lighting response (color types, transparency, etc."/>
|
|
10466
10471
|
<field name="metadata"
|
|
10467
10472
|
type="SFNode"
|
|
10468
10473
|
accessType="inputOutput"
|
|
@@ -24795,7 +24800,7 @@
|
|
|
24795
24800
|
type="MFInt32"
|
|
24796
24801
|
accessType="initializeOnly"
|
|
24797
24802
|
minInclusive="-1"
|
|
24798
|
-
description="colorIndex values define the order in which Color|ColorRGBA values are applied to polygons (or vertices)."/>
|
|
24803
|
+
description="colorIndex values define the order in which Color|ColorRGBA values are applied to polygons (or vertices), interspersed by -1 if colorlPerVertex=true."/>
|
|
24799
24804
|
<field name="colorPerVertex"
|
|
24800
24805
|
type="SFBool"
|
|
24801
24806
|
accessType="initializeOnly"
|
|
@@ -24860,7 +24865,7 @@
|
|
|
24860
24865
|
type="MFInt32"
|
|
24861
24866
|
accessType="initializeOnly"
|
|
24862
24867
|
minInclusive="-1"
|
|
24863
|
-
description="normalIndex values define the order in which normal vectors are applied to polygons (or vertices).">
|
|
24868
|
+
description="normalIndex values define the order in which normal vectors are applied to polygons (or vertices), interspersed by -1 if normalPerVertex=true.">
|
|
24864
24869
|
<componentInfo name="Geometry3D" level="4"/>
|
|
24865
24870
|
</field>
|
|
24866
24871
|
<field name="normalPerVertex"
|
|
@@ -24873,7 +24878,7 @@
|
|
|
24873
24878
|
type="MFInt32"
|
|
24874
24879
|
accessType="inputOnly"
|
|
24875
24880
|
minInclusive="-1"
|
|
24876
|
-
description="colorIndex values define the order in which Color|ColorRGBA values are applied to polygons (or vertices).">
|
|
24881
|
+
description="colorIndex values define the order in which Color|ColorRGBA values are applied to polygons (or vertices), interspersed by -1 if colorlPerVertex=true.">
|
|
24877
24882
|
<componentInfo name="Geometry3D" level="4"/>
|
|
24878
24883
|
</field>
|
|
24879
24884
|
<field name="set_coordIndex"
|
|
@@ -24885,7 +24890,7 @@
|
|
|
24885
24890
|
type="MFInt32"
|
|
24886
24891
|
accessType="inputOnly"
|
|
24887
24892
|
minInclusive="-1"
|
|
24888
|
-
description="normalIndex values define the order in which normal vectors are applied to polygons (or vertices).">
|
|
24893
|
+
description="normalIndex values define the order in which normal vectors are applied to polygons (or vertices), interspersed by -1 if normalPerVertex=true.">
|
|
24889
24894
|
<componentInfo name="Geometry3D" level="4"/>
|
|
24890
24895
|
</field>
|
|
24891
24896
|
<field name="set_texCoordIndex"
|
|
@@ -24969,7 +24974,7 @@
|
|
|
24969
24974
|
type="MFInt32"
|
|
24970
24975
|
accessType="initializeOnly"
|
|
24971
24976
|
minInclusive="-1"
|
|
24972
|
-
description="colorIndex values define the order in which Color|ColorRGBA values are applied to polygons (or vertices)."/>
|
|
24977
|
+
description="colorIndex values define the order in which Color|ColorRGBA values are applied to polygons (or vertices), interspersed by -1 if colorlPerVertex=true."/>
|
|
24973
24978
|
<field name="colorPerVertex"
|
|
24974
24979
|
type="SFBool"
|
|
24975
24980
|
accessType="initializeOnly"
|
|
@@ -25015,7 +25020,7 @@
|
|
|
25015
25020
|
type="MFInt32"
|
|
25016
25021
|
accessType="inputOnly"
|
|
25017
25022
|
minInclusive="-1"
|
|
25018
|
-
description="colorIndex values define the order in which Color|ColorRGBA values are applied to polygons (or vertices).">
|
|
25023
|
+
description="colorIndex values define the order in which Color|ColorRGBA values are applied to polygons (or vertices), interspersed by -1 if colorlPerVertex=true.">
|
|
25019
25024
|
<componentInfo name="Rendering" level="3"/>
|
|
25020
25025
|
</field>
|
|
25021
25026
|
<field name="set_coordIndex"
|
|
@@ -38524,7 +38529,8 @@
|
|
|
38524
38529
|
<field name="upVector"
|
|
38525
38530
|
type="SFVec3f"
|
|
38526
38531
|
accessType="inputOutput"
|
|
38527
|
-
default="0 0
|
|
38532
|
+
default="0 1 0"
|
|
38533
|
+
inheritedFrom="X3DTextureProjectorNode"
|
|
38528
38534
|
description="upVector describes the roll of the camera by saying which direction is up for the camera's orientation."/>
|
|
38529
38535
|
<field name="DEF"
|
|
38530
38536
|
type="SFString"
|
|
@@ -38683,6 +38689,12 @@
|
|
|
38683
38689
|
acceptableNodeTypes="X3DTexture2DNode"
|
|
38684
38690
|
inheritedFrom="X3DTextureProjectorNode"
|
|
38685
38691
|
description="Single contained texture node (ImageTexture, MovieTexture, PixelTexture, MultiTexture) that maps image(s) to surface geometry."/>
|
|
38692
|
+
<field name="upVector"
|
|
38693
|
+
type="SFVec3f"
|
|
38694
|
+
accessType="inputOutput"
|
|
38695
|
+
default="0 1 0"
|
|
38696
|
+
inheritedFrom="X3DTextureProjectorNode"
|
|
38697
|
+
description="upVector describes the roll of the camera by saying which direction is up for the camera's orientation."/>
|
|
38686
38698
|
<field name="DEF"
|
|
38687
38699
|
type="SFString"
|
|
38688
38700
|
accessType="inputOutput"
|
|
@@ -1035,17 +1035,6 @@ body.dark .ui-widget .library-list .component {
|
|
|
1035
1035
|
width: min-content;
|
|
1036
1036
|
}
|
|
1037
1037
|
|
|
1038
|
-
.scene-graph .material-symbols-outlined {
|
|
1039
|
-
font-size: var(--font-size);
|
|
1040
|
-
position: relative;
|
|
1041
|
-
top: 2.5px;
|
|
1042
|
-
color: var(--system-blue);
|
|
1043
|
-
}
|
|
1044
|
-
|
|
1045
|
-
.scene-graph .material-symbols-outlined:hover {
|
|
1046
|
-
color: var(--system-gray0);
|
|
1047
|
-
}
|
|
1048
|
-
|
|
1049
1038
|
.scene-graph .hidden {
|
|
1050
1039
|
display: none;
|
|
1051
1040
|
}
|
|
@@ -1343,6 +1332,18 @@ body.dark .ui-widget .library-list .component {
|
|
|
1343
1332
|
|
|
1344
1333
|
.scene-graph .button {
|
|
1345
1334
|
cursor: pointer;
|
|
1335
|
+
font-size: var(--font-size);
|
|
1336
|
+
position: relative;
|
|
1337
|
+
top: 2.5px;
|
|
1338
|
+
color: var(--system-blue);
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1341
|
+
.scene-graph .button:hover {
|
|
1342
|
+
color: var(--system-gray0);
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
.scene-graph .button.on:hover {
|
|
1346
|
+
color: var(--system-cyan);
|
|
1346
1347
|
}
|
|
1347
1348
|
|
|
1348
1349
|
.scene-graph .button.off {
|
|
@@ -1353,6 +1354,10 @@ body.dark .ui-widget .library-list .component {
|
|
|
1353
1354
|
color: var(--system-gray0);
|
|
1354
1355
|
}
|
|
1355
1356
|
|
|
1357
|
+
.scene-graph .field-button {
|
|
1358
|
+
top: 4px;
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1356
1361
|
/* Spectrum Color Picker */
|
|
1357
1362
|
|
|
1358
1363
|
.sp-container {
|
|
@@ -1035,17 +1035,6 @@ body.dark .ui-widget .library-list .component {
|
|
|
1035
1035
|
width: min-content;
|
|
1036
1036
|
}
|
|
1037
1037
|
|
|
1038
|
-
.scene-graph .material-symbols-outlined {
|
|
1039
|
-
font-size: var(--font-size);
|
|
1040
|
-
position: relative;
|
|
1041
|
-
top: 2.5px;
|
|
1042
|
-
color: var(--system-blue);
|
|
1043
|
-
}
|
|
1044
|
-
|
|
1045
|
-
.scene-graph .material-symbols-outlined:hover {
|
|
1046
|
-
color: var(--system-gray0);
|
|
1047
|
-
}
|
|
1048
|
-
|
|
1049
1038
|
.scene-graph .hidden {
|
|
1050
1039
|
display: none;
|
|
1051
1040
|
}
|
|
@@ -1343,6 +1332,18 @@ body.dark .ui-widget .library-list .component {
|
|
|
1343
1332
|
|
|
1344
1333
|
.scene-graph .button {
|
|
1345
1334
|
cursor: pointer;
|
|
1335
|
+
font-size: var(--font-size);
|
|
1336
|
+
position: relative;
|
|
1337
|
+
top: 2.5px;
|
|
1338
|
+
color: var(--system-blue);
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1341
|
+
.scene-graph .button:hover {
|
|
1342
|
+
color: var(--system-gray0);
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
.scene-graph .button.on:hover {
|
|
1346
|
+
color: var(--system-cyan);
|
|
1346
1347
|
}
|
|
1347
1348
|
|
|
1348
1349
|
.scene-graph .button.off {
|
|
@@ -1353,6 +1354,10 @@ body.dark .ui-widget .library-list .component {
|
|
|
1353
1354
|
color: var(--system-gray0);
|
|
1354
1355
|
}
|
|
1355
1356
|
|
|
1357
|
+
.scene-graph .field-button {
|
|
1358
|
+
top: 4px;
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1356
1361
|
/* Spectrum Color Picker */
|
|
1357
1362
|
|
|
1358
1363
|
.sp-container {
|