sunrize 1.7.35 → 1.7.37

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sunrize",
3
3
  "productName": "Sunrize X3D Editor",
4
- "version": "1.7.35",
4
+ "version": "1.7.37",
5
5
  "description": "A Multi-Platform X3D Editor",
6
6
  "main": "src/main.js",
7
7
  "bin": {
@@ -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.27.1",
102
+ "material-symbols": "^0.27.2",
103
103
  "md5": "^2.3.0",
104
104
  "mime-types": "^2.1.35",
105
105
  "monaco-editor": "^0.50.0",
@@ -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.0.0",
112
- "x_ite": "^10.5.15",
113
- "x3d-traverse": "^1.0.6"
111
+ "update-electron-app": "^3.1.0",
112
+ "x_ite": "^11.0.1",
113
+ "x3d-traverse": "^1.0.7"
114
114
  }
115
115
  }
@@ -26,6 +26,9 @@ module .exports = class Document extends Interface
26
26
  {
27
27
  super ("Sunrize.Document.");
28
28
 
29
+ // Add X3D to window to provide access in Script nodes.
30
+ window .X3D = X3D;
31
+
29
32
  // Globals
30
33
 
31
34
  this .config .global .setDefaultValues ({
@@ -28,7 +28,7 @@ $.fn.materialPreviewPopover = async function (node)
28
28
 
29
29
  const
30
30
  browser = canvas .prop ("browser"),
31
- scene = browser .createScene (browser .getProfile ("Core"));
31
+ scene = await browser .createScene (browser .getProfile ("Core"));
32
32
 
33
33
  scene .setWorldURL (node .getExecutionContext () .worldURL);
34
34
 
@@ -52,7 +52,7 @@ $.fn.texturePreviewPopover = async function (node)
52
52
 
53
53
  const
54
54
  browser = canvas .prop ("browser"),
55
- scene = browser .createScene (browser .getProfile ("Core"));
55
+ scene = await browser .createScene (browser .getProfile ("Core"));
56
56
 
57
57
  scene .setWorldURL (node .getExecutionContext () .worldURL);
58
58
 
@@ -61,7 +61,7 @@ $.fn.texturePreviewPopover = async function (node)
61
61
  // Create texture node.
62
62
 
63
63
  const
64
- x3dSyntax = Editor .exportX3D (node .getExecutionContext (), [node]),
64
+ x3dSyntax = await Editor .exportX3D (node .getExecutionContext (), [node]),
65
65
  nodes = await Editor .importX3D (scene, x3dSyntax, new UndoManager ()),
66
66
  previewNode = nodes [0],
67
67
  appearanceNode = browser .currentScene .getExportedNode ("Appearance");
@@ -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)
@@ -794,17 +794,17 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
794
794
  Editor .removeImportedNode (importedNode .getExecutionContext (), importedNode .getImportedName ());
795
795
  }
796
796
 
797
- cutNodes ()
797
+ async cutNodes ()
798
798
  {
799
799
  UndoManager .shared .beginUndo (_("Cut Nodes"));
800
800
 
801
- this .copyNodes ();
802
- this .deleteNodes ();
801
+ await this .copyNodes ();
802
+ await this .deleteNodes ();
803
803
 
804
804
  UndoManager .shared .endUndo ();
805
805
  }
806
806
 
807
- copyNodes (deselect)
807
+ async copyNodes (deselect)
808
808
  {
809
809
  const
810
810
  primary = $(".node.primary, .proto.primary, .externproto.primary"),
@@ -829,7 +829,7 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
829
829
 
830
830
  undoManager .endUndo ();
831
831
 
832
- const x3dSyntax = Editor .exportX3D (this .executionContext, nodes, { importedNodes: true });
832
+ const x3dSyntax = await Editor .exportX3D (this .executionContext, nodes, { importedNodes: true });
833
833
 
834
834
  //console .log (x3dSyntax)
835
835
 
@@ -841,7 +841,7 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
841
841
  this .deselectAll ();
842
842
  }
843
843
 
844
- copyExternPrototype ()
844
+ async copyExternPrototype ()
845
845
  {
846
846
  const
847
847
  elements = $(".proto.primary, .proto.manually"),
@@ -849,7 +849,7 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
849
849
 
850
850
  const
851
851
  browser = this .executionContext .getBrowser (),
852
- scene = browser .createScene (),
852
+ scene = await browser .createScene (browser .getProfile ("Full")),
853
853
  worldURL = new URL (this .executionContext .worldURL),
854
854
  basename = path .basename (worldURL .pathname);
855
855
 
@@ -1366,7 +1366,7 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
1366
1366
  const
1367
1367
  rootNodes = executionContext .rootNodes .copy (),
1368
1368
  nodesToImport = [... inlineNode .getInternalScene () .rootNodes] .map (node => node .getValue ()),
1369
- x3dSyntax = Editor .exportX3D (inlineNode .getInternalScene (), nodesToImport, { importedNodes: true }),
1369
+ x3dSyntax = await Editor .exportX3D (inlineNode .getInternalScene (), nodesToImport, { importedNodes: true }),
1370
1370
  nodes = await Editor .importX3D (executionContext, x3dSyntax);
1371
1371
 
1372
1372
  // Remove imported nodes from root nodes.
@@ -2865,7 +2865,7 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
2865
2865
  {
2866
2866
  UndoManager .shared .beginUndo (_("Copy Extern Proto »%s«"), sourceExternProto .getName ());
2867
2867
 
2868
- await Editor .importX3D (destinationExecutionContext, Editor .exportX3D (sourceExecutionContext, [sourceExternProto]));
2868
+ await Editor .importX3D (destinationExecutionContext, await Editor .exportX3D (sourceExecutionContext, [sourceExternProto]));
2869
2869
 
2870
2870
  const
2871
2871
  externprotos = Array .from (destinationExecutionContext .externprotos),
@@ -2939,7 +2939,7 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
2939
2939
  {
2940
2940
  UndoManager .shared .beginUndo (_("Copy Prototype »%s«"), sourceProto .getName ());
2941
2941
 
2942
- await Editor .importX3D (destinationExecutionContext, Editor .exportX3D (sourceExecutionContext, [sourceProto]));
2942
+ await Editor .importX3D (destinationExecutionContext, await Editor .exportX3D (sourceExecutionContext, [sourceProto]));
2943
2943
 
2944
2944
  const
2945
2945
  protos = Array .from (destinationExecutionContext .protos),
@@ -3044,7 +3044,7 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
3044
3044
  }
3045
3045
 
3046
3046
  const copiedNodes = sourceNodes .length
3047
- ? await Editor .importX3D (destinationExecutionContext, Editor .exportX3D (this .executionContext, sourceNodes, { importedNodes: true }))
3047
+ ? await Editor .importX3D (destinationExecutionContext, await Editor .exportX3D (this .executionContext, sourceNodes, { importedNodes: true }))
3048
3048
  : [ ];
3049
3049
 
3050
3050
  if (copiedNodes .length)
@@ -256,40 +256,63 @@ module .exports = class ScriptEditor extends Interface
256
256
 
257
257
  const fields = Array .from (this .node .getUserDefinedFields (), field =>
258
258
  {
259
- switch (field .getAccessType ())
259
+ if (field .getAccessType () === X3D .X3DConstants .inputOnly)
260
+ return "";
261
+
262
+ const accessType = [ ];
263
+
264
+ if (field .isInput ())
265
+ accessType .push ("in");
266
+
267
+ if (field .isOutput ())
268
+ accessType .push ("out");
269
+
270
+ let value = "";
271
+
272
+ if (field instanceof X3D .X3DArrayField)
273
+ {
274
+ value += `(${field .length} elements)`;
275
+ }
276
+ else
260
277
  {
261
- case X3D .X3DConstants .initializeOnly:
262
- case X3D .X3DConstants .outputOnly:
263
- case X3D .X3DConstants .inputOutput:
278
+ const STRING_MAX = 16;
279
+
280
+ if (field instanceof X3D .SFString)
281
+ value += `"${X3D .SFString .escape (field .valueOf ()) .substring (0, STRING_MAX)}${field .length <= STRING_MAX ? "" : "..."}"`;
282
+ else
283
+ value += String (field);
284
+ }
285
+
286
+ let string = "";
287
+
288
+ string += `/** This is the user-defined field ${field .getTypeName ()} [${accessType .join (", ")}] *${field .getName ()}* ${value}. */\n`;
289
+ string += `declare let ${field .getName ()}: `;
290
+
291
+ switch (field .getType ())
292
+ {
293
+ case X3D .X3DConstants .SFNode:
264
294
  {
265
- switch (field .getType ())
266
- {
267
- case X3D .X3DConstants .SFNode:
268
- {
269
- if (field .getValue ())
270
- return `declare let ${field .getName ()}: X3D .${field .getNodeTypeName ()}Proxy;`;
271
- else
272
- return `declare let ${field .getName ()}: X3D .SFNode | null;`;
273
- }
274
- case X3D .X3DConstants .MFNode:
275
- {
276
- const types = Array .from (new Set (Array .from (field, node => node ? `${node .getNodeTypeName ()}Proxy` : "null")));
277
-
278
- if (types .length)
279
- return `declare let ${field .getName ()}: X3D .MFNode <${types .join ("|")}|null>;`;
280
- else
281
- return `declare let ${field .getName ()}: X3D .MFNode;`;
282
- }
283
- default:
284
- {
285
- return `declare let ${field .getName ()}: ${
286
- this .#internalTypes .get (field .getType ()) ?? "X3D ." + field .getTypeName ()
287
- };`;
288
- }
289
- }
295
+ if (field .getValue ())
296
+ string += `X3D .${field .getNodeTypeName ()}Proxy;`;
297
+ else
298
+ string += `X3D .SFNode | null;`;
299
+ }
300
+ case X3D .X3DConstants .MFNode:
301
+ {
302
+ const types = Array .from (new Set (Array .from (field, node => node ? `${node .getNodeTypeName ()}Proxy` : "null")));
303
+
304
+ if (types .length)
305
+ string += `X3D .MFNode <${types .join ("|")}|null>;`;
306
+ else
307
+ string += `X3D .MFNode;`;
290
308
  }
291
309
  default:
292
- return "";
310
+ {
311
+ string += this .#internalTypes .get (field .getType ()) ?? `X3D .${field .getTypeName ()}`;
312
+ string += "";"";
313
+ }
314
+
315
+ return string;
293
316
  }
294
317
  });
295
318
 
@@ -380,11 +403,13 @@ module .exports = class ScriptEditor extends Interface
380
403
  bracketPairColorization: { enabled: true },
381
404
  });
382
405
 
406
+ editor .onDidFocusEditorWidget (() => this .setDeclarations (monaco));
383
407
  editor .onDidBlurEditorWidget (() => this .apply ());
384
408
 
385
409
  editor .viewState = editor .saveViewState ();
386
410
 
387
- element .on ("contextmenu", (event) => this .showContextMenu ());
411
+ element .on ("mouseenter", () => this .setDeclarations (monaco))
412
+ element .on ("contextmenu", () => this .showContextMenu ());
388
413
  element .detach ();
389
414
 
390
415
  // this .debugFindActions (editor)
@@ -156,7 +156,7 @@ class X3DNodeTool extends X3DBaseTool
156
156
  {
157
157
  const scene = await this .getBrowser () .createX3DFromURL (new X3D .MFString (protoURL));
158
158
 
159
- scene .setExecutionContext (null);
159
+ scene .setExecutionContext (this .getBrowser () .getPrivateScene ());
160
160
  scene .setCountPrimitives (false);
161
161
 
162
162
  for (const externproto of scene .externprotos)
@@ -75,7 +75,7 @@ module .exports = class Editor
75
75
  * @param {Object} options
76
76
  * @returns {string} x3dSyntax
77
77
  */
78
- static exportX3D (executionContext, objects = [ ], { type = "x3d", importedNodes = false, exportedNodes = false } = { })
78
+ static async exportX3D (executionContext, objects = [ ], { type = "x3d", importedNodes = false, exportedNodes = false } = { })
79
79
  {
80
80
  const
81
81
  externprotos = new Set (),
@@ -84,7 +84,7 @@ module .exports = class Editor
84
84
 
85
85
  const
86
86
  browser = executionContext .getBrowser (),
87
- scene = browser .createScene ();
87
+ scene = await browser .createScene (browser .getProfile ("Core"));
88
88
 
89
89
  // Determine protos.
90
90
 
@@ -220,6 +220,7 @@ module .exports = class Editor
220
220
 
221
221
  // Dispose scene.
222
222
 
223
+ scene .routes .clear ();
223
224
  scene .dispose ();
224
225
  nodes .dispose ();
225
226
 
@@ -245,7 +246,7 @@ module .exports = class Editor
245
246
  externprotos = new Map (Array .from (executionContext .externprotos, p => [p .getName (), p])),
246
247
  protos = new Map (Array .from (executionContext .protos, p => [p .getName (), p])),
247
248
  rootNodes = executionContext .rootNodes .copy (),
248
- tempScene = browser .createScene (browser .getProfile ("Core"));
249
+ tempScene = await browser .createScene (browser .getProfile ("Core"));
249
250
 
250
251
  scene .setProfile (browser .getProfile ("Full"));
251
252
  scene .updateComponent (browser .getComponent ("X_ITE"));
@@ -398,8 +399,8 @@ module .exports = class Editor
398
399
  {
399
400
  const
400
401
  browser = executionContext .getBrowser (),
401
- scene = browser .createScene (),
402
- x3dSyntax = this .exportX3D (executionContext, nodes, { importedNodes: true, exportedNodes: true }),
402
+ scene = await browser .createScene (browser .getProfile ("Core")),
403
+ x3dSyntax = await this .exportX3D (executionContext, nodes, { importedNodes: true, exportedNodes: true }),
403
404
  loadUrlObjects = browser .getBrowserOption ("LoadUrlObjects");
404
405
 
405
406
  browser .setBrowserOption ("LoadUrlObjects", false);
@@ -408,6 +409,7 @@ module .exports = class Editor
408
409
 
409
410
  await this .importX3D (scene, x3dSyntax, new UndoManager ());
410
411
 
412
+ this .rewriteURLs (scene, scene, executionContext .worldURL, scene .worldURL, new UndoManager ());
411
413
  this .inferProfileAndComponents (scene, new UndoManager ());
412
414
 
413
415
  fs .writeFileSync (filePath, this .getContents (scene, path .extname (filePath)));
@@ -525,7 +527,7 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
525
527
  {
526
528
  try
527
529
  {
528
- const filePath = path .resolve (path .dirname (url .fileURLToPath (oldWorldURL)), url .fileURLToPath (fileURL));
530
+ const filePath = url .fileURLToPath (new URL (fileURL, oldWorldURL));
529
531
 
530
532
  let relativePath = path .relative (path .dirname (url .fileURLToPath (newWorldURL)), filePath);
531
533
 
@@ -537,8 +539,10 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
537
539
  newURL .push (encodeURI (relativePath));
538
540
  continue;
539
541
  }
540
- catch
541
- { }
542
+ catch (error)
543
+ {
544
+ // console .log (error)
545
+ }
542
546
 
543
547
  newURL .push (fileURL);
544
548
  }
@@ -783,9 +787,6 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
783
787
 
784
788
  const node = object .getValue ();
785
789
 
786
- if (node .getScene () !== scene)
787
- continue;
788
-
789
790
  components .add (node .getComponentInfo () .name);
790
791
  }
791
792
 
@@ -1350,13 +1351,17 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
1350
1351
  {
1351
1352
  const
1352
1353
  browser = executionContext .getBrowser (),
1353
- scene = browser .createScene (),
1354
- x3dSyntax = this .exportX3D (executionContext, [proto]);
1354
+ scene = await browser .createScene (browser .getProfile ("Core")),
1355
+ x3dSyntax = await this .exportX3D (executionContext, [proto]);
1355
1356
 
1356
1357
  undoManager .beginUndo (_("Turn Prototype »%s« into Extern Prototype"), proto .getName ());
1357
1358
 
1359
+ scene .setWorldURL (url .pathToFileURL (filePath));
1360
+
1358
1361
  await this .importX3D (scene, x3dSyntax, new UndoManager ());
1359
- this .rewriteURLs (scene, scene, executionContext .worldURL, url .pathToFileURL (filePath) .href, new UndoManager ());
1362
+
1363
+ this .rewriteURLs (scene, scene, executionContext .worldURL, scene .worldURL, new UndoManager ());
1364
+ this .inferProfileAndComponents (scene, new UndoManager ());
1360
1365
 
1361
1366
  fs .writeFileSync (filePath, this .getContents (scene, path .extname (filePath)));
1362
1367
  scene .dispose ();
@@ -1530,7 +1535,7 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
1530
1535
  {
1531
1536
  const
1532
1537
  numProtos = executionContext .protos .length,
1533
- x3dSyntax = this .exportX3D (externproto .getInternalScene (), [externproto .getProtoDeclaration ()])
1538
+ x3dSyntax = await this .exportX3D (externproto .getInternalScene (), [externproto .getProtoDeclaration ()])
1534
1539
 
1535
1540
  undoManager .beginUndo (_("Turn Extern Prototype »%s« into Prototype"), externproto .getName ())
1536
1541
 
@@ -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-04-28-07:00 13:15:28.386754-07:00 -->
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 1"
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"
@@ -0,0 +1,77 @@
1
+ <html>
2
+ <head>
3
+ <meta charset="utf-8"/>
4
+ <!-- Theme -->
5
+ <link rel="stylesheet" type="text/css" href="file:///Users/holger/Desktop/X_ITE/sunrize/src/assets/themes/default.css"/>
6
+ </head>
7
+ <body>
8
+ <tab-group sortable="true">
9
+ <style>
10
+ .etabs .nav {
11
+ height: var(--window-tabs-height);
12
+ background: var(--background-color);
13
+ box-shadow: none;
14
+ border: none;
15
+ overflow: auto;
16
+ white-space: nowrap;
17
+ }
18
+
19
+ .etabs .tab {
20
+ background: var(--window-tabs-background-color);
21
+ border-color: var(--border-color) !important;
22
+ padding: 4px 3px !important;
23
+ color: var(--window-tabs-text-color);
24
+ font-family: var(--sans-serif);
25
+ box-shadow: none;
26
+ }
27
+
28
+ .etabs .tab:first-child {
29
+ border-left: 0;
30
+ }
31
+
32
+ .etabs .tab.active {
33
+ z-index: 1100;
34
+ background: var(--background-color);
35
+ color: var(--window-tabs-highlight-color);
36
+ }
37
+
38
+ .etabs::before {
39
+ z-index: 1000;
40
+ content: "";
41
+ position: relative;
42
+ display: block;
43
+ height: 1px;
44
+ width: 100%;
45
+ box-shadow: var(--tabs-shadow);
46
+ }
47
+
48
+ .etabs .buttons {
49
+ border-color: var(--border-color);
50
+ }
51
+
52
+ .etabs .buttons:hover button,
53
+ .etabs .tab-close button:hover {
54
+ background: none;
55
+ }
56
+
57
+ .etabs .buttons button:hover,
58
+ .etabs .tab-close:hover button {
59
+ color: var(--system-gray0);
60
+ }
61
+
62
+ .etabs .tab-close button {
63
+ visibility: hidden;
64
+ }
65
+
66
+ .etabs .tab.active .tab-close button,
67
+ .etabs .tab:hover .tab-close button {
68
+ visibility: visible;
69
+ }
70
+
71
+ .etabs .tab-close {
72
+ margin-left: 4px;
73
+ }
74
+ </style>
75
+ </tab-group>
76
+ </body>
77
+ </html>
@@ -0,0 +1,38 @@
1
+ <html>
2
+ <head>
3
+ <meta charset="utf-8"/>
4
+ <link rel="stylesheet" type="text/css" href="file:///Users/holger/Desktop/X_ITE/sunrize/node_modules/jquery-ui-dist/jquery-ui.min.css"/>
5
+ <link rel="stylesheet" type="text/css" href="file:///Users/holger/Desktop/X_ITE/sunrize/node_modules/qtip2/dist/jquery.qtip.min.css"/>
6
+ <link rel="stylesheet" type="text/css" href="file:///Users/holger/Desktop/X_ITE/sunrize/src/assets/themes/default.css"/>
7
+ <link rel="stylesheet" data-name="vs/editor/editor.main" href="file:///Users/holger/Desktop/X_ITE/sunrize/node_modules/monaco-editor/min/vs/editor/editor.main.css">
8
+ </head>
9
+ <body>
10
+ <div id="vertical-splitter" class="vertical-splitter">
11
+ <div class="vertical-splitter-left">
12
+ <div id="horizontal-splitter" class="horizontal-splitter">
13
+ <div class="horizontal-splitter-top">
14
+ <div id="browser-pane">
15
+ <div id="browser-frame">
16
+ <x3d-canvas
17
+ id="browser"
18
+ debug="false"
19
+ cache="false"
20
+ preserveDrawingBuffer="true"
21
+ splashScreen="false"
22
+ contextMenu="false"
23
+ xrSessionMode="NONE"></x3d-canvas>
24
+ </div>
25
+ <div id="secondary-toolbar" class="toolbar vertical-toolbar large-toolbar secondary-toolbar"></div>
26
+ </div>
27
+ </div>
28
+ <div class="horizontal-splitter-bottom">
29
+ <div id="footer"></div>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ <div class="vertical-splitter-right">
34
+ <div id="sidebar" class="sidebar"></div>
35
+ </div>
36
+ </div>
37
+ </body>
38
+ </html>