Open Inventor Release 2024.2.1
 
Loading...
Searching...
No Matches
SoUniformGridClipping Class Reference

VolumeViz Clips a volume using a 2D surface. More...

#include <VolumeViz/nodes/SoUniformGridClipping.h>

+ Inheritance diagram for SoUniformGridClipping:

Public Types

enum  Axis {
  X ,
  Y ,
  Z
}
 Slice Axis. More...
 
- Public Types inherited from SoTexture2
enum  Loading {
  AUTO = 0 ,
  MANUAL
}
 Loading mode. More...
 
typedef void SoTexture2CB(void *userData, SoTexture2 *tex)
 
- Public Types inherited from SoTexture
enum  InternalFormat {
  AUTO_INTERNAL_FORMAT ,
  ALPHA_FORMAT ,
  ALPHA4 ,
  ALPHA8 ,
  ALPHA12 ,
  ALPHA16 ,
  LUMINANCE_FORMAT ,
  LUMINANCE4 ,
  LUMINANCE8 ,
  LUMINANCE12 ,
  LUMINANCE16 ,
  LUMINANCE_ALPHA ,
  LUMINANCE4_ALPHA4 ,
  LUMINANCE6_ALPHA2 ,
  LUMINANCE8_ALPHA8 ,
  LUMINANCE12_ALPHA4 ,
  LUMINANCE12_ALPHA12 ,
  LUMINANCE16_ALPHA16 ,
  INTENSITY_FORMAT ,
  INTENSITY4 ,
  INTENSITY8 ,
  INTENSITY12 ,
  INTENSITY16 ,
  R3_G3_B2 ,
  RGB_FORMAT ,
  RGB4 ,
  RGB5 ,
  RG8 ,
  RGB8 ,
  RGB10 ,
  RGB12 ,
  RGB16 ,
  RGBA_FORMAT ,
  RGBA2 ,
  RGBA4 ,
  RGB5_ALPHA1 ,
  RGBA8 ,
  RGB10_ALPHA2 ,
  RGBA12 ,
  RGBA16 ,
  RGBA_FLOAT32 ,
  RGB_FLOAT32 ,
  ALPHA_FLOAT32 ,
  INTENSITY_FLOAT32 ,
  LUMINANCE_FLOAT32 ,
  LUMINANCE_ALPHA_FLOAT32 ,
  RGBA_FLOAT16 ,
  RGB_FLOAT16 ,
  ALPHA_FLOAT16 ,
  INTENSITY_FLOAT16 ,
  LUMINANCE_FLOAT16 ,
  LUMINANCE_ALPHA_FLOAT16 ,
  COMPRESSED_ALPHA ,
  COMPRESSED_LUMINANCE ,
  COMPRESSED_LUMINANCE_ALPHA ,
  COMPRESSED_INTENSITY ,
  COMPRESSED_RGB ,
  COMPRESSED_RGBA ,
  COMPRESSED_LUMINANCE_LATC1 ,
  COMPRESSED_SIGNED_LUMINANCE_LATC1 ,
  COMPRESSED_LUMINANCE_ALPHA_LATC2 ,
  COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2 ,
  COMPRESSED_RED_RGTC1 ,
  COMPRESSED_SIGNED_RED_RGTC1 ,
  COMPRESSED_RED_GREEN_RGTC2 ,
  COMPRESSED_SIGNED_RED_GREEN_RGTC2 ,
  DEPTH_COMPONENT16 ,
  DEPTH_COMPONENT24 ,
  DEPTH24_STENCIL8 ,
  R8I ,
  R8UI ,
  R16I ,
  R16UI ,
  R32I ,
  R32UI ,
  RG8I ,
  RG8UI ,
  RG16I ,
  RG16UI ,
  RG32I ,
  RG32UI ,
  RGB8I ,
  RGB8UI ,
  RGB16I ,
  RGB16UI ,
  RGB32I ,
  RGB32UI ,
  RGBA8I ,
  RGBA8UI ,
  RGBA16I ,
  RGBA16UI ,
  RGBA32I ,
  RGBA32UI
}
 Texture internal storage format. More...
 
enum  Model {
  MODULATE = SbEnums::TEX_MODEL_MODULATE ,
  DECAL = SbEnums::TEX_MODEL_DECAL ,
  BLEND = SbEnums::TEX_MODEL_BLEND ,
  REPLACE = SbEnums::TEX_MODEL_REPLACE ,
  ADD = SbEnums::TEX_MODEL_ADD ,
  COMBINE = SbEnums::TEX_MODEL_COMBINE
}
 Texture Combiner Functions. More...
 
enum  Wrap {
  REPEAT = SbEnums::TEX_ADDRESS_REPEAT ,
  CLAMP = SbEnums::TEX_ADDRESS_CLAMP ,
  CLAMP_TO_BORDER = SbEnums::TEX_ADDRESS_CLAMP_BORDER ,
  CLAMP_TO_EDGE = SbEnums::TEX_ADDRESS_CLAMP_TO_EDGE ,
  MIRRORED_REPEAT = SbEnums::TEX_ADDRESS_MIRROR_REPEAT
}
 Texture wrap type. More...
 
enum  Filter {
  AUTO = SbEnums::TEX_FILTER_AUTO ,
  NEAREST = SbEnums::TEX_FILTER_NEAREST ,
  LINEAR = SbEnums::TEX_FILTER_LINEAR ,
  NEAREST_MIPMAP_NEAREST = SbEnums::TEX_FILTER_NEAREST_MIPMAP_NEAREST ,
  NEAREST_MIPMAP_LINEAR = SbEnums::TEX_FILTER_NEAREST_MIPMAP_LINEAR ,
  LINEAR_MIPMAP_NEAREST = SbEnums::TEX_FILTER_LINEAR_MIPMAP_NEAREST ,
  LINEAR_MIPMAP_LINEAR = SbEnums::TEX_FILTER_LINEAR_MIPMAP_LINEAR
}
 Specifies the OpenGL filtering method for minification and magnification. More...
 
enum  HW_Feature {
  HW_NPOT = 0 ,
  HW_FLOATFORMAT ,
  HW_DEPTHFORMAT ,
  HW_AUTOMIPMAP ,
  HW_BORDER_CLAMP ,
  HW_EDGE_CLAMP ,
  HW_MIRRORED_REPEAT ,
  HW_COMPRESSION_S3TC ,
  HW_COMPRESSION_LATC ,
  HW_COMPRESSION_RGTC
}
 
enum  FileType {
  UNKNOWN ,
  RGB ,
  SGI ,
  TIFF ,
  GIF ,
  JPEG ,
  BMP ,
  PNG ,
  JPEG2000 ,
  DDS ,
  HDRI ,
  NUM_FILETYPES
}
 File Type possible values. More...
 

Public Member Functions

virtual SoType getTypeId () const
 Returns the type identifier for this specific instance.
 
 SoUniformGridClipping ()
 Constructor.
 
- Public Member Functions inherited from SoTexture2
void setStartLoadingCallback (SoTexture2CB *cb, void *userData)
 Callback invoked when starting to load the texture.
 
void setFinishLoadingCallback (SoTexture2CB *cb, void *userData)
 Callback invoked when the texture is loaded and ready to use.
 
void loadTexture ()
 Loads the texture if the loadingMode field is set to MANUAL.
 
 SoTexture2 ()
 Creates a texture node with default settings.
 
- Public Member Functions inherited from SoTexture
void setBitmapFileType (FileType in_type)
 Sets the texture file format.
 
FileType getBitmapFileType (void)
 Gets the texture file format.
 
virtual void setOverride (const SbBool state)
 Set the state of the override field.
 
virtual SbBool isOverride () const
 Returns the state of the override field.
 
- Public Member Functions inherited from SoNode
virtual SoNodecopy (SbBool copyConnections=FALSE) const
 Creates and returns an exact copy of the node.
 
virtual SbBool affectsState () const
 Returns TRUE if a node has an effect on the state during traversal.
 
virtual void touch ()
 Marks an instance as modified, simulating a change to it.
 
- Public Member Functions inherited from SoFieldContainer
void setToDefaults ()
 Sets all fields in this object to their default values.
 
SbBool hasDefaultValues () const
 Returns TRUE if all of the object's fields have their default values.
 
SbBool fieldsAreEqual (const SoFieldContainer *fc) const
 Returns TRUE if this object's fields are exactly equal to fc's fields.
 
void copyFieldValues (const SoFieldContainer *fc, SbBool copyConnections=FALSE)
 Copies the contents of fc's fields into this object's fields.
 
SoNONUNICODE SbBool set (const char *fieldDataString)
 Sets one or more fields in this object to the values specified in the given string, which should be a string in the Open Inventor file format.
 
SbBool set (const SbString &fieldDataString)
 Sets one or more fields in this object to the values specified in the given string, which should be a string in the Open Inventor file format.
 
void get (SbString &fieldDataString)
 Returns the values of the fields of this object in the Open Inventor ASCII file format in the given string.
 
virtual int getFields (SoFieldList &list) const
 Appends references to all of this object's fields to resultList, and returns the number of fields appended.
 
virtual int getAllFields (SoFieldList &list) const
 Returns a list of fields, including the eventIn's and eventOut's.
 
virtual SoFieldgetField (const SbName &fieldName) const
 Returns a the field of this object whose name is fieldName.
 
virtual SoFieldgetEventIn (const SbName &fieldName) const
 Returns a the eventIn with the given name.
 
virtual SoFieldgetEventOut (const SbName &fieldName) const
 Returns the eventOut with the given name.
 
SbBool getFieldName (const SoField *field, SbName &fieldName) const
 Returns the name of the given field in the fieldName argument.
 
SbBool enableNotify (SbBool flag)
 Notification at this Field Container is enabled (if flag == TRUE) or disabled (if flag == FALSE).
 
SbBool isNotifyEnabled () const
 Notification is the process of telling interested objects that this object has changed.
 
virtual void setUserData (void *data)
 Sets application data.
 
void * getUserData (void) const
 Gets user application data.
 
- Public Member Functions inherited from SoBase
virtual SbName getName () const
 Returns the name of an instance.
 
virtual void setName (const SbName &name)
 Sets the name of an instance.
 
void setSynchronizable (const bool b)
 Sets this to be a ScaleViz synchronizable object.
 
bool isSynchronizable () const
 Gets the ScaleViz synchronizable state of this object.
 
- Public Member Functions inherited from SoRefCounter
void ref () const
 Adds a reference to an instance.
 
void unref () const
 Removes a reference from an instance.
 
void unrefNoDelete () const
 unrefNoDelete() should be called when it is desired to decrement the reference count, but not delete the instance if this brings the reference count to zero.
 
int getRefCount () const
 Returns current reference count.
 
void lock () const
 lock this instance.
 
void unlock () const
 unlock this instance.
 
- Public Member Functions inherited from SoTypedObject
SbBool isOfType (const SoType &type) const
 Returns TRUE if this object is of the type specified in type or is derived from that type.
 
template<typename TypedObjectClass >
SbBool isOfType () const
 Returns TRUE if this object is of the type of class TypedObjectClass or is derived from that class.
 

Static Public Member Functions

static SoType getClassTypeId ()
 Returns the type identifier for this class.
 
static SbBool isSupported (SoState *state=NULL)
 Returns TRUE if uniform grid clipping is supported by the graphics board.
 
static int getMaxNumberOfUniformGrids (SoState *state=NULL)
 Returns the maximum number of clipping surfaces supported by the hardware.
 
- Static Public Member Functions inherited from SoTexture2
static SoType getClassTypeId ()
 Returns the type identifier for this class.
 
- Static Public Member Functions inherited from SoTexture
static SoType getClassTypeId ()
 Returns the type identifier for this class.
 
static SbBool isSupported (HW_Feature feature)
 Returns information about hardware support for various texture features.
 
static SbRasterImagereadTexture (const SbString &filename, FileType filetype=UNKNOWN)
 Convenience function that loads the image data from any texture file supported by Open Inventor and returns an SbRasterImage object.
 
- Static Public Member Functions inherited from SoNode
static SoType getClassTypeId ()
 Returns the type identifier for this class.
 
static SoNodegetByName (const SbName &name)
 A node's name can be set using SoBase::setName().
 
static int getByName (const SbName &name, SoNodeList &list)
 A node's name can be set using SoBase::setName().
 
- Static Public Member Functions inherited from SoFieldContainer
static SoType getClassTypeId ()
 Returns the type of this class.
 
- Static Public Member Functions inherited from SoBase
static SoType getClassTypeId ()
 Returns type identifier for this class.
 
- Static Public Member Functions inherited from SoTypedObject
static SoType getClassTypeId ()
 Returns the type identifier for this class.
 

Public Attributes

SoSFBox3f extent
 Bounding box of the surface in 3D geometric coordinates.
 
SoSFEnum axis
 Height axis: X, Y, or Z.
 
SoSFFloat thickness
 Defines a clipping thickness in the axis direction.
 
SoSFBool clipBelow
 Clip voxels below the surface.
 
SoSFBool clipAbove
 Clip voxels above the surface.
 
SoSFFloat undefinedValue
 Texels in the clipping texture with this value will clip all voxels above and below the surface.
 
Deprecated
SoDEPRECATED SoSFBox3f size
 
- Public Attributes inherited from SoTexture2
SoSFFilePathString filename
 Name of the file from which to read texture image.
 
SoSFImage image
 Contains an in-memory representation of the texture map.
 
SoSFEnum wrapT
 Indicates what to do when texture coordinates in the T (vertical) direction lie outside the range 0-1.
 
SoSFEnum loadingMode
 Specifies the loading mode.
 
SoSFNode renderToTextureProperty
 Specifies an SoRenderToTextureProperty node containing a scene graph that will be rendered to create the texture image.
 
- Public Attributes inherited from SoTexture
SoSFEnum internalFormat
 Internal format for texture storage.
 
SoSFBool enableCompressedTexture
 Enables storage of textures on the graphics board in compressed form.
 
SoSFEnum wrapS
 Indicates what to do when texture coordinates in the S (horizontal) direction lie outside the range 0-1.
 
SoSFEnum model
 Specifies how to map texture onto surface.
 
SoSFColor blendColor
 Color used for BLEND model.
 
SoSFBool enableBorder
 Enables borders for textures.
 
SoSFVec4f borderColor
 Defines border color used for border texture filtering.
 
SoSFFloat maxAnisotropy
 Specifies on a per-texture object basis, the maximum degree of anisotropy to account for in texture filtering.
 
SoSFEnum minFilter
 Specifies the OpenGL minFilter.
 
SoSFEnum magFilter
 Specifies the OpenGL magFilter.
 

Detailed Description

VolumeViz Clips a volume using a 2D surface.

The SoUniformGridClipping node specifies a clipping surface defined by a clipping axis (axis field),a bounding box (extent field) in world coordinates and a uniform scalar clipping grid (a 2D array of height values). This tool provides an efficient way for seismic applications to clip volume rendering against horizon surfaces (see also SoUniformGridProjectionClipping). A flat clipping surface with non-zero thickness can also be used in medical applications to implement "thick slice" rendering. The clipping grid does not need to have the same dimensions as the volume to be clipped (it will be sampled and interpolated). The clipping grid may be rotated and translated by standard Open Inventor transform nodes.

The height values are specified using a 2D texture. Each texel is a normalized value that, together with the extent, specifies a height. For integer valued textures, the range of the integer type (e.g. 0..255 for byte values) is normalized to the floating point range 0..1. For float valued textures the values should already be in the range 0..1. Each normalized value specifies a height based on the range of values in the extent box along the specified clipping axis. The default clipping axis is the Y axis.

NOTE: For integer valued textures this is similar to the way values are interpreted for the SoHeightFieldGeometry node. However for float valued textures it is quite different because the SoHeightFieldGeometry node interprets float values as actual height values and ignores the extent values.

It is also possible to specify an "undefined" value using the undefinedValue field. Texels with this value will clip all voxels above and below the surface. The default undefined value is Nan (Not a Number).

The X, Y and Z coordinates of the extent are in the same coordinate system as the volume extent. They specify the bounding box of the clipping surface and also the range of height values that can be specified with the normalized values in the height field texture. They are typically, but not necessariliy, set to the same values as the volume extent. The extent of the clipping surface may be larger than the volume extent. In this case the volume is only clipped where its extent overlaps with the surface. The extent of the clipping surface may also be smaller than the volume extent. In this case the volume is clipped to the "horizontal" extent of the clipping surface (the dimensions perpendicular to the clipping axis). However along the clipping axis the volume is only limited by the surface itself, not by its extent.

SoUniformGridClipping is derived from SoTexture2 , so the clipping grid texture can be specified by setting the filename field or by directly setting the image field. Directly setting the image field is convenient if the height field data is floating point. All the usual texturing parameters apply. Wrapping and filtering modes are particularly important. Setting wrap mode to something other than CLAMP_TO_EDGE may cause unwanted interpolation on edges. Setting filter mode to NEAREST will give a blocky result which may or may not be desired.

The format of the texture used for the grid should be the LUMINANCE* type for best performance. For example, a grayscale .png file will automatically be in this format. We suggest to use LUMINANCE_FLOAT32 explicitely for floating point data in order to preserve floating point precision. If no red component is available in the format used (for example ALPHA texture...), the grid will be totally flat.

Each clipping surface texture must be stored in a different OpenGL texture unit. One that is not currently used by VolumeViz for multi-data composition (i.e., a texture unit number greater than the highest dataSetId plus 1). Setting the texture unit for a clipping surface is done using the SoTextureUnit node, just like with any texture node.

The SoUniformGridProjectionClipping node provides an alternate way to specify the clipping grid. This node may be more convenient when clipping using surface geometry that is already in the scene graph, for example an SoHeightFieldRender node.

The figure below shows the result (right) of applying the left texture to a volume.

Clipping surface Clipping applied to a volume

The following code shows one way to achieve this result. It loads the clipping surface "horizon2D.png" and puts it in texture unit 2:

SoTextureUnit *texUnit2 = new SoTextureUnit();
texUnit2->unit = 2;
grid->filename = "horizon2D.png";
SoSeparator* volSep = new SoSeparator();
volSep->addChild( volumeData );
volSep->addChild( transferFunction );
volSep->addChild( texUnit2 );
volSep->addChild( grid );
volSep->addChild( volumeRender );
root->addChild( volSep );
virtual void addChild(SoNode *child)
Adds a child as last one in group.
Group node that saves and restores traversal state.
SoSFFilePathString filename
Name of the file from which to read texture image.
Definition SoTexture2.h:299
<a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Node that specif...
SoSFUInt32 unit
Specifies the texture unit identifier.
<a href="IconLegend.html"><img src="extVR.gif" alt="VolumeViz" border="0"></a> Clips a volume using ...
SoUniformGridClipping()
Constructor.

The uniform grid clipping node provides both clipAbove and clipBelow boolean fields. By default only clipAbove is true. Using a pair of grid clipping nodes, one with clipAbove and one with clipBelow, allows clipping between two surfaces. This is useful in seismic applications to clip between two "horizon" surfaces. Note that if both of these fields are true and the thickness field is zero then the entire volume will be clipped.

The thickness field expands the clipping surface in both directions perpendicular to the surface.The value of this field is specified in 0..1 normalized units spanning the specified extent of the surface. A completely flat clipping surface with thickness greater than zero can be used to implement "thick slice" (aka "thin slab") rendering. A transform node, for example SoTransform , can be used to position and orient the clipping surface. In this case the transform node and the clipping surface node should usually be placed under an SoTransformSeparator node. This allows the surface to clip the volume primitives, but prevents the transform node from affecting the volume primitives. Remember that, as usual, the transform node will rotate the clipping surface around the origin (0,0,0) of the world coordinate system.

Clipping surface thicknes

Notes:

  • When using a custom SoVolumeShader with this node and redefining the main() function, you must call VVizClipVoxel() in the main() function if you are writing a fragment shader or VVizCalcDistToUniformGrid() if it's a vertex shader. If you don't do this, you will get a GLSL compilation error or clipping won't work.

Limitations:

  • Only graphics cards supporting the GLSL language can use this node.

  • The maximum number of SoUniformGridClipping nodes that can be applied to the same volume is limited to getMaxNumberOfUniformGrids(). This limitation depends on the maximum number of sets of OpenGL texture coordinates supported on the graphics board (GL_MAX_TEXTURE_COORDS), which is typically 8, minus 3 sets used elsewhere in VolumeViz, leaving 5 for uniform grids.

FILE FORMAT/DEFAULT

    UniformGridClipping {
    axis Y
    extent -1,0,-1 1,1,1
    filename ""
    image 0 0 0
    wrapS CLAMP_TO_EDGE
    wrapT CLAMP_TO_EDGE
    model MODULATE
    enableCompressedTexture FALSE
    blendColor 0 0 0
    enableBorder FALSE
    borderColor 0 0 0 0
    maxAnisotropy 1.0
    minFilter AUTO
    magFilter AUTO
    loadingMode AUTO
    useAutoMipmap FALSE
    internalFormat AUTO_INTERNAL_FORMAT
    thickness 0
    clipBelow FALSE
    clipAbove TRUE
    }

SEE ALSO

SoVolumeRender, SoPreferences, SoShaderProgram, SoTexture2, SoTextureUnit, SoVolumeClippingGroup, SoVolumeIsosurface, SoVolumeRenderingQuality, SoUniformGridProjectionClipping

Definition at line 252 of file SoUniformGridClipping.h.

Member Enumeration Documentation

◆ Axis

Slice Axis.

Enumerator

X Axis.

Y Axis (Default)

Z Axis.

Definition at line 273 of file SoUniformGridClipping.h.

Constructor & Destructor Documentation

◆ SoUniformGridClipping()

SoUniformGridClipping::SoUniformGridClipping ( )

Constructor.

Member Function Documentation

◆ getClassTypeId()

static SoType SoUniformGridClipping::getClassTypeId ( )
static

Returns the type identifier for this class.


◆ getMaxNumberOfUniformGrids()

static int SoUniformGridClipping::getMaxNumberOfUniformGrids ( SoState state = NULL)
static

Returns the maximum number of clipping surfaces supported by the hardware.

◆ getTypeId()

virtual SoType SoUniformGridClipping::getTypeId ( ) const
virtual

Returns the type identifier for this specific instance.

Reimplemented from SoTexture2.

Reimplemented in SoUniformGridProjectionClipping.

◆ isSupported()

static SbBool SoUniformGridClipping::isSupported ( SoState state = NULL)
static

Returns TRUE if uniform grid clipping is supported by the graphics board.

The GPU must support GLSL. Check the maximum number of clipping surfaces using getMaxNumberofUniformGrids.

When using a debug build of Open Inventor, some "no context available" warning messages may be generated. You can ignore them or see SoGLExtension for an example of using SoGLContext to avoid them.

Member Data Documentation

◆ axis

SoSFEnum SoUniformGridClipping::axis

Height axis: X, Y, or Z.

Use enum Axis . Default is Y.

NOTE: field available since Open Inventor 8.0

Definition at line 288 of file SoUniformGridClipping.h.

◆ clipAbove

SoSFBool SoUniformGridClipping::clipAbove

Clip voxels above the surface.

Default is TRUE;

NOTE: field available since Open Inventor 8.6

Definition at line 320 of file SoUniformGridClipping.h.

◆ clipBelow

SoSFBool SoUniformGridClipping::clipBelow

Clip voxels below the surface.

Default is FALSE;

NOTE: field available since Open Inventor 8.6

Definition at line 312 of file SoUniformGridClipping.h.

◆ extent

SoSFBox3f SoUniformGridClipping::extent

Bounding box of the surface in 3D geometric coordinates.


Default is a box of size (2, 1, 2) with its back left corner at (-1, 0, -1).
NOTE: field available since Open Inventor 8.0

Definition at line 270 of file SoUniformGridClipping.h.

◆ size

SoDEPRECATED SoSFBox3f SoUniformGridClipping::size

Definition at line 349 of file SoUniformGridClipping.h.

◆ thickness

SoSFFloat SoUniformGridClipping::thickness

Defines a clipping thickness in the axis direction.

Ignored if set to 0. Default is 0;

Value is in the normalized extent space (can be seen as a percentage of the extent).

Notes:

  • If thickness is 0 and clipBelow and clipAbove are both TRUE then the whole volume is clipped.
  • A value greater than 1.0 makes sense only if the extent of the SoUniformGridClipping is smaller than the extent of the volume data it applies to.

NOTE: field available since Open Inventor 8.6

Definition at line 304 of file SoUniformGridClipping.h.

◆ undefinedValue

SoSFFloat SoUniformGridClipping::undefinedValue

Texels in the clipping texture with this value will clip all voxels above and below the surface.


Default is NaN (not a number).

NOTE: field available since Open Inventor 9.0

Definition at line 328 of file SoUniformGridClipping.h.


The documentation for this class was generated from the following file: