[vtkusers] picking vtkImageSlice using vtkCellPicker?

Miro Drahos mdrahos at robodoc.com
Wed Mar 26 13:36:54 EDT 2014


Fantastic! Thank you so much!


On 03/26/2014 07:34 AM, David Gobbi wrote:
> Hi Miro,
>
> I have made a patch for the negative spacing problem in vtkCellPicker,
> you can see it at the following web page:
>
> http://review.source.kitware.com/#/c/14863/
>
> The patch is for the upcoming VTK 6.2, but it is small so you can
> probably apply it by hand to your copy of VTK 5.10.
>
>    David
>
> On Tue, Mar 25, 2014 at 3:25 PM, Miro Drahos <mdrahos at robodoc.com> wrote:
>> David,
>> thank you very much for valuable feedback. I will heed your advice and
>> enforce positive spacing in the images.
>> This seems like the best approach and avoid other potential issues down the
>> road.
>> Best,
>> Miro
>>
>>
>>
>>
>> On 03/25/2014 12:49 PM, David Gobbi wrote:
>>> Hi Miro,
>>>
>>> As far as I know, no VTK components whatsoever are tested for images
>>> with negative spacing, and no-one is working to fix the components
>>> that are known to break with negative spacing.
>>>
>>> In my own software, whenever I read an image that has negative
>>> spacing, I always reverse the slice order to make the spacing
>>> positive.  This means that I have to modify the orientation/position
>>> matrix to account for the reversal, and it also means that I have to
>>> create a map that will map imagedata slice indices to the original
>>> file slice indices.  All of this adds complexity to my programs,
>>> obviously, but at least it means that I can be confident that all the
>>> rendering, contouring, filtering, and picking tools will properly work
>>> with my data.
>>>
>>> Since I'm familiar with the image picking code, I can take a look to
>>> see why it doesn't work for negative spacing.  But I strongly
>>> recommend that you do not use images with negative spacing in VTK.
>>> If you use negative spacing, then some things will work, it's true, but
>>> some things will break.
>>>
>>>     David
>>>
>>> On Tue, Mar 25, 2014 at 1:24 PM, Miro Drahos <mdrahos at robodoc.com> wrote:
>>>> Hi David,
>>>> I investigated this issue further and indeed vtkCellPicker works fine
>>>> with
>>>> vtkImageActor/vtkImageSlice when I plug in different images.
>>>> It so happens that my image has negative spacing (in z-direction), and
>>>> that
>>>> seems to cause issues. If I load the same image and flip the z-spacing
>>>> sign,
>>>> picking works fine. I had a look at the vtkImageActor class and saw the
>>>> if-clauses taking care of the spacing sign (when setting display bounds),
>>>> but I have not seen a similar treatment in vtkImageSliceMapper -- is it
>>>> possible that the issue is there?
>>>> I have had issues with images with negative spacing before, in particular
>>>> marching cubes filter as well as volumeMapper don't support the negative
>>>> spacing (in vtk 5.10). I was able to work around this by flipping the
>>>> spacing (and changing the origin) but I would rather keep the negative
>>>> spacing as is, since that's how the slices were acquired, in the -z
>>>> direction.
>>>> Do you (or anyone else?) know where in the vtk codebase could this
>>>> problem
>>>> (picking dependent on the spacing sign of the image) be?
>>>> I believe that picking takes into consideration just the actor bounds,
>>>> but
>>>> the rendering works just fine, so I am quite puzzled.
>>>> I am hoping that once I know where the problem is, I can derive a class
>>>> implementing the correct behavior and use that instead.
>>>> Any advice is greatly appreciated, as always.
>>>> Best,
>>>> Miro
>>>>
>>>>
>>>>
>>>>
>>>> On 03/20/2014 02:29 PM, David Gobbi wrote:
>>>>> Hi Miro,
>>>>>
>>>>> I checked through the git logs, the only recent fix to vtkCellPicker
>>>>> had to do with the fact that GetMapper() returned null for
>>>>> vtkImageSlice (but it still returned the prop and position just fine).
>>>>>     However, I noticed that the only nightly test for picking images uses
>>>>> a vtkImageActor (a subclass of vtkImageSlice) instead of using
>>>>> vtkImageSlice directly.  This shouldn't make a difference, but it
>>>>> might be worth investigating.
>>>>>
>>>>>      David
>>>>>
>>>>> On Thu, Mar 20, 2014 at 2:17 PM, Miro Drahos <mdrahos at robodoc.com>
>>>>> wrote:
>>>>>> Hi David,
>>>>>> thank you for your prompt response.
>>>>>>
>>>>>> I am using VTK 5.10 and doing nothing special as far as I can tell.
>>>>>> Here
>>>>>> is
>>>>>> some more details:
>>>>>>
>>>>>> I have a vector of vtkSmartPointer<vtkImageSlice> objects to display
>>>>>> images
>>>>>> [my 3D CT image has several segments with different slice thicknesses,
>>>>>> so
>>>>>> that's why I have a vector of them]. All the reslicing and
>>>>>> visualization
>>>>>> is
>>>>>> working as expected, so I don't suspect an issue there.
>>>>>> Now I am observing LeftMouseEvent of the interactor and processing it
>>>>>> in
>>>>>> my
>>>>>> callback class to recognize when the surface model is picked. If it is,
>>>>>> then
>>>>>> user can translate and rotate it. The callback class is derived from
>>>>>> both
>>>>>> vtkCommand and QObject (to be able to use signal/slots of Qt that this
>>>>>> is
>>>>>> part of) and I am implementing FindPickedActor(int x, int y) method as
>>>>>> I
>>>>>> have seen it throughout VTK many times.
>>>>>> I have tried to use different pickers, and decided for vtkCellPicker
>>>>>> instead
>>>>>> of vtkPropPicker, to be able to set tolerance (user can make the
>>>>>> surface
>>>>>> model transparent and then might want to pick just the outline --
>>>>>> intersection of the surface and the image reslice plane. Picking
>>>>>> outline
>>>>>> is
>>>>>> hard with no tolerance).
>>>>>> Picking surface model works just fine.
>>>>>>
>>>>>> Here is the Print() of one of my vtkImageSlice instance:
>>>>>>
>>>>>> vtkImageSlice (0x4ecbd30)
>>>>>>      Debug: Off
>>>>>>      Modified Time: 64690
>>>>>>      Reference Count: 3
>>>>>>      Registered Events: (none)
>>>>>>      Dragable: On
>>>>>>      Pickable: On
>>>>>>      AllocatedRenderTime: 860.822
>>>>>>      EstimatedRenderTime: 0
>>>>>>      NumberOfConsumers: 1
>>>>>>      RenderTimeMultiplier: 0.863803
>>>>>>      Visibility: On
>>>>>>      PropertyKeys: none.
>>>>>>      useBounds: 1
>>>>>>      IsIdentity: true
>>>>>>      Position: (0, 0, 0)
>>>>>>      Orientation: (0, 0, 0)
>>>>>>      Origin: (0, 0, 0)
>>>>>>      Scale: (1, 1, 1)
>>>>>>      Bounds:
>>>>>>        Xmin,Xmax: (-100, 100)
>>>>>>        Ymin,Ymax: (-100, 100)
>>>>>>        Zmin,Zmax: (-90.625, -2.5)
>>>>>>      UserTransform: (none)
>>>>>>      UserMatrix: (none)
>>>>>>      Property:
>>>>>>        Debug: Off
>>>>>>        Modified Time: 64690
>>>>>>        Reference Count: 3
>>>>>>        Registered Events: (none)
>>>>>>        ColorWindow: 260.1
>>>>>>        ColorLevel: 119.85
>>>>>>        UseLookupTableScalarRange: Off
>>>>>>        LookupTable: 0x156088a0
>>>>>>        Opacity: 1
>>>>>>        Ambient: 0.3
>>>>>>        Diffuse: 1
>>>>>>        InterpolationType: Linear
>>>>>>        LayerNumber: 0
>>>>>>        Checkerboard: Off
>>>>>>        CheckerboardSpacing: 10 10
>>>>>>        CheckerboardOffset: 0 0
>>>>>>        Backing: Off
>>>>>>        BackingColor: 0 0 0
>>>>>>      Mapper:
>>>>>>        Debug: Off
>>>>>>        Modified Time: 96181
>>>>>>        Reference Count: 3
>>>>>>        Registered Events: (none)
>>>>>>        Executive: 0x4ecc950
>>>>>>        ErrorCode: Success
>>>>>>        Information: 0x4ecc440
>>>>>>        AbortExecute: Off
>>>>>>        Progress: 1
>>>>>>        Progress Text: (None)
>>>>>>        TimeToDraw: 0
>>>>>>        ClippingPlanes: (none)
>>>>>>        SlicePlane: 0x4691280
>>>>>>        SliceAtFocalPoint: Off
>>>>>>        SliceFacesCamera: Off
>>>>>>        Border: On
>>>>>>        Background: Off
>>>>>>        NumberOfThreads: 8
>>>>>>        JumpToNearestSlice: Off
>>>>>>        AutoAdjustImageQuality: On
>>>>>>        SeparateWindowLevelOperation: On
>>>>>>        ResampleToScreenPixels: On
>>>>>>        SlabThickness: 0
>>>>>>        SlabType: Mean
>>>>>>        SlabSampleFactor: 2
>>>>>>        ImageSampleFactor: 1
>>>>>>        Interpolator: 0x4ecf330
>>>>>>      Bounds: (-100, 100) (-100) (100) (-90.625) (-2.5)
>>>>>>
>>>>>> I will make a simple mock program and try to isolate the problem.
>>>>>> Thank you once again!
>>>>>> Miro
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 03/20/2014 12:31 PM, David Gobbi wrote:
>>>>>>> Hi Miro,
>>>>>>>
>>>>>>> You'll have to provide more details, because I use vtkCellPicker on
>>>>>>> vtkImageSlice all the time.  It's even part of the nightly VTK
>>>>>>> testing.
>>>>>>> Is there anything special about the way you use the vtkImageSlice?
>>>>>>> What version of VTK are you using?
>>>>>>>
>>>>>>>       David
>>>>>>>
>>>>>>> On Thu, Mar 20, 2014 at 1:15 PM, Miro Drahos <mdrahos at robodoc.com>
>>>>>>> wrote:
>>>>>>>> Hi all,
>>>>>>>> I am rendering an image slice using vtkImageSlice and a surface
>>>>>>>> (vtkActor).
>>>>>>>> When I perform picking using vtkCellPicker, I always pick the surface
>>>>>>>> actor,
>>>>>>>> even if it is in the background, behind the vtkImageSlice.
>>>>>>>> If I try to pick the vtkImageSlice (and the ray does not intersect
>>>>>>>> the
>>>>>>>> surface actor), the Pick() method returns 0, as well as
>>>>>>>> picker->GetPath()
>>>>>>>> returns NULL. The vtkImageSlice is set to be pickable.
>>>>>>>> I am quite baffled by this, since I'd expect to be able to pick
>>>>>>>> vtkImageSlice with vtkCellPicker, since it is a vtkProp3D.
>>>>>>>> If I use vtkPropPicker, I can pick the image slice fine, but I would
>>>>>>>> prefer
>>>>>>>> to use vtkCellPicker so that I can specify picking tolerance.
>>>>>>>> Can someone shed some light on this?
>>>>>>>> Thank you tons!
>>>>>>>> Miro
>>>>>>
>>>> _______________________________________________
>>>> 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
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>
>> _______________________________________________
>> 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
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers



More information about the vtkusers mailing list