From 89b25e7cc97f6fe221dfd41c4d463500f8a31bc1 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Tue, 25 Jun 2019 23:58:09 -0400 Subject: [PATCH] Edit panel pin state. --- Object3D.java | 1103 ++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 684 insertions(+), 419 deletions(-) diff --git a/Object3D.java b/Object3D.java index 18fd57e..e829908 100644 --- a/Object3D.java +++ b/Object3D.java @@ -5,6 +5,7 @@ import java.util.Vector; import javax.media.j3d.Transform3D; +import javax.media.opengl.GL; import javax.vecmath.Vector3d; import javax.imageio.ImageIO; @@ -13,11 +14,20 @@ import //weka.core. matrix.Matrix; +import java.util.UUID; + //import net.sourceforge.sizeof.SizeOf; public class Object3D extends Vector<Object3D> implements java.io.Serializable, iSendInfo //, aurelienribon.tweenengine.TweenAccessor<Object3D> { //static final long serialVersionUID = -607422624994562685L; static final long serialVersionUID = 5022536242724664900L; + + private UUID uuid = UUID.randomUUID(); + + // TEMPORARY for mocap undo + mocap.reader.BVHReader.BVHResult bvh; + Object3D skeleton; + // ScriptNode scriptnode; @@ -99,64 +109,143 @@ // transient boolean reduced; // for morph reduction -transient com.bulletphysics.linearmath.Transform cache; // for fast merge -transient com.bulletphysics.linearmath.Transform cache_1; // for fast merge + transient com.bulletphysics.linearmath.Transform cache; // for fast merge + transient com.bulletphysics.linearmath.Transform cache_1; // for fast merge -transient Object3D transientsupport; // for cloning -transient boolean transientlink2master; + transient Object3D transientsupport; // for cloning + transient boolean transientlink2master; -void SaveSupports() -{ - if (blockloop) - return; - - transientsupport = support; - transientlink2master = link2master; - - support = null; - link2master = false; - - if (bRep != null) + void SaveSupports() { - bRep.SaveSupports(); + if (blockloop) + return; + + transientsupport = support; + transientlink2master = link2master; + + support = null; + link2master = false; + + if (bRep != null) + { + bRep.SaveSupports(); + } + + for (int i = 0; i < Size(); i++) + { + Object3D child = (Object3D) get(i); + if (child == null) + continue; + blockloop = true; + child.SaveSupports(); + blockloop = false; + } } - - for (int i = 0; i < Size(); i++) + + void RestoreSupports() { - Object3D child = (Object3D) get(i); - if (child == null) - continue; + if (blockloop) + return; + + support = transientsupport; + link2master = transientlink2master; + transientsupport = null; + transientlink2master = false; + + if (bRep != null) + { + bRep.RestoreSupports(); + } + + for (int i = 0; i < Size(); i++) + { + Object3D child = (Object3D) get(i); + if (child == null) + continue; + blockloop = true; + child.RestoreSupports(); + blockloop = false; + } + } + + void ExtractBigData(java.util.Hashtable<java.util.UUID, Object3D> hashtable) + { + if (hashtable.containsKey(GetUUID())) + { + Object3D o = hashtable.get(GetUUID()); + + Grafreed.Assert(this.bRep == o.bRep); + if (this.bRep != null) + assert(this.bRep.support == o.transientrep); + + return; + } + + Object3D o = new Object3D("copy of " + this.name); + + hashtable.put(GetUUID(), o); + + for (int i=0; i<Size(); i++) + { + get(i).ExtractBigData(hashtable); + } + + ExtractBigData(o); + } + + void ExtractBigData(Object3D o) + { + o.bRep = this.bRep; + if (this.bRep != null) + { + o.transientrep = this.bRep.support; + o.bRep.support = null; + } + + // o.support = this.support; + // o.fileparent = this.fileparent; + // if (this.bRep != null) + // o.bRep = this.bRep.support; + + this.bRep = null; + // if (this.bRep != null) + // this.bRep.support = null; + // this.support = null; + // this.fileparent = null; + } + + void RestoreBigData(java.util.Hashtable<java.util.UUID, Object3D> hashtable) + { + if (!hashtable.containsKey(GetUUID())) + return; + + if (blockloop) + return; + blockloop = true; - child.SaveSupports(); + + Object3D o = hashtable.get(GetUUID()); + + RestoreBigData(o); + + //hashtable.remove(GetUUID()); + + for (int i=0; i<Size(); i++) + { + get(i).RestoreBigData(hashtable); + } + blockloop = false; } -} -void RestoreSupports() -{ - if (blockloop) - return; - - support = transientsupport; - link2master = transientlink2master; - transientsupport = null; - transientlink2master = false; - - if (bRep != null) + void RestoreBigData(Object3D o) { - bRep.RestoreSupports(); + this.bRep = o.bRep; + if (this.bRep != null) + this.bRep.support = o.transientrep; + // this.support = o.support; + // this.fileparent = o.fileparent; } - - for (int i = 0; i < Size(); i++) - { - Object3D child = (Object3D) get(i); - if (child == null) - continue; - blockloop = true; - child.RestoreSupports(); - blockloop = false; - } -} // MOCAP SUPPORT double tx,ty,tz,rx,ry,rz; @@ -299,6 +388,7 @@ } boolean live = false; + boolean dontselect = false; boolean hide = false; boolean link2master = false; // performs reset support/master at each frame boolean marked = false; // animation node @@ -430,16 +520,16 @@ { Object3D copy = this; - Camera parentcam = CameraPane.theRenderer.manipCamera; + Camera parentcam = Globals.theRenderer.ManipCamera(); - if (CameraPane.theRenderer.manipCamera == CameraPane.theRenderer.cameras[0]) + if (Globals.theRenderer.ManipCamera() == Globals.theRenderer.Cameras()[0]) { - parentcam = CameraPane.theRenderer.cameras[1]; + parentcam = Globals.theRenderer.Cameras()[1]; } - if (CameraPane.theRenderer.manipCamera == CameraPane.theRenderer.cameras[1]) + if (Globals.theRenderer.ManipCamera() == Globals.theRenderer.Cameras()[1]) { - parentcam = CameraPane.theRenderer.cameras[0]; + parentcam = Globals.theRenderer.Cameras()[0]; } if (this == parentcam) @@ -447,7 +537,7 @@ //assert(this instanceof Camera); for (int count = parentcam.GetTransformCount(); --count>=0;) - LA.xformPos(CameraPane.theRenderer.targetLookAt, parentcam.toParent, CameraPane.theRenderer.targetLookAt); + LA.xformPos(Globals.theRenderer.TargetLookAt(), parentcam.toParent, Globals.theRenderer.TargetLookAt()); } copy.marked ^= true; @@ -467,7 +557,7 @@ //assert(this instanceof Camera); for (int count = parentcam.GetTransformCount(); --count>=0;) - LA.xformPos(CameraPane.theRenderer.targetLookAt, parentcam.fromParent, CameraPane.theRenderer.targetLookAt); + LA.xformPos(Globals.theRenderer.TargetLookAt(), parentcam.fromParent, Globals.theRenderer.TargetLookAt()); } copy.Touch(); // display list issue @@ -480,12 +570,14 @@ toParent = LA.newMatrix(); fromParent = LA.newMatrix(); } + if (toParentMarked == null) { if (maxcount != 1) { new Exception().printStackTrace(); } + toParentMarked = LA.newMatrix(); fromParentMarked = LA.newMatrix(); } @@ -602,7 +694,7 @@ return; } - if (CameraPane.fromscript) + if (Globals.fromscript) { transformcount = 0; return; @@ -773,7 +865,7 @@ if (step == 0) step = 1; if (maxcount == 0) - maxcount = 2048; // 4; + maxcount = 128; // 2048; // 4; // if (acceleration == 0) // acceleration = 10; if (delay == 0) // serial @@ -796,7 +888,7 @@ if (marked && Globals.isLIVE() && live && //TEMP21aug2018 - Globals.DrawMode() == iCameraPane.SHADOW && + (Globals.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW || !Globals.COMPUTESHADOWWHENLIVE) && currentframe != Globals.framecount) { currentframe = Globals.framecount; @@ -808,7 +900,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; @@ -880,6 +973,7 @@ if (material == null || material.multiply) return true; + // Transparent objects are dynamic because we have to sort the triangles. return material.opacity > 0.99; } @@ -911,6 +1005,11 @@ fromParent = null; // LA.newMatrix(); bRep = null; // new BoundaryRep(); + if (oname != null && oname.equals("LeftHand")) + { + name = oname; + } + /* float hue = (float)Math.random(); Color col; @@ -953,7 +1052,7 @@ public Object clone() { - return GrafreeD.clone(this); + return Grafreed.clone(this); } Object3D copyExpand() @@ -1469,7 +1568,7 @@ BoundaryRep.SEUIL = other.material.cameralight; // Set default to 0.1 - BoundaryRep.SEUIL /= 2; + BoundaryRep.SEUIL /= 4; // 2; System.out.println("SEUIL = " + BoundaryRep.SEUIL); } @@ -1728,7 +1827,7 @@ Object3D o = new Object3D((clone?"Ge:":"Li:") + this.name); o.bRep = transientrep; if (clone) - o.bRep = (BoundaryRep) GrafreeD.clone(transientrep); + o.bRep = (BoundaryRep) Grafreed.clone(transientrep); o.CreateMaterial(); o.SetAttributes(this, -1); //parent @@ -1741,7 +1840,7 @@ Object3D o = new Object3D((clone?"Ge:":"Li:") + this.name); o.bRep = bRep; if (clone) - o.bRep = (BoundaryRep) GrafreeD.clone(bRep); + o.bRep = (BoundaryRep) Grafreed.clone(bRep); o.CreateMaterial(); //o.overwriteThis(this, -1); o.SetAttributes(this, -1); @@ -1828,12 +1927,15 @@ if (obj.name == null) continue; // can't be a null one + // Try perfect match first. if (n.equals(obj.name)) { theobj = obj; count++; } } + + // not needed: n = n.split(":")[0]; // Poser generates a count if (count != 1) for (int i=Size(); --i>=0;) @@ -2293,12 +2395,17 @@ } */ } + else + { + //((ObjEditor)editWindow).SetupUI2(null); + } } void createEditWindow(GroupEditor callee, boolean newWindow) //, boolean root) { if (newWindow) { + new Exception().printStackTrace(); System.exit(0); if (parent != null) { @@ -2333,6 +2440,14 @@ { editWindow.refreshContents(); } + else + { + if (manipWindow != null) + { + manipWindow.refreshContents(); + } + } + //if (parent != null) //parent.refreshEditWindow(); } @@ -2475,13 +2590,13 @@ return retval; } - void doEditDrag(ClickInfo info) + void doEditDrag(ClickInfo info, boolean opposite) { switch (doSomething) { case 1: // '\001' //super. - doEditDrag0(info); + doEditDrag0(info, opposite); break; case 2: // '\002' @@ -2494,11 +2609,11 @@ { //sel.hitSomething = childToDrag.hitSomething; //childToDrag.doEditDrag(info); - sel.doEditDrag(info); + sel.doEditDrag(info, opposite); } else { //super. - doEditDrag0(info); + doEditDrag0(info, opposite); } } break; @@ -2608,6 +2723,18 @@ void GenNormalsS(boolean crease) { selection.GenNormals(crease); +// for (int i=0; i<selection.size(); i++) +// { +// Object3D selectee = (Object3D) selection.elementAt(i); +// selectee.GenNormals(crease); +// } + + //Touch(); + } + + void GenNormalsMeshS() + { + selection.GenNormalsMesh(); // for (int i=0; i<selection.size(); i++) // { // Object3D selectee = (Object3D) selection.elementAt(i); @@ -2748,6 +2875,24 @@ if (child == null) continue; child.GenNormals(crease); +// Children().release(i); + } + blockloop = false; + } + + void GenNormalsMesh() + { + if (blockloop) + return; + + blockloop = true; + GenNormalsMesh0(); + for (int i = 0; i < Children().Size(); i++) + { + Object3D child = (Object3D) Children().get(i); // reserve(i); + if (child == null) + continue; + child.GenNormalsMesh(); // Children().release(i); } blockloop = false; @@ -2905,7 +3050,8 @@ { if (bRep != null) { - bRep.GenUV(); + bRep.GenUV(); //1); + //bRep.UnfoldUV(); Touch(); } } @@ -2915,6 +3061,15 @@ if (bRep != null) { bRep.GenerateNormals(crease); + Touch(); + } + } + + void GenNormalsMesh0() + { + if (bRep != null) + { + bRep.GenerateNormalsMesh(); Touch(); } } @@ -2980,6 +3135,33 @@ 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); + LA.matConcat(toParent, v.toParent, v.toParent); + LA.matConcat(v.fromParent, fromParent, v.fromParent); + } + + toParent = null; // LA.matIdentity(toParent); + fromParent = null; // LA.matIdentity(fromParent); + + Touch(); + } + } + void TransformGeometry() { Object3D obj = this; @@ -3201,9 +3383,11 @@ BoundaryRep sup = bRep.support; bRep.support = null; - BoundaryRep temprep = (BoundaryRep) GrafreeD.clone(bRep); + BoundaryRep temprep = (BoundaryRep) Grafreed.clone(bRep); // bRep.SplitInTwo(onlyone); // thread... - temprep.SplitInTwo(reduction34, onlyone); + + while(temprep.SplitInTwo(reduction34, onlyone)); + bRep = temprep; bRep.support = sup; Touch(); @@ -3340,7 +3524,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++) @@ -3361,7 +3546,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++) @@ -3381,7 +3567,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++) @@ -3401,7 +3588,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++) @@ -3411,6 +3598,46 @@ continue; blockloop = true; child.MarkLeaves(h); + blockloop = false; + // release(i); + } + } + + 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); } @@ -3725,7 +3952,7 @@ if (child == null) continue; - if (GrafreeD.RENDERME > 0) + if (Grafreed.RENDERME > 0) { if (child instanceof Merge) ((Merge)child).renderme(); @@ -3876,7 +4103,7 @@ if (child == null) continue; - if (GrafreeD.RENDERME > 0) + if (Grafreed.RENDERME > 0) { if (child instanceof Merge) ((Merge)child).renderme(); @@ -4071,7 +4298,7 @@ if (child == null) continue; - if (GrafreeD.RENDERME > 0) + if (Grafreed.RENDERME > 0) { if (child instanceof Merge) ((Merge)child).renderme(); @@ -4184,6 +4411,55 @@ { blockloop = true; get(i).RepairShadow(); + blockloop = false; + } + } + + void RepairSOV() + { + if (blockloop) + return; + + String texname = this.GetPigmentTexture(); + + if (texname.startsWith("sov")) + { + String[] s = texname.split("/"); + + String[] sname = s[1].split("Color.pn"); + + texname = sname[0]; + + if (sname.length > 1) + { + texname += "Color.jpg"; + } + + this.SetPigmentTexture("sov/" + texname); + } + + texname = this.GetBumpTexture(); + + if (texname.startsWith("sov")) + { + String[] s = texname.split("/"); + + String[] sname = s[1].split("Bump.pn"); + + texname = sname[0]; + + if (sname.length > 1) + { + texname += "Bump.jpg"; + } + + this.SetBumpTexture("sov/" + texname); + } + + for (int i=0; i<Size(); i++) + { + blockloop = true; + get(i).RepairSOV(); blockloop = false; } } @@ -4678,7 +4954,7 @@ cTreePath SelectLeaf(int indexcount, boolean deselect) { - if (hide) + if (hide || dontselect) return null; if (count <= 0) @@ -4702,9 +4978,17 @@ } } + ObjEditor GetWindow() + { + if (editWindow != null) + return editWindow; + + return manipWindow; + } + cTreePath Select(int indexcount, boolean deselect) { - if (hide) + if (hide || dontselect) return null; if (count <= 0) @@ -4738,10 +5022,11 @@ if (leaf != null) { cTreePath tp = new cTreePath(this, leaf); - if (editWindow != null) + ObjEditor window = GetWindow(); + if (window != null) { //System.out.println("editWindow = " + editWindow + " vs " + this); - editWindow.Select(tp, deselect, true); + window.Select(tp, deselect, true); } return tp; @@ -4767,9 +5052,10 @@ if (leaf != null) { cTreePath tp = new cTreePath(this, leaf); - if (editWindow != null) + ObjEditor window = GetWindow(); + if (window != null) { - editWindow.Select(tp, deselect, true); + window.Select(tp, deselect, true); } return tp; @@ -4854,7 +5140,7 @@ return globalTransform; } - void PreprocessOcclusion(CameraPane cp) + void PreprocessOcclusion(iCameraPane cp) { /* if (AOdone) @@ -5156,10 +5442,34 @@ // System.out.println("Fullname = " + fullname); - if (fullname.name.indexOf(":") == -1) - return fullname.name; + // Does not work on Windows due to C: +// if (fullname.name.indexOf(":") == -1) +// return fullname.name; +// +// return fullname.name.substring(0,fullname.name.indexOf(":")); - return fullname.name.substring(0,fullname.name.indexOf(":")); + String[] split = fullname.name.split(":"); + + if (split.length == 0) + { + return ""; + } + + if (split.length <= 2) + { + if (fullname.name.endsWith(":")) + { + // Windows + return fullname.name.substring(0, fullname.name.length()-1); + } + + return split[0]; + } + + // Windows + assert(split.length == 4); + + return split[0] + ":" + split[1]; } static String GetBump(cTexture fullname) @@ -5168,10 +5478,38 @@ return ""; // System.out.println("Fullname = " + fullname); - if (fullname.name.indexOf(":") == -1) - return ""; - - return fullname.name.substring(fullname.name.indexOf(":")+1,fullname.name.length()); + // Does not work on Windows due to C: +// if (fullname.name.indexOf(":") == -1) +// return ""; +// +// return fullname.name.substring(fullname.name.indexOf(":")+1,fullname.name.length()); + String[] split = fullname.name.split(":"); + + if (split.length == 0) + { + return ""; + } + + if (split.length == 1) + { + return ""; + } + + if (split.length == 2) + { + if (fullname.name.endsWith(":")) + { + // Windows + return ""; + } + + return split[1]; + } + + // Windows + assert(split.length == 4); + + return split[2] + ":" + split[3]; } String GetPigmentTexture() @@ -5245,7 +5583,7 @@ System.out.print("; textures = " + textures); System.out.println("; usedtextures = " + usedtextures); - if (GetTextures() == null) + if (GetTextures() == null) // What is that?? GetTextures().name = ":"; String texname = tex; @@ -5276,6 +5614,43 @@ child.ResetPigmentTexture(); blockloop = false; } + } + + UUID GetUUID() + { + if (uuid == null) + { + // Serial + uuid = UUID.randomUUID(); + } + + return uuid; + } + + Object3D GetObject(UUID uid) + { + if (blockloop) + return null; + + if (GetUUID().equals(uid)) + return this; + + int nb = Size(); + for (int i = 0; i < nb; i++) + { + Object3D child = (Object3D) get(i); + + if (child == null) + continue; + + blockloop = true; + Object3D obj = child.GetObject(uid); + blockloop = false; + if (obj != null) + return obj; + } + + return null; } void SetBumpTexture(String tex) @@ -5322,11 +5697,23 @@ boolean NeedSupport() { return - CameraPane.SUPPORT && !CameraPane.movingcamera && link2master && /*live &&*/ support != null + CameraPane.SUPPORT && (!CameraPane.movingcamera || (!Globals.FREEZEONMOVE && Globals.isLIVE())) && 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; + + boolean IsLive() + { + if (live) + return true; + + if (parent == null) + return false; + + return parent.IsLive(); + } void Draw(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked) { @@ -5338,7 +5725,7 @@ } if (display.DrawMode() == iCameraPane.SELECTION && - hide) + (hide || dontselect)) return; if (name != null && name.contains("sclera")) @@ -5365,12 +5752,12 @@ } if ((//display.DrawMode() == CameraPane.SHADOW || - display.DrawMode() == CameraPane.SELECTION || CameraPane.DEBUG_SELECTION) && HasTransparency()) + display.DrawMode() == iCameraPane.SELECTION || display.IsDebugSelection()) && HasTransparency()) { return; } - javax.media.opengl.GL gl = display.GetGL(); + //javax.media.opengl.GL gl = display.GetGL(); /* if (touched) @@ -5389,7 +5776,7 @@ support = support; //boolean usecalllists = IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null || !link2master); // !(this instanceof cSpring) && !(this instanceof BezierPatch); - boolean usecalllists = false; // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch); + boolean usecalllists = !IsLive(); // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch); if (!usecalllists && bRep != null && bRep.displaylist > 0) { @@ -5406,13 +5793,15 @@ boolean compiled = false; - boolean selectmode = display.DrawMode() == display.SELECTION || CameraPane.DEBUG_SELECTION; + boolean selectmode = display.DrawMode() == display.SELECTION || display.IsDebugSelection(); if (!selectmode && //display.DrawMode() != display.SELECTION && - (touched || (bRep != null && bRep.displaylist <= 0))) + //(touched || (bRep != null && bRep.displaylist <= 0))) + (Globals.isLIVE() && Globals.COMPUTESHADOWWHENLIVE || touched || (bRep != null && bRep.displaylist <= 0))) { Globals.lighttouched = true; } // all panes... + //if (usecalllists && display.DrawMode() != display.SELECTION && display.DrawMode() != display.SHADOW && if (bRep != null && usecalllists && !selectmode && // june 2013 display.DrawMode() != display.SHADOW && (touched || (bRep != null && bRep.displaylist <= 0))) @@ -5422,7 +5811,7 @@ //if (displaylist == -1 && usecalllists) if ((bRep != null && bRep.displaylist <= 0) && usecalllists) // june 2013 { - bRep.displaylist = gl.glGenLists(1); + bRep.displaylist = display.GenList(); assert(bRep.displaylist != 0); // System.err.println("glGenLists: " + bRep.displaylist + " for " + this); //System.out.println("\tgen list " + list); @@ -5434,14 +5823,16 @@ if (usecalllists) { // System.err.println("new list " + bRep.displaylist + " for " + this); - gl.glNewList(bRep.displaylist, gl.GL_COMPILE); //_AND_EXECUTE); + display.NewList(bRep.displaylist); } + CallList(display, root, selected, blocked); + // compiled = true; if (usecalllists) { // System.err.println("end list " + bRep.displaylist + " for " + this); - gl.glEndList(); + display.EndList(); } //gl.glDrawBuffer(gl.GL_BACK); // XXX touched = false; @@ -5484,12 +5875,12 @@ // frustum culling if (CameraPane.FRUSTUM && !blocked && !IsInfinite() && GetBRep() != null // && GetBRep().VertexCount() != 1260 // default grid - && display.DrawMode() != CameraPane.SELECTION) + && display.DrawMode() != iCameraPane.SELECTION) { - if (display.DrawMode() == CameraPane.SHADOW) + if (display.DrawMode() == iCameraPane.SHADOW) { if (!link2master // tricky to cull in shadow mode. - && GetBRep().FrustumCull(this, gl, display.LightCamera(), true)) + && GetBRep().FrustumCull(this, null, display.LightCamera(), true)) { //System.out.print("CULLED"); culled = true; @@ -5497,7 +5888,7 @@ } else //GetBRep().getBounds(v0, v1, this); - if (GetBRep().FrustumCull(this, gl, display.RenderCamera(), false)) + if (GetBRep().FrustumCull(this, null, display.RenderCamera(), false)) culled = true; // LA.xformPos(v0, display.renderCamera.toScreen, v0); @@ -5533,11 +5924,11 @@ if (!culled) - if (display.DrawMode() == display.SELECTION || CameraPane.DEBUG_SELECTION) + if (display.DrawMode() == display.SELECTION || display.IsDebugSelection()) { if (GetBRep() != null) { - CameraPane.NextIndex(this, gl); + display.NextIndex(); // vertex color conflict : gl.glCallList(list); DrawNode(display, root, selected); if (this instanceof BezierPatch) @@ -5578,7 +5969,28 @@ tex = GetTextures(); } - display.BindTextures(tex, texres); + boolean failedPigment = false; + boolean failedBump = false; + + try + { + display.BindPigmentTexture(tex, texres); + } + catch (Exception e) + { + System.err.println("FAILED: " + this); + failedPigment = true; + } + + try + { + display.BindBumpTexture(tex, texres); + } + catch (Exception e) + { + //System.err.println("FAILED: " + this); + failedBump = true; + } if (!compiled) { @@ -5594,13 +6006,17 @@ // System.err.println("glCallList: " + bRep.displaylist + " for " + this); assert(bRep.displaylist != 0); - gl.glCallList(bRep.displaylist); + display.CallList(bRep.displaylist); // june 2013 drawSelf(display, root, selected); } } } - display.ReleaseTextures(tex); + if (!failedBump) + display.ReleaseBumpTexture(tex); + + if (!failedPigment) + display.ReleasePigmentTexture(tex); display.PopMaterial(this, selected); } @@ -5729,6 +6145,9 @@ void drawSelf(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked) { + if (display.DrawMode() == iCameraPane.SELECTION && dontselect) + return; + if (hide) return; // shadow optimisation @@ -5854,6 +6273,9 @@ if (display.DrawMode() == display.SHADOW && projectedVertices != null && projectedVertices.length > 2 && projectedVertices[2].y >= 10000) return; // no shadow for transparent objects + if (display.DrawMode() == iCameraPane.SELECTION && dontselect) + return; + if (hide) return; @@ -5894,9 +6316,10 @@ return; } + //bRep.GenUV(1/material.diffuseness); // bRep.lock = true; - javax.media.opengl.GL gl = display.GetGL(); + //javax.media.opengl.GL gl = display.GetGL(); if (CameraPane.BOXMODE && !selected) // || CameraPane.movingcamera) { @@ -5913,23 +6336,7 @@ bRep.getMinMax(min, max, 100); - gl.glBegin(gl.GL_LINES); - - gl.glVertex3d(min.x, min.y, min.z); - gl.glVertex3d(min.x, min.y, max.z); - gl.glVertex3d(min.x, min.y, min.z); - gl.glVertex3d(min.x, max.y, min.z); - gl.glVertex3d(min.x, min.y, min.z); - gl.glVertex3d(max.x, min.y, min.z); - - gl.glVertex3d(max.x, max.y, max.z); - gl.glVertex3d(min.x, max.y, max.z); - gl.glVertex3d(max.x, max.y, max.z); - gl.glVertex3d(max.x, min.y, max.z); - gl.glVertex3d(max.x, max.y, max.z); - gl.glVertex3d(max.x, max.y, min.z); - - gl.glEnd(); + display.DrawBox(min, max); return; } @@ -5973,7 +6380,7 @@ { //throw new Error(); - boolean selectmode = display.DrawMode() == display.SELECTION || CameraPane.DEBUG_SELECTION; + boolean selectmode = display.DrawMode() == display.SELECTION || display.IsDebugSelection(); int[] strips = bRep.getRawIndices(); @@ -5983,178 +6390,19 @@ new Exception().printStackTrace(); return; } - - // TRIANGLE STRIP ARRAY - if (bRep.trimmed) + + if (dontselect) { - float[] v = bRep.getRawVertices(); - float[] n = bRep.getRawNormals(); - float[] c = bRep.getRawColors(); - float[] uv = bRep.getRawUVMap(); - - int count2 = 0; - int count3 = 0; - - if (n.length > 0) - { - for (int i = 0; i < strips.length; i++) - { - gl.glBegin(gl.GL_TRIANGLE_STRIP); - - /* - boolean locked = false; - float eps = 0.1f; - boolean wrap = CameraPane.UVWRAP; // true; // UV WRAP TEXTURE ISSUE: true = artifacts, false = nice - - int dot = 0; - - if ((dot&1) == 0) - dot |= (Math.abs(qv.s - pv.s) < eps && Math.abs(qv.t - pv.t) < eps) ? 3 : 1; - - if (wrap || (dot&2) != 0) // Math.abs(qv.s - pv.s) < eps && Math.abs(qv.t - pv.t) < eps) - gl.glTexCoord2f((float) qv.s, (float) qv.t); - else - { - locked = true; - gl.glTexCoord2f((float) pv.s, (float) pv.t); - } - //System.out.println("vertexq = " + qv.x + ", " + qv.y + ", " + qv.z); - gl.glVertex3f((float) qv.x, (float) qv.y, (float) qv.z); - if (hasnorm) - { - //System.out.println("normalr = " + rv.norm.x + ", " + rv.norm.y + ", " + rv.norm.z); - gl.glNormal3f((float) rv.norm.x, (float) rv.norm.y, (float) rv.norm.z); - } - - if ((dot&4) == 0) - dot |= (Math.abs(rv.s - pv.s) < eps && Math.abs(rv.t - pv.t) < eps) ? 12 : 4; - - if (wrap || !locked && (dot&8) != 0) - gl.glTexCoord2f((float) rv.s, (float) rv.t); - else - gl.glTexCoord2f((float) pv.s, (float) pv.t); - - f.dot = dot; - */ - - if (!selectmode) - { - if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0) - { - gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]); - } else - { - gl.glNormal3f(0, 0, 1); - } - - if (c != null) - //System.out.println("glcolor = " + c[count3] + ", " + c[count3+1] + ", " + c[count3+2]); - { - 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]); - - count2 += 2; - count3 += 3; - if (!selectmode) - { - if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0) - { - gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]); - } else - { - gl.glNormal3f(0, 0, 1); - } - if (c != null) - { - 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]); - - count2 += 2; - count3 += 3; - for (int j = 0; j < strips[i] - 2; j++) - { - //gl.glTexCoord2d(...); - if (!selectmode) - { - if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0) - { - gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]); - } else - { - gl.glNormal3f(0, 0, 1); - } - if (c != null) - { - 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("coord3 = " + uv[count2] + ", " + uv[count2+1]); - gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]); - count2 += 2; - count3 += 3; - } - - gl.glEnd(); - } - } - - assert count3 == v.length; + //bRep.GenerateNormalsMINE(); } - else // !trimmed - { - int count = 0; - for (int i = 0; i < strips.length; i++) - { - gl.glBegin(gl.GL_TRIANGLE_STRIP); - - Vertex p = bRep.GetVertex(bRep.indices[count++]); - Vertex q = bRep.GetVertex(bRep.indices[count++]); - - drawVertex(gl, p, selectmode); - drawVertex(gl, q, selectmode); - - for (int j = 0; j < strips[i] - 2; j++) - { - Vertex r = bRep.GetVertex(bRep.indices[count++]); - -// if (j%2 == 0) -// drawFace(p, q, r, display, null); -// else -// drawFace(p, r, q, display, null); - -// p = q; -// q = r; - drawVertex(gl, r, selectmode); - } - - gl.glEnd(); - } - } + + display.DrawGeometry(bRep, flipV, selectmode); } else // catch (Error e) { // TRIANGLE ARRAY if (IsOpaque()) // Static()) { - gl.glBegin(gl.GL_TRIANGLES); + display.StartTriangles(); int facecount = bRep.FaceCount(); for (int i = 0; i < facecount; i++) { @@ -6219,7 +6467,7 @@ display.DrawFace(this, p, q, r, face); } - gl.glEnd(); + display.EndTriangles(); } else { @@ -6248,8 +6496,8 @@ //System.out.println("SORT"); java.util.Arrays.sort(facescompare); - - gl.glBegin(gl.GL_TRIANGLES); + + display.StartTriangles(); for (int i = 0; i < facecount; i++) { Face face = bRep.GetFace(facescompare[i].index); @@ -6263,11 +6511,12 @@ display.DrawFace(this, p, q, r, face); } - gl.glEnd(); + display.EndTriangles(); } if (false) // live && support != null && support.bRep != null) // debug weights { + /* gl.glDisable(gl.GL_LIGHTING); float[] colorV = new float[3]; @@ -6346,6 +6595,7 @@ // gl.glEnd(); } } + */ } } @@ -6390,7 +6640,7 @@ center.add(r); center.mul(1.0/3); - center.sub(CameraPane.theRenderer.eyeCamera.location); + center.sub(Globals.theRenderer.EyeCamera().location); distance = center.dot(center); } @@ -6404,22 +6654,6 @@ void Print(Vertex v) { //System.err.println("(" + v.x + ", " + v.y + ", " + v.z + ")"); - } - - void drawVertex(javax.media.opengl.GL gl, Vertex pv, boolean selectmode) - { - if (!selectmode) - { - gl.glNormal3f((float) pv.norm.x, (float) pv.norm.y, (float) pv.norm.z); - gl.glColor4f(pv.AO, pv.AO, pv.AO, 1); - - if (flipV) - gl.glTexCoord2f((float) pv.s, 1-(float) pv.t); - else - gl.glTexCoord2f((float) pv.s, (float) pv.t); - } - - gl.glVertex3f((float) pv.x, (float) pv.y, (float) pv.z); } void drawSelf(ClickInfo info, int level, boolean select) @@ -6993,83 +7227,84 @@ int spotw = spot.x + spot.width; int spoth = spot.y + spot.height; info.g.fillRect(spot.x, spot.y, spot.width, spot.height); - if (CameraPane.Xmin > spot.x) - { - CameraPane.Xmin = spot.x; - } - if (CameraPane.Xmax < spotw) - { - CameraPane.Xmax = spotw; - } - if (CameraPane.Ymin > spot.y) - { - CameraPane.Ymin = spot.y; - } - if (CameraPane.Ymax < spoth) - { - CameraPane.Ymax = spoth; - } +// if (CameraPane.Xmin > spot.x) +// { +// CameraPane.Xmin = spot.x; +// } +// if (CameraPane.Xmax < spotw) +// { +// CameraPane.Xmax = spotw; +// } +// if (CameraPane.Ymin > spot.y) +// { +// CameraPane.Ymin = spot.y; +// } +// if (CameraPane.Ymax < spoth) +// { +// CameraPane.Ymax = spoth; +// } spot.translate(32, 32); spotw = spot.x + spot.width; spoth = spot.y + spot.height; - info.g.setColor(Color.blue); + info.g.setColor(Color.cyan); info.g.fillRect(spot.x, spot.y, spot.width, spot.height); - if (CameraPane.Xmin > spot.x) - { - CameraPane.Xmin = spot.x; - } - if (CameraPane.Xmax < spotw) - { - CameraPane.Xmax = spotw; - } - if (CameraPane.Ymin > spot.y) - { - CameraPane.Ymin = spot.y; - } - if (CameraPane.Ymax < spoth) - { - CameraPane.Ymax = spoth; - } - info.g.drawLine(spotw, spoth, spotw, spoth - 15); - info.g.drawLine(spotw, spoth, spotw - 15, spoth); +// if (CameraPane.Xmin > spot.x) +// { +// CameraPane.Xmin = spot.x; +// } +// if (CameraPane.Xmax < spotw) +// { +// CameraPane.Xmax = spotw; +// } +// if (CameraPane.Ymin > spot.y) +// { +// CameraPane.Ymin = spot.y; +// } +// if (CameraPane.Ymax < spoth) +// { +// CameraPane.Ymax = spoth; +// } + // bonhommes info.g.drawLine(spotw, spoth, spotw, spoth - boundary.height/2); // 15 + //info.g.drawLine(spotw, spoth, spotw - boundary.width/2, spoth); // 15 spot.translate(0, -32); - info.g.setColor(Color.green); + info.g.setColor(Color.yellow); info.g.fillRect(spot.x, spot.y, spot.width, spot.height); - if (CameraPane.Xmin > spot.x) - { - CameraPane.Xmin = spot.x; - } - if (CameraPane.Xmax < spotw) - { - CameraPane.Xmax = spotw; - } - if (CameraPane.Ymin > spot.y) - { - CameraPane.Ymin = spot.y; - } - if (CameraPane.Ymax < spoth) - { - CameraPane.Ymax = spoth; - } + info.g.setColor(Color.green); +// if (CameraPane.Xmin > spot.x) +// { +// CameraPane.Xmin = spot.x; +// } +// if (CameraPane.Xmax < spotw) +// { +// CameraPane.Xmax = spotw; +// } +// if (CameraPane.Ymin > spot.y) +// { +// CameraPane.Ymin = spot.y; +// } +// if (CameraPane.Ymax < spoth) +// { +// CameraPane.Ymax = spoth; +// } info.g.drawArc(boundary.x, boundary.y, boundary.width, boundary.height, 0, 360); //info.g.drawArc(spot.x, spotw, spot.width/2, boundary.height/2, 0, 360); - if (CameraPane.Xmin > boundary.x) - { - CameraPane.Xmin = boundary.x; - } - if (CameraPane.Xmax < boundary.x + boundary.width) - { - CameraPane.Xmax = boundary.x + boundary.width; - } - if (CameraPane.Ymin > boundary.y) - { - CameraPane.Ymin = boundary.y; - } - if (CameraPane.Ymax < boundary.y + boundary.height) - { - CameraPane.Ymax = boundary.y + boundary.height; - } +// if (CameraPane.Xmin > boundary.x) +// { +// CameraPane.Xmin = boundary.x; +// } +// if (CameraPane.Xmax < boundary.x + boundary.width) +// { +// CameraPane.Xmax = boundary.x + boundary.width; +// } +// if (CameraPane.Ymin > boundary.y) +// { +// CameraPane.Ymin = boundary.y; +// } +// if (CameraPane.Ymax < boundary.y + boundary.height) +// { +// CameraPane.Ymax = boundary.y + boundary.height; +// } return; } } @@ -7086,7 +7321,7 @@ startX = info.x; startY = info.y; - hitSomething = 0; + hitSomething = -1; cVector origin = new cVector(); //LA.xformPos(origin, toParent, origin); Rectangle spot = new Rectangle(); @@ -7119,7 +7354,7 @@ } //System.out.println("info.modifiers = " + info.modifiers); - modified = (info.modifiers & CameraPane.META) != 0; + modified = (info.modifiers & CameraPane.SHIFT) != 0; // Was META //System.out.println("modified = " + modified); //new Exception().printStackTrace(); //viewCode = info.pane.renderCamera.viewCode; @@ -7147,7 +7382,7 @@ return true; } - void doEditDrag0(ClickInfo info) + void doEditDrag0(ClickInfo info, boolean opposite) { if (hitSomething == 0) { @@ -7162,6 +7397,7 @@ //System.out.println("hitSomething = " + hitSomething); double scale = 0.005f * info.camera.Distance(); + cVector xlate = new cVector(); //cVector xlate2 = new cVector(); switch (hitSomething) @@ -7172,9 +7408,9 @@ case hitCenter: // Translate - scale *= 0.05f * info.pane.theRenderer.renderCamera.Distance(); + scale *= 0.05f * Globals.theRenderer.RenderCamera().Distance(); - if (modified) + if (modified || opposite) { //assert(false); /* @@ -7220,10 +7456,10 @@ } LA.xformDir(up, ClickInfo.matbuffer, up); // if (!CameraPane.LOCALTRANSFORM) - LA.xformDir(up, info.pane.theRenderer.renderCamera.toScreen, up); + LA.xformDir(up, Globals.theRenderer.RenderCamera().toScreen, up); LA.xformDir(info.camera.away, ClickInfo.matbuffer, away); // if (!CameraPane.LOCALTRANSFORM) - LA.xformDir(away, info.pane.theRenderer.renderCamera.toScreen, away); + LA.xformDir(away, Globals.theRenderer.RenderCamera().toScreen, away); //LA.vecCross(up, cVector.Z, right2); cVector delta = LA.newVector(info.x - startX, startY - info.y, 0); @@ -7268,6 +7504,7 @@ if (modified) { + // Rotate 90 degrees angle /= (Math.PI / 4); angle = Math.floor(angle + 0.5); angle *= (Math.PI / 4); @@ -7281,7 +7518,7 @@ } /**/ - switch (info.pane.renderCamera.viewCode) + switch (info.pane.RenderCamera().viewCode) { case 1: // '\001' LA.matZRotate(toParent, angle); @@ -7309,24 +7546,27 @@ case hitScale: // scale double hScale = (double) (info.x - centerPt.x) / 32; + double sign = 1; + if (hScale < 0) + { + sign = -1; + } + hScale = sign*Math.pow(sign*hScale, scale * 50); if (hScale < 0.01) { - hScale = 0.01; + //hScale = 0.01; } - hScale = Math.pow(hScale, scale * 50); - if (hScale < 0.01) - { - hScale = 0.01; - } + double vScale = (double) (info.y - centerPt.y) / 32; - if (vScale < 0.01) + sign = 1; + if (vScale < 0) { - vScale = 0.01; + sign = -1; } - vScale = Math.pow(vScale, scale * 50); + vScale = sign*Math.pow(sign*vScale, scale * 50); if (vScale < 0.01) { - vScale = 0.01; + //vScale = 0.01; } LA.matCopy(startMat, toParent); /**/ @@ -7337,39 +7577,47 @@ } /**/ - switch (info.pane.renderCamera.viewCode) + double totalScale = Math.sqrt(hScale*hScale + vScale*vScale) / Math.sqrt(2); + + if (totalScale < 0.01) + { + totalScale = 0.01; + } + + switch (info.pane.RenderCamera().viewCode) { case 3: // '\001' - if (modified) + if (modified || opposite) { //LA.matScale(toParent, 1, hScale, vScale); - LA.matScale(toParent, vScale, 1, 1); + LA.matScale(toParent, totalScale, 1, 1); } // vScale, 1); else { - LA.matScale(toParent, vScale, vScale, vScale); + // EXCEPTION! + LA.matScale(toParent, totalScale, totalScale, totalScale); } // vScale, 1); break; case 2: // '\002' - if (modified) + if (modified || opposite) { //LA.matScale(toParent, hScale, 1, vScale); - LA.matScale(toParent, 1, vScale, 1); + LA.matScale(toParent, 1, totalScale, 1); } else { - LA.matScale(toParent, vScale, 1, vScale); + LA.matScale(toParent, totalScale, 1, totalScale); } break; case 1: // '\003' - if (modified) + if (modified || opposite) { //LA.matScale(toParent, hScale, vScale, 1); - LA.matScale(toParent, 1, 1, vScale); + LA.matScale(toParent, 1, 1, totalScale); } else { - LA.matScale(toParent, vScale, vScale, 1); + LA.matScale(toParent, totalScale, totalScale, 1); } break; } @@ -7502,14 +7750,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() @@ -7565,6 +7821,7 @@ objectUI.closeUI(); if (editWindow != null) { + editWindow.ctrlPanel.FlushUI(); editWindow.refreshContents(); } // ? new objectUI = null; @@ -7573,6 +7830,10 @@ { editWindow = null; } // ? + } + else + { + //editWindow.closeUI(); } } @@ -7585,7 +7846,7 @@ /*transient*/ cVector2[] projectedVertices = new cVector2[0]; Object3D /*Composite*/ parent; - Object3D /*Composite*/ fileparent; + Object3D /*Composite*/ fileparent; // In the case of FileObject double[][] toParent; // dynamic matrix double[][] fromParent; @@ -7700,7 +7961,7 @@ { assert(bRep != null); if (!(support instanceof GenericJoint)) // support.bRep != null) - GrafreeD.Assert(support.bRep == bRep.support); + Grafreed.Assert(support.bRep == bRep.support); } else { @@ -7731,6 +7992,10 @@ } transient ObjEditor editWindow; + transient ObjEditor manipWindow; + + transient boolean pinned; + transient ObjectUI objectUI; public static int povDepth = 0; private static cVector tbMin = new cVector(); @@ -7749,9 +8014,9 @@ private static cVector edge2 = new cVector(); //private static cVector norm = new cVector(); /*transient private*/ int hitSomething; - private static final int hitCenter = 1; - private static final int hitScale = 2; - private static final int hitRotate = 3; + static final int hitCenter = 1; + static final int hitScale = 2; + static final int hitRotate = 3; /*transient*/ /*private*/ int viewCode; // Now used for transparency cache flag /*transient*/ private Point centerPt; /*transient*/ private int startX; -- Gitblit v1.6.2