Chris,

 

Checked out your RightDrag demo and I noticed that you do the final post
grab positioning using the canvas .MoveImage() method.  

 

Using this instead of the GUIMove.Moveimage() method, everything worked as
it should.  If there is flicker in the pan I am not too worried about it at
this stage.

 

Not sure why the above worked – just glad that it did.

 

- David

 

   _____  

From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
On Behalf Of David Poundall
Sent: 25 December 2007 13:23
To: 'Mailing List for the wxPython Float Canvas.'
Subject: [fc] Zoom and pan coordinates don't track each other.

 

Hi Chris,

 

As part of my GUI interface I am emulating some of the functionality of
visio.  That is to say…

 

Shift + wheel operation --> pan left/right

Wheel operation  -->   Pan up/down

Control + wheel operation --> Zoom.

 

To do this I have coded…..

----------------------------------------------------------- 

    def OnKeyDown(self,event):

        self.controlDown = event.ControlDown()

        self.altDown = event.AltDown()

        self.shiftDown = event.ShiftDown()

 

-------------------------------------------------------------- 

    def OnMouseWheel(self,event):

 

        xy = self.CanvasCentre            

                  # self.CanvasCentre is initialised using GetCanvasCentre
(see below)

                  # just after the canvas has been initialised.  Thereafter,
it keeps track of itself

        

        if not self.controlDown and not self.shiftDown:            

            # Pan Up Down

            if self.Pan.StartMove <> None:

                xy[1] = xy[1] + float(1.0*event.m_wheelRotation / 6)

                self.Pan.MoveImage(event, xy)

                print 'Up/Down ---- ',xy

            else:

                self.Pan.StartMove = N.array(xy)

                self.Pan.PrevMoveXY = (0,0)       

                

        if self.controlDown:      

            # Zoom

            zratio = 1 + 1.0*event.m_wheelRotation / 1200

            self.Canvas.Zoom(zratio,xy)

            print 'Zoom ---- ',xy

            

        elif self.shiftDown:

            # Pan Left Right

            if self.Pan.StartMove <> None:

                xy[0] = xy[0] + float(1.0*event.m_wheelRotation / 6)

                self.Pan.MoveImage(event, xy)

                print 'Left/Right ---- ',xy

            else:

                self.Pan.StartMove = N.array(xy)

                self.Pan.PrevMoveXY = (0,0)     

 

----------------------------------------------------------------- 

    def GetCanvasCentre(self):

        """

        Function to return the centre of the screen in World Coordinates.

        """        

        size = self.Canvas.GetClientSize()        

        XY = (size[0]/2,size[1]/2)

        WorldXY = self.Canvas.PixelToWorld(XY)     

        return WorldXY

 

----------------------------------------------------------------

 Where... 

 

          self.Pan = GUIMove(self.Canvas)

 

 

I have modified the MoveImage event of GuiMove to allow the datum xy to be
ntered rather than Have it calculated from the event xy location.   The
datum xy is the world coordinates at centre screen.

 

What I find is ……

 

Zoom works OK if we don’t pan.  After a pan, zoom operates but it jumps
before it does the zoom.  When I pan after a zoom I get a further jump.  

 

The reason for the jump will be that the xy value passed into the two
different routines will be providing different internal datum points. So my
question is, how do I synchronise the two routines.  Should I be using a
different datum – say top left rather than the centre?

 

Thanks in advance.

 

- David 

 

 

 

 

 

 

 

 

 

 

 

 

 


No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.516 / Virus Database: 269.17.8/1195 - Release Date: 24/12/2007
11:19



No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.516 / Virus Database: 269.17.8/1195 - Release Date: 24/12/2007
11:19



No virus found in this outgoing message.
Checked by AVG Free Edition. 
Version: 7.5.516 / Virus Database: 269.17.8/1195 - Release Date: 24/12/2007
11:19
 
_______________________________________________
FloatCanvas mailing list
[email protected]
http://mail.mithis.com/cgi-bin/mailman/listinfo/floatcanvas

Reply via email to