---
name: "SoXtViewer"
section: "3iv"
platform: "linux"
package: "inventor-doc"
version: "2.1.6+ds-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SoXtViewer"
---

# SoXtViewer(3iv)

viewer component lowest base class

## 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**
