On Thu, 7 Mar 2002 13:49:15 -0700, Raj Vaidya <[EMAIL PROTECTED]> wrote:

>Multiple mousebehaviors ? Do you folks encounter a jump in your
>geometry while doing the following:
>
>1. Enable behavior 1 and manipulate the geometry under it.
>2. Disable behavior 1, enable behavior 2 and manipulate the
>   geometry under it.
>3. Disable behavior 2, enable behavior 1.
>
>Now, upon the very first mouse click, the geometry under behavior 1
>may probably show a sudden jump. I was not sure whether this had
>anything to do with the various other stuff that I had introduced to
>enhance the behaviors, but I was suspicious of the usage of the boolean
>flag "reset". Had a post on this last month, if I remember right.
>Haven't had a chance to dig deeper, since I have now shifted to using
>OrbitBehavior.
>
>Raj
>

The above behavior is exactly what I was seeing.  So following your suggestion
I set the "reset" boolean to "true" after enabling a behavior, and this
stopped the "jump" in the geometry.  I looked at the MouseRotate behavior's
processStimulus method, and this seems like a proper fix.

Now this brings me back to Simeon Fitch's fix for my situation where, using
your example above, I could perform step (1), but then neither behavior
would subsequently respond.

>>>    public static class MouseRotate extends
>>>        com.sun.j3d.utils.behaviors.mouse.MouseRotate {
>>>        /**
>>>         * Overriden to fix a bug that doesn't initialize the class
>>>         * correctly after it is reenabled via setEnable();
>>>         */
>>>        public void processMouseEvent(MouseEvent evt) {
>>>            if(evt.getID() == MouseEvent.MOUSE_DRAGGED && !buttonPress) {
>>>                buttonPress = true;
>>>                x_last = evt.getX();
>>>                y_last = evt.getY();
>>>            }
>>>            super.processMouseEvent(evt);
>>>        }
>>>    }

If the "reset" boolean is set to "true" after enabling the behavior,
this code no longer needs to set the values of "x_last" and "y_last",
but I still need the "buttonPress" set to true.  I have been trying to figure
out why.  It appears to be related to the fact that I enable and disable
the behaviors with mouse presses and releases, and that the behaviors
also respond to these same events.

I found that in my case, after the first rotation of my scene, when I then enable one
of the behaviors with a mouse press, the behavior's processStimulus method
sees a "mousePressed" event, followed by a "mouseReleased" event.  I don't
know how the "mouseReleased" event got in there, but it sets the boolean
"buttonPress" to false, but then I am saved by Simeon's code.

Then I found that by reversing how I enabled/disabled the behaviors;
i.e., enabling them (and setting "reset" to "true") on a mouse release and
disabling the one I *didn't* want on a mouse press, I do not need to override
the MouseRotate behaviors with Simeon's code after all.  Except sometimes.
Sometimes that rogue "mouseReleased" event slips in behind the "mousePressed"
event and stops my behavior from responding.  I try again and it works.

Sorry for rambling.  The good news for me is that a blend of Raj and Simeon's
ideas give me smooth sailing.  It's just disconcerting that unknown creatures
lie just beneath my boat.  We all know how those kinds of things can jump up and
bite you later.

Thanks again,

Charles

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to