scenepicker not working

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

scenepicker not working

andyjk
I am trying to pick using scene picker but it doesn't seem to find a cell or
vertex, while proppicker does.
How do I extract a pick position from scene picker? (Or even just a picked
cell)
Minimal example below:

#include <vtkVersion.h>
#include <vtkSmartPointer.h>
#include <vtkActor.h>
#include <vtkSphereSource.h>
#include <vtkRendererCollection.h>
#include <vtkCellArray.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkObjectFactory.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkPropPicker.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkPLYReader.h>
#include <vtkScenePicker.h>
#include <vtkSphereSource.h>


// Execute application.
int main(int, char *[])
{
       
        vtkSmartPointer<vtkSphereSource> sphereSource =
                vtkSmartPointer<vtkSphereSource>::New();
        sphereSource->Update();

        // Create a polydata object
        vtkPolyData* polydata = sphereSource->GetOutput();

        // Create a mapper
        vtkSmartPointer<vtkPolyDataMapper> mapper =
                vtkSmartPointer<vtkPolyDataMapper>::New();
#if VTK_MAJOR_VERSION <= 5
        mapper->SetInput(polydata);
#else
        mapper->SetInputData(polydata);
#endif

        // Create an actor
        vtkSmartPointer<vtkActor> actor =
                vtkSmartPointer<vtkActor>::New();
        actor->SetMapper(mapper);

        std::cout << "Actor address: " << actor << std::endl;

        // A renderer and render window
        vtkSmartPointer<vtkRenderer> renderer =
                vtkSmartPointer<vtkRenderer>::New();
        vtkSmartPointer<vtkRenderWindow> renderWindow =
                vtkSmartPointer<vtkRenderWindow>::New();
        renderWindow->SetStencilCapable(1); // Needed for point picking on scene
picker
        renderWindow->AddRenderer(renderer);

        // An interactor
        vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
                vtkSmartPointer<vtkRenderWindowInteractor>::New();
        renderWindowInteractor->SetRenderWindow(renderWindow);

        // Here comes the scene picker stuff. [ Just 2 lines ]
        vtkScenePicker * scenepicker = vtkScenePicker::New();
        scenepicker->SetRenderer(renderer);
        scenepicker->EnableVertexPickingOn();
       

        // Add the actors to the scene
        renderer->AddActor(actor);
        renderer->SetBackground(0, 0, 1);

        // Render and interact
        renderWindow->Render();
        renderWindowInteractor->Initialize();


        // Now the picking
stuff....................................................
        int e[2] = { 175, 215 };
       
        // Pick from this location using standard prop picker (this works fine)
        vtkSmartPointer<vtkPropPicker>  picker =
                vtkSmartPointer<vtkPropPicker>::New();
        picker->Pick(e[0], e[1], 0, renderer);

        double* pos = picker->GetPickPosition();
        std::cout << "Pick position (world coordinates) is: "
                << pos[0] << " " << pos[1]
                << " " << pos[2] << std::endl;
               
        // Pick using scene picker (this fails)
        vtkIdType vertexId = scenepicker->GetVertexId(e);
        vtkIdType cellId = scenepicker->GetCellId(e);
        std::cout << "Scene pick vertex Id " << vertexId << std::endl;
        std::cout << "Scene pick cell Id " << cellId << std::endl;

        double world_point[3];
        if (vertexId != -1)
        {
                polydata->GetPoint(vertexId, world_point);
                std::cout << "Scene pick position is : " << world_point[0] << " " <<
world_point[1] << " " << world_point[2] << std::endl;;
        }

        renderWindowInteractor->Start();

        return EXIT_SUCCESS;
}



--
Sent from: http://vtk.1045678.n5.nabble.com/VTK-Users-f1224199.html
_______________________________________________
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

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
https://vtk.org/mailman/listinfo/vtkusers