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