Thanks for the many changes in the code, it is simple and shows some
basic features I need.
Just a small observation: created lines can't be rotated or scaled
using the gui tool unless I group the line.
Just to make sure I am clear:
I can't rotate/scale this line using the gui tool:
canvas.create( 'Line', (50, 50), (100, 100), look = ('red', 'blue') )
But I can rotate/scale this one:
group = canvas.create( 'Group' , name = 'Parent of the group' )
canvas.create( 'Line', (50, 50), (100, 100), look = ('red', 'blue'),
parent = group )
The following command works as expected:
canvas.create( 'Line', (50, 50), (100, 100), rotation = 90, look =
('blue', 'blue') )
FC2 does not have a 'Point' object for drawing, correct? (I went as
far as canvas.create( 'Point'... )
Marcos Duarte
http://lob.iv.fapesp.br/
University of Sao Paulo, Brazil
On Thu, Nov 20, 2008 at 2:27 AM, Nitro <[EMAIL PROTECTED]> wrote:
> Am 19.11.2008, 04:15 Uhr, schrieb Marcos Duarte <[EMAIL PROTECTED]>:
>
>> I still have a problem related to that: I can draw the circles on top
>> of the bitmap but not if I do them with the mouse selection (at least
>> in my computer). It seems there are boundaries impeding the drawing of
>> one object on the top of other (same thing happens if I try to draw
>> very close circles). I suspect this bounding box is needed for the
>> mouse selection for example, so it can't be decreased it.
>
> Ahh I see now what you mean. Events are not sent globally right now, they
> are only received by the node over which the cursor resides at the moment
> the event happens. So if you click left on the canvas the canvas gets the
> event, if you click left on the bitmap, the bitmap gets the event.
>
> I've now updated fc2 (SVN) which allows you to receive the "global" events
> in addition to the ones sent to the nodes. To do this you can just do
>
> canvas.subscribe( self.OnLeftClick, 'input.left_down' )
>
> This enables you to receive all 'left_down' events, no matter which node
> the
> cursor was over. Same goes for all the other events. In addition this
> means, you don't have to bind to the wx.EVT_ events anymore.
> Of course you can also use the old logic to your advantage. So if you
> subscribe to the 'left_down' event of only the bitmap, then the user will
> be able to draw circles only on the bitmap and nowhere else. I am not sure
> if you want that, depends on your application.
>
> As a note for Chris, there's also
>
> canvas.subscribe( self.OnMotion, 'raw_input.move' )
>
> now which is the same as the wx.EVT_MOTION event and is always received.
> The
> reason Marcos can't bind do it is because in GUI modes like grabbing
> 'raw_input.move' will be sent and would cause a circle to be created when
> you
> grab. So the GUI modes receive the 'raw_input' events and then the default
> mouse mode fires the 'input' events which Marcos can catch to draw the
> circle.
> So you can only draw circles in the default mouse mode and not in one of
> the
> grab, move, rotate, scale, ... modes.
> If he wants completely different behaviour I suggest writing a custom GUI
> mode.
>
> I've also made the node deletion step simpler. In the attached version of
> X5.py you see I've introduced the .node property to events. The .node
> property holds the node the cursor was over when the event occured. So I
> just bind right click to each circle node and then call
> canvas.removeChild( evt.node ), because evt.node is always the circle of
> course this works.
>
>> Yes, it would sound more intuitive if we could also get the global
>> coordinates from an attribute of evt.coords.
>> In fact, one thing I want to do is to apply my own spatial
>> transformation (which I would calculate based on some points in the
>> image) to the coordinates of the canvas. I don't need to do image
>> calibration (I mean to change the image itself), I understand this is
>> not the type of application fc was designed for (also because my
>> images are bitmaps not svgs).
>
> Can you tell me a bit more about your spatial transformation? Is it
> something like a mercator projection? Or more involved? If it's a linear
> one, then fc2 can transform also the image for you.
> FC2 also offers you to plugin custom transforms instead of the matrix ones
> as well, but these will most likely only work on the lowest level of the
> transform chain right now.
>
>> What I need is just the calibration (transformation) of the coordinates.
>> So, in this scenario it would be great something like
>> evt.coords.Global for the position at the global (screen) coordinate
>> system; evt.coords.Local for the position at the local (canvas, or
>> transformation equals to identity) coordinate system;
>> evt.coords.Local2 for the position at another local (user defined)
>> coordinate system (after a transformation), etc.
>
> Yes, I like this kind of API, so I implemented it for the events. There's
> event.coords.world, event.coords.local and event.coords.screen now (see
> X5.py). World is the coordinates in world space, screen in screen space
> and local in the space of event.node (that is the current node's local
> space).
>
>> About binding the mouse events to wx and to fc, I understood from your
>> post in wxpython that this is wrong. However, i can't adapt the
>> solution Chris gave, Canvas.Bind(FloatCanvas.EVT_MOTION,
>> self.OnMotion), to my case in fc2.
>
> Yes, this won't work in fc2. I wouldn't call it wrong though. It's a
> current limitation in wxPython, that's all. See X5.py how to solve this
> by using canvas.subscribe( 'raw_input.move' ).
>
>>> Please ask more questions :-)
>>
>> You shouldn't worry about that!
>
> :-)
>
> -Matthias
> _______________________________________________
> FloatCanvas mailing list
> [email protected]
> http://mail.mithis.com/cgi-bin/mailman/listinfo/floatcanvas
>
>
_______________________________________________
FloatCanvas mailing list
[email protected]
http://mail.mithis.com/cgi-bin/mailman/listinfo/floatcanvas