Normand Briere
2019-07-23 5140c320d8addf4bd8dcaa7f350b6accdc4ffbaf
ClickInfo fixed.
9 files modified
418 ■■■■■ changed files
BezierPatch.java 26 ●●●●● patch | view | raw | blame | history
BezierSurface.java 26 ●●●●● patch | view | raw | blame | history
CameraPane.java 88 ●●●●● patch | view | raw | blame | history
ClickInfo.java 3 ●●●●● patch | view | raw | blame | history
Composite.java 2 ●●●●● patch | view | raw | blame | history
Cone.java 44 ●●●●● patch | view | raw | blame | history
Object3D.java 168 ●●●●● patch | view | raw | blame | history
Spline.java 13 ●●●●● patch | view | raw | blame | history
Torus.java 48 ●●●●● patch | view | raw | blame | history
BezierPatch.java
....@@ -139,39 +139,43 @@
139139 Point prev = new Point(0, 0);
140140 Point curr = new Point(0, 0);
141141 Rectangle dummy = new Rectangle();
142
- calcHotSpot(sample, info, prev, dummy);
142
+ calcHotSpot(sample, //info,
143
+ prev, dummy);
143144 sample = ((Sphere)ctrlPnts.get(i)).getCenter();
144
- calcHotSpot(sample, info, curr, dummy);
145
+ calcHotSpot(sample, //info,
146
+ curr, dummy);
145147 info.g.drawLine(prev.x, prev.y, curr.x, curr.y);
146148 prev.x = curr.x;
147149 prev.y = curr.y;
148150 }
149151 }
150152
151
- void drawEditHandles(ClickInfo info, int level)
153
+ void drawEditHandles(//ClickInfo info,
154
+ int level)
152155 {
153
- info.g.setColor(Color.red);
156
+ clickInfo.g.setColor(Color.red);
154157 int count = ctrlPnts.size();
155158 for (int i=0; i < count; i++)
156159 {
157160 cVector p = ((Sphere)ctrlPnts.elementAt(i)).getCenter();
158
- Rectangle spot = calcHotSpot(p, info);
159
- info.g.fillRect(spot.x, spot.y, spot.width, spot.height);
161
+ Rectangle spot = calcHotSpot(p); //, info);
162
+ clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height);
160163 }
161164
162165 }
163166
164
- boolean doEditClick(ClickInfo info, int level)
167
+ boolean doEditClick(//ClickInfo info,
168
+ int level)
165169 {
166
- startX = info.x;
167
- startY = info.y;
170
+ startX = clickInfo.x;
171
+ startY = clickInfo.y;
168172 int nPoints = ctrlPnts.size();
169173 hitSomething = false;
170174 for (int i=0; i < nPoints; i++)
171175 {
172176 cVector p = ((Sphere)ctrlPnts.elementAt(i)).getCenter();
173
- Rectangle r = calcHotSpot(p, info);
174
- if (r.contains(info.x, info.y))
177
+ Rectangle r = calcHotSpot(p); //, clickInfo);
178
+ if (r.contains(clickInfo.x, clickInfo.y))
175179 {
176180 hitSomething = true;
177181 hitIndex = i;
BezierSurface.java
....@@ -117,39 +117,43 @@
117117 Point prev = new Point(0, 0);
118118 Point curr = new Point(0, 0);
119119 Rectangle dummy = new Rectangle();
120
- calcHotSpot(sample, info, prev, dummy);
120
+ calcHotSpot(sample, //info,
121
+ prev, dummy);
121122 sample = ((Sphere)ctrlPnts.get(i)).getCenter();
122
- calcHotSpot(sample, info, curr, dummy);
123
+ calcHotSpot(sample, //info,
124
+ curr, dummy);
123125 info.g.drawLine(prev.x, prev.y, curr.x, curr.y);
124126 prev.x = curr.x;
125127 prev.y = curr.y;
126128 }
127129 }
128130
129
- void drawEditHandles(ClickInfo info, int level)
131
+ void drawEditHandles(//ClickInfo info,
132
+ int level)
130133 {
131
- info.g.setColor(Color.red);
134
+ clickInfo.g.setColor(Color.red);
132135 int count = ctrlPnts.size();
133136 for (int i=0; i < count; i++)
134137 {
135138 cVector p = ((Sphere)ctrlPnts.elementAt(i)).getCenter();
136
- Rectangle spot = calcHotSpot(p, info);
137
- info.g.fillRect(spot.x, spot.y, spot.width, spot.height);
139
+ Rectangle spot = calcHotSpot(p); //, info);
140
+ clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height);
138141 }
139142
140143 }
141144
142
- boolean doEditClick(ClickInfo info, int level)
145
+ boolean doEditClick(//ClickInfo info,
146
+ int level)
143147 {
144
- startX = info.x;
145
- startY = info.y;
148
+ startX = clickInfo.x;
149
+ startY = clickInfo.y;
146150 int nPoints = ctrlPnts.size();
147151 hitSomething = false;
148152 for (int i=0; i < nPoints; i++)
149153 {
150154 cVector p = ((Sphere)ctrlPnts.elementAt(i)).getCenter();
151
- Rectangle r = calcHotSpot(p, info);
152
- if (r.contains(info.x, info.y))
155
+ Rectangle r = calcHotSpot(p); //, info);
156
+ if (r.contains(clickInfo.x, clickInfo.y))
153157 {
154158 hitSomething = true;
155159 hitIndex = i;
CameraPane.java
....@@ -14255,14 +14255,15 @@
1425514255 drag = false;
1425614256 //System.out.println("Mouse DOWN");
1425714257 editObj = false;
14258
- ClickInfo info = new ClickInfo();
14259
- info.bounds.setBounds(0, 0, (int) (getBounds().width * zoom), (int) (getBounds().height * zoom));
14260
- info.pane = this;
14261
- info.camera = renderCamera;
14262
- info.x = x;
14263
- info.y = y;
14264
- info.modifiers = modifiersex;
14265
- editObj = object.doEditClick(info, 0);
14258
+ //ClickInfo info = new ClickInfo();
14259
+ object.clickInfo.bounds.setBounds(0, 0, (int) (getBounds().width * zoom), (int) (getBounds().height * zoom));
14260
+ object.clickInfo.pane = this;
14261
+ object.clickInfo.camera = renderCamera;
14262
+ object.clickInfo.x = x;
14263
+ object.clickInfo.y = y;
14264
+ object.clickInfo.modifiers = modifiersex;
14265
+ editObj = object.doEditClick(//info,
14266
+ 0);
1426614267 if (!editObj)
1426714268 {
1426814269 hasMarquee = true;
....@@ -14662,15 +14663,16 @@
1466214663 if (editObj)
1466314664 {
1466414665 drag = true;
14665
- ClickInfo info = new ClickInfo();
14666
- info.bounds.setBounds(0, 0,
14666
+ //ClickInfo info = new ClickInfo();
14667
+ object.clickInfo.bounds.setBounds(0, 0,
1466714668 (int) (getBounds().width * zoom), (int) (getBounds().height * zoom));
14668
- info.pane = this;
14669
- info.camera = renderCamera;
14670
- info.x = x;
14671
- info.y = y;
14672
- object.GetWindow().copy
14673
- .doEditDrag(info, (modifiers & MouseEvent.BUTTON3_MASK) != 0);
14669
+ object.clickInfo.pane = this;
14670
+ object.clickInfo.camera = renderCamera;
14671
+ object.clickInfo.x = x;
14672
+ object.clickInfo.y = y;
14673
+ object //.GetWindow().copy
14674
+ .doEditDrag(//info,
14675
+ (modifiers & MouseEvent.BUTTON3_MASK) != 0);
1467414676 } else
1467514677 {
1467614678 if (x < startX)
....@@ -14819,24 +14821,27 @@
1481914821 }
1482014822 }
1482114823
14824
+// ClickInfo clickInfo = new ClickInfo();
14825
+
1482214826 public void mouseMoved(MouseEvent e)
1482314827 {
1482414828 //System.out.println("mouseMoved: " + e);
1482514829 if (isRenderer)
1482614830 return;
1482714831
14828
- ClickInfo ci = new ClickInfo();
14829
- ci.x = e.getX();
14830
- ci.y = e.getY();
14831
- ci.modifiers = e.getModifiersEx();
14832
- ci.bounds.setBounds(0, 0, (int) (getBounds().width * zoom), (int) (getBounds().height * zoom));
14833
- ci.pane = this;
14834
- ci.camera = renderCamera;
14832
+ // Mouse cursor feedback
14833
+ object.clickInfo.x = e.getX();
14834
+ object.clickInfo.y = e.getY();
14835
+ object.clickInfo.modifiers = e.getModifiersEx();
14836
+ object.clickInfo.bounds.setBounds(0, 0, (int) (getBounds().width * zoom), (int) (getBounds().height * zoom));
14837
+ object.clickInfo.pane = this;
14838
+ object.clickInfo.camera = renderCamera;
1483514839 if (!isRenderer)
1483614840 {
1483714841 //ObjEditor editWindow = object.editWindow;
1483814842 //Object3D copy = editWindow.copy;
14839
- if (object.doEditClick(ci, 0))
14843
+ if (object.doEditClick(//clickInfo,
14844
+ 0))
1484014845 {
1484114846 setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
1484214847 } else
....@@ -15862,8 +15867,6 @@
1586215867
1586315868 int width = getBounds().width;
1586415869 int height = getBounds().height;
15865
- ClickInfo info = new ClickInfo();
15866
- info.bounds.setBounds(0, 0, (int) (width * zoom), (int) (height * zoom));
1586715870 //Image img = CreateImage(width, height);
1586815871 //System.out.println("width = " + width + "; height = " + height + "\n");
1586915872
....@@ -15940,31 +15943,37 @@
1594015943 }
1594115944 if (object != null && !hasMarquee)
1594215945 {
15946
+ if (object.clickInfo == null)
15947
+ object.clickInfo = new ClickInfo();
15948
+ ClickInfo info = object.clickInfo;
15949
+ //ClickInfo info = new ClickInfo();
15950
+ info.bounds.setBounds(0, 0, (int) (width * zoom), (int) (height * zoom));
15951
+
1594315952 if (isRenderer)
1594415953 {
15945
- info.flags++;
15954
+ object.clickInfo.flags++;
1594615955 double frameAspect = (double) width / (double) height;
1594715956 if (frameAspect > renderCamera.aspect)
1594815957 {
1594915958 int desired = (int) ((double) height * renderCamera.aspect);
15950
- info.bounds.width -= width - desired;
15951
- info.bounds.x += (width - desired) / 2;
15959
+ object.clickInfo.bounds.width -= width - desired;
15960
+ object.clickInfo.bounds.x += (width - desired) / 2;
1595215961 } else
1595315962 {
1595415963 int desired = (int) ((double) width / renderCamera.aspect);
15955
- info.bounds.height -= height - desired;
15956
- info.bounds.y += (height - desired) / 2;
15964
+ object.clickInfo.bounds.height -= height - desired;
15965
+ object.clickInfo.bounds.y += (height - desired) / 2;
1595715966 }
1595815967 }
1595915968
15960
- info.g = gr;
15961
- info.camera = renderCamera;
15969
+ object.clickInfo.g = gr;
15970
+ object.clickInfo.camera = renderCamera;
1596215971 /*
1596315972 // Memory intensive (brep.verticescopy)
1596415973 if (!(object instanceof Composite))
1596515974 object.draw(info, 0, false); // SLOW :
1596615975 */
15967
- if (!isRenderer)
15976
+ if (!isRenderer) // && drag)
1596815977 {
1596915978 Grafreed.Assert(object != null);
1597015979 Grafreed.Assert(object.selection != null);
....@@ -15972,9 +15981,9 @@
1597215981 {
1597315982 int hitSomething = object.selection.get(0).hitSomething;
1597415983
15975
- info.DX = 0;
15976
- info.DY = 0;
15977
- info.W = 1;
15984
+ object.clickInfo.DX = 0;
15985
+ object.clickInfo.DY = 0;
15986
+ object.clickInfo.W = 1;
1597815987 if (hitSomething == Object3D.hitCenter)
1597915988 {
1598015989 info.DX = X;
....@@ -15986,7 +15995,8 @@
1598615995 info.DY -= info.bounds.height/2;
1598715996 }
1598815997
15989
- object.drawEditHandles(info, 0);
15998
+ object.drawEditHandles(//info,
15999
+ 0);
1599016000
1599116001 if (drag && (X != 0 || Y != 0))
1599216002 {
....@@ -15999,7 +16009,7 @@
1599916009 gr.drawLine(X, Y, info.bounds.width/2, info.bounds.height/2);
1600016010 break;
1600116011 case Object3D.hitScale: gr.setColor(Color.cyan);
16002
- gr.drawLine(X, Y, info.bounds.width/2, info.bounds.height/2);
16012
+ gr.drawLine(X, Y, 0, 0);
1600316013 break;
1600416014 }
1600516015
ClickInfo.java
....@@ -12,6 +12,7 @@
1212 ClickInfo()
1313 {
1414 bounds = new Rectangle();
15
+ System.out.println("CLICKINFO");
1516 }
1617
1718 static final int kCamera = 1;
....@@ -28,6 +29,8 @@
2829 Graphics g;
2930 int DX, DY;
3031 float W = 1;
32
+
33
+ double scale; // Distance from clicked point to origin
3134
3235 static double matbuffer[][] = new double[4][4];
3336 }
Composite.java
....@@ -790,6 +790,8 @@
790790
791791 void draw(ClickInfo info, int level, boolean select)
792792 {
793
+ new Exception().printStackTrace();
794
+
793795 ClickInfo newInfo = new ClickInfo();
794796 newInfo.flags = info.flags;
795797 newInfo.bounds = info.bounds;
Cone.java
....@@ -2,7 +2,7 @@
22
33 class Cone extends Biparam implements java.io.Serializable
44 {
5
- //static final long serialVersionUID = -679715043452968126L;
5
+ static final long serialVersionUID = -2558098774090336324L; // -679715043452968126L;
66
77 Cone()
88 {
....@@ -263,9 +263,11 @@
263263 editWindow = objectUI.GetEditor();
264264 }
265265
266
- void drawEditHandles(ClickInfo info, int level)
266
+ void drawEditHandles(//ClickInfo info,
267
+ int level)
267268 {
268
- super.drawEditHandles(info, level);
269
+ super.drawEditHandles(//info,
270
+ level);
269271 if (level == 1)
270272 {
271273 return;
....@@ -273,37 +275,39 @@
273275 {
274276 cVector temp = new cVector();
275277 LA.xformPos(base, toParent, temp);
276
- Rectangle baseSpot = calcHotSpot(temp, info);
278
+ Rectangle baseSpot = calcHotSpot(temp); //, info);
277279 LA.xformPos(apex, toParent, temp);
278
- Rectangle apexSpot = calcHotSpot(temp, info);
279
- info.g.setColor(Color.green);
280
- info.g.fillRect(baseSpot.x, baseSpot.y, baseSpot.width, baseSpot.height);
281
- info.g.fillRect(apexSpot.x, apexSpot.y, apexSpot.width, apexSpot.height);
280
+ Rectangle apexSpot = calcHotSpot(temp); //, info);
281
+ clickInfo.g.setColor(Color.green);
282
+ clickInfo.g.fillRect(baseSpot.x, baseSpot.y, baseSpot.width, baseSpot.height);
283
+ clickInfo.g.fillRect(apexSpot.x, apexSpot.y, apexSpot.width, apexSpot.height);
282284 return;
283285 }
284286 }
285287
286
- boolean doEditClick(ClickInfo info, int level)
288
+ boolean doEditClick(//ClickInfo info,
289
+ int level)
287290 {
288291 //if (level == 0)
289292 //return false;
290293 hitSomething = 0;
291
- if (super.doEditClick(info, level))
294
+ if (super.doEditClick(//info,
295
+ level))
292296 {
293297 hitSomething = 1;
294298 return true;
295299 }
296300 cVector temp = new cVector();
297301 LA.xformPos(base, toParent, temp);
298
- Rectangle baseSpot = calcHotSpot(temp, info);
302
+ Rectangle baseSpot = calcHotSpot(temp); //, info);
299303 LA.xformPos(apex, toParent, temp);
300
- Rectangle apexSpot = calcHotSpot(temp, info);
301
- if (baseSpot.contains(info.x, info.y))
304
+ Rectangle apexSpot = calcHotSpot(temp); //, info);
305
+ if (baseSpot.contains(clickInfo.x, clickInfo.y))
302306 {
303307 hitSomething = 2;
304308 startRad = baseRadius;
305309 } else
306
- if (apexSpot.contains(info.x, info.y))
310
+ if (apexSpot.contains(clickInfo.x, clickInfo.y))
307311 {
308312 hitSomething = 3;
309313 startRad = apexRadius;
....@@ -311,20 +315,22 @@
311315 {
312316 return false;
313317 }
314
- startX = info.x;
318
+ startX = clickInfo.x;
315319 return true;
316320 }
317321
318
- void doEditDrag(ClickInfo info, boolean opposite)
322
+ void doEditDrag(//ClickInfo info,
323
+ boolean opposite)
319324 {
320325 if (hitSomething == 0)
321326 return;
322327 if (hitSomething == 1)
323328 {
324
- super.doEditDrag(info, opposite);
329
+ super.doEditDrag(//info,
330
+ opposite);
325331 return;
326332 }
327
- double deltaR = info.x - startX;
333
+ double deltaR = clickInfo.x - startX;
328334 double newRad = startRad + deltaR;
329335 if (newRad < 0)
330336 newRad = 0;
....@@ -333,7 +339,7 @@
333339 else
334340 apexRadius = newRad;
335341 recalculate();
336
- info.pane.repaint();
342
+ clickInfo.pane.repaint();
337343 }
338344
339345 cVector base;
Object3D.java
....@@ -2567,7 +2567,8 @@
25672567 private static final int editSelf = 1;
25682568 private static final int editChild = 2;
25692569
2570
- void drawEditHandles(ClickInfo info, int level)
2570
+ void drawEditHandles(//ClickInfo info,
2571
+ int level)
25712572 {
25722573 if (level == 0)
25732574 {
....@@ -2575,7 +2576,8 @@
25752576 return;
25762577
25772578 Object3D selectee;
2578
- for (java.util.Enumeration e = selection.elements(); e.hasMoreElements(); selectee.drawEditHandles(info, level + 1))
2579
+ for (java.util.Enumeration e = selection.elements(); e.hasMoreElements(); selectee.drawEditHandles(//info,
2580
+ level + 1))
25792581 {
25802582 selectee = (Object3D) e.nextElement();
25812583 }
....@@ -2583,19 +2585,22 @@
25832585 } else
25842586 {
25852587 //super.
2586
- drawEditHandles0(info, level + 1);
2588
+ drawEditHandles0(//info,
2589
+ level + 1);
25872590 }
25882591 }
25892592
2590
- boolean doEditClick(ClickInfo info, int level)
2593
+ boolean doEditClick(//ClickInfo info,
2594
+ int level)
25912595 {
25922596 doSomething = 0;
25932597 if (level == 0)
25942598 {
2595
- return doParentClick(info);
2599
+ return doParentClick(); //info);
25962600 }
25972601 if (//super.
2598
- doEditClick0(info, level))
2602
+ doEditClick0(//info,
2603
+ level))
25992604 {
26002605 doSomething = 1;
26012606 return true;
....@@ -2605,7 +2610,7 @@
26052610 }
26062611 }
26072612
2608
- boolean doParentClick(ClickInfo info)
2613
+ boolean doParentClick() //ClickInfo info)
26092614 {
26102615 if (selection == null)
26112616 {
....@@ -2618,7 +2623,8 @@
26182623 for (java.util.Enumeration e = selection.elements(); e.hasMoreElements();)
26192624 {
26202625 Object3D selectee = (Object3D) e.nextElement();
2621
- if (selectee.doEditClick(info, 1))
2626
+ if (selectee.doEditClick(//info,
2627
+ 1))
26222628 {
26232629 childToDrag = selectee;
26242630 doSomething = 2;
....@@ -2630,13 +2636,15 @@
26302636 return retval;
26312637 }
26322638
2633
- void doEditDrag(ClickInfo info, boolean opposite)
2639
+ void doEditDrag(//ClickInfo clickInfo,
2640
+ boolean opposite)
26342641 {
26352642 switch (doSomething)
26362643 {
26372644 case 1: // '\001'
26382645 //super.
2639
- doEditDrag0(info, opposite);
2646
+ doEditDrag0(//clickInfo,
2647
+ opposite);
26402648 break;
26412649
26422650 case 2: // '\002'
....@@ -2649,11 +2657,13 @@
26492657 {
26502658 //sel.hitSomething = childToDrag.hitSomething;
26512659 //childToDrag.doEditDrag(info);
2652
- sel.doEditDrag(info, opposite);
2660
+ sel.doEditDrag(//clickInfo,
2661
+ opposite);
26532662 } else
26542663 {
26552664 //super.
2656
- doEditDrag0(info, opposite);
2665
+ doEditDrag0(//clickInfo,
2666
+ opposite);
26572667 }
26582668 }
26592669 break;
....@@ -2671,6 +2681,9 @@
26712681 {
26722682 deselectAll();
26732683 }
2684
+
2685
+ new Exception().printStackTrace();
2686
+
26742687 ClickInfo newInfo = new ClickInfo();
26752688 newInfo.flags = info.flags;
26762689 newInfo.bounds = info.bounds;
....@@ -7298,20 +7311,23 @@
72987311 }
72997312 }
73007313
7301
- protected void calcHotSpot(cVector in, ClickInfo info, Point outPt, Rectangle outRec)
7314
+ static ClickInfo clickInfo = new ClickInfo();
7315
+
7316
+ protected void calcHotSpot(cVector in, //ClickInfo clickInfo,
7317
+ Point outPt, Rectangle outRec)
73027318 {
7303
- int hc = info.bounds.x + info.bounds.width / 2;
7304
- int vc = info.bounds.y + info.bounds.height / 2;
7305
- double[][] toscreen = info.toScreen;
7319
+ int hc = clickInfo.bounds.x + clickInfo.bounds.width / 2;
7320
+ int vc = clickInfo.bounds.y + clickInfo.bounds.height / 2;
7321
+ double[][] toscreen = clickInfo.toScreen;
73067322 if (toscreen == null)
73077323 {
7308
- toscreen = new Camera(info.camera.viewCode).toScreen;
7324
+ toscreen = new Camera(clickInfo.camera.viewCode).toScreen;
73097325 }
73107326 cVector vec = in;
73117327 LA.xformPos(in, toscreen, in);
73127328 //System.out.println("Distance = " + info.camera.Distance());
7313
- vec.x *= 100 * info.camera.SCALE / info.camera.Distance();
7314
- vec.y *= 100 * info.camera.SCALE / info.camera.Distance();
7329
+ vec.x *= 100 * clickInfo.camera.SCALE / clickInfo.camera.Distance();
7330
+ vec.y *= 100 * clickInfo.camera.SCALE / clickInfo.camera.Distance();
73157331 outPt.x = hc + (int) vec.x;
73167332 outPt.y = vc - (int) vec.y;
73177333 outRec.x = outPt.x - 3;
....@@ -7319,15 +7335,18 @@
73197335 outRec.width = outRec.height = 6;
73207336 }
73217337
7322
- protected Rectangle calcHotSpot(cVector in, ClickInfo info)
7338
+ protected Rectangle calcHotSpot(cVector in//, ClickInfo clickInfo
7339
+ )
73237340 {
73247341 Point pt = new Point(0, 0);
73257342 Rectangle rec = new Rectangle();
7326
- calcHotSpot(in, info, pt, rec);
7343
+ calcHotSpot(in, //clickInfo,
7344
+ pt, rec);
73277345 return rec;
73287346 }
73297347
7330
- void drawEditHandles0(ClickInfo info, int level)
7348
+ void drawEditHandles0(//ClickInfo clickInfo,
7349
+ int level)
73317350 {
73327351 if (level == 0)
73337352 {
....@@ -7336,16 +7355,19 @@
73367355 {
73377356 cVector origin = new cVector();
73387357 //LA.xformPos(origin, toParent, origin);
7339
- Rectangle spot = calcHotSpot(origin, info);
7358
+ if (this.clickInfo == null)
7359
+ this.clickInfo = new ClickInfo();
7360
+
7361
+ Rectangle spot = calcHotSpot(origin); //, clickInfo);
73407362 Rectangle boundary = new Rectangle();
73417363 boundary.x = spot.x - 30;
73427364 boundary.y = spot.y - 30;
73437365 boundary.width = spot.width + 60;
73447366 boundary.height = spot.height + 60;
7345
- info.g.setColor(Color.red);
7367
+ clickInfo.g.setColor(Color.red);
73467368 int spotw = spot.x + spot.width;
73477369 int spoth = spot.y + spot.height;
7348
- info.g.fillRect(spot.x, spot.y, spot.width, spot.height);
7370
+ clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height);
73497371 // if (CameraPane.Xmin > spot.x)
73507372 // {
73517373 // CameraPane.Xmin = spot.x;
....@@ -7365,8 +7387,8 @@
73657387 spot.translate(32, 32);
73667388 spotw = spot.x + spot.width;
73677389 spoth = spot.y + spot.height;
7368
- info.g.setColor(Color.cyan);
7369
- info.g.fillRect(spot.x, spot.y, spot.width, spot.height);
7390
+ clickInfo.g.setColor(Color.cyan);
7391
+ clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height);
73707392 // if (CameraPane.Xmin > spot.x)
73717393 // {
73727394 // CameraPane.Xmin = spot.x;
....@@ -7386,9 +7408,9 @@
73867408 // bonhommes info.g.drawLine(spotw, spoth, spotw, spoth - boundary.height/2); // 15
73877409 //info.g.drawLine(spotw, spoth, spotw - boundary.width/2, spoth); // 15
73887410 spot.translate(0, -32);
7389
- info.g.setColor(Color.yellow);
7390
- info.g.fillRect(spot.x, spot.y, spot.width, spot.height);
7391
- info.g.setColor(Color.green);
7411
+ clickInfo.g.setColor(Color.yellow);
7412
+ clickInfo.g.fillRect(spot.x, spot.y, spot.width, spot.height);
7413
+ clickInfo.g.setColor(Color.green);
73927414 // if (CameraPane.Xmin > spot.x)
73937415 // {
73947416 // CameraPane.Xmin = spot.x;
....@@ -7405,8 +7427,8 @@
74057427 // {
74067428 // CameraPane.Ymax = spoth;
74077429 // }
7408
- info.g.drawArc(boundary.x + info.DX, boundary.y + info.DY,
7409
- (int)(boundary.width * info.W), (int)(boundary.height * info.W), 0, 360);
7430
+ clickInfo.g.drawArc(boundary.x + clickInfo.DX, boundary.y + clickInfo.DY,
7431
+ (int)(boundary.width * clickInfo.W), (int)(boundary.height * clickInfo.W), 0, 360);
74107432 //info.g.drawArc(spot.x, spotw, spot.width/2, boundary.height/2, 0, 360);
74117433 // if (CameraPane.Xmin > boundary.x)
74127434 // {
....@@ -7428,7 +7450,8 @@
74287450 }
74297451 }
74307452
7431
- boolean doEditClick0(ClickInfo info, int level)
7453
+ boolean doEditClick0(//ClickInfo clickInfo,
7454
+ int level)
74327455 {
74337456 if (level == 0)
74347457 {
....@@ -7437,8 +7460,8 @@
74377460
74387461 boolean retval = false;
74397462
7440
- startX = info.x;
7441
- startY = info.y;
7463
+ startX = clickInfo.x;
7464
+ startY = clickInfo.y;
74427465
74437466 hitSomething = -1;
74447467 cVector origin = new cVector();
....@@ -7448,22 +7471,51 @@
74487471 {
74497472 centerPt = new Point(0, 0);
74507473 }
7451
- calcHotSpot(origin, info, centerPt, spot);
7452
- if (spot.contains(info.x, info.y))
7474
+ calcHotSpot(origin, //info,
7475
+ centerPt, spot);
7476
+ if (spot.contains(clickInfo.x, clickInfo.y))
74537477 {
74547478 hitSomething = hitCenter;
74557479 retval = true;
74567480 }
74577481 spot.translate(32, 0);
7458
- if (spot.contains(info.x, info.y))
7482
+ if (spot.contains(clickInfo.x, clickInfo.y))
74597483 {
74607484 hitSomething = hitRotate;
74617485 retval = true;
74627486 }
74637487 spot.translate(0, 32);
7464
- if (spot.contains(info.x, info.y))
7488
+ if (spot.contains(clickInfo.x, clickInfo.y))
74657489 {
74667490 hitSomething = hitScale;
7491
+
7492
+ double scale = 0.005f * clickInfo.camera.Distance();
7493
+ double hScale = (double) (clickInfo.x /*- centerPt.x*/) / 32;
7494
+ double sign = 1;
7495
+ if (hScale < 0)
7496
+ {
7497
+ sign = -1;
7498
+ }
7499
+ hScale = sign*Math.pow(sign*hScale, scale * 50);
7500
+ if (hScale < 0.01)
7501
+ {
7502
+ //hScale = 0.01;
7503
+ }
7504
+
7505
+ double vScale = (double) (clickInfo.y /*- centerPt.y*/) / 32;
7506
+ sign = 1;
7507
+ if (vScale < 0)
7508
+ {
7509
+ sign = -1;
7510
+ }
7511
+ vScale = sign*Math.pow(sign*vScale, scale * 50);
7512
+ if (vScale < 0.01)
7513
+ {
7514
+ //vScale = 0.01;
7515
+ }
7516
+
7517
+ clickInfo.scale = Math.sqrt(hScale*hScale + vScale*vScale);
7518
+
74677519 retval = true;
74687520 }
74697521
....@@ -7473,7 +7525,7 @@
74737525 }
74747526
74757527 //System.out.println("info.modifiers = " + info.modifiers);
7476
- modified = (info.modifiers & CameraPane.SHIFT) != 0; // Was META
7528
+ modified = (clickInfo.modifiers & CameraPane.SHIFT) != 0; // Was META
74777529 //System.out.println("modified = " + modified);
74787530 //new Exception().printStackTrace();
74797531 //viewCode = info.pane.renderCamera.viewCode;
....@@ -7501,7 +7553,8 @@
75017553 return true;
75027554 }
75037555
7504
- void doEditDrag0(ClickInfo info, boolean opposite)
7556
+ void doEditDrag0(//ClickInfo info,
7557
+ boolean opposite)
75057558 {
75067559 if (hitSomething == 0)
75077560 {
....@@ -7515,7 +7568,7 @@
75157568
75167569 //System.out.println("hitSomething = " + hitSomething);
75177570
7518
- double scale = 0.005f * info.camera.Distance();
7571
+ double scale = 0.005f * clickInfo.camera.Distance();
75197572
75207573 cVector xlate = new cVector();
75217574 //cVector xlate2 = new cVector();
....@@ -7549,8 +7602,8 @@
75497602 toParent[3][i] = xlate.get(i);
75507603 LA.matInvert(toParent, fromParent);
75517604 */
7552
- cVector delta = LA.newVector(0, 0, startY - info.y);
7553
- LA.xformDir(delta, new Camera(info.camera.viewCode).fromScreen, delta);
7605
+ cVector delta = LA.newVector(0, 0, startY - clickInfo.y);
7606
+ LA.xformDir(delta, new Camera(clickInfo.camera.viewCode).fromScreen, delta);
75547607
75557608 LA.matCopy(startMat, toParent);
75567609 LA.matTranslate(toParent, delta.x * scale, delta.y * scale, delta.z * scale);
....@@ -7559,7 +7612,7 @@
75597612 } else
75607613 {
75617614 //LA.xformDir(delta, info.camera.fromScreen, delta);
7562
- cVector up = new cVector(info.camera.up);
7615
+ cVector up = new cVector(clickInfo.camera.up);
75637616 cVector away = new cVector();
75647617 //cVector right2 = new cVector();
75657618 //LA.vecCross(up, cVector.Z, right);
....@@ -7576,19 +7629,19 @@
75767629 LA.xformDir(up, ClickInfo.matbuffer, up);
75777630 // if (!CameraPane.LOCALTRANSFORM)
75787631 LA.xformDir(up, Globals.theRenderer.RenderCamera().toScreen, up);
7579
- LA.xformDir(info.camera.away, ClickInfo.matbuffer, away);
7632
+ LA.xformDir(clickInfo.camera.away, ClickInfo.matbuffer, away);
75807633 // if (!CameraPane.LOCALTRANSFORM)
75817634 LA.xformDir(away, Globals.theRenderer.RenderCamera().toScreen, away);
75827635 //LA.vecCross(up, cVector.Z, right2);
75837636
7584
- cVector delta = LA.newVector(info.x - startX, startY - info.y, 0);
7637
+ cVector delta = LA.newVector(clickInfo.x - startX, startY - clickInfo.y, 0);
75857638
75867639 //System.out.println("DELTA0 = " + delta);
75877640 //System.out.println("AWAY = " + info.camera.away);
75887641 //System.out.println("UP = " + info.camera.up);
75897642 if (away.z > 0)
75907643 {
7591
- if (info.camera.up.x == 0) // LA.vecDot(right, right2)<0)
7644
+ if (clickInfo.camera.up.x == 0) // LA.vecDot(right, right2)<0)
75927645 {
75937646 delta.x = -delta.x;
75947647 } else
....@@ -7603,7 +7656,7 @@
76037656 //System.out.println("DELTA1 = " + delta);
76047657 LA.xformDir(delta, ClickInfo.matbuffer, delta);
76057658 //System.out.println("DELTA2 = " + delta);
7606
- LA.xformDir(delta, new Camera(info.camera.viewCode).fromScreen, delta);
7659
+ LA.xformDir(delta, new Camera(clickInfo.camera.viewCode).fromScreen, delta);
76077660 LA.matCopy(startMat, toParent);
76087661 //System.out.println("DELTA3 = " + delta);
76097662 LA.matTranslate(toParent, delta.x * scale, delta.y * scale, delta.z * scale);
....@@ -7613,8 +7666,8 @@
76137666 break;
76147667
76157668 case hitRotate: // rotate
7616
- int dx = info.x - centerPt.x;
7617
- int dy = -(info.y - centerPt.y);
7669
+ int dx = clickInfo.x - centerPt.x;
7670
+ int dy = -(clickInfo.y - centerPt.y);
76187671 double angle = (double) Math.atan2(dx, dy);
76197672 angle = -(1.570796 - angle);
76207673
....@@ -7637,7 +7690,7 @@
76377690 }
76387691 /**/
76397692
7640
- switch (info.pane.RenderCamera().viewCode)
7693
+ switch (clickInfo.pane.RenderCamera().viewCode)
76417694 {
76427695 case 1: // '\001'
76437696 LA.matZRotate(toParent, angle);
....@@ -7664,7 +7717,7 @@
76647717 break;
76657718
76667719 case hitScale: // scale
7667
- double hScale = (double) (info.x - centerPt.x) / 32;
7720
+ double hScale = (double) (clickInfo.x /*- centerPt.x*/) / 32;
76687721 double sign = 1;
76697722 if (hScale < 0)
76707723 {
....@@ -7676,7 +7729,7 @@
76767729 //hScale = 0.01;
76777730 }
76787731
7679
- double vScale = (double) (info.y - centerPt.y) / 32;
7732
+ double vScale = (double) (clickInfo.y /*- centerPt.y*/) / 32;
76807733 sign = 1;
76817734 if (vScale < 0)
76827735 {
....@@ -7687,6 +7740,7 @@
76877740 {
76887741 //vScale = 0.01;
76897742 }
7743
+
76907744 LA.matCopy(startMat, toParent);
76917745 /**/
76927746 for (int i = 0; i < 3; i++)
....@@ -7696,14 +7750,14 @@
76967750 }
76977751 /**/
76987752
7699
- double totalScale = Math.sqrt(hScale*hScale + vScale*vScale) / Math.sqrt(2);
7753
+ double totalScale = Math.sqrt(hScale*hScale + vScale*vScale) / clickInfo.scale;
77007754
77017755 if (totalScale < 0.01)
77027756 {
77037757 totalScale = 0.01;
77047758 }
77057759
7706
- switch (info.pane.RenderCamera().viewCode)
7760
+ switch (clickInfo.pane.RenderCamera().viewCode)
77077761 {
77087762 case 3: // '\001'
77097763 if (modified || opposite)
....@@ -7770,7 +7824,7 @@
77707824 } // NEW ...
77717825
77727826
7773
- info.pane.repaint();
7827
+ clickInfo.pane.repaint();
77747828 }
77757829
77767830 boolean overflow = false;
Spline.java
....@@ -157,11 +157,13 @@
157157 Point prev = new Point(0, 0);
158158 Point curr = new Point(0, 0);
159159 Rectangle dummy = new Rectangle();
160
- calcHotSpot(sample, info, prev, dummy);
160
+ calcHotSpot(sample, //info,
161
+ prev, dummy);
161162 for (double t = 0.1; t < 1.01; t += 0.1)
162163 {
163164 solve(t, a, b, c, d, sample);
164
- calcHotSpot(sample, info, curr, dummy);
165
+ calcHotSpot(sample, //info,
166
+ curr, dummy);
165167 info.g.drawLine(prev.x, prev.y, curr.x, curr.y);
166168 info.g.drawLine(prev.x, prev.y + 1, curr.x, curr.y + 1);
167169 info.g.drawLine(prev.x + 1, prev.y, curr.x + 1, curr.y);
....@@ -181,7 +183,7 @@
181183 for (int i=0; i < count; i++)
182184 {
183185 cVector p = (cVector)ctrlPnts.elementAt(i);
184
- Rectangle spot = calcHotSpot(p, info);
186
+ Rectangle spot = calcHotSpot(p); //, info);
185187 info.g.fillRect(spot.x, spot.y, spot.width, spot.height);
186188 }
187189
....@@ -197,7 +199,7 @@
197199 for (int i=0; i < nPoints; i++)
198200 {
199201 cVector p = (cVector)ctrlPnts.elementAt(i);
200
- Rectangle r = calcHotSpot(p, info);
202
+ Rectangle r = calcHotSpot(p); //, info);
201203 if (r.contains(info.x, info.y))
202204 {
203205 hitSomething = true;
....@@ -235,7 +237,8 @@
235237 for (double t = 0; t < 1.001; t += 0.01)
236238 {
237239 solve(t, a, b, c, d, sample);
238
- calcHotSpot(sample, info, pnt, rect);
240
+ calcHotSpot(sample, //info,
241
+ pnt, rect);
239242 if (!rect.contains(info.x, info.y))
240243 continue;
241244 hitSomething = true;
Torus.java
....@@ -2,7 +2,7 @@
22
33 class Torus extends Biparam implements java.io.Serializable
44 {
5
- //static final long serialVersionUID = -7637054329820073252L;
5
+ static final long serialVersionUID = -7637054329820073252L; // Old
66
77 Torus()
88 {
....@@ -64,7 +64,7 @@
6464 v = 0;
6565
6666 double uAng = u * 2 * Math.PI;
67
- double vAng = v * 2 * Math.PI;
67
+ double vAng = -v * 2 * Math.PI;
6868 double cosua = Math.cos(uAng);
6969 double sinua = Math.sin(uAng);
7070 double cosva = Math.cos(vAng);
....@@ -118,55 +118,59 @@
118118 return rad2 <= minor * minor;
119119 }
120120
121
- void drawEditHandles(ClickInfo info, int level)
121
+ void drawEditHandles(//ClickInfo info,
122
+ int level)
122123 {
123124 if (level == 0)
124125 {
125126 return;
126127 } else
127128 {
128
- super.drawEditHandles(info, level);
129
+ super.drawEditHandles(//info,
130
+ level);
129131 cVector temp = LA.newVector(0, 0, minor);
130132 LA.xformPos(temp, toParent, temp);
131
- Rectangle majorSpot = calcHotSpot(temp, info);
133
+ Rectangle majorSpot = calcHotSpot(temp); //, info);
132134 majorSpot.translate(4, 4);
133135 temp.x = major;
134136 temp.y = temp.z = 0;
135137 LA.xformPos(temp, toParent, temp);
136
- Rectangle minorSpot = calcHotSpot(temp, info);
138
+ Rectangle minorSpot = calcHotSpot(temp); //, info);
137139 minorSpot.translate(4, 4);
138
- info.g.setColor(Color.green);
139
- info.g.fillRect(majorSpot.x, majorSpot.y, majorSpot.width, majorSpot.height);
140
- info.g.fillRect(minorSpot.x, minorSpot.y, minorSpot.width, minorSpot.height);
140
+ clickInfo.g.setColor(Color.green);
141
+ clickInfo.g.fillRect(majorSpot.x, majorSpot.y, majorSpot.width, majorSpot.height);
142
+ clickInfo.g.fillRect(minorSpot.x, minorSpot.y, minorSpot.width, minorSpot.height);
141143 return;
142144 }
143145 }
144146
145
- boolean doEditClick(ClickInfo info, int level)
147
+ boolean doEditClick(//ClickInfo info,
148
+ int level)
146149 {
147150 if (level == 0)
148151 return false;
149152 hitSomething = 0;
150
- if (super.doEditClick(info, level))
153
+ if (super.doEditClick(//info,
154
+ level))
151155 {
152156 hitSomething = 1;
153157 return true;
154158 }
155159 cVector temp = LA.newVector(0, 0, minor);
156160 LA.xformPos(temp, toParent, temp);
157
- Rectangle majorSpot = calcHotSpot(temp, info);
161
+ Rectangle majorSpot = calcHotSpot(temp); //, info);
158162 majorSpot.translate(4, 4);
159163 temp.x = major;
160164 temp.y = temp.z = 0;
161165 LA.xformPos(temp, toParent, temp);
162
- Rectangle minorSpot = calcHotSpot(temp, info);
166
+ Rectangle minorSpot = calcHotSpot(temp); //, info);
163167 minorSpot.translate(4, 4);
164
- if (majorSpot.contains(info.x, info.y))
168
+ if (majorSpot.contains(clickInfo.x, clickInfo.y))
165169 {
166170 hitSomething = 2;
167171 startRad = major;
168172 } else
169
- if (minorSpot.contains(info.x, info.y))
173
+ if (minorSpot.contains(clickInfo.x, clickInfo.y))
170174 {
171175 hitSomething = 3;
172176 startRad = minor;
....@@ -174,23 +178,25 @@
174178 {
175179 return false;
176180 }
177
- startX = info.x;
181
+ startX = clickInfo.x;
178182 return true;
179183 }
180184
181
- void doEditDrag(ClickInfo info, boolean opposite)
185
+ void doEditDrag(//ClickInfo info,
186
+ boolean opposite)
182187 {
183188 if (hitSomething == 0)
184189 return;
185190 if (hitSomething == 1)
186191 {
187
- super.doEditDrag(info, opposite);
192
+ super.doEditDrag(//info,
193
+ opposite);
188194 return;
189195 }
190
- double deltaR = info.x - startX;
196
+ double deltaR = clickInfo.x - startX;
191197 //cVector delta = LA.newVector(info.x - startX, 0, 0);
192198 //LA.xformDir(delta, info.camera.fromScreen, delta);
193
- deltaR /= 100 * info.camera.SCALE / info.camera.Distance();
199
+ deltaR /= 100 * clickInfo.camera.SCALE / clickInfo.camera.Distance();
194200 double newRad = startRad + deltaR;
195201 if (newRad < 0)
196202 newRad = 0;
....@@ -199,7 +205,7 @@
199205 else
200206 minor = newRad;
201207 recalculate();
202
- info.pane.repaint();
208
+ clickInfo.pane.repaint();
203209 }
204210
205211 double major;