[vtkusers] Problem in using vtkOrientationMarkerWidget
jeando.barnichon at free.fr
jeando.barnichon at free.fr
Fri Aug 10 06:22:54 EDT 2007
Hi,
I'm having troubles in using correctly the vtkOrientationMarkerWidget.
Starting from on a test shipped with vtk, I just tried to incorporate a
vtkOrientationMarkerWidget by adding :
// Add a vtkOrientationMarkerWidget
vtkOrientationMarkerWidget* widget = vtkOrientationMarkerWidget::New();
vtkAnnotatedCubeActor* act1 = vtkAnnotatedCubeActor::New();
act1->SetFaceTextScale(0.5);
vtkAxesActor* act2 = vtkAxesActor::New();
vtkAssembly* assemble = vtkAssembly::New();
assemble->AddPart(act1);
assemble->AddPart(act2);
widget->SetOrientationMarker(assemble);
widget->SetCurrentRenderer(ren);
widget->SetInteractor(iren);
widget->SetEnabled(1);
widget->SetInteractive(0);
widget->SetViewport(0., 0., 0.4, 0.4);
The full example is given at bottom of this email.
Well, the trouble is that it does not given exactly what I need:
- ok there is an orientation marker in the left bottom corner of the output,
- but the main output (a cylinder) has disappeared from the output window
and it is only displayed in the same viewport as the orientation widget.
I obviously missed some subtlety in the proper usage of
vtkOrientationMarkerWidget...
Any help welcomed.
Jean-Do
//
// Test for use of vtkOrientationMarkerWidget
//
#include "vtkCylinderSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkProperty.h"
#include "vtkCamera.h"
#include "vtkOrientationMarkerWidget.h"
#include "vtkAnnotatedCubeActor.h"
#include "vtkAxesActor.h"
#include "vtkAssembly.h"
int main()
{
// This creates a polygonal cylinder model with eight circumferential facets.
vtkCylinderSource *cylinder = vtkCylinderSource::New();
cylinder->SetResolution(8);
// The mapper is responsible for pushing the geometry into the graphics
// library. It may also do color mapping, if scalars or other attributes
// are defined.
vtkPolyDataMapper *cylinderMapper = vtkPolyDataMapper::New();
cylinderMapper->SetInputConnection(cylinder->GetOutputPort());
// The actor is a grouping mechanism: besides the geometry (mapper), it
// also has a property, transformation matrix, and/or texture map.
// Here we set its color and rotate it -22.5 degrees.
vtkActor *cylinderActor = vtkActor::New();
cylinderActor->SetMapper(cylinderMapper);
cylinderActor->GetProperty()->SetColor(1.0000, 0.3882, 0.2784);
cylinderActor->RotateX(30.0);
cylinderActor->RotateY(-45.0);
// Create the graphics structure. The renderer renders into the
// render window. The render window interactor captures mouse events
// and will perform appropriate camera or actor manipulation
// depending on the nature of the events.
vtkRenderer *ren = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(ren);
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
// Add the actors to the renderer, set the background and size
ren->AddActor(cylinderActor);
ren->SetBackground(0.1, 0.2, 0.4);
renWin->SetSize(400, 400);
//////////////////////////////////////////
// Begin of add vtkOrientationMarkerWidget
//////////////////////////////////////////
// Add a vtkOrientationMarkerWidget
vtkOrientationMarkerWidget* widget = vtkOrientationMarkerWidget::New();
vtkAnnotatedCubeActor* act1 = vtkAnnotatedCubeActor::New();
act1->SetFaceTextScale(0.5);
vtkAxesActor* act2 = vtkAxesActor::New();
vtkAssembly* assemble = vtkAssembly::New();
assemble->AddPart(act1);
assemble->AddPart(act2);
widget->SetOrientationMarker(assemble);
widget->SetCurrentRenderer(ren);
widget->SetInteractor(iren);
widget->SetEnabled(1);
widget->SetInteractive(0);
widget->SetViewport(0., 0., 0.4, 0.4);
//////////////////////////////////////////
// End of add vtkOrientationMarkerWidget
//////////////////////////////////////////
// We'll zoom in a little by accessing the camera and invoking a "Zoom"
// method on it.
ren->ResetCamera();
ren->GetActiveCamera()->Zoom(1.5);
renWin->Render();
// This starts the event loop and as a side effect causes an initial render.
iren->Start();
// Exiting from here, we have to delete all the instances that
// have been created.
assemble->Delete();
act2->Delete();
act1->Delete();
widget->Delete();
cylinder->Delete();
cylinderMapper->Delete();
cylinderActor->Delete();
ren->Delete();
renWin->Delete();
iren->Delete();
return 0;
}
More information about the vtkusers
mailing list