From f924d3e00db476c06f55f3d5aaef307e17575340 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Mon, 13 May 2019 07:29:08 -0400
Subject: [PATCH] Transform children
---
ObjEditor.java | 6
BoundaryRep.java | 2
CameraPane.java | 6
Globals.java | 1
LA.java | 1
SwitchEditor.java | 15 ++-
GroupEditor.java | 69 +++++++++++++---
cJ3D.java | 52 ++++++++----
cFileSystemPane.java | 4
Mocap.java | 30 +++++--
Object3D.java | 48 ++++++++++-
Grafreed.java | 6 +
12 files changed, 180 insertions(+), 60 deletions(-)
diff --git a/BoundaryRep.java b/BoundaryRep.java
index 7b31bc4..1781a47 100644
--- a/BoundaryRep.java
+++ b/BoundaryRep.java
@@ -500,7 +500,7 @@
static Vertex vertextemp = new Vertex(true);
static Vertex vertextemp2 = new Vertex(true);
- static double SEUIL = 0.1f; // 0.1 for rag doll; 0.07;
+ static double SEUIL = 0.05f; // 0.1 for rag doll; 0.07;
// Compute weight of point w/r to this
float ComputeWeight(Vertex v, double[][] toRoot, int k)
diff --git a/CameraPane.java b/CameraPane.java
index 830f914..9a919e6 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -14870,7 +14870,7 @@
//RESIZETEXTURE ^= true;
//break;
case 'z':
- RENDERSHADOW ^= true;
+ Globals.RENDERSHADOW ^= true;
Globals.lighttouched = true;
repaint();
break;
@@ -16592,7 +16592,7 @@
gl.glDisable(gl.GL_CULL_FACE);
}
- if (!RENDERSHADOW)
+ if (!Globals.RENDERSHADOW)
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
// SB gl.glPolygonOffset(2.5f, 10);
@@ -16602,7 +16602,7 @@
//gl.glColorMask(false, false, false, false);
//render_scene_from_light_view(gl, drawable, 0, 0);
- if (RENDERSHADOW && Globals.lighttouched && !movingcamera) // && !parent.IsFreezed())
+ if (Globals.RENDERSHADOW && Globals.lighttouched && !movingcamera) // && !parent.IsFreezed())
{
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
diff --git a/Globals.java b/Globals.java
index 4e04949..ca7d104 100644
--- a/Globals.java
+++ b/Globals.java
@@ -6,6 +6,7 @@
static iCameraPane theRenderer;
private static boolean LIVE = false;
+ public static boolean RENDERSHADOW = true;
static boolean CROWD = false;
static public int drawMode = iCameraPane.DEFAULT; // WARNING
diff --git a/Grafreed.java b/Grafreed.java
index 95f44cd..088a313 100644
--- a/Grafreed.java
+++ b/Grafreed.java
@@ -41,7 +41,11 @@
static void Assert(boolean b)
{
if (!b)
+ {
+ b = !!b;
new Exception().printStackTrace(); // assert(b);
+
+ }
}
public void init()
@@ -844,7 +848,7 @@
//Monitor mon=MonitorFactory.start("myFirstMonitor");
standAlone = true;
grafreeD = new Grafreed();
- grafreeD.universe = new Composite();
+ grafreeD.universe = new cGroup();
grafreeD.universe.name = "Grafreed";
grafreeD.universe.material = new cMaterial();
// theApplet3D.universe.textures = CameraPane.DEFAULT_TEXTURE;
diff --git a/GroupEditor.java b/GroupEditor.java
index 7fcc3f7..a7eda89 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -318,8 +318,12 @@
resetTransformItem.addActionListener(this);
resetCentroidItem = menu.add(new MenuItem("Reset Centroid"));
resetCentroidItem.addActionListener(this);
- transformgeometryItem = menu.add(new MenuItem("Transform Geometry"));
- transformgeometryItem.addActionListener(this);
+ resetCentroidXZItem = menu.add(new MenuItem("Reset Centroid XY"));
+ resetCentroidXZItem.addActionListener(this);
+ transformGeometryItem = menu.add(new MenuItem("Transform Geometry"));
+ transformGeometryItem.addActionListener(this);
+ transformChildrenItem = menu.add(new MenuItem("Transform Children"));
+ transformChildrenItem.addActionListener(this);
oe.menuBar.add(menu = new Menu("Geometry"));
genUVItem = menu.add(new MenuItem("Generate UV"));
@@ -422,17 +426,18 @@
sortbysizeItem.addActionListener(this);
sortbynameItem = menu.add(new MenuItem("Sort by name"));
sortbynameItem.addActionListener(this);
+ menu.add("-");
+ shareGeometriesItem = menu.add(new MenuItem("Share Geometries"));
+ shareGeometriesItem.addActionListener(this);
+ mergeGeometriesItem = menu.add(new MenuItem("Merge Geometries"));
+ mergeGeometriesItem.addActionListener(this);
if (Globals.ADVANCED)
{
- menu.add("-");
+ // Pretty much the same as duplicate and clone.
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"));
@@ -651,7 +656,7 @@
zoomBoxCB.setToolTipText("Display bounding boxes when moving the wheel");
zoomBoxCB.addItemListener(this);
- if (Globals.ADVANCED)
+ if (true) // Globals.ADVANCED)
{
panel.add(supportCB = new cCheckBox("Support", CameraPane.SUPPORT)); //, constraints);
supportCB.setToolTipText("Enable rigging");
@@ -2614,9 +2619,13 @@
{
SmoothMesh();
} else
- if (source == transformgeometryItem)
+ if (source == transformGeometryItem)
{
TransformGeometry();
+ } else
+ if (source == transformChildrenItem)
+ {
+ TransformChildren();
} else
if (source == resetTransformItem)
{
@@ -2624,7 +2633,11 @@
} else
if (source == resetCentroidItem)
{
- ResetCentroid();
+ ResetCentroid(true);
+ } else
+ if (source == resetCentroidXZItem)
+ {
+ ResetCentroid(false);
} else
if (source == resetParentItem)
{
@@ -3140,6 +3153,28 @@
refreshContents();
}
+ void TransformChildren()
+ {
+ Object3D obj;
+ for (Enumeration e = group.selection.elements(); e.hasMoreElements();)
+ {
+ obj = (Object3D)e.nextElement();
+ obj.KeepTextureMatrices();
+ obj.TransformChildren();
+ obj.RestoreTextureMatrices();
+
+// if (obj.parent == null)
+// {
+// System.out.println("NULL PARENT!");
+// new Exception().printStackTrace();
+// }
+// else
+// TouchTransform(obj);
+// //obj.parent.Touch();
+ }
+
+ refreshContents();
+ }
void ResetTransform()
{
@@ -3252,7 +3287,7 @@
refreshContents();
}
- void ResetCentroid()
+ void ResetCentroid(boolean full)
{
Object3D obj;
for (Enumeration e = group.selection.elements(); e.hasMoreElements();)
@@ -3267,12 +3302,16 @@
LA.matIdentity(Object3D.mat);
obj.getBounds(minima, maxima, false);
Object3D.mat[3][0] = -(minima.x + maxima.x)/2;
- Object3D.mat[3][1] = -(minima.y + maxima.y)/2;
+ if (full)
+ Object3D.mat[3][1] = -(minima.y + maxima.y)/2;
Object3D.mat[3][2] = -(minima.z + maxima.z)/2;
obj.TransformMesh(Object3D.mat);
+
Object3D.mat[3][0] = (minima.x + maxima.x)/2;
- Object3D.mat[3][1] = (minima.y + maxima.y)/2;
+ if (full)
+ Object3D.mat[3][1] = (minima.y + maxima.y)/2;
Object3D.mat[3][2] = (minima.z + maxima.z)/2;
+
LA.matConcat(Object3D.mat, obj.toParent, obj.toParent);
//Object3D.mat[3][0] = -Object3D.mat[3][0];
//Object3D.mat[3][1] = -Object3D.mat[3][1];
@@ -5153,8 +5192,10 @@
private MenuItem panoTexturesItem;
private MenuItem resetCentroidItem;
- private MenuItem transformgeometryItem;
+ private MenuItem resetCentroidXZItem;
private MenuItem resetTransformItem;
+ private MenuItem transformGeometryItem;
+ private MenuItem transformChildrenItem;
private MenuItem hideItem;
private MenuItem grabItem;
private MenuItem backItem;
diff --git a/LA.java b/LA.java
index 35e7f0e..904647a 100644
--- a/LA.java
+++ b/LA.java
@@ -307,6 +307,7 @@
}
+ // Last row should always be 0 0 0 1
Grafreed.Assert(Math.abs(src[0][3]) <= 1E-15);
Grafreed.Assert(Math.abs(src[1][3]) <= 1E-15);
Grafreed.Assert(Math.abs(src[2][3]) <= 1E-15);
diff --git a/Mocap.java b/Mocap.java
index 54415a3..246c834 100644
--- a/Mocap.java
+++ b/Mocap.java
@@ -484,6 +484,12 @@
{
Object3D hip = get(0);
+ if (toParent == null)
+ {
+ toParent = LA.newMatrix();
+ fromParent = LA.newMatrix();
+ }
+
LA.matConcat(toParent, hip.get(0).toParent, matrix);
mocaporigin.x = matrix[3][0];
@@ -664,8 +670,8 @@
double targetdirx;
double targetdirz;
- double goalposx = -20;
- double goalposz = -10;
+ double goalposx = 0; // -20;
+ double goalposz = 0; // -10;
boolean followpath;
@@ -2797,7 +2803,8 @@
//if (bone._rotationEnabled)
if (//frame > 0 &&
!bone.skipmocap &&
- !bone.name.contains("head") // &&
+ !bone.name.contains("head") &&
+ !bone.name.contains("Head") // &&
// !bone.name.contains("rFoot") &&
// !bone.name.contains("lFoot") &&
// !bone.name.contains("Pinky") &&
@@ -3233,8 +3240,8 @@
// aout 2013 endframe = 0; // june 2013
- //ResetZero();
- setPose(frame);
+ ResetZero();
+ //setPose(frame);
}
static int mocapsupport = 0;
@@ -3300,7 +3307,7 @@
{
if (support == null)
{
- if (new File(fullname).exists())
+ if (bvh == null && new File(fullname).exists())
ObjEditor.LoadBVHFile(fullname, this, false, beginframe, lastframetest);
else
{
@@ -3889,17 +3896,22 @@
// if (firstframe)
// return;
- if (!restarted && /*display.restartframe &&*/
- Globals.isLIVE() && live && display.DrawMode() == display.SHADOW) // FUCK
+ if (//!restarted && /*display.restartframe &&*/
+ Globals.isLIVE() && live && (display.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW))
{
//display.restartframe = false;
restarted = true;
+ //System.err.println("restarted = true");
Step();
}
else
{
- if (Globals.isLIVE() && live && display.DrawMode() != display.SHADOW)
+ //System.err.println("restarted");
+ if (Globals.isLIVE() && live && display.DrawMode() != iCameraPane.SHADOW)
+ {
restarted = false;
+ //System.err.println("restarted = false");
+ }
}
super.drawSelf(display, root, selected, blocked);
diff --git a/ObjEditor.java b/ObjEditor.java
index a6194b1..cfefeab 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -501,13 +501,13 @@
//SendInfo("Name:", "bold");
if (sel.GetTextures() != null || debug)
{
- si.SendInfo(sel.toString(), "bold");
+ si.SendInfo(sel.toString() + (Globals.ADVANCED?"":" " + System.identityHashCode(sel)), "bold");
//SendInfo("#children virtual = " + sel.size() + "; real = " + sel.Size() + newline, "regular");
if (sel.Size() > 0)
{
si.SendInfo("#children = " + sel.Size(), "regular");
}
- si.SendInfo((debug ? " Parent: " : " ") + sel.parent, "regular");
+ si.SendInfo((debug ? " Parent: " : " ") + sel.parent + (Globals.ADVANCED?"":" " + System.identityHashCode(sel.parent)), "regular");
if (debug)
{
try
@@ -549,7 +549,7 @@
}
if (sel.support != null)
{
- si.SendInfo(" support: " + sel.support, "regular");
+ si.SendInfo(" support: " + sel.support + (Globals.ADVANCED?"":" " + System.identityHashCode(sel.support)), "regular");
}
if (sel.scriptnode != null)
{
diff --git a/Object3D.java b/Object3D.java
index aa628e7..9c74924 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -797,7 +797,7 @@
if (marked && Globals.isLIVE() && live &&
//TEMP21aug2018
- Globals.DrawMode() == iCameraPane.SHADOW &&
+ (Globals.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW) &&
currentframe != Globals.framecount)
{
currentframe = Globals.framecount;
@@ -912,6 +912,11 @@
fromParent = null; // LA.newMatrix();
bRep = null; // new BoundaryRep();
+ if (oname != null && oname.equals("LeftHand"))
+ {
+ name = oname;
+ }
+
/*
float hue = (float)Math.random();
Color col;
@@ -1470,7 +1475,7 @@
BoundaryRep.SEUIL = other.material.cameralight;
// Set default to 0.1
- BoundaryRep.SEUIL /= 2;
+ BoundaryRep.SEUIL /= 4; // 2;
System.out.println("SEUIL = " + BoundaryRep.SEUIL);
}
@@ -2983,6 +2988,31 @@
blockloop = false;
}
+ void TransformChildren()
+ {
+ if (toParent != null)
+ {
+ for (int i=Size(); --i>=0;)
+ {
+ Object3D v = get(i);
+
+ if (v.toParent == null)
+ {
+ v.toParent = LA.newMatrix();
+ v.fromParent = LA.newMatrix();
+ }
+
+ LA.matConcat(v.toParent, toParent, v.toParent);
+ LA.matConcat(fromParent, v.fromParent, v.fromParent);
+ }
+
+ toParent = null; // LA.matIdentity(toParent);
+ fromParent = null; // LA.matIdentity(fromParent);
+
+ Touch();
+ }
+ }
+
void TransformGeometry()
{
Object3D obj = this;
@@ -5379,7 +5409,7 @@
return
CameraPane.SUPPORT && !CameraPane.movingcamera && link2master && /*live &&*/ support != null
// PROBLEM with CROWD!!
- && (Globals.DrawMode() == iCameraPane.SHADOW || Globals.CROWD);
+ && (Globals.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW || Globals.CROWD);
}
static boolean DEBUG_SELECTION = false;
@@ -7368,14 +7398,22 @@
//return super.toString() + " (id=" + list + ")" + " (brep=" + bRep + ")";
//return name + " (id=" + list + ")" + " (brep=" + bRep + ") " + super.toString();
//return name + " (#tri = " + (bRep==null?0:bRep.VertexCount()) + ") " + super.toString();
+
+ String objname;
+
if (false) //parent != null)
{
- return name + " " + System.identityHashCode(this) + " (" + parent.name + " " + System.identityHashCode(parent) + ")";
+ objname = name + " " + System.identityHashCode(this) + " (" + parent.name + " " + System.identityHashCode(parent) + ")";
} else
{
- return GetName() + (Math.abs(count) == 1000 ? (count == 1000 ? " " : " * ") : (" (" + (count /*- 1*/) + ") ")) + /*(IsSelected()?"(selected) ":"") + (touched?"(touched) ":"") */ +System.identityHashCode(this);
+ 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();
+
+ if (!Globals.ADVANCED)
+ return objname;
+
+ return objname + " " + System.identityHashCode(this);
}
public int hashCode()
diff --git a/SwitchEditor.java b/SwitchEditor.java
index e6d6892..19f7e34 100644
--- a/SwitchEditor.java
+++ b/SwitchEditor.java
@@ -9,6 +9,8 @@
class SwitchEditor extends ObjEditor implements //ItemListener,
ChangeListener, ObjectUI, ActionListener
{
+ private cGridBag dampPanel;
+ private cGridBag framePanel;
SwitchEditor(SwitchNode inBP, GroupEditor callee)
{
super(inBP,callee);
@@ -69,6 +71,7 @@
oe.aConstraints.gridwidth = 1;
*/
super.SetupUI2(oe);
+ framePanel = AddSlider(oe.ctrlPanel, "Child: ", 0, switchnode.getNumFrames()-1, switchnode.child);
// oe.aConstraints.gridx = 0;
// oe.aConstraints.gridwidth = 1;
@@ -81,10 +84,11 @@
//
// frameField.setInteger(frameselect.child);
- frameField = (cNumberSlider)AddSlider(oe.ctrlPanel, "Child: ", 0, switchnode.getNumFrames()-1, switchnode.child).getComponent(1);
+ frameField = (cNumberSlider)framePanel.getComponent(1);
oe.ctrlPanel.Return();
+ dampPanel = AddSlider(oe.ctrlPanel, "Damp: ", 0, 500, switchnode.speed);
- speedField = (cNumberSlider)AddSlider(oe.ctrlPanel, "Damp: ", 0, 500, switchnode.speed).getComponent(1);
+ speedField = (cNumberSlider)dampPanel.getComponent(1);
oe.ctrlPanel.Return();
// oe.aConstraints.gridy += 1;
@@ -224,8 +228,11 @@
// oe.ctrlPanel.remove(frameLabel);
// oe.ctrlPanel.remove(speedField);
// oe.ctrlPanel.remove(speedLabel);
- Remove(frameField);
- Remove(speedField);
+// Remove(frameField);
+// Remove(speedField);
+
+ oe.ctrlPanel.remove(framePanel);
+ oe.ctrlPanel.remove(dampPanel);
//oe.ctrlPanel.repaint();
super.closeUI();
diff --git a/cFileSystemPane.java b/cFileSystemPane.java
index a446d0f..da2f91f 100644
--- a/cFileSystemPane.java
+++ b/cFileSystemPane.java
@@ -62,10 +62,10 @@
cGridBag fileCommsnds = new cGridBag();
- fileCommsnds.add(refreshButton = new JButton("Refresh")); //, aConstraints);
- refreshButton.setToolTipText("Refresh entire tree");
fileCommsnds.add(loadButton = new JButton("Load")); //, aConstraints);
loadButton.setToolTipText("Load selected file(s)");
+ fileCommsnds.add(refreshButton = new JButton("Refresh")); //, aConstraints);
+ refreshButton.setToolTipText("Refresh entire tree");
refreshButton.addActionListener(this);
loadButton.addActionListener(this);
diff --git a/cJ3D.java b/cJ3D.java
index 686d003..1a2fa60 100644
--- a/cJ3D.java
+++ b/cJ3D.java
@@ -360,13 +360,13 @@
toParent[3][3] = m.m33;
}
+ Matrix4d m = new Matrix4d();
+
Object3D Read(TransformGroup g)
{
Object3D c = new Object3D(GetName(g)); // g.getClass().getName());
Transform3D t = new Transform3D();
-
- Matrix4d m = new Matrix4d();
g.getTransform(t);
@@ -375,22 +375,18 @@
c.toParent = LA.newMatrix();
c.fromParent = LA.newMatrix();
- c.toParent[0][0] = m.m00;
- c.toParent[0][1] = m.m10;
- c.toParent[0][2] = m.m20;
- c.toParent[0][3] = m.m30;
- c.toParent[1][0] = m.m01;
- c.toParent[1][1] = m.m11;
- c.toParent[1][2] = m.m21;
- c.toParent[1][3] = m.m31;
- c.toParent[2][0] = m.m02;
- c.toParent[2][1] = m.m12;
- c.toParent[2][2] = m.m22;
- c.toParent[2][3] = m.m32;
- c.toParent[3][0] = m.m03;
- c.toParent[3][1] = m.m13;
- c.toParent[3][2] = m.m23;
- c.toParent[3][3] = m.m33;
+ if (m.m00 != 0 || m.m10 != 0 || m.m20 != 0 || m.m30 != 0 ||
+ m.m01 != 0 || m.m11 != 0 || m.m21 != 0 || m.m31 != 0 ||
+ m.m02 != 0 || m.m12 != 0 || m.m22 != 0 || m.m32 != 0 ||
+ m.m03 != 0 || m.m13 != 0 || m.m23 != 0 /*|| m.m33 != 0 */)
+ {
+ SetMatrix(c, m);
+ }
+ else
+ {
+ System.err.println("Found zero scale matrix. Hide the object instead.");
+ c.count = 1;
+ }
// ReadNode(c, g);
LA.matInvert(c.toParent, c.fromParent);
@@ -402,6 +398,26 @@
return c;
}
+
+ private void SetMatrix(Object3D c, Matrix4d m)
+ {
+ c.toParent[0][0] = m.m00;
+ c.toParent[0][1] = m.m10;
+ c.toParent[0][2] = m.m20;
+ c.toParent[0][3] = m.m30;
+ c.toParent[1][0] = m.m01;
+ c.toParent[1][1] = m.m11;
+ c.toParent[1][2] = m.m21;
+ c.toParent[1][3] = m.m31;
+ c.toParent[2][0] = m.m02;
+ c.toParent[2][1] = m.m12;
+ c.toParent[2][2] = m.m22;
+ c.toParent[2][3] = m.m32;
+ c.toParent[3][0] = m.m03;
+ c.toParent[3][1] = m.m13;
+ c.toParent[3][2] = m.m23;
+ c.toParent[3][3] = m.m33;
+ }
Object3D Read(Scene s, String fn)
{
--
Gitblit v1.6.2