From 64e20f390e4b8e58bd0006dde8fa10fba1dac1d5 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Fri, 16 Aug 2019 13:25:19 -0400 Subject: [PATCH] Fix box and VR keys. --- Object3D.java | 169 +++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 117 insertions(+), 52 deletions(-) diff --git a/Object3D.java b/Object3D.java index b4b1eb5..054b3c1 100644 --- a/Object3D.java +++ b/Object3D.java @@ -22,6 +22,7 @@ //static final long serialVersionUID = -607422624994562685L; static final long serialVersionUID = 5022536242724664900L; + // Use GetUUID for backward compatibility with null. private UUID uuid = UUID.randomUUID(); // TEMPORARY for mocap undo. No need to be transient. @@ -29,7 +30,10 @@ Object3D saveskeleton; // - byte[] versions[]; + String skyboxname; + String skyboxext; + + Object3D versionlist[]; int versionindex = -1; ScriptNode scriptnode; @@ -219,7 +223,7 @@ // o.bRep.support = null; // } o.selection = this.selection; - o.versions = this.versions; + o.versionlist = this.versionlist; o.versionindex = this.versionindex; if (this.support != null) @@ -242,6 +246,29 @@ // this.support = null; // this.fileparent = null; } + +// Object3D GetObject(java.util.UUID uuid) +// { +// if (this.uuid.equals(uuid)) +// return this; +// +// if (blockloop) +// return null; +// +// blockloop = true; +// +// for (int i=0; i<Size(); i++) +// { +// Object3D o = get(i).GetObject(uuid); +// +// if (o != null) +// return o; +// } +// +// blockloop = false; +// +// return null; +// } void RestoreBigData(java.util.Hashtable<java.util.UUID, Object3D> hashtable) { @@ -277,7 +304,7 @@ this.selection = o.selection; - this.versions = o.versions; + this.versionlist = o.versionlist; this.versionindex = o.versionindex; // July 2019 if (this.bRep != null) // this.bRep.support = o.transientrep; @@ -1011,6 +1038,9 @@ if (material == null || material.multiply) return true; + + if (projectedVertices != null && projectedVertices.length > 2 && projectedVertices[2].y >= 10000) + return false; // Transparent objects are dynamic because we have to sort the triangles. return material.opacity > 0.99; @@ -2438,6 +2468,11 @@ else { //((ObjEditor)editWindow).SetupUI2(null); + if (objectUI != null) + ((ObjEditor)objectUI).pinButton.setSelected(pinned); + else + //new Exception().printStackTrace(); + System.err.println("objectUI is null"); } } @@ -5539,6 +5574,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: @@ -5551,7 +5591,7 @@ if (split.length == 0) { - return ""; + return fullname.pigment = ""; } if (split.length <= 2) @@ -5559,22 +5599,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: @@ -5586,12 +5631,12 @@ if (split.length == 0) { - return ""; + return fullname.bump = ""; } if (split.length == 1) { - return ""; + return fullname.bump = ""; } if (split.length == 2) @@ -5599,16 +5644,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() @@ -5691,6 +5736,9 @@ texname = ""; GetTextures().name = texname + ":" + GetBump(GetTextures()); + + GetTextures().pigment = null; + Touch(); } @@ -5763,6 +5811,8 @@ texname = ""; GetTextures().name = Object3D.GetPigment(GetTextures()) + ":" + texname; + + GetTextures().bump = null; Touch(); } @@ -5906,8 +5956,10 @@ if (support != null) support = support; - //boolean usecalllists = 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); + boolean usecalllists = !IsLive() && 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. if (!usecalllists && bRep != null && bRep.displaylist > 0) { @@ -5917,8 +5969,9 @@ // usecalllists &= !(parent instanceof RandomNode); // usecalllists = false; - if (GetBRep() != null) - usecalllists = usecalllists; + if (display.DrawMode() == display.SHADOW) + //GetBRep() != null) + usecalllists = !!usecalllists; //System.out.println("draw " + this); //new Exception().printStackTrace(); @@ -5940,7 +5993,7 @@ if (!(this instanceof Composite)) touched = false; //if (displaylist == -1 && usecalllists) - if ((bRep != null && bRep.displaylist <= 0) && usecalllists) // june 2013 + if (bRep.displaylist <= 0 && usecalllists) // && display.DrawMode() == display.DEFAULT) // june 2013 { bRep.displaylist = display.GenList(); assert(bRep.displaylist != 0); @@ -5951,7 +6004,7 @@ //System.out.println("\tnew list " + list); //gl.glDrawBuffer(gl.GL_NONE); - if (usecalllists) + if (usecalllists && bRep.displaylist > 0) { // System.err.println("new list " + bRep.displaylist + " for " + this); display.NewList(bRep.displaylist); @@ -5960,7 +6013,7 @@ CallList(display, root, selected, blocked); // compiled = true; - if (usecalllists) + if (usecalllists && bRep.displaylist > 0) { // System.err.println("end list " + bRep.displaylist + " for " + this); display.EndList(); @@ -7364,7 +7417,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); @@ -7384,7 +7437,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); @@ -7405,28 +7480,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); @@ -7485,12 +7539,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) { @@ -7502,7 +7558,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) { @@ -7717,7 +7773,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) { @@ -7729,7 +7785,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) { @@ -7762,21 +7818,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); @@ -7786,8 +7848,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); -- Gitblit v1.6.2