From 6266c8a4b2485b29a7d5bcb217460d7aad3e1c4a Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Sun, 25 Aug 2019 20:58:10 -0400 Subject: [PATCH] Proto version slider. --- Object3D.java | 331 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 272 insertions(+), 59 deletions(-) diff --git a/Object3D.java b/Object3D.java index 4b58659..9d52cb0 100644 --- a/Object3D.java +++ b/Object3D.java @@ -36,8 +36,23 @@ Object3D versionlist[]; int versionindex = -1; + java.util.Hashtable<java.util.UUID, Object3D> versiontable; // = new java.util.Hashtable<java.util.UUID, Object3D>(); + ScriptNode scriptnode; + int VersionCount() + { + int count = 0; + + for (int i = versionlist.length; --i >= 0;) + { + if (versionlist[i] != null) + count++; + } + + return count; + } + void InitOthers() { if (projectedVertices == null || projectedVertices.length <= 2) @@ -269,6 +284,50 @@ // // return null; // } + + transient boolean tag; + + void TagObjects(Object3D o, boolean tag) + { + if (blockloop) + return; + + o.tag = tag; + + if (o == this) + return; + + blockloop = true; + + for (int i=0; i<Size(); i++) + { + get(i).TagObjects(o, tag); + } + + blockloop = false; + } + + boolean HasTags() + { + if (blockloop) + return false; + + blockloop = true; + + boolean hasTags = false; + + for (int i=0; i<Size(); i++) + { + hasTags |= get(i).tag || get(i).HasTags(); + + if (hasTags) + break; + } + + blockloop = false; + + return hasTags; + } void RestoreBigData(java.util.Hashtable<java.util.UUID, Object3D> hashtable) { @@ -522,11 +581,11 @@ } } - int memorysize; + transient int memorysize; // needs to be transient, dunno why int MemorySize() { - if (true) // memorysize == 0) + if (memorysize == 0) { try { @@ -641,7 +700,7 @@ { if (maxcount != 1) { - new Exception().printStackTrace(); + //new Exception().printStackTrace(); } toParentMarked = LA.newMatrix(); @@ -2323,11 +2382,6 @@ InitOthers(); - if (this instanceof Camera) - { - material.shift = 90; - } - material.multiply = multiply; if (multiply) @@ -2468,6 +2522,11 @@ else { //((ObjEditor)editWindow).SetupUI2(null); + if (objectUI != null) + ((ObjEditor)objectUI).pinButton.setSelected(pinned); + else + //new Exception().printStackTrace(); + System.err.println("objectUI is null"); } } @@ -3218,6 +3277,93 @@ blockloop = false; } + public void ResetTransform(int mask) + { + Object3D obj = this; + + if (mask == -1) + { + if (obj instanceof Camera) // jan 2014 + { + LA.matIdentity(obj.toParent); + LA.matIdentity(obj.fromParent); + } + else + { + obj.toParent = null; // jan 2014 LA.matIdentity(obj.toParent); + obj.fromParent = null; // LA.matIdentity(obj.fromParent); + } + return; + } + + if ((mask&2) != 0) // Scale/rotation + { + obj.toParent[0][0] = obj.toParent[1][1] = obj.toParent[2][2] = 1; + obj.toParent[0][1] = obj.toParent[1][0] = obj.toParent[2][0] = 0; + obj.toParent[0][2] = obj.toParent[1][2] = obj.toParent[2][1] = 0; + obj.fromParent[0][0] = obj.fromParent[1][1] = obj.fromParent[2][2] = 1; + obj.fromParent[0][1] = obj.fromParent[1][0] = obj.fromParent[2][0] = 0; + obj.fromParent[0][2] = obj.fromParent[1][2] = obj.fromParent[2][1] = 0; + } + if ((mask&1) != 0) // Translation + { + if (obj.toParent != null) + { + obj.toParent[3][0] = obj.toParent[3][1] = obj.toParent[3][2] = 0; + obj.fromParent[3][0] = obj.fromParent[3][1] = obj.fromParent[3][2] = 0; + } + } + } + + public void TextureRatioTransform(int axis) + { + cTexture tex = GetTextures(); + + com.sun.opengl.util.texture.TextureData texturedata = null; + + try + { + texturedata = Globals.theRenderer.GetTextureData(tex, false, texres); + } + catch (Exception e) + { + System.err.println("FAIL TextureRatio: " + this); + } + + LA.matIdentity(Object3D.mat); + Object3D.mat[axis][axis] = (double)texturedata.getWidth() / texturedata.getHeight(); + + if (toParent == null) + { + toParent = LA.newMatrix(); + fromParent = LA.newMatrix(); + } + + ResetTransform(2); + + LA.matConcat(Object3D.mat, fromParent, fromParent); + LA.matInvert(fromParent, toParent); + } + + void TextureRatio(int axis) + { + if (blockloop) + return; + + blockloop = true; + + TextureRatioTransform(axis); + + for (int i=Size(); --i>=0;) + { + Object3D v = get(i); + + v.TextureRatio(axis); + } + + blockloop = false; + } + void TransformChildren() { if (toParent != null) @@ -3571,15 +3717,47 @@ void ClearMaterials() { + if (blockloop) + return; + + blockloop = true; + ClearMaterial(); - for (int i = 0; i < size(); i++) + for (int i = 0; i < Size(); i++) { - Object3D child = (Object3D) reserve(i); + Object3D child = (Object3D) get(i); if (child == null) continue; child.ClearMaterials(); - release(i); } + + blockloop = false; + } + + void ClearVersionList() + { + this.versionlist = null; + this.versionindex = -1; + this.versiontable = null; + } + + void ClearVersions() + { + if (blockloop) + return; + + blockloop = true; + + ClearVersionList(); + for (int i = 0; i < Size(); i++) + { + Object3D child = (Object3D) get(i); + if (child == null) + continue; + child.ClearVersions(); + } + + blockloop = false; } void FlipV(boolean flip) @@ -5569,6 +5747,11 @@ if (fullname == null) return ""; + if (fullname.pigment != null) + { + return fullname.pigment; + } + // System.out.println("Fullname = " + fullname); // Does not work on Windows due to C: @@ -5581,7 +5764,7 @@ if (split.length == 0) { - return ""; + return fullname.pigment = ""; } if (split.length <= 2) @@ -5589,22 +5772,27 @@ if (fullname.name.endsWith(":")) { // Windows - return fullname.name.substring(0, fullname.name.length()-1); + return fullname.pigment = fullname.name.substring(0, fullname.name.length()-1); } - return split[0]; + return fullname.pigment = split[0]; } // Windows assert(split.length == 4); - return split[0] + ":" + split[1]; + return fullname.pigment = split[0] + ":" + split[1]; } static String GetBump(cTexture fullname) { if (fullname == null) return ""; + + if (fullname.bump != null) + { + return fullname.bump; + } // System.out.println("Fullname = " + fullname); // Does not work on Windows due to C: @@ -5616,12 +5804,12 @@ if (split.length == 0) { - return ""; + return fullname.bump = ""; } if (split.length == 1) { - return ""; + return fullname.bump = ""; } if (split.length == 2) @@ -5629,16 +5817,16 @@ if (fullname.name.endsWith(":")) { // Windows - return ""; + return fullname.bump = ""; } - return split[1]; + return fullname.bump = split[1]; } // Windows assert(split.length == 4); - return split[2] + ":" + split[3]; + return fullname.bump = split[2] + ":" + split[3]; } String GetPigmentTexture() @@ -5721,6 +5909,9 @@ texname = ""; GetTextures().name = texname + ":" + GetBump(GetTextures()); + + GetTextures().pigment = null; + Touch(); } @@ -5793,6 +5984,8 @@ texname = ""; GetTextures().name = Object3D.GetPigment(GetTextures()) + ":" + texname; + + GetTextures().bump = null; Touch(); } @@ -5876,6 +6069,11 @@ return parent.IsLive(); } + boolean IsDynamic() + { + return live && bRep != null; + } + void Draw(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked) { Invariants(); // june 2013 @@ -5936,7 +6134,8 @@ if (support != null) support = support; - boolean usecalllists = !IsLive() && IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null || !link2master); // !(this instanceof cSpring) && !(this instanceof BezierPatch); + boolean usecalllists = !IsDynamic() && + IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null || !link2master); // !(this instanceof cSpring) && !(this instanceof BezierPatch); //boolean usecalllists = false; //!IsLive(); // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch); //usecalllists &= display.DrawMode() == display.DEFAULT; // Don't compute list in shadow pass. @@ -7397,7 +7596,7 @@ boundary.y = spot.y - 30; boundary.width = spot.width + 60; boundary.height = spot.height + 60; - clickInfo.g.setColor(Color.red); + clickInfo.g.setColor(Color.white); int spotw = spot.x + spot.width; int spoth = spot.y + spot.height; clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height); @@ -7417,7 +7616,29 @@ // { // CameraPane.Ymax = spoth; // } - spot.translate(32, 32); +// 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(32, 0); + clickInfo.g.setColor(Color.yellow); + clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height); + + spot.translate(32, 64); spotw = spot.x + spot.width; spoth = spot.y + spot.height; clickInfo.g.setColor(Color.cyan); @@ -7438,28 +7659,7 @@ // { // 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); - clickInfo.g.setColor(Color.yellow); - clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height); clickInfo.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; -// } clickInfo.g.drawArc(boundary.x + clickInfo.DX, boundary.y + clickInfo.DY, (int)(boundary.width * clickInfo.W), (int)(boundary.height * clickInfo.W), 0, 360); //info.g.drawArc(spot.x, spotw, spot.width/2, boundary.height/2, 0, 360); @@ -7518,12 +7718,14 @@ retval = true; } spot.translate(0, 32); + spot.translate(32, 0); + spot.translate(0, 32); if (spot.contains(clickInfo.x, clickInfo.y)) { hitSomething = hitScale; double scale = 0.005f * clickInfo.camera.Distance(); - double hScale = (double) (clickInfo.x - centerPt.x) / 32; + double hScale = (double) (clickInfo.x - centerPt.x) / 64; double sign = 1; if (hScale < 0) { @@ -7535,7 +7737,7 @@ //hScale = 0.01; } - double vScale = (double) (clickInfo.y - centerPt.y) / 32; + double vScale = (double) (clickInfo.y - centerPt.y) / 64; sign = 1; if (vScale < 0) { @@ -7615,7 +7817,9 @@ scale *= 0.05f * Globals.theRenderer.RenderCamera().Distance(); - if (modified || opposite) + // Modified could snap + if (//modified || + opposite) { //assert(false); /* @@ -7709,7 +7913,7 @@ if (modified) { - // Rotate 90 degrees + // Rotate 45 degrees angle /= (Math.PI / 4); angle = Math.floor(angle + 0.5); angle *= (Math.PI / 4); @@ -7750,7 +7954,7 @@ break; case hitScale: // scale - double hScale = (double) (clickInfo.x - centerPt.x) / 32; + double hScale = (double) (clickInfo.x - centerPt.x) / 64; double sign = 1; if (hScale < 0) { @@ -7762,7 +7966,7 @@ //hScale = 0.01; } - double vScale = (double) (clickInfo.y - centerPt.y) / 32; + double vScale = (double) (clickInfo.y - centerPt.y) / 64; sign = 1; if (vScale < 0) { @@ -7795,21 +7999,27 @@ case 3: // '\001' if (modified || opposite) { + if (modified) // && opposite) + LA.matScale(toParent, totalScale, totalScale, totalScale); + else //LA.matScale(toParent, 1, hScale, vScale); - LA.matScale(toParent, totalScale, 1, 1); + LA.matScale(toParent, totalScale, 1, 1); } // vScale, 1); else { // EXCEPTION! - LA.matScale(toParent, totalScale, totalScale, totalScale); + LA.matScale(toParent, 1, totalScale, totalScale); } // vScale, 1); break; case 2: // '\002' if (modified || opposite) { - //LA.matScale(toParent, hScale, 1, vScale); - LA.matScale(toParent, 1, totalScale, 1); + if (modified) // && opposite) + LA.matScale(toParent, totalScale, totalScale, totalScale); + else + //LA.matScale(toParent, hScale, 1, vScale); + LA.matScale(toParent, 1, totalScale, 1); } else { LA.matScale(toParent, totalScale, 1, totalScale); @@ -7819,8 +8029,11 @@ case 1: // '\003' if (modified || opposite) { - //LA.matScale(toParent, hScale, vScale, 1); - LA.matScale(toParent, 1, 1, totalScale); + if (modified) // && opposite) + LA.matScale(toParent, totalScale, totalScale, totalScale); + else + //LA.matScale(toParent, hScale, vScale, 1); + LA.matScale(toParent, 1, 1, totalScale); } else { LA.matScale(toParent, totalScale, totalScale, 1); @@ -7968,10 +8181,10 @@ } // + super.toString(); //return name + " (" + (SizeOf.deepSizeOf(this)/1024) + "K) " + this.getClass().getName(); - if (!Globals.ADVANCED) - return objname; +// if (!Globals.ADVANCED) +// return objname; - return objname + " " + System.identityHashCode(this); + return objname + " " + System.identityHashCode(this); // + GetUUID() } public int hashCode() -- Gitblit v1.6.2