From 5140c320d8addf4bd8dcaa7f350b6accdc4ffbaf Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Tue, 23 Jul 2019 19:42:36 -0400 Subject: [PATCH] ClickInfo fixed. --- Torus.java | 48 +++--- Cone.java | 44 +++-- BezierSurface.java | 26 ++- CameraPane.java | 88 +++++++----- BezierPatch.java | 26 ++- Object3D.java | 168 +++++++++++++++-------- ClickInfo.java | 3 Composite.java | 2 Spline.java | 13 + 9 files changed, 255 insertions(+), 163 deletions(-) diff --git a/BezierPatch.java b/BezierPatch.java index 294bdec..7686627 100644 --- a/BezierPatch.java +++ b/BezierPatch.java @@ -139,39 +139,43 @@ Point prev = new Point(0, 0); Point curr = new Point(0, 0); Rectangle dummy = new Rectangle(); - calcHotSpot(sample, info, prev, dummy); + calcHotSpot(sample, //info, + prev, dummy); sample = ((Sphere)ctrlPnts.get(i)).getCenter(); - calcHotSpot(sample, info, curr, dummy); + calcHotSpot(sample, //info, + curr, dummy); info.g.drawLine(prev.x, prev.y, curr.x, curr.y); prev.x = curr.x; prev.y = curr.y; } } - void drawEditHandles(ClickInfo info, int level) + void drawEditHandles(//ClickInfo info, + int level) { - info.g.setColor(Color.red); + clickInfo.g.setColor(Color.red); int count = ctrlPnts.size(); for (int i=0; i < count; i++) { cVector p = ((Sphere)ctrlPnts.elementAt(i)).getCenter(); - Rectangle spot = calcHotSpot(p, info); - info.g.fillRect(spot.x, spot.y, spot.width, spot.height); + Rectangle spot = calcHotSpot(p); //, info); + clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height); } } - boolean doEditClick(ClickInfo info, int level) + boolean doEditClick(//ClickInfo info, + int level) { - startX = info.x; - startY = info.y; + startX = clickInfo.x; + startY = clickInfo.y; int nPoints = ctrlPnts.size(); hitSomething = false; for (int i=0; i < nPoints; i++) { cVector p = ((Sphere)ctrlPnts.elementAt(i)).getCenter(); - Rectangle r = calcHotSpot(p, info); - if (r.contains(info.x, info.y)) + Rectangle r = calcHotSpot(p); //, clickInfo); + if (r.contains(clickInfo.x, clickInfo.y)) { hitSomething = true; hitIndex = i; diff --git a/BezierSurface.java b/BezierSurface.java index 7cd1fca..da75a3a 100644 --- a/BezierSurface.java +++ b/BezierSurface.java @@ -117,39 +117,43 @@ Point prev = new Point(0, 0); Point curr = new Point(0, 0); Rectangle dummy = new Rectangle(); - calcHotSpot(sample, info, prev, dummy); + calcHotSpot(sample, //info, + prev, dummy); sample = ((Sphere)ctrlPnts.get(i)).getCenter(); - calcHotSpot(sample, info, curr, dummy); + calcHotSpot(sample, //info, + curr, dummy); info.g.drawLine(prev.x, prev.y, curr.x, curr.y); prev.x = curr.x; prev.y = curr.y; } } - void drawEditHandles(ClickInfo info, int level) + void drawEditHandles(//ClickInfo info, + int level) { - info.g.setColor(Color.red); + clickInfo.g.setColor(Color.red); int count = ctrlPnts.size(); for (int i=0; i < count; i++) { cVector p = ((Sphere)ctrlPnts.elementAt(i)).getCenter(); - Rectangle spot = calcHotSpot(p, info); - info.g.fillRect(spot.x, spot.y, spot.width, spot.height); + Rectangle spot = calcHotSpot(p); //, info); + clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height); } } - boolean doEditClick(ClickInfo info, int level) + boolean doEditClick(//ClickInfo info, + int level) { - startX = info.x; - startY = info.y; + startX = clickInfo.x; + startY = clickInfo.y; int nPoints = ctrlPnts.size(); hitSomething = false; for (int i=0; i < nPoints; i++) { cVector p = ((Sphere)ctrlPnts.elementAt(i)).getCenter(); - Rectangle r = calcHotSpot(p, info); - if (r.contains(info.x, info.y)) + Rectangle r = calcHotSpot(p); //, info); + if (r.contains(clickInfo.x, clickInfo.y)) { hitSomething = true; hitIndex = i; diff --git a/CameraPane.java b/CameraPane.java index 69d4882..e4c20f1 100644 --- a/CameraPane.java +++ b/CameraPane.java @@ -14255,14 +14255,15 @@ drag = false; //System.out.println("Mouse DOWN"); editObj = false; - ClickInfo info = new ClickInfo(); - info.bounds.setBounds(0, 0, (int) (getBounds().width * zoom), (int) (getBounds().height * zoom)); - info.pane = this; - info.camera = renderCamera; - info.x = x; - info.y = y; - info.modifiers = modifiersex; - editObj = object.doEditClick(info, 0); + //ClickInfo info = new ClickInfo(); + object.clickInfo.bounds.setBounds(0, 0, (int) (getBounds().width * zoom), (int) (getBounds().height * zoom)); + object.clickInfo.pane = this; + object.clickInfo.camera = renderCamera; + object.clickInfo.x = x; + object.clickInfo.y = y; + object.clickInfo.modifiers = modifiersex; + editObj = object.doEditClick(//info, + 0); if (!editObj) { hasMarquee = true; @@ -14662,15 +14663,16 @@ if (editObj) { drag = true; - ClickInfo info = new ClickInfo(); - info.bounds.setBounds(0, 0, + //ClickInfo info = new ClickInfo(); + object.clickInfo.bounds.setBounds(0, 0, (int) (getBounds().width * zoom), (int) (getBounds().height * zoom)); - info.pane = this; - info.camera = renderCamera; - info.x = x; - info.y = y; - object.GetWindow().copy - .doEditDrag(info, (modifiers & MouseEvent.BUTTON3_MASK) != 0); + object.clickInfo.pane = this; + object.clickInfo.camera = renderCamera; + object.clickInfo.x = x; + object.clickInfo.y = y; + object //.GetWindow().copy + .doEditDrag(//info, + (modifiers & MouseEvent.BUTTON3_MASK) != 0); } else { if (x < startX) @@ -14819,24 +14821,27 @@ } } +// ClickInfo clickInfo = new ClickInfo(); + public void mouseMoved(MouseEvent e) { //System.out.println("mouseMoved: " + e); if (isRenderer) return; - ClickInfo ci = new ClickInfo(); - ci.x = e.getX(); - ci.y = e.getY(); - ci.modifiers = e.getModifiersEx(); - ci.bounds.setBounds(0, 0, (int) (getBounds().width * zoom), (int) (getBounds().height * zoom)); - ci.pane = this; - ci.camera = renderCamera; + // Mouse cursor feedback + object.clickInfo.x = e.getX(); + object.clickInfo.y = e.getY(); + object.clickInfo.modifiers = e.getModifiersEx(); + object.clickInfo.bounds.setBounds(0, 0, (int) (getBounds().width * zoom), (int) (getBounds().height * zoom)); + object.clickInfo.pane = this; + object.clickInfo.camera = renderCamera; if (!isRenderer) { //ObjEditor editWindow = object.editWindow; //Object3D copy = editWindow.copy; - if (object.doEditClick(ci, 0)) + if (object.doEditClick(//clickInfo, + 0)) { setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } else @@ -15862,8 +15867,6 @@ int width = getBounds().width; int height = getBounds().height; - ClickInfo info = new ClickInfo(); - info.bounds.setBounds(0, 0, (int) (width * zoom), (int) (height * zoom)); //Image img = CreateImage(width, height); //System.out.println("width = " + width + "; height = " + height + "\n"); @@ -15940,31 +15943,37 @@ } if (object != null && !hasMarquee) { + if (object.clickInfo == null) + object.clickInfo = new ClickInfo(); + ClickInfo info = object.clickInfo; + //ClickInfo info = new ClickInfo(); + info.bounds.setBounds(0, 0, (int) (width * zoom), (int) (height * zoom)); + if (isRenderer) { - info.flags++; + object.clickInfo.flags++; double frameAspect = (double) width / (double) height; if (frameAspect > renderCamera.aspect) { int desired = (int) ((double) height * renderCamera.aspect); - info.bounds.width -= width - desired; - info.bounds.x += (width - desired) / 2; + object.clickInfo.bounds.width -= width - desired; + object.clickInfo.bounds.x += (width - desired) / 2; } else { int desired = (int) ((double) width / renderCamera.aspect); - info.bounds.height -= height - desired; - info.bounds.y += (height - desired) / 2; + object.clickInfo.bounds.height -= height - desired; + object.clickInfo.bounds.y += (height - desired) / 2; } } - info.g = gr; - info.camera = renderCamera; + object.clickInfo.g = gr; + object.clickInfo.camera = renderCamera; /* // Memory intensive (brep.verticescopy) if (!(object instanceof Composite)) object.draw(info, 0, false); // SLOW : */ - if (!isRenderer) + if (!isRenderer) // && drag) { Grafreed.Assert(object != null); Grafreed.Assert(object.selection != null); @@ -15972,9 +15981,9 @@ { int hitSomething = object.selection.get(0).hitSomething; - info.DX = 0; - info.DY = 0; - info.W = 1; + object.clickInfo.DX = 0; + object.clickInfo.DY = 0; + object.clickInfo.W = 1; if (hitSomething == Object3D.hitCenter) { info.DX = X; @@ -15986,7 +15995,8 @@ info.DY -= info.bounds.height/2; } - object.drawEditHandles(info, 0); + object.drawEditHandles(//info, + 0); if (drag && (X != 0 || Y != 0)) { @@ -15999,7 +16009,7 @@ gr.drawLine(X, Y, info.bounds.width/2, info.bounds.height/2); break; case Object3D.hitScale: gr.setColor(Color.cyan); - gr.drawLine(X, Y, info.bounds.width/2, info.bounds.height/2); + gr.drawLine(X, Y, 0, 0); break; } diff --git a/ClickInfo.java b/ClickInfo.java index 0377695..f85414c 100644 --- a/ClickInfo.java +++ b/ClickInfo.java @@ -12,6 +12,7 @@ ClickInfo() { bounds = new Rectangle(); + System.out.println("CLICKINFO"); } static final int kCamera = 1; @@ -28,6 +29,8 @@ Graphics g; int DX, DY; float W = 1; + + double scale; // Distance from clicked point to origin static double matbuffer[][] = new double[4][4]; } diff --git a/Composite.java b/Composite.java index 9244c31..63b89d4 100644 --- a/Composite.java +++ b/Composite.java @@ -790,6 +790,8 @@ void draw(ClickInfo info, int level, boolean select) { + new Exception().printStackTrace(); + ClickInfo newInfo = new ClickInfo(); newInfo.flags = info.flags; newInfo.bounds = info.bounds; diff --git a/Cone.java b/Cone.java index 938fe77..63892ae 100644 --- a/Cone.java +++ b/Cone.java @@ -2,7 +2,7 @@ class Cone extends Biparam implements java.io.Serializable { - //static final long serialVersionUID = -679715043452968126L; + static final long serialVersionUID = -2558098774090336324L; // -679715043452968126L; Cone() { @@ -263,9 +263,11 @@ editWindow = objectUI.GetEditor(); } - void drawEditHandles(ClickInfo info, int level) + void drawEditHandles(//ClickInfo info, + int level) { - super.drawEditHandles(info, level); + super.drawEditHandles(//info, + level); if (level == 1) { return; @@ -273,37 +275,39 @@ { cVector temp = new cVector(); LA.xformPos(base, toParent, temp); - Rectangle baseSpot = calcHotSpot(temp, info); + Rectangle baseSpot = calcHotSpot(temp); //, info); LA.xformPos(apex, toParent, temp); - Rectangle apexSpot = calcHotSpot(temp, info); - info.g.setColor(Color.green); - info.g.fillRect(baseSpot.x, baseSpot.y, baseSpot.width, baseSpot.height); - info.g.fillRect(apexSpot.x, apexSpot.y, apexSpot.width, apexSpot.height); + Rectangle apexSpot = calcHotSpot(temp); //, info); + clickInfo.g.setColor(Color.green); + clickInfo.g.fillRect(baseSpot.x, baseSpot.y, baseSpot.width, baseSpot.height); + clickInfo.g.fillRect(apexSpot.x, apexSpot.y, apexSpot.width, apexSpot.height); return; } } - boolean doEditClick(ClickInfo info, int level) + boolean doEditClick(//ClickInfo info, + int level) { //if (level == 0) //return false; hitSomething = 0; - if (super.doEditClick(info, level)) + if (super.doEditClick(//info, + level)) { hitSomething = 1; return true; } cVector temp = new cVector(); LA.xformPos(base, toParent, temp); - Rectangle baseSpot = calcHotSpot(temp, info); + Rectangle baseSpot = calcHotSpot(temp); //, info); LA.xformPos(apex, toParent, temp); - Rectangle apexSpot = calcHotSpot(temp, info); - if (baseSpot.contains(info.x, info.y)) + Rectangle apexSpot = calcHotSpot(temp); //, info); + if (baseSpot.contains(clickInfo.x, clickInfo.y)) { hitSomething = 2; startRad = baseRadius; } else - if (apexSpot.contains(info.x, info.y)) + if (apexSpot.contains(clickInfo.x, clickInfo.y)) { hitSomething = 3; startRad = apexRadius; @@ -311,20 +315,22 @@ { return false; } - startX = info.x; + startX = clickInfo.x; return true; } - void doEditDrag(ClickInfo info, boolean opposite) + void doEditDrag(//ClickInfo info, + boolean opposite) { if (hitSomething == 0) return; if (hitSomething == 1) { - super.doEditDrag(info, opposite); + super.doEditDrag(//info, + opposite); return; } - double deltaR = info.x - startX; + double deltaR = clickInfo.x - startX; double newRad = startRad + deltaR; if (newRad < 0) newRad = 0; @@ -333,7 +339,7 @@ else apexRadius = newRad; recalculate(); - info.pane.repaint(); + clickInfo.pane.repaint(); } cVector base; diff --git a/Object3D.java b/Object3D.java index 1b9b4c0..95b3484 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; @@ -7298,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; @@ -7319,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) { @@ -7336,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; @@ -7365,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; @@ -7386,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; @@ -7405,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) // { @@ -7428,7 +7450,8 @@ } } - boolean doEditClick0(ClickInfo info, int level) + boolean doEditClick0(//ClickInfo clickInfo, + int level) { if (level == 0) { @@ -7437,8 +7460,8 @@ boolean retval = false; - startX = info.x; - startY = info.y; + startX = clickInfo.x; + startY = clickInfo.y; hitSomething = -1; cVector origin = new cVector(); @@ -7448,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; } @@ -7473,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; @@ -7501,7 +7553,8 @@ return true; } - void doEditDrag0(ClickInfo info, boolean opposite) + void doEditDrag0(//ClickInfo info, + boolean opposite) { if (hitSomething == 0) { @@ -7515,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(); @@ -7549,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); @@ -7559,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); @@ -7576,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 @@ -7603,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); @@ -7613,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); @@ -7637,7 +7690,7 @@ } /**/ - switch (info.pane.RenderCamera().viewCode) + switch (clickInfo.pane.RenderCamera().viewCode) { case 1: // '\001' LA.matZRotate(toParent, angle); @@ -7664,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) { @@ -7676,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) { @@ -7687,6 +7740,7 @@ { //vScale = 0.01; } + LA.matCopy(startMat, toParent); /**/ for (int i = 0; i < 3; i++) @@ -7696,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) @@ -7770,7 +7824,7 @@ } // NEW ... - info.pane.repaint(); + clickInfo.pane.repaint(); } boolean overflow = false; diff --git a/Spline.java b/Spline.java index 45c5a1d..4fdf5a6 100644 --- a/Spline.java +++ b/Spline.java @@ -157,11 +157,13 @@ Point prev = new Point(0, 0); Point curr = new Point(0, 0); Rectangle dummy = new Rectangle(); - calcHotSpot(sample, info, prev, dummy); + calcHotSpot(sample, //info, + prev, dummy); for (double t = 0.1; t < 1.01; t += 0.1) { solve(t, a, b, c, d, sample); - calcHotSpot(sample, info, curr, dummy); + calcHotSpot(sample, //info, + curr, dummy); info.g.drawLine(prev.x, prev.y, curr.x, curr.y); info.g.drawLine(prev.x, prev.y + 1, curr.x, curr.y + 1); info.g.drawLine(prev.x + 1, prev.y, curr.x + 1, curr.y); @@ -181,7 +183,7 @@ for (int i=0; i < count; i++) { cVector p = (cVector)ctrlPnts.elementAt(i); - Rectangle spot = calcHotSpot(p, info); + Rectangle spot = calcHotSpot(p); //, info); info.g.fillRect(spot.x, spot.y, spot.width, spot.height); } @@ -197,7 +199,7 @@ for (int i=0; i < nPoints; i++) { cVector p = (cVector)ctrlPnts.elementAt(i); - Rectangle r = calcHotSpot(p, info); + Rectangle r = calcHotSpot(p); //, info); if (r.contains(info.x, info.y)) { hitSomething = true; @@ -235,7 +237,8 @@ for (double t = 0; t < 1.001; t += 0.01) { solve(t, a, b, c, d, sample); - calcHotSpot(sample, info, pnt, rect); + calcHotSpot(sample, //info, + pnt, rect); if (!rect.contains(info.x, info.y)) continue; hitSomething = true; diff --git a/Torus.java b/Torus.java index d9a7b44..4573395 100644 --- a/Torus.java +++ b/Torus.java @@ -2,7 +2,7 @@ class Torus extends Biparam implements java.io.Serializable { - //static final long serialVersionUID = -7637054329820073252L; + static final long serialVersionUID = -7637054329820073252L; // Old Torus() { @@ -64,7 +64,7 @@ v = 0; double uAng = u * 2 * Math.PI; - double vAng = v * 2 * Math.PI; + double vAng = -v * 2 * Math.PI; double cosua = Math.cos(uAng); double sinua = Math.sin(uAng); double cosva = Math.cos(vAng); @@ -118,55 +118,59 @@ return rad2 <= minor * minor; } - void drawEditHandles(ClickInfo info, int level) + void drawEditHandles(//ClickInfo info, + int level) { if (level == 0) { return; } else { - super.drawEditHandles(info, level); + super.drawEditHandles(//info, + level); cVector temp = LA.newVector(0, 0, minor); LA.xformPos(temp, toParent, temp); - Rectangle majorSpot = calcHotSpot(temp, info); + Rectangle majorSpot = calcHotSpot(temp); //, info); majorSpot.translate(4, 4); temp.x = major; temp.y = temp.z = 0; LA.xformPos(temp, toParent, temp); - Rectangle minorSpot = calcHotSpot(temp, info); + Rectangle minorSpot = calcHotSpot(temp); //, info); minorSpot.translate(4, 4); - info.g.setColor(Color.green); - info.g.fillRect(majorSpot.x, majorSpot.y, majorSpot.width, majorSpot.height); - info.g.fillRect(minorSpot.x, minorSpot.y, minorSpot.width, minorSpot.height); + clickInfo.g.setColor(Color.green); + clickInfo.g.fillRect(majorSpot.x, majorSpot.y, majorSpot.width, majorSpot.height); + clickInfo.g.fillRect(minorSpot.x, minorSpot.y, minorSpot.width, minorSpot.height); return; } } - boolean doEditClick(ClickInfo info, int level) + boolean doEditClick(//ClickInfo info, + int level) { if (level == 0) return false; hitSomething = 0; - if (super.doEditClick(info, level)) + if (super.doEditClick(//info, + level)) { hitSomething = 1; return true; } cVector temp = LA.newVector(0, 0, minor); LA.xformPos(temp, toParent, temp); - Rectangle majorSpot = calcHotSpot(temp, info); + Rectangle majorSpot = calcHotSpot(temp); //, info); majorSpot.translate(4, 4); temp.x = major; temp.y = temp.z = 0; LA.xformPos(temp, toParent, temp); - Rectangle minorSpot = calcHotSpot(temp, info); + Rectangle minorSpot = calcHotSpot(temp); //, info); minorSpot.translate(4, 4); - if (majorSpot.contains(info.x, info.y)) + if (majorSpot.contains(clickInfo.x, clickInfo.y)) { hitSomething = 2; startRad = major; } else - if (minorSpot.contains(info.x, info.y)) + if (minorSpot.contains(clickInfo.x, clickInfo.y)) { hitSomething = 3; startRad = minor; @@ -174,23 +178,25 @@ { return false; } - startX = info.x; + startX = clickInfo.x; return true; } - void doEditDrag(ClickInfo info, boolean opposite) + void doEditDrag(//ClickInfo info, + boolean opposite) { if (hitSomething == 0) return; if (hitSomething == 1) { - super.doEditDrag(info, opposite); + super.doEditDrag(//info, + opposite); return; } - double deltaR = info.x - startX; + double deltaR = clickInfo.x - startX; //cVector delta = LA.newVector(info.x - startX, 0, 0); //LA.xformDir(delta, info.camera.fromScreen, delta); - deltaR /= 100 * info.camera.SCALE / info.camera.Distance(); + deltaR /= 100 * clickInfo.camera.SCALE / clickInfo.camera.Distance(); double newRad = startRad + deltaR; if (newRad < 0) newRad = 0; @@ -199,7 +205,7 @@ else minor = newRad; recalculate(); - info.pane.repaint(); + clickInfo.pane.repaint(); } double major; -- Gitblit v1.6.2