Normand Briere
2019-04-28 f1c718cce66e5651a0dae91375db6ebfaded1a92
GroupEditor.java
....@@ -14,7 +14,7 @@
1414
1515 //import buoy.widget.BFileChooser;
1616
17
-class GroupEditor extends ObjEditor implements iParse, //iCallBack,
17
+class GroupEditor extends ObjEditor implements //iParse, //iCallBack,
1818 ObjectUI,
1919 Runnable,
2020 ActionListener,
....@@ -83,7 +83,7 @@
8383
8484 void CloneSelection(boolean supports)
8585 {
86
- // Object3D keep = GraphreeD.clipboard;
86
+ // Object3D keep = GrafreeD.clipboard;
8787 //Object3D obj;
8888 for (int i=0; i<group.selection.size(); i++)// Enumeration e = group.selection.elements(); e.hasMoreElements();)
8989 {
....@@ -97,14 +97,14 @@
9797
9898 void CloneClipboard(boolean supports)
9999 {
100
- assert(GraphreeD.clipboard.parent == null);
101
- Object3D /*Composite*/ keepparent = GraphreeD.clipboard.get(0).parent;
102
- GraphreeD.clipboard.get(0).parent = null; // Avoid copy?
103
- if (LA.isIdentity(GraphreeD.clipboard.toParent))
104
- makeSomething(CloneObject(GraphreeD.clipboard.get(0), false));
100
+ assert(GrafreeD.clipboard.parent == null);
101
+ Object3D /*Composite*/ keepparent = GrafreeD.clipboard.get(0).parent;
102
+ GrafreeD.clipboard.get(0).parent = null; // Avoid copy?
103
+ if (LA.isIdentity(GrafreeD.clipboard.toParent))
104
+ makeSomething(CloneObject(GrafreeD.clipboard.get(0), false));
105105 else
106
- makeSomething(CloneObject(GraphreeD.clipboard, false));
107
- GraphreeD.clipboard.get(0).parent = keepparent;
106
+ makeSomething(CloneObject(GrafreeD.clipboard, false));
107
+ GrafreeD.clipboard.get(0).parent = keepparent;
108108 }
109109
110110 static Object3D CloneObject(Object3D obj, boolean supports)
....@@ -118,7 +118,7 @@
118118 // obj.support = null;
119119 if (!supports)
120120 obj.SaveSupports();
121
- Object3D clone = (Object3D)GraphreeD.clone(obj);
121
+ Object3D clone = (Object3D)GrafreeD.clone(obj);
122122 obj.parent = parent;
123123 // obj.support = support;
124124 // clone.support = support; // aout 2013
....@@ -188,8 +188,9 @@
188188 clearItem.addActionListener(this);
189189 clearAllItem = menu.add(new MenuItem("Clear All"));
190190 clearAllItem.addActionListener(this);
191
- menu.add("-");
192
- resetMeshItem = menu.add(new MenuItem("Reset All"));
191
+
192
+ oe.menuBar.add(menu = new Menu("Setting"));
193
+ resetMeshItem = menu.add(new MenuItem("Reset All"));
193194 resetMeshItem.addActionListener(this);
194195 stepAllItem = menu.add(new MenuItem("Step All"));
195196 stepAllItem.addActionListener(this);
....@@ -218,18 +219,24 @@
218219 resetsupportItem.addActionListener(this);
219220 linkverticesItem = menu.add(new MenuItem("Link to Support"));
220221 linkverticesItem.addActionListener(this);
222
+ relinkverticesItem = menu.add(new MenuItem("Re-link to Support"));
223
+ relinkverticesItem.addActionListener(this);
221224 setMasterItem = menu.add(new MenuItem("Set Master Mesh"));
222225 setMasterItem.addActionListener(this);
223226
224
- oe.menuBar.add(menu = new Menu("Object"));
227
+ oe.menuBar.add(menu = new Menu("Group"));
225228 grabItem = menu.add(new MenuItem("Grab"));
226229 grabItem.addActionListener(this);
227
- frontItem = menu.add(new MenuItem("Front"));
228
- frontItem.addActionListener(this);
229230 backItem = menu.add(new MenuItem("Back"));
230231 backItem.addActionListener(this);
232
+ frontItem = menu.add(new MenuItem("Front"));
233
+ frontItem.addActionListener(this);
231234 compositeItem = menu.add(new MenuItem("Composite"));
232235 compositeItem.addActionListener(this);
236
+ hideItem = menu.add(new MenuItem("Hide"));
237
+ hideItem.addActionListener(this);
238
+ ungroupItem = menu.add(new MenuItem("Ungroup"));
239
+ ungroupItem.addActionListener(this);
233240 menu.add("-");
234241 randomItem = menu.add(new MenuItem("Random"));
235242 randomItem.addActionListener(this);
....@@ -247,9 +254,12 @@
247254 scriptNodeItem.addActionListener(this);
248255 cameraItem = menu.add(new MenuItem("Camera"));
249256 cameraItem.addActionListener(this);
250
- menu.add("-");
257
+
258
+ oe.menuBar.add(menu = new Menu("Object"));
251259 textureItem = menu.add(new MenuItem("Texture"));
252260 textureItem.addActionListener(this);
261
+ billboardItem = menu.add(new MenuItem("Billboard"));
262
+ billboardItem.addActionListener(this);
253263 csgItem = menu.add(new MenuItem("CSG"));
254264 csgItem.addActionListener(this);
255265 shadowXItem = menu.add(new MenuItem("Shadow X"));
....@@ -267,14 +277,12 @@
267277 pointflowItem = menu.add(new MenuItem("Point Flow"));
268278 pointflowItem.addActionListener(this);
269279 menu.add("-");
270
- transformgeometryItem = menu.add(new MenuItem("Transform Geometry"));
271
- transformgeometryItem.addActionListener(this);
272280 resetTransformItem = menu.add(new MenuItem("Reset Transform"));
273281 resetTransformItem.addActionListener(this);
274282 resetCentroidItem = menu.add(new MenuItem("Reset Centroid"));
275283 resetCentroidItem.addActionListener(this);
276
- ungroupItem = menu.add(new MenuItem("Ungroup"));
277
- ungroupItem.addActionListener(this);
284
+ transformgeometryItem = menu.add(new MenuItem("Transform Geometry"));
285
+ transformgeometryItem.addActionListener(this);
278286
279287 oe.menuBar.add(menu = new Menu("Geometry"));
280288 genUVItem = menu.add(new MenuItem("Generate UV"));
....@@ -283,6 +291,10 @@
283291 genNormalsORGANItem.addActionListener(this);
284292 genNormalsCADItem = menu.add(new MenuItem("CAD Normals"));
285293 genNormalsCADItem.addActionListener(this);
294
+ genNormalsMESHItem = menu.add(new MenuItem("Mesh Normals"));
295
+ genNormalsMESHItem.addActionListener(this);
296
+ genNormalsMINEItem = menu.add(new MenuItem("My Normals"));
297
+ genNormalsMINEItem.addActionListener(this);
286298 stripifyItem = menu.add(new MenuItem("Stripify"));
287299 stripifyItem.addActionListener(this);
288300 unstripifyItem = menu.add(new MenuItem("Unstripify"));
....@@ -292,8 +304,6 @@
292304 untrimItem = menu.add(new MenuItem("Untrim"));
293305 untrimItem.addActionListener(this);
294306 menu.add("-");
295
- clearMaterialsItem = menu.add(new MenuItem("Clear Materials"));
296
- clearMaterialsItem.addActionListener(this);
297307 clearColorsItem = menu.add(new MenuItem("Clear AO"));
298308 clearColorsItem.addActionListener(this);
299309 reverseNormalsItem = menu.add(new MenuItem("Reverse Normals"));
....@@ -310,6 +320,10 @@
310320 smoothMeshItem.addActionListener(this);
311321 clipMeshItem = menu.add(new MenuItem("Clip mesh"));
312322 clipMeshItem.addActionListener(this);
323
+
324
+ oe.menuBar.add(menu = new Menu("Attributes"));
325
+ clearMaterialsItem = menu.add(new MenuItem("Clear Materials"));
326
+ clearMaterialsItem.addActionListener(this);
313327 menu.add("-");
314328 liveleavesItem = menu.add(new MenuItem("Live Leaves"));
315329 liveleavesItem.addActionListener(this);
....@@ -332,27 +346,18 @@
332346 flipVItem.addActionListener(this);
333347 unflipVItem = menu.add(new MenuItem("Unflip V"));
334348 unflipVItem.addActionListener(this);
335
- lowTexturesItem = menu.add(new MenuItem("Low Texture"));
349
+ lowTexturesItem = menu.add(new MenuItem("Low Texture (256)"));
336350 lowTexturesItem.addActionListener(this);
337
- normalTexturesItem = menu.add(new MenuItem("Normal Texture"));
351
+ normalTexturesItem = menu.add(new MenuItem("Normal Texture (512)"));
338352 normalTexturesItem.addActionListener(this);
339
- highTexturesItem = menu.add(new MenuItem("High Texture"));
353
+ highTexturesItem = menu.add(new MenuItem("High Texture (1024)"));
340354 highTexturesItem.addActionListener(this);
341
- veryhighTexturesItem = menu.add(new MenuItem("Very high Texture"));
355
+ veryhighTexturesItem = menu.add(new MenuItem("Very high Texture (2048)"));
342356 veryhighTexturesItem.addActionListener(this);
343
- maxTexturesItem = menu.add(new MenuItem("Max Texture"));
357
+ maxTexturesItem = menu.add(new MenuItem("Max Texture (4096)"));
344358 maxTexturesItem.addActionListener(this);
345
- panoTexturesItem = menu.add(new MenuItem("Panoramic Texture"));
359
+ panoTexturesItem = menu.add(new MenuItem("Panoramic Texture (8192)"));
346360 panoTexturesItem.addActionListener(this);
347
- menu.add("-");
348
- extractGeometriesItem = menu.add(new MenuItem("Link Geometry"));
349
- extractGeometriesItem.addActionListener(this);
350
- cloneGeometriesItem = menu.add(new MenuItem("Clone Geometry"));
351
- cloneGeometriesItem.addActionListener(this);
352
- shareGeometriesItem = menu.add(new MenuItem("Share Geometry"));
353
- shareGeometriesItem.addActionListener(this);
354
- mergeGeometriesItem = menu.add(new MenuItem("Merge Geometry"));
355
- mergeGeometriesItem.addActionListener(this);
356361
357362 oe.menuBar.add(menu = new Menu("Selection"));
358363 attachPigmentItem = menu.add(new MenuItem("Attach Pigment..."));
....@@ -370,9 +375,31 @@
370375 sortbysizeItem.addActionListener(this);
371376 sortbynameItem = menu.add(new MenuItem("Sort by name"));
372377 sortbynameItem.addActionListener(this);
378
+ menu.add("-");
379
+ extractGeometriesItem = menu.add(new MenuItem("Link Geometry"));
380
+ extractGeometriesItem.addActionListener(this);
381
+ cloneGeometriesItem = menu.add(new MenuItem("Clone Geometry"));
382
+ cloneGeometriesItem.addActionListener(this);
383
+ shareGeometriesItem = menu.add(new MenuItem("Share Geometry"));
384
+ shareGeometriesItem.addActionListener(this);
385
+ mergeGeometriesItem = menu.add(new MenuItem("Merge Geometry"));
386
+ mergeGeometriesItem.addActionListener(this);
387
+
373388 oe.menuBar.add(menu = new Menu("Insert"));
374389 buildCreateMenu(menu);
375
- oe.menuBar.add(menu = new Menu("Tools"));
390
+
391
+
392
+ oe.menuBar.add(menu = new Menu("Include"));
393
+ importGFDItem = menu.add(new MenuItem("GrafreeD Object..."));
394
+ importGFDItem.addActionListener(this);
395
+ importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D Object..."));
396
+ importVRMLX3DItem.addActionListener(this);
397
+ importOBJItem = menu.add(new MenuItem("OBJ Object..."));
398
+ importOBJItem.addActionListener(this);
399
+ import3DSItem = menu.add(new MenuItem("3DS Object..."));
400
+ import3DSItem.addActionListener(this);
401
+
402
+ oe.menuBar.add(menu = new Menu("Tools"));
376403 buildToolsMenu(menu);
377404 }
378405
....@@ -410,11 +437,17 @@
410437 oe.aConstraints.gridwidth = 1;
411438 oe.aConstraints.gridx = 0;
412439
413
- oe.toolbarPanel.add(liveCB = new cCheckBox("Live", CameraPane.isLIVE()), oe.aConstraints);
440
+ oe.toolbarPanel.add(liveCB = new cCheckBox("Live", Globals.isLIVE()), oe.aConstraints);
441
+ liveCB.setToolTipText("Enabled animation");
414442 liveCB.addItemListener(this);
415443
416444 oe.aConstraints.gridx += 1;
445
+ oe.toolbarPanel.add(fastCB = new cCheckBox("Fast", CameraPane.FAST), oe.aConstraints);
446
+ fastCB.setToolTipText("Fast mode");
447
+ fastCB.addItemListener(this);
448
+ oe.aConstraints.gridx += 1;
417449 oe.toolbarPanel.add(supportCB = new cCheckBox("Support", CameraPane.SUPPORT), oe.aConstraints);
450
+ supportCB.setToolTipText("Enabled rigging");
418451 supportCB.addItemListener(this);
419452
420453 // oe.aConstraints.gridx += 1;
....@@ -422,22 +455,27 @@
422455 // localCB.addItemListener(this);
423456
424457 oe.aConstraints.gridx += 1;
425
- oe.toolbarPanel.add(crowdCB = new cCheckBox("Crowd", CameraPane.CROWD), oe.aConstraints);
458
+ oe.toolbarPanel.add(crowdCB = new cCheckBox("Crowd", Globals.CROWD), oe.aConstraints);
459
+ crowdCB.setToolTipText("Used for crowds");
426460 crowdCB.addItemListener(this);
427461
428462 oe.aConstraints.gridx += 1;
429463 oe.toolbarPanel.add(smoothCB = new cCheckBox("Inertia", CameraPane.INERTIA), oe.aConstraints);
464
+ smoothCB.setToolTipText("Snapping delay");
430465 smoothCB.addItemListener(this);
431466
432467 oe.aConstraints.gridx += 1;
433
- oe.toolbarPanel.add(fastCB = new cCheckBox("Fast", CameraPane.FAST), oe.aConstraints);
434
- fastCB.addItemListener(this);
435
- oe.aConstraints.gridx += 1;
436468 oe.toolbarPanel.add(slowCB = new cCheckBox("Slow", CameraPane.SLOWPOSE), oe.aConstraints);
469
+ slowCB.setToolTipText("Smooth interpolation");
437470 slowCB.addItemListener(this);
438471 oe.aConstraints.gridx += 1;
439
- oe.toolbarPanel.add(boxCB = new cCheckBox("Box", CameraPane.FAST), oe.aConstraints);
472
+ oe.toolbarPanel.add(boxCB = new cCheckBox("Box", CameraPane.BOXMODE), oe.aConstraints);
473
+ boxCB.setToolTipText("Display bounding boxes");
440474 boxCB.addItemListener(this);
475
+ oe.aConstraints.gridx += 1;
476
+ oe.toolbarPanel.add(zoomBoxCB = new cCheckBox("Zoom", CameraPane.ZOOMBOXMODE), oe.aConstraints);
477
+ zoomBoxCB.setToolTipText("Display bounding boxes when moving the wheel");
478
+ zoomBoxCB.addItemListener(this);
441479
442480 // oe.aConstraints.gridx += 1;
443481 // oe.toolbarPanel.add(speakerMocapCB = new cCheckBox("Mocap", CameraPane.SPEAKERMOCAP), oe.aConstraints);
....@@ -464,19 +502,22 @@
464502 // debugCB.addItemListener(this);
465503
466504 oe.aConstraints.gridx += 1;
467
- oe.toolbarPanel.add(oeilCB = new cCheckBox("O", CameraPane.OEIL), oe.aConstraints);
505
+ oe.toolbarPanel.add(oeilCB = new cCheckBox("Eye", CameraPane.OEIL), oe.aConstraints);
468506 oeilCB.addItemListener(this);
469507
470508 oe.aConstraints.gridx += 1;
471
- oe.toolbarPanel.add(lookAtCB = new cCheckBox("T", CameraPane.LOOKAT), oe.aConstraints);
509
+ oe.toolbarPanel.add(lookAtCB = new cCheckBox("Target", CameraPane.LOOKAT), oe.aConstraints);
510
+ lookAtCB.setToolTipText("Look-at target");
472511 lookAtCB.addItemListener(this);
473512
474513 oe.aConstraints.gridx += 1;
475514 oe.toolbarPanel.add(trackCB = new cCheckBox(":", CameraPane.TRACK), oe.aConstraints);
515
+ trackCB.setToolTipText("Enable tracking");
476516 trackCB.addItemListener(this);
477517
478518 oe.aConstraints.gridx += 1;
479519 oe.toolbarPanel.add(screenfitButton = new cButton("@ ")); //, oe.aConstraints);
520
+ screenfitButton.setToolTipText("Screen fit");
480521 screenfitButton.addActionListener(this);
481522 oe.aConstraints.gridx += 1;
482523 // oe.toolbarPanel.add(screenfitpointButton = new cButton(" @+ ")); //, oe.aConstraints);
....@@ -484,6 +525,7 @@
484525 // oe.aConstraints.gridx += 1;
485526 oe.toolbarPanel.add(snapobjectButton = new cButton(" O+ ")); //, oe.aConstraints);
486527 snapobjectButton.addActionListener(this);
528
+ snapobjectButton.setToolTipText("Snap Object");
487529 oe.aConstraints.gridx += 1;
488530
489531 //aConstraints.gridx = 0;
....@@ -492,28 +534,39 @@
492534 oe.aConstraints.gridwidth = 1;
493535
494536 oe.toolbarPanel.add(flashSelectionButton = new cButton(" ? ")); //, oe.aConstraints);
537
+ flashSelectionButton.setToolTipText("Show selection");
495538 flashSelectionButton.addActionListener(this);
539
+
540
+ oe.toolbarPanel.add(new cButton(" ", false));
541
+
496542 oe.aConstraints.gridx += 1;
497543 oe.aConstraints.weighty = 0;
498544 oe.aConstraints.gridwidth = 1;
499545
500546 //
501547 oe.toolbarPanel.add(twoButton = new cButton(" |+| ")); //, oe.aConstraints);
548
+ twoButton.setToolTipText("Show center view only");
502549 twoButton.addActionListener(this);
503550 oe.toolbarPanel.add(fourButton = new cButton("+|| ")); //, oe.aConstraints);
504551 fourButton.addActionListener(this);
552
+ fourButton.setToolTipText("Show left panel only");
505553 oe.toolbarPanel.add(sixButton = new cButton("+|+| ")); //, oe.aConstraints);
554
+ sixButton.setToolTipText("2-column layout left");
506555 sixButton.addActionListener(this);
507556 oe.toolbarPanel.add(threeButton = new cButton(" |+|+")); //, oe.aConstraints);
557
+ threeButton.setToolTipText("2-column layout right");
508558 threeButton.addActionListener(this);
509559 oe.toolbarPanel.add(sevenButton = new cButton("+|+|+")); //, oe.aConstraints);
560
+ sevenButton.setToolTipText("3-column layout");
510561 sevenButton.addActionListener(this);
511562 //
512563
513
- oe.toolbarPanel.add(rootButton = new cButton(" o o o E ")); //, oe.aConstraints);
564
+ oe.toolbarPanel.add(rootButton = new cButton(" o o o ")); //, oe.aConstraints);
565
+ rootButton.setToolTipText("Edit object in new tab");
514566 rootButton.addActionListener(this);
515567 oe.aConstraints.gridx += 1;
516568 oe.toolbarPanel.add(closeButton = new cButton(" X ")); //, oe.aConstraints);
569
+ closeButton.setToolTipText("Close tab");
517570 closeButton.addActionListener(this);
518571 //oe.treePanel.add(clearButton = new cButton("X"), oe.aConstraints);
519572 //clearButton.addActionListener(this);
....@@ -619,14 +672,14 @@
619672
620673 void EditObject(Object3D obj)
621674 {
622
- cRadio dummyButton = new cRadio(obj.name);
623
- dummyButton.SetObject(obj);
624
- dummyButton.layout = sevenButton;
625
- dummyButton.SetCamera(cameraView.renderCamera, false);
626
- dummyButton.addActionListener(this);
627
- radioPanel.add(dummyButton);
628
- buttonGroup.add(dummyButton);
629
- dummyButton.doClick();
675
+ cRadio radioButton = new cRadio(obj.name);
676
+ radioButton.SetObject(obj);
677
+ radioButton.layout = sevenButton;
678
+ radioButton.SetCamera(cameraView.renderCamera, false);
679
+ radioButton.addActionListener(this);
680
+ radioPanel.add(radioButton);
681
+ buttonGroup.add(radioButton);
682
+ radioButton.doClick();
630683 }
631684 void SetupViews(ObjEditor oe)
632685 {
....@@ -646,6 +699,7 @@
646699 JCheckBox fastCB;
647700 JCheckBox slowCB;
648701 JCheckBox boxCB;
702
+ JCheckBox zoomBoxCB;
649703 JCheckBox trackCB;
650704 JCheckBox smoothfocusCB;
651705 // JCheckBox speakerMocapCB;
....@@ -688,8 +742,7 @@
688742 dropAttributes |= Object3D.TEXTURE;
689743 else
690744 dropAttributes &= ~Object3D.TEXTURE;
691
- }
692
- else if(e.getSource() == liveCB)
745
+ } else if(e.getSource() == liveCB)
693746 {
694747 cameraView.ToggleLive();
695748 }
....@@ -726,6 +779,10 @@
726779 Recompile();
727780 cameraView.repaint();
728781 // refreshContents();
782
+ }
783
+ else if(e.getSource() == zoomBoxCB)
784
+ {
785
+ cameraView.ToggleZoomBoxMode();
729786 }
730787 else if(e.getSource() == smoothfocusCB)
731788 {
....@@ -1002,6 +1059,8 @@
10021059
10031060 void buildCreateMenu(Menu menu)
10041061 {
1062
+ //heightFieldItem = menu.add(new MenuItem("Height Field"));
1063
+ //heightFieldItem.addActionListener(this);
10051064 gridItem = menu.add(new MenuItem("Grid"));
10061065 gridItem.addActionListener(this);
10071066 rectoidItem = menu.add(new MenuItem("Box"));
....@@ -1014,6 +1073,8 @@
10141073 torusItem.addActionListener(this);
10151074 superItem = menu.add(new MenuItem("Superellipsoid"));
10161075 superItem.addActionListener(this);
1076
+ kleinItem = menu.add(new MenuItem("Klein Bottle"));
1077
+ kleinItem.addActionListener(this);
10171078 particleItem = menu.add(new MenuItem("Particle system"));
10181079 particleItem.addActionListener(this);
10191080 ragdollItem = menu.add(new MenuItem("Rag Walk"));
....@@ -1048,15 +1109,6 @@
10481109 doubleItem.addActionListener(this);
10491110 tripleItem = menu.add(new MenuItem("Trident"));
10501111 tripleItem.addActionListener(this);
1051
- menu.add("-");
1052
- importGFDItem = menu.add(new MenuItem("GraphreeD Object..."));
1053
- importGFDItem.addActionListener(this);
1054
- importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D Object..."));
1055
- importVRMLX3DItem.addActionListener(this);
1056
- importOBJItem = menu.add(new MenuItem("OBJ Object..."));
1057
- importOBJItem.addActionListener(this);
1058
- import3DSItem = menu.add(new MenuItem("3DS Object..."));
1059
- import3DSItem.addActionListener(this);
10601112 }
10611113
10621114 void buildToolsMenu(Menu menu)
....@@ -1068,6 +1120,8 @@
10681120 menu.add("-");
10691121 parseverticesItem = menu.add(new MenuItem("Multiplicity"));
10701122 parseverticesItem.addActionListener(this);
1123
+ textureFieldItem = menu.add(new MenuItem("Texture Field"));
1124
+ textureFieldItem.addActionListener(this);
10711125 alignItem = menu.add(new MenuItem("Align"));
10721126 alignItem.addActionListener(this);
10731127 mirrorItem = menu.add(new MenuItem("Mirror Poses"));
....@@ -1094,6 +1148,8 @@
10941148 resetParentItem.addActionListener(this);
10951149 repairParentItem = menu.add(new MenuItem("Repair Parent"));
10961150 repairParentItem.addActionListener(this);
1151
+ repairShadowItem = menu.add(new MenuItem("Repair Shadow"));
1152
+ repairShadowItem.addActionListener(this);
10971153 menu.add(invariantsItem = new MenuItem("Invariants"));
10981154 invariantsItem.addActionListener(this);
10991155 menu.add(recompileItem = new MenuItem("Recompile"));
....@@ -1429,9 +1485,9 @@
14291485
14301486 void Overwrite(int mask)
14311487 {
1432
- if (/*group.selection.size() == 1 &&*/ GraphreeD.clipboard.size() == 1)
1488
+ if (/*group.selection.size() == 1 &&*/ GrafreeD.clipboard.size() == 1)
14331489 {
1434
- Object3D content = GraphreeD.clipboard.get(0);
1490
+ Object3D content = GrafreeD.clipboard.get(0);
14351491
14361492 if (content instanceof cGroup && ((cGroup)content).transientlink )
14371493 content = ((cGroup)content).get(0);
....@@ -1521,6 +1577,46 @@
15211577 makeSomething(ragdoll);
15221578 //makeSomething(new VehicleDemo());
15231579 } else
1580
+ /*
1581
+ */
1582
+ if (event.getSource() == heightFieldItem)
1583
+ {
1584
+ Object3D obj = new Object3D();
1585
+
1586
+ obj.CreateMaterial();
1587
+ obj.bRep = new BoundaryRep();
1588
+
1589
+ obj.bRep.CreateMesh(new iHeightField()
1590
+ {
1591
+ public double f(double x, double y)
1592
+ {
1593
+ // The Mandelbrot set is represented by coloring
1594
+ // each point (x,y) according to the number of
1595
+ // iterations it takes before the while loop in
1596
+ // this method ends. For points that are actually
1597
+ // in the Mandelbrot set, or very close to it, the
1598
+ // count will reach the maximum value, 80. These
1599
+ // points will be colored purple. All other colors
1600
+ // represent points that are definitely NOT in the set.
1601
+ x -= 600;
1602
+ y -= 500;
1603
+ x /= 200;
1604
+ y /= 200;
1605
+ int count = 0;
1606
+ double zx = x;
1607
+ double zy = y;
1608
+ while (count < 80 && Math.abs(x) < 100 && Math.abs(zy) < 100) {
1609
+ double new_zx = zx*zx - zy*zy + x;
1610
+ zy = 2*zx*zy + y;
1611
+ zx = new_zx;
1612
+ count++;
1613
+ }
1614
+ return count; // Math.sqrt(count);
1615
+ }
1616
+ }, 1000,1000);
1617
+
1618
+ makeSomething(obj);
1619
+ } else
15241620 if (event.getSource() == gridItem)
15251621 {
15261622 makeSomething(new Grid());
....@@ -1540,6 +1636,10 @@
15401636 if (event.getSource() == superItem)
15411637 {
15421638 makeSomething(new Superellipsoid());
1639
+ } else
1640
+ if (event.getSource() == kleinItem)
1641
+ {
1642
+ makeSomething(new Klein());
15431643 } else
15441644 if (event.getSource() == blobItem)
15451645 {
....@@ -1570,7 +1670,7 @@
15701670 LA.matConcat(obj.toParent, cameraView.renderCamera.fromParent, obj.toParent);
15711671 LA.matInvert(obj.toParent, obj.fromParent);
15721672 */
1573
- makeSomething(new CheckerIG());
1673
+ makeSomething(new Checker());
15741674 } else
15751675 if (event.getSource() == meshItem)
15761676 {
....@@ -1710,8 +1810,8 @@
17101810 } else
17111811 if (event.getSource() == computeAOItem)
17121812 {
1713
- CameraPane.drawMode = CameraPane.OCCLUSION;
1714
- CameraPane.theRenderer.repaint();
1813
+ Globals.drawMode = CameraPane.OCCLUSION;
1814
+ Globals.theRenderer.repaint();
17151815 } else
17161816 if (event.getSource() == recompileItem)
17171817 {
....@@ -1726,7 +1826,7 @@
17261826 if (event.getSource() == invariantsItem)
17271827 {
17281828 System.out.println("Invariants:");
1729
- GraphreeD.theApplet3D.universe.invariants();
1829
+ GrafreeD.grafreeD.universe.invariants();
17301830 } else
17311831 if (event.getSource() == memoryItem)
17321832 {
....@@ -1796,10 +1896,10 @@
17961896 } else
17971897 if (event.getSource() == duplicateItem)
17981898 {
1799
- Object3D keep = GraphreeD.clipboard;
1899
+ Object3D keep = GrafreeD.clipboard;
18001900 loadClipboard(false);
18011901 paste(false);
1802
- GraphreeD.clipboard = keep;
1902
+ GrafreeD.clipboard = keep;
18031903 } else
18041904 if (event.getSource() == cloneItem)
18051905 {
....@@ -1843,8 +1943,9 @@
18431943 } else
18441944 if (event.getSource() == overwriteMatItem)
18451945 {
1946
+ /* july 2015
18461947 if ((dropAttributes & Object3D.TEXTURE) == 0)
1847
- Overwrite(Object3D.MATERIAL);
1948
+ Overwrite(Object3D.MATERIAL | Object3D.COLOR);
18481949 else
18491950 {
18501951 if ((dropAttributes & Object3D.COLOR) == 0 && (dropAttributes & Object3D.MATERIAL) == 0)
....@@ -1856,13 +1957,16 @@
18561957 Overwrite(Object3D.MATERIAL | Object3D.TEXTURE);
18571958 }
18581959 }
1960
+ */
1961
+
1962
+ Overwrite(dropAttributes);
18591963 }
18601964 if (event.getSource() == overwriteGeoItem)
18611965 {
18621966 Overwrite(Object3D.GEOMETRY);
1863
-// if (/*group.selection.size() == 1 &&*/ GraphreeD.clipboard.size() == 1)
1967
+// if (/*group.selection.size() == 1 &&*/ GrafreeD.clipboard.size() == 1)
18641968 // {
1865
-// Object3D content = GraphreeD.clipboard.get(0);
1969
+// Object3D content = GrafreeD.clipboard.get(0);
18661970 //
18671971 // if (content instanceof cGroup && ((cGroup)content).transientlink )
18681972 // content = ((cGroup)content).get(0);
....@@ -1945,23 +2049,28 @@
19452049 if (group.selection.size() == 1)
19462050 one = true;
19472051
2052
+ Object3D merge = null;
2053
+
19482054 Object3D content = new cGroup();
19492055
19502056 for (int i=0; i<group.selection.size(); i++)
19512057 {
1952
- Object3D sel = new Merge(group.selection.get(i));
2058
+ merge = new Merge(group.selection.get(i));
19532059
19542060 if (one)
1955
- makeSomething(sel, false);
2061
+ makeSomething(merge, false);
19562062 else
1957
- content.addChild(sel);
2063
+ content.addChild(merge);
19582064 }
19592065
19602066 if (!one)
1961
- makeSomething(content, false);
1962
-
1963
- ResetModel();
1964
- refreshContents();
2067
+ makeSomething(content, true);
2068
+ else
2069
+ {
2070
+ ResetModel();
2071
+ Select(merge.GetTreePath(), true, false); // unselect... false);
2072
+ refreshContents();
2073
+ }
19652074 } else
19662075 if (event.getSource() == mergeGeometriesItem)
19672076 {
....@@ -1995,9 +2104,9 @@
19952104 } else
19962105 if (event.getSource() == linkverticesItem)
19972106 {
1998
-// if (group.selection.size() == 1 && GraphreeD.clipboard.size() == 1)
2107
+// if (group.selection.size() == 1 && GrafreeD.clipboard.size() == 1)
19992108 // {
2000
-// Object3D content = GraphreeD.clipboard.get(0);
2109
+// Object3D content = GrafreeD.clipboard.get(0);
20012110 //
20022111 // if (content instanceof cGroup && ((cGroup)content).transientlink )
20032112 // content = ((cGroup)content).get(0);
....@@ -2006,14 +2115,14 @@
20062115 // group.selection.get(0).setMasterThis(content); // should be identity
20072116 // refreshContents();
20082117 // }
2009
- if (/*group.selection.size() == 1 &&*/ GraphreeD.clipboard.size() == 1)
2118
+ if (/*group.selection.size() == 1 &&*/ GrafreeD.clipboard.size() == 1)
20102119 {
2011
- Object3D content = GraphreeD.clipboard.get(0);
2120
+ Object3D content = GrafreeD.clipboard.get(0);
20122121
20132122 if (content instanceof cGroup && ((cGroup)content).transientlink )
20142123 content = ((cGroup)content).get(0);
20152124
2016
- CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));
2125
+ Globals.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));
20172126 for (int i=0; i<group.selection.size(); i++)
20182127 {
20192128 boolean random = CameraPane.RANDOM;
....@@ -2022,7 +2131,7 @@
20222131 // group.selection.get(i).setMasterThis(content); // should be identity
20232132 CameraPane.RANDOM = random;
20242133 }
2025
- CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.DEFAULT_CURSOR));
2134
+ Globals.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.DEFAULT_CURSOR));
20262135 refreshContents();
20272136 }
20282137 } else
....@@ -2038,6 +2147,15 @@
20382147
20392148 refreshContents();
20402149 } else
2150
+ if (event.getSource() == relinkverticesItem)
2151
+ {
2152
+ boolean random = CameraPane.RANDOM;
2153
+ CameraPane.RANDOM = false; // parse all random nodes
2154
+ group.selection.RelinkToSupport();
2155
+ CameraPane.RANDOM = random;
2156
+
2157
+ refreshContents();
2158
+ } else
20412159 if (event.getSource() == resetreferencesItem)
20422160 {
20432161 for (int i=0; i<group.selection.size(); i++)
....@@ -2049,9 +2167,9 @@
20492167 } else
20502168 if (event.getSource() == setMasterItem)
20512169 {
2052
- if (group.selection.size() == 1 && GraphreeD.clipboard.size() == 1)
2170
+ if (group.selection.size() == 1 && GrafreeD.clipboard.size() == 1)
20532171 {
2054
- Object3D content = GraphreeD.clipboard.get(0);
2172
+ Object3D content = GrafreeD.clipboard.get(0);
20552173
20562174 if (content instanceof cGroup && ((cGroup)content).transientlink )
20572175 content = ((cGroup)content).get(0);
....@@ -2064,9 +2182,9 @@
20642182 {
20652183 if (group.selection.size() == 1)
20662184 {
2067
- if (GraphreeD.clipboard.size() == 1)
2185
+ if (GrafreeD.clipboard.size() == 1)
20682186 {
2069
- Object3D content = GraphreeD.clipboard.get(0);
2187
+ Object3D content = GrafreeD.clipboard.get(0);
20702188
20712189 if (content instanceof cGroup && ((cGroup)content).transientlink )
20722190 content = ((cGroup)content).get(0);
....@@ -2106,6 +2224,10 @@
21062224 if (event.getSource() == grabItem)
21072225 {
21082226 group(new cGroup(), true);
2227
+ } else
2228
+ if (event.getSource() == hideItem)
2229
+ {
2230
+ group(new HiddenObject());
21092231 } else
21102232 if (event.getSource() == frontItem)
21112233 {
....@@ -2229,6 +2351,10 @@
22292351 {
22302352 group(new TextureNode());
22312353 } else
2354
+ if (event.getSource() == billboardItem)
2355
+ {
2356
+ group(new BillboardNode());
2357
+ } else
22322358 if (event.getSource() == shadowXItem)
22332359 {
22342360 CastShadow(0);
....@@ -2243,7 +2369,15 @@
22432369 } else
22442370 if (event.getSource() == ungroupItem)
22452371 {
2246
- ungroup();
2372
+ //ungroup();
2373
+ for (int i=0; i<group.selection.size(); i++)
2374
+ {
2375
+ Ungroup(group.selection.get(i));
2376
+ }
2377
+
2378
+ ClearSelection(false);
2379
+
2380
+ refreshContents();
22472381 } else
22482382 if (event.getSource() == genUVItem)
22492383 {
....@@ -2253,9 +2387,17 @@
22532387 {
22542388 GenNormals(true);
22552389 } else
2390
+ if (event.getSource() == genNormalsMESHItem)
2391
+ {
2392
+ GenNormals(true); // TODO
2393
+ } else
22562394 if (event.getSource() == genNormalsORGANItem)
22572395 {
22582396 GenNormals(false);
2397
+ } else
2398
+ if (event.getSource() == genNormalsMINEItem)
2399
+ {
2400
+ GenNormalsMINE();
22592401 } else
22602402 if (event.getSource() == stripifyItem)
22612403 {
....@@ -2353,6 +2495,10 @@
23532495 {
23542496 ParseVertices();
23552497 } else
2498
+ if (event.getSource() == textureFieldItem)
2499
+ {
2500
+ TextureVertices();
2501
+ } else
23562502 if (event.getSource() == alignItem)
23572503 {
23582504 Align();
....@@ -2421,6 +2567,20 @@
24212567 {
24222568 Object3D obj = (Object3D)e.nextElement();
24232569 obj.RepairParent();
2570
+// for (int i=0; i<obj.size(); i++)
2571
+// {
2572
+// obj.get(i).parent = obj;
2573
+// }
2574
+ }
2575
+
2576
+ refreshContents();
2577
+ } else
2578
+ if (event.getSource() == repairShadowItem)
2579
+ {
2580
+ for (Enumeration e = group.selection.elements(); e.hasMoreElements();)
2581
+ {
2582
+ Object3D obj = (Object3D)e.nextElement();
2583
+ obj.RepairShadow();
24242584 // for (int i=0; i<obj.size(); i++)
24252585 // {
24262586 // obj.get(i).parent = obj;
....@@ -2524,8 +2684,8 @@
25242684 // bug
25252685 //gridPanel.setDividerLocation(1.0);
25262686 //bigPanel.setDividerLocation(0.0);
2527
- bigThree.remove(jtp);
2528
- bigThree.remove(cameraPanel);
2687
+ bigThree.remove(scenePanel);
2688
+ bigThree.remove(centralPanel);
25292689 bigThree.remove(XYZPanel);
25302690 aWindowConstraints.gridx = 0;
25312691 aWindowConstraints.gridy = 0;
....@@ -2540,7 +2700,7 @@
25402700 // aConstraints.gridheight = 3;
25412701 aWindowConstraints.gridx = 1;
25422702 aWindowConstraints.fill = GridBagConstraints.BOTH;
2543
- bigThree.add(cameraPanel, aWindowConstraints);
2703
+ bigThree.add(centralPanel, aWindowConstraints);
25442704 aWindowConstraints.weightx = 0;
25452705 aWindowConstraints.gridx = 4;
25462706 aWindowConstraints.gridwidth = 1;
....@@ -2552,8 +2712,8 @@
25522712 if (event.getSource() == threeButton)
25532713 {
25542714 radio.layout = threeButton;
2555
- bigThree.remove(jtp);
2556
- bigThree.remove(cameraPanel);
2715
+ bigThree.remove(scenePanel);
2716
+ bigThree.remove(centralPanel);
25572717 bigThree.remove(XYZPanel);
25582718 aWindowConstraints.gridx = 0;
25592719 aWindowConstraints.gridy = 0;
....@@ -2568,7 +2728,7 @@
25682728 // aConstraints.gridheight = 3;
25692729 aWindowConstraints.gridx = 1;
25702730 aWindowConstraints.fill = GridBagConstraints.BOTH;
2571
- bigThree.add(cameraPanel, aWindowConstraints);
2731
+ bigThree.add(centralPanel, aWindowConstraints);
25722732 aWindowConstraints.weightx = 0;
25732733 aWindowConstraints.gridx = 4;
25742734 aWindowConstraints.gridwidth = 1;
....@@ -2580,8 +2740,8 @@
25802740 if (event.getSource() == fourButton)
25812741 {
25822742 radio.layout = fourButton;
2583
- bigThree.remove(jtp);
2584
- bigThree.remove(cameraPanel);
2743
+ bigThree.remove(scenePanel);
2744
+ bigThree.remove(centralPanel);
25852745 bigThree.remove(XYZPanel);
25862746 aWindowConstraints.gridx = 0;
25872747 aWindowConstraints.gridy = 0;
....@@ -2590,7 +2750,7 @@
25902750 aWindowConstraints.fill = GridBagConstraints.BOTH;
25912751 aWindowConstraints.weightx = 1;
25922752 aWindowConstraints.weighty = 1;
2593
- bigThree.add(jtp, aWindowConstraints);
2753
+ bigThree.add(scenePanel, aWindowConstraints);
25942754 aWindowConstraints.weightx = 1;
25952755 aWindowConstraints.gridwidth = 3;
25962756 // aConstraints.gridheight = 3;
....@@ -2608,8 +2768,8 @@
26082768 if (event.getSource() == sixButton)
26092769 {
26102770 radio.layout = sixButton;
2611
- bigThree.remove(jtp);
2612
- bigThree.remove(cameraPanel);
2771
+ bigThree.remove(scenePanel);
2772
+ bigThree.remove(centralPanel);
26132773 bigThree.remove(XYZPanel);
26142774 aWindowConstraints.gridx = 0;
26152775 aWindowConstraints.gridy = 0;
....@@ -2618,13 +2778,13 @@
26182778 aWindowConstraints.fill = GridBagConstraints.VERTICAL;
26192779 aWindowConstraints.weightx = 0;
26202780 aWindowConstraints.weighty = 1;
2621
- bigThree.add(jtp, aWindowConstraints);
2781
+ bigThree.add(scenePanel, aWindowConstraints);
26222782 aWindowConstraints.weightx = 1;
26232783 aWindowConstraints.gridwidth = 3;
26242784 // aWindowConstraints.gridheight = 3;
26252785 aWindowConstraints.gridx = 1;
26262786 aWindowConstraints.fill = GridBagConstraints.BOTH;
2627
- bigThree.add(cameraPanel, aWindowConstraints);
2787
+ bigThree.add(centralPanel, aWindowConstraints);
26282788 aWindowConstraints.weightx = 0;
26292789 aWindowConstraints.gridx = 4;
26302790 aWindowConstraints.gridwidth = 1;
....@@ -2636,8 +2796,8 @@
26362796 if (event.getSource() == sevenButton)
26372797 {
26382798 radio.layout = sevenButton;
2639
- bigThree.remove(jtp);
2640
- bigThree.remove(cameraPanel);
2799
+ bigThree.remove(scenePanel);
2800
+ bigThree.remove(centralPanel);
26412801 bigThree.remove(XYZPanel);
26422802 aWindowConstraints.gridx = 0;
26432803 aWindowConstraints.gridy = 0;
....@@ -2646,13 +2806,13 @@
26462806 aWindowConstraints.fill = GridBagConstraints.VERTICAL;
26472807 aWindowConstraints.weightx = 0;
26482808 aWindowConstraints.weighty = 1;
2649
- bigThree.add(jtp, aWindowConstraints);
2809
+ bigThree.add(scenePanel, aWindowConstraints);
26502810 aWindowConstraints.weightx = 1;
26512811 aWindowConstraints.gridwidth = 3;
26522812 // aWindowConstraints.gridheight = 3;
26532813 aWindowConstraints.gridx = 1;
26542814 aWindowConstraints.fill = GridBagConstraints.BOTH;
2655
- bigThree.add(cameraPanel, aWindowConstraints);
2815
+ bigThree.add(centralPanel, aWindowConstraints);
26562816 aWindowConstraints.weightx = 0;
26572817 aWindowConstraints.gridx = 4;
26582818 aWindowConstraints.gridwidth = 1;
....@@ -2750,7 +2910,7 @@
27502910 if (event.getSource() == unselectButton)
27512911 {
27522912 objEditor.jTree.clearSelection();
2753
- // ?? oct 2012 GraphreeD.clipboard.clear();
2913
+ // ?? oct 2012 GrafreeD.clipboard.clear();
27542914 objEditor.ResetSliders();
27552915 refreshContents(true);
27562916 } else
....@@ -2779,7 +2939,7 @@
27792939 }
27802940
27812941 copy = group;
2782
- //CameraPane.theRenderer.object = group;
2942
+ //Globals.theRenderer.object = group;
27832943 if(!useclient)
27842944 {
27852945 cameraView.renderCamera = radio.camera;
....@@ -2788,7 +2948,8 @@
27882948 cameraView.cameras[cameraView.cameracount] = radio.camera;
27892949 cameraView.targetLookAt.set(radio.camera.lookAt);
27902950 cameraView.object = group;
2791
- cameraView.lighttouched = true;
2951
+ //cameraView.lighttouched = true;
2952
+ Globals.lighttouched = true;
27922953 topView.object = group;
27932954 frontView.object = group;
27942955 sideView.object = group;
....@@ -2824,7 +2985,7 @@
28242985 if (useclient)
28252986 {
28262987 cameraView.object = client;
2827
- cameraView.lighttouched = true;
2988
+ Globals.lighttouched = true;
28282989 //topView.object = client;
28292990 //frontView.object = client;
28302991 //sideView.object = client;
....@@ -2832,7 +2993,7 @@
28322993 else
28332994 {
28342995 cameraView.object = group;
2835
- cameraView.lighttouched = true;
2996
+ Globals.lighttouched = true;
28362997 //topView.object = group;
28372998 //frontView.object = group;
28382999 //sideView.object = group;
....@@ -3065,9 +3226,9 @@
30653226 obj = (Object3D)e.nextElement();
30663227
30673228 System.out.println("Object is: " + obj);
3068
- GraphreeD.AnalyzeObject(obj);
3229
+ GrafreeD.AnalyzeObject(obj);
30693230 System.out.println("Boundary rep: " + obj.bRep);
3070
- GraphreeD.AnalyzeObject(obj.bRep);
3231
+ GrafreeD.AnalyzeObject(obj.bRep);
30713232
30723233 // System.err.println((size/1024) + " KB is the size of " + obj);
30733234 }
....@@ -3109,6 +3270,13 @@
31093270 void GenNormals(boolean crease)
31103271 {
31113272 group.GenNormalsS(crease);
3273
+
3274
+ refreshContents();
3275
+ }
3276
+
3277
+ void GenNormalsMINE()
3278
+ {
3279
+ group.selection.GenNormalsMINE();
31123280
31133281 refreshContents();
31143282 }
....@@ -3157,104 +3325,250 @@
31573325
31583326 //Object3D buffer;
31593327 cVector temp = new cVector();
3160
- BoundaryRep temprep;
3161
- Object3D nodes;
3162
- Vector<Vertex> vertices;
3163
-
3164
- public void Vertex(Object3D node, Vertex v)
3165
- {
3166
- vertices.add(v);
3167
- nodes.addElement(node);
3168
-
3169
- if (temprep.GetCache(v) != null)
3170
- {
3171
- temprep.Remove(v);
3172
- }
3173
- else
3174
- {
3175
- temprep.Remember(v);
3176
- }
3177
- }
3178
-
3179
- public void Face(Object3D node, Face f)
3180
- {
3181
-
3182
- }
3183
-
3328
+// BoundaryRep temprep;
3329
+// Object3D nodes;
3330
+// Vector<Vertex> vertices;
3331
+//
3332
+// cGroup buffer;
3333
+//
3334
+// public void Vertex(Object3D node, Vertex v)
3335
+// {
3336
+//// vertices.add(v);
3337
+//// nodes.addElement(node);
3338
+////
3339
+//// if (temprep.GetCache(v) != null)
3340
+//// {
3341
+//// temprep.Remove(v);
3342
+//// } else
3343
+//// {
3344
+//// temprep.Remember(v);
3345
+//// }
3346
+//
3347
+// //Object3D node = nodes.get(index);
3348
+// temp.set(v); // vertices.get(index)); // temprep.GetVertex(k));
3349
+// // System.out.println("temp = " + temp.x + ", " + temp.y + ", " + temp.z);
3350
+//
3351
+// LA.xformPos(temp, node.GlobalTransformInv(), temp);
3352
+//
3353
+// // System.out.println("tem+ = " + temp.x + ", " + temp.y + ", " + temp.z);
3354
+//
3355
+// cGroup g = new cGroup();
3356
+//
3357
+// if (g.toParent == null)
3358
+// {
3359
+// g.toParent = LA.newMatrix();
3360
+// g.fromParent = LA.newMatrix();
3361
+// }
3362
+// LA.matTranslate(g.toParent, temp.x, temp.y, temp.z);
3363
+// LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z);
3364
+//
3365
+// g.add(GrafreeD.clipboard);
3366
+//
3367
+// buffer.add(g);
3368
+// }
3369
+//
3370
+// public void Face(Object3D node, Face f)
3371
+// {
3372
+//
3373
+// }
3374
+//
3375
+// void ParseVerticesOld() // ??
3376
+// {
3377
+// //if (group.selection.size() != 1)
3378
+// // return;
3379
+//
3380
+// temprep = new BoundaryRep();
3381
+// nodes = new Object3D();
3382
+// vertices = new Vector<Vertex>();
3383
+//
3384
+// boolean epsequal = GrafreeD.epsequal;
3385
+// GrafreeD.epsequal = true;
3386
+//
3387
+// for (int i=0; i<group.selection.size(); i++)
3388
+// {
3389
+// Object3D buffer = new cGroup(group.selection.get(i).name + "+");
3390
+//
3391
+// group.selection.get(i).Parse(
3392
+//this );
3393
+//
3394
+// int repsize = temprep.VertexCount();
3395
+// int tablesize = temprep.vertextable.size();
3396
+// int nodesize = nodes.size();
3397
+//
3398
+// assert(vertices.size() == nodes.size());
3399
+//
3400
+// temprep.vertextable.elements();
3401
+//
3402
+// java.util.Set<java.util.Map.Entry<Vertex,Vertex>> set = temprep.vertextable.entrySet();
3403
+//
3404
+// for (java.util.Map.Entry<Vertex,Vertex> entry : set)
3405
+// {
3406
+// cGroup g = new cGroup();
3407
+//
3408
+// int index = vertices.indexOf(entry.getValue()); // temprep.vertextable.(k));
3409
+//
3410
+// Object3D node = nodes.get(index);
3411
+// temp.set(vertices.get(index)); // temprep.GetVertex(k));
3412
+// // System.out.println("temp = " + temp.x + ", " + temp.y + ", " + temp.z);
3413
+//
3414
+// LA.xformPos(temp, node.GlobalTransformInv(), temp);
3415
+//
3416
+// // System.out.println("tem+ = " + temp.x + ", " + temp.y + ", " + temp.z);
3417
+//
3418
+// if (g.toParent == null)
3419
+// {
3420
+// g.toParent = LA.newMatrix();
3421
+// g.fromParent = LA.newMatrix();
3422
+// }
3423
+// LA.matTranslate(g.toParent, temp.x, temp.y, temp.z);
3424
+// LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z);
3425
+//
3426
+// g.add(GrafreeD.clipboard);
3427
+//
3428
+// buffer.add(g);
3429
+// }
3430
+//
3431
+// makeSomething(buffer, i==group.selection.size()-1);
3432
+// }
3433
+//
3434
+// GrafreeD.epsequal = epsequal;
3435
+//
3436
+// //buffer = null;
3437
+// temprep = null;
3438
+// nodes = null;
3439
+//
3440
+// refreshContents();
3441
+// }
3442
+
31843443 void ParseVertices()
31853444 {
3186
- //if (group.selection.size() != 1)
3187
- // return;
3188
-
3189
- temprep = new BoundaryRep();
3190
- nodes = new Object3D();
3191
- vertices = new Vector<Vertex>();
3192
-
3193
- boolean epsequal = GraphreeD.epsequal;
3194
- GraphreeD.epsequal = true;
3445
+ boolean epsequal = GrafreeD.epsequal;
3446
+ GrafreeD.epsequal = true;
31953447
31963448 for (int i=0; i<group.selection.size(); i++)
31973449 {
3198
- Object3D buffer = new cGroup(group.selection.get(i).name + "+");
3450
+ final cGroup buffer = new cGroup(group.selection.get(i).name + "+");
31993451
3200
- group.selection.get(i).Parse(this);
3201
-
3202
- int repsize = temprep.VertexCount();
3203
- int tablesize = temprep.vertextable.size();
3204
- int nodesize = nodes.size();
3452
+ group.selection.get(i).Parse(
3453
+
3454
+ new iParse()
3455
+ {
3456
+ public void Vertex(Object3D node, Vertex v)
3457
+ {
3458
+ temp.set(v);
3459
+ LA.xformPos(temp, node.GlobalTransformInv(), temp);
32053460
3206
- assert(vertices.size() == nodes.size());
3207
-
3208
- temprep.vertextable.elements();
3209
-
3210
- java.util.Set<java.util.Map.Entry<Vertex,Vertex>> set = temprep.vertextable.entrySet();
3461
+ cGroup g = new cGroup();
32113462
3212
- for (java.util.Map.Entry<Vertex,Vertex> entry : set)
3213
- {
3214
- cGroup g = new cGroup();
3463
+ if (g.toParent == null)
3464
+ {
3465
+ g.toParent = LA.newMatrix();
3466
+ g.fromParent = LA.newMatrix();
3467
+ }
3468
+ LA.matTranslate(g.toParent, temp.x, temp.y, temp.z);
3469
+ LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z);
32153470
3216
- int index = vertices.indexOf(entry.getValue()); // temprep.vertextable.(k));
3217
- Object3D node = nodes.get(index);
3218
- temp.set(vertices.get(index)); // temprep.GetVertex(k));
3219
- // System.out.println("temp = " + temp.x + ", " + temp.y + ", " + temp.z);
3471
+ g.add(GrafreeD.clipboard);
32203472
3221
- LA.xformPos(temp, node.GlobalTransformInv(), temp);
3222
-
3223
- // System.out.println("tem+ = " + temp.x + ", " + temp.y + ", " + temp.z);
3224
-
3225
- if (g.toParent == null)
3226
- {
3227
- g.toParent = LA.newMatrix();
3228
- g.fromParent = LA.newMatrix();
3229
- }
3230
- LA.matTranslate(g.toParent, temp.x, temp.y, temp.z);
3231
- LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z);
3473
+ buffer.add(g);
3474
+ }
32323475
3233
- g.add(GraphreeD.clipboard);
3476
+ public void Face(Object3D node, Face f)
3477
+ {
32343478
3235
- buffer.add(g);
3236
- }
3479
+ }
3480
+ }
3481
+ );
32373482
32383483 makeSomething(buffer, i==group.selection.size()-1);
32393484 }
32403485
3241
- GraphreeD.epsequal = epsequal;
3242
-
3243
- //buffer = null;
3244
- temprep = null;
3245
- nodes = null;
3486
+ GrafreeD.epsequal = epsequal;
32463487
32473488 refreshContents();
32483489 }
3249
-
3490
+
3491
+ void TextureVertices()
3492
+ {
3493
+ for (int i=0; i<group.selection.size(); i++)
3494
+ {
3495
+ group.selection.get(i).Parse(
3496
+ new iParse()
3497
+ {
3498
+ public void Vertex(Object3D node, Vertex v)
3499
+ {
3500
+ cTexture tex = node.GetTextures();
3501
+ String pigment = Object3D.GetPigment(tex);
3502
+ //String bump = Object3D.GetBump(tex);
3503
+
3504
+ com.sun.opengl.util.texture.TextureData texturedata = Globals.theRenderer.GetTextureData(pigment, false, node.texres);
3505
+
3506
+ double s = v.s;
3507
+
3508
+ if (s == 1)
3509
+ s = 0;
3510
+
3511
+ double t = v.t;
3512
+
3513
+ if (t == 1)
3514
+ t = 0;
3515
+
3516
+ int indexs = (int) (texturedata.getWidth() * s);
3517
+ int indext = (int) (texturedata.getHeight() * t);
3518
+
3519
+ int index = indext * texturedata.getWidth() + indexs;
3520
+
3521
+ java.nio.ByteBuffer bytebuf = (java.nio.ByteBuffer)texturedata.getBuffer();
3522
+
3523
+ int slide = bytebuf.capacity() / texturedata.getWidth() / texturedata.getHeight();
3524
+
3525
+ float scale = bytebuf.get(index*slide) & 0xFF;
3526
+ scale += bytebuf.get(index*slide+1) & 0xFF;
3527
+ scale += bytebuf.get(index*slide+2) & 0xFF;
3528
+ scale /= 3;
3529
+
3530
+ scale /= 0xFF;
3531
+ // c'est quoi ca? scale /= 4;
3532
+
3533
+ //v.AO = scale;
3534
+
3535
+ v.x += v.norm.x * scale;
3536
+ v.y += v.norm.y * scale;
3537
+ v.z += v.norm.z * scale;
3538
+ }
3539
+
3540
+ public void Face(Object3D node, Face f)
3541
+ {
3542
+ }
3543
+ }
3544
+ );
3545
+ }
3546
+
3547
+ refreshContents();
3548
+ }
3549
+
32503550 void Align()
32513551 {
3552
+ if (group.selection.size() == 0)
3553
+ return;
3554
+
3555
+ cVector bbmin = new cVector();
3556
+ cVector bbmax = new cVector();
3557
+
3558
+ group.selection.get(0).getBounds(bbmin, bbmax, true);
3559
+
3560
+ double dx = bbmax.x - bbmin.x;
3561
+ double dy = bbmax.y - bbmin.y;
3562
+ double dz = bbmax.z - bbmin.z;
3563
+
3564
+ double scale = Math.sqrt(dx*dx + dy*dy + dz*dz);
3565
+
32523566 for (int i=0; i<group.selection.size(); i++)
32533567 {
32543568 Object3D obj = group.selection.get(i);
32553569
3256
- LA.matTranslate(obj.toParent, i/2f, 0, 0);
3257
- LA.matTranslateInv(obj.fromParent, -i/2f, 0, 0);
3570
+ LA.matTranslate(obj.toParent, i * scale, 0, 0);
3571
+ LA.matTranslateInv(obj.fromParent, -i * scale, 0, 0);
32583572 }
32593573
32603574 refreshContents();
....@@ -3267,7 +3581,7 @@
32673581 // ref.SaveSupports();
32683582 // Object3D par = ref.parent;
32693583 // ref.parent = null;
3270
-// Object3D lowres = (Object3D) GraphreeD.clone(ref);
3584
+// Object3D lowres = (Object3D) GrafreeD.clone(ref);
32713585 // ref.parent = par;
32723586 // ref.RestoreSupports();
32733587
....@@ -3297,7 +3611,7 @@
32973611 // lowres.SaveSupports();
32983612 // par = lowres.parent;
32993613 // lowres.parent = null;
3300
-// Object3D newlow = (Object3D) GraphreeD.clone(lowres);
3614
+// Object3D newlow = (Object3D) GrafreeD.clone(lowres);
33013615 Object3D newlow = CloneObject(lowres, false);
33023616 newlow.name = sn.switchobject.get(i).name;
33033617 System.out.println(" pose#" + i + " = " + newlow);
....@@ -3319,7 +3633,7 @@
33193633 return;
33203634
33213635 Object3D poses = group.selection.get(0);
3322
- Object3D ref = GraphreeD.clipboard.get(0);
3636
+ Object3D ref = GrafreeD.clipboard.get(0);
33233637
33243638 Object3D newgroup = new Object3D("Po:" + poses.name);
33253639
....@@ -3488,7 +3802,7 @@
34883802 group.selection.RelinkToSupport(); // july 2014
34893803 System.out.println("DONE.");
34903804 refreshContents();
3491
- CameraPane.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.DEFAULT_CURSOR));
3805
+ Globals.theRenderer.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.DEFAULT_CURSOR));
34923806 }
34933807
34943808 void ReduceMesh(boolean reduction34)
....@@ -3513,20 +3827,20 @@
35133827
35143828 void ClipMesh()
35153829 {
3516
- if (/*group.selection.size() == 1 &&*/ GraphreeD.clipboard.size() == 1)
3830
+ if (/*group.selection.size() == 1 &&*/ GrafreeD.clipboard.size() == 1)
35173831 {
3518
- Object3D content = GraphreeD.clipboard.get(0);
3832
+ Object3D content = GrafreeD.clipboard.get(0);
35193833
35203834 if (content instanceof cGroup && ((cGroup)content).transientlink )
35213835 content = ((cGroup)content).get(0);
35223836
35233837 // for (int i=0; i<group.selection.size(); i++)
35243838 // {
3525
-// group.selection.get(i).ClipMesh(GraphreeD.clipboard);
3839
+// group.selection.get(i).ClipMesh(GrafreeD.clipboard);
35263840 // }
3527
- group.selection.ClipMesh(GraphreeD.clipboard);
3841
+ group.selection.ClipMesh(GrafreeD.clipboard);
35283842 }
3529
-// group.selection.ClipMesh(GraphreeD.clipboard);
3843
+// group.selection.ClipMesh(GrafreeD.clipboard);
35303844 System.out.println("DONE.");
35313845 refreshContents();
35323846 }
....@@ -3773,16 +4087,16 @@
37734087
37744088 objEditor.SetText(); // jan 2014
37754089
3776
- if (flashIt && !CameraPane.isLIVE() && tps != null && tps.length > 0 && !(((Object3D) tps[0].getLastPathComponent()) instanceof Camera))
4090
+ if (flashIt && !Globals.isLIVE() && tps != null && tps.length > 0 && !(((Object3D) tps[0].getLastPathComponent()) instanceof Camera))
37774091 CameraPane.flash = true;
37784092
37794093 if (tps != null && tps.length > 0 && ((Object3D) tps[0].getLastPathComponent()) instanceof Camera)
37804094 // a camera
37814095 {
37824096 CameraPane.camerachangeframe = 0; // don't refuse it
3783
- CameraPane.theRenderer.SetCamera((Camera) tps[0].getLastPathComponent());
3784
- // CameraPane.theRenderer.renderCamera = CameraPane.theRenderer.manipCamera;
3785
- // CameraPane.theRenderer.eyeCamera = CameraPane.theRenderer.manipCamera;
4097
+ Globals.theRenderer.SetCamera((Camera) tps[0].getLastPathComponent());
4098
+ // Globals.theRenderer.renderCamera = Globals.theRenderer.manipCamera;
4099
+ // Globals.theRenderer.eyeCamera = Globals.theRenderer.manipCamera;
37864100 }
37874101
37884102 refreshContents();
....@@ -3864,12 +4178,12 @@
38644178 {
38654179 if (group.selection.isEmpty())
38664180 return;
3867
- GraphreeD.clipboardIsTempGroup = false;
4181
+ GrafreeD.clipboardIsTempGroup = false;
38684182 Composite tGroup = null;
38694183 if (group.selection.size() > 0) // 1)
38704184 {
38714185 tGroup = new cGroup();
3872
- GraphreeD.clipboardIsTempGroup = true;
4186
+ GrafreeD.clipboardIsTempGroup = true;
38734187 }
38744188
38754189 if (cut)
....@@ -3909,16 +4223,16 @@
39094223 //System.out.println("cut " + child);
39104224 //System.out.println("parent = " + child.parent);
39114225 // tmp.addChild(child);
3912
- if (GraphreeD.clipboardIsTempGroup)
4226
+ if (GrafreeD.clipboardIsTempGroup)
39134227 tGroup.add/*Child*/(tmp);
39144228 else
3915
- GraphreeD.clipboard = tmp;
4229
+ GrafreeD.clipboard = tmp;
39164230 }
39174231 else
3918
- if (GraphreeD.clipboardIsTempGroup)
4232
+ if (GrafreeD.clipboardIsTempGroup)
39194233 tGroup.add/*Child*/(child);
39204234 else
3921
- GraphreeD.clipboard = child;
4235
+ GrafreeD.clipboard = child;
39224236 }
39234237
39244238 //ResetModel();
....@@ -3950,21 +4264,21 @@
39504264 //System.out.println("cut " + elem);
39514265 //System.out.println("parent = " + elem.parent);
39524266 // tmp.addChild(elem);
3953
- if (GraphreeD.clipboardIsTempGroup)
4267
+ if (GrafreeD.clipboardIsTempGroup)
39544268 tGroup.add/*Child*/(tmp);
39554269 else
3956
- GraphreeD.clipboard = tmp;
4270
+ GrafreeD.clipboard = tmp;
39574271 }
39584272 else
3959
- if (GraphreeD.clipboardIsTempGroup)
4273
+ if (GrafreeD.clipboardIsTempGroup)
39604274 tGroup.add/*Child*/(child);
39614275 else
3962
- GraphreeD.clipboard = child;
4276
+ GrafreeD.clipboard = child;
39634277 }
39644278
39654279 }
3966
- if (GraphreeD.clipboardIsTempGroup)
3967
- GraphreeD.clipboard = tGroup;
4280
+ if (GrafreeD.clipboardIsTempGroup)
4281
+ GrafreeD.clipboard = tGroup;
39684282 if (cut)
39694283 {
39704284 ResetModel();
....@@ -3974,11 +4288,11 @@
39744288
39754289 void paste(boolean expand)
39764290 {
3977
- // if (GraphreeD.clipboard == null)
4291
+ // if (GrafreeD.clipboard == null)
39784292 // return;
39794293 boolean first = true;
39804294
3981
- if (GraphreeD.clipboardIsTempGroup)
4295
+ if (GrafreeD.clipboardIsTempGroup)
39824296 {
39834297 Composite temp;
39844298
....@@ -3989,7 +4303,7 @@
39894303 temp = (Composite)Applet3D.clipboard.deepCopy();
39904304 */
39914305 Object3D elem;
3992
- for (Enumeration e = /*temp.children*/GraphreeD.clipboard.elements(); e.hasMoreElements();) // objList.add(copy.name))
4306
+ for (Enumeration e = /*temp.children*/GrafreeD.clipboard.elements(); e.hasMoreElements();) // objList.add(copy.name))
39934307 {
39944308 Object3D child = (Object3D)e.nextElement();
39954309
....@@ -4003,7 +4317,7 @@
40034317 else
40044318 elem = child.deepCopy(); // ?
40054319 child.parent = keepparent;
4006
- //if (GraphreeD.clipboardIsTempGroup && LA.isIdentity(elem.fromParent))
4320
+ //if (GrafreeD.clipboardIsTempGroup && LA.isIdentity(elem.fromParent))
40074321 // elem = elem.get(0);
40084322 makeSomething(elem, true); // ?? first);
40094323 //group.addChild(elem);
....@@ -4023,14 +4337,14 @@
40234337 //Object3D cb = Applet3D.clipboard;
40244338 //temp.addChild(cb);
40254339 //makeSomething((expand?temp.copyExpand():temp.deepCopy()).get(0));
4026
- assert(GraphreeD.clipboard.parent == null);
4027
- Object3D /*Composite*/ keepparent = GraphreeD.clipboard.get(0).parent;
4028
- GraphreeD.clipboard.get(0).parent = null; // Avoid copy?
4029
- if (LA.isIdentity(GraphreeD.clipboard.toParent))
4030
- makeSomething(expand?GraphreeD.clipboard.get(0).copyExpand():GraphreeD.clipboard.get(0).deepCopy());
4340
+ assert(GrafreeD.clipboard.parent == null);
4341
+ Object3D /*Composite*/ keepparent = GrafreeD.clipboard.get(0).parent;
4342
+ GrafreeD.clipboard.get(0).parent = null; // Avoid copy?
4343
+ if (LA.isIdentity(GrafreeD.clipboard.toParent))
4344
+ makeSomething(expand?GrafreeD.clipboard.get(0).copyExpand():GrafreeD.clipboard.get(0).deepCopy());
40314345 else
4032
- makeSomething(expand?GraphreeD.clipboard.copyExpand():GraphreeD.clipboard.deepCopy());
4033
- GraphreeD.clipboard.get(0).parent = keepparent;
4346
+ makeSomething(expand?GrafreeD.clipboard.copyExpand():GrafreeD.clipboard.deepCopy());
4347
+ GrafreeD.clipboard.get(0).parent = keepparent;
40344348 }
40354349
40364350 ResetModel();
....@@ -4039,7 +4353,7 @@
40394353
40404354 void pasteInto(boolean copyit)
40414355 {
4042
-// if (GraphreeD.clipboard == null)
4356
+// if (GrafreeD.clipboard == null)
40434357 // return;
40444358
40454359 if (group.selection.size() != 1)
....@@ -4072,9 +4386,9 @@
40724386 {
40734387 boolean first = true;
40744388
4075
- if (GraphreeD.clipboardIsTempGroup)
4389
+ if (GrafreeD.clipboardIsTempGroup)
40764390 {
4077
- Composite temp = (Composite)GraphreeD.clipboard;
4391
+ Composite temp = (Composite)GrafreeD.clipboard;
40784392 Object3D copy;
40794393 for (Enumeration e = temp.children.elements(); e.hasMoreElements();)
40804394 {
....@@ -4084,7 +4398,7 @@
40844398 }
40854399 } else
40864400 {
4087
- linkSomething(GraphreeD.clipboard); //.get(0));
4401
+ linkSomething(GrafreeD.clipboard); //.get(0));
40884402 }
40894403 }
40904404 }
....@@ -4276,6 +4590,26 @@
42764590 makeSomething(csg);
42774591 }
42784592
4593
+ void Ungroup(Object3D g)
4594
+ {
4595
+ if (g instanceof HiddenObject)
4596
+ {
4597
+ HiddenObject h = (HiddenObject) g;
4598
+
4599
+ for (int i=0; i<h.ActualSize(); i++)
4600
+ {
4601
+ objEditor.makeSomething(h.get(i), false);
4602
+ }
4603
+ }
4604
+ else
4605
+ {
4606
+ for (int i=0; i<g.Size(); i++)
4607
+ {
4608
+ objEditor.makeSomething(g.get(i), false);
4609
+ }
4610
+ }
4611
+ }
4612
+
42794613 void ungroup()
42804614 {
42814615 /*
....@@ -4471,7 +4805,7 @@
44714805
44724806 void ImportGFD()
44734807 {
4474
- FileDialog browser = new FileDialog(objEditor.frame, "Import GraphreeD", FileDialog.LOAD);
4808
+ FileDialog browser = new FileDialog(objEditor.frame, "Import GrafreeD", FileDialog.LOAD);
44754809 browser.show();
44764810 String filename = browser.getFile();
44774811 if (filename != null && filename.length() > 0)
....@@ -4509,7 +4843,7 @@
45094843
45104844 void ImportVRMLX3D()
45114845 {
4512
- if (GraphreeD.standAlone)
4846
+ if (GrafreeD.standAlone)
45134847 {
45144848 /**/
45154849 FileDialog browser = new FileDialog(objEditor.frame, "Import VRML/X3D", FileDialog.LOAD);
....@@ -4526,7 +4860,7 @@
45264860
45274861 String GetFile(String dialogName)
45284862 {
4529
- if (GraphreeD.standAlone)
4863
+ if (GrafreeD.standAlone)
45304864 {
45314865 FileDialog browser = new FileDialog(objEditor.frame, dialogName, FileDialog.LOAD);
45324866 browser.show();
....@@ -4635,6 +4969,7 @@
46354969 private MenuItem resetsupportItem;
46364970 private MenuItem resetreferencesItem;
46374971 private MenuItem linkverticesItem;
4972
+ private MenuItem relinkverticesItem;
46384973 private MenuItem setMasterItem;
46394974 private MenuItem resetMeshItem;
46404975 private MenuItem stepAllItem;
....@@ -4653,8 +4988,10 @@
46534988 private MenuItem clearItem;
46544989 private MenuItem clearAllItem;
46554990 private MenuItem genUVItem;
4991
+ private MenuItem genNormalsMESHItem;
46564992 private MenuItem genNormalsCADItem;
46574993 private MenuItem genNormalsORGANItem;
4994
+ private MenuItem genNormalsMINEItem;
46584995 private MenuItem stripifyItem;
46594996 private MenuItem unstripifyItem;
46604997 private MenuItem trimItem;
....@@ -4696,6 +5033,7 @@
46965033 private MenuItem resetCentroidItem;
46975034 private MenuItem transformgeometryItem;
46985035 private MenuItem resetTransformItem;
5036
+ private MenuItem hideItem;
46995037 private MenuItem grabItem;
47005038 private MenuItem backItem;
47015039 private MenuItem frontItem;
....@@ -4716,6 +5054,7 @@
47165054
47175055 private MenuItem resetParentItem;
47185056 private MenuItem repairParentItem;
5057
+ private MenuItem repairShadowItem;
47195058 private MenuItem sortbysizeItem;
47205059 private MenuItem sortbynameItem;
47215060
....@@ -4728,12 +5067,15 @@
47285067 private MenuItem particleItem;
47295068 private MenuItem ragdollItem;
47305069 private MenuItem ragdoll2Item;
5070
+ private MenuItem heightFieldItem;
5071
+ private MenuItem textureFieldItem;
47315072 private MenuItem gridItem;
47325073 private MenuItem rectoidItem;
47335074 private MenuItem ellipsoidItem;
47345075 private MenuItem coneItem;
47355076 private MenuItem torusItem;
47365077 private MenuItem superItem;
5078
+ private MenuItem kleinItem;
47375079 private MenuItem blobItem;
47385080 private MenuItem latheItem;
47395081 private MenuItem bezierItem;
....@@ -4746,6 +5088,7 @@
47465088 private MenuItem csgItem;
47475089 private MenuItem templateItem;
47485090 private MenuItem textureItem;
5091
+ private MenuItem billboardItem;
47495092 private MenuItem shadowXItem;
47505093 private MenuItem shadowYItem;
47515094 private MenuItem shadowZItem;