Hi Ingmar,
Thanks for your early reply.
In fact, the solution you described is exactly what I have done. Here you can
see my state machine:
<stateMachine NAME="ZoomAndPan"> <state NAME="neutral" ID="0"
START_STATE="TRUE"> <transition NAME="initmove" NEXT_STATE_ID="4"
EVENT_ID="4"> <action ID="9" /> </transition> <transition
NAME="leftPress1" NEXT_STATE_ID="1" EVENT_ID="1"/> <transition
NAME="rightPress1" NEXT_STATE_ID="2" EVENT_ID="2"/> </state> <state
NAME="buffer1" ID="1"> <transition NAME="rightPress2" NEXT_STATE_ID="3"
EVENT_ID="2"> <action ID="1011"/> </transition> <transition
NAME="leftRelease1" NEXT_STATE_ID="0" EVENT_ID="505"/> <transition
NAME="mouseMove1" NEXT_STATE_ID="0" EVENT_ID="530"/> </state> <state
NAME="buffer2" ID="2"> <transition NAME="leftPress2" NEXT_STATE_ID="3"
EVENT_ID="1"> <action ID="1011"/> </transition> <transition
NAME="rightRelease1" NEXT_STATE_ID="0" EVENT_ID="507"/> <transition
NAME="mouseMove2" NEXT_STATE_ID="0" EVENT_ID="531"/> </state> <state
NAME="zoom" ID="3"> <transition NAME="leftRelease2" NEXT_STATE_ID="2"
EVENT_ID="505"> <action ID="44"/> </transition> <transition
NAME="rightRelease2" NEXT_STATE_ID="1" EVENT_ID="507"> <action ID="44"/>
</transition> <transition NAME="doZoom" NEXT_STATE_ID="3"
EVENT_ID="520"> <action ID="1012"/> </transition> </state>
<state NAME="move" ID="4"> <transition NAME="move" NEXT_STATE_ID="4"
EVENT_ID="533"> <action ID="92" /> </transition> <transition
NAME="finish" NEXT_STATE_ID="0" EVENT_ID="506"> <action ID="43" />
</transition> </state> </stateMachine>
But the problem is in the state "zoom" the transition "doZoom" is never reached.
As I am using my own intereactor, I thought it could be the event handling so I
derived the CanHandleEvent method and set it to 1 for mitk::Type_MouseMove but
it does not change anything...
I don´t know where to investigate...
Regards,
Julien
> From: [email protected]
> To: [email protected]; [email protected]
> Date: Mon, 12 Sep 2011 16:22:27 +0200
> Subject: AW: [mitk-users] Question to Events and the State machine in mitk
>
> Hi Julien,
>
> the important code for this is located in mitkBaseRenderer.cpp.
> Here the following methods submitt the event from QT to MITK:
>
> //## @brief Mouse event dispatchers
> virtual void MousePressEvent(MouseEvent*);
>
> //## @brief Mouse event dispatchers
> virtual void MouseReleaseEvent(MouseEvent*);
>
> //## @brief Mouse event dispatchers
> virtual void MouseMoveEvent(MouseEvent*);
>
> //## @brief Wheel event dispatcher
> virtual void WheelEvent(mitk::WheelEvent* we);
>
> //## @brief Key event dispatcher
> virtual void KeyPressEvent(KeyEvent*);
>
> The question is if the method MouseMoveEvent(..) is called if the two buttons
> are pressed.
> Quick Test: std::couts in above mentioned methods.
> Order of performed events: LeftMousePress, RightMousePress, MiddleMousePress,
> MouseMove, LeftMouseRelease, RightMouseRelease, MiddleMouseRelease.
> Results are, that the above mentioned methods get called in following order:
> MousePress, MousePress, MousePress, MouseMove, ... MouseMove, MouseRelease,
> MouseRelease, MouseRelease
>
> So the events are passed and you could do the following:
>
> StartState1
> Stay in state1 on MouseRelease
> Going from state 1 to 2 if rightMousePress
> State2
> Going from state2 to 3 if leftMousePress
> Going from state2 to 1 if MouseRelease
> State3
> Staying in state3 on MouseMove and performing desired Action
> Going from state3 to 1 if MouseRelease
>
> This way the user has to press rightMouseButton first and the
> leftMouseButton. If both buttons shall be pressed at once, you will have to
> represent both combinations (starting left, then right and starting right and
> then left; both directions leading to state 3). QT will fire two separate
> events no matter how synchronous you press the two buttons. (You will also
> have to take care for left- and rightMouseButton seperately.)
>
> Even though I haven't tested it, this should work nicely.
>
> Best regards,
> Ingmar
>
>
> -----Ursprüngliche Nachricht-----
> Von: Julien Le Pallec [mailto:[email protected]]
> Gesendet: Montag, 12. September 2011 12:05
> An: [email protected]
> Betreff: Re: [mitk-users] Question to Events and the State machine in mitk
>
> Hi,
>
> I am actually working on something similar (do an action when both mouse
> buttons
> are pressed and the mouse moves) and had the same idea of "buffer" states to
> reach the final state where I want the action emmitted.
>
> The problem is that when I reach the state where both buttons are clicked,
> the
> transition occuring when the mouse moves (I also tried Left/Right click +
> Move)
> is never called. It seems that the association of left + right mouse buttons
> pressed blocks the emmission of events like mouse move etc..
>
> So, my question is: Is there any way for me to implement new events based on
> both buttons pressed ?
>
> Thanks for your help,
>
> Julien
>
>
>
>
>
> ------------------------------------------------------------------------------
> Doing More with Less: The Next Generation Virtual Desktop
> What are the key obstacles that have prevented many mid-market businesses
> from deploying virtual desktops? How do next-generation virtual desktops
> provide companies an easier-to-deploy, easier-to-manage and more affordable
> virtual desktop model.http://www.accelacomm.com/jaw/sfnl/114/51426474/
> _______________________________________________
> mitk-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mitk-users
>
>
> Wegner Ingmar <I.Wegner@...> writes:
>
> >
> > Hi Christian,
> > 1. you are right, you shouldn't have to change the core. Lately I have been
> working on an extension towards
> > the state machine mechanism.
> > >From Revision #27351 on you have the possibility to load user specified
> > >xml
> files containing state
> > machine patterns.
> > For an example on how to use it see mitkStateMachineFactoryTest.
> >
> > 2. That's a little more tricky: Since the operating system doesn't send
> > events
> "Space-pressed and
> > Mouse-moved" you will have to implement it yourself. E.g. define a pattern
> that goes from one state to the
> > next in case space is pressed. Then listen for mouse move events. Then
> > leave
> the state once space is
> > released. By the way, it is much easier if you use a modifier key
> (Shift/Strg/Alt/Meta etc). This way you
> > can catch the event "Modifier-key and Mouse-moved". Each "regular" key
> > submits
> an event on its own while
> > modifier keys add their state to events caused by regular keys.
> >
> > Best Regards,
> > Ingmar
> >
> >
> > -----Ursprüngliche Nachricht-----
> > Von: Wilhelm, Christian
> > [mailto:Christian.Wilhelm@...]
> > Gesendet: Montag, 24. Januar 2011 18:21
> > An: 'mitk-users@...'
> > Betreff: [mitk-users] Question to Events and the State machine in mitk
> >
> > Dear Sir or Madam,
> >
> > I am writing a plug-in for the Ext-App. Usually you should never change
> > the
> core of the main project for your
> > plug-in. That's why I want to know if there is another way to interact with
> the ExtApp next to adding
> > statemachines in the xml.
> >
> > My second question is about the state machine. I want to use the mousemove
> event while i am pressing a button (
> > for example the space button or the "m" button). For this I need to add the
> Buttonstate of this button into
> > the move mouse event definition, am I? Where I get the information which
> button effects in which
> > buttonstate? Maybe I have to add the buttonstate of buttons, which are
> > unused
> at the momant, by my self, but
> > what I have to do for this?
> >
> > Thanks for your help. Christian Wilhelm
> > ______________________________________________________________
> > Christian Wilhelm
> > SHK
> > Innovation Center Computer Assisted Surgery (ICCAS)
> > Semmelweisstraße 14
> > D -- 04103 Leipzig
> > Germany
> > christian.wilhelm@...
> >
> > ------------------------------------------------------------------------------
> > Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
> > Finally, a world-class log management solution at an even better price-free!
> > Download using promo code Free_Logger_4_Dev2Dev. Offer expires
> > February 28th, so secure your free ArcSight Logger TODAY!
> > http://p.sf.net/sfu/arcsight-sfd2d
> > _______________________________________________
> > mitk-users mailing list
> > mitk-users@...
> > https://lists.sourceforge.net/lists/listinfo/mitk-users
> >
> > ------------------------------------------------------------------------------
> > Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
> > Finally, a world-class log management solution at an even better price-free!
> > Download using promo code Free_Logger_4_Dev2Dev. Offer expires
> > February 28th, so secure your free ArcSight Logger TODAY!
> > http://p.sf.net/sfu/arcsight-sfd2d
> >
------------------------------------------------------------------------------
Doing More with Less: The Next Generation Virtual Desktop
What are the key obstacles that have prevented many mid-market businesses
from deploying virtual desktops? How do next-generation virtual desktops
provide companies an easier-to-deploy, easier-to-manage and more affordable
virtual desktop model.http://www.accelacomm.com/jaw/sfnl/114/51426474/
_______________________________________________
mitk-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mitk-users