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.
---
ObjEditor.java | 2
Texture.java | 4
Mocap.java | 16
BiparamEditor.java | 4
/dev/null | 26 --
ScriptNode.java | 8
BoundaryRep.java | 85 ++++++-
HeightField.java | 26 ++
CameraPane.java | 22 +
KDNode.java | 2
GroupEditor.java | 390 ++++++++++++++++++++++++--------
Checker.java | 27 ++
CheckerInterface.java | 5
KDTree.java | 4
Object3D.java | 61 +++-
iHeightField.java | 13 +
16 files changed, 514 insertions(+), 181 deletions(-)
diff --git a/BiparamEditor.java b/BiparamEditor.java
index f6f1aef..1525688 100644
--- a/BiparamEditor.java
+++ b/BiparamEditor.java
@@ -66,9 +66,9 @@
*/
super.SetupUI2(oe);
- uDivsField = AddSlider(oe.ctrlPanel, "U #", biparam.minUDivs, 256+biparam.minUDivs, biparam.uDivs);
+ uDivsField = AddSlider(oe.ctrlPanel, "U #", biparam.minUDivs, 1024+biparam.minUDivs, biparam.uDivs);
Return();
- vDivsField = AddSlider(oe.ctrlPanel, "V #", biparam.minVDivs, 256+biparam.minVDivs, biparam.vDivs);
+ vDivsField = AddSlider(oe.ctrlPanel, "V #", biparam.minVDivs, 1024+biparam.minVDivs, biparam.vDivs);
Return();
// oe.aConstraints.gridwidth = 1;
// oe.aConstraints.fill = GridBagConstraints.VERTICAL;
diff --git a/BoundaryRep.java b/BoundaryRep.java
index 931cfab..693d818 100644
--- a/BoundaryRep.java
+++ b/BoundaryRep.java
@@ -3531,7 +3531,7 @@
e.printStackTrace();
}
- Trim(wastrim,true,crease,wasstrip,false);
+ Trim(true/*wastrim*/,true,crease,wasstrip,false);
}
void GenNormalsJME()
@@ -5038,6 +5038,59 @@
colors = null;
}
+ void CreateMesh(iHeightField hf, int x, int y)
+ {
+ BoundaryRep tmp = new BoundaryRep();
+
+ int vc = 0;
+
+ Vertex v = new Vertex(true);
+
+ for (int i=0; i<x; i++)
+ {
+ for (int j=0; j<y; j++)
+ {
+// Vertex v = tmp.GetVertex(vc++);
+
+ v.s = v.x = i;
+ v.t = v.z = j;
+ v.s /= x; v.t /= y;
+ v.y = hf.f(i,j);
+
+ int iu = tmp.AddTableVertex(v);
+
+ v.s = v.x = i+1;
+ v.t = v.z = j;
+ v.s /= x; v.t /= y;
+ v.y = hf.f(i+1,j);
+
+ int iv = tmp.AddTableVertex(v);
+
+ v.s = v.x = i+1;
+ v.t = v.z = j+1;
+ v.s /= x; v.t /= y;
+ v.y = hf.f(i+1,j+1);
+
+ int iw = tmp.AddTableVertex(v);
+
+ v.s = v.x = i;
+ v.t = v.z = j+1;
+ v.s /= x; v.t /= y;
+ v.y = hf.f(i,j+1);
+
+ int ix = tmp.AddTableVertex(v);
+
+ tmp.AddFace(iu,iw,iv);
+ tmp.AddFace(iu,ix,iw);
+ }
+ }
+
+ Set(tmp);
+
+ Trim(true,false,true);
+ ClearColors();
+ }
+
void Stripify()
{
if (stripified)
@@ -5297,18 +5350,10 @@
double minweight = 1E10;
nbbadfaces = 0;
- for (int i=faces.size(); (i-=8)>=0;)
+ for (int i=0; i<faces.size(); i+=8)
+// for (int i=faces.size(); (i-=8)>=0;)
{
Face face = (Face) faces.get(i);
-
- //?? if (face.weight < 0)
- // continue;
-
- double K = 1; // 0.01; // .25;
-
- double factor = (1-K)*face.nbiterations + K; //*face.weight;
-
- double weight = FaceWeight(face); // *Math.pow(PerimeterMax(face),0.25)*factor;
if (!Valid(face))
{
@@ -5327,10 +5372,21 @@
!ValidValence(face.r))
continue;
+ //?? if (face.weight < 0)
+ // continue;
+
+ double K = 1; // 0.01; // .25;
+
+ double factor = (1-K)*face.nbiterations + K; //*face.weight;
+
+ double weight = FaceWeight(face); // *Math.pow(PerimeterMax(face),0.25)*factor;
+
if (minweight > weight)
{
minweight = weight;
chosen = i;
+ if (minweight == 0)
+ break;
}
}
@@ -7373,7 +7429,7 @@
if (max < maxz - minz)
max = maxz - minz;
- tmp.THRESHOLD = max/25; // 50;
+ tmp.THRESHOLD = 0.5; // max/25; // 50;
tmp.faces.clear();
@@ -7932,6 +7988,8 @@
minface.q = minface.r = minface.p;
+ int count = 0;
+
for (int i=0; i<faces.size(); i++)
{
Face face = (Face) faces.get(i);
@@ -7943,6 +8001,9 @@
TouchVertex(face.r, true); // , minface.weight);
// assert(!lock);
faces.remove(i--);
+ count++;
+ if (count == 4)
+ break;
}
}
diff --git a/CameraPane.java b/CameraPane.java
index b9fb49f..3e6f8d9 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -768,6 +768,8 @@
class CacheTexture
{
com.sun.opengl.util.texture.Texture texture;
+ com.sun.opengl.util.texture.TextureData texturedata;
+
int resolution;
CacheTexture(com.sun.opengl.util.texture.Texture tex, int res)
@@ -6451,7 +6453,7 @@
return; // true;
}
- com.sun.opengl.util.texture.Texture GetTexture(String tex, boolean bump, int resolution)
+ CacheTexture GetCacheTexture(String tex, boolean bump, int resolution)
{
CacheTexture/*com.sun.opengl.util.texture.Texture*/ texture = null;
@@ -6665,6 +6667,8 @@
thetex.texture.dispose();
textures.remove(texname);
}
+
+ texture.texturedata = texturedata;
textures.put(texname, texture);
// newtex = true;
@@ -6681,6 +6685,13 @@
}
}
+ return texture;
+ }
+
+ com.sun.opengl.util.texture.Texture GetTexture(String tex, boolean bump, int resolution)
+ {
+ CacheTexture texture = GetCacheTexture(tex, bump, resolution);
+
if (bump)
{
// GraphreeD.trace("PUSH BUMP " + tex + "(" + bumpdepth + ")" + " : " + texture);
@@ -6693,6 +6704,13 @@
}
return texture!=null?texture.texture:null;
+ }
+
+ com.sun.opengl.util.texture.TextureData GetTextureData(String tex, boolean bump, int resolution)
+ {
+ CacheTexture texture = GetCacheTexture(tex, bump, resolution);
+
+ return texture!=null?texture.texturedata:null;
}
boolean BindTexture(String tex, boolean bump, int resolution)
@@ -10253,7 +10271,7 @@
return;
}
- if (obj instanceof CheckerIG)
+ if (obj instanceof Checker)
{
checker = obj;
diff --git a/Checker.java b/Checker.java
index d62b2ab..d1fffe7 100644
--- a/Checker.java
+++ b/Checker.java
@@ -1,5 +1,26 @@
-//package edu.wlu.cs.levy.CG;
+class Checker extends Object3D
+{
+ Checker()
+ {
+ this("Checker");
+ }
+
+ Checker(String name)
+ {
+ super(name);
+
+ material = new cMaterial();
+
+ material.ambient = 100;
+ material.specular = 0.001f;
+ material.diffuse = 0.01f;
+ material.cameralight = 0.001f;
+ }
-public interface Checker<T> {
- public boolean usable(T v);
+ Object3D deepCopy()
+ {
+ Object3D comp = new Checker();
+ deepCopySelf(comp);
+ return comp;
+ }
}
diff --git a/CheckerIG.java b/CheckerIG.java
deleted file mode 100644
index 94d5993..0000000
--- a/CheckerIG.java
+++ /dev/null
@@ -1,26 +0,0 @@
-class CheckerIG extends Object3D
-{
- CheckerIG()
- {
- this("Checker");
- }
-
- CheckerIG(String name)
- {
- super(name);
-
- material = new cMaterial();
-
- material.ambient = 100;
- material.specular = 0.001f;
- material.diffuse = 0.01f;
- material.cameralight = 0.001f;
- }
-
- Object3D deepCopy()
- {
- Object3D comp = new CheckerIG();
- deepCopySelf(comp);
- return comp;
- }
-}
diff --git a/CheckerInterface.java b/CheckerInterface.java
new file mode 100644
index 0000000..5c6b626
--- /dev/null
+++ b/CheckerInterface.java
@@ -0,0 +1,5 @@
+//package edu.wlu.cs.levy.CG;
+
+public interface CheckerInterface<T> {
+ public boolean usable(T v);
+}
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;
diff --git a/HeightField.java b/HeightField.java
new file mode 100644
index 0000000..1c3325b
--- /dev/null
+++ b/HeightField.java
@@ -0,0 +1,26 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ *
+ * @author nbriere
+ */
+public class HeightField extends Grid
+{
+ iHeightField heightField;
+
+ HeightField(iHeightField hf)
+ {
+ heightField = hf;
+ }
+
+ Vertex biparamFunction(double u, double v)
+ {
+ Vertex temp = new Vertex((2*v-1)*radius*8, 0 /*-radius,*/, (2*u-1)*radius*8);
+ temp.norm = LA.newVector(0,1,0);
+ return temp;
+ }
+
+}
diff --git a/KDNode.java b/KDNode.java
index 6479992..7ce90d3 100644
--- a/KDNode.java
+++ b/KDNode.java
@@ -140,7 +140,7 @@
protected static <T> void nnbr(KDNode<T> kd, HPoint target, HRect hr,
double max_dist_sqd, int lev, int K,
NearestNeighborList<KDNode<T>> nnl,
- Checker<T> checker,
+ CheckerInterface<T> checker,
long timeout)
{
diff --git a/KDTree.java b/KDTree.java
index 5832c5d..ea6ebe6 100644
--- a/KDTree.java
+++ b/KDTree.java
@@ -285,7 +285,7 @@
* @throws IllegalArgumentException if <I>n</I> is negative or
* exceeds tree size
*/
- public List<T> nearest(double[] key, int n, Checker<T> checker)
+ public List<T> nearest(double[] key, int n, CheckerInterface<T> checker)
throws KeySizeException, IllegalArgumentException
{
@@ -360,7 +360,7 @@
}
private NearestNeighborList<KDNode<T>> getnbrs(double[] key, int n,
- Checker<T> checker) throws KeySizeException
+ CheckerInterface<T> checker) throws KeySizeException
{
if (key.length != m_K)
diff --git a/Mocap.java b/Mocap.java
index d01cb85..88fa618 100644
--- a/Mocap.java
+++ b/Mocap.java
@@ -754,7 +754,7 @@
//long
// june 2014 floorid = sourcenode.getFloor(floor); // , sourcenode.parent);
- CameraPane.debugpoints[0].name = "Floor = " + floorid;
+ CameraPane.debugpoints[0].name = ""; // "Floor = " + 0; // floorid;
CameraPane.debugpoints[0].toParent[3][0] = floor.x;
CameraPane.debugpoints[0].toParent[3][1] = floor.y;
CameraPane.debugpoints[0].toParent[3][2] = floor.z;
@@ -770,7 +770,7 @@
this.count--; // currently drawing itself
- CameraPane.debugpoints[7].name = "Centroid = " + groundid; // centroid;
+ CameraPane.debugpoints[7].name = ""; // Centroid = " + 0; // groundid; // centroid;
CameraPane.debugpoints[7].toParent[3][0] = centroid.x;
CameraPane.debugpoints[7].toParent[3][1] = centroid.y;
CameraPane.debugpoints[7].toParent[3][2] = centroid.z;
@@ -795,7 +795,7 @@
// jan 2014 sourcenode.parent.TransformToWorld(tmp);
- CameraPane.debugpoints[1].name = "C+";
+ CameraPane.debugpoints[1].name = ""; // "C+";
CameraPane.debugpoints[1].toParent[3][0] = tmp.x;
CameraPane.debugpoints[1].toParent[3][1] = tmp.y;
CameraPane.debugpoints[1].toParent[3][2] = tmp.z;
@@ -814,7 +814,7 @@
tmp.z = pinz;
}
- CameraPane.debugpoints[2].name = "Pin";
+ CameraPane.debugpoints[2].name = ""; // "Pin";
CameraPane.debugpoints[2].toParent[3][0] = tmp.x;
CameraPane.debugpoints[2].toParent[3][1] = tmp.y;
CameraPane.debugpoints[2].toParent[3][2] = tmp.z;
@@ -822,7 +822,7 @@
//if (sourcenode.parent.parent != null)
// jan 2014 sourcenode.parent.TransformToLocal(tmp); //, tmp);
- CameraPane.debugpoints[3].name = "C-";
+ CameraPane.debugpoints[3].name = ""; // "C-";
CameraPane.debugpoints[3].toParent[3][0] = tmp.x;
CameraPane.debugpoints[3].toParent[3][1] = tmp.y;
CameraPane.debugpoints[3].toParent[3][2] = tmp.z;
@@ -895,14 +895,14 @@
// if (sourcenode.parent.parent != null)
// sourcenode.parent.parent.TransformToWorld(floor); //, floor);
- CameraPane.debugpoints[5].name = "F++";
+ CameraPane.debugpoints[5].name = ""; // "F++";
CameraPane.debugpoints[5].toParent[3][0] = floor.x;
CameraPane.debugpoints[5].toParent[3][1] = floor.y;
CameraPane.debugpoints[5].toParent[3][2] = floor.z;
floor.y = tempg;
- CameraPane.debugpoints[6].name = "F+-";
+ CameraPane.debugpoints[6].name = ""; // "F+-";
CameraPane.debugpoints[6].toParent[3][0] = floor.x;
CameraPane.debugpoints[6].toParent[3][1] = floor.y;
CameraPane.debugpoints[6].toParent[3][2] = floor.z;
@@ -1318,7 +1318,7 @@
rotsourcenode.TransformToWorld(test);
- CameraPane.debugpoints[4].name = "ROT = "; // + test;
+ CameraPane.debugpoints[4].name = ""; // "ROT = "; // + test;
CameraPane.debugpoints[4].toParent[3][0] = test.x;
CameraPane.debugpoints[4].toParent[3][1] = test.y;
CameraPane.debugpoints[4].toParent[3][2] = test.z;
diff --git a/ObjEditor.java b/ObjEditor.java
index 689f974..22fab98 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -1336,7 +1336,7 @@
// aConstraints = gbc; // (GridBagConstraints) GraphreeD.clone(gbc);
- frame.setSize(800, 600);
+ frame.setSize(1024, 768);
frame.show();
gridPanel.setDividerLocation(1.0);
diff --git a/Object3D.java b/Object3D.java
index 1b4f39c..8f3990d 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -3717,7 +3717,7 @@
boolean getCentroid(cVector centroid, boolean xform)
{
- assert(false);
+// for speaker assert(false);
if (blockloop)
return false;
@@ -4515,16 +4515,28 @@
Object3D GetFileRoot()
{
+ if (overflow)
+ return null;
+
+ overflow = true;
+
+ Object3D pfr = null;
+
if (parent == null && fileparent == null)
- return this;
+ pfr = this;
if (parent == null && fileparent != null) // V4.gfd???
- return fileparent;
+ pfr = fileparent;
- if (parent == null)
- return this;
+ if (pfr == null && parent == null)
+ pfr = this;
- return parent.GetFileRoot();
+ if (pfr == null)
+ pfr = parent.GetFileRoot();
+
+ overflow = false;
+
+ return pfr;
}
cTreePath GetPath()
@@ -5280,7 +5292,7 @@
if (name != null && name.contains("sclera"))
name = name;
- if (this instanceof CheckerIG)
+ if (this instanceof Checker)
return;
if (display.drawMode == display.SHADOW && PASSTEST)
@@ -7735,8 +7747,15 @@
info.pane.repaint();
}
+ boolean overflow = false;
+
void TransformToWorld(cVector out) // , cVector out)
{
+ if (overflow)
+ return;
+
+ overflow = true;
+
// june 2013 ??? assert (in == out);
cVector in = out;
if (toParent != null && !(this instanceof Texture || this instanceof TextureNode))
@@ -7753,6 +7772,8 @@
{
(parent!=null?parent:fileparent).TransformToWorld(out); //, out);
}
+
+ overflow = false;
}
void TransformToLocal(cVector out) //, cVector out)
@@ -7995,19 +8016,22 @@
max = new cVector();
}
- Object3D sourcenode = GetFileRoot();
-
- if (!sourcenode.name.contains("rclab"))
+ if (false) // Can crawl!!
{
- getBounds(min, max, true);
+ Object3D sourcenode = GetFileRoot();
- if (min.y != Double.POSITIVE_INFINITY && min.y > 2)
+ if (sourcenode != null && !sourcenode.name.contains("rclab"))
{
-// sourcenode.getBounds(min, max, true);
- sourcenode.getBounds(v0, v1, true);
-// sourcenode.toParent = sourcenode.toParent;
-// get(0).toParent = get(0).toParent;
-// sourcenode.GlobalTransform();
+ getBounds(min, max, true);
+
+ if (min.y != Double.POSITIVE_INFINITY && min.y > 2)
+ {
+ // sourcenode.getBounds(min, max, true);
+ sourcenode.getBounds(v0, v1, true);
+ // sourcenode.toParent = sourcenode.toParent;
+ // get(0).toParent = get(0).toParent;
+ // sourcenode.GlobalTransform();
+ }
}
}
@@ -8016,7 +8040,8 @@
if (support != null)
{
assert(bRep != null);
- GraphreeD.Assert(support.bRep == bRep.support);
+ if (!(support instanceof GenericJoint)) // support.bRep != null)
+ GraphreeD.Assert(support.bRep == bRep.support);
}
else
{
diff --git a/ScriptNode.java b/ScriptNode.java
index 93f6266..4ba4bbb 100644
--- a/ScriptNode.java
+++ b/ScriptNode.java
@@ -285,7 +285,7 @@
else
{
if (speaker != null)
- System.err.println(speaker.GetFileRoot().name + " (not a command) : " + reader.line);
+ System.err.println(speaker.GetFileRoot().name + " (speaking) : " + reader.line);
else
System.err.println("no speaker (not a command) : " + reader.line);
}
@@ -412,7 +412,7 @@
{
//path += "/" + Filename(readers[i].script);
ScriptReader reader = readers[i];
- path += Filename(readers[i].script) + "; duration=" + reader.duration + "; total=" + reader.totalduration +
+ path += Filename(reader.script) + "; duration=" + reader.duration + "; total=" + reader.totalduration +
"; line#" + reader.linecount + ": " + reader.line;
if (reader.line != null && // sept 2014
reader.line.startsWith("_"))
@@ -488,7 +488,7 @@
reader = readers[stack] = new ScriptReader(new BufferedReader(new FileReader(script)), reader.totalduration, /*0, 0, "",*/ script);
//duration = 0; // june 2014
//linecount = 0;
- //reader.script = script;
+ reader.script = script; // oct 2014
return;
}
if (command.equals("return")) // line.startsWith("; return"))
@@ -1438,7 +1438,7 @@
object.skip = false;
return;
}
- if (command.equals("skipmocap"))
+ if (command.equals("skipmocap") || command.equals("mocapskip")) // oct 2014
{
object.skipmocap = true;
return;
diff --git a/Texture.java b/Texture.java
index a208c91..cb0153c 100644
--- a/Texture.java
+++ b/Texture.java
@@ -10,8 +10,8 @@
public class Texture extends Composite implements java.io.Serializable
{
// deprecated due to serial problems
- static final long serialVersionUID = //-5280151442948961597L; // new java
- 7695543694999681408L; // old java !!!
+ static final long serialVersionUID = -5280151442948961597L; // new java
+ // 7695543694999681408L; // old java !!!
// default = -8076744133104150348L
diff --git a/iHeightField.java b/iHeightField.java
new file mode 100644
index 0000000..6cc1102
--- /dev/null
+++ b/iHeightField.java
@@ -0,0 +1,13 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ *
+ * @author nbriere
+ */
+public interface iHeightField
+{
+ double f(double x, double y);
+}
--
Gitblit v1.6.2