From 15123b19e7bc8da2869429b07f0fbaa0598e945e Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Thu, 20 Jun 2019 20:56:08 -0400 Subject: [PATCH] Rewind all. --- ObjEditor.java | 16 +++- CameraPane.java | 12 +++ GroupEditor.java | 40 +++++++++++++ matrix/Matrix.java | 4 Object3D.java | 54 ++++++++++++++++- 5 files changed, 112 insertions(+), 14 deletions(-) diff --git a/CameraPane.java b/CameraPane.java index 99e2648..aef9761 100644 --- a/CameraPane.java +++ b/CameraPane.java @@ -464,10 +464,12 @@ if (!selectmode) // display.drawMode != display.SELECTION) // && display.drawMode != display.SHADOW) // (attributes & FILL) != 0) { //gl.glBegin(gl.GL_TRIANGLES); - boolean hasnorm = pv.norm != null && (pv.norm.x != 0 || pv.norm.y != 0 || pv.norm.z != 0); + boolean hasnorm = pv.norm != null && (pv.norm.x != 0 || pv.norm.y != 0 || pv.norm.z != 0) + // TEST LIVE NORMALS && !obj.dontselect + ; if (!hasnorm) { - // System.out.println("FUCK!!"); + // System.out.println("Mesh normal"); LA.vecSub(pv/*.pos*/, qv/*.pos*/, obj.v0); LA.vecSub(pv/*.pos*/, rv/*.pos*/, obj.v1); LA.vecCross(obj.v0, obj.v1, obj.v2); @@ -1192,10 +1194,12 @@ gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); } } + if (flipV) gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); else gl.glTexCoord2f(uv[count2], uv[count2 + 1]); + //System.out.println("vertex1 = " + v[count3] + ", " + v[count3+1] + ", " + v[count3+2]); gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); @@ -1215,10 +1219,12 @@ gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1); } } + if (flipV) gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); else gl.glTexCoord2f(uv[count2], uv[count2 + 1]); + //System.out.println("vertex2 = " + v[count3] + ", " + v[count3+1] + ", " + v[count3+2]); gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); @@ -1246,8 +1252,10 @@ gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]); else gl.glTexCoord2f(uv[count2], uv[count2 + 1]); + //System.out.println("coord3 = " + uv[count2] + ", " + uv[count2+1]); gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); + count2 += 2; count3 += 3; } diff --git a/GroupEditor.java b/GroupEditor.java index 4f34e39..bae9769 100644 --- a/GroupEditor.java +++ b/GroupEditor.java @@ -470,6 +470,14 @@ markleavesItem.addActionListener(this); unmarkleavesItem = menu.add(new MenuItem("Unmark Leaves")); unmarkleavesItem.addActionListener(this); + rewindleavesItem = menu.add(new MenuItem("Rewind Leaves")); + rewindleavesItem.addActionListener(this); + unrewindleavesItem = menu.add(new MenuItem("Unrewind Leaves")); + unrewindleavesItem.addActionListener(this); + randomleavesItem = menu.add(new MenuItem("Random Leaves")); + randomleavesItem.addActionListener(this); + unrandomleavesItem = menu.add(new MenuItem("Unrandom Leaves")); + unrandomleavesItem.addActionListener(this); menu.add("-"); flipVItem = menu.add(new MenuItem("Flip V")); flipVItem.addActionListener(this); @@ -2609,6 +2617,22 @@ { MarkLeaves(false); } else + if (source == rewindleavesItem) + { + RewindLeaves(true); + } else + if (source == unrewindleavesItem) + { + RewindLeaves(false); + } else + if (source == randomleavesItem) + { + RandomLeaves(true); + } else + if (source == unrandomleavesItem) + { + RandomLeaves(false); + } else if (source == flipVItem) { FlipV(true); @@ -4146,6 +4170,18 @@ refreshContents(); } + void RewindLeaves(boolean hide) + { + group.selection.RewindLeaves(hide); + refreshContents(); + } + + void RandomLeaves(boolean hide) + { + group.selection.RandomLeaves(hide); + refreshContents(); + } + void SetTexRes(int tr) { group.selection.SetTexRes(tr); @@ -5283,6 +5319,10 @@ private MenuItem showleavesItem; private MenuItem markleavesItem; private MenuItem unmarkleavesItem; + private MenuItem rewindleavesItem; + private MenuItem unrewindleavesItem; + private MenuItem randomleavesItem; + private MenuItem unrandomleavesItem; private MenuItem flipVItem; private MenuItem unflipVItem; diff --git a/ObjEditor.java b/ObjEditor.java index 9cf4839..877fe87 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -168,6 +168,7 @@ // objEditor.ctrlPanel.remove(remarkButton); objEditor.ctrlPanel.remove(setupPanel); + objEditor.ctrlPanel.remove(setupPanel2); objEditor.ctrlPanel.remove(commandsPanel); objEditor.ctrlPanel.remove(pushPanel); //objEditor.ctrlPanel.remove(fillPanel); @@ -747,6 +748,7 @@ cGridBag namePanel; cGridBag setupPanel; + cGridBag setupPanel2; cGridBag commandsPanel; cGridBag pushPanel; cGridBag fillPanel; @@ -939,22 +941,26 @@ markCB = AddCheckBox(setupPanel, "Mark", copy.marked); markCB.setToolTipText("Set the animation target transform"); - rewindCB = AddCheckBox(setupPanel, "Rewind", copy.rewind); + setupPanel2 = new cGridBag().setVertical(false); + + rewindCB = AddCheckBox(setupPanel2, "Rewind", copy.rewind); rewindCB.setToolTipText("Rewind animation"); - randomCB = AddCheckBox(setupPanel, "Random", copy.random); - randomCB.setToolTipText("Option for switch node"); + randomCB = AddCheckBox(setupPanel2, "Rand", copy.random); + randomCB.setToolTipText("Rewind or Go back and forth randomly"); if (Globals.ADVANCED) { - link2masterCB = AddCheckBox(setupPanel, "Support", copy.link2master); + link2masterCB = AddCheckBox(setupPanel2, "Supp", copy.link2master); link2masterCB.setToolTipText("Attach to support"); - speedupCB = AddCheckBox(setupPanel, "Speed", copy.speedup); + speedupCB = AddCheckBox(setupPanel2, "Speed", copy.speedup); speedupCB.setToolTipText("Option motion capture"); } oe.ctrlPanel.add(setupPanel); oe.ctrlPanel.Return(); + oe.ctrlPanel.add(setupPanel2); + oe.ctrlPanel.Return(); commandsPanel = new cGridBag().setVertical(false); diff --git a/Object3D.java b/Object3D.java index d6e0e59..7b52765 100644 --- a/Object3D.java +++ b/Object3D.java @@ -893,7 +893,8 @@ boolean changedir = random && Math.random() < 0.01; // && !link2master; - if (transformcount*factor > maxcount || (step == 1 && changedir)) + if (transformcount*factor >= maxcount && (rewind || random) || + (step == 1 && changedir)) { countdown = 1; delay = speedup?8:1; @@ -3503,7 +3504,8 @@ if (blockloop) return; - if (marked || (bRep != null && material != null)) // borderline... + if (//marked || // does not make sense + (bRep != null || material != null)) // borderline... live = h; for (int i = 0; i < Size(); i++) @@ -3524,7 +3526,8 @@ return; //if (bRep != null) - if (marked || (bRep != null && material != null)) // borderline... + if (//marked || // does not make sense + (bRep != null || material != null)) // borderline... link2master = h; for (int i = 0; i < Size(); i++) @@ -3544,7 +3547,8 @@ if (blockloop) return; - if (marked || (bRep != null && material != null)) // borderline... + if (//marked || // does not make sense + (bRep != null || material != null)) // borderline... hide = h; for (int i = 0; i < Size(); i++) @@ -3564,7 +3568,7 @@ if (blockloop) return; - if (bRep != null && material != null) // borderline... + if (bRep != null || material != null) // borderline... marked = h; for (int i = 0; i < Size(); i++) @@ -3579,6 +3583,46 @@ } } + void RewindLeaves(boolean h) + { + if (blockloop) + return; + + if (bRep != null || material != null) // borderline... + rewind = h; + + for (int i = 0; i < Size(); i++) + { + Object3D child = (Object3D) get(i); // reserve(i); + if (child == null) + continue; + blockloop = true; + child.RewindLeaves(h); + blockloop = false; + // release(i); + } + } + + void RandomLeaves(boolean h) + { + if (blockloop) + return; + + if (bRep != null || material != null) // borderline... + random = h; + + for (int i = 0; i < Size(); i++) + { + Object3D child = (Object3D) get(i); // reserve(i); + if (child == null) + continue; + blockloop = true; + child.RandomLeaves(h); + blockloop = false; + // release(i); + } + } + void SetTexRes(int tr) { texres = tr; diff --git a/matrix/Matrix.java b/matrix/Matrix.java index 2349c20..bf40583 100644 --- a/matrix/Matrix.java +++ b/matrix/Matrix.java @@ -678,14 +678,14 @@ { for (int j = 0; j < nr; j++) { - boolean zero = Math.abs(A[i][j]) < 1E-8; + boolean zero = Math.abs(A[i][j]) < 1E-12; if (!zero) { if (i != j) return false; - boolean un = Math.abs(A[i][j] - 1) < 1E-8; + boolean un = Math.abs(A[i][j] - 1) < 1E-12; if (!un) return false; -- Gitblit v1.6.2