|
Hi all,
I modified the MouseZoom.java class to work such
that it uses scaling instead of translation. However,
there is a tendency for the canvas to "hang" after
zooming in/out continuously.
The frame still works but no mouse activity within
the canvas can be carried out (i.e. MouseRotate, MouseTranslate).
What can be the
problem?
Apparantly, I only changed significantly one line
of code (in red) , which is from set(Vector 3d) to set(double).
public class MouseZoom extends MouseBehavior
{
double scale_factor; private MouseBehaviorCallback callback = null; /** * Creates a zoom behavior given the transform group. * @param transformGroup The transformGroup to operate on. */ public MouseZoom(TransformGroup transformGroup) { super(transformGroup); } /** * Creates a default mouse zoom behavior. **/ public MouseZoom(){ super(0); } /** * Creates a zoom behavior. * Note that this behavior still needs a transform * group to work on (use setTransformGroup(tg)) and * the transform group must add this behavior. * @param flags */ public MouseZoom(int flags) { super(flags); } public void initialize() { super.initialize(); scale_factor = .04; if ((flags & INVERT_INPUT) == INVERT_INPUT) { scale_factor *= -1; invert = true; } } /** * Return the y-axis movement multipler. **/ public double getFactor() { return scale_factor; } /** * Set the y-axis movement multipler with factor. **/ public void setFactor( double factor) { scale_factor = factor; } public void processStimulus (Enumeration criteria) { WakeupCriterion wakeup; AWTEvent[] event; int id; int dx, dy; while (criteria.hasMoreElements()) { wakeup = (WakeupCriterion) criteria.nextElement(); if (wakeup instanceof WakeupOnAWTEvent) { event = ((WakeupOnAWTEvent)wakeup).getAWTEvent(); for (int i=0; i<event.length; i++) { processMouseEvent((MouseEvent) event[i]); if (((buttonPress)&&((flags & MANUAL_WAKEUP) == 0)) || ((wakeUp)&&((flags & MANUAL_WAKEUP) != 0))){ id = event[i].getID(); if ((id == MouseEvent.MOUSE_DRAGGED) && ((MouseEvent)event[i]).isAltDown() && !((MouseEvent)event[i]).isMetaDown()){ x = ((MouseEvent)event[i]).getX(); y = ((MouseEvent)event[i]).getY(); dx = x - x_last; dy = y - y_last; if (!reset){ transformGroup.getTransform(currXform); transformX.set(1+(dy*scale_factor)); //*****************CHANGED******************// if (invert) { currXform.mul(currXform, transformX); } else { currXform.mul(transformX, currXform); } transformGroup.setTransform(currXform); transformChanged( currXform ); if (callback!=null) callback.transformChanged( MouseBehaviorCallback.ZOOM, currXform ); } else { reset = false; } x_last = x; y_last = y; } else if (id == MouseEvent.MOUSE_PRESSED) { x_last = ((MouseEvent)event[i]).getX(); y_last = ((MouseEvent)event[i]).getY(); } } } } } wakeupOn (mouseCriterion); } /** * Users can overload this method which is called every time * the Behavior updates the transform * * Default implementation does nothing */ public void transformChanged( Transform3D transform ) { } /** * The transformChanged method in the callback class will * be called every time the transform is updated */ public void setupCallback( MouseBehaviorCallback callback ) { this.callback = callback; } } |
- Re: [JAVA3D] Modified MouseZoom but canvas hangs Jasmine Kwok
- Re: [JAVA3D] Modified MouseZoom but canvas hangs Silvio Simone
- Re: [JAVA3D] Modified MouseZoom but canvas hangs Jasmine Kwok
- Re: [JAVA3D] Modified MouseZoom but canvas hang... Mark Hood
- Re: [JAVA3D] Modified MouseZoom but canvas ... Mark Hood
- Re: [JAVA3D] Modified MouseZoom but ca... Jasmine Kwok
- Re: [JAVA3D] Modified MouseZoom bu... Mark Hood
- Re: [JAVA3D] Modified MouseZoo... Jasmine Kwok
- Re: [JAVA3D] Modified MouseZoo... Jasmine Kwok
- Re: [JAVA3D] Modified MouseZoo... Mark Hood
