[vtkusers] Trouble with QVTK
    Joshua Pedrick 
    jpedrick at gmail.com
       
    Mon May 11 11:37:45 EDT 2009
    
    
  
Hi, I'm attempting to embed a VTK render window into my At app, I'm
using the code below to display a cone in the window, but all I get is
the background. I included the popup from the QVTK events example and
I'm trying to display a cone. All I get is the background, the popup
menu works, but no cone. Any clues regarding what I am doing wrong? I
tried this same example without QVTK and it worked perfectly. I am using the
CVS version of VTK and qt-sdk-2009.02.
Regards,
     -Joshua
void MainWindow::SetupScene()
{
       QVTKWidget* qvtkwidget = ui.qvtkWidget;
       {
               vtkRenderWindow* renWin = vtkRenderWindow::New();
               //renWin->StereoCapableWindowOn();
               qvtkwidget->SetRenderWindow(renWin);
               renWin->Delete();
       }
       //add a popup menu for the window and connect it to our slot
       QMenu* popup1 = new QMenu(qvtkwidget);
       popup1->addAction("Background White");
       popup1->addAction("Background Black");
       //popup1->addAction("Stereo Rendering");
       connect(popup1, SIGNAL(triggered(QAction*)), this,
SLOT(color(QAction*)));
       vtkEventQtSlotConnect* Connections = vtkEventQtSlotConnect::New();
       Connections->Connect(qvtkwidget->GetRenderWindow()->GetInteractor(),
                       vtkCommand::RightButtonPressEvent,
                       this,
                       SLOT(popup( vtkObject*, unsigned long, void*,
void*, vtkCommand*)),
                       popup1, 1.0);
       //Put cone in window
       {
               vtkConeSource *cone = vtkConeSource::New();
               vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
               // 3
               coneMapper->SetInputConnection(cone->GetOutputPort());
               vtkActor *coneActor = vtkActor::New();
               coneActor->SetMapper(coneMapper);
               coneMapper->Delete();
               vtkRenderer *ren = vtkRenderer::New();
               ren->AddActor(coneActor);
               coneActor->Delete();
               ren->SetBackground(0.3, 0.3, 0.4);
               ren->SetBackground2(0.9, 0.9, 1);
               ren->AutomaticLightCreationOn();
               ren->GradientBackgroundOn();
               //ren->WorldToDisplay();
               qvtkwidget->GetRenderWindow()->AddRenderer(ren);
               qvtkwidget->GetRenderWindow()->BordersOn();
               ren->Delete();
       }
}
void MainWindow::popup(vtkObject * obj, unsigned long, void * client_data,
                      void *, vtkCommand * command)
{
       // A note about context menus in Qt and the QVTKWidget
       // You may find it easy to just do context menus on right button up,
       // due to the event proxy mechanism in place.
       // That usually works, except in some cases.
       // One case is where you capture context menu events that
       // child windows don't process.  You could end up with a second
       // context menu after the first one.
       // See QVTKWidget::ContextMenuEvent enum which was added after the
       // writing of this example.
       // get interactor
       vtkRenderWindowInteractor* iren =
vtkRenderWindowInteractor::SafeDownCast(
               obj);
       // consume event so the interactor style doesn't get it
       command->AbortFlagOn();
       // get popup menu
       QMenu* popupMenu = static_cast<QMenu*> (client_data);
       // get event location
       int* sz = iren->GetSize();
       int* position = iren->GetEventPosition();
       // remember to flip y
       QPoint pt = QPoint(position[0], sz[1] - position[1]);
       // map to global
       QPoint global_pt = popupMenu->parentWidget()->mapToGlobal(pt);
       // show popup menu at global point
       popupMenu->popup(global_pt);
}
void MainWindow::color(QAction* color)
{
       QVTKWidget* qvtkwidget = ui.qvtkWidget;
       vtkRenderer* ren =
qvtkwidget->GetRenderWindow()->GetRenderers()->GetFirstRenderer();
       if (color->text() == "Background White")
               ren->SetBackground(1, 1, 1);
       else if (color->text() == "Background Black")
               ren->SetBackground(0, 0, 0);
       else if (color->text() == "Stereo Rendering")
       {
               ren->GetRenderWindow()->SetStereoRender(
                       !ren->GetRenderWindow()->GetStereoRender());
       }
       qvtkwidget->update();
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20090511/edf265a4/attachment.htm>
    
    
More information about the vtkusers
mailing list