1

I'm a new user in VTK, i need put a renderWindowInteractor in the QVTKWidget of QTCreator. I have this:

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);
renderWindow->Render();
renderWindowInteractor->Initialize();

but how I can put RenderWindowInteractor in QVTKWidget?? I tried this but don't worked.

this->qvtkWidget->GetRenderWindow()->AddRenderer(renderer);

Sorry for my English, I from Colombia.

NorthCat
  • 9,643
  • 16
  • 47
  • 50

2 Answers2

1

The QVTKWidget has a SetRenderWindow method allowing you to set your renderwindow in the QVTK engine. If you have set the same renderWindow to your RenderWindowInteractor, it should works.

here is a sample of code I used with a custom InteractionStyle

QVTKWidget *engine = new QVTKWidget ();

// Setup window
vtkSmartPointer<vtkRenderWindow> renderWindow =
    vtkSmartPointer<vtkRenderWindow>::New();

// Setup renderer
vtkSmartPointer<vtkRenderer> renderer =
    vtkSmartPointer<vtkRenderer>::New();
renderWindow->AddRenderer(renderer);

engine->SetRenderWindow(renderWindow); // make the link between VTK and QT

// create stuff for user interaction
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
    vtkSmartPointer<vtkRenderWindowInteractor>::New();
/*
  vtkSmartPointer<vtkUserInteractionStyle> inter = vtkUserInteractionStyle::New ();
   inter->SetDefaultRenderer(renderer);
   renderWindowInteractor->SetInteractorStyle( inter );
*/

// make the link between the  renderwindow and the interactor
renderWindowInteractor->SetRenderWindow ( renderWindow );    

engine->show();
renderWindow->Render ();
renderWindowInteractor->Initialize();
Marcassin
  • 1,386
  • 1
  • 11
  • 21
  • Thanks for responding, I have a question, what do the vtkUserInteractionStyle you, because I do not appear as defined. I you could explain how it is created. It does not work and I'm worried. I would thank. – Cesar Malaver Aug 19 '14 at 04:06
  • @CesarMalaver `vtkUserInteractionStyle` is a custom class from myself for the interaction of user, not in VTK lib. But it should work without. I edit my answer to comment these lines – Marcassin Aug 19 '14 at 14:23
0

find out don't need to use , bind widget first can solve this problem, code tested it can work.

/////////////////////////////////////////////////////
//CODE    author:Bing_Lee 2018-9-13
/////////////////////////////////////////////////////
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<QVTKWidget> widget = vtkSmartPointer<QVTKWidget>::NEW();
widget->SetRenderWindow(renderWindow);

/*//comment
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();

renderWindowInteractor->SetRenderWindow(renderWindow);
*/

renderer->AddActor(actor);

/*//comment
renderWindow->Render();
renderWindowInteractor->Initialize();
*/