[vtkusers] vtkImageSlice and vtkImageReslice Mapper

David Gobbi david.gobbi at gmail.com
Fri Nov 9 17:43:14 EST 2012


Oh, so you want the interactor to disallow rotation.  Then instead
of the FocalPoint method from my last email, try replacing this line:

 style.SetInteractionModeToImage3D()

with this:

  style.SetInteractionModeToImage2D()

or this:

 style.SetInteractionModeToImageSlicing()

 - David


On Fri, Nov 9, 2012 at 3:36 PM, Sahithya Wintrich <s.prakash at csuohio.edu> wrote:
> I'm using im->SetSlicePlane() with a vtkPlane. That eliminated the volume
> visualization. However, I am still able to rotate the slice while holding
> the left mouse button down and dragging.
>
> Sahithya
>
>
>
> On Fri, Nov 9, 2012 at 5:24 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>>
>> Then what happens if you comment out the im.SliceAtFocalPointOn()
>> line in the code?  Then the camera will control the slice orientation,
>> but not the slice, which would instead be controlled by calling
>> im.GetSlicePlane()->SetOrigin(x,y,z) where (x,y,z) is a point on
>> the slice that you want to display.
>>
>>  - David
>>
>> On Fri, Nov 9, 2012 at 2:53 PM, Sahithya Wintrich <s.prakash at csuohio.edu>
>> wrote:
>> > I want to select points and add a connecting line through the points on
>> > the
>> > axial slice. Adding an mouse interaction to the modified code from
>> > VTK/ImageProcessing/Python/ImageInteractorReslice.py causes the axial
>> > slice
>> > not be "static" anymore. Meaning if I hold down the left mouse button
>> > and
>> > drag my mouse around the mouse pad, I am able to visualize the remaining
>> > volume. I would like to prevent this from happening. Is there are
>> > workaround
>> > to this? (my code below)
>> >
>> > class Interaction: public vtkInteractorStyleTrackballCamera
>> > {
>> >   public:
>> >     static Interaction* New();
>> >     vtkTypeMacro(Interaction, vtkInteractorStyleTrackballCamera);
>> >
>> >     void Initiliaze();
>> >
>> >     virtual void OnLeftButtonDown()
>> >     {
>> >         cout << "Picking pixel: " <<
>> > this->Interactor->GetEventPosition()[0]
>> > << " " << this->Interactor->GetEventPosition()[1] << std::endl;
>> >
>> >
>> > this->Interactor->GetPicker()->Pick(this->Interactor->GetEventPosition()[0],
>> >                             this->Interactor->GetEventPosition()[1],
>> >                             0,  // always zero.
>> >
>> >
>> > this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer());
>> >         double picked[3];
>> >         this->Interactor->GetPicker()->GetPickPosition(picked);
>> >         cout << "Picked value: " << picked[0] << " " << picked[1] << " "
>> > <<
>> > picked[2] << std::endl;
>> >
>> >         AddSelectedPoint(picked);
>> >
>> >         // code to display the picked values and  locations
>> >         vtkSmartPointer<vtkRegularPolygonSource> circle =
>> > vtkSmartPointer<vtkRegularPolygonSource>::New();
>> >         circle->SetNumberOfSides(50);
>> >         circle->SetRadius(1);
>> >         circle->SetCenter(picked[0], picked[1], picked[2]);
>> >         circle->Update();
>> >
>> >         vtkSmartPointer<vtkPolyDataMapper> mapper =
>> > vtkSmartPointer<vtkPolyDataMapper>::New();
>> >         mapper->SetInputConnection(circle->GetOutputPort());
>> >         mapper->Modified();
>> >
>> >         vtkSmartPointer<vtkActor> actor =
>> > vtkSmartPointer<vtkActor>::New();
>> >         vtkSmartPointer<vtkProperty> circleProperty =
>> > vtkSmartPointer<vtkProperty>::New();
>> >         circleProperty->SetColor(1, 1, 0);
>> >         //circleProperty->SetOpacity(0.0);
>> >         circleProperty->EdgeVisibilityOn();
>> >         circleProperty->SetEdgeColor(1, 0, 0);
>> >         actor->SetMapper(mapper);
>> >         actor->SetProperty(circleProperty);
>> >
>> >
>> > this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->AddActor(actor);
>> >
>> >
>> > this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->Render();
>> >
>> >         // Forward events
>> >         vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
>> >      };
>> >
>> >
>> >   private:
>> >       void AddSelectedPoint(double point[]);
>> >
>> >
>> >
>> > };
>> >
>> > main.cpp
>> >
>> >   vtkSmartPointer<Interaction> mouseStyle =
>> > vtkSmartPointer<Interaction>::New();
>> >   mouseStyle->Initiliaze();
>> >   mouseStyle->SetDefaultRenderer(renderer);
>> >
>> >   iren->SetInteractorStyle( mouseStyle );
>> >
>> > Thanks for any help!
>> >
>> > Sahithya
>> >
>> >
>> >
>> > On Fri, Nov 2, 2012 at 6:03 PM, David Gobbi <david.gobbi at gmail.com>
>> > wrote:
>> >>
>> >> Hi Sahithya,
>> >>
>> >> The following example comes with the VTK source code:
>> >>
>> >> VTK/ImageProcessing/Python/ImageInteractorReslice.py
>> >>
>> >> Note that you cannot use SetSlicePlane() together with
>> >> SliceFacesCameraOn() and SliceAtFocalPointOn(),
>> >> because when the latter two methods are used, the slice
>> >> plane will be automatically set from the camera parameters
>> >> and any value you set with SetSlicePlane() will be ignored.
>> >>
>> >>  - David
>> >>
>> >>
>> >> On Fri, Nov 2, 2012 at 3:39 PM, Sahithya Wintrich
>> >> <s.prakash at csuohio.edu>
>> >> wrote:
>> >> > Hello,
>> >> >
>> >> > I am new to VTK and visualization in general. I am trying to extract
>> >> > a
>> >> > 2D
>> >> > slice from a 3D volume. The classes I use are as follows:
>> >> >
>> >> > vtkImageReader - reads the stack of 2D CT images
>> >> > vtkVolumeTextureMapper2D - Maps the volume
>> >> >
>> >> > in order to get a slice defined by a vtkPlane with origin and normal
>> >> > corresponding to the slice of interest, I use:
>> >> >
>> >> >     mapper = vtkImageResliceMapper::New();
>> >> >     mapper->SetInputConnection(
>> >> > reader->GetOuputPort());
>> >> >     mapper->SetSlicePlane(plane);
>> >> >
>> >> >     slice = vtkImageSlice::New();
>> >> >     slice->SetMapper(mapper);
>> >> >
>> >> >     renderer->AddViewProp(slice);
>> >> >
>> >> > I understand that the vtkImageSlice is a 3D prop and I tried using
>> >> > suggestions to change the position and focal point of the camera.
>> >> > However,
>> >> > this is still displayed in a 3D space. I need to display this as a 2D
>> >> > slice
>> >> > with a correct view (for oblique slices as well) and prevent the user
>> >> > from
>> >> > rotating the slice.
>> >> >
>> >> > Any help would be greatly appreciated!
>> >> >
>> >> > Sahithya
>> >
>> >
>
>



More information about the vtkusers mailing list