[vtkusers] User defined interactor on QVTK Widget
Hughes, Mike
msh at cmrl.wustl.edu
Tue Jun 3 16:48:51 EDT 2008
I'm trying to write a Qt4/VTK program that uses a user defined interactor to
read mouse position when left and right mouse buttons are pressed in the
window. I can't get the interactor to work. I get either a blue screen with
the text "HELLO WORLD" (as expected) but with no interaction with the mouse,
or a grey window with no text and no evidence that mouse interactions are
captured
I think these are the relevant lines:
// interactor->SetRenderWindow(renderWindow); <-- Window is grey not
blue and has no text
widget->SetRenderWindow(renderWindow); // Window is blue and has
text "Hello World" but interactor does not work
What is the correct way to set up the user defined interactor?
#include <QApplication>
#include <QMainWindow>
#include <QVTKWidget.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkTextSource.h>
#include <vtkVectorText.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include "vtkInteractorStyle.h"
#include "vtkCallbackCommand.h"
#include "vtkTextMapper.h"
#include "vtkActor2D.h"
#include "vtkTextProperty.h"
QVTKInteractor *interactor;
void PickerInteractionCallback
(
vtkObject* vtkNotUsed(object),
unsigned long event,
void* clientdata,
void* vtkNotUsed(calldata)
)
{
int X, Y, *pick;
switch( event )
{
case vtkCommand::LeftButtonPressEvent:
interactor -> GetMousePosition(&X, &Y);
cout << "Left Mouse Button Mouse Pressed at (x,y) = ("<< X
<< ", " << Y << ")" << endl;
break;
case vtkCommand::RightButtonReleaseEvent:
interactor -> GetMousePosition(&X, &Y);
cout << "Right Mouse Button Mouse Pressed at (x,y) = ("<< X
<< ", " << Y << ")" << endl;
break;
}
//vtkWidget->GetRenderWindow()->Render();
}
int main( int argc, char **argv )
{
QApplication app(argc,argv);
QMainWindow *mainWindow = new QMainWindow;
mainWindow->setFixedSize(640,360);
QVTKWidget *widget = new QVTKWidget;
mainWindow->setCentralWidget(widget);
vtkTextMapper *textMapperForMode;
vtkActor2D *textActorForMode;
static char Modetext[120];
// Create a text mapper and actor to display HELLO WORLD
textMapperForMode = vtkTextMapper::New();
vtkTextProperty *tpropForMode = textMapperForMode->GetTextProperty();
tpropForMode->SetFontFamilyToArial();
tpropForMode->SetFontSize(12);
tpropForMode->BoldOn();
tpropForMode->ShadowOn();
tpropForMode->SetColor(1, 1, 0);
textActorForMode = vtkActor2D::New();
textActorForMode->VisibilityOn();
textActorForMode->SetMapper(textMapperForMode);
sprintf( Modetext, "HELLO WORLD");
textMapperForMode->SetInput( Modetext );
textActorForMode->SetPosition(10,10);
textActorForMode->VisibilityOn();
vtkInteractorStyle *style = vtkInteractorStyle::New();
vtkCallbackCommand * pickerCommand = vtkCallbackCommand::New();
pickerCommand->SetCallback(PickerInteractionCallback);
style->AddObserver(vtkCommand::RightButtonPressEvent, pickerCommand);
style->AddObserver(vtkCommand::LeftButtonPressEvent, pickerCommand);
vtkRenderer *renderer = vtkRenderer::New();
renderer->SetBackground(0.0,0.0,1.0);
renderer->AddActor2D(textActorForMode);
vtkRenderWindow *renderWindow = vtkRenderWindow::New();
renderWindow->AddRenderer(renderer);
interactor=QVTKInteractor::New();
interactor->SetInteractorStyle(style);
// interactor->SetRenderWindow(renderWindow); <-- Window is grey not
blue and has no text
widget->SetRenderWindow(renderWindow); // Window is blue and has
text "Hello World" but interactor does not work
mainWindow->show();
return app.exec();
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20080603/a0afeb6a/attachment.htm>
More information about the vtkusers
mailing list