sunrize 1.7.18 → 1.7.20

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.18",
4
+ "version": "1.7.20",
5
5
  "description": "A Multi-Platform X3D Editor",
6
6
  "main": "src/main.js",
7
7
  "bin": {
@@ -90,14 +90,14 @@
90
90
  "dependencies": {
91
91
  "capitalize": "^2.0.4",
92
92
  "console": "^0.7.2",
93
- "electron": "^32.0.2",
93
+ "electron": "^32.1.0",
94
94
  "electron-prompt": "^1.7.0",
95
95
  "electron-squirrel-startup": "^1.0.1",
96
96
  "electron-tabs": "^1.0.4",
97
97
  "fullname": "^5.0.0",
98
98
  "jquery": "^3.7.1",
99
99
  "jquery-ui-dist": "^1.13.3",
100
- "jstree": "^3.3.16",
100
+ "jstree": "^3.3.17",
101
101
  "material-icons": "^1.13.12",
102
102
  "material-symbols": "^0.23.0",
103
103
  "md5": "^2.3.0",
@@ -109,7 +109,7 @@
109
109
  "string-similarity": "^4.0.4",
110
110
  "tweakpane": "^3.1.10",
111
111
  "update-electron-app": "^3.0.0",
112
- "x_ite": "^10.5.1"
112
+ "x_ite": "^10.5.3"
113
113
  },
114
114
  "config": {
115
115
  "forge": {
@@ -137,7 +137,22 @@ module .exports = class Application
137
137
 
138
138
  set currentFile (currentFile)
139
139
  {
140
- this .#currentFile = currentFile .startsWith ("file:") ? url .fileURLToPath (currentFile) : "";
140
+ const protocol = currentFile .match (/^(.+?:)/);
141
+
142
+ switch (protocol ?.[1])
143
+ {
144
+ default:
145
+ this .#currentFile = new URL (currentFile) .pathname .split ("/") .at (-1);
146
+ break;
147
+ case "file:":
148
+ this .#currentFile = url .fileURLToPath (currentFile);
149
+ break;
150
+ case "data:":
151
+ case "id:":
152
+ case undefined:
153
+ this .#currentFile = "";
154
+ break;
155
+ }
141
156
 
142
157
  this .mainWindow .setRepresentedFilename (this .#currentFile);
143
158
  }
@@ -802,6 +817,11 @@ module .exports = class Application
802
817
  label: _("Using the Script Editor"),
803
818
  click: () => electron .shell .openExternal ("https://create3000.github.io/sunrize/documentation/using-the-script-editor/"),
804
819
  },
820
+ { type: "separator" },
821
+ {
822
+ label: _("Report a Bug"),
823
+ click: () => electron .shell .openExternal ("https://github.com/create3000/sunrize/issues"),
824
+ },
805
825
  ],
806
826
  },
807
827
  ]));
@@ -108,7 +108,7 @@ module .exports = class Document extends Interface
108
108
  // Layout Menu
109
109
 
110
110
  electron .ipcRenderer .on ("browser-frame", () => this .browserFrame .open ());
111
- electron .ipcRenderer .on ("grid-tool", (event, typeName, visible) => this .activateGridTool (typeName, visible));
111
+ electron .ipcRenderer .on ("grid-tool", (event, typeName, visible) => this .activateGridTool (typeName, visible, true));
112
112
  electron .ipcRenderer .on ("grid-options", () => this .showGridOptions ());
113
113
 
114
114
  electron .ipcRenderer .on ("activate-snap-target", (event, visible) => this .activateSnapTarget (visible));
@@ -342,7 +342,7 @@ Viewpoint {
342
342
  }
343
343
  `));
344
344
 
345
- this .activateGridTool ("GridTool", true);
345
+ this .activateGridTool ("GridTool", true, false);
346
346
  }
347
347
  }
348
348
  else
@@ -174,7 +174,7 @@ module .exports = class Interface
174
174
  * @param {string} from path|URL
175
175
  * @param {string} to path|URL
176
176
  */
177
- updateFileConfigs (from, to)
177
+ updateFileConfigs (from = "", to = "")
178
178
  {
179
179
  const
180
180
  fromHash = `.${md5 (from)}.`,
@@ -16,7 +16,7 @@ module .exports = class Traverse
16
16
  static PROTOTYPE_INSTANCES = flags <<= 1;
17
17
  static INLINE_SCENE = flags <<= 1;
18
18
  static ALL = (flags << 1) - 1;
19
-
19
+
20
20
  /**
21
21
  *
22
22
  * @param {X3DScene|X3DExecutionContext|MFNode|Array<SFNode>|SFNode} object
@@ -353,7 +353,7 @@ module .exports = class Traverse
353
353
  case X3D .X3DConstants .MFNode:
354
354
  {
355
355
  for (const node of field)
356
- this .findInNode (node .getValue (), object, flags, hierarchies, hierarchy, seen);
356
+ this .findInNode (node ?.getValue (), object, flags, hierarchies, hierarchy, seen);
357
357
 
358
358
  break;
359
359
  }
@@ -2968,7 +2968,7 @@ module .exports = class OutlineView extends Interface
2968
2968
  const elements = this .sceneGraph .find ("> .root-nodes > ul > li[node-id]");
2969
2969
 
2970
2970
  for (const element of elements)
2971
- this .selectNodeElement ($(element));
2971
+ this .selectNodeElement ($(element), true);
2972
2972
  }
2973
2973
 
2974
2974
  deselectAll ()
@@ -381,6 +381,436 @@ EnvironmentLight {
381
381
  }
382
382
  }
383
383
  `
384
+ },
385
+ {
386
+ componentInfo: { name: "NURBS" },
387
+ typeName: "NurbsCircle2D",
388
+ x3dSyntax: `
389
+ DEF NurbsCircle2D Transform {
390
+ children Shape {
391
+ appearance Appearance {
392
+ material UnlitMaterial { }
393
+ }
394
+ geometry NurbsCurve {
395
+ closed TRUE
396
+ knot [
397
+ 0,
398
+ 0,
399
+ 0,
400
+ 0.25,
401
+ 0.25,
402
+ 0.5,
403
+ 0.5,
404
+ 0.75,
405
+ 0.75,
406
+ 1,
407
+ 1,
408
+ 1
409
+ ]
410
+ weight [
411
+ 1,
412
+ 0.7071067811865476,
413
+ 1,
414
+ 0.7071067811865476,
415
+ 1,
416
+ 0.7071067811865476,
417
+ 1,
418
+ 0.7071067811865476,
419
+ 1
420
+ ]
421
+ controlPoint CoordinateDouble {
422
+ point [
423
+ 1 0 0,
424
+ 0.7071067811865476 -0.7071067811865476 0,
425
+ 0 -1 0,
426
+ -0.7071067811865476 -0.7071067811865476 0,
427
+ -1 0 0,
428
+ -0.7071067811865476 0.7071067811865476 0,
429
+ 0 1 0,
430
+ 0.7071067811865476 0.7071067811865476 0,
431
+ 1 0 0
432
+ ]
433
+ }
434
+ }
435
+ }
436
+ }`
437
+ },
438
+ {
439
+ componentInfo: { name: "NURBS" },
440
+ typeName: "NurbsCylinder",
441
+ x3dSyntax: `
442
+ DEF NurbsCylinder Transform {
443
+ children Shape {
444
+ appearance Appearance {
445
+ material Material { }
446
+ }
447
+ geometry NurbsPatchSurface {
448
+ uClosed TRUE
449
+ vOrder 2
450
+ uDimension 9
451
+ vDimension 2
452
+ uKnot [
453
+ 0,
454
+ 0,
455
+ 0,
456
+ 0.25,
457
+ 0.25,
458
+ 0.5,
459
+ 0.5,
460
+ 0.75,
461
+ 0.75,
462
+ 1,
463
+ 1,
464
+ 1
465
+ ]
466
+ vKnot [
467
+ 0,
468
+ 0,
469
+ 1,
470
+ 1
471
+ ]
472
+ weight [
473
+ 1,
474
+ 0.707106781186548,
475
+ 1,
476
+ 0.707106781186548,
477
+ 1,
478
+ 0.707106781186548,
479
+ 1,
480
+ 0.707106781186548,
481
+ 1,
482
+ 1,
483
+ 0.707106781186548,
484
+ 1,
485
+ 0.707106781186548,
486
+ 1,
487
+ 0.707106781186548,
488
+ 1,
489
+ 0.707106781186548,
490
+ 1
491
+ ]
492
+ controlPoint CoordinateDouble {
493
+ point [
494
+ 1 -1 0,
495
+ 0.707106781186548 -0.707106781186548 -0.707106781186548,
496
+ 0 -1 -1,
497
+ -0.707106781186548 -0.707106781186548 -0.707106781186548,
498
+ -1 -1 0,
499
+ -0.707106781186548 -0.707106781186548 0.707106781186548,
500
+ 0 -1 1,
501
+ 0.707106781186548 -0.707106781186548 0.707106781186548,
502
+ 1 -1 0,
503
+ 1 1 0,
504
+ 0.707106781186548 0.707106781186548 -0.707106781186548,
505
+ 0 1 -1,
506
+ -0.707106781186548 0.707106781186548 -0.707106781186548,
507
+ -1 1 0,
508
+ -0.707106781186548 0.707106781186548 0.707106781186548,
509
+ 0 1 1,
510
+ 0.707106781186548 0.707106781186548 0.707106781186548,
511
+ 1 1 0
512
+ ]
513
+ }
514
+ }
515
+ }
516
+ }`
517
+ },
518
+ {
519
+ componentInfo: { name: "NURBS" },
520
+ typeName: "NurbsDisk2D",
521
+ x3dSyntax: `
522
+ DEF NurbsDisk2D Transform {
523
+ children Shape {
524
+ appearance Appearance {
525
+ material Material { }
526
+ }
527
+ geometry NurbsPatchSurface {
528
+ solid FALSE
529
+ uDimension 3
530
+ vDimension 3
531
+ weight [
532
+ 1,
533
+ 0.707106781186548,
534
+ 1,
535
+ 0.707106781186548,
536
+ 1,
537
+ 0.707106781186548,
538
+ 1,
539
+ 0.707106781186548,
540
+ 1
541
+ ]
542
+ controlPoint CoordinateDouble {
543
+ point [
544
+ -0.707106781186548 -0.707106781186548 0,
545
+ 0 -1 0,
546
+ 0.707106781186548 -0.707106781186548 0,
547
+ -1 0 0,
548
+ 0 0 0,
549
+ 1 0 0,
550
+ -0.707106781186548 0.707106781186548 0,
551
+ 0 1 0,
552
+ 0.707106781186548 0.707106781186548 0
553
+ ]
554
+ }
555
+ }
556
+ }
557
+ }`,
558
+ },
559
+ {
560
+ componentInfo: { name: "NURBS" },
561
+ typeName: "NurbsCone",
562
+ x3dSyntax: `
563
+ DEF NurbsCone Transform {
564
+ children Shape {
565
+ appearance Appearance {
566
+ material Material { }
567
+ }
568
+ geometry NurbsPatchSurface {
569
+ uClosed TRUE
570
+ vOrder 2
571
+ uDimension 9
572
+ vDimension 2
573
+ uKnot [
574
+ 0,
575
+ 0,
576
+ 0,
577
+ 0.25,
578
+ 0.25,
579
+ 0.5,
580
+ 0.5,
581
+ 0.75,
582
+ 0.75,
583
+ 1,
584
+ 1,
585
+ 1
586
+ ]
587
+ vKnot [
588
+ 0,
589
+ 0,
590
+ 1,
591
+ 1
592
+ ]
593
+ weight [
594
+ 1,
595
+ 0.707106781186548,
596
+ 1,
597
+ 0.707106781186548,
598
+ 1,
599
+ 0.707106781186548,
600
+ 1,
601
+ 0.707106781186548,
602
+ 1,
603
+ 1,
604
+ 0.707106781186548,
605
+ 1,
606
+ 0.707106781186548,
607
+ 1,
608
+ 0.707106781186548,
609
+ 1,
610
+ 0.707106781186548,
611
+ 1
612
+ ]
613
+ controlPoint CoordinateDouble {
614
+ point [
615
+ 1 -1 0,
616
+ 0.707106781186548 -0.707106781186548 -0.707106781186548,
617
+ 0 -1 -1,
618
+ -0.707106781186548 -0.707106781186548 -0.707106781186548,
619
+ -1 -1 0,
620
+ -0.707106781186548 -0.707106781186548 0.707106781186548,
621
+ 0 -1 1,
622
+ 0.707106781186548 -0.707106781186548 0.707106781186548,
623
+ 1 -1 0,
624
+ 0 1 0,
625
+ 0 0.707106781186548 0,
626
+ 0 1 0,
627
+ 0 0.707106781186548 0,
628
+ 0 1 0,
629
+ 0 0.707106781186548 0,
630
+ 0 1 0,
631
+ 0 0.707106781186548 0,
632
+ 0 1 0
633
+ ]
634
+ }
635
+ }
636
+ }
637
+ }`
638
+ },
639
+ {
640
+ componentInfo: { name: "NURBS" },
641
+ typeName: "NurbsRectangle2D",
642
+ x3dSyntax: `
643
+ DEF NurbsRectangle2D Transform {
644
+ children Shape {
645
+ appearance Appearance {
646
+ material Material { }
647
+ }
648
+ geometry NurbsPatchSurface {
649
+ solid FALSE
650
+ uOrder 2
651
+ vOrder 2
652
+ uDimension 2
653
+ vDimension 2
654
+ uKnot [
655
+ -1,
656
+ -1,
657
+ 1,
658
+ 1
659
+ ]
660
+ vKnot [
661
+ -1,
662
+ -1,
663
+ 1,
664
+ 1
665
+ ]
666
+ controlPoint CoordinateDouble {
667
+ point [
668
+ -1 -1 0,
669
+ 1 -1 0,
670
+ -1 1 0,
671
+ 1 1 0
672
+ ]
673
+ }
674
+ }
675
+ }
676
+ }`
677
+ },
678
+ {
679
+ componentInfo: { name: "NURBS" },
680
+ typeName: "NurbsSphere",
681
+ x3dSyntax: `
682
+ DEF NurbsSphere Transform {
683
+ children Shape {
684
+ appearance Appearance {
685
+ material Material { }
686
+ }
687
+ geometry NurbsPatchSurface {
688
+ uClosed TRUE
689
+ uDimension 9
690
+ vDimension 5
691
+ uKnot [
692
+ 0,
693
+ 0,
694
+ 0,
695
+ 0.25,
696
+ 0.25,
697
+ 0.5,
698
+ 0.5,
699
+ 0.75,
700
+ 0.75,
701
+ 1,
702
+ 1,
703
+ 1
704
+ ]
705
+ vKnot [
706
+ 0,
707
+ 0,
708
+ 0,
709
+ 0.5,
710
+ 0.5,
711
+ 1,
712
+ 1,
713
+ 1
714
+ ]
715
+ weight [
716
+ 1,
717
+ 0.707106781186548,
718
+ 1,
719
+ 0.707106781186548,
720
+ 1,
721
+ 0.707106781186548,
722
+ 1,
723
+ 0.707106781186548,
724
+ 1,
725
+ 0.707106781186548,
726
+ 0.5,
727
+ 0.707106781186548,
728
+ 0.5,
729
+ 0.707106781186548,
730
+ 0.5,
731
+ 0.707106781186548,
732
+ 0.5,
733
+ 0.707106781186548,
734
+ 1,
735
+ 0.707106781186548,
736
+ 1,
737
+ 0.707106781186548,
738
+ 1,
739
+ 0.707106781186548,
740
+ 1,
741
+ 0.707106781186548,
742
+ 1,
743
+ 0.707106781186548,
744
+ 0.5,
745
+ 0.707106781186548,
746
+ 0.5,
747
+ 0.707106781186548,
748
+ 0.5,
749
+ 0.707106781186548,
750
+ 0.5,
751
+ 0.707106781186548,
752
+ 1,
753
+ 0.707106781186548,
754
+ 1,
755
+ 0.707106781186548,
756
+ 1,
757
+ 0.707106781186548,
758
+ 1,
759
+ 0.707106781186548,
760
+ 1
761
+ ]
762
+ controlPoint CoordinateDouble {
763
+ point [
764
+ 0 -1 0,
765
+ 0 -0.707106781186548 0,
766
+ 0 -1 0,
767
+ 0 -0.707106781186548 0,
768
+ 0 -1 0,
769
+ 0 -0.707106781186548 0,
770
+ 0 -1 0,
771
+ 0 -0.707106781186548 0,
772
+ 0 -1 0,
773
+ 0 -0.707106781186548 -0.707106781186548,
774
+ -0.5 -0.5 -0.5,
775
+ -0.707106781186548 -0.707106781186548 0,
776
+ -0.5 -0.5 0.5,
777
+ 0 -0.707106781186548 0.707106781186548,
778
+ 0.5 -0.5 0.5,
779
+ 0.707106781186548 -0.707106781186548 0,
780
+ 0.5 -0.5 -0.5,
781
+ 0 -0.707106781186548 -0.707106781186548,
782
+ 0 0 -1,
783
+ -0.707106781186548 0 -0.707106781186548,
784
+ -1 0 0,
785
+ -0.707106781186548 0 0.707106781186548,
786
+ 0 0 1,
787
+ 0.707106781186548 0 0.707106781186548,
788
+ 1 0 0,
789
+ 0.707106781186548 0 -0.707106781186548,
790
+ 0 0 -1,
791
+ 0 0.707106781186548 -0.707106781186548,
792
+ -0.5 0.5 -0.5,
793
+ -0.707106781186548 0.707106781186548 0,
794
+ -0.5 0.5 0.5,
795
+ 0 0.707106781186548 0.707106781186548,
796
+ 0.5 0.5 0.5,
797
+ 0.707106781186548 0.707106781186548 0,
798
+ 0.5 0.5 -0.5,
799
+ 0 0.707106781186548 -0.707106781186548,
800
+ 0 1 0,
801
+ 0 0.707106781186548 0,
802
+ 0 1 0,
803
+ 0 0.707106781186548 0,
804
+ 0 1 0,
805
+ 0 0.707106781186548 0,
806
+ 0 1 0,
807
+ 0 0.707106781186548 0,
808
+ 0 1 0
809
+ ]
810
+ }
811
+ }
812
+ }
813
+ }`,
384
814
  },
385
815
  {
386
816
  componentInfo: { name: "Text" },
@@ -10,8 +10,6 @@ class X3DActiveLayerNodeTool extends X3DChildNodeTool
10
10
  {
11
11
  const node = executionContext .createNode ("Group", false);
12
12
 
13
- node ._visible = false;
14
-
15
13
  node .setup ();
16
14
 
17
15
  super (node);
@@ -21,6 +21,13 @@ const X3DParametricGeometryNodeTool = Base => class extends Base
21
21
  this .addExternalNode (this .node ._controlPoint);
22
22
  }
23
23
 
24
+ disposeTool ()
25
+ {
26
+ this .node ._rebuild .removeInterest ("set_toolRebuildParametricGeometry", this);
27
+
28
+ super .disposeTool ();
29
+ }
30
+
24
31
  set_toolRebuildParametricGeometry ()
25
32
  {
26
33
  const
@@ -2700,6 +2700,8 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
2700
2700
  return new X3D .Box3 (X3D .Vector3 .One, innerNode ._position .getValue ())
2701
2701
  .multLeft (new X3D .Matrix4 () .setRotation (innerNode ._orientation .getValue ()))
2702
2702
  .multRight (modelMatrix);
2703
+ case X3D .X3DConstants .X3DLayerNode:
2704
+ return innerNode .getBBox (new X3D .Box3 ());
2703
2705
  default:
2704
2706
  continue;
2705
2707
  }
@@ -3335,6 +3337,7 @@ ${scene .toXMLString ({ html: true, indent: " " .repeat (6) }) .trimEnd () }
3335
3337
  break;
3336
3338
  }
3337
3339
  case X3D .X3DConstants .Coordinate:
3340
+ case X3D .X3DConstants .CoordinateDouble:
3338
3341
  {
3339
3342
  const point = node ._point
3340
3343
  .map (p => this .roundToIntegerIfAlmostEqual (modelMatrix .multVecMatrix (p .getValue () .copy ())));