sunrize 1.7.43 → 1.7.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/package.json +3 -3
  2. package/src/Application/Application.js +17 -5
  3. package/src/Application/Dashboard.js +5 -2
  4. package/src/Application/Document.js +1 -9
  5. package/src/Application/Tabs.js +2 -1
  6. package/src/Components/Geometry2D/Arc2D.js +16 -0
  7. package/src/Components/Geometry2D/ArcClose2D.js +14 -0
  8. package/src/Components/Geometry2D/Circle2D.js +23 -0
  9. package/src/Components/Geometry2D/Disk2D.js +53 -0
  10. package/src/Components/Geometry2D/Polyline2D.js +16 -0
  11. package/src/Components/Geometry2D/Polypoint2D.js +20 -0
  12. package/src/Components/Geometry2D/Rectangle2D.js +27 -0
  13. package/src/Components/Geometry2D/TriangleSet2D.js +33 -0
  14. package/src/Components/Geometry3D/Box.js +27 -0
  15. package/src/Components/Geometry3D/Cone.js +79 -0
  16. package/src/Components/Geometry3D/Cylinder.js +81 -0
  17. package/src/Components/Geometry3D/ElevationGrid.js +23 -0
  18. package/src/Components/Geometry3D/Extrusion.js +194 -0
  19. package/src/Components/Geometry3D/IndexedFaceSet.js +112 -0
  20. package/src/Components/Geometry3D/Sphere.js +27 -0
  21. package/src/Components/NURBS/NurbsCurve.js +17 -0
  22. package/src/Components/NURBS/NurbsSweptSurface.js +24 -0
  23. package/src/Components/NURBS/NurbsSwungSurface.js +24 -0
  24. package/src/Components/NURBS/X3DNurbsSurfaceGeometryNode.js +19 -0
  25. package/src/Components/Rendering/IndexedLineSet.js +24 -0
  26. package/src/Components/Rendering/LineSet.js +34 -0
  27. package/src/Components/Rendering/X3DComposedGeometryNode.js +44 -0
  28. package/src/Components/Rendering/X3DGeometryNode.js +183 -0
  29. package/src/Components/Text/Text.js +17 -0
  30. package/src/Components.js +33 -0
  31. package/src/Editors/Library.js +2 -0
  32. package/src/Editors/LibraryPane.js +6 -1
  33. package/src/Editors/NodesLibrary.js +41 -1
  34. package/src/Editors/OutlineEditor.js +118 -25
  35. package/src/Editors/OutlineView.js +53 -22
  36. package/src/Editors/PrimitivesLibrary.js +58 -2
  37. package/src/Tools/Geometry2D/Disk2DTool.js +16 -18
  38. package/src/Undo/Editor.js +207 -153
@@ -1092,6 +1092,9 @@ module .exports = class OutlineView extends Interface
1092
1092
  {
1093
1093
  case X3D .X3DConstants .X3DLayerNode:
1094
1094
  {
1095
+ if (node .getExecutionContext () !== this .executionContext)
1096
+ continue;
1097
+
1095
1098
  buttons .push ($("<span></span>")
1096
1099
  .attr ("order", "2")
1097
1100
  .attr ("title", _("Activate layer."))
@@ -1247,7 +1250,9 @@ module .exports = class OutlineView extends Interface
1247
1250
  if (!this .browser .getActiveLayer ())
1248
1251
  return;
1249
1252
 
1250
- this .sceneGraph .find (`.node[node-id=${this .browser .getActiveLayer () .getId ()}], .exported-node[node-id=${this .browser .getActiveLayer () .getId ()}]`)
1253
+ this .sceneGraph .find (`.node[node-id=${this .browser .getActiveLayer () .getId ()}],
1254
+ .imported-node[node-id=${this .browser .getActiveLayer () .getId ()}],
1255
+ .exported-node[node-id=${this .browser .getActiveLayer () .getId ()}]`)
1251
1256
  .find ("> .item .activate-layer")
1252
1257
  .removeClass ("off")
1253
1258
  .addClass ("green");
@@ -1256,7 +1261,9 @@ module .exports = class OutlineView extends Interface
1256
1261
  updateNodeBound (node)
1257
1262
  {
1258
1263
  this .sceneGraph
1259
- .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
1264
+ .find (`.node[node-id=${node .getId ()}],
1265
+ .imported-node[node-id=${node .getId ()}],
1266
+ .exported-node[node-id=${node .getId ()}]`)
1260
1267
  .find ("> .item .bind-node")
1261
1268
  .removeClass (["on", "off"])
1262
1269
  .addClass (node ._isBound .getValue () ? "on" : "off")
@@ -1268,7 +1275,10 @@ module .exports = class OutlineView extends Interface
1268
1275
  const [className] = this .getLoadState (node .checkLoadState (), node .getTypeName ());
1269
1276
 
1270
1277
  this .sceneGraph
1271
- .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}], .externproto[node-id=${node .getId ()}]`)
1278
+ .find (`.node[node-id=${node .getId ()}],
1279
+ .imported-node[node-id=${node .getId ()}],
1280
+ .exported-node[node-id=${node .getId ()}],
1281
+ .externproto[node-id=${node .getId ()}]`)
1272
1282
  .find ("> .item .reload-node")
1273
1283
  .removeClass (["not-started-state", "in-progress-state", "complete-state", "failed-state"])
1274
1284
  .addClass (className);
@@ -1279,7 +1289,9 @@ module .exports = class OutlineView extends Interface
1279
1289
  const buttons = [ ];
1280
1290
 
1281
1291
  buttons .push (this .sceneGraph
1282
- .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
1292
+ .find (`.node[node-id=${node .getId ()}],
1293
+ .imported-node[node-id=${node .getId ()}],
1294
+ .exported-node[node-id=${node .getId ()}]`)
1283
1295
  .find ("> .item .play-node")
1284
1296
  .removeClass (["on", "off"])
1285
1297
  .addClass (node ._isPaused .getValue () ? "on" : "off")
@@ -1287,13 +1299,17 @@ module .exports = class OutlineView extends Interface
1287
1299
  .text (node ._isActive .getValue () ? "pause" : "play_arrow"));
1288
1300
 
1289
1301
  buttons .push (this .sceneGraph
1290
- .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
1302
+ .find (`.node[node-id=${node .getId ()}],
1303
+ .imported-node[node-id=${node .getId ()}],
1304
+ .exported-node[node-id=${node .getId ()}]`)
1291
1305
  .find ("> .item .stop-node")
1292
1306
  .removeClass (["on", "off"])
1293
1307
  .addClass (node ._isActive .getValue () ? "on" : "off"));
1294
1308
 
1295
1309
  buttons .push (this .sceneGraph
1296
- .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
1310
+ .find (`.node[node-id=${node .getId ()}],
1311
+ .imported-node[node-id=${node .getId ()}],
1312
+ .exported-node[node-id=${node .getId ()}]`)
1297
1313
  .find ("> .item .loop-node")
1298
1314
  .removeClass (["on", "off"])
1299
1315
  .addClass (node ._loop .getValue () ? "on" : "off"));
@@ -1309,7 +1325,7 @@ module .exports = class OutlineView extends Interface
1309
1325
 
1310
1326
  isInParents (parent, node)
1311
1327
  {
1312
- return parent .closest (".node[node-id=" + node .getId () + "]", this .sceneGraph) .length;
1328
+ return parent .closest (`.node[node-id=${node .getId ()}]`, this .sceneGraph) .length;
1313
1329
  }
1314
1330
 
1315
1331
  #importedNodeSymbol = Symbol ();
@@ -2710,7 +2726,9 @@ module .exports = class OutlineView extends Interface
2710
2726
 
2711
2727
  nodeCloseClones (element)
2712
2728
  {
2713
- const opened = this .sceneGraph .find (`.node[node-id=${element .attr ("node-id")}], .imported-node[node-id=${element .attr ("node-id")}], .exported-node[node-id=${element .attr ("node-id")}]`);
2729
+ const opened = this .sceneGraph .find (`.node[node-id=${element .attr ("node-id")}],
2730
+ .imported-node[node-id=${element .attr ("node-id")}],
2731
+ .exported-node[node-id=${element .attr ("node-id")}]`);
2714
2732
 
2715
2733
  opened .each (function (key, value)
2716
2734
  {
@@ -2908,7 +2926,7 @@ module .exports = class OutlineView extends Interface
2908
2926
  }
2909
2927
  });
2910
2928
 
2911
- element .find (".node:not([node-id=NULL])") .each ((i, e) =>
2929
+ element .find (".node:not([node-id=NULL]), .imported-node, .exported-node") .each ((i, e) =>
2912
2930
  {
2913
2931
  const
2914
2932
  child = $(e),
@@ -2916,6 +2934,7 @@ module .exports = class OutlineView extends Interface
2916
2934
 
2917
2935
  // If node is somewhere else, don't disconnect.
2918
2936
  if (Array .from (this .sceneGraph .find (`.node[node-id="${node .getId ()}"],
2937
+ .imported-node[node-id="${node .getId ()}"],
2919
2938
  .exported-node[node-id="${node .getId ()}"]`))
2920
2939
  .some (s => !$(s) .closest (element) .length))
2921
2940
  {
@@ -2956,7 +2975,7 @@ module .exports = class OutlineView extends Interface
2956
2975
  {
2957
2976
  const
2958
2977
  child = $(e),
2959
- node = this .getNode (child);
2978
+ node = this .getNode (child);
2960
2979
 
2961
2980
  node .typeName_changed .removeFieldCallback (this .#exportedNodeSymbol);
2962
2981
  node .name_changed .removeFieldCallback (this .#exportedNodeSymbol);
@@ -2966,7 +2985,7 @@ module .exports = class OutlineView extends Interface
2966
2985
  {
2967
2986
  const
2968
2987
  child = $(e),
2969
- field = this .getField (child);
2988
+ field = this .getField (child);
2970
2989
 
2971
2990
  field .removeReferencesCallback (this .#fieldSymbol);
2972
2991
  field .removeRouteCallback (this .#fieldSymbol);
@@ -3021,7 +3040,7 @@ module .exports = class OutlineView extends Interface
3021
3040
  const
3022
3041
  icon = $(event .currentTarget) ,
3023
3042
  item = icon .closest (".item", this .sceneGraph),
3024
- element = icon .closest (".node, .exported-node", this .sceneGraph),
3043
+ element = icon .closest (".node, .imported-node, .exported-node", this .sceneGraph),
3025
3044
  node = this .objects .get (parseInt (element .attr ("node-id"))),
3026
3045
  on = !!item .attr ("data-hasqtip");
3027
3046
 
@@ -3092,7 +3111,7 @@ module .exports = class OutlineView extends Interface
3092
3111
  {
3093
3112
  const
3094
3113
  target = $(event .target),
3095
- element = target .closest (".node, .exported-node, .imported-node", this .sceneGraph),
3114
+ element = target .closest (".node, .imported-node, .exported-node", this .sceneGraph),
3096
3115
  node = this .getNode (element),
3097
3116
  hidden = !node .isHidden ();
3098
3117
 
@@ -3101,7 +3120,9 @@ module .exports = class OutlineView extends Interface
3101
3120
 
3102
3121
  node .setHidden (hidden);
3103
3122
 
3104
- this .sceneGraph .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}], .imported-node[node-id=${node .getId ()}]`)
3123
+ this .sceneGraph .find (`.node[node-id=${node .getId ()}],
3124
+ .imported-node[node-id=${node .getId ()}],
3125
+ .exported-node[node-id=${node .getId ()}]`)
3105
3126
  .find ("> .item .toggle-visibility")
3106
3127
  .removeClass (["on", "off"])
3107
3128
  .addClass (hidden ? "off" : "on")
@@ -3112,7 +3133,7 @@ module .exports = class OutlineView extends Interface
3112
3133
  {
3113
3134
  const
3114
3135
  target = $(event .target),
3115
- element = target .closest (".node, .exported-node", this .sceneGraph),
3136
+ element = target .closest (".node, .imported-node, .exported-node", this .sceneGraph),
3116
3137
  node = this .getNode (element),
3117
3138
  tool = node .getTool ();
3118
3139
 
@@ -3131,7 +3152,9 @@ module .exports = class OutlineView extends Interface
3131
3152
 
3132
3153
  node .setUserData (_changing, true);
3133
3154
 
3134
- this .sceneGraph .find (`.node[node-id=${node .getId ()}] > .item .toggle-tool, .exported-node[node-id=${node .getId ()}] > .item .toggle-tool`)
3155
+ this .sceneGraph .find (`.node[node-id=${node .getId ()}] > .item .toggle-tool,
3156
+ .imported-node[node-id=${node .getId ()}] > .item .toggle-tool,
3157
+ .exported-node[node-id=${node .getId ()}] > .item .toggle-tool`)
3135
3158
  .removeClass (["on", "off"])
3136
3159
  .addClass (tool ? "off" : "on");
3137
3160
  }
@@ -3142,7 +3165,7 @@ module .exports = class OutlineView extends Interface
3142
3165
  {
3143
3166
  const
3144
3167
  target = $(event .target),
3145
- element = target .closest (".node, .exported-node", this .sceneGraph),
3168
+ element = target .closest (".node, .imported-node, .exported-node", this .sceneGraph),
3146
3169
  node = this .getNode (element);
3147
3170
 
3148
3171
  event .preventDefault ();
@@ -3161,7 +3184,7 @@ module .exports = class OutlineView extends Interface
3161
3184
  {
3162
3185
  const
3163
3186
  target = $(event .target),
3164
- element = target .closest (".node, .exported-node, .externproto", this .sceneGraph),
3187
+ element = target .closest (".node, .imported-node, .exported-node, .externproto", this .sceneGraph),
3165
3188
  item = target .closest (".item"),
3166
3189
  node = this .getNode (element);
3167
3190
 
@@ -3196,7 +3219,9 @@ module .exports = class OutlineView extends Interface
3196
3219
 
3197
3220
  node .setHidden (node .getType () .includes (X3D .X3DConstants .X3DShapeNode));
3198
3221
 
3199
- this .sceneGraph .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
3222
+ this .sceneGraph .find (`.node[node-id=${node .getId ()}],
3223
+ .imported-node[node-id=${node .getId ()}],
3224
+ .exported-node[node-id=${node .getId ()}]`)
3200
3225
  .find ("> .item .toggle-visibility")
3201
3226
  .removeClass (["on", "off"])
3202
3227
  .addClass (node .isHidden () ? "off" : "on")
@@ -3222,7 +3247,9 @@ module .exports = class OutlineView extends Interface
3222
3247
 
3223
3248
  node .setHidden (false);
3224
3249
 
3225
- this .sceneGraph .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
3250
+ this .sceneGraph .find (`.node[node-id=${node .getId ()}],
3251
+ .imported-node[node-id=${node .getId ()}],
3252
+ .exported-node[node-id=${node .getId ()}]`)
3226
3253
  .find ("> .item .toggle-visibility")
3227
3254
  .removeClass ("off")
3228
3255
  .addClass ("on")
@@ -3246,7 +3273,9 @@ module .exports = class OutlineView extends Interface
3246
3273
 
3247
3274
  node .setHidden (false);
3248
3275
 
3249
- this .sceneGraph .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
3276
+ this .sceneGraph .find (`.node[node-id=${node .getId ()}],
3277
+ .imported-node[node-id=${node .getId ()}],
3278
+ .exported-node[node-id=${node .getId ()}]`)
3250
3279
  .find ("> .item .toggle-visibility")
3251
3280
  .removeClass ("off")
3252
3281
  .addClass ("on")
@@ -3268,7 +3297,9 @@ module .exports = class OutlineView extends Interface
3268
3297
 
3269
3298
  node .setHidden (false);
3270
3299
 
3271
- this .sceneGraph .find (`.node[node-id=${node .getId ()}], .exported-node[node-id=${node .getId ()}]`)
3300
+ this .sceneGraph .find (`.node[node-id=${node .getId ()}],
3301
+ .imported-node[node-id=${node .getId ()}],
3302
+ .exported-node[node-id=${node .getId ()}]`)
3272
3303
  .find ("> .item .toggle-visibility")
3273
3304
  .removeClass ("off")
3274
3305
  .addClass ("on")
@@ -11,6 +11,20 @@ module .exports = class PrimitivesLibrary extends LibraryPane
11
11
 
12
12
  #list;
13
13
 
14
+ open ()
15
+ {
16
+ // Set default config values.
17
+
18
+ this .config .global .setDefaultValues ({
19
+ recentPrimitives: [ ],
20
+ });
21
+
22
+ // Clear output.
23
+
24
+ this .#list ?.remove ();
25
+ this .#list = undefined;
26
+ }
27
+
14
28
  update ()
15
29
  {
16
30
  // Fill output.
@@ -33,6 +47,30 @@ module .exports = class PrimitivesLibrary extends LibraryPane
33
47
  .sort ((a, b) => a .typeName .localeCompare (b .typeName))
34
48
  .sort ((a, b) => a .componentInfo .name .localeCompare (b .componentInfo .name));
35
49
 
50
+ // Get recently used primitives.
51
+
52
+ const recentPrimitives = this .config .global .recentPrimitives;
53
+
54
+ // Create list for recently used elements.
55
+
56
+ if (recentPrimitives .length)
57
+ {
58
+ $("<li></li>")
59
+ .addClass ("component")
60
+ .attr ("name", "recent")
61
+ .text ("Recently Used Primitives")
62
+ .appendTo (this .#list);
63
+
64
+ for (const typeName of recentPrimitives)
65
+ {
66
+ $("<li></li>")
67
+ .addClass ("node")
68
+ .text (typeName)
69
+ .appendTo (this .#list)
70
+ .on ("dblclick", () => this .createRecentNode (nodes, typeName));
71
+ }
72
+ }
73
+
36
74
  // Create list elements.
37
75
 
38
76
  let componentName = "";
@@ -52,9 +90,27 @@ module .exports = class PrimitivesLibrary extends LibraryPane
52
90
  $("<li></li>")
53
91
  .addClass ("node")
54
92
  .text (node .typeName)
55
- .attr ("x3dSyntax", node .x3dSyntax)
56
93
  .appendTo (this .#list)
57
- .on ("dblclick", () => this .importX3D (node .typeName, node .x3dSyntax));
94
+ .on ("dblclick", () => this .createNode (node));
58
95
  }
59
96
  }
97
+
98
+ createRecentNode (nodes, typeName)
99
+ {
100
+ const node = nodes .find (node => node .typeName === typeName);
101
+
102
+ this .createNode (node);
103
+ }
104
+
105
+ createNode ({ typeName, x3dSyntax})
106
+ {
107
+ const recentPrimitives = this .config .global .recentPrimitives .filter (name => name !== typeName);
108
+
109
+ recentPrimitives .unshift (typeName);
110
+ recentPrimitives .splice (10);
111
+
112
+ this .config .global .recentPrimitives = recentPrimitives;
113
+
114
+ this .importX3D (typeName, x3dSyntax);
115
+ }
60
116
  };
@@ -19,58 +19,56 @@ class Disk2DTool extends X3DGeometryNodeTool
19
19
 
20
20
  const toolChildren = new X3D .MFNode ();
21
21
 
22
- // Transform Tool innerRadius
22
+ // Transform Tool outerRadius
23
23
  {
24
24
  const
25
25
  groupNode = this .getToolScene () .createNode ("Group"),
26
26
  transformNode = this .getToolScene () .createNode ("Transform"),
27
27
  transformTool = await transformNode .getValue () .addTool () .getToolInstance ();
28
28
 
29
- this .#innerRadiusTransformNode = transformNode;
29
+ this .#outerRadiusTransformNode = transformNode;
30
30
 
31
- transformNode .scale .addInterest ("set_innerRadiusScale", this);
31
+ transformNode .scale .addInterest ("set_outerRadiusScale", this);
32
32
  transformTool .getField ("isActive") .addInterest ("handleUndo", this);
33
- transformTool .getField ("isActive") .addInterest ("set_innerRadiusActive", this);
33
+ transformTool .getField ("isActive") .addInterest ("set_outerRadiusActive", this);
34
34
 
35
35
  groupNode .bboxSize = new X3D .Vector3 (2, 2, 0);
36
36
  transformNode .children = [groupNode];
37
- transformTool .group = `${this .getTypeName ()}.innerRadius`;
37
+ transformTool .group = `${this .getTypeName ()}.outerRadius`;
38
38
  transformTool .undo = false;
39
39
  transformTool .tools = ["SCALE"];
40
40
  transformTool .keys = [ ];
41
41
  transformTool .connectedAxes = ["XY", "YX", "ZX"];
42
42
  transformTool .centerDisplay = false;
43
43
  transformTool .centerTool = false;
44
- transformTool .xAxisDisplay = false;
45
- transformTool .yAxisDisplay = false;
46
44
  transformTool .zAxisDisplay = false;
47
45
  transformTool .bboxColor = ToolColors .BLUE;
48
46
 
49
47
  toolChildren .push (transformNode);
50
48
 
51
- // Connections innerRadius
49
+ // Connections outerRadius
52
50
 
53
- this .node ._innerRadius .addInterest ("set_innerRadius", this);
51
+ this .node ._outerRadius .addInterest ("set_outerRadius", this);
54
52
 
55
- this .set_innerRadius (this .node ._innerRadius);
53
+ this .set_outerRadius (this .node ._outerRadius);
56
54
  }
57
55
 
58
- // Transform Tool outerRadius
56
+ // Transform Tool innerRadius
59
57
  {
60
58
  const
61
59
  groupNode = this .getToolScene () .createNode ("Group"),
62
60
  transformNode = this .getToolScene () .createNode ("Transform"),
63
61
  transformTool = await transformNode .getValue () .addTool () .getToolInstance ();
64
62
 
65
- this .#outerRadiusTransformNode = transformNode;
63
+ this .#innerRadiusTransformNode = transformNode;
66
64
 
67
- transformNode .scale .addInterest ("set_outerRadiusScale", this);
65
+ transformNode .scale .addInterest ("set_innerRadiusScale", this);
68
66
  transformTool .getField ("isActive") .addInterest ("handleUndo", this);
69
- transformTool .getField ("isActive") .addInterest ("set_outerRadiusActive", this);
67
+ transformTool .getField ("isActive") .addInterest ("set_innerRadiusActive", this);
70
68
 
71
69
  groupNode .bboxSize = new X3D .Vector3 (2, 2, 0);
72
70
  transformNode .children = [groupNode];
73
- transformTool .group = `${this .getTypeName ()}.outerRadius`;
71
+ transformTool .group = `${this .getTypeName ()}.innerRadius`;
74
72
  transformTool .undo = false;
75
73
  transformTool .tools = ["SCALE"];
76
74
  transformTool .keys = [ ];
@@ -82,11 +80,11 @@ class Disk2DTool extends X3DGeometryNodeTool
82
80
 
83
81
  toolChildren .push (transformNode);
84
82
 
85
- // Connections outerRadius
83
+ // Connections innerRadius
86
84
 
87
- this .node ._outerRadius .addInterest ("set_outerRadius", this);
85
+ this .node ._innerRadius .addInterest ("set_innerRadius", this);
88
86
 
89
- this .set_outerRadius (this .node ._outerRadius);
87
+ this .set_innerRadius (this .node ._innerRadius);
90
88
  }
91
89
 
92
90
  this .tool .undo = true;