From 1af7d3700724834e40ad8636bc9a56cdc3b19b15 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Sat, 27 Jul 2019 11:52:38 -0400 Subject: [PATCH] New layout icons --- Object3D.java | 187 +++++++++++++++++++++++++++++++--------------- 1 files changed, 126 insertions(+), 61 deletions(-) diff --git a/Object3D.java b/Object3D.java index 2ccc4c6..b4b1eb5 100644 --- a/Object3D.java +++ b/Object3D.java @@ -2567,7 +2567,8 @@ private static final int editSelf = 1; private static final int editChild = 2; - void drawEditHandles(ClickInfo info, int level) + void drawEditHandles(//ClickInfo info, + int level) { if (level == 0) { @@ -2575,7 +2576,8 @@ return; Object3D selectee; - for (java.util.Enumeration e = selection.elements(); e.hasMoreElements(); selectee.drawEditHandles(info, level + 1)) + for (java.util.Enumeration e = selection.elements(); e.hasMoreElements(); selectee.drawEditHandles(//info, + level + 1)) { selectee = (Object3D) e.nextElement(); } @@ -2583,19 +2585,22 @@ } else { //super. - drawEditHandles0(info, level + 1); + drawEditHandles0(//info, + level + 1); } } - boolean doEditClick(ClickInfo info, int level) + boolean doEditClick(//ClickInfo info, + int level) { doSomething = 0; if (level == 0) { - return doParentClick(info); + return doParentClick(); //info); } if (//super. - doEditClick0(info, level)) + doEditClick0(//info, + level)) { doSomething = 1; return true; @@ -2605,7 +2610,7 @@ } } - boolean doParentClick(ClickInfo info) + boolean doParentClick() //ClickInfo info) { if (selection == null) { @@ -2618,7 +2623,8 @@ for (java.util.Enumeration e = selection.elements(); e.hasMoreElements();) { Object3D selectee = (Object3D) e.nextElement(); - if (selectee.doEditClick(info, 1)) + if (selectee.doEditClick(//info, + 1)) { childToDrag = selectee; doSomething = 2; @@ -2630,13 +2636,15 @@ return retval; } - void doEditDrag(ClickInfo info, boolean opposite) + void doEditDrag(//ClickInfo clickInfo, + boolean opposite) { switch (doSomething) { case 1: // '\001' //super. - doEditDrag0(info, opposite); + doEditDrag0(//clickInfo, + opposite); break; case 2: // '\002' @@ -2649,11 +2657,13 @@ { //sel.hitSomething = childToDrag.hitSomething; //childToDrag.doEditDrag(info); - sel.doEditDrag(info, opposite); + sel.doEditDrag(//clickInfo, + opposite); } else { //super. - doEditDrag0(info, opposite); + doEditDrag0(//clickInfo, + opposite); } } break; @@ -2671,6 +2681,9 @@ { deselectAll(); } + + new Exception().printStackTrace(); + ClickInfo newInfo = new ClickInfo(); newInfo.flags = info.flags; newInfo.bounds = info.bounds; @@ -5775,12 +5788,23 @@ } } - void EmbedTextures() + void EmbedTextures(boolean embed) { if (blockloop) return; - CameraPane.EmbedTextures(texture); + //if (GetTextures() != null) + if (embed) + CameraPane.EmbedTextures(GetTextures()); + else + { + GetTextures().pigmentdata = null; + GetTextures().bumpdata = null; + GetTextures().pw = 0; + GetTextures().ph = 0; + GetTextures().bw = 0; + GetTextures().bh = 0; + } int nb = Size(); for (int i = 0; i < nb; i++) @@ -5791,7 +5815,7 @@ continue; blockloop = true; - child.EmbedTextures(); + child.EmbedTextures(embed); blockloop = false; } } @@ -5883,7 +5907,7 @@ support = support; //boolean usecalllists = 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); if (!usecalllists && bRep != null && bRep.displaylist > 0) { @@ -7287,20 +7311,23 @@ } } - protected void calcHotSpot(cVector in, ClickInfo info, Point outPt, Rectangle outRec) + static ClickInfo clickInfo = new ClickInfo(); + + protected void calcHotSpot(cVector in, //ClickInfo clickInfo, + Point outPt, Rectangle outRec) { - int hc = info.bounds.x + info.bounds.width / 2; - int vc = info.bounds.y + info.bounds.height / 2; - double[][] toscreen = info.toScreen; + int hc = clickInfo.bounds.x + clickInfo.bounds.width / 2; + int vc = clickInfo.bounds.y + clickInfo.bounds.height / 2; + double[][] toscreen = clickInfo.toScreen; if (toscreen == null) { - toscreen = new Camera(info.camera.viewCode).toScreen; + toscreen = new Camera(clickInfo.camera.viewCode).toScreen; } cVector vec = in; LA.xformPos(in, toscreen, in); //System.out.println("Distance = " + info.camera.Distance()); - vec.x *= 100 * info.camera.SCALE / info.camera.Distance(); - vec.y *= 100 * info.camera.SCALE / info.camera.Distance(); + vec.x *= 100 * clickInfo.camera.SCALE / clickInfo.camera.Distance(); + vec.y *= 100 * clickInfo.camera.SCALE / clickInfo.camera.Distance(); outPt.x = hc + (int) vec.x; outPt.y = vc - (int) vec.y; outRec.x = outPt.x - 3; @@ -7308,15 +7335,18 @@ outRec.width = outRec.height = 6; } - protected Rectangle calcHotSpot(cVector in, ClickInfo info) + protected Rectangle calcHotSpot(cVector in//, ClickInfo clickInfo + ) { Point pt = new Point(0, 0); Rectangle rec = new Rectangle(); - calcHotSpot(in, info, pt, rec); + calcHotSpot(in, //clickInfo, + pt, rec); return rec; } - void drawEditHandles0(ClickInfo info, int level) + void drawEditHandles0(//ClickInfo clickInfo, + int level) { if (level == 0) { @@ -7325,16 +7355,19 @@ { cVector origin = new cVector(); //LA.xformPos(origin, toParent, origin); - Rectangle spot = calcHotSpot(origin, info); + if (this.clickInfo == null) + this.clickInfo = new ClickInfo(); + + Rectangle spot = calcHotSpot(origin); //, clickInfo); Rectangle boundary = new Rectangle(); boundary.x = spot.x - 30; boundary.y = spot.y - 30; boundary.width = spot.width + 60; boundary.height = spot.height + 60; - info.g.setColor(Color.red); + clickInfo.g.setColor(Color.red); int spotw = spot.x + spot.width; int spoth = spot.y + spot.height; - info.g.fillRect(spot.x, spot.y, spot.width, spot.height); + clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height); // if (CameraPane.Xmin > spot.x) // { // CameraPane.Xmin = spot.x; @@ -7354,8 +7387,8 @@ spot.translate(32, 32); spotw = spot.x + spot.width; spoth = spot.y + spot.height; - info.g.setColor(Color.cyan); - info.g.fillRect(spot.x, spot.y, spot.width, spot.height); + clickInfo.g.setColor(Color.cyan); + clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height); // if (CameraPane.Xmin > spot.x) // { // CameraPane.Xmin = spot.x; @@ -7375,9 +7408,9 @@ // 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.yellow); - info.g.fillRect(spot.x, spot.y, spot.width, spot.height); - info.g.setColor(Color.green); + 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; @@ -7394,8 +7427,8 @@ // { // CameraPane.Ymax = spoth; // } - info.g.drawArc(boundary.x + info.DX, boundary.y + info.DY, - (int)(boundary.width * info.W), (int)(boundary.height * info.W), 0, 360); + 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); // if (CameraPane.Xmin > boundary.x) // { @@ -7417,7 +7450,8 @@ } } - boolean doEditClick0(ClickInfo info, int level) + boolean doEditClick0(//ClickInfo clickInfo, + int level) { if (level == 0) { @@ -7426,8 +7460,8 @@ boolean retval = false; - startX = info.x; - startY = info.y; + startX = clickInfo.x; + startY = clickInfo.y; hitSomething = -1; cVector origin = new cVector(); @@ -7437,22 +7471,51 @@ { centerPt = new Point(0, 0); } - calcHotSpot(origin, info, centerPt, spot); - if (spot.contains(info.x, info.y)) + calcHotSpot(origin, //info, + centerPt, spot); + if (spot.contains(clickInfo.x, clickInfo.y)) { hitSomething = hitCenter; retval = true; } spot.translate(32, 0); - if (spot.contains(info.x, info.y)) + if (spot.contains(clickInfo.x, clickInfo.y)) { hitSomething = hitRotate; retval = true; } spot.translate(0, 32); - if (spot.contains(info.x, info.y)) + 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 sign = 1; + if (hScale < 0) + { + sign = -1; + } + hScale = sign*Math.pow(sign*hScale, scale * 50); + if (hScale < 0.01) + { + //hScale = 0.01; + } + + double vScale = (double) (clickInfo.y /*- centerPt.y*/) / 32; + sign = 1; + if (vScale < 0) + { + sign = -1; + } + vScale = sign*Math.pow(sign*vScale, scale * 50); + if (vScale < 0.01) + { + //vScale = 0.01; + } + + clickInfo.scale = Math.sqrt(hScale*hScale + vScale*vScale); + retval = true; } @@ -7462,7 +7525,7 @@ } //System.out.println("info.modifiers = " + info.modifiers); - modified = (info.modifiers & CameraPane.SHIFT) != 0; // Was META + modified = (clickInfo.modifiers & CameraPane.SHIFT) != 0; // Was META //System.out.println("modified = " + modified); //new Exception().printStackTrace(); //viewCode = info.pane.renderCamera.viewCode; @@ -7490,7 +7553,8 @@ return true; } - void doEditDrag0(ClickInfo info, boolean opposite) + void doEditDrag0(//ClickInfo info, + boolean opposite) { if (hitSomething == 0) { @@ -7504,7 +7568,7 @@ //System.out.println("hitSomething = " + hitSomething); - double scale = 0.005f * info.camera.Distance(); + double scale = 0.005f * clickInfo.camera.Distance(); cVector xlate = new cVector(); //cVector xlate2 = new cVector(); @@ -7538,8 +7602,8 @@ toParent[3][i] = xlate.get(i); LA.matInvert(toParent, fromParent); */ - cVector delta = LA.newVector(0, 0, startY - info.y); - LA.xformDir(delta, new Camera(info.camera.viewCode).fromScreen, delta); + cVector delta = LA.newVector(0, 0, startY - clickInfo.y); + LA.xformDir(delta, new Camera(clickInfo.camera.viewCode).fromScreen, delta); LA.matCopy(startMat, toParent); LA.matTranslate(toParent, delta.x * scale, delta.y * scale, delta.z * scale); @@ -7548,7 +7612,7 @@ } else { //LA.xformDir(delta, info.camera.fromScreen, delta); - cVector up = new cVector(info.camera.up); + cVector up = new cVector(clickInfo.camera.up); cVector away = new cVector(); //cVector right2 = new cVector(); //LA.vecCross(up, cVector.Z, right); @@ -7565,19 +7629,19 @@ LA.xformDir(up, ClickInfo.matbuffer, up); // if (!CameraPane.LOCALTRANSFORM) LA.xformDir(up, Globals.theRenderer.RenderCamera().toScreen, up); - LA.xformDir(info.camera.away, ClickInfo.matbuffer, away); + LA.xformDir(clickInfo.camera.away, ClickInfo.matbuffer, away); // if (!CameraPane.LOCALTRANSFORM) 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); + cVector delta = LA.newVector(clickInfo.x - startX, startY - clickInfo.y, 0); //System.out.println("DELTA0 = " + delta); //System.out.println("AWAY = " + info.camera.away); //System.out.println("UP = " + info.camera.up); if (away.z > 0) { - if (info.camera.up.x == 0) // LA.vecDot(right, right2)<0) + if (clickInfo.camera.up.x == 0) // LA.vecDot(right, right2)<0) { delta.x = -delta.x; } else @@ -7592,7 +7656,7 @@ //System.out.println("DELTA1 = " + delta); LA.xformDir(delta, ClickInfo.matbuffer, delta); //System.out.println("DELTA2 = " + delta); - LA.xformDir(delta, new Camera(info.camera.viewCode).fromScreen, delta); + LA.xformDir(delta, new Camera(clickInfo.camera.viewCode).fromScreen, delta); LA.matCopy(startMat, toParent); //System.out.println("DELTA3 = " + delta); LA.matTranslate(toParent, delta.x * scale, delta.y * scale, delta.z * scale); @@ -7602,8 +7666,8 @@ break; case hitRotate: // rotate - int dx = info.x - centerPt.x; - int dy = -(info.y - centerPt.y); + int dx = clickInfo.x - centerPt.x; + int dy = -(clickInfo.y - centerPt.y); double angle = (double) Math.atan2(dx, dy); angle = -(1.570796 - angle); @@ -7626,7 +7690,7 @@ } /**/ - switch (info.pane.RenderCamera().viewCode) + switch (clickInfo.pane.RenderCamera().viewCode) { case 1: // '\001' LA.matZRotate(toParent, angle); @@ -7653,7 +7717,7 @@ break; case hitScale: // scale - double hScale = (double) (info.x - centerPt.x) / 32; + double hScale = (double) (clickInfo.x /*- centerPt.x*/) / 32; double sign = 1; if (hScale < 0) { @@ -7665,7 +7729,7 @@ //hScale = 0.01; } - double vScale = (double) (info.y - centerPt.y) / 32; + double vScale = (double) (clickInfo.y /*- centerPt.y*/) / 32; sign = 1; if (vScale < 0) { @@ -7676,6 +7740,7 @@ { //vScale = 0.01; } + LA.matCopy(startMat, toParent); /**/ for (int i = 0; i < 3; i++) @@ -7685,14 +7750,14 @@ } /**/ - double totalScale = Math.sqrt(hScale*hScale + vScale*vScale) / Math.sqrt(2); + double totalScale = Math.sqrt(hScale*hScale + vScale*vScale) / clickInfo.scale; if (totalScale < 0.01) { totalScale = 0.01; } - switch (info.pane.RenderCamera().viewCode) + switch (clickInfo.pane.RenderCamera().viewCode) { case 3: // '\001' if (modified || opposite) @@ -7759,7 +7824,7 @@ } // NEW ... - info.pane.repaint(); + clickInfo.pane.repaint(); } boolean overflow = false; -- Gitblit v1.6.2