From 89da025f40680d9cea46f2b0a7c8c6829a0d0451 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sun, 12 Apr 2015 19:37:37 -0400
Subject: [PATCH] Height fields.

---
 GroupEditor.java |  390 +++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 290 insertions(+), 100 deletions(-)

diff --git a/GroupEditor.java b/GroupEditor.java
index f50fede..200e78d 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -14,7 +14,7 @@
 
 //import buoy.widget.BFileChooser;
 
-class GroupEditor extends ObjEditor implements iParse, //iCallBack,
+class GroupEditor extends ObjEditor implements //iParse, //iCallBack,
         ObjectUI,
         Runnable,
         ActionListener,
@@ -188,8 +188,9 @@
 		clearItem.addActionListener(this);
 		clearAllItem = menu.add(new MenuItem("Clear All"));
 		clearAllItem.addActionListener(this);
-		menu.add("-");
-		resetMeshItem = menu.add(new MenuItem("Reset All"));
+
+		oe.menuBar.add(menu = new Menu("Setting"));
+                resetMeshItem = menu.add(new MenuItem("Reset All"));
 		resetMeshItem.addActionListener(this);
 		stepAllItem = menu.add(new MenuItem("Step All"));
 		stepAllItem.addActionListener(this);
@@ -221,7 +222,7 @@
 		setMasterItem = menu.add(new MenuItem("Set Master Mesh"));
 		setMasterItem.addActionListener(this);
                 
-		oe.menuBar.add(menu = new Menu("Object"));
+		oe.menuBar.add(menu = new Menu("Group"));
 		grabItem = menu.add(new MenuItem("Grab"));
 		grabItem.addActionListener(this);
 		frontItem = menu.add(new MenuItem("Front"));
@@ -247,7 +248,8 @@
 		scriptNodeItem.addActionListener(this);
 		cameraItem = menu.add(new MenuItem("Camera"));
 		cameraItem.addActionListener(this);
-		menu.add("-");
+                
+		oe.menuBar.add(menu = new Menu("Object"));
 		textureItem = menu.add(new MenuItem("Texture"));
 		textureItem.addActionListener(this);
 		csgItem = menu.add(new MenuItem("CSG"));
@@ -292,8 +294,6 @@
 		untrimItem = menu.add(new MenuItem("Untrim"));
 		untrimItem.addActionListener(this);
 		menu.add("-");
-		clearMaterialsItem = menu.add(new MenuItem("Clear Materials"));
-		clearMaterialsItem.addActionListener(this);
 		clearColorsItem = menu.add(new MenuItem("Clear AO"));
 		clearColorsItem.addActionListener(this);
 		reverseNormalsItem = menu.add(new MenuItem("Reverse Normals"));
@@ -310,6 +310,10 @@
 		smoothMeshItem.addActionListener(this);
 		clipMeshItem = menu.add(new MenuItem("Clip mesh"));
 		clipMeshItem.addActionListener(this);
+
+                oe.menuBar.add(menu = new Menu("Attributes"));
+		clearMaterialsItem = menu.add(new MenuItem("Clear Materials"));
+		clearMaterialsItem.addActionListener(this);
 		menu.add("-");
 		liveleavesItem = menu.add(new MenuItem("Live Leaves"));
 		liveleavesItem.addActionListener(this);
@@ -332,27 +336,18 @@
 		flipVItem.addActionListener(this);
 		unflipVItem = menu.add(new MenuItem("Unflip V"));
 		unflipVItem.addActionListener(this);
-		lowTexturesItem = menu.add(new MenuItem("Low Texture"));
+		lowTexturesItem = menu.add(new MenuItem("Low Texture (256)"));
 		lowTexturesItem.addActionListener(this);
-		normalTexturesItem = menu.add(new MenuItem("Normal Texture"));
+		normalTexturesItem = menu.add(new MenuItem("Normal Texture (512)"));
 		normalTexturesItem.addActionListener(this);
-		highTexturesItem = menu.add(new MenuItem("High Texture"));
+		highTexturesItem = menu.add(new MenuItem("High Texture (1024)"));
 		highTexturesItem.addActionListener(this);
-		veryhighTexturesItem = menu.add(new MenuItem("Very high Texture"));
+		veryhighTexturesItem = menu.add(new MenuItem("Very high Texture (2048)"));
 		veryhighTexturesItem.addActionListener(this);
-		maxTexturesItem = menu.add(new MenuItem("Max Texture"));
+		maxTexturesItem = menu.add(new MenuItem("Max Texture (4096)"));
 		maxTexturesItem.addActionListener(this);
-		panoTexturesItem = menu.add(new MenuItem("Panoramic Texture"));
+		panoTexturesItem = menu.add(new MenuItem("Panoramic Texture (8192)"));
 		panoTexturesItem.addActionListener(this);
-		menu.add("-");
-		extractGeometriesItem = menu.add(new MenuItem("Link Geometry"));
-		extractGeometriesItem.addActionListener(this);
-		cloneGeometriesItem = menu.add(new MenuItem("Clone Geometry"));
-		cloneGeometriesItem.addActionListener(this);
-		shareGeometriesItem = menu.add(new MenuItem("Share Geometry"));
-		shareGeometriesItem.addActionListener(this);
-		mergeGeometriesItem = menu.add(new MenuItem("Merge Geometry"));
-		mergeGeometriesItem.addActionListener(this);
                 
 		oe.menuBar.add(menu = new Menu("Selection"));
 		attachPigmentItem = menu.add(new MenuItem("Attach Pigment..."));
@@ -370,9 +365,31 @@
 		sortbysizeItem.addActionListener(this);
 		sortbynameItem = menu.add(new MenuItem("Sort by name"));
 		sortbynameItem.addActionListener(this);
+		menu.add("-");
+		extractGeometriesItem = menu.add(new MenuItem("Link Geometry"));
+		extractGeometriesItem.addActionListener(this);
+		cloneGeometriesItem = menu.add(new MenuItem("Clone Geometry"));
+		cloneGeometriesItem.addActionListener(this);
+		shareGeometriesItem = menu.add(new MenuItem("Share Geometry"));
+		shareGeometriesItem.addActionListener(this);
+		mergeGeometriesItem = menu.add(new MenuItem("Merge Geometry"));
+		mergeGeometriesItem.addActionListener(this);
+                
 		oe.menuBar.add(menu = new Menu("Insert"));
 		buildCreateMenu(menu);
-		oe.menuBar.add(menu = new Menu("Tools"));
+                
+               
+                oe.menuBar.add(menu = new Menu("Include"));
+		importGFDItem = menu.add(new MenuItem("GraphreeD Object..."));
+		importGFDItem.addActionListener(this);
+		importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D Object..."));
+		importVRMLX3DItem.addActionListener(this);
+		importOBJItem = menu.add(new MenuItem("OBJ Object..."));
+		importOBJItem.addActionListener(this);
+		import3DSItem = menu.add(new MenuItem("3DS Object..."));
+		import3DSItem.addActionListener(this);
+
+                oe.menuBar.add(menu = new Menu("Tools"));
 		buildToolsMenu(menu);
 	}
 	
@@ -1002,6 +1019,8 @@
 	
 	void buildCreateMenu(Menu menu)
 	{
+		//heightFieldItem = menu.add(new MenuItem("Height Field"));
+		//heightFieldItem.addActionListener(this);
 		gridItem = menu.add(new MenuItem("Grid"));
 		gridItem.addActionListener(this);
 		rectoidItem = menu.add(new MenuItem("Box"));
@@ -1048,15 +1067,6 @@
 		doubleItem.addActionListener(this);
 		tripleItem = menu.add(new MenuItem("Trident"));
 		tripleItem.addActionListener(this);
-		menu.add("-");
-		importGFDItem = menu.add(new MenuItem("GraphreeD Object..."));
-		importGFDItem.addActionListener(this);
-		importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D Object..."));
-		importVRMLX3DItem.addActionListener(this);
-		importOBJItem = menu.add(new MenuItem("OBJ Object..."));
-		importOBJItem.addActionListener(this);
-		import3DSItem = menu.add(new MenuItem("3DS Object..."));
-		import3DSItem.addActionListener(this);
 	}
         
 	void buildToolsMenu(Menu menu)
@@ -1068,6 +1078,8 @@
 		menu.add("-");
 		parseverticesItem = menu.add(new MenuItem("Multiplicity"));
 		parseverticesItem.addActionListener(this);
+		textureFieldItem = menu.add(new MenuItem("Texture Field"));
+		textureFieldItem.addActionListener(this);
 		alignItem = menu.add(new MenuItem("Align"));
 		alignItem.addActionListener(this);
 		mirrorItem = menu.add(new MenuItem("Mirror Poses"));
@@ -1521,6 +1533,46 @@
                     makeSomething(ragdoll);
 			//makeSomething(new VehicleDemo());
 		} else
+                    /*
+                     */
+		if (event.getSource() == heightFieldItem)
+		{
+                    Object3D obj = new Object3D();
+                    
+                    obj.CreateMaterial();
+                    obj.bRep = new BoundaryRep();
+                    
+                    obj.bRep.CreateMesh(new iHeightField()
+                    {
+                        public double f(double x, double y)
+                        {
+       // The Mandelbrot set is represented by coloring
+            // each point (x,y) according to the number of
+            // iterations it takes before the while loop in 
+            // this method ends.  For points that are actually
+            // in the Mandelbrot set, or very close to it, the 
+            // count will reach the maximum value, 80.  These
+            // points will be colored purple.  All other colors
+            // represent points that are definitely NOT in the set.
+                            x -= 600;
+                            y -= 500;
+                            x /= 200;
+                            y /= 200;
+         int count = 0;
+         double zx = x;
+         double zy = y;
+         while (count < 80 && Math.abs(x) < 100 && Math.abs(zy) < 100) {
+            double new_zx = zx*zx - zy*zy + x;
+            zy = 2*zx*zy + y;
+            zx = new_zx;
+            count++;
+         }
+         return count; // Math.sqrt(count);
+                        }
+                    }, 1000,1000);
+                    
+                    makeSomething(obj);
+		} else
 		if (event.getSource() == gridItem)
 		{
 			makeSomething(new Grid());
@@ -1570,7 +1622,7 @@
                         LA.matConcat(obj.toParent, cameraView.renderCamera.fromParent, obj.toParent);
 			LA.matInvert(obj.toParent, obj.fromParent);
                      */
-			makeSomething(new CheckerIG());
+			makeSomething(new Checker());
 		} else
 		if (event.getSource() == meshItem)
 		{
@@ -2352,6 +2404,10 @@
 		if (event.getSource() == parseverticesItem)
                 {
 			ParseVertices();
+		} else
+		if (event.getSource() == textureFieldItem)
+                {
+			TextureVertices();
 		} else
 		if (event.getSource() == alignItem)
                 {
@@ -3157,96 +3213,228 @@
 
         //Object3D buffer;
         cVector temp = new cVector();
-        BoundaryRep temprep;
-        Object3D nodes;
-        Vector<Vertex> vertices;
-        
-        public void Vertex(Object3D node, Vertex v)
-        {
-            vertices.add(v);
-            nodes.addElement(node);
-            
-            if (temprep.GetCache(v) != null)
-            {
-                temprep.Remove(v);
-            }
-            else
-            {
-                temprep.Remember(v);
-            }
-        }
-        
-        public void Face(Object3D node, Face f)
-        {
-            
-        }
-        
+//        BoundaryRep temprep;
+//        Object3D nodes;
+//        Vector<Vertex> vertices;
+//        
+//        cGroup buffer;
+//        
+//        public void Vertex(Object3D node, Vertex v)
+//        {
+////            vertices.add(v);
+////            nodes.addElement(node);
+////
+////            if (temprep.GetCache(v) != null)
+////            {
+////                temprep.Remove(v);
+////            } else
+////            {
+////                temprep.Remember(v);
+////            }
+//            
+//                    //Object3D node = nodes.get(index);
+//                    temp.set(v); // vertices.get(index)); // temprep.GetVertex(k));
+//                  //  System.out.println("temp = " + temp.x + ", " + temp.y + ", " + temp.z);
+//
+//                    LA.xformPos(temp, node.GlobalTransformInv(), temp);
+//                    
+//                  //  System.out.println("tem+ = " + temp.x + ", " + temp.y + ", " + temp.z);
+//                    
+//                    cGroup g = new cGroup();
+//                    
+//                    if (g.toParent == null)
+//                    {
+//                        g.toParent = LA.newMatrix();
+//                        g.fromParent = LA.newMatrix();
+//                    }
+//                    LA.matTranslate(g.toParent, temp.x, temp.y, temp.z);
+//                    LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z);
+//
+//                    g.add(GraphreeD.clipboard);
+//
+//                    buffer.add(g);
+//        }
+//        
+//        public void Face(Object3D node, Face f)
+//        {
+//            
+//        }
+//        
+//	void ParseVerticesOld() // ??
+//	{
+//            //if (group.selection.size() != 1)
+//            //    return;
+//            
+//            temprep = new BoundaryRep();
+//            nodes = new Object3D();
+//            vertices = new Vector<Vertex>();
+//            
+//            boolean epsequal = GraphreeD.epsequal;
+//            GraphreeD.epsequal = true;
+//            
+//            for (int i=0; i<group.selection.size(); i++)
+//            {
+//                Object3D buffer = new cGroup(group.selection.get(i).name + "+");
+//            
+//		group.selection.get(i).Parse(
+//this                        );
+//                
+//                int repsize = temprep.VertexCount();
+//                int tablesize = temprep.vertextable.size();
+//                int nodesize = nodes.size();
+//
+//                assert(vertices.size() == nodes.size());
+//                
+//                temprep.vertextable.elements();
+//                
+//                java.util.Set<java.util.Map.Entry<Vertex,Vertex>> set = temprep.vertextable.entrySet();
+//
+//                for (java.util.Map.Entry<Vertex,Vertex> entry : set)
+//                {
+//                    cGroup g = new cGroup();
+//
+//                    int index = vertices.indexOf(entry.getValue()); // temprep.vertextable.(k));
+//                    
+//                    Object3D node = nodes.get(index);
+//                    temp.set(vertices.get(index)); // temprep.GetVertex(k));
+//                  //  System.out.println("temp = " + temp.x + ", " + temp.y + ", " + temp.z);
+//
+//                    LA.xformPos(temp, node.GlobalTransformInv(), temp);
+//                    
+//                  //  System.out.println("tem+ = " + temp.x + ", " + temp.y + ", " + temp.z);
+//                    
+//                    if (g.toParent == null)
+//                    {
+//                        g.toParent = LA.newMatrix();
+//                        g.fromParent = LA.newMatrix();
+//                    }
+//                    LA.matTranslate(g.toParent, temp.x, temp.y, temp.z);
+//                    LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z);
+//
+//                    g.add(GraphreeD.clipboard);
+//
+//                    buffer.add(g);
+//                }
+//                
+//                makeSomething(buffer, i==group.selection.size()-1);
+//            }
+//            
+//            GraphreeD.epsequal = epsequal;
+//            
+//            //buffer = null;
+//            temprep = null;
+//            nodes = null;
+//            
+//            refreshContents();
+//	}
+	
 	void ParseVertices()
 	{
-            //if (group.selection.size() != 1)
-            //    return;
-            
-            temprep = new BoundaryRep();
-            nodes = new Object3D();
-            vertices = new Vector<Vertex>();
-            
             boolean epsequal = GraphreeD.epsequal;
             GraphreeD.epsequal = true;
             
             for (int i=0; i<group.selection.size(); i++)
             {
-                Object3D buffer = new cGroup(group.selection.get(i).name + "+");
+                final cGroup buffer = new cGroup(group.selection.get(i).name + "+");
             
-		group.selection.get(i).Parse(this);
-                
-                int repsize = temprep.VertexCount();
-                int tablesize = temprep.vertextable.size();
-                int nodesize = nodes.size();
+		group.selection.get(i).Parse(
+                        
+                        new iParse()
+                        {
+                            public void Vertex(Object3D node, Vertex v)
+                            {
+                                temp.set(v);
+                                LA.xformPos(temp, node.GlobalTransformInv(), temp);
 
-                assert(vertices.size() == nodes.size());
-                
-                temprep.vertextable.elements();
-                
-                java.util.Set<java.util.Map.Entry<Vertex,Vertex>> set = temprep.vertextable.entrySet();
+                                cGroup g = new cGroup();
 
-                for (java.util.Map.Entry<Vertex,Vertex> entry : set)
-                {
-                    cGroup g = new cGroup();
+                                if (g.toParent == null)
+                                {
+                                    g.toParent = LA.newMatrix();
+                                    g.fromParent = LA.newMatrix();
+                                }
+                                LA.matTranslate(g.toParent, temp.x, temp.y, temp.z);
+                                LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z);
 
-                    int index = vertices.indexOf(entry.getValue()); // temprep.vertextable.(k));
-                    Object3D node = nodes.get(index);
-                    temp.set(vertices.get(index)); // temprep.GetVertex(k));
-                  //  System.out.println("temp = " + temp.x + ", " + temp.y + ", " + temp.z);
+                                g.add(GraphreeD.clipboard);
 
-                    LA.xformPos(temp, node.GlobalTransformInv(), temp);
-                    
-                  //  System.out.println("tem+ = " + temp.x + ", " + temp.y + ", " + temp.z);
-                    
-                    if (g.toParent == null)
-                    {
-                        g.toParent = LA.newMatrix();
-                        g.fromParent = LA.newMatrix();
-                    }
-                    LA.matTranslate(g.toParent, temp.x, temp.y, temp.z);
-                    LA.matTranslate(g.fromParent, -temp.x, -temp.y, -temp.z);
+                                buffer.add(g);
+                            }
 
-                    g.add(GraphreeD.clipboard);
+                            public void Face(Object3D node, Face f)
+                            {
 
-                    buffer.add(g);
-                }
+                            }
+                        }
+                        );
                 
                 makeSomething(buffer, i==group.selection.size()-1);
             }
             
             GraphreeD.epsequal = epsequal;
             
-            //buffer = null;
-            temprep = null;
-            nodes = null;
+            refreshContents();
+	}
+        
+	void TextureVertices()
+	{
+            for (int i=0; i<group.selection.size(); i++)
+            {
+		group.selection.get(i).Parse(
+                    new iParse()
+                    {
+                        public void Vertex(Object3D node, Vertex v)
+                        {
+                            cTexture tex = node.GetTextures();
+                            String pigment = Object3D.GetPigment(tex);
+                            //String bump = Object3D.GetBump(tex);
+                            
+                            com.sun.opengl.util.texture.TextureData texturedata = CameraPane.theRenderer.GetTextureData(pigment, false, node.texres);
+                            
+                            double s = v.s;
+                            
+                            if (s == 1)
+                                s = 0;
+                            
+                            double t = v.t;
+                            
+                            if (t == 1)
+                                t = 0;
+                            
+                            int indexs = (int) (texturedata.getWidth() * s);
+                            int indext = (int) (texturedata.getHeight() * t);
+                            
+                            int index = indext * texturedata.getWidth() + indexs;
+                            
+                            java.nio.ByteBuffer bytebuf = (java.nio.ByteBuffer)texturedata.getBuffer();
+                                    
+                            int slide = bytebuf.capacity() / texturedata.getWidth() / texturedata.getHeight();
+                            
+                            float scale = bytebuf.get(index*slide) & 0xFF;
+                            scale += bytebuf.get(index*slide+1) & 0xFF;
+                            scale += bytebuf.get(index*slide+2) & 0xFF;
+                            scale /= 3;
+                            
+                            scale /= 0xFF;
+                            scale /= 4;
+                            
+                            //v.AO = scale;
+                            
+                            v.x += v.norm.x * scale;
+                            v.y += v.norm.y * scale;
+                            v.z += v.norm.z * scale;
+                        }
+
+                        public void Face(Object3D node, Face f)
+                        {
+                        }
+                    }
+                );
+            }
             
             refreshContents();
 	}
-	
+        
 	void Align()
 	{
             for (int i=0; i<group.selection.size(); i++)
@@ -4728,6 +4916,8 @@
 	private MenuItem particleItem;
 	private MenuItem ragdollItem;
 	private MenuItem ragdoll2Item;
+	private MenuItem heightFieldItem;
+	private MenuItem textureFieldItem;
 	private MenuItem gridItem;
 	private MenuItem rectoidItem;
 	private MenuItem ellipsoidItem;

--
Gitblit v1.6.2