Astan Chee wrote:
I have a fc with PointSets and Lines added using AddPointSet and AddLine.
What I'm trying to do is whenever the mouse comes close (about 1-2 units) to a particular point, print it. I'm not sure how to do this as the fc is docked in a wxPanel and most of the code and events are caught in the wx-derived classes.

you can bind to the objects themselves, so it doesn't matter where the canvas in parented.

I can't find any examples on detecting pointset data.

I've enclosed an example, though I needed to fix a bug to get it to work, so you need the latest SVN version for this to work. A few notes:

When you bind to a PointSet Object:

        Points = Canvas.AddPointSet(Pts, Diameter=3, Color="Red")

if you want to get a hot when the mouse is close, rather than right on top of a point, you need to set the HitLIneWidth to something larger

        Points.HitLineWidth = 10

then you can bind whatever events you want:

        Points.Bind(FloatCanvas.EVT_FC_ENTER_OBJECT, self.OnOverPoints)
        Points.Bind(FloatCanvas.EVT_FC_LEAVE_OBJECT, self.OnLeavePoints)
        Points.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.OnLeftDown)


When you get a get a hit, you will get the PointSetObject in the callback:

    def OnOverPoints(self, obj):


but you don't know which point was hit. To find that out, you call the object's FindClosestPoint() method:

        print "Mouse over point: ", obj.FindClosestPoint(obj.HitCoords)


This shows the bug -- for the ENTER and LEAVE events, I hadn't added the HitCoords, so you couldn't do that (LEFT_UP, LEFT_DOWN, etc events worked fine). It will work right with SVN head.

If you don't want to update FloatCanvas, you could probably get the mouse coordinates in pixcel coords another way, then call the Canvas PixelToWorld to get the world coords, and call FindClosestPoint() with that.

Hope this helps,

-Chris

PS: this example is now in SVN







--
Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/OR&R            (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

[email protected]

Attachment: PointsHitDemo.py
Description: application/python

_______________________________________________
FloatCanvas mailing list
[email protected]
http://paulmcnett.com/cgi-bin/mailman/listinfo/floatcanvas

Reply via email to