[vtkusers] How to forward mouse move event to polydata algorithm and get there direction of projection

Jana Sefcikova neollie at gmail.com
Wed Jun 20 15:47:05 EDT 2012


Hi Jochen,
thank you very much, I really appreciate your help- that was exactly what I
had problem to connect.

Jana

On 20 June 2012 12:47, Jochen K. <jochen.kling at email.de> wrote:

> Hi Jana,
>
> much better!
> Here we go:
>
> #include <vtkVersion.h>
> #include <vtkPolyDataMapper.h>
> #include <vtkActor.h>
> #include <vtkRenderWindow.h>
> #include <vtkRenderer.h>
> #include <vtkRenderWindowInteractor.h>
> #include <vtkPolyData.h>
> #include <vtkSphereSource.h>
> #include <vtkOrientationMarkerWidget.h>
> #include <vtkAxesActor.h>
> #include <vtkPropAssembly.h>
> #include <vtkSmartPointer.h>
> #include <vtkInteractorStyleTrackballCamera.h>
> #include <vtkCommand.h>
> #include <vtkCamera.h>
> #include <vtkCallbackCommand.h>
> #include <vtkObjectFactory.h>
> #include <vtkMatrix4x4.h>
> class MySphereSource : public vtkSphereSource {public:
>   vtkTypeMacro(MySphereSource, vtkSphereSource);
>   static MySphereSource* New();
>
>   void MySphereSource::printDirectionOfProjection(double* dirOfProj)
>   {
>     cout << "direction of view: " << dirOfProj[0] << " " << dirOfProj[1] << " " << dirOfProj[2] << endl;
>   }
>     protected:
>     MySphereSource(){};
>    ~MySphereSource(){};
>
> };
>
> vtkStandardNewMacro(MySphereSource);
>
>
> // Commandclass vtkCameraObserver : public vtkCommand
> {public:
>   static vtkCameraObserver *New()
>   {return new vtkCameraObserver();};
>
>   void SetPolyDataAlgorithm(MySphereSource* mySphereSource) {
>     this->mySphereSource = mySphereSource;
>   }
>
>     protected:
>   vtkCameraObserver() {};
>   ~vtkCameraObserver(){}
>
>   virtual void Execute(vtkObject* caller, unsigned long event, void *calldata)
>   {
>     cout << "Camera modified event" << endl;
>     vtkCamera* cam = reinterpret_cast<vtkCamera*> (caller);
>     double* direction = cam->GetDirectionOfProjection();
>     mySphereSource->printDirectionOfProjection(direction);
>
>     // In case you would need this too:
>     //vtkMatrix4x4* mat = cam->GetViewTransformMatrix();
>
>     //cout << "View matrix: " << endl;
>     //cout << "================================================================================= " << endl;
>     //cout << mat->GetElement(0, 0) << "\t" << mat->GetElement(0, 1) << "\t" << mat->GetElement(0, 2) << "\t" << mat->GetElement(0, 3) << "\t" << endl;
>     //cout << mat->GetElement(1, 0) << "\t" << mat->GetElement(1, 1) << "\t" << mat->GetElement(1, 2) << "\t" << mat->GetElement(1, 3) << "\t" << endl;
>     //cout << mat->GetElement(2, 0) << "\t" << mat->GetElement(2, 1) << "\t" << mat->GetElement(2, 2) << "\t" << mat->GetElement(2, 3) << "\t" << endl;
>     //cout << mat->GetElement(3, 0) << "\t" << mat->GetElement(3, 1) << "\t" << mat->GetElement(3, 2) << "\t" << mat->GetElement(3, 3) << "\t" << endl;
>     //cout << "================================================================================= " << endl;
>     //double* x = cam->GetOrientation();
>     //cout << "Orientation : " << x[0] << " " << x[1] << " " << x[2] << endl;
>   }
> private :
>   MySphereSource* mySphereSource;
> };
>
>
> int main (int, char *[])
> {
>   vtkSmartPointer<MySphereSource> sphereSource =
>   vtkSmartPointer<MySphereSource>::New();
>   sphereSource->SetCenter(0.0, 0.0, 0.0);
>   sphereSource->SetRadius(1.23);
>   sphereSource->Update();
>
>   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);
>
>   // A renderer and render window
>   vtkSmartPointer<vtkRenderer> renderer =
>   vtkSmartPointer<vtkRenderer>::New();
>   vtkSmartPointer<vtkRenderWindow> renderWindow =
>   vtkSmartPointer<vtkRenderWindow>::New();
>   renderWindow->AddRenderer(renderer);
>
>   // An interactor
>   vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
>   vtkSmartPointer<vtkRenderWindowInteractor>::New();
>   renderWindowInteractor->SetRenderWindow(renderWindow);
>
>   vtkInteractorStyleTrackballCamera *style =
>   vtkInteractorStyleTrackballCamera::New();
>   renderWindowInteractor->SetInteractorStyle(style);
>
>   // Add the actors to the scene
>   renderer->AddActor(actor);
>   renderer->SetBackground(.2, .3, .4);
>   //*************************************************************************************
>   // Create observer
>   vtkSmartPointer<vtkCameraObserver> observer = vtkSmartPointer<vtkCameraObserver>::New();
>   // tell observer on which object to operate on
>   observer->SetPolyDataAlgorithm(sphereSource);
>   // hook observer into camera's modified event
>   vtkCamera* cam = renderer->GetActiveCamera();
>   cam->AddObserver(vtkCommand::ModifiedEvent, observer);
>   //*************************************************************************************
>
>   // Add widget
>   vtkSmartPointer<vtkAxesActor> axes =
>   vtkSmartPointer<vtkAxesActor>::New();
>
>   vtkSmartPointer<vtkOrientationMarkerWidget> widget =
>   vtkSmartPointer<vtkOrientationMarkerWidget>::New();
>   widget->SetOutlineColor( 0.9300, 0.5700, 0.1300 );
>   widget->SetOrientationMarker( axes );
>   widget->SetInteractor( renderWindowInteractor );
>   widget->SetViewport( 0.0, 0.0, 0.4, 0.4 );
>   widget->SetEnabled( 1 );
>   widget->InteractiveOn();
>
>   renderer->ResetCamera();
>   renderWindow->Render();
>
>   // Begin mouse interaction
>   renderWindowInteractor->Start();
>
>   return EXIT_SUCCESS;
> }
>
>
> best regards
> Jochen
> ------------------------------
> View this message in context: Re: How to forward mouse move event to
> polydata algorithm and get there direction of projection<http://vtk.1045678.n5.nabble.com/How-to-forward-mouse-move-event-to-polydata-algorithm-and-get-there-direction-of-projection-tp5714021p5714029.html>
>
> Sent from the VTK - Users mailing list archive<http://vtk.1045678.n5.nabble.com/VTK-Users-f1224199.html>at Nabble.com.
>
> _______________________________________________
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20120620/4c42eae2/attachment.htm>


More information about the vtkusers mailing list