[IGSTK-Users] Coordinate system framework for picking events

Patrick Cheng cheng at isis.georgetown.edu
Thu Apr 3 22:49:45 EDT 2008


Hi Vincent,

Thank you for the explanation, I understand the problem now.

All these are based on the assumption that View and ImageSptialObjects 
are properly connected in the scene graph.

1. DisplayManager, as I understand, only manages the Views. It has no 
knowledge of the ImageSpatialObject, it's the application's 
responsibility to translate the picked point to each 
ImageSpatialObject's own coordinate system.

2. But there is way to solve this: What you might want is, included in 
the PickEvent, the object being picked. Thus you can do the computation 
in the DiaplayManager like the way you wanted.

3. Still, it won't be able to reslice multiple ImageSpatialObjects to 
the same picked point. In this case, I will suggest that you create an 
ImageSpatialObjectManager, which has the references to all the 
ImageSpatialObjects and is able to reslice all the internal 
ImageSpatialObjects to the correct position given a picked point.

4. We are developing a synchronization method in our toolkit using event 
dispatcher. All those 'Manager' classes can be good use cases for our 
design in the future. These synchronization classes, once implemented, 
should make those tasks much easier. We might be able to work together 
on that.

Patrick

Vincent Gratsac wrote:
> Hi Patrick,
> 
> I will create a new point in "Design Discussion" called  Coordinate 
> system framework for picking events. Are you OK ?
> I am not sure that the problem I encounter is due to the IGSTK design, 
> or due to my software's objects manager. Let me explain briefly how it 
> works before creating a Wiki page, if needed.
> 
> a DisplayManager class manages all views of the software, and 
> ObjectRepresentations added to these views. When a point is picked on 
> one of these views, a picking event will be thrown by this view, and 
> will be caught by the DisplayManager. Then, as Luis described to me, it 
> *should* request the Transform between the View CoordinateSystem and the 
> ImageSpatialObject pixel data coordinate system for each displayed 
> ImageSpatialObjectRepresentation.
> 
> At this point, the problem is that the DisplayManager does not have 
> access to the corresponding ImageSpatialObject (nor CoordinateSystem) 
> for each ImageSpatialObjectRepresentation. Moreover, many 
> ImageSpatialObject are managed (US, MRI, etc...). So I wonder if it 
> would be possible, and logical, to add a way to get the CoordinateSystem 
> (or ImageSpatialObject) related to an ImageSpatialObjectRepresentation.
> 
> You may think that this is not a good idea, and that I should find a way 
> to store this relation between an ImageSpatialObjectRepresentation ans 
> its CoordinateSystem (or ImageSpatialObject). That is why I am not sure 
> that this is an insufficiency of the IGSTK coordinate system framework...
> 
> Is it explained better than last time? Do you understand what I mean?
> 
> Thank you,
> 
> Vincent
> 
> Patrick Cheng wrote:
>> Hi Vincent,
>>
>> I am not sure if I understand your question. Could you describe a 
>> scenario (use case) that leads to the failure or show the 
>> insufficiency of the coordinate system?
>>
>> I suggest that we continue this discussion on IGSTK wiki page, which 
>> is better organized.
>>
>> http://public.kitware.com/IGSTKWIKI/index.php/Main_Page
>> This fits under the "Design Discussion" section
>>
>> Do you want to give it a shot?
>>
>> Thank you,
>>
>> Patrick
>>
>> Vincent Gratsac wrote:
>>> Hi all,
>>>
>>> I'm sorry to pick out this point again, but something is still not 
>>> clear to me...
>>> I well understood the process described by Luis the last time but, in 
>>> my point of view, a problem is persistant :
>>>
>>> At point (2), How can I get the ImageSpatialObject pixel data 
>>> coordinate system if the software stores many ImageSpatialObjects 
>>> (UltraSound, MRI, etc...) ?
>>> That's why I thought it would be useful to be able to get each 
>>> coordinate system directly from the ImageSpatialObjectRepresentations 
>>> which are stored by the View.
>>>
>>> Do you want me to log a bug for this precise point?
>>>
>>> Thank you,
>>> Vincent
>>>
>>> Luis Ibanez wrote:
>>>>
>>>> Hi Vincent,
>>>>
>>>> You will need a single ImageSpatialObject, and you will need
>>>> one ImageObjectRepresentation *for each* View where you want
>>>> to display the image.
>>>>
>>>> About creating bug,
>>>> please create your account in the MANTIS bug tracker
>>>> (just need to provide your email)
>>>>
>>>>    http://public.kitware.com/Bug/my_view_page.php
>>>>
>>>>
>>>> Then do the following:
>>>>
>>>>   * Login in the NANTIS system
>>>>   * Select the IGSTK project on the upper right menu
>>>>   * Click on "Report Issue"
>>>>
>>>>
>>>>
>>>> Please let us know if you run into any difficulty while
>>>> reporting the bug.
>>>>
>>>>
>>>>    Thanks
>>>>
>>>>
>>>>       Luis
>>>>
>>>>
>>>>
>>>> ------------------------
>>>> Vincent Gratsac wrote:
>>>>> Hi Luis,
>>>>>
>>>>> Thank you for your help.
>>>>>
>>>>> The solutions you described here seems to be a right way to do.
>>>>> However, this means that we still have to store the corresponding 
>>>>> ImageSpatialObject for each ImageObjectRepresentation, isn't it ?
>>>>>
>>>>> I don't know where to log it as a bug. Could you tell me how to do ?
>>>>>
>>>>> Vincent.
>>>>>
>>>>> Luis Ibanez wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> Hi Vincent,
>>>>>>
>>>>>>
>>>>>> Thanks for pointing this out.
>>>>>>
>>>>>>
>>>>>> What we are planning to do here is the following:
>>>>>>
>>>>>> 1) Views, in response to picking events will throw
>>>>>>    IGSTK PointEvents, that will contain both a Point
>>>>>>    and a reference to a coordinate system (the one
>>>>>>    of the View).
>>>>>>
>>>>>> 2) You will be able to request the Transform between
>>>>>>    the View CoordinateSystem and the ImageSpatialObject
>>>>>>    pixel data coordinate system.
>>>>>>
>>>>>> 3) With the Transform you will get from (2), you will
>>>>>>    be able to convert the point from the View coordinate
>>>>>>    system to the ImageSpatialObject pixel data coordinate
>>>>>>    system
>>>>>>
>>>>>> 4) Once you have the point in image space, you will be
>>>>>>    able to map it to pixel indices and access (read only)
>>>>>>    pixel data.
>>>>>>
>>>>>>
>>>>>> Pieces (1),(3) and (4) need to be implemented.
>>>>>> Piece (2) is currently functional
>>>>>>
>>>>>>
>>>>>> Could you please log a bug, for this topic ?
>>>>>>
>>>>>> You could describe it as "fixing the coordinate system
>>>>>> framework for picking events".
>>>>>>
>>>>>> ... or something along those lines...
>>>>>>
>>>>>>
>>>>>> BTW: Breaking the encapsulation of the ImageObjectRepresentation
>>>>>>      is probably not the best way to solve this issue.
>>>>>>
>>>>>>
>>>>>>
>>>>>>    Thanks
>>>>>>
>>>>>>
>>>>>>       Luis
>>>>>>
>>>>>>
>>>>>>
>>>>>> ---------------------
>>>>>> Vincent Gratsac wrote:
>>>>>>
>>>>>>> Hi all,
>>>>>>>
>>>>>>> First of all, thanks for the great effort of the IGSTK team to 
>>>>>>> bring us this new release !
>>>>>>>
>>>>>>> I did not receive any answer to my last mail about how to get the 
>>>>>>> ImageSpatialObject from an ImageObjectRepresentation.
>>>>>>>
>>>>>>> Did you understand my problem, and do you think that adding a 
>>>>>>> RequestGetImageSpatialObject() method to the 
>>>>>>> ImageObjectRepresentation class would be possible ?
>>>>>>>
>>>>>>> Vincent
>>>>>>>
>>>>>>>> Hi all,
>>>>>>>>
>>>>>>>> I'm currently working on slicing of displayed objects by giving 
>>>>>>>> a picked point.
>>>>>>>> The NeedleBiopsy example is helpful to learn how to do that !
>>>>>>>> Here is my problem : my software can display some 
>>>>>>>> ObjectRepresentations for more than one SpatialObjects, but I'm 
>>>>>>>> not able to know to which ImageSpatialObject an 
>>>>>>>> ImageSpatialObjectRepresentation is related.
>>>>>>>>
>>>>>>>> This is a problem when we try to convert a physical point to 
>>>>>>>> image indexes ( that's why I submitted the idea to add a 
>>>>>>>> ResliceToPhysicalPoint method in the 
>>>>>>>> ImageSpatialObjectRepresentation class).
>>>>>>>>
>>>>>>>> This is also a problem if the transformation between one of the 
>>>>>>>> ImageSpatialObjects and the View object differs from Identity. 
>>>>>>>> In this case, I need to get this transformation and multiply its 
>>>>>>>> inverse to the picked point's coordinates, in order to express 
>>>>>>>> the picked point's coordinates in the ImageSpatialObject 
>>>>>>>> coordinate system. Next, I will have to convert the physical 
>>>>>>>> point to image index.
>>>>>>>>
>>>>>>>> To conclude, I found some cases in which getting the 
>>>>>>>> ImageSpatialObject from an ImageSpatialObjectRepresentation is 
>>>>>>>> very useful. Is there a way to do it , or would it be unsafe to 
>>>>>>>> add such a method ?
>>>>>>>>
>>>>>>>> Vincent
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>
> 



More information about the IGSTK-Users mailing list