38 |
* command for moving on the spatial plane. |
* command for moving on the spatial plane. |
39 |
*/ |
*/ |
40 |
public class MainNode2D implements BuoyViewMainNode { |
public class MainNode2D implements BuoyViewMainNode { |
41 |
public static boolean dbg = false; |
public static boolean dbg = true; |
42 |
private static void pa(String s) { System.out.println(s); } |
private static void pa(String s) { System.out.println(s); } |
43 |
|
|
44 |
protected Object plane; |
protected Object plane; |
71 |
} |
} |
72 |
} |
} |
73 |
|
|
74 |
private int focusFrame = -1; |
private int box2screen = -1; |
75 |
private int box2paper = -1; |
private int box2paper = -1; |
76 |
private float w, h; |
private float w, h; |
77 |
|
|
78 |
public void renderMain(VobScene vs, int into) { |
public void renderMain(VobScene vs, int into) { |
79 |
vs.coords.getSqSize(into, tmp); |
vs.coords.getSqSize(into, tmp); |
80 |
w = tmp[0]; h = tmp[1]; |
w = tmp[0]; h = tmp[1]; |
81 |
focusFrame = into; |
box2screen = into; |
82 |
|
|
83 |
// create the coordsys, then position it through other method |
// create the coordsys, then position it through other method |
84 |
// this way, we only have the positioning code in one place |
// this way, we only have the positioning code in one place |
85 |
box2paper = vs.coords.orthoBox(0,0,0,0,0,0,0,0); |
box2paper = vs.coords.orthoBox(0,0,0,0,0,0,0,0); |
86 |
|
vs.matcher.add(box2screen, box2paper, "MainNode2D_B2P"); |
87 |
setZoomPan(vs, box2paper); |
setZoomPan(vs, box2paper); |
88 |
|
|
89 |
view.render(vs, plane, into, into, box2paper); |
view.render(vs, plane, into, into, box2paper); |
95 |
* created by render(). |
* created by render(). |
96 |
*/ |
*/ |
97 |
private void setZoomPan(VobScene vs, int mainFrame) { |
private void setZoomPan(VobScene vs, int mainFrame) { |
|
DefaultVobMatcher m = (DefaultVobMatcher)vs.matcher; |
|
98 |
vs.coords.setOrthoBoxParams(box2paper, 0, |
vs.coords.setOrthoBoxParams(box2paper, 0, |
99 |
panX-w/zoom/2, panY-h/zoom/2, |
panX-w/zoom/2, panY-h/zoom/2, |
100 |
1/zoom, 1/zoom, w, h); |
1/zoom, 1/zoom, w, h); |
124 |
zoom = m_state_zoom * (float) |
zoom = m_state_zoom * (float) |
125 |
Math.exp((m_state[1] - e.getY())/150.0); |
Math.exp((m_state[1] - e.getY())/150.0); |
126 |
AbstractUpdateManager.setNoAnimation(); |
AbstractUpdateManager.setNoAnimation(); |
127 |
setZoomPan(oldVobScene, focusFrame); |
setZoomPan(oldVobScene, box2screen); |
128 |
return true; |
return true; |
129 |
} |
} |
130 |
|
|
131 |
// Move by dragging with button 1 |
// Move by dragging with button 1 |
132 |
if (m_state[2] == e.BUTTON1_MASK && e.getID() == MouseEvent.MOUSE_DRAGGED) { |
if(m_state[2] == e.BUTTON1_MASK && |
133 |
|
e.getID() == MouseEvent.MOUSE_DRAGGED) { |
134 |
panX = pan[0] + (m_state[0] - e.getX())/zoom; |
panX = pan[0] + (m_state[0] - e.getX())/zoom; |
135 |
panY = pan[1] + (m_state[1] - e.getY())/zoom; |
panY = pan[1] + (m_state[1] - e.getY())/zoom; |
136 |
|
|
137 |
setZoomPan(oldVobScene, focusFrame); |
setZoomPan(oldVobScene, box2screen); |
138 |
return true; |
return true; |
139 |
} |
} |
140 |
|
|
141 |
// Move around by clicking |
// Move around by clicking |
142 |
if (m_state[2] == e.BUTTON1_MASK && e.getID() == MouseEvent.MOUSE_CLICKED){ |
if(m_state[2] == e.BUTTON1_MASK && |
143 |
|
e.getID() == MouseEvent.MOUSE_CLICKED){ |
144 |
|
|
145 |
float[] pt = new float[] { e.getX(), e.getY(), 0 }; |
float[] pt = new float[] { e.getX(), e.getY(), 0 }; |
146 |
|
|
147 |
// We must transform into Frame, and then the C2F coordinate system |
if(dbg) pa("P1: "+pt[0]+" "+pt[1]+" "+pt[2]); |
148 |
int mainctrCS = ((DefaultVobMatcher)oldVobScene.matcher).getCS(0, "FocusCenter"); |
oldVobScene.coords.inverseTransformPoints3( |
149 |
//pa("mainctr"+ mainctrCS); |
box2screen, pt, pt); |
150 |
|
if(dbg) pa("P2: "+pt[0]+" "+pt[1]+" "+pt[2]); |
151 |
int frame = ((DefaultVobMatcher)oldVobScene.matcher).getCS(mainctrCS, "FocusFrame"); |
oldVobScene.coords.transformPoints3(box2paper, pt, pt); |
152 |
//int frame = focusFrame; |
if(dbg) pa("P3: "+pt[0]+" "+pt[1]+" "+pt[2]); |
153 |
int f2c = ((DefaultVobMatcher)oldVobScene.matcher).getCS(frame, "F2C"); |
|
|
if (f2c < 0) f2c = box2paper; |
|
|
if(frame < 0 || f2c < 0) |
|
|
throw new Error("No cs point!"+frame+" "+f2c); |
|
|
|
|
|
// XXX vp, not frame! |
|
|
oldVobScene.coords.inverseTransformPoints3(mainctrCS, pt, pt); |
|
|
//oldVobScene.coords.inverseTransformPoints3(frame, pt, pt); |
|
|
oldVobScene.coords.transformPoints3(f2c, pt, pt); |
|
154 |
panX = pt[0]; panY = pt[1]; |
panX = pt[0]; panY = pt[1]; |
155 |
|
|
|
// XXX current = current.h(d.contains); |
|
|
//setZoomPan(oldVobScene, focusFrame); |
|
156 |
AbstractUpdateManager.chg(); |
AbstractUpdateManager.chg(); |
157 |
return false; |
return false; |
158 |
} |
} |