[vtkusers] MouseWheel usage with vtkInteractorStyleTerrain
pof
jd379252 at gmail.com
Fri Feb 12 13:24:26 EST 2010
David,
that's exactly what I was looking for.
Thanks a lot.
Pof
Le 12/02/2010 18:49, David Doria a écrit :
> On Fri, Dec 11, 2009 at 7:35 PM, pof <jd379252 at gmail.com
> <mailto:jd379252 at gmail.com>> wrote:
>
> Hi,
> I'm using a vtkInteractorStyleTerrain, and I would like to use the
> mousewheel to do some zoom in/out towards the scene focal point,
> actually pretty much like what is obtained using a 'L' keypress.
> I've tried to change the mousewheelfactor with
> SetMouseWheelFactor(2), but still nothing happen at rendering
> (i.e. the camera does not move).
> I 've obviously missed something. Does anybody has an idea ?
> Thanks
> Pof
>
>
> You can subclass the interactor and change any behaviors you like.
> Here, you'd be interested in OnMouseWheelForward and OnMouseWheelBackward
>
> Here is a demo:
>
> #include <vtkSmartPointer.h>
> #include <vtkPolyDataMapper.h>
> #include <vtkActor.h>
> #include <vtkRenderWindow.h>
> #include <vtkRenderer.h>
> #include <vtkRenderWindowInteractor.h>
> #include <vtkPolyData.h>
> #include <vtkSphereSource.h>
> #include <vtkInteractorStyleTerrain.h>
> #include <vtkObjectFactory.h>
>
> class MyInteractorStyle : public vtkInteractorStyleTerrain
> {
> public:
> static MyInteractorStyle* New();
> virtual void OnMouseWheelForward()
> {
> cout << "Wheel forward" << endl;
> vtkRenderWindowInteractor *rwi = this->Interactor;
> this->FindPokedRenderer(rwi->GetEventPosition()[0],
> rwi->GetEventPosition()[1]);
> this->CreateLatLong();
> if (this->LatLongLines)
> {
> this->LatLongLinesOff();
> }
> else
> {
> double bounds[6];
> this->CurrentRenderer->ComputeVisiblePropBounds( bounds );
> double radius = sqrt((bounds[1]-bounds[0])*(bounds[1]-bounds[0]) +
> (bounds[3]-bounds[2])*(bounds[3]-bounds[2]) +
>
> (bounds[5]-bounds[4])*(bounds[5]-bounds[4])) /2.0;
> this->LatLongSphere->SetRadius( radius );
> this->LatLongSphere->SetCenter((bounds[0]+bounds[1])/2.0,
> (bounds[2]+bounds[3])/2.0,
> (bounds[4]+bounds[5])/2.0);
> this->LatLongLinesOn();
> }
> this->SelectRepresentation();
> rwi->Render();
> // forward events
> vtkInteractorStyleTerrain::OnMouseWheelForward();
> }
> virtual void OnMouseWheelBackward()
> {
> cout << "Wheel backward" << endl;
> // forward events
> vtkInteractorStyleTerrain::OnMouseWheelBackward();
> }
> };
> vtkStandardNewMacro(MyInteractorStyle);
>
> int main (int argc, char *argv[])
> {
>
> vtkSmartPointer<vtkSphereSource> sphereSource =
> vtkSmartPointer<vtkSphereSource>::New();
> sphereSource->Update();
> //create a mapper and actor
> vtkSmartPointer<vtkPolyDataMapper> mapper =
> vtkSmartPointer<vtkPolyDataMapper>::New();
> mapper->SetInputConnection(sphereSource->GetOutputPort());
>
> 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);
>
> // add the actors to the scene
> renderer->AddActor(actor);
> renderer->SetBackground(1,1,1); // Background color white
> renderWindow->Render();
>
> // vtkSmartPointer<vtkInteractorStyleTerrain> style =
> // vtkSmartPointer<vtkInteractorStyleTerrain>::New();
> vtkSmartPointer<MyInteractorStyle> style =
> vtkSmartPointer<MyInteractorStyle>::New();
> renderWindowInteractor->SetInteractorStyle( style );
> renderWindowInteractor->Start();
> return EXIT_SUCCESS;
> }
>
> Thanks,
>
> David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100212/209a8c93/attachment.htm>
More information about the vtkusers
mailing list