From c5b599b48b333b34e554b464aefbca0b9bc66275 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sun, 09 Jun 2019 02:04:44 -0400
Subject: [PATCH] Menu cleanup + transform feedback.

---
 ObjEditor.java   |  260 ++++++++++++++--------------
 CameraPane.java  |   17 +
 GroupEditor.java |  200 +++++++++++----------
 Object3D.java    |   59 +++--
 4 files changed, 289 insertions(+), 247 deletions(-)

diff --git a/CameraPane.java b/CameraPane.java
index 0d3d46b..9794f67 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -14374,6 +14374,7 @@
     public void mouseReleased(MouseEvent e)
     {
         movingcamera = false;
+        X = Y = 0;
         //System.out.println("mouseReleased: " + e);
         clickEnd(e.getX(), e.getY(), e.getModifiersEx());
     }
@@ -15382,7 +15383,9 @@
         info.bounds.setBounds(0, 0, (int) (width * zoom), (int) (height * zoom));
         //Image img = CreateImage(width, height);
         //System.out.println("width = " + width + "; height = " + height + "\n");
+        
         Graphics gr = g; // img.getGraphics();
+        
         if (!hasMarquee)
         {
             if (Xmin < Xmax) // !locked)
@@ -15480,14 +15483,28 @@
             if (!isRenderer)
             {
                 object.drawEditHandles(info, 0);
+                
+                if (drag && (X != 0 || Y != 0) && object.selection.Size() > 0)
+                {
+                    switch (object.selection.get(0).hitSomething)
+                    {
+                        case Object3D.hitCenter: gr.setColor(Color.pink); break;
+                        case Object3D.hitRotate: gr.setColor(Color.green); break;
+                        case Object3D.hitScale: gr.setColor(Color.cyan); break;
+                    }
+                    
+                    gr.drawLine(X, Y, info.bounds.width/2, info.bounds.height/2);
+                }
             }
         }
+        
         if (isRenderer)
         {
         //gr.setColor(Color.black);
         //gr.drawRect(info.bounds.x - 1, info.bounds.y - 1, info.bounds.width + 1, info.bounds.height + 1);
         //gr.drawRect(info.bounds.x - 2, info.bounds.y - 2, info.bounds.width + 3, info.bounds.height + 3);
         }
+        
         if (hasMarquee)
         {
             gr.setXORMode(Color.white);
diff --git a/GroupEditor.java b/GroupEditor.java
index 7f0fb6a..acdf1fc 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -74,7 +74,7 @@
 		this.copy = this.group = copy;
 		//selectees = this.group.selectees;
 		
-		SetupMenu2(objEditor);
+		SetupMenu2(this); //objEditor);
 		SetupUI2(objEditor);
 		objEditor.SetupUI(true);
 		SetupViews(objEditor);
@@ -148,23 +148,8 @@
         
     //JTextField nameField;
     
-	void SetupMenu2(ObjEditor oe)
+	void SetupMenu2(GroupEditor oe)
 	{
-        if (Globals.ADVANCED)
-        {
-		oe.cameraMenu.add(lookAtItem = new MenuItem("Set Interest"));
-		//cameraMenu.add(lookFromItem = new MenuItem("Look From Selection"));
-		//cameraMenu.add(switchItem = new MenuItem("Reverse View"));
-		editLeafItem = oe.cameraMenu.add(new MenuItem("Edit Leaf"));
-		oe.cameraMenu.add("-");
-		openWindowItem =  oe.cameraMenu.add(new MenuItem("Edit copy..."));
-		openWindowItem.addActionListener(this);
-		editLeafItem.addActionListener(this);
-		lookAtItem.addActionListener(this);
-		//lookFromItem.addActinoListener(this);
-		//switchItem.addActionListener(this);
-        }
-        
 		Menu menu;
 		oe.menuBar.add(menu = new Menu("Edit"));
 		//editItem = menu.add(new MenuItem("Edit"));
@@ -206,7 +191,94 @@
 		clearAllItem = menu.add(new MenuItem("Clear All"));
 		clearAllItem.addActionListener(this);
         }
+        
+        menuBar.add(cameraMenu = new Menu("View"));
+        //cameraMenu.add(zBufferItem = new CheckboxMenuItem("Z Buffer"));
+        //zBufferItem.addActionListener(this);
+        //cameraMenu.add(normalLensItem = new MenuItem("Normal Lens"));
+        //normalLensItem.addActionListener(this);
+        cameraMenu.add(revertCameraItem = new MenuItem("Revert Camera"));
+        revertCameraItem.addActionListener(this);
+        
+        cameraMenu.add(toggleFullScreenItem = new CheckboxMenuItem("Full Screen"));
+        toggleFullScreenItem.addItemListener(this);
+        toggleFullScreenItem.setState(CameraPane.FULLSCREEN);
+        cameraMenu.add("-");
+        
+        cameraMenu.add(toggleTextureItem = new CheckboxMenuItem("Texture"));
+        toggleTextureItem.addItemListener(this);
+        toggleTextureItem.setState(CameraPane.textureon);
+        
+        cameraMenu.add(toggleSwitchItem = new CheckboxMenuItem("Switch"));
+        toggleSwitchItem.addItemListener(this);
+        toggleSwitchItem.setState(CameraPane.SWITCH);
+        
+        cameraMenu.add(toggleHandleItem = new CheckboxMenuItem("Handles"));
+        toggleHandleItem.addItemListener(this);
+        toggleHandleItem.setState(CameraPane.HANDLES);
+        
+        cameraMenu.add(togglePaintItem = new CheckboxMenuItem("Paint mode"));
+        togglePaintItem.addItemListener(this);
+        togglePaintItem.setState(CameraPane.PAINTMODE);
+        
+        if (Globals.ADVANCED)
+        {
+        cameraMenu.add("-");
+                cameraMenu.add(toggleLiveItem = new CheckboxMenuItem("Live"));
+                toggleLiveItem.addItemListener(this);
+                toggleLiveItem.setState(Globals.isLIVE());
 
+                cameraMenu.add(stepItem = new MenuItem("Step"));
+                stepItem.addActionListener(this);
+        //		cameraMenu.add(toggleDLItem = new CheckboxMenuItem("Display List"));
+        //		toggleDLItem.addItemListener(this);
+        //                toggleDLItem.setState(false);
+
+                cameraMenu.add(toggleRenderItem = new CheckboxMenuItem("Render"));
+                toggleRenderItem.addItemListener(this);
+                toggleRenderItem.setState(!CameraPane.frozen);
+
+                cameraMenu.add(toggleDebugItem = new CheckboxMenuItem("Debug"));
+                toggleDebugItem.addItemListener(this);
+                toggleDebugItem.setState(CameraPane.DEBUG);
+
+                cameraMenu.add(toggleFrustumItem = new CheckboxMenuItem("Frustum"));
+                toggleFrustumItem.addItemListener(this);
+                toggleFrustumItem.setState(CameraPane.FRUSTUM);
+
+                cameraMenu.add(toggleFootContactItem = new CheckboxMenuItem("Foot contact"));
+                toggleFootContactItem.addItemListener(this);
+                toggleFootContactItem.setState(CameraPane.FOOTCONTACT);
+                
+                cameraMenu.add(toggleTimelineItem = new CheckboxMenuItem("Timeline"));
+                toggleTimelineItem.addItemListener(this);
+        }
+        
+//		cameraMenu.add(toggleRootItem = new CheckboxMenuItem("Alternate Root"));
+//		toggleRootItem.addItemListener(this);
+//                    toggleRootItem.setState(false);
+//		cameraMenu.add(animationItem = new CheckboxMenuItem("Animation"));
+//		animationItem.addItemListener(this);
+//                    animationItem.setState(CameraPane.ANIMATION);
+        cameraMenu.add("-");
+        cameraMenu.add(editCameraItem = new MenuItem("Freeze Camera"));
+        editCameraItem.addActionListener(this);
+        
+        if (Globals.ADVANCED)
+        {
+		oe.cameraMenu.add(lookAtItem = new MenuItem("Set Interest"));
+		//cameraMenu.add(lookFromItem = new MenuItem("Look From Selection"));
+		//cameraMenu.add(switchItem = new MenuItem("Reverse View"));
+		editLeafItem = oe.cameraMenu.add(new MenuItem("Edit Leaf"));
+		oe.cameraMenu.add("-");
+		openWindowItem =  oe.cameraMenu.add(new MenuItem("Edit copy..."));
+		openWindowItem.addActionListener(this);
+		editLeafItem.addActionListener(this);
+		lookAtItem.addActionListener(this);
+		//lookFromItem.addActinoListener(this);
+		//switchItem.addActionListener(this);
+        }
+        
 		oe.menuBar.add(menu = new Menu("Setting"));
         if (Globals.ADVANCED)
         {
@@ -443,19 +515,6 @@
 		oe.menuBar.add(menu = new Menu("Insert"));
 		buildCreateMenu(menu);
                 
-                oe.menuBar.add(menu = new Menu("Include"));
-		importOBJItem = menu.add(new MenuItem("OBJ file..."));
-		importOBJItem.addActionListener(this);
-		menu.add("-");
-		import3DSItem = menu.add(new MenuItem("3DS file..."));
-		import3DSItem.addActionListener(this);
-		menu.add("-");
-		importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D file..."));
-		importVRMLX3DItem.addActionListener(this);
-		menu.add("-");
-		importGFDItem = menu.add(new MenuItem("GrafreeD file..."));
-		importGFDItem.addActionListener(this);
-
                 oe.menuBar.add(menu = new Menu("Tools"));
 		buildToolsMenu(menu);
 	}
@@ -1855,31 +1914,6 @@
                         csg.addChild(child);
                         child.addChild(csg);
 		} else
-                    
-		if (source == importGFDItem)
-		{
-			ImportGFD();
-		} else
-		if (source == importVRMLX3DItem)
-		{
-			ImportVRMLX3D();
-		} else
-		if (source == import3DSItem)
-		{
-			objEditor.ImportJME(new com.jmex.model.converters.MaxToJme(), "3ds", "Import 3DS");
-		} else
-		if (source == importOBJItem)
-		{
-			//objEditor.ImportJME(new com.jmex.model.converters.ObjToJme(), "obj", "Import OBJ");
-                            FileDialog browser = new FileDialog(frame, "Import OBJ", FileDialog.LOAD);
-                            browser.setVisible(true);
-                            String filename = browser.getFile();
-                            if (filename != null && filename.length() > 0)
-                            {
-                                String fullname = browser.getDirectory() + filename;
-                                makeSomething(ReadOBJ(fullname), true);
-                            }
-		} else
 		if (source == computeAOItem)
 		{
                     Globals.drawMode = CameraPane.OCCLUSION;
@@ -3095,7 +3129,20 @@
                     //group.attributes = -1;
                     ResetModel();
                     refreshContents(true);
-                }
+                } else if (event.getSource() == editCameraItem)
+                {
+                    cameraView.ProtectCamera();
+                    cameraView.repaint();
+                    return;
+                } else if (event.getSource() == revertCameraItem)
+                {
+                    cameraView.RevertCamera();
+                    cameraView.repaint();
+                    return;
+        //        } else if (event.getSource() == textureButton)
+        //        {
+        //            return; // true;
+                } 
                 else
                 {
 			//return super.action(event, arg);
@@ -4973,21 +5020,6 @@
         }
          */
 
-        void ImportGFD()
-        {
-            FileDialog browser = new FileDialog(objEditor.frame, "Import GrafreeD", FileDialog.LOAD);
-            browser.show();
-            String filename = browser.getFile();
-            if (filename != null && filename.length() > 0)
-            {
-                String fullname = browser.getDirectory() + filename;
-
-                //Object3D readobj =
-                        objEditor.ReadGFD(fullname, objEditor);
-                //makeSomething(readobj);
-            }
-        }
-        
         /*
         public void Callback(Object obj)
         {
@@ -5011,23 +5043,6 @@
         }
          */
 
-	void ImportVRMLX3D()
-	{
-		if (Grafreed.standAlone)
-		{
-                    /**/
-			FileDialog browser = new FileDialog(objEditor.frame, "Import VRML/X3D", FileDialog.LOAD);
-			browser.show();
-			String filename = browser.getFile();
-			if (filename != null && filename.length() > 0)
-			{
-				String fullname = browser.getDirectory() + filename;
-                                LoadVRMLX3D(fullname);
-			}
-                     /**/
-		}
-	}
-				
 	String GetFile(String dialogName)
 	{
 		if (Grafreed.standAlone)
@@ -5276,11 +5291,6 @@
 	private MenuItem doubleItem;
 	private MenuItem tripleItem;
         
-	private MenuItem importGFDItem;
-	private MenuItem importVRMLX3DItem;
-	private MenuItem import3DSItem;
-	private MenuItem importOBJItem;
-
 	private MenuItem computeAOItem;
 	private MenuItem recompileItem;
 	private MenuItem editScriptItem;
@@ -5290,4 +5300,8 @@
 	private MenuItem analyzeItem;
 	private MenuItem dumpItem;
 	//boolean freezemodel = false;
+        
+    Menu cameraMenu;
+    MenuItem editCameraItem;
+    MenuItem revertCameraItem;
 }
diff --git a/ObjEditor.java b/ObjEditor.java
index 00cc42b..1edfe37 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -276,24 +276,40 @@
     void SetupMenu()
     {
         frame.setMenuBar(menuBar = new MenuBar());
-        menuBar.add(windowMenu = new Menu("File"));
-        windowMenu.add(loadItem = new MenuItem("Load..."));
-        windowMenu.add("-");
-        windowMenu.add(saveItem = new MenuItem("Save"));
-        windowMenu.add(saveAsItem = new MenuItem("Save As..."));
+        menuBar.add(fileMenu = new Menu("File"));
+        fileMenu.add(newItem = new MenuItem("New"));
+        fileMenu.add(loadItem = new MenuItem("Load..."));
+        
+                //oe.menuBar.add(menu = new Menu("Include"));
+        Menu menu = new Menu("Import");
+		importOBJItem = menu.add(new MenuItem("OBJ file..."));
+		importOBJItem.addActionListener(this);
+		import3DSItem = menu.add(new MenuItem("3DS file..."));
+		import3DSItem.addActionListener(this);
+		importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D file..."));
+		importVRMLX3DItem.addActionListener(this);
+		menu.add("-");
+		importGFDItem = menu.add(new MenuItem("Grafreed file..."));
+		importGFDItem.addActionListener(this);
+        fileMenu.add(menu);
+        fileMenu.add("-");
+
+        fileMenu.add(saveItem = new MenuItem("Save"));
+        fileMenu.add(saveAsItem = new MenuItem("Save As..."));
         //windowMenu.add(povItem = new MenuItem("Emit POV-Ray..."));
-        windowMenu.add("-");
-        windowMenu.add(exportAsItem = new MenuItem("Export Selection..."));
-        windowMenu.add(reexportItem = new MenuItem("Re-export"));
-        windowMenu.add("-");
+        fileMenu.add("-");
+        fileMenu.add(exportAsItem = new MenuItem("Export Selection..."));
+        fileMenu.add(reexportItem = new MenuItem("Re-export"));
+        fileMenu.add("-");
         if (client.parent != null)
         {
-            windowMenu.add(closeItem = new MenuItem("Close"));
+            fileMenu.add(closeItem = new MenuItem("Close"));
         } else
         {
-            windowMenu.add(closeItem = new MenuItem("Exit"));
+            fileMenu.add(closeItem = new MenuItem("Exit"));
         }
 
+        newItem.addActionListener(this);
         loadItem.addActionListener(this);
         saveItem.addActionListener(this);
         saveAsItem.addActionListener(this);
@@ -301,78 +317,6 @@
         reexportItem.addActionListener(this);
         //povItem.addActionListener(this);
         closeItem.addActionListener(this);
-
-        menuBar.add(cameraMenu = new Menu("View"));
-        //cameraMenu.add(zBufferItem = new CheckboxMenuItem("Z Buffer"));
-        //zBufferItem.addActionListener(this);
-        //cameraMenu.add(normalLensItem = new MenuItem("Normal Lens"));
-        //normalLensItem.addActionListener(this);
-        cameraMenu.add(revertCameraItem = new MenuItem("Revert Camera"));
-        revertCameraItem.addActionListener(this);
-        
-        cameraMenu.add(toggleFullScreenItem = new CheckboxMenuItem("Full Screen"));
-        toggleFullScreenItem.addItemListener(this);
-        toggleFullScreenItem.setState(CameraPane.FULLSCREEN);
-        cameraMenu.add("-");
-        
-        cameraMenu.add(toggleTextureItem = new CheckboxMenuItem("Texture"));
-        toggleTextureItem.addItemListener(this);
-        toggleTextureItem.setState(CameraPane.textureon);
-        
-        cameraMenu.add(toggleSwitchItem = new CheckboxMenuItem("Switch"));
-        toggleSwitchItem.addItemListener(this);
-        toggleSwitchItem.setState(CameraPane.SWITCH);
-        
-        cameraMenu.add(toggleHandleItem = new CheckboxMenuItem("Handles"));
-        toggleHandleItem.addItemListener(this);
-        toggleHandleItem.setState(CameraPane.HANDLES);
-        
-        cameraMenu.add(togglePaintItem = new CheckboxMenuItem("Paint mode"));
-        togglePaintItem.addItemListener(this);
-        togglePaintItem.setState(CameraPane.PAINTMODE);
-        
-        if (Globals.ADVANCED)
-        {
-        cameraMenu.add("-");
-                cameraMenu.add(toggleLiveItem = new CheckboxMenuItem("Live"));
-                toggleLiveItem.addItemListener(this);
-                toggleLiveItem.setState(Globals.isLIVE());
-
-                cameraMenu.add(stepItem = new MenuItem("Step"));
-                stepItem.addActionListener(this);
-        //		cameraMenu.add(toggleDLItem = new CheckboxMenuItem("Display List"));
-        //		toggleDLItem.addItemListener(this);
-        //                toggleDLItem.setState(false);
-
-                cameraMenu.add(toggleRenderItem = new CheckboxMenuItem("Render"));
-                toggleRenderItem.addItemListener(this);
-                toggleRenderItem.setState(!CameraPane.frozen);
-
-                cameraMenu.add(toggleDebugItem = new CheckboxMenuItem("Debug"));
-                toggleDebugItem.addItemListener(this);
-                toggleDebugItem.setState(CameraPane.DEBUG);
-
-                cameraMenu.add(toggleFrustumItem = new CheckboxMenuItem("Frustum"));
-                toggleFrustumItem.addItemListener(this);
-                toggleFrustumItem.setState(CameraPane.FRUSTUM);
-
-                cameraMenu.add(toggleFootContactItem = new CheckboxMenuItem("Foot contact"));
-                toggleFootContactItem.addItemListener(this);
-                toggleFootContactItem.setState(CameraPane.FOOTCONTACT);
-                
-                cameraMenu.add(toggleTimelineItem = new CheckboxMenuItem("Timeline"));
-                toggleTimelineItem.addItemListener(this);
-        }
-        
-//		cameraMenu.add(toggleRootItem = new CheckboxMenuItem("Alternate Root"));
-//		toggleRootItem.addItemListener(this);
-//                    toggleRootItem.setState(false);
-//		cameraMenu.add(animationItem = new CheckboxMenuItem("Animation"));
-//		animationItem.addItemListener(this);
-//                    animationItem.setState(CameraPane.ANIMATION);
-        cameraMenu.add("-");
-        cameraMenu.add(editCameraItem = new MenuItem("Freeze Camera"));
-        editCameraItem.addActionListener(this);
 
         objectPanel = new JTabbedPane();
         toolbarPanel = new JPanel();
@@ -3052,8 +2996,9 @@
 
     public void actionPerformed(ActionEvent event)
     {
+        Object source = event.getSource();
         // SCRIPT DIALOG
-        if (event.getSource() == okbutton)
+        if (source == okbutton)
         {
             textpanel.setVisible(false);
             textpanel.remove(textarea);
@@ -3065,7 +3010,7 @@
             textarea = null;
             textpanel = null;
         }
-        if (event.getSource() == cancelbutton)
+        if (source == cancelbutton)
         {
             textpanel.setVisible(false);
             textpanel.remove(textarea);
@@ -3077,50 +3022,50 @@
         //applySelf();
         //client.refreshEditWindow();
         //refreshContents();
-        if (event.getSource() == nameField)
+        if (source == nameField)
         {
             //System.out.println("ObjEditor " + event);
             applySelf0(true);
             //parent.applySelf();
             objEditor.refreshContents();
-        } else if (event.getSource() == resetButton)
+        } else if (source == resetButton)
         {
             CameraPane.fullreset = true;
             copy.Reset(); // ResetMeshes();
             copy.Touch();
             objEditor.refreshContents();
-        } else if (event.getSource() == stepItem)
+        } else if (source == stepItem)
         {
             //cameraView.ONESTEP = true;
             Globals.ONESTEP = true;
             cameraView.repaint();
             return;
-        } else if (event.getSource() == stepButton)
+        } else if (source == stepButton)
         {
             copy.Step();
             copy.Touch();
             objEditor.refreshContents();
-        } else if (event.getSource() == slowerButton)
+        } else if (source == slowerButton)
         {
             copy.Slower();
             copy.Touch();
             objEditor.refreshContents();
-        } else if (event.getSource() == fasterButton)
+        } else if (source == fasterButton)
         {
             copy.Faster();
             copy.Touch();
             objEditor.refreshContents();
-        } else if (event.getSource() == remarkButton)
+        } else if (source == remarkButton)
         {
             copy.Remark();
             copy.Touch();
             objEditor.refreshContents();
-        } else if (event.getSource() == stepAllButton)
+        } else if (source == stepAllButton)
         {
             copy.StepAll();
             copy.Touch();
             objEditor.refreshContents();
-        } else if (event.getSource() == resetAllButton)
+        } else if (source == resetAllButton)
         {
             //CameraPane.fullreset = true;
             copy.ResetAll(); // ResetMeshes();
@@ -3153,53 +3098,75 @@
         //			Close();
         //		}
         //                else
-        if (event.getSource() == resetSlidersButton)
+        if (source == resetSlidersButton)
         {
             ResetSliders();
-        } else if (event.getSource() == clearMaterialButton)
+        } else if (source == clearMaterialButton)
         {
             ClearMaterial();
-        } else if (event.getSource() == createMaterialButton)
+        } else if (source == createMaterialButton)
         {
             CreateMaterial();
-        } else if (event.getSource() == clearPanelButton)
+        } else if (source == clearPanelButton)
         {
             copy.ClearUI();
             refreshContents(true);
-        } /*
-        }
-        
-        public boolean action(Event event, Object arg)
-        {
-         */ else if (event.getSource() == closeItem)
+        } else if (source == importGFDItem)
+		{
+			ImportGFD();
+		} else
+		if (source == importVRMLX3DItem)
+		{
+			ImportVRMLX3D();
+		} else
+		if (source == import3DSItem)
+		{
+			objEditor.ImportJME(new com.jmex.model.converters.MaxToJme(), "3ds", "Import 3DS");
+		} else
+		if (source == importOBJItem)
+		{
+			//objEditor.ImportJME(new com.jmex.model.converters.ObjToJme(), "obj", "Import OBJ");
+                            FileDialog browser = new FileDialog(frame, "Import OBJ", FileDialog.LOAD);
+                            browser.setVisible(true);
+                            String filename = browser.getFile();
+                            if (filename != null && filename.length() > 0)
+                            {
+                                String fullname = browser.getDirectory() + filename;
+                                makeSomething(ReadOBJ(fullname), true);
+                            }
+		} else
+        if (source == closeItem)
         {
             Close();
             //return true;
-        } else if (event.getSource() == loadItem)
+        } else if (source == loadItem)
         {
             load();
             //return true;
-        } else if (event.getSource() == saveItem)
+        } else if (source == newItem)
+        {
+            New();
+        } else if (source == saveItem)
         {
             save();
             //return true;
-        } else if (event.getSource() == saveAsItem)
+        } else if (source == saveAsItem)
         {
             saveAs();
             //return true;
-        } else if (event.getSource() == reexportItem)
+        } else if (source == reexportItem)
         {
             reexport();
             //return true;
-        } else if (event.getSource() == exportAsItem)
+        } else if (source == exportAsItem)
         {
             export();
             //return true;
-        } else if (event.getSource() == povItem)
+        } else if (source == povItem)
         {
             generatePOV();
             //return true;
-        } else if (event.getSource() == zBufferItem)
+        } else if (source == zBufferItem)
         {
             try
             {
@@ -3221,21 +3188,8 @@
         cameraView.repaint();
         //return true;
         }
-         */ else if (event.getSource() == editCameraItem)
-        {
-            cameraView.ProtectCamera();
-            cameraView.repaint();
-            return;
-        } else if (event.getSource() == revertCameraItem)
-        {
-            cameraView.RevertCamera();
-            cameraView.repaint();
-            return;
-//        } else if (event.getSource() == textureButton)
-//        {
-//            return; // true;
-        } else // combos...
-        if (event.getSource() == texresMenu)
+         */ else // combos...
+        if (source == texresMenu)
         {
             System.err.println("Object = " + copy + "; change value " + copy.texres + " to " + texresMenu.getSelectedIndex());
             copy.texres = texresMenu.getSelectedIndex();
@@ -3247,6 +3201,48 @@
         }
     }
 
+    void New()
+    {
+        while (copy.Size() > 1)
+        {
+            copy.remove(1);
+        }
+        ResetModel();
+        objEditor.refreshContents();
+    }
+    
+        void ImportGFD()
+        {
+            FileDialog browser = new FileDialog(objEditor.frame, "Import GrafreeD", FileDialog.LOAD);
+            browser.show();
+            String filename = browser.getFile();
+            if (filename != null && filename.length() > 0)
+            {
+                String fullname = browser.getDirectory() + filename;
+
+                //Object3D readobj =
+                        objEditor.ReadGFD(fullname, objEditor);
+                //makeSomething(readobj);
+            }
+        }
+        
+	void ImportVRMLX3D()
+	{
+		if (Grafreed.standAlone)
+		{
+                    /**/
+			FileDialog browser = new FileDialog(objEditor.frame, "Import VRML/X3D", FileDialog.LOAD);
+			browser.show();
+			String filename = browser.getFile();
+			if (filename != null && filename.length() > 0)
+			{
+				String fullname = browser.getDirectory() + filename;
+                                LoadVRMLX3D(fullname);
+			}
+                     /**/
+		}
+	}
+				
     void ToggleAnimation()
     {
         if (!Globals.ANIMATION)
@@ -4501,7 +4497,8 @@
     Object3D client;
     Object3D copy;
     MenuBar menuBar;
-    Menu windowMenu;
+    Menu fileMenu;
+    MenuItem newItem;
     MenuItem loadItem;
     MenuItem saveItem;
     MenuItem saveAsItem;
@@ -4509,11 +4506,9 @@
     MenuItem reexportItem;
     MenuItem povItem;
     MenuItem closeItem;
-    Menu cameraMenu;
+    
     CheckboxMenuItem zBufferItem;
     //MenuItem normalLensItem;
-    MenuItem editCameraItem;
-    MenuItem revertCameraItem;
     MenuItem stepItem;
     CheckboxMenuItem toggleLiveItem;
     CheckboxMenuItem toggleFullScreenItem;
@@ -4661,4 +4656,9 @@
     //ObjectUI parent;
     
     cNumberSlider normalpushField;
+    
+	private MenuItem importGFDItem;
+	private MenuItem importVRMLX3DItem;
+	private MenuItem import3DSItem;
+	private MenuItem importOBJItem;
 }
diff --git a/Object3D.java b/Object3D.java
index 56b46d5..8205153 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -775,7 +775,7 @@
         if (step == 0)
             step = 1;
         if (maxcount == 0)
-            maxcount = 2048; // 4;
+            maxcount = 128; // 2048; // 4;
 //        if (acceleration == 0)
 //            acceleration = 10;
         if (delay == 0) // serial
@@ -6950,8 +6950,8 @@
 //            {
 //                CameraPane.Ymax = spoth;
 //            }
-            info.g.drawLine(spotw, spoth, spotw, spoth - 15);
-            info.g.drawLine(spotw, spoth, spotw - 15, spoth);
+            // bonhommes info.g.drawLine(spotw, spoth, spotw, spoth - 15);
+            //info.g.drawLine(spotw, spoth, spotw - 15, spoth);
             spot.translate(0, -32);
             info.g.setColor(Color.green);
             info.g.fillRect(spot.x, spot.y, spot.width, spot.height);
@@ -7006,7 +7006,7 @@
         startX = info.x;
         startY = info.y;
 
-        hitSomething = 0;
+        hitSomething = -1;
         cVector origin = new cVector();
         //LA.xformPos(origin, toParent, origin);
         Rectangle spot = new Rectangle();
@@ -7082,6 +7082,7 @@
         //System.out.println("hitSomething = " + hitSomething);
 
         double scale = 0.005f * info.camera.Distance();
+        
         cVector xlate = new cVector();
         //cVector xlate2 = new cVector();
         switch (hitSomething)
@@ -7230,24 +7231,27 @@
 
             case hitScale: // scale
                 double hScale = (double) (info.x - centerPt.x) / 32;
+                double sign = 1;
+                if (hScale < 0)
+                {
+                    sign = -1;
+                }
+                hScale = sign*Math.pow(sign*hScale, scale * 50);
                 if (hScale < 0.01)
                 {
-                    hScale = 0.01;
+                    //hScale = 0.01;
                 }
-                hScale = Math.pow(hScale, scale * 50);
-                if (hScale < 0.01)
-                {
-                    hScale = 0.01;
-                }
+                
                 double vScale = (double) (info.y - centerPt.y) / 32;
-                if (vScale < 0.01)
+                sign = 1;
+                if (vScale < 0)
                 {
-                    vScale = 0.01;
+                    sign = -1;
                 }
-                vScale = Math.pow(vScale, scale * 50);
+                vScale = sign*Math.pow(sign*vScale, scale * 50);
                 if (vScale < 0.01)
                 {
-                    vScale = 0.01;
+                    //vScale = 0.01;
                 }
                 LA.matCopy(startMat, toParent);
                 /**/
@@ -7258,17 +7262,24 @@
                 }
                 /**/
 
+                double totalScale = Math.sqrt(hScale*hScale + vScale*vScale) / Math.sqrt(2);
+                        
+                if (totalScale < 0.01)
+                {
+                    totalScale = 0.01;
+                }
+                
                 switch (info.pane.RenderCamera().viewCode)
                 {
                     case 3: // '\001'
                         if (modified)
                         {
                             //LA.matScale(toParent, 1, hScale, vScale);
-                            LA.matScale(toParent, vScale, 1, 1);
+                            LA.matScale(toParent, totalScale, 1, 1);
                         } // vScale, 1);
                         else
                         {
-                            LA.matScale(toParent, vScale, vScale, vScale);
+                            LA.matScale(toParent, totalScale, totalScale, totalScale);
                         } // vScale, 1);
                         break;
 
@@ -7276,10 +7287,10 @@
                         if (modified)
                         {
                             //LA.matScale(toParent, hScale, 1, vScale);
-                            LA.matScale(toParent, 1, vScale, 1);
+                            LA.matScale(toParent, 1, totalScale, 1);
                         } else
                         {
-                            LA.matScale(toParent, vScale, 1, vScale);
+                            LA.matScale(toParent, totalScale, 1, totalScale);
                         }
                         break;
 
@@ -7287,10 +7298,10 @@
                         if (modified)
                         {
                             //LA.matScale(toParent, hScale, vScale, 1);
-                            LA.matScale(toParent, 1, 1, vScale);
+                            LA.matScale(toParent, 1, 1, totalScale);
                         } else
                         {
-                            LA.matScale(toParent, vScale, vScale, 1);
+                            LA.matScale(toParent, totalScale, totalScale, 1);
                         }
                         break;
                 }
@@ -7431,7 +7442,7 @@
             objname = name + " " + System.identityHashCode(this) + " (" + parent.name + " " + System.identityHashCode(parent) + ")";
         } else
         {
-            objname = GetName() + (Math.abs(count) == 1000 ? (count == 1000 ? " " : " * ") : (" (" + (count /*- 1*/) + ")")) + /*(IsSelected()?"(selected) ":"") + (touched?"(touched) ":"") */ "";
+            objname = GetName() + (Math.abs(count) == 1000 ? (count == 1000 ? " " : " * ") : (" (" + (count - 1) + ")")) + /*(IsSelected()?"(selected) ":"") + (touched?"(touched) ":"") */ "";
         } //  + super.toString();
     //return name + " (" + (SizeOf.deepSizeOf(this)/1024) + "K) " + this.getClass().getName();
         
@@ -7679,9 +7690,9 @@
     private static cVector edge2 = new cVector();
     //private static cVector norm = new cVector();
     /*transient private*/ int hitSomething;
-    private static final int hitCenter = 1;
-    private static final int hitScale = 2;
-    private static final int hitRotate = 3;
+    static final int hitCenter = 1;
+    static final int hitScale = 2;
+    static final int hitRotate = 3;
     /*transient*/ /*private*/ int viewCode; // Now used for transparency cache flag
 	/*transient*/ private Point centerPt;
     /*transient*/ private int startX;

--
Gitblit v1.6.2