Man Linux: Main Page and Category List

NAME

       SoQtRenderArea - The SoQtRenderArea class adds scenegraph handling and
       event management.

       The SoQtRenderArea class is a component that adds scenegraph management
       and input device event handling to the SoQtGLWidget component.

SYNOPSIS

       #include <Inventor/Qt/SoQtRenderArea.h>

       Inherits SoQtGLWidget.

       Inherited by SoQtViewer.

   Public Member Functions
       SoQtRenderArea (QWidget *parent=NULL, const char *name=NULL, SbBool
           embed=TRUE, SbBool mouseInput=TRUE, SbBool keyboardInput=TRUE)
       ~SoQtRenderArea ()
       virtual void setSceneGraph (SoNode *scene)
       virtual SoNode * getSceneGraph (void)
       void setOverlaySceneGraph (SoNode *scene)
       SoNode * getOverlaySceneGraph (void)
       void setBackgroundColor (const SbColor &color)
       const SbColor & getBackgroundColor (void) const
       void setBackgroundIndex (int idx)
       int getBackgroundIndex (void) const
       void setOverlayBackgroundIndex (int idx)
       int getOverlayBackgroundIndex (void) const
       void setColorMap (int start, int num, const SbColor *colors)
       void setOverlayColorMap (int start, int num, const SbColor *colors)
       void setViewportRegion (const SbViewportRegion &newRegion)
       const SbViewportRegion & getViewportRegion (void) const
       void setTransparencyType (SoGLRenderAction::TransparencyType type)
       SoGLRenderAction::TransparencyType getTransparencyType (void) const
       void setAntialiasing (SbBool smoothing, int numPasses)
       void getAntialiasing (SbBool &smoothing, int &numPasses) const
       void setClearBeforeRender (SbBool enable, SbBool zbEnable=TRUE)
       SbBool isClearBeforeRender (void) const
       SbBool isClearZBufferBeforeRender (void) const
       void setClearBeforeOverlayRender (SbBool enable)
       SbBool isClearBeforeOverlayRender (void) const
       void setAutoRedraw (SbBool enable)
       SbBool isAutoRedraw (void) const
       void setRedrawPriority (uint32_t priority)
       uint32_t getRedrawPriority (void) const
       void render (void)
       void renderOverlay (void)
       void scheduleRedraw (void)
       void scheduleOverlayRedraw (void)
       void redrawOnSelectionChange (SoSelection *selection)
       void redrawOverlayOnSelectionChange (SoSelection *selection)
       void setEventCallback (SoQtRenderAreaEventCB *func, void *user=NULL)
       void setSceneManager (SoSceneManager *manager)
       SoSceneManager * getSceneManager (void) const
       void setOverlaySceneManager (SoSceneManager *manager)
       SoSceneManager * getOverlaySceneManager (void) const
       void setGLRenderAction (SoGLRenderAction *action)
       SoGLRenderAction * getGLRenderAction (void) const
       void setOverlayGLRenderAction (SoGLRenderAction *action)
       SoGLRenderAction * getOverlayGLRenderAction (void) const
       SbBool sendSoEvent (const SoEvent *event)
       void registerDevice (SoQtDevice *device)
       void unregisterDevice (SoQtDevice *device)

   Static Public Member Functions
       static uint32_t getDefaultRedrawPriority (void)

   Protected Member Functions
       SoQtRenderArea (QWidget *parent, const char *name, SbBool embed, SbBool
           mouseInput, SbBool keyboardInput, SbBool build)
       virtual void redraw (void)
       virtual void actualRedraw (void)
       virtual void redrawOverlay (void)
       virtual void actualOverlayRedraw (void)
       virtual SbBool processSoEvent (const SoEvent *const event)
       virtual void processEvent (QEvent *event)
       virtual void initGraphic (void)
       virtual void initOverlayGraphic (void)
       virtual void sizeChanged (const SbVec2s &size)
       virtual void widgetChanged (QWidget *widget)
       virtual void afterRealizeHook (void)
       QWidget * buildWidget (QWidget *parent)
       virtual const char * getDefaultWidgetName (void) const
       virtual const char * getDefaultTitle (void) const
       virtual const char * getDefaultIconTitle (void) const
       virtual SbBool glScheduleRedraw (void)

   Friends
       class SoQtRenderAreaP

Detailed Description

       The SoQtRenderArea class adds scenegraph handling and event management.

       The SoQtRenderArea class is a component that adds scenegraph management
       and input device event handling to the SoQtGLWidget component.

       The class has many convenient methods for controlling aspects of the
       rendering, like for instance transparency, aliasing and for scheduling
       of redraws.

       Native toolkit events are caught by SoQtRenderArea components,
       translated to Coin SoEvent instances and passed on to the scenegraph,
       in case the user is doing interactive operations on for instance Coin
       geometry draggers.

       SoQtRenderArea is the first non-abstract component in it’s inheritance
       hierarchy that you can use directly from client application code to set
       up a scenegraph viewer canvas.

       For an SoQtRenderArea component to properly display your scenegraph, it
       must contain an SoCamera-derived node and at least one SoLight-derived
       lightsource node.

       Here’s a complete, stand-alone example on how to set up an
       SoQtRenderArea with a scenegraph:

         #include <Inventor/Qt/SoQt.h>
         #include <Inventor/Qt/SoQtRenderArea.h>

         #include <Inventor/nodes/SoCube.h>
         #include <Inventor/nodes/SoRotor.h>
         #include <Inventor/nodes/SoArray.h>
         #include <Inventor/nodes/SoDirectionalLight.h>
         #include <Inventor/nodes/SoPerspectiveCamera.h>
         #include <Inventor/nodes/SoSeparator.h>

         // Set up a simple scenegraph, just for demonstration purposes.
         static SoSeparator *
         get_scene_graph(void)
         {
           SoSeparator * root = new SoSeparator;

           SoGroup * group = new SoGroup;

           SoRotor * rotor = new SoRotor;
           rotor->rotation = SbRotation(SbVec3f(0.2, 0.5, 0.9), M_PI/4.0);
           group->addChild(rotor);

           SoCube * cube = new SoCube;
           group->addChild(cube);

           SoArray * array = new SoArray;
           array->origin = SoArray::CENTER;
           array->addChild(group);
           array->numElements1 = 2;
           array->numElements2 = 2;
           array->separation1 = SbVec3f(4, 0, 0);
           array->separation2 = SbVec3f(0, 4, 0);

           root->addChild(array);
           return root;
         }

         int
         main(int argc, char ** argv)
         {
           QWidget * window = SoQt::init(argv[0]);

           SoSeparator * root = new SoSeparator;
           root->ref();

           SoPerspectiveCamera * camera;
           root->addChild(camera = new SoPerspectiveCamera);

           root->addChild(new SoDirectionalLight);

           SoSeparator * userroot = get_scene_graph();
           root->addChild(userroot);

           SoQtRenderArea * renderarea = new SoQtRenderArea(window);
           camera->viewAll(userroot, renderarea->getViewportRegion());
           renderarea->setSceneGraph(root);
           renderarea->setBackgroundColor(SbColor(0.0f, 0.2f, 0.3f));
           if (argc > 1) {
             renderarea->setTitle(argv[1]);
             renderarea->setIconTitle(argv[1]);
           }
           renderarea->show();

           SoQt::show(window);
           SoQt::mainLoop();

           delete renderarea;
           root->unref();

           return 0;
         }

Constructor & Destructor Documentation

   SoQtRenderArea::SoQtRenderArea (QWidget * parent = NULL, const char * name
       = NULL, SbBool embed = TRUE, SbBool mouseInput = TRUE, SbBool
       keyboardInput = TRUE)
       Public constructor.

   SoQtRenderArea::~SoQtRenderArea ()
       Destructor.

       References redrawOnSelectionChange(), redrawOverlayOnSelectionChange(),
       and unregisterDevice().

   SoQtRenderArea::SoQtRenderArea (QWidget * parent, const char * name, SbBool
       embed, SbBool mouseInput, SbBool keyboardInput, SbBool build)
       [protected]
       Protected constructor used by derived classes.

Member Function Documentation

   void SoQtRenderArea::setSceneGraph (SoNode * scene) [virtual]
       This method sets the scene graph to be rendered in the normal bitmap
       planes.

       See also:
           getSceneGraph(), setOverlaySceneGraph()

       Reimplemented in SoQtViewer.

   SoNode * SoQtRenderArea::getSceneGraph (void) [virtual]
       This method returns a reference to the scene graph root node as set by
       the user.

       See also:
           SoQtRenderArea::getSceneManager()

       Reimplemented in SoQtViewer.

   void SoQtRenderArea::setOverlaySceneGraph (SoNode * scene)
       This method sets the scene graph to render for the overlay bitmap
       planes.

       It will automatically take care of setting up overplay planes in the
       OpenGL canvas if the OpenGL hardware and driver supports it.

       Important note: not all graphics hardware and / or drivers for graphics
       hardware support overlay planes, so application programmers are adviced
       to find some other way of accomplishing what they want to do before
       resorting to using overlay planes. Using overlay planes will in
       practice severely limit the portability of applications which depend on
       them being available.

       See also:
           setSceneGraph(), getOverlaySceneGraph()

       References getOverlaySceneGraph(), and
       SoQtGLWidget::setOverlayRender().

   SoNode * SoQtRenderArea::getOverlaySceneGraph (void)
       This method returns the scene graph for the overlay scene.

       Referenced by glScheduleRedraw(), and setOverlaySceneGraph().

   void SoQtRenderArea::setBackgroundColor (const SbColor & color)
       This method sets the background color of the scene.

       References scheduleRedraw().

   const SbColor & SoQtRenderArea::getBackgroundColor (void) const
       This method returns the background color for the scene.

       Referenced by SoQtViewer::actualRedraw().

   void SoQtRenderArea::setBackgroundIndex (int idx)
       This method sets the index of the background color for the scene.

       References scheduleRedraw().

   int SoQtRenderArea::getBackgroundIndex (void) const
       This method returns the index of the background color for the scene.

   void SoQtRenderArea::setOverlayBackgroundIndex (int idx)
       This method sets the index of the background for the overlay scene.

       References scheduleOverlayRedraw().

   int SoQtRenderArea::getOverlayBackgroundIndex (void) const
       This method returns the index of the background for the overlay scene.

   void SoQtRenderArea::setColorMap (int start, int num, const SbColor *
       colors)
       This method sets the colormap for the scene.

       References scheduleRedraw().

   void SoQtRenderArea::setOverlayColorMap (int start, int num, const SbColor
       * colors)
       This method sets the colormap for the overlay scene.

       References scheduleOverlayRedraw().

   void SoQtRenderArea::setViewportRegion (const SbViewportRegion & region)
       This method sets the viewport region.

       References scheduleRedraw().

       Referenced by sizeChanged().

   const SbViewportRegion & SoQtRenderArea::getViewportRegion (void) const
       This method returns the viewport region.

       Referenced by SoQtConstrainedViewer::findUpDirection(),
       SoQtViewer::seekToPoint(), SoQtViewer::setSceneGraph(), and
       SoQtViewer::viewAll().

   void SoQtRenderArea::setTransparencyType
       (SoGLRenderAction::TransparencyType type)
       This method sets the transparency type to be used for the scene.

       References scheduleRedraw().

   SoGLRenderAction::TransparencyType SoQtRenderArea::getTransparencyType
       (void) const
       This method returns the transparency type used for the scene.

   void SoQtRenderArea::setAntialiasing (SbBool smoothing, int numPasses)
       This method sets the antialiasing used for the scene.

       The smoothing flag signifies whether or not line and point aliasing
       should be turned on. See documentation of
       SoGLRenderAction::setSmoothing(), which will be called from this
       function.

       numPasses gives the number of re-renderings to do of the scene,
       blending together the results from slight ’jitters’ of the camera view,
       into the OpenGL accumulation buffer. For further information, see
       documentation of SoGLRenderAction::setNumPasses() and
       SoQtGLWidget::setAccumulationBuffer().

       References scheduleRedraw().

   void SoQtRenderArea::getAntialiasing (SbBool & smoothing, int & numPasses)
       const
       This method returns the antialiasing used for the scene.

   void SoQtRenderArea::setClearBeforeRender (SbBool enable, SbBool zbEnable =
       TRUE)
       This method sets whether the render buffer should be cleared before
       rendering.

       The first argument specifies whether or not to clear out the pixels in
       the buffer, the second argument specifies whether or not the z-buffer
       values should be cleared between renderings.

       Setting the first argument to FALSE can for instance be used when you
       want to clear out the buffer yourself, for instance by drawing a
       background image ’under’ the 3D scene rendered by Coin / Inventor.

       References scheduleRedraw().

   SbBool SoQtRenderArea::isClearBeforeRender (void) const
       This method returns whether the render buffer is cleared before each
       render.

       Referenced by SoQtViewer::actualRedraw().

   SbBool SoQtRenderArea::isClearZBufferBeforeRender (void) const
       This method returns whether the render buffer’s Z buffer is cleared
       before each render.

       Referenced by SoQtViewer::actualRedraw().

   void SoQtRenderArea::setClearBeforeOverlayRender (SbBool enable)
       This method sets whether the overlay render buffer should be cleared
       before each render or not.

       References scheduleOverlayRedraw().

   SbBool SoQtRenderArea::isClearBeforeOverlayRender (void) const
       This method returns whether the overlay render buffer is cleared before
       each redraw or not.

   void SoQtRenderArea::setAutoRedraw (SbBool enable)
       This method sets whether redrawing should be handled automatically or
       not when data in the scenegraph changes.

       The default setting causes the renderarea to automatically trigger a
       redraw of the scenegraph contents.

   SbBool SoQtRenderArea::isAutoRedraw (void) const
       This method returns whether redrawing is handled automatically not.

   void SoQtRenderArea::setRedrawPriority (uint32_t priority)
       This method sets the redraw priority.

   uint32_t SoQtRenderArea::getRedrawPriority (void) const
       This method returns the redraw priority.

   uint32_t SoQtRenderArea::getDefaultRedrawPriority (void) [static]
       This function returns the default redraw priority.

   void SoQtRenderArea::render (void)
       This method causes the immediate rendering of the scene, by calling
       SoQtRenderArea::redraw().

       References redraw().

   void SoQtRenderArea::renderOverlay (void)
       This method renders the overlay scene.

       References redrawOverlay().

   void SoQtRenderArea::scheduleRedraw (void)
       This method schedules a redraw to happen at a later time (when the
       application has processed it’s other events first).

       Referenced by SoQtFlyViewer::actualRedraw(),
       SoQtExaminerViewer::actualRedraw(), glScheduleRedraw(),
       SoQtViewer::setAnaglyphStereoColorMasks(), setAntialiasing(),
       SoQtViewer::setAutoClipping(), SoQtViewer::setAutoClippingStrategy(),
       setBackgroundColor(), setBackgroundIndex(), setClearBeforeRender(),
       setColorMap(), SoQtExaminerViewer::setFeedbackSize(),
       SoQtExaminerViewer::setFeedbackVisibility(),
       SoQtViewer::setStereoOffset(), SoQtViewer::setStereoViewing(),
       setTransparencyType(), SoQtFlyViewer::setViewing(),
       setViewportRegion(), and SoQtViewer::setWireframeOverlayColor().

   void SoQtRenderArea::scheduleOverlayRedraw (void)
       This method schedules a redraw of the overlay scene.

       Referenced by glScheduleRedraw(), setClearBeforeOverlayRender(),
       setOverlayBackgroundIndex(), and setOverlayColorMap().

   void SoQtRenderArea::redrawOnSelectionChange (SoSelection * selection)
       Do automatic redraw of the scenegraph when a selection under the
       SoSelection node is changed.

       Pass NULL to deactivate.

       (Only one SoSelection node can be monitored at any given time. This is
       obviously a rather silly design flaw. We choose to match the original
       Inventor API here, but this will probably change in the next major
       revision of the library.)

       Referenced by ~SoQtRenderArea().

   void SoQtRenderArea::redrawOverlayOnSelectionChange (SoSelection *
       selection)
       Do automatic redraw of the scenegraph in the overlay planes when a
       selection under the SoSelection node is changed.

       Pass NULL to deactivate.

       See also:
           SoQtRenderArea::redrawOnSelectionChange()

       Referenced by ~SoQtRenderArea().

   void SoQtRenderArea::setEventCallback (SoQtRenderAreaEventCB * func, void *
       user = NULL)
       This method sets the render area event callback.

   void SoQtRenderArea::setSceneManager (SoSceneManager * manager)
       This method sets the normal scene SoSceneManager object.

       The previous set scene manager is deleted, and there is no way to
       currently avoid that. This might change in the future.

       References SoQtGLWidget::getGLSize().

   SoSceneManager * SoQtRenderArea::getSceneManager (void) const
       This method returns the normal scene SoSceneManager object.

       Having a reference to the SoSceneManager instance is useful for getting
       at the real root node of the rendering scenegraph, including camera,
       headlight and miscellaneous drawstyle nodes. The getSceneGraph() method
       will only return the user scenegrah for SoQtRenderArea subclass
       SoQtViewer and further subclasses. The reason this is not always what
       you want is because certain actions (like the SoRayPickAction) needs to
       traverse a valid camera if it should work as expected.

       If you need to get a pointer to the real root node use this method to
       get the SoSceneManager instance reference used by the SoQtRenderArea,
       then use SoSceneManager::getSceneGraph() to get the root node Coin uses
       for rendering.

       Referenced by SoQtViewer::actualRedraw(),
       SoQtConstrainedViewer::findUpDirection(), and initGraphic().

   void SoQtRenderArea::setOverlaySceneManager (SoSceneManager * manager)
       This method sets the overlay scene SoSceneManager object.

       The previous set scene manager is not freed and will leak unless the
       user frees it.

       References SoQtGLWidget::getGLSize().

   SoSceneManager * SoQtRenderArea::getOverlaySceneManager (void) const
       This method returns the overlay scene SoSceneManager object.

       Referenced by initOverlayGraphic().

   void SoQtRenderArea::setGLRenderAction (SoGLRenderAction * action)
       This method sets the SoGLRenderAction object for the normal scene.

       References SoQtComponent::getSize(), and sizeChanged().

   SoGLRenderAction * SoQtRenderArea::getGLRenderAction (void) const
       This method returns the SoGLRenderAction object for the normal scene.

       Referenced by SoQtViewer::setViewing().

   void SoQtRenderArea::setOverlayGLRenderAction (SoGLRenderAction * action)
       This method sets the SoGLRenderAction object for rendering the overlay
       scenegraph.

   SoGLRenderAction * SoQtRenderArea::getOverlayGLRenderAction (void) const
       This method returns the SoGLRenderAction object for the overlay scene
       graph.

   SbBool SoQtRenderArea::sendSoEvent (const SoEvent * event)
       This method posts and processes an SoEvent object to the
       SoQtRenderArea-based component and returns the result value from the
       event handler. This is a synchronous operation.

       References processSoEvent().

   void SoQtRenderArea::registerDevice (SoQtDevice * device)
       This method adds device to the list of devices handling events for this
       component.

       References SoQtDevice::enable(), SoQtGLWidget::getGLSize(),
       SoQtGLWidget::getGLWidget(), and SoQtDevice::setWindowSize().

       Referenced by afterRealizeHook().

   void SoQtRenderArea::unregisterDevice (SoQtDevice * device)
       This method removes device from the list of devices handling events for
       this component.

       References SoQtDevice::disable(), and SoQtGLWidget::getGLWidget().

       Referenced by ~SoQtRenderArea().

   void SoQtRenderArea::redraw (void) [protected, virtual]
       This method is called from the render() method and takes care of
       setting up the context for OpenGL rendering (by making the OpenGL
       canvas the current context and specifying either the front or back
       buffer for rendering, depending on whether we’re in singlebuffer or
       doublebuffer mode).

       After setting up the OpenGL context, it calls actualRedraw() for the
       actual scenegraph rendering to take place.

       Finally, the OpenGL buffers are either swapped back-to-front (for
       doublebuffering) or flushed (for singlebuffering), and our OpenGL
       context is unlocked.

       The application programmer may override this method if extreme low-
       level control of the rendering process is necessary. Usually, you
       should be able to get away with overriding actualRedraw() for special
       cases, though.

       Implements SoQtGLWidget.

       References actualRedraw(), SoQtGLWidget::glFlushBuffer(),
       SoQtGLWidget::glLockNormal(), SoQtGLWidget::glSwapBuffers(),
       SoQtGLWidget::glUnlockNormal(), SoQtGLWidget::hasNormalGLArea(),
       SoQtGLWidget::isDoubleBuffer(),
       SoQtGLWidget::isDrawToFrontBufferEnable(), SoQtComponent::isVisible(),
       and SoQtGLWidget::waitForExpose.

       Referenced by render().

   void SoQtRenderArea::actualRedraw (void) [protected, virtual]
       This method instantly redraws the normal (non-overlay) scenegraph by
       calling SoSceneManager::render().

       Subclasses may override this method to add their own rendering before
       or after Coin renders it’s scenegraph.

       The following is a complete example that demonstrates one way of adding
       both a background image and foreground (overlay) geometry to the
       ’normal’ rendering:

         // This example shows how to put a permanent background image on your
         // viewer canvas, below the 3D graphics, plus overlay foreground
         // geometry.  Written by mortene.  Copyright Systems in Motion 2002.

         // *************************************************************************

         #include <Inventor/Qt/SoQt.h>
         #include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
         #include <Inventor/nodes/SoBaseColor.h>
         #include <Inventor/nodes/SoCone.h>
         #include <Inventor/nodes/SoCube.h>
         #include <Inventor/nodes/SoImage.h>
         #include <Inventor/nodes/SoLightModel.h>
         #include <Inventor/nodes/SoOrthographicCamera.h>
         #include <Inventor/nodes/SoRotationXYZ.h>
         #include <Inventor/nodes/SoSeparator.h>
         #include <Inventor/nodes/SoTranslation.h>

         #include <GL/gl.h>

         // *************************************************************************

         class MyExaminerViewer : public SoQtExaminerViewer {

         public:
           MyExaminerViewer(QWidget * parent, const char * filename);
           ~MyExaminerViewer();

         protected:
           virtual void actualRedraw(void);

         private:
           SoSeparator * bckgroundroot;
           SoSeparator * foregroundroot;
           SoRotationXYZ * arrowrotation;
         };

         MyExaminerViewer::MyExaminerViewer(QWidget * parent, const char * filename)
           : SoQtExaminerViewer(parent)
         {
           // Coin should not clear the pixel-buffer, so the background image
           // is not removed.
           this->setClearBeforeRender(FALSE, TRUE);

           // Set up background scenegraph with image in it.

           this->bckgroundroot = new SoSeparator;
           this->bckgroundroot->ref();

           SoOrthographicCamera * cam = new SoOrthographicCamera;
           cam->position = SbVec3f(0, 0, 1);
           cam->height = 1;
           // SoImage will be at z==0.0.
           cam->nearDistance = 0.5;
           cam->farDistance = 1.5;

           SoImage * img = new SoImage;
           img->vertAlignment = SoImage::HALF;
           img->horAlignment = SoImage::CENTER;
           img->filename = filename;

           this->bckgroundroot->addChild(cam);
           this->bckgroundroot->addChild(img);

           // Set up foreground, overlayed scenegraph.

           this->foregroundroot = new SoSeparator;
           this->foregroundroot->ref();

           SoLightModel * lm = new SoLightModel;
           lm->model = SoLightModel::BASE_COLOR;

           SoBaseColor * bc = new SoBaseColor;
           bc->rgb = SbColor(1, 1, 0);

           cam = new SoOrthographicCamera;
           cam->position = SbVec3f(0, 0, 5);
           cam->height = 10;
           cam->nearDistance = 0;
           cam->farDistance = 10;

           const double ARROWSIZE = 2.0;

           SoTranslation * posit = new SoTranslation;
           posit->translation = SbVec3f(-2.5 * ARROWSIZE, 1.5 * ARROWSIZE, 0);

           arrowrotation = new SoRotationXYZ;
           arrowrotation->axis = SoRotationXYZ::Z;

           SoTranslation * offset = new SoTranslation;
           offset->translation = SbVec3f(ARROWSIZE/2.0, 0, 0);

           SoCube * cube = new SoCube;
           cube->width = ARROWSIZE;
           cube->height = ARROWSIZE/15.0;

           this->foregroundroot->addChild(cam);
           this->foregroundroot->addChild(lm);
           this->foregroundroot->addChild(bc);
           this->foregroundroot->addChild(posit);
           this->foregroundroot->addChild(arrowrotation);
           this->foregroundroot->addChild(offset);
           this->foregroundroot->addChild(cube);
         }

         MyExaminerViewer::~MyExaminerViewer()
         {
           this->bckgroundroot->unref();
           this->foregroundroot->unref();
         }

         void
         MyExaminerViewer::actualRedraw(void)
         {
           // Must set up the OpenGL viewport manually, as upon resize
           // operations, Coin won’t set it up until the SoGLRenderAction is
           // applied again. And since we need to do glClear() before applying
           // the action..
           const SbViewportRegion vp = this->getViewportRegion();
           SbVec2s origin = vp.getViewportOriginPixels();
           SbVec2s size = vp.getViewportSizePixels();
           glViewport(origin[0], origin[1], size[0], size[1]);

           const SbColor col = this->getBackgroundColor();
           glClearColor(col[0], col[1], col[2], 0.0f);
           glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

           // Render our scenegraph with the image.
           SoGLRenderAction * glra = this->getGLRenderAction();
           glra->apply(this->bckgroundroot);

           // Render normal scenegraph.
           SoQtExaminerViewer::actualRedraw();

           // Increase arrow angle with 1/1000 ° every frame.
           arrowrotation->angle = arrowrotation->angle.getValue() + (0.001 / M_PI * 180);
           // Render overlay front scenegraph.
           glClear(GL_DEPTH_BUFFER_BIT);
           glra->apply(this->foregroundroot);
         }

         // *************************************************************************

         int
         main(int argc, char ** argv)
         {
           if (argc != 2) {
             (void)fprintf(stderr, ’0sage: %s <image-filename>0, argv[0]);
             exit(1);
           }

           QWidget * window = SoQt::init(argv[0]);

           MyExaminerViewer * viewer = new MyExaminerViewer(window, argv[1]);

           viewer->setSceneGraph(new SoCone);
           viewer->show();

           SoQt::show(window);
           SoQt::mainLoop();

           delete viewer;
           return 0;
         }

         // *************************************************************************

       Reimplemented in SoQtViewer, SoQtPlaneViewer, SoQtExaminerViewer, and
       SoQtFlyViewer.

       References SoQtComponent::isVisible().

       Referenced by redraw().

   void SoQtRenderArea::redrawOverlay (void) [protected, virtual]
       This method redraws the overlay scene.

       Reimplemented from SoQtGLWidget.

       References actualOverlayRedraw(), SoQtGLWidget::glFlushBuffer(),
       SoQtGLWidget::glLockOverlay(), SoQtGLWidget::glUnlockOverlay(),
       SoQtGLWidget::hasOverlayGLArea(), SoQtComponent::isVisible(), and
       SoQtGLWidget::waitForExpose.

       Referenced by renderOverlay().

   void SoQtRenderArea::actualOverlayRedraw (void) [protected, virtual]
       This method renders the overlay scene.

       References SoQtComponent::isVisible().

       Referenced by redrawOverlay().

   SbBool SoQtRenderArea::processSoEvent (const SoEvent *const  event)
       [protected, virtual]
       Toolkit-native events are attempted converted to Coin-generic events in
       the SoQtRenderArea::processEvent() method. If this succeeds, they are
       forwarded to this method.

       This is a virtual method, and is overridden in it’s subclasses to catch
       events of particular interest to the viewer classes, for instance.

       Return TRUE iff the event was processed. If not it should be passed on
       further up in the inheritance hierarchy by the caller. This last point
       is extremely important to take note of if you are expanding the toolkit
       with your own viewer class.

       This method is not part of the original SGI InventorXt API. Note that
       you can still override the toolkit-native processEvent() method instead
       of this ’generic’ method.

       Reimplemented in SoQtViewer, SoQtFullViewer, SoQtPlaneViewer,
       SoQtExaminerViewer, and SoQtFlyViewer.

       Referenced by processEvent(), and sendSoEvent().

   void SoQtRenderArea::processEvent (QEvent * event) [protected, virtual]
       Overrides SoQtGLWidget::processEvent() to attempt to convert toolkit-
       native events to Coin-generic events. If this succeeds, the generic
       SoEvent is forwarded to SoQtRenderArea::processSoEvent().

       Reimplemented from SoQtGLWidget.

       References SoQtGLWidget::glLockNormal(),
       SoQtGLWidget::glUnlockNormal(), and processSoEvent().

   void SoQtRenderArea::initGraphic (void) [protected, virtual]
       This method is invoked to initialize the normal graphics.

       Reimplemented from SoQtGLWidget.

       References getSceneManager(), and SoQtGLWidget::isRGBMode().

   void SoQtRenderArea::initOverlayGraphic (void) [protected, virtual]
       This method is invoked to initialize the overlay graphics.

       Reimplemented from SoQtGLWidget.

       References getOverlaySceneManager().

   void SoQtRenderArea::sizeChanged (const SbVec2s & size) [protected,
       virtual]
       Called internally from within the SoQt library when the widget embedded
       in a component changes it size, which is usually triggered by end-user
       interaction.

       This method is then invoked to notify the component that the size has
       changed. It is called from the top and all the way down to the bottom,
       the size being adjusted to take into account extra decorations having
       been added at each level in the component class hierarchy.

       Reimplemented from SoQtGLWidget.

       Reimplemented in SoQtViewer, and SoQtFullViewer.

       References SoQtObject::getClassTypeId(), SoQtGLWidget::getGLSize(),
       SoQtObject::getTypeId(), SoQtGLWidget::setGLSize(), and
       setViewportRegion().

       Referenced by setGLRenderAction().

   void SoQtRenderArea::widgetChanged (QWidget * w) [protected, virtual]
       This is the method which gets called whenever we change which OpenGL
       widget is used.

       Should be overridden in subclasses which directly or indirectly store
       the return value from the SoQtGLWidget::getGLWidget() method.

       See also:
           sizeChanged()

       Reimplemented from SoQtGLWidget.

       References SoQtGLWidget::isRGBMode().

   void SoQtRenderArea::afterRealizeHook (void) [protected, virtual]
       A function ’hook’ / callback invoked just after the window for the
       component has been realized.

       Override this if you need specific initialization for your own
       component or viewer class to happen right after it has been made
       visible, but remember to call upwards in the inheritance hierarchy:

         void
         MyLittleViewer::afterRealizeHook(void)
         {
           <superclass>::afterRealizeHook();
           // [own initialization here]
         }

       Reimplemented from SoQtComponent.

       Reimplemented in SoQtPlaneViewer, SoQtExaminerViewer, and
       SoQtFlyViewer.

       References SoQtSpaceball::exists(), and registerDevice().

   QWidget * SoQtRenderArea::buildWidget (QWidget * parent) [protected]
       This method builds the component contents in the given parent widget.
       For subclasses adding new user interface items, this method is
       typically overridden in the following manner:

         QWidget * MyOwnViewer::buildWidget(QWidget * parent)
         {
            QWidget * superw = <superclass>::buildWidget(parent);
            // [then move superw within MyOwnViewer framework and add own
            // user interface components]
         }

       Reimplemented from SoQtGLWidget.

       Reimplemented in SoQtFullViewer, and SoQtPlaneViewer.

       References SoQtDevice::enable(), and SoQtGLWidget::getGLWidget().

       Referenced by SoQtViewer::SoQtViewer().

   const char * SoQtRenderArea::getDefaultWidgetName (void) const [protected,
       virtual]
       This method returns the default name of a component widget class.

       It should be overridden by derived non-abstract classes for the topmost
       widget in the component to have a proper name.

       Reimplemented from SoQtComponent.

       Reimplemented in SoQtPlaneViewer, SoQtExaminerViewer, and
       SoQtFlyViewer.

   const char * SoQtRenderArea::getDefaultTitle (void) const [protected,
       virtual]
       This method returns the default window caption string of the component.

       It should be overridden by derived non-abstract classes so the window
       and popup menu will get a proper title.

       Reimplemented from SoQtComponent.

       Reimplemented in SoQtPlaneViewer, SoQtExaminerViewer, and
       SoQtFlyViewer.

   const char * SoQtRenderArea::getDefaultIconTitle (void) const [protected,
       virtual]
       This method returns the default icon title of the component.

       It should be overridden by derived non-abstract classes so icons will
       get proper titles.

       Reimplemented from SoQtComponent.

       Reimplemented in SoQtPlaneViewer, SoQtExaminerViewer, and
       SoQtFlyViewer.

   SbBool SoQtRenderArea::glScheduleRedraw (void) [protected, virtual]
       Will be called whenever scene graph needs to be redrawn. If this method
       return FALSE, redraw() will be called immediately.

       Default method simply returns FALSE. Override this method to schedule a
       redraw and return TRUE if you’re trying to do The Right Thing.

       Reimplemented from SoQtGLWidget.

       References getOverlaySceneGraph(), SoQtGLWidget::hasOverlayGLArea(),
       scheduleOverlayRedraw(), and scheduleRedraw().

Author

       Generated automatically by Doxygen for SoQt from the source code.