SoDataSet Class Reference
[Nodes]

Large Data Management Data set node. More...

#include <LDM/nodes/SoDataSet.h>

Inheritance diagram for SoDataSet:
SoNode SoFieldContainer SoBase SoRefCounter SoTypedObject SoVolumeData SoHeightFieldGeometry SoHeightFieldProperty SoHeightFieldPropertyMask SoVolumeMask

List of all members.

Classes

struct  DatumElement
 A datum is a series of m*n data type.
struct  MTstruct
 thread specific variables

Public Types

enum  DataType {
  UNSIGNED_BYTE = SbDataType::UNSIGNED_BYTE,
  UNSIGNED_SHORT = SbDataType::UNSIGNED_SHORT,
  UNSIGNED_INT32 = SbDataType::UNSIGNED_INT32,
  SIGNED_BYTE = SbDataType::SIGNED_BYTE,
  SIGNED_SHORT = SbDataType::SIGNED_SHORT,
  SIGNED_INT32 = SbDataType::SIGNED_INT32,
  FLOAT = SbDataType::FLOAT,
  DOUBLE = SbDataType::DOUBLE
}
typedef SbBool SaveEditingCB (SoDataSet *dataSet, SoVolumeWriter *writer, int tilesRemaining, int totalTiles)

Public Member Functions

virtual SoType getTypeId () const
const SbVec3i32getDimension ()
SbVec3i32 getTileDimension ()
unsigned int getDatumSize ()
virtual size_t readTile (SoBufferObject *&bufferObject, SoLDMTileID tileID, bool transform)
virtual void readTile (SoLDMTileID tileID, SoBufferObject *buffer, bool transform)
virtual void writeTile (SoLDMTileID tileID, SoBufferObject *buffer, SoVolumeWriter *writer)
bool isInMemory (SoLDMTileID tileID) const
bool isDataInMemory (const SoLDMTileID &tileID) const
void getTileIDInMemory (std::vector< LDM_TILE_ID_TYPE > &tilesInMemory) const
SoLDMDataAccessgetLdmDataAccess ()
virtual SbBool startEditing (int &transactionId)
virtual SbBool finishEditing (int transactionId)
virtual int editTile (const SoLDMTileID &tileId, SoBufferObject *userData)
virtual int editSubVolume (const SbBox3i32 &subVolume, SoBufferObject *userData)
virtual int editTile (const SoLDMTileID &tileId, const double &value)
virtual int editSubVolume (const SbBox3i32 &subVolume, const double &value)
virtual int editSurfaceShape (const SoNode *surfaceShape, const float &thickness, const double &value)
virtual int editSolidShape (const SoNode *solidShape, const double &value)
virtual int editBoxes (const std::vector< SbVec3i32 > &boxCenters, const int &boxSize, const double &newValue)
virtual SbBool undoEditing (int transactionId)
virtual SbBool redoEditing (int transactionId)
virtual SbBool saveEditing (bool recomputeLowerResolution=TRUE, const std::vector< char * > conversionParameters=std::vector< char * >(), SaveEditingCB *callback=NULL)
virtual bool hasEditedTile ()
SoLDMReadergetLDMReader ()
void setLDMReader (SoLDMReader *reader)
SoVolumeReadergetReader ()
SoVolumeReadergetReader () const
int numSigBits () const
virtual SbBool getMinMax (int64_t &min, int64_t &max)
virtual SbBool getMinMax (double &min, double &max)
DataType getDataType ()
int getDataSize ()
void setReader (SoVolumeReader &reader, SbBool takeOwnership=FALSE)
virtual SbVec3f voxelToXYZ (const SbVec3f &dataPosition) const
virtual SbBox3f voxelToXYZ (const SbBox3f &box) const
virtual SbVec3f XYZToVoxel (const SbVec3f &dataPosition) const
virtual SbBox3f XYZToVoxel (const SbBox3f &xyzBox) const
void resetReader ()
const SoLDMTopoOctreegetLDMTopoOctree () const

Static Public Member Functions

static SoType getClassTypeId ()
static int dataSize (DataType dataType)
static SbBool isDataSigned (DataType dataType)
static SbBool isDataFloat (DataType dataType)
static int getMaxNumDataSets ()

Public Attributes

SoSFInt32 dataSetId
SoSFFilePathString fileName
SoSFBool useCompressedTexture
SoSFUShort texturePrecision
SoSFBox3f extent
SoSFLDMDataTransform dataTransform
SoSFBool allocateResourceOnRender
SoSFDouble undefinedValue
SoSFLDMResourceParameters ldmResourceParameters

Friends

class SoLdmValuationAction
class SoLDMGeometry

Deprecated



typedef void SoLDMDataTransformFunction (SoDataSet *ds, const SbVec3i32 &bufferDimension, void *bufferToTransform, const SbBox3i32 &dataBox, int resolutionLevel, void *userData)
virtual SoDEPRECATED void readTile (SoLDMTileID tileID, unsigned char *buffer, bool transform)
SoDEPRECATED void setLDMDataTransformFunction (SoLDMDataTransformFunction *func, void *userData=NULL)
SoDEPRECATED int getOverlapping ()

Detailed Description

Large Data Management Data set node.

This class specifies a data set and its properties, and also provides utilities for extracting a subset of the data set and for resampling the data set. The data can be read directly from a file or can be accessed via a user-defined volume reader. This class is the parent class of the VolumeViz data nodes: SoVolumeData, SoHeightFieldGeometry, SoHeightFieldProperty, etc. Those nodes provide the data for VolumeViz rendering nodes: SoVolumeRender, SoOrthoSlice, SoObliqueSlice, etc. See SoVolumeData for more details about loading and managing volume data.

The data set can be specified by:

SEE ALSO

SoDataSetId, SoDataCompositor, SoVolumeData, SoMeshGeometry, SoMeshProperty

See related examples:

DataTransform, EditingExtrusion, Editing, EditingPicking


Member Typedef Documentation

typedef SbBool SoDataSet::SaveEditingCB(SoDataSet *dataSet, SoVolumeWriter *writer, int tilesRemaining, int totalTiles)

This is the declaration to use for saveEditing callback functions.

These callbacks are called just before a tile is written. At the beginning of the saving process, the SaveEditingCB is called with tilesRemaining = totalTiles . Once the save process is done (all tiles written and finalized), the SaveEditingCB is called with tilesRemaining = 0.

Parameters:
dataSet DataSet used.
writer Writer used.
tilesRemaining Remaining tiles to save
totalTiles Total tiles to save.
Returns:
TRUE to continue save process. FALSE to abort.
typedef void SoDataSet::SoLDMDataTransformFunction(SoDataSet *ds, const SbVec3i32 &bufferDimension,void *bufferToTransform, const SbBox3i32 &dataBox,int resolutionLevel,void *userData)
Deprecated:
Use SoDataSet::dataTransform field which handle an SoLDMDataTransform fieldContainer. Type declaration for the data transform function. See SoDataSet::setLDMDataTransformFunction. This function allows a tile of data to be transformed after it is loaded, but before it is stored in main memory. It is not currently possible to access other tiles of data (for example using the data access API) from this function. Note that the function will be called from LDM data loader threads, so multiple threads may be executing in this function at the same time (on different tiles). Inputs are:
  • The associated data set object the function is calling for. This allows retrieving information such as data type (ds->getDataType()).
  • The dimensions of the tile to transform. This defines the size of the buffer and is the same for every tile in a dataset. However tiles on the "outside" of the dataset may be partial tiles and contain less than the full number of actual data values.
  • A buffer containing the tile data to transform. The data should be modified "in place" in this buffer.
  • The position and extent of the tile in data space (voxel coordinates). For lower resolution tiles (level > 0) the extent of the tile will be larger than the dimensions of the tile (number of values in the tile).
  • The tile resolution level. Level 0 is full resolution data.
  • Optional user data specified with setLDMDataTransformFunction.

Deprecated since Open Inventor 8.0


Member Enumeration Documentation

Supported data type.

Enumerator:
UNSIGNED_BYTE 

unsigned byte

UNSIGNED_SHORT 

unsigned short

UNSIGNED_INT32 

unsigned int (32bits)

SIGNED_BYTE 

signed byte

SIGNED_SHORT 

signed short

SIGNED_INT32 

signed int (32bits)

FLOAT 

float

DOUBLE 

double


Member Function Documentation

static int SoDataSet::dataSize ( DataType  dataType  )  [static]

Returns the number of bytes per voxel of the specified data type.

virtual int SoDataSet::editBoxes ( const std::vector< SbVec3i32 > &  boxCenters,
const int &  boxSize,
const double &  newValue 
) [virtual]

Replace all voxels in the region defined by a list of boxes with the specified value.

boxCenter and boxSize are defined in ijk (voxel) space.

Call startEditing() before calling this method. Returns 0 if successful.

Reimplemented in SoVolumeData.

virtual int SoDataSet::editSolidShape ( const SoNode solidShape,
const double &  value 
) [virtual]

Replaces all voxels intersecting the given shape with the specified value.

The geometry defined under solidShape must represent a list of closed surfaces otherwise the result is unpredictable. solidShape must not contain any lines or open polyhedrons (polyhedron with shapes). The result is based on the odd-winding rule, so the result is not necessarily the union or the intersection of the closed surfaces. If you want to voxelize lines or single polygons, see also the editSurfaceShape method.

If the goal is to define a shape which is the result of the intersection/union of multiple closed surfaces, see the SoCSGShape node.

solidShape is defined in the same 3D space as the dataSet. The solidShape can be deleted after calling this function.

Call startEditing() before calling this method. Returns 0 if successful.

Warning:
The modification may be postponed until the tiles are really needed. Therefore the surfaceShape node (and children if any) must not be modified until after saveEditing() is called.

Reimplemented in SoVolumeData, and SoVolumeMask.

virtual int SoDataSet::editSubVolume ( const SbBox3i32 subVolume,
const double &  value 
) [virtual]

Replaces the contents of a subvolume with the specified value.


The subvolume is specified in voxel/cell coordinates. Call startEditing() before calling this method. Returns 0 if successful.

Reimplemented in SoVolumeData, and SoVolumeMask.

virtual int SoDataSet::editSubVolume ( const SbBox3i32 subVolume,
SoBufferObject userData 
) [virtual]

Replaces the contents of a subvolume with the given data.


The buffer size (in bytes) must match the subvolume size (in bytes) exactly. The subvolume is specified in voxel/cell coordinates. Call startEditing() before calling this method. Returns 0 if successful.

Warning:
The modification may be postponed until the tiles are really needed. Therefore the contents of the userData buffer must not be modified until after saveEditing() is called. However the buffer may be unref'd.

Reimplemented in SoVolumeData, and SoVolumeMask.

virtual int SoDataSet::editSurfaceShape ( const SoNode surfaceShape,
const float &  thickness,
const double &  value 
) [virtual]

Replaces all voxels intersecting the polygons or lines defined by the surfaceShape and given thickness with the specified value.

surfaceShape is defined in the same 3D space as the dataSet. thickness is defined in voxels. The surfaceShape can be deleted after calling this function.

Call startEditing() before calling this method. Returns 0 if successful.

Warning:
The modification may be postponed until the tiles are really needed. Therefore the surfaceShape node (and children if any) must not be modified until after saveEditing() is called.

Reimplemented in SoVolumeData, and SoVolumeMask.

virtual int SoDataSet::editTile ( const SoLDMTileID tileId,
const double &  value 
) [virtual]

Replaces the contents of a tile with the specified value.


Call startEditing() before calling this method. Returns 0 if successful.

Reimplemented in SoVolumeData.

virtual int SoDataSet::editTile ( const SoLDMTileID tileId,
SoBufferObject userData 
) [virtual]

Replaces the contents of a tile with the given data.


The buffer size (in bytes) must match the tile size (in bytes) exactly. Call startEditing() before calling this method. Returns 0 if successful.

Warning:
The modification may be postponed until the tile is really needed. Therefore the contents of the userData buffer must not be modified until after saveEditing() is called. However the buffer may be unref'd.

Reimplemented in SoVolumeData.

virtual SbBool SoDataSet::finishEditing ( int  transactionId  )  [virtual]

Terminates an editing transaction.


Returns true if successful. May only be called with a valid transaction id returned by the startEditing() method. On error does nothing. The finish method will schedule a redraw so the correct data is displayed. To commit the edits, in other words to save the edited data back to the data source, call saveEditing().

Reimplemented in SoVolumeData.

static SoType SoDataSet::getClassTypeId (  )  [static]

Returns the type identifier for this class.

Reimplemented from SoNode.

Reimplemented in SoHeightFieldGeometry, SoHeightFieldProperty, SoHeightFieldPropertyMask, SoVolumeData, and SoVolumeMask.

int SoDataSet::getDataSize (  ) 

Returns the number of bytes per voxel in VolumeViz.

DataType SoDataSet::getDataType (  ) 

Returns the data type.

unsigned int SoDataSet::getDatumSize (  ) 

Returns the number of bytes per voxel.

const SbVec3i32& SoDataSet::getDimension (  ) 

Returns the data set dimension.

SoLDMDataAccess& SoDataSet::getLdmDataAccess (  ) 

Returns a reference to the SoLDMDataAccess object.


This object can be used to query data from the volume.

SoLDMReader* SoDataSet::getLDMReader (  ) 

Returns a pointer to the current data set reader object.


The actual type will be a subclass of SoVolumeReader, either one of the predefined subclasses or an application-defined subclass. Returns NULL if no reader is currently being used (for example if setVolumeData() was called).

const SoLDMTopoOctree* SoDataSet::getLDMTopoOctree (  )  const

Returns the LDMTopoOctree used by this SoDataSet.

The LDMTopoOctree is initialized at the initialization of the reader.

static int SoDataSet::getMaxNumDataSets (  )  [static]

Returns the maximum number of data sets that can be render composited on the current hardware (essentially the number of texture units - 1).

virtual SbBool SoDataSet::getMinMax ( double &  min,
double &  max 
) [virtual]

Returns min and max values of the data set.


Returns FALSE if the requested data is not available (for example, if no data set exists).

NOTE: This method might force LDM to load the entire data set if the volume reader does not respond to the getMinMax query. Normally for an LDM format data set, the min and max values are stored in the LDM header. For a non-LDM data set, if a filename and/or reader have been specified and the data set has not yet been loaded, LDM will load the entire data set to compute the min and max values. For a large data set this may take a long time.

Reimplemented in SoVolumeData.

virtual SbBool SoDataSet::getMinMax ( int64_t &  min,
int64_t &  max 
) [virtual]

Returns min and max values of the data set data.


Returns FALSE if the requested data is not available (for example, if no data set exists).

NOTE: This method might force LDM to load the entire data set if the volume reader does not respond to the getMinMax query. Normally for an LDM format data set, the min and max values are stored in the LDM header. For a non-LDM data set, if a filename and/or reader have been specified and the data set has not yet been loaded, LDM will load the entire data set to compute the min and max values. For a large data set this may take a long time.

Reimplemented in SoVolumeData.

SoDEPRECATED int SoDataSet::getOverlapping (  ) 

Returns the tile border (overlap) in voxels.

Since OIV 9.0 always returns 0.

Deprecated:

Deprecated since Open Inventor 9000
No longer used.
SoVolumeReader* SoDataSet::getReader (  )  const [inline]

Returns the current data set reader object.


The actual type will be a subclass of SoVolumeReader, either one of the predefined subclasses or an application-defined subclass. Returns null if no reader is currently set. Applications should always verify the class type before using the returned object as a specific sub-class of SoVolumeReader.

SoVolumeReader* SoDataSet::getReader (  )  [inline]

Returns the current data set reader object.


The actual type will be a subclass of SoVolumeReader, either one of the predefined subclasses or an application-defined subclass. Returns null if no reader is currently set. Applications should always verify the class type before using the returned object as a specific sub-class of SoVolumeReader.

SbVec3i32 SoDataSet::getTileDimension (  ) 

Returns the tile dimension.

void SoDataSet::getTileIDInMemory ( std::vector< LDM_TILE_ID_TYPE > &  tilesInMemory  )  const

Debug purpose only.

Used for visual feedback to highlight tiles in main memory. Only called if the SoVolumeRendering::DRAW_TOPOLOGY flag is true.

virtual SoType SoDataSet::getTypeId (  )  const [virtual]

Returns the type identifier for this specific instance.

Reimplemented from SoNode.

Reimplemented in SoHeightFieldGeometry, SoHeightFieldProperty, SoHeightFieldPropertyMask, SoVolumeData, and SoVolumeMask.

virtual bool SoDataSet::hasEditedTile (  )  [virtual]

Returns true if DataSet has edited tiles.

static SbBool SoDataSet::isDataFloat ( DataType  dataType  )  [static]

Returns TRUE if the given data type is a float data type.

bool SoDataSet::isDataInMemory ( const SoLDMTileID tileID  )  const

Indicates whether the data attached to a tile is in main memory.

Called when the node front manager evaluates the texture front.

This allows to manage data that implements SoBufferAsyncInterface. If the specified tile does not implement SoBufferAsyncInterface then this method always returns true. So effectively it always returns true for non-LDM volumes.

static SbBool SoDataSet::isDataSigned ( DataType  dataType  )  [static]

Returns TRUE if the given data type is a signed integer data type.

bool SoDataSet::isInMemory ( SoLDMTileID  tileID  )  const

Indicates whether a tile is in main memory.

Called when the node front manager evaluates the texture front.

int SoDataSet::numSigBits (  )  const

Returns the number of significant bits.

virtual SoDEPRECATED void SoDataSet::readTile ( SoLDMTileID  tileID,
unsigned char *  buffer,
bool  transform 
) [virtual]
Deprecated:

Deprecated since Open Inventor 8000
Use void readTile(tileID, SoBufferObject*, bool ) instead.
virtual void SoDataSet::readTile ( SoLDMTileID  tileID,
SoBufferObject buffer,
bool  transform 
) [virtual]

Copies the specified tile into the provided buffer.


Applies the data transformation (set in dataTransform field) if transform is true.

virtual size_t SoDataSet::readTile ( SoBufferObject *&  bufferObject,
SoLDMTileID  tileID,
bool  transform 
) [virtual]

Copies the specified tile into the provided buffer.


Applies the data transformation (set in dataTransform field) if transform is true. Returns the size, in bytes, copied in the buffer. If size == 0 nothing was written (probably due to a memory allocation error).

virtual SbBool SoDataSet::redoEditing ( int  transactionId  )  [virtual]

Redo all modifications associated with the specified transaction id.

Returns true if successful. On error does nothing. May only be called after the specified transaction has been terminated (see finishEditing() method) and undone (see undoEditing() method). Schedules a redraw so the correct data is displayed.

Note: Redo is no longer available after transactions are saved. After calling saveEditing(), the transaction ids are no longer valid and the modified data is the new reference.

Reimplemented in SoVolumeData.

void SoDataSet::resetReader (  ) 

Resets previously set custom reader setup by setReader call.

Reference counting:

Warning: This method calls ref() on the reader and then calls unref(). If the reader has a reference count of zero (the default), the call to resetReader() will cause it to be destroyed! A warning message is posted in this case when using a debug build of Open Inventor.
virtual SbBool SoDataSet::saveEditing ( bool  recomputeLowerResolution = TRUE,
const std::vector< char * >  conversionParameters = std::vector< char * >(),
SaveEditingCB callback = NULL 
) [virtual]

Commit all transactions.

All modified tiles are written back to the data source using the current reader format. May only be called when no threads are editing, i.e. after all threads that called startEditing have called finishEditing.

Returns true if successful. On error does nothing returns false. Returns false if:

  • No edits have been done.
  • Transaction(s) still in progress (finishEditing has not been called).
  • Volume was not loaded using a volume reader (direct from memory doesn't work).
  • No volume writer class exists for this volume reader.

Warning: Effectively, saveEditing currently only works for data loaded using an SoVRLDMFileReader (an LDM format tiled data set) or an SoVRMemoryReader (data set completely in memory).

You can specify a callback (see SaveEditingCB) that will be called before saving each tile (even if the data uses a sliced format it is saved tile by tile). If this callback returns FALSE, the saving process is aborted. Warning: In such a case, lower resolutions are not updated and the result will be undefined.

Conversion Parameters:

  • Only apply if the volume reader is an SoVRLDMFileReader. In this case an instance of SoVRLDMFileWriter is used.
  • The options are the same as the LDM converter (see SoConverter), but only a subset of those options are supported.
  • The writer automatically sets verbose = true and histogram = false.
    This is because if histogram = true, ALL tiles must be re-written.
  • The parameter strings must be formatted exactly the same as on an LDM converter command line (see SoConverter).
  • The supported options are:
    • -histogram : sets histogram true or false
    • -q : sets verbose = false
    • -c : compression name
    • -l : compression level

Reimplemented in SoVolumeData.

SoDEPRECATED void SoDataSet::setLDMDataTransformFunction ( SoLDMDataTransformFunction func,
void *  userData = NULL 
)

If set, the user-defined function is called after each tile is loaded, but before it is stored in main memory.

This allows you to modify the original data (for example, scaling or filtering) before it is displayed.

Deprecated:

Deprecated since Open Inventor 8000
Use the SoDataSet::dataTransform field instead.
void SoDataSet::setLDMReader ( SoLDMReader reader  ) 

Sets the LDM volume reader object to use.


This method allows the data to be read directly from the disk using the specified subclass of SoVolumeReader.

void SoDataSet::setReader ( SoVolumeReader reader,
SbBool  takeOwnership = FALSE 
)

This method allows the data to be read directly from the disk using the specified subclass of SoVolumeReader.

If the takeOwnership parameter is FALSE (default), LDM will not delete the specified instance. Otherwise, LDM will automatically delete the specified instance, for example, when the SoDataSet node is deleted. If filename is not set before setting the reader, LDM will display an error message just to warn that the reader has not opened any file yet. LDM continues to work as expected.

Note: When using a custom reader, any reader method that changes the volume properties (dimension, size, data type, etc) should notify the SoVolumeData node by calling the reader's touch() method. If this notification is not done, SoDataSet fields, for example SoDataSet::extent, won't be updated correctly.

virtual SbBool SoDataSet::startEditing ( int &  transactionId  )  [virtual]

Initiate an editing transaction.


Returns true if successful and also returns a unique transaction id. This value is required for finishing the edit transaction (see finishEditing()) and for undo/redo (see undoEditing() and redoEditing()). Multiple transactions may be active at the same time.

Reimplemented in SoVolumeData.

virtual SbBool SoDataSet::undoEditing ( int  transactionId  )  [virtual]

Undo all modifications associated with the specified transaction id.

Returns true if successful. On error does nothing. May only be called after the specified transaction has been terminated (see finishEditing() method). Schedules a redraw so the correct data is displayed.

Note: Undo is no longer available after transactions are saved. After calling saveEditing(), the transaction ids are no longer valid and the modified data is the new reference.

Reimplemented in SoVolumeData.

virtual SbBox3f SoDataSet::voxelToXYZ ( const SbBox3f box  )  const [virtual]

Converts the specified box in voxel coordinates (I,J,K) to geometric coordinates (X,Y,Z).

The geometric coordinates are expressed in "extent" space, where voxel coordinates are mapped to the box defined by the volume extent.

Correctly converts coordinates that are outside the volume dimensions, but the resulting geometric coordinate is outside the volume extent.

See also:
voxelToXYZ(const SbVec3f&) const
XYZToVoxel(const SbVec3f&) const
XYZToVoxel(const SbBox3f&) const
virtual SbVec3f SoDataSet::voxelToXYZ ( const SbVec3f dataPosition  )  const [virtual]

Converts the specified point in voxel coordinates (I,J,K) to geometric coordinates (X,Y,Z).

The geometric coordinates are expressed in "extent" space, where voxel coordinates are mapped to the box defined by the volume extent.

The left bottom coordinate of the voxel is returned. Correctly converts coordinates that are outside the volume dimensions, but the resulting geometric coordinate is outside the volume extent.

See also:
voxelToXYZ(const SbBox3f&) const
XYZToVoxel(const SbVec3f&) const
XYZToVoxel(const SbBox3f&) const
virtual void SoDataSet::writeTile ( SoLDMTileID  tileID,
SoBufferObject buffer,
SoVolumeWriter writer 
) [virtual]

Write the specified tile using the specified writer.

No operations are done on buffer (dataTransform or edition), the buffer is written as is. The writer must be initialized and handles must be properly set (see SoVolumeReader::closeAllHandles and SoVolumeWriter::restoreAllHandles), ie. the current reader's handles must be closed, and the specified writer's handles must be opened.

virtual SbBox3f SoDataSet::XYZToVoxel ( const SbBox3f xyzBox  )  const [virtual]

Converts the specified box in geometric coordinates to voxel coordinates.

The geometric coordinates are expressed in "extent" space, where voxel coordinates are mapped to the box defined by the volume extent.

Correctly converts coordinates that are outside the volume extent, but the resulting voxel coordinate is outside the volume dimensions.

See also:
voxelToXYZ(const SbVec3f&) const
voxelToXYZ(const SbBox3f&) const
XYZToVoxel(const SbVec3f&) const
virtual SbVec3f SoDataSet::XYZToVoxel ( const SbVec3f dataPosition  )  const [virtual]

Converts the specified point in geometric coordinates (X,Y,Z) to voxel coordinates (I,J,K).

The geometric coordinates are expressed in "extent" space, where voxel coordinates are mapped to the box defined by the volume extent.

Correctly converts coordinates that are outside the volume extent, but the resulting voxel coordinate is outside the volume dimensions.

See also:
voxelToXYZ(const SbVec3f&) const
voxelToXYZ(const SbBox3f&) const
XYZToVoxel(const SbBox3f&) const

Friends And Related Function Documentation

friend class SoLDMGeometry [friend]
friend class SoLdmValuationAction [friend]

Reimplemented from SoNode.


Member Data Documentation

Indicates if resource allocation is done only on first render traversal or as soon as the node is created.

Default is TRUE. It must be set to FALSE if the dataset is not inserted in a scene graph but will be used for data access for example. Otherwise, memory resources will still remain on default value.

When using multiple SoDataSet nodes, the dataSetId field uniquely identifies each data set used in the compositing.

It also specifies the OpenGL texture unit in which the textures for this data set will be stored when doing render compositing. It is 1 by default (texture unit 0 is reserved for the color lookup table by default). The number of available texture units depends on your hardware. You can query this number using getMaxNumDataSets.

Note: The SoDataSetId node can also be used to define dataSetId. If an SoDataSetId node is traversed before the SoDataSet node, the id from the SoDataSetId node is used and this field is ignored.

NOTE: field available since Open Inventor 6.0

If set to an appropriate SoLDMDataTransform object, the object's transformFunction method is called after each tile is loaded, but before it is stored in main memory.

This allows you to modify the original data (for example, scaling or filtering) before it is displayed. Default is no transform.

Note: Before Open Inventor 8.0, the data transformFunction was set

using the setLDMDataTransformFunction method. That method is now deprecated.

NOTE: field available since Open Inventor 8.0

The real size (extent) of the volume in modeling coordinates.

Default is -1,-1,-1 to 1,1,1.

Note this can be used to define a volume with non-uniform voxel spacing. For example, if the volume dimensions (voxels) are 64x64x64, but the voxel spacing in Z is twice the X and Y spacing, then you might specify the volume size as -1 to 1 for X and Y but -2 to 2 for Z.

Indicates the file location containing the data set.

Default is an empty string. Depending on the file type, the corresponding SoVolumeReader (if it exists) is used.

File Extension Loader Class Description
.am SoVRAmFileReader Amira Mesh file format
.dc3, .dic, .dicom SoVRDicomFileReader Dicom file format
.fld SoVRAvsFileReader AVS field file format
.lda or .ldm SoVRLdmFileReader Large Data Management file format
.sgy or .segy SoVRSegyFileReader SEG Y revision 1 file format
.vol SoVRVolFileReader Vol file format
.vox SoVRVoxFileReader Vox file format
.lst SoVRRasterStackReader Lst file format

The filename extension is not case sensitive.

Note: SoDataSet and its derived classes (SoVolumeData, etc) do not search the SoInput directory list to find files specified in this field. To check file existence and other properties the SbFileHelper class may be useful.

Contains an SoLDMResourceParameters object which allows you to set LDM resource parameters.

For scalar (non-RGBA) data, specifies the size of voxel values on the GPU in bits.

The valid values are: 0 (default), 8 and 16.
When set to 0, LDM chooses the best precision based on the size of the data type (or if specified, the number of significant bits) - meaning that LDM will store 8-bit values on the GPU for 8-bit data and store 16-bit values for all other data types.

There are several trade-offs influenced by this value, including:

  • 8 bit values use less memory on the GPU than 16-bit values, allowing more data to be stored on the GPU. 8-bit values are adequate for many visualization tasks. But...
  • If the specified (or chosen) precision is smaller than the data type, then LDM must scale down the data values before sending them to the GPU.
    • Limitation: This is currently unavoidable for 32-bit data.
    • Down scaling adds some time whenever a tile of data must be sent to the GPU.
    • In particular, all tiles currently stored on the GPU must be rescaled if the application changes the data range (SoDataRange node).
      Note: As a result, changing the data range may be slow for large volumes.
    • Down scaling also means "aliasing" data values, i.e. multiple data values may scale to the same value on the GPU.
NOTE: field available since Open Inventor 6.0

Data with this value won't be rendered.


Default is NaN (Not a Number) which means that this value is not taken into account. Otherwise, value must be in agreement with data type. Limitations: There are several limitations in order for the undefined value to work :

  • The texturePrecision must be at least equal to the number of significant bits of the data type.
  • The data type must be BYTE, SHORT (either SIGNED or UNSIGNED) or FLOAT
  • The field is ignored in the following classes : SoHeightFieldProperty, SoHeightFieldPropertyMask and SoVolumeMask. Setting this field has no effect in these cases.
  • In the case of multiple SoVolumeData,the undefinedValue must be the same in all SoVolumeData. If different values are provided, only the latest one on the state will be considered for the rendering.
NOTE: field available since Open Inventor 10.11

Controls use of OpenGL lossy texture compression for RGBA data (if available).

Default is TRUE.

A significant advantage of compressed textures is that they conserve texture memory space. At the moment, the extension works on RGBA textures only, not on paletted textures. The compression factor is about 5.

A potential drawback of compressed textures is that lossy compression can result in values on the GPU that are slightly different from the actual value in the volume. For example "gray scale" colors could have a slight color in some cases. You should always set this option to false when using "RGBA" data to store 32-bit "id" values.


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

Open Inventor Toolkit reference manual, generated on 15 Mar 2023
Copyright © Thermo Fisher Scientific All rights reserved.
http://www.openinventor.com/