Provided by: inventor-doc_2.1.5-10-18_all bug

NAME

       SoXtViewer — viewer component lowest base class

INHERITS FROM

       SoXtComponent > SoXtGLWidget > SoXtRenderArea > SoXtViewer

SYNOPSIS

       #include <Inventor/Xt/viewers/SoXtViewer.h>

     typedef void        SoXtViewerCB(void *userData, SoXtViewer *viewer)

     enum Type {
          SoXtViewer::BROWSER  camera views scene, but is not added to scene
          SoXtViewer::EDITOR   camera is added to user's scene
     }

     enum DrawStyle {
          SoXtViewer::VIEW_AS_IS       unchanged
          SoXtViewer::VIEW_HIDDEN_LINE render only the front most lines
          SoXtViewer::VIEW_NO_TEXTURE  render withought textures
          SoXtViewer::VIEW_LOW_COMPLEXITY
                                       render low complexity and no texture
          SoXtViewer::VIEW_LINE        wireframe draw style
          SoXtViewer::VIEW_LOW_RES_LINE
                                       low complexity wireframe with no depth comparison
          SoXtViewer::VIEW_POINT       point draw style
          SoXtViewer::VIEW_LOW_RES_POINT
                                       low complexity point with no depth comparison
          SoXtViewer::VIEW_BBOX        bounding box draw style with no depth comparison
          SoXtViewer::VIEW_SAME_AS_STILL
                                       forces  the  INTERACTIVE draw style to automatically match
                                            STILL
     }

     enum DrawType {
          SoXtViewer::STILL        applies to static rendering
          SoXtViewer::INTERACTIVE  applies to rendering while interactive viewing
     }

     enum BufferType {
          SoXtViewer::BUFFER_SINGLE  single buffer
          SoXtViewer::BUFFER_DOUBLE  double buffer
          SoXtViewer::BUFFER_INTERACTIVE
                                     double buffer while interactive viewing
     }

          Methods from class SoXtViewer:

     virtual void            setCamera(SoCamera *cam)
     SoCamera *              getCamera()
     virtual void            setCameraType(SoType type)
     SoType                  getCameraType()
     virtual void            viewAll()
     virtual void            saveHomePosition()
     virtual void            resetToHomePosition()
     virtual void            setHeadlight(SbBool onOrOff)
     SbBool                  isHeadlight()
     SoDirectionalLight *    getHeadlight()
     virtual void            setDrawStyle(SoXtViewer::DrawType type, SoXtViewer::DrawStyle style)
     SoXtViewer::DrawStyle   getDrawStyle(SoXtViewer::DrawType type)
     virtual void            setBufferingType(SoXtViewer::BufferType type)
     SoXtViewer::BufferType  getBufferingType()
     virtual void            setViewing(SbBool onOrOff)
     SbBool                  isViewing() const
     virtual void            setCursorEnabled(SbBool onOrOff)
     SbBool                  isCursorEnabled() const
     void                    setAutoClipping(SbBool onOrOff)
     SbBool                  isAutoClipping() const
     virtual void            setStereoViewing(SbBool onOrOff)
     virtual SbBool          isStereoViewing()
     void                    setStereoOffset(float dist)
     float                   getStereoOffset()
     void                    setDetailSeek(SbBool onOrOff)
     SbBool                  isDetailSeek()
     void                    setSeekTime(float seconds)
     float                   getSeekTime()
     void                    addStartCallback(SoXtViewerCB *f, void *userData = NULL)
     void                    addFinishCallback(SoXtViewerCB *f, void *userData = NULL)
     void                    removeStartCallback(SoXtViewerCB *f, void *userData = NULL)
     void                    removeFinishCallback(SoXtViewerCB *f, void *userData = NULL)
     void                    copyView(Time eventTime)
     void                    pasteView(Time eventTime)
     virtual void            recomputeSceneSize()

          Methods from class SoXtRenderArea:

     virtual void              setSceneGraph(SoNode *newScene)
     virtual SoNode *          getSceneGraph()
     void                      setOverlaySceneGraph(SoNode *newScene)
     SoNode *                  getOverlaySceneGraph()
     void                      registerDevice(SoXtDevice *)
     void                      unregisterDevice(SoXtDevice *)
     void                      setBackgroundColor(const SbColor &c)
     const SbColor &           getBackgroundColor() const
     void                      setBackgroundIndex(int index)
     int                       getBackgroundIndex() const
     void                      setOverlayBackgroundIndex(int index)
     int                       getOverlayBackgroundIndex() const
     void                      setColorMap(int startIndex, int num, const SbColor *colors)
     void                      setOverlayColorMap(int startIndex, int num, const SbColor *colors)
     void                      setViewportRegion(const SbViewportRegion &newRegion)
     const SbViewportRegion &  getViewportRegion() const
     void                      setTransparencyType(SoGLRenderAction::TransparencyType type)
     SoGLRenderAction::TransparencyType
                               getTransparencyType() const
     void                      setAntialiasing(SbBool smoothing, int numPasses)
     void                      getAntialiasing(SbBool &smoothing, int &numPasses) const
     void                      setClearBeforeRender(SbBool trueOrFalse)
     SbBool                    isClearBeforeRender() const
     void                      setClearBeforeOverlayRender(SbBool trueOrFalse)
     SbBool                    isClearBeforeOverlayRender() const
     void                      setAutoRedraw(SbBool trueOrFalse)
     SbBool                    isAutoRedraw() const
     void                      setRedrawPriority(uint32_t priority)
     uint32_t                  getRedrawPriority() const
     static uint32_t           getDefaultRedrawPriority()
     void                      render()
     void                      renderOverlay()
     void                      scheduleRedraw()
     void                      scheduleOverlayRedraw()
     void                      redrawOnSelectionChange(SoSelection *s)
     void                      redrawOverlayOnSelectionChange(SoSelection *s)
     void                      setEventCallback(SoXtRenderAreaEventCB  *fcn,  void  *userData   =
                                    NULL)
     void                      setGLRenderAction(SoGLRenderAction *ra)
     SoGLRenderAction *        getGLRenderAction() const
     void                      setOverlayGLRenderAction(SoGLRenderAction *ra)
     SoGLRenderAction *        getOverlayGLRenderAction() const
     void                      setSceneManager(SoSceneManager *sm)
     SoSceneManager *          getSceneManager() const
     void                      setOverlaySceneManager(SoSceneManager *sm)
     SoSceneManager *          getOverlaySceneManager() const

          Methods from class SoXtGLWidget:

     void                setBorder(SbBool onOrOff)
     SbBool              isBorder() const
     virtual void        setDoubleBuffer(SbBool onOrOff)
     SbBool              isDoubleBuffer()
     Window              getNormalWindow()
     Window              getOverlayWindow()
     GLXContext          getNormalContext()
     GLXContext          getOverlayContext()
     Widget              getNormalWidget()
     Widget              getOverlayWidget()
     virtual void        setNormalVisual(XVisualInfo *vis)
     XVisualInfo *       getNormalVisual()
     virtual void        setOverlayVisual(XVisualInfo *vis)
     XVisualInfo *       getOverlayVisual()
     void                setDrawToFrontBufferEnable(SbBool enableFlag)
     SbBool              isDrawToFrontBufferEnable() const

          Methods from class SoXtComponent:

     virtual void            show()
     virtual void            hide()
     SbBool                  isVisible()
     Widget                  getWidget() const
     SbBool                  isTopLevelShell() const
     Widget                  getShellWidget() const
     Widget                  getParentWidget() const
     void                    setSize(const SbVec2s &size)
     SbVec2s                 getSize()
     Display *               getDisplay()
     void                    setTitle(const char *newTitle)
     const char *            getTitle() const
     void                    setIconTitle(const char *newIconTitle)
     const char *            getIconTitle() const
     void                    setWindowCloseCallback(SoXtComponentCB *func, void *data = NULL)
     static SoXtComponent *  getComponent(Widget w)
     const char *            getWidgetName() const
     const char *            getClassName() const

DESCRIPTION

       This  is  the  lowest  base  class  for viewer components. This class adds the notion of a
       camera  to  the  SoXtRenderArea  class.  Whenever  a   new   scene   is   specified   with
       setSceneGraph(),  the  first  camera  encountered  will  be  by default used as the edited
       camera. If no camera is found in the scene, the viewer will automatically create  one.  If
       the  viewer type is SoXtViewer::BROWSER then the camera is told to view the supplied scene
       graph  but  is  not  added  beneath  that  scene  graph  root.  If  the  viewer  type   is
       SoXtViewer::EDITOR then the camera is added beneath the supplied scene graph root.

       In  addition  to automatically creating a camera if needed, this base class also creates a
       headlight (directional light which is made to follow the  camera),  enables  the  user  to
       change  drawing  styles (like wireframe or move wireframe), and buffering types. This base
       class also provides a convenient way to have the camera near and far  clipping  planes  be
       automatically adjusted to minimize the clipping of objects in the scene.

       Viewers  allow  the application to shadow event processing. When the application registers
       an event processing callback by calling setEventCallback() the  viewer  will  invoke  this
       callback  for  every  X  event  it  receives.  However, unlike the render area, the viewer
       ignores the return value of this callback, and processes the event as usual.  This  allows
       the  application  to expand viewing capabilities without breaking the viewing paradigm. It
       is an easy way to hook up other devices, like the spaceball, to an existing viewer.

METHODS

     virtual void            setCamera(SoCamera *cam)
     SoCamera *              getCamera()
          Set and get the edited camera. Setting the camera is only needed if  the  first  camera
          found  in the scene when setting the scene graph isn't the one the user really wants to
          edit.

     virtual void            setCameraType(SoType type)
     SoType                  getCameraType()
          Set and get the camera type that will be created by the viewer if no cameras are  found
          in  the  scene  graph (see SoPerspectiveCamera and SoOrthographicCamera). By default an
          SoPerspectiveCamera will be created if no camera are found.

          Note: the set method will only take effect next time a scene graph is specified (and if
          no camera are found).

     virtual void            viewAll()
          Changes  the  camera  position to view the entire scene (the camera zoom or orientation
          isn't changed).

     virtual void            saveHomePosition()
     virtual void            resetToHomePosition()
          Saves and restores the camera values.

     virtual void            setHeadlight(SbBool onOrOff)
     SbBool                  isHeadlight()
     SoDirectionalLight *    getHeadlight()
          Turns the headlight on/off (default on) and return the headlight node.

     virtual void            setDrawStyle(SoXtViewer::DrawType type, SoXtViewer::DrawStyle style)
     SoXtViewer::DrawStyle   getDrawStyle(SoXtViewer::DrawType type)
          Sets/gets the current drawing style in the  main  view  —  The  user  can  specify  the
          INTERACTIVE  draw style (draw style used when the scene changes) independently from the
          STILL style. STILL defaults to VIEW_AS_IS.  INTERACTIVE defaults to VIEW_NO_TEXTURE  on
          machine that do not support fast texturing, VIEW_SAME_AS_STILL otherwise. Possible draw
          styles are:

          VIEW_AS_IS — Leaves the objects unchanged.

          VIEW_HIDDEN_LINE — Renders the object as wireframe, but  only  show  the  object  front
          faces.  This is accomplished using a two pass rendering. In the first pass, the objects
          are rendered as FILLED using the background BASE_COLOR (this  sets  up  the  wanted  z-
          buffer  values). The second pass then renders the objects as LINES, while adjusting the
          z-buffer range to limit overlapping polygons problems.

          VIEW_NO_TEXTURE — Renders the objects withought any textures.  This is done by  setting
          the override flag on an SoComplexity node with textureQuality = 0.

          VIEW_LOW_COMPLEXITY  —  Renders  the  objects  withought  any  textures  and with a low
          complexity. This is done by setting the override flag  on  an  SoComplexity  node  with
          textureQuality = 0 and complexity value = 0.15.

          VIEW_LINE  —  Renders  the  objects  as  LINES  (no texture) with lighting model set to
          BASE_COLOR.

          VIEW_LOW_RES_LINE — Renders the objects as LINES (no texture) using a  low  complexity,
          with lighting model set to BASE_COLOR and no depth comparison.

          VIEW_POINT  —  Renders  the  objects  as POINTS (no texture) with lighting model set to
          BASE_COLOR.

          VIEW_LOW_RES_POINT — Renders the objects as POINTS (no texture) using a low complexity,
          with lighting model set to BASE_COLOR and no depth comparison.

          VIEW_BBOX  —  Renders  the  objects with complexity BOUNDING_BOX, lighting model set to
          BASE_COLOR and drawing style LINES (no texture) with no depth comparison.

          VIEW_SAME_AS_STILL — This only  applies  to  INTERACTIVE  draw  type.  It  enables  the
          interactive draw style mode to match the regular draw style mode withough having to set
          it explicitly.

     virtual void            setBufferingType(SoXtViewer::BufferType type)
     SoXtViewer::BufferType  getBufferingType()
          Sets/gets   the   current    buffering    type    in    the    main    view    (default
          SoXtViewer::BUFFER_DOUBLE).

     virtual void            setViewing(SbBool onOrOff)
     SbBool                  isViewing() const
          Set/get  whether the viewer is turned on or off. When turned on, events are consumed by
          the viewer. When viewing is off, events are processed by the viewers render area.  This
          means  events  will  be  sent  down to the scene graph for processing (i.e. picking can
          occur). Note that if the application has registered  an  event  callback,  it  will  be
          invoked  on every event, whether viewing is turned on or not. However, the return value
          of this callback (which specifies whether the callback handled the  event  or  not)  is
          ignored  when  viewing  is  on.  That is, the viewer will process the event even if the
          callback already did. This is to  ensure  that  the  viewing  paradigm  is  not  broken
          (default viewing is ON).

     virtual void            setCursorEnabled(SbBool onOrOff)
     SbBool                  isCursorEnabled() const
          Set/get  whether the viewer is allowed to change the cursor over the renderArea window.
          When disabled, the cursor is undefined by the viewer and will not change as the mode of
          the viewer changes. When re-enabled, the viewer will reset it to the appropriate icon.

          Disabling  the  cursor enables the application to set the cursor directly on the viewer
          window or on any parent widget of the viewer. This can be  used  when  setting  a  busy
          cursor on the application shell.

          Subclasses  should  redefine  this routine to call XUndefineCursor() or XDefineCursor()
          with the appropariate glyth. The base class routine only sets the flag.

     void                    setAutoClipping(SbBool onOrOff)
     SbBool                  isAutoClipping() const
          Set and get the auto clipping plane. When auto clipping is ON, the camera near and  far
          planes  are  dynamically  adjusted  to be as tight as possible around the objects being
          viewed. When OFF, the user  is  expected  to  manually  set  those  planes  within  the
          preference sheet (default is on).

     virtual void            setStereoViewing(SbBool onOrOff)
     virtual SbBool          isStereoViewing()
     void                    setStereoOffset(float dist)
     float                   getStereoOffset()
          Turns stereo viewing on/off on the viewer (default off). When in stereo mode, which may
          not work on all machines, the scene is rendered twice (in the left and  right  buffers)
          with an offset between the two views to simulate stereo viewing. Stereo glasses have to
          be used to see the effect and /usr/gfx/setmon needs to be called to set the monitor  in
          stereo mode.

          The user can also specify what the offset between the two views should be.

     void                    setDetailSeek(SbBool onOrOff)
     SbBool                  isDetailSeek()
          When  the  viewer  is  in  seek mode, left mouse clicks initiate a pick, and the viewer
          changes its orientation and position to look at the picked object. This  routine  tells
          the  seeking  viewer whether to orient the camera towards the picked point (detail on),
          or the center of the object's bounding box (detail off). Default is detail on.

     void                    setSeekTime(float seconds)
     float                   getSeekTime()
          Set the time a seek takes to change to the new camera location. A value of  zero  seeks
          directly to the point without any animation. Default value is 2 seconds.

     void                    addStartCallback(SoXtViewerCB *f, void *userData = NULL)
     void                    addFinishCallback(SoXtViewerCB *f, void *userData = NULL)
     void                    removeStartCallback(SoXtViewerCB *f, void *userData = NULL)
     void                    removeFinishCallback(SoXtViewerCB *f, void *userData = NULL)
          Add/remove start and finish callback routines on the viewer. Start callbacks are called
          whenever the user starts doing interactive  viewing  (for  example,  mouse  down),  and
          finish  callbacks  are  called  when  user is done doing interactive work (for example,
          mouse up).

          Note: The viewer "this" pointer is passed as callback data.

     void                    copyView(Time eventTime)
     void                    pasteView(Time eventTime)
          Copy/paste the view. eventTime should be the time of the X event  which  initiated  the
          copy  or  paste  (e.g. if copy/paste is initiated from a keystroke, eventTime should be
          the time in the X KeyPress event.)

     virtual void            recomputeSceneSize()
          This can be used to let the viewer know that the scene graph has changed  so  that  the
          viewer can recompute things like speed which depend on the scene graph size. Note: This
          routine is automatically called whenever setSceneGraph() is called.

SEE ALSO

       SoXtComponent,   SoXtRenderArea,   SoXtExaminerViewer,   SoXtWalkViewer,    SoXtFlyViewer,
       SoXtPlaneViewer

                                                                                SoXtViewer(3IV)()