[vtkusers] Problem in using vtkOrientationMarkerWidget

jeando.barnichon at free.fr jeando.barnichon at free.fr
Sat Aug 11 04:32:21 EDT 2007


Hi Dean,

thank for your help.
But a strange thing is that even when I apply your correction, I still get the
same result. There must be another error I guess.
Any other idea?

A question : do you obtain the same result as me if you try the test I joined at
the end of the first mail?
Forgot to mention, but I'm using vtk5.0.3 on WinXP compiled with VC7.1

Jean-Do


Selon Dean Inglis <dean.inglis at sympatico.ca>:

> Hi Jean-Do,
>
> you do not need to set the renderer explicitly
> for the widget, in fact it is incorrect to do this,
> just set the interactor:
>
>   widget->SetOrientationMarker(assemble);
> //  widget->SetCurrentRenderer(ren);
>   widget->SetInteractor(iren);
>   widget->SetEnabled(1);
>   widget->SetInteractive(0);
>   widget->SetViewport(0., 0., 0.4, 0.4);
>
> this is because the marker widget maintains
> a separate renderer to render itself in the overlay plane,
> but in the same renderwindow as your main renderer that
> you added your cylinder to.
>
> Dean
>
>
> 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