From 40f408aaee14abd85d391008b4d22977dc586b50 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Sun, 21 Jul 2019 16:45:10 -0400 Subject: [PATCH] Prepare bimtexture. --- Object3D.java | 170 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 143 insertions(+), 27 deletions(-) diff --git a/Object3D.java b/Object3D.java index 45bb2a6..0fe5ff5 100644 --- a/Object3D.java +++ b/Object3D.java @@ -24,11 +24,14 @@ private UUID uuid = UUID.randomUUID(); - // TEMPORARY for mocap undo - mocap.reader.BVHReader.BVHResult bvh; - Object3D skeleton; + // TEMPORARY for mocap undo. No need to be transient. + mocap.reader.BVHReader.BVHResult savebvh; + Object3D saveskeleton; // + byte[] versions[]; + int versionindex = -1; + ScriptNode scriptnode; void InitOthers() @@ -170,24 +173,35 @@ void ExtractBigData(java.util.Hashtable<java.util.UUID, Object3D> hashtable) { + Object3D o; + if (hashtable.containsKey(GetUUID())) { - Object3D o = hashtable.get(GetUUID()); + o = hashtable.get(GetUUID()); Grafreed.Assert(this.bRep == o.bRep); - if (this.bRep != null) - assert(this.bRep.support == o.transientrep); + //if (this.bRep != null) + // assert(this.bRep.support == o.transientrep); + if (this.support != null) + assert(this.support.bRep == o.transientrep); + } + else + { + o = new Object3D("copy of " + this.name); - return; + hashtable.put(GetUUID(), o); } - Object3D o = new Object3D(); - - hashtable.put(GetUUID(), o); - - for (int i=0; i<Size(); i++) + if (!blockloop) { - get(i).ExtractBigData(hashtable); + blockloop = true; + + for (int i=0; i<Size(); i++) + { + get(i).ExtractBigData(hashtable); + } + + blockloop = false; } ExtractBigData(o); @@ -195,11 +209,26 @@ void ExtractBigData(Object3D o) { + if (o.bRep != null) + Grafreed.Assert(o.bRep == this.bRep); + o.bRep = this.bRep; - if (this.bRep != null) +// July 2019 if (this.bRep != null) +// { +// o.transientrep = this.bRep.support; +// o.bRep.support = null; +// } + o.selection = this.selection; + o.versions = this.versions; + o.versionindex = this.versionindex; + + if (this.support != null) { - o.transientrep = this.bRep.support; - o.bRep.support = null; + if (o.transientrep != null) + Grafreed.Assert(o.transientrep == this.support.bRep); + + o.transientrep = this.support.bRep; + this.support.bRep = null; } // o.support = this.support; @@ -223,19 +252,35 @@ RestoreBigData(o); - hashtable.remove(GetUUID()); + if (blockloop) + return; + + blockloop = true; + + //hashtable.remove(GetUUID()); for (int i=0; i<Size(); i++) { get(i).RestoreBigData(hashtable); } + + blockloop = false; } void RestoreBigData(Object3D o) { this.bRep = o.bRep; - if (this.bRep != null) - this.bRep.support = o.transientrep; + if (this.support != null && o.transientrep != null) + { + this.support.bRep = o.transientrep; + } + + this.selection = o.selection; + + this.versions = o.versions; + this.versionindex = o.versionindex; +// July 2019 if (this.bRep != null) +// this.bRep.support = o.transientrep; // this.support = o.support; // this.fileparent = o.fileparent; } @@ -381,6 +426,7 @@ } boolean live = false; + transient boolean keepdontselect; boolean dontselect = false; boolean hide = false; boolean link2master = false; // performs reset support/master at each frame @@ -1367,6 +1413,7 @@ toParent = LA.newMatrix(); fromParent = LA.newMatrix(); } + LA.matCopy(other.toParent, toParent); LA.matCopy(other.fromParent, fromParent); @@ -2433,6 +2480,14 @@ { editWindow.refreshContents(); } + else + { + if (manipWindow != null) + { + manipWindow.refreshContents(); + } + } + //if (parent != null) //parent.refreshEditWindow(); } @@ -3063,7 +3118,7 @@ { if (bRep != null) { - bRep.GenerateNormalsMINE(); + bRep.MergeNormals(); //.GenerateNormalsMINE(); Touch(); } } @@ -4963,6 +5018,14 @@ } } + ObjEditor GetWindow() + { + if (editWindow != null) + return editWindow; + + return manipWindow; + } + cTreePath Select(int indexcount, boolean deselect) { if (hide || dontselect) @@ -4999,10 +5062,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; @@ -5019,6 +5083,7 @@ if (child == null) continue; + if (child.HasTransparency() && child.size() != 0) { cTreePath leaf = child.Select(indexcount, deselect); @@ -5028,9 +5093,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; @@ -5350,6 +5416,51 @@ continue; child.ResetDisplayList(); // release(i); + } + + blockloop = false; + } + + void ResetSelectable() + { + if (blockloop) + return; + + blockloop = true; + + keepdontselect = dontselect; + dontselect = true; + + Object3D child; + int nb = Size(); + for (int i = 0; i < nb; i++) + { + child = (Object3D) get(i); + if (child == null) + continue; + child.ResetSelectable(); + } + + blockloop = false; + } + + void RestoreSelectable() + { + if (blockloop) + return; + + blockloop = true; + + dontselect = keepdontselect; + + Object3D child; + int nb = Size(); + for (int i = 0; i < nb; i++) + { + child = (Object3D) get(i); + if (child == null) + continue; + child.RestoreSelectable(); } blockloop = false; @@ -5772,7 +5883,7 @@ if (!selectmode && //display.DrawMode() != display.SELECTION && //(touched || (bRep != null && bRep.displaylist <= 0))) - (Globals.isLIVE() && Globals.COMPUTESHADOWWHENLIVE || touched && (bRep != null && bRep.displaylist <= 0))) + (Globals.isLIVE() && Globals.COMPUTESHADOWWHENLIVE || touched && Globals.COMPUTESHADOWWHENLIVE)) // || (bRep != null && bRep.displaylist <= 0))) { Globals.lighttouched = true; } // all panes... @@ -5904,6 +6015,7 @@ if (GetBRep() != null) { display.NextIndex(); + // vertex color conflict : gl.glCallList(list); DrawNode(display, root, selected); if (this instanceof BezierPatch) @@ -7261,8 +7373,8 @@ // { // CameraPane.Ymax = spoth; // } - info.g.drawArc(boundary.x, boundary.y, - boundary.width, boundary.height, 0, 360); + info.g.drawArc(boundary.x + info.DX, boundary.y + info.DY, + (int)(boundary.width * info.W), (int)(boundary.height * info.W), 0, 360); //info.g.drawArc(spot.x, spotw, spot.width/2, boundary.height/2, 0, 360); // if (CameraPane.Xmin > boundary.x) // { @@ -7967,6 +8079,10 @@ } transient ObjEditor editWindow; + transient ObjEditor manipWindow; + + transient boolean pinned; + transient ObjectUI objectUI; public static int povDepth = 0; private static cVector tbMin = new cVector(); -- Gitblit v1.6.2