comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Function Graphics overlaid objects on image()
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: Function Graphics overlaid objects on image() [message #90372 is a reply to message #90364] Thu, 26 February 2015 14:17 Go to previous messageGo to previous message
chris_torrence@NOSPAM is currently offline  chris_torrence@NOSPAM
Messages: 528
Registered: March 2007
Senior Member
On Thursday, February 26, 2015 at 6:26:34 AM UTC-7, Helder wrote:
> Hi,
> I'm working with function graphics and I'm overlaying objects (lines, polygons) on images. I would like these objects to be linked to the underlying image (pinned if you wish), unless the user explicitly moves these objects with the mouse.
>
> I would like to avoid having to handle events from the object on my own (pick up event, process, send to all overlaid objects). I have the feeling that there might be an easy solution...
>
> I have so far tested three conditions (the test code is below):
> Data coordinates: in this case the overlays are anchored to the image (if the image is made smaller or moved, the objects are rescaled along). However, it is not possible to move the polylines. The only ways is by clicking on the end-points and changing the line length and angle. However, after this clicking on the image results in a rotation in space of the image... very inconvenient
>
> Norm or relative coordinates: in this case the objects are unfortunately not anchored to the underlying image.
>
> Is there a trivial solution to this problem that I haven't picked up?
>
> Thanks,
> Helder
>
>
> pro testFGObjects
> ;data coordinates
> w1 = window(dimensions=[500,500], window_title='Data coordinates')
> i1 = image(dist(500), current=w1)
> scale = [i1.xrange[1]-i1.xrange[0],i1.yrange[1]-i1.yrange[0]]
> l1 = polyline([0.25,0.75]*scale[0],[0.25,0.75]*scale[1], /data, target=i1)
>
> ;norm coordinates
> w2 = window(dimensions=[500,500], window_title='Norm coordinates')
> i2 = image(dist(500), current=w2)
> l2 = polyline([0.25,0.75],[0.25,0.75], /norm, target=i2)
>
> ;relative coordinates
> w3 = window(dimensions=[500,500], window_title='Relative coordinates')
> i3 = image(dist(500), current=w3)
> l3 = polyline([0.25,0.75],[0.25,0.75], /relative, target=i3)
>
> ;test widget interaction:
> ;data coordinates: it is not possible to move the line, only to change
> ; its size by moving the edges. After this the image
> ; becomes 3d. The line rescales/moves with the underlying image
> ;norm coordinates: line responds to movements with the mouse. But the line
> ; does not move when rescaling/moving the undlying image
> ;relative coordinates: same as norm coordinates
> end

Hi Helder,
You can see my reply to your other post. Right now, there are a couple of solutions for polylines - one is to hack your code to fix the bug. The other solution is to use norm or relative coordinates, but then override the event handler and do the scaling yourself. This is obviously more work.
-Chris
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Previous Topic: 2d image revolves in 3d
Next Topic: Re: Function Graphics overlaid objects on image()

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 15:49:24 PDT 2025

Total time taken to generate the page: 0.00415 seconds