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