[vtkusers] Issues with coordinate conversion, possible VTK bugs?

Dan Lipsa dan.lipsa at kitware.com
Wed May 24 11:06:23 EDT 2017


Bill,
Try using SetLayer(1) for the renderer that has the text.

Dan


On Wed, May 24, 2017 at 10:34 AM, Bill Q <bill.q.hdp at gmail.com> wrote:

> Hi Dan,
> Thanks a ton for the example. The example used 4 different viewports.
> However, for my application, I need to set all renderers under the same
> viewport. The problem is that if I add a second renderer into the render
> window and using the default viewport, it will cover the first renderer and
> nothing on the first renderer will show up. I am wondering if I did the
> whole thing wrong.
>
> My purpose is to display some DICOM images, some texts, and scales on the
> same screen. Also, I would like to make the scales zoom with the DICOM
> images but the texts stay put. Most importantly, I would like to get the
> world coordinates on the DICOM image when users click on the screen, so I
> can mark the click properly.
>
> What should be done in order to get this working?
>
>
> Many thanks.
>
>
> Bill
>
> On Wed, May 24, 2017 at 12:02 AM, Dan Lipsa <dan.lipsa at kitware.com> wrote:
>
>> Not sure what is going on. Do the objects you are rendering have the same
>> world coordinates? Are both renderers added to the rendering window?
>> Here is an example with multiple renderer (they are over different
>> viewports but they could have the same viewport as well)
>> http://www.vtk.org/Wiki/VTK/Examples/Cxx/Visualization/MultipleViewports
>>
>> On Tue, May 23, 2017 at 11:39 AM, Bill Q <bill.q.hdp at gmail.com> wrote:
>>
>>> I just gave it a try. But when I added another renderer into the window
>>> that I used for text actors, it overlaps and covered the first renderer. So
>>> the first renderer won't show up. Is there a solution?
>>>
>>> Many thanks.
>>>
>>>
>>> Bill
>>>
>>> On Tue, May 23, 2017 at 10:16 PM, Dan Lipsa <dan.lipsa at kitware.com>
>>> wrote:
>>>
>>>> I think moving those text actors on a different renderer will solve
>>>> your problem.
>>>>
>>>> Dan
>>>>
>>>>
>>>> On Tue, May 23, 2017 at 9:40 AM, Bill Q <bill.q.hdp at gmail.com> wrote:
>>>>
>>>>> Hi Dan,
>>>>> Thanks a lot for the reply. Yes, that's exactly the case. If I remove
>>>>> the text actors, the world picker would return the correct coordinates. So,
>>>>> what method should I use in order to get the correct coordinates no matter
>>>>> how many actors I put in with the dicom image reader actor?
>>>>>
>>>>> Many thanks.
>>>>>
>>>>>
>>>>> Bill
>>>>>
>>>>> On Mon, May 22, 2017 at 10:04 PM, Dan Lipsa <dan.lipsa at kitware.com>
>>>>> wrote:
>>>>>
>>>>>> Bill,
>>>>>> For display_to_world, the picker picks up only what is visible
>>>>>> (closes to the camera). You might have several objects (several values in
>>>>>> world coordinates) that end up over the same display coordinate. This might
>>>>>> explain why adding those text actors changes what you pick.
>>>>>>
>>>>>> Dan
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Sun, May 21, 2017 at 5:25 AM, Bill Q <bill.q.hdp at gmail.com> wrote:
>>>>>>
>>>>>>> Can anybody help? Many thanks.
>>>>>>>
>>>>>>> Many thanks.
>>>>>>>
>>>>>>>
>>>>>>> Bill
>>>>>>>
>>>>>>> On Fri, May 19, 2017 at 11:20 PM, Bill Q <bill.q.hdp at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hello Everyone,
>>>>>>>> I encountered a weird problem in coordinate conversion.
>>>>>>>>
>>>>>>>> In order to check the accuracy, I converted from display to world,
>>>>>>>> and from world back to display. Using the following ways:
>>>>>>>>
>>>>>>>>
>>>>>>>> *self.world_picker = vtk.vtkWorldPointPicker()*
>>>>>>>>
>>>>>>>> *def *display_to_world(self, pt):
>>>>>>>>     self.world_picker.Pick(pt[0], pt[1], 0, self.ren)
>>>>>>>>     picker_pt = self.world_picker.GetPickPosition()
>>>>>>>>     picker_pt = (picker_pt[0], picker_pt[1], 0)
>>>>>>>>     *return *picker_pt
>>>>>>>>
>>>>>>>> *def *world_to_display(self, pt):
>>>>>>>>     *if *len(pt) == 3:
>>>>>>>>         pt = pt + (1.0,)
>>>>>>>>     *elif *len(pt) == 2:
>>>>>>>>         pt = pt + (0.0, 1.0)
>>>>>>>>     self.ren.SetWorldPoint(pt)
>>>>>>>>     self.ren.WorldToDisplay()
>>>>>>>>     pt = self.ren.GetDisplayPoint()
>>>>>>>>     pt = (pt[0], pt[1])
>>>>>>>>     *return *pt
>>>>>>>>
>>>>>>>> pt = [5, 5]
>>>>>>>>
>>>>>>>> world_pt = self. world_to_display(pt)
>>>>>>>>
>>>>>>>> display_pt = self. world_to_display(world_pt)
>>>>>>>> In some cases, it's quite accurate, which means pt equals
>>>>>>>> display_pt. But, in some cases, the result is simply wrong. For example,
>>>>>>>> for (5, 5), after conversions back to display, the coordinate becomes
>>>>>>>> (20.89, 20.89).
>>>>>>>>
>>>>>>>> Any ideas?
>>>>>>>>
>>>>>>>>
>>>>>>>> Many thanks.
>>>>>>>>
>>>>>>>>
>>>>>>>> Bill
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Powered by www.kitware.com
>>>>>>>
>>>>>>> Visit other Kitware open-source projects at
>>>>>>> http://www.kitware.com/opensource/opensource.html
>>>>>>>
>>>>>>> Please keep messages on-topic and check the VTK FAQ at:
>>>>>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>>>>>
>>>>>>> Search the list archives at: http://markmail.org/search/?q=vtkusers
>>>>>>>
>>>>>>> Follow this link to subscribe/unsubscribe:
>>>>>>> http://public.kitware.com/mailman/listinfo/vtkusers
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20170524/f2723335/attachment.html>


More information about the vtkusers mailing list