[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