[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