[vtkusers] Getting point value on picking besides the coordinates
David Doria
daviddoria at gmail.com
Sun Nov 21 08:36:14 EST 2010
On Sat, Nov 20, 2010 at 9:49 PM, abhinay <abhinaynagpal at gmail.com> wrote:
>
> HI
>
> I have a vtkwidget which i am using to show k means clustering in 3d , I am
> stuck with getting the value of the point which was clicked I am just able
> to get the value of the pixel. Here is what I do
>
>
> vtkSmartPointer<vtkPoints> points =
> vtkSmartPointer<vtkPoints>::New();
>
> points->InsertNextPoint ( 0.0, 0.0, 0.0 );
> points->InsertNextPoint ( 3.0, 3.0, 3.0 );
> points->InsertNextPoint ( 0.1, 0.1, 0.1 );
> .
> .
>
> //get the points into the format needed for KMeans
> vtkSmartPointer<vtkTable> inputData =
> vtkSmartPointer<vtkTable>::New();
>
>
>
> //display
>
> vtkSmartPointer<vtkVertexGlyphFilter> glyphFilter =
> vtkSmartPointer<vtkVertexGlyphFilter>::New();
> glyphFilter->SetInputConnection(polydata->GetProducerPort());
> glyphFilter->Update();
>
> //Create a mapper and actor
> vtkSmartPointer<vtkPolyDataMapper> mapper =
> vtkSmartPointer<vtkPolyDataMapper>::New();
> mapper->SetInputConnection(glyphFilter->GetOutputPort());
>
> vtkSmartPointer<vtkActor> actor =
> vtkSmartPointer<vtkActor>::New();
> actor->SetMapper(mapper);
> actor->GetProperty()->SetPointSize(3);
>
> //Create a renderer, render window, and interactor
> vtkSmartPointer<vtkRenderer> renderer =
> vtkSmartPointer<vtkRenderer>::New();
> vtkSmartPointer<vtkRenderWindow> renderWindow =
> vtkSmartPointer<vtkRenderWindow>::New();
> renderWindow->AddRenderer(renderer);
> vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
> vtkSmartPointer<vtkRenderWindowInteractor>::New();
> renderWindowInteractor->SetRenderWindow(renderWindow);
>
>
>
> renderer->AddActor(actor);
>
> vtkSmartPointer<MouseInteractorStylePP> style =
> vtkSmartPointer<MouseInteractorStylePP>::New();
> renderWindowInteractor->SetInteractorStyle( style );
>
> Now in the mouse interactor I have the following :
>
> class MouseInteractorStylePP : public vtkInteractorStyleTrackballCamera
> {
> public:
> static MouseInteractorStylePP* New();
> vtkTypeMacro(MouseInteractorStylePP, vtkInteractorStyleTrackballCamera);
>
> MouseInteractorStylePP()
> {
> this->SelectedMapper = vtkSmartPointer<vtkDataSetMapper>::New();
> this->SelectedActor = vtkSmartPointer<vtkActor>::New();
> this->SelectedActor->SetMapper(SelectedMapper);
> }
>
> virtual void OnLeftButtonDown()
> {
> std::cout << "Picking pixel: " <<
> this->Interactor->GetEventPosition()[0] << " " <<
> this->Interactor->GetEventPosition()[1]<< " " <<
> this->Interactor->GetEventPosition()[2] << std::endl;
>
> this->Interactor->GetPicker()->Pick(this->Interactor->GetEventPosition()[0],
> this->Interactor->GetEventPosition()[1],
> this->Interactor->GetEventPosition()[2], // always
> zero.
>
> this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer());
> double picked[3],data;
> this->Interactor->GetPicker()->GetPickPosition(picked);
> std::cout << "Picked value: " << picked[0] << " " << picked[1] << " "
> << picked[2] << std::endl;
>
> how do i get the polydata value associated with this pixel at the time
> of the click?
>
> ====
>
> Am i supposed to do something like th following? (and how?)
>
> vtkSmartPointer<vtkVertexGlyphFilter> glyphFilter =
> vtkSmartPointer<vtkVertexGlyphFilter>::New();
>
> glyphFilter->SetInputConnection(extractGeometry->GetOutputPort());
> glyphFilter->Update();
>
> vtkPolyData* selected = glyphFilter->GetOutput();
> std::cout << "Selected " << selected->GetNumberOfPoints() << "
> points." << std::endl;
> std::cout << "Selected " << selected->GetNumberOfCells() << "
> cells." << std::endl;
> this->SelectedMapper->SetInput(selected);
>
>
> Please advise
>
> Thanks and best regards
> abhinay
Take a look at these examples:
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/PointPicker
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/WorldPointPicker
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/MoveAVertex
David
More information about the vtkusers
mailing list