public class SoVolumeData extends SoDataSet
SoVolumeRender
, SoOrthoSlice
, SoObliqueSlice
, etc.) and is the parent class for some specialized data nodes (SoHeightFieldGeometry
, SoVolumeMask
, etc.).
Note: Since the camera viewpoint is used to determine which part of the volume to load, the behavior of SoVolumeData
is not correctly defined when no camera node has been traversed before the SoVolumeData
. This can result in console warnings.
The data volume can be specified by:
fileName
fieldsetReader()
. See the supported file formats below. SoVolumeData
and its derived classes do not search the SoInput
directory list to find files.
Calling the setReader()
method
This is the most general method because an application can specify an instance of one of the standard VolumeViz readers or an instance of a custom subclass of SoVolumeReader
.
You might use this method with a standard VolumeViz reader class if the data file's name has a non-standard extension. In other words, if VolumeViz will not be able to select the correct volume reader automatically, explicitly create an instance of the correct reader and pass it to the setReader()
method.
VolumeViz will get the volume properties (dimensions, size, data type, etc) and access the volume data through the specified reader object. Creating an instance of a custom volume reader (see SoVolumeReader
for more information) allows the application to completely control how, and from where, the data is loaded. For example the data could be accessed through an application specific API.
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, SoVolumeData
fields, for example extent
, won't be updated correctly.
Applications can use the getReader()
method to query the current volume reader, but should always verify the class type before using the returned object.
data
fieldgetReader()
will return an SoVRMemoryReader
. SoLDMResourceParameters.tileDimension
).
Volume Properties:
data
field directly you specify the volume dimensions.) You can query the volume dimensions using the data
field. For example: SbVec3i32 voldim = volumeData.data.getSize();
extent
field. The volume extent is the bounding box of the volume in world coordinates. Often the volume extent in 3D is set equal to the dimensions of the volume or to values that are proportional to the volume dimensions. For example, -1 to 1 on the longest axis of the volume and proportional values for the other axes puts the origin (0,0,0) at the center of the volume, simplifying rotations. However the volume extent can be any range, for example the range of line numbers in a seismic survey. The volume extent indirectly specifies the voxel size/spacing. You can query the current volume extent using the extent
field. For example: SbBox3f volext = volumeData.extent.getValue();
Notes:
SoOrthoSlice
, etc) associated with the volume. Changing the volume extent effectively changes the voxel size. This is commonly used, for example, to scale a seismic volume along the time axis. SoVolumeRender
, SoOrthoSlice
, etc). However the same transformation must be applied to the volume data node as well as the volume rendering nodes associated with that volume. Effectively any transformation nodes that affect the volume must be placed before the volume data node. SoProjection
node (with some limitations). This allows rendering of volumes defined, for example, in cylindrical coordinates or geographic coordinates.
dataRGBA
field. The data type is determined by the reader (or when setting the data
field). You can query the data type and/or number of bytes per voxel using methods inherited from SoDataSet
. For example: int bytesPerVoxel = volumeData.getDataSize(); SoDataSet.DataTypes type = volumeData.getDataType();
SoDataRange
node to specify the range of values that will be mapped into the transfer function. You can query the actual minimum and maximum values in the volume using the getMinMax methods. For example: double[] minmax = volumeData.getDoubleMinMax();
Note: These methods might force VolumeViz to load the entire data set if the volume reader does not respond to the getMinMax query. For example in an LDM format data set, the min and max values are stored in the LDM header, so the query is very fast. For other data sets VolumeViz may be forced to load the entire data set and scan all the values to compute the min and max values. For a large data set this may take a long time.
SoDataSet
and SoVolumeData
. The ldmResourceParameters
field contains an SoLDMResourceParameters
object that controls, for example, the amount of CPU memory and GPU memory that the volume can use.
Basic volume visualization tools:
SoVolumeData
node. (Multiple data sets can also be specified. See the next section.)
SoROI
node. This node limits the extent of all rendering nodes including slices.
SoDataRange
node.
SoTransferFunction
node.
SoMaterial
node.
SoVolumeRenderingQuality
node. (Note: You should always enable lighting using this node, not the lighting field of SoVolumeRender
.) Features include:
SoVolumeDataDrawStyle
node specifies the volume rendering style(s) for a volume or for a voxel region defined by an SoVolumeMask
node. The available rendering styles are hidden (not rendered), direct volume rendering, a set of isosurfaces and/or the region boundary surface.
SoShadowGroup
node.
SoLDMGlobalResourceParameters
and SoLDMResourceParameters
.
SoOrthoSlice
: Renders a single axis aligned slice.
SoObliqueSlice
: Renders a single arbitrarily aligned slice.
SoFenceSlice
: Renders a "strip" of connected oblique slices.
SoVolumeSkin
: Renders the faces of the current Region of Interest (see SoROI
). Effectively a set of ortho slices.
SoVolumeIndexedFaceSet
(etc): Renders a "slice" made up of arbitrary geometry, for example a curved or cylindrical slice.
SoVolumeIsosurface
: Renders the isosurface defined by the specified data value. (This is done completely on the GPU. To get the geometry of an isosurface back on the CPU see the MeshViz extension.)
SoVolumeRender
: Renders the volume using direct volume rendering.
Advanced volume visualization:
SoVolumeShader
node and GLSL shader functions. VolumeViz provides a framework of prebuilt shader functions for commonly used calculations and effects. This allows applications to extend or replace stages in the rendering pipeline while still taking advantage of other VolumeViz features.
SoClipPlane
) like any other Open Inventor geometry. (However for clipping against axis aligned planes, using an SoROI
node is much more efficient.)
SoROI
node. The box can be modified by a secondary exclusion box, allowing cut-away views like the "chair cut" in seismic visualization.
SoVolumeClippingGroup
node. The clipping geometry can be any closed shape, for example a cylinder or a shape extruded from a polygon.
SoUniformGridClipping
node.
SoVolumeMask
node. SoVolumeMask
also allows applying different transfer functions to different regions and other powerful features.
SoDetail
provide more specific information for each rendering class. For example SoOrthoSliceDetail
provides the IJK coordinates and value of the specific voxel under the cursor.
SoOrthoSliceDragger
allows dragging a slice through the volume and SoROIManip
allows moving and resizing a region of interest (SoROI
).
SoTransferFunction
.
SoVolumeRender
and also the SoInteractiveComplexity
node.
SoLDMDataTransform
class (see the dataTransform field of SoDataSet
) applies a computation to each LDM data tile requested from the volume reader before the tile is stored in system memory. This can be used to apply "static" filters to the data, for example to apply DICOM Rescale Slope and Intercept values.
SoVolumeTransform
node applies a computation to the LDM data tiles just before they are sent to the GPU. This can be used to apply dynamic filters to the data, for example computing seismic attribute values.
SoVolumeData
nodes can be inserted in the same scene graph.
SoVolumeGroup
node to manage and correctly render intersecting regions.
SoMultiDataSeparator
as the parent of the nodes that will be composited.
SoVolumeShader
) means combining multiple volumes on the GPU at render time using a fragment shader. Render compositing can be used, for example, to implement "co-blending" of multiple volumes or to implement multi-channel color combining.
SoDataCompositor
) on the CPU at data loading time. Data compositing can be used, for example, to visualize the difference between two data sets.
SoLDMDataAccess
provides the methods to extract data from a volume. The data is accessible whether the SoVolumeData
is part of a scene graph or not.
SoLDMWriter
class.
SoBufferObject
class abstracts data management. Each buffer object is an instance of a device specific data object, for example SoCpuBufferObject
or SoCudaBufferObject. This allows the application to control where memory is actually allocated. It also allows algorithms to be implemented on CPU or GPU (or both) using SoBufferObject
without knowing where the memory is allocated (Open Inventor will transfer when necessary).
SoDevice
class abstracts computing and rendering devices. Device specific classes, for example SoCpuDevice
or SoCudaDevice, allow querying the number of available devices, available memory and other properties.
SoArithmetic
, SoConversion
, SoConvolution
and SoSeismic
.
Multiple data sets:
Multiple SoVolumeData
nodes can be inserted in the same scene graph. If the volumes are independent and rendered separately, use an SoVolumeGroup
node to manage and correctly render intersecting regions. More commonly multiple volumes will be combined together in a single rendering using render compositing (SoVolumeShader
) or data compositing (SoDataCompositor
). In these cases you must use an SoMultiDataSeparator
as the parent of the nodes that will be composited.
Render compositing (SoVolumeShader
or SoVolumeRenderingQuality
) is a way of combining multiple volumes on the GPU at render time using a GLSL fragment shader. The volumes can each have their own transfer function or they can all use the same one. Render compositing can be used, for example, to implement "co-blending" of multiple volumes or to implement multi-channel color combining. The number of volumes to compose is limited by the number of OpenGL texture units supported by the graphics board (normally at least 16). This number is returned by the getMaxNumDataSets
function.
Data compositing allows you to combine multiple volume data sets (see SoDataCompositor
) or to transform a single data set in memory (see #setLDMDataTransformFunction()) instead of storing the combined data sets on disk. For example, it can be used to visualize the result of the difference between two data sets. There is no limit on the number of volumes that can be composed on the CPU.
Note that the word
composition is also used in SoVolumeRender
. There it refers to the way that samples along the raycasting ray are combined to form the final image.
The dataSetId
field is used to differentiate SoVolumeData
nodes when doing render or data compositing.
Some rules must be observed when doing render or data compositing:
SoVolumeData
node must have a unique dataSetId
. SoVolumeData
nodes to be composited must have the same volume dimensions (number of voxels in X, Y, and Z) and tile size. SoVolumeData
nodes to be composited, as well as the compositing node (e.g. SoVolumeShader
or SoVolumeRenderingQuality
) and the rendering node (e.g. SoVolumeRender
), must be under an SoMultiDataSeparator
node.
SoVolumeData
nodes to be composited must be all scalar data sets or all RGBA data sets. To composite scalar and RGBA data sets under the same SoMultiDataSeparator
, set the
usePalettedTexture field to false in the scalar dataset's SoVolumeData
node to force the scalar data to be converted into RGBA data.
SoVolumeData
node used in a data compositing scheme must not be inserted multiple times in the scene graph. Use another volume data node pointing to the same file.
SoVolumeData
node has its own resource settings (see field ldmResourceParameters
). The resources required for the composition are the sum of the resources for all of the SoVolumeData
nodes involved. When using a fragment shader to do render compositing, texture coordinates can be retrieved from texture unit 0 (texture coordinates are sent using glTexCoord function). To minimize the number of texture units needed, all the transfer functions (see SoTransferFunction
) for the volumes to be composited are stored in a single 2D texture. By default this texture is loaded in texture unit 0. However this default behavior can be changed through SoPreferences
using the environment variable IVVR_TF_TEX_UNIT. Each volume's data is loaded in the texture unit specified by its dataSetId
. Therefore do not set dataSetId
to the texture unit used to store the transfer functions.
Please see SoMultiDataSeparator
and SoVolumeShader
for more information, and example code, for compositing multiple volumes.
RGBA Data
Voxels in an RGBA volume are UNSIGNED_INT32, containing 8 bits each of Red, Green, Blue and Alpha. All rendering nodes (slices, volume rendering, etc) work with RGBA volumes. Region of Interest, clipping and other features also work with RGBA volumes. However because the volume already specifies the colors to be used for rendering, the data range, transfer function and some rendering features are ignored. Lighting works with RGBA volumes using gradient vectors computed from the luminance value of the voxels.
Notes:
SbColor
getPackedValueEndiannessOrder() method to convert values,
not the getPackedValue() method.
useCompressedTexture
option is true by default. This can significantly reduce the amount of GPU memory required to hold an RGBA volume. But it also causes loss of precision. This is normally not noticeable for true RGBA values (i.e. color values), but compression should be turned off when using "RGBA" data to store 32-bit "id" values.
Volume Editing
Volume editing is based on transactions. A transaction is created by calling the following methods: Calling saveEditing() will update the data source associated with this VolumeViz provides multiple methods to modify data including:
File format notes:
Note: '3D TIFF' files (multiple images in one file) are not currently supported.
File format/default:
VolumeData {
Action behavior:
See also:
Starting a transaction returns a unique id identifying the current transaction. This id is used to finish the transaction by calling finishEditing(). After the transaction is finished, this id can also be used to undo or redo the transaction. The finish method will schedule a redraw so the modified data is displayed. Multiple transactions may be active at the same time.
After a transaction is finished, the effect can be undone by calling undoEditing() with the transaction id. Undo also schedules a redraw so the correct data is displayed. Similarly a transaction that was undone can be re-applied by calling redoEditing() with the transaction id.
SoVolumeData
node with all edits performed on the volume since the last save. Updating is done using the SoVolumeWriter
returned by the current SoVolumeReader
. The save method may only be called when no transactions are active, i.e. after finish has been called for all transactions.
Note:
SoVRMemoryReader
(data set completely in memory).
Supported file formats:
File extension Reader class Description
.am SoVRAmFileReader
Avizo Mesh file format
.dc3, .dic, .dicom SoVRDicomFileReader
DICOM file format
.fld SoVRAvsFileReader
AVS field file format
.lda or .ldm SoVRLdmFileReader
LDM file format
.sgy or .segy SoVRSegyFileReader
SEG Y rev 1 file format
.vol SoVRVolFileReader
Vol file format
.vox SoVRVoxFileReader
Vox file format
.lst SoVRRasterStackReader
Lst file format
Avizo mesh is a general purpose file format that can contain many different kinds of data. The VolumeViz file reader can load Avizo mesh files containing a 3-dimensional "Lattice" data object with uniform coordinates and any data type. See SoVRAmFileReader
for limitations.
Note: Unlike Amira and Avizo, VolumeViz cannot automatically open Amira/Avizo format data files unless they have the file name extension ".am". To open an Amira/Avizo data file with a different extension, the application must explicitly create an instance of SoVRAmFileReader
and use the setReader()
method.
AVS field is a general purpose file format that can contain many different kinds of data. The VolumeViz file reader can load AVS field files containing 3-dimensional, uniform data of type "byte". See SoVRAvsFileReader
.
A widely used format for storing medical image data (CT, MRI, etc), defined by the National Electrical Manufacturers Association (NEMA) (medical.nema.org). See SoVRDicomFileReader
LDM is a format defined by VSG for storing hierarchical multi-resolution volume data. VolumeViz includes a utility program that can convert any other format supported by VolumeViz into this format (see SoVolumeConverter
). Preprocessing volume data into this format provides the maximum benefits from the VolumeViz large data management (LDM) features. See SoVRLdmFileReader
.
A widely used format for storing seismic trace data, defined by the Society of Exploration Geophysicists publication "Digital Tape Standards" (www.seg.org). The VolumeViz reader supports all sizes of integer and float data, and can correctly determine the number of samples per trace in many cases. However the reader also has many options to adapt to differences in SEGY file headers. See SoVRSegyFileReader
.
A simple volume interchange format (see "Introduction to Volume Rendering", Lichtenbelt, Crane, Naqvi, 1998). The VolumeViz reader can load files containing 8- or 16-bit voxels. See SoVRVolFileReader
.
A volume interchange format defined by TeraRecon Inc. (www.terarecon.com). The VolumeViz reader can load "Vox1999a" files containing 8- or 16-bit voxels (first volume only). See SOVRVoxFileReader.
A simple format for loading a stack of images. Specify the names of the image files in a .lst file. VolumeViz can load image data in most common image formats including BMP, DDS, GIF, JPEG, JPEG2000, PNG and TIFF. See SoVRRasterStackReader
for details and limitations.
}
allocateResourceOnRender false
data NODATA 0 0 0 UBYTE 8
dataRGBA false
dataSetId 1
extent -1 -1 -1 1 1 1
fileName ""
texturePrecision 0
useCompressedTexture true
useExtendedData false
usePalettedTexture true
useSharedPalettedTexture true
SoCallbackAction
, SoGLRenderAction
, SoGetBoundingBoxAction
, SoPickAction
, SoWriteAction
Sets volume data parameters in the traversal state.
SoVolumeRender
, SoOrthoSlice
, SoObliqueSlice
, SoVolumeReader
, SoVolumeSkin
, SoDataCompositor
, SoLDMGlobalResourceParameters
, SoLDMResourceParameters
Modifier and Type | Class and Description |
---|---|
static class |
SoVolumeData.Axis
Which axis to handle.
|
static class |
SoVolumeData.CoordinateTypes
Coordinate type used by this data set.
|
static class |
SoVolumeData.OverMethods
Deprecated.
|
static class |
SoVolumeData.StorageHints
Deprecated.
|
static class |
SoVolumeData.SubMethods
Deprecated.
|
SoDataSet.DataTypes, SoDataSet.LDMDataModifier
Inventor.ConstructorCommand
Modifier and Type | Field and Description |
---|---|
static int |
AUTO
Deprecated.
Use
SoVolumeData.StorageHints.AUTO instead. |
static int |
AVERAGE
Deprecated.
Use
SoVolumeData.SubMethods.AVERAGE instead. |
static int |
CONSTANT
Deprecated.
Use
SoVolumeData.OverMethods.CONSTANT instead. |
static int |
COORDINATES_RECTILINEAR
Deprecated.
Use
SoVolumeData.CoordinateTypes.COORDINATES_RECTILINEAR instead. |
static int |
COORDINATES_UNIFORM
Deprecated.
Use
SoVolumeData.CoordinateTypes.COORDINATES_UNIFORM instead. |
static int |
CUBIC
Deprecated.
Use
SoVolumeData.OverMethods.CUBIC instead. |
SoSFArray3D |
data
Specifies the volume data, including dimensions, data type and number of significant bits.
|
SoSFBool |
dataRGBA
Contains true if the volume contains RGBA values rather than scalar values.
|
static int |
LINEAR
Deprecated.
Use
SoVolumeData.OverMethods.LINEAR instead. |
static int |
MAX
Deprecated.
Use
SoVolumeData.SubMethods.MAX instead. |
static int |
MEMORY
Deprecated.
Use
SoVolumeData.StorageHints.MEMORY instead. |
static int |
NEAREST
Deprecated.
Use
SoVolumeData.SubMethods.NEAREST instead. |
static int |
NONE
Deprecated.
Use
SoVolumeData.OverMethods.NONE instead. |
SoSFEnum<SoVolumeData.StorageHints> |
storageHint
Deprecated.
As of Open Inventor 8600 See documentation for more details
|
static int |
TEX2D
Deprecated.
Use
SoVolumeData.StorageHints.TEX2D instead. |
static int |
TEX2D_MULTI
Deprecated.
Use
SoVolumeData.StorageHints.TEX2D_MULTI instead. |
static int |
TEX2D_SINGLE
Deprecated.
Use
SoVolumeData.StorageHints.TEX2D_SINGLE instead. |
static int |
TEX3D
Deprecated.
Use
SoVolumeData.StorageHints.TEX3D instead. |
SoSFBool |
useExtendedData
If true, VolumeViz stores an additional copy of each loaded tile.
|
SoSFBool |
usePalettedTexture
For a volume containing scalar data values, controls whether scalar values (true) or RGBA values (false) are loaded on the GPU (the name is historical).
|
SoSFBool |
useSharedPalettedTexture
Note: On graphics boards that support programmable shaders, this field is ignored (virtually all graphics boards support programmable shaders).
|
SoSFInt32 |
volumeDataId
Deprecated.
As of Open Inventor 7.0, use
SoDataSet#dataSetId instead. |
static int |
VOLUMEPRO
Deprecated.
Use
SoVolumeData.StorageHints.VOLUMEPRO instead. |
static int |
X
Deprecated.
Use
SoVolumeData.Axis.X instead. |
static int |
Y
Deprecated.
Use
SoVolumeData.Axis.Y instead. |
static int |
Z
Deprecated.
Use
SoVolumeData.Axis.Z instead. |
allocateResourceOnRender, dataSetId, dataTransform, extent, fileName, FLOAT, ldmResourceParameters, SIGNED_BYTE, SIGNED_INT32, SIGNED_SHORT, texturePrecision, UNSIGNED_BYTE, UNSIGNED_INT32, UNSIGNED_SHORT, useCompressedTexture
VERBOSE_LEVEL, ZeroHandle
Constructor and Description |
---|
SoVolumeData()
Constructor.
|
Modifier and Type | Method and Description |
---|---|
void |
enableAutoSubSampling(boolean enable)
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
void |
enableAutoUnSampling(boolean enable)
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
void |
enableSubSampling(boolean enable)
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
SoVolumeData.CoordinateTypes |
getCoordinateType() |
long[] |
getHistogram()
Returns the histogram of the volume data.
|
int[] |
getIntMinMax()
Deprecated.
As of Open Inventor 7.0, please use
SoDataSet.getMinMax() or SoDataSet.getDoubleMinMax() instead. |
SbVec3i32 |
getPageSize()
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
float[] |
getRectilinearCoordinates(SoVolumeData.Axis axis)
Returns a vector describing mapping from uniform space to rectilinear space.
|
SbVec3i32[] |
getSubSamplingLevel()
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
int |
getTexMemorySize()
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
boolean |
isAutoSubSamplingEnabled()
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
boolean |
isAutoUnSamplingEnabled()
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
boolean |
isPaging()
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
boolean |
isSubSamplingEnabled()
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
void |
loadRegions(SbBox3i32[] region,
SoState state,
SoTransferFunction transFunc)
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
SoVolumeData |
reSampling(SbVec3i32 dimension,
SoVolumeData.SubMethods subMethod)
Deprecated.
|
SoVolumeData |
reSampling(SbVec3i32 dimension,
SoVolumeData.SubMethods subMethod,
SoVolumeData.OverMethods name_29266)
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
void |
setPageSize(int size)
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
void |
setPageSize(SbVec3i32 size)
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
void |
setRGBAData(boolean flag)
Force data to be considered as RGBA values.
|
void |
setSubSamplingLevel(SbVec3i32 ROISampling,
SbVec3i32 secondarySampling)
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
void |
setSubSamplingMethod(SoVolumeData.SubMethods method)
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
void |
setTexMemorySize(int size)
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
SoVolumeData |
subSetting(SbBox3i32 region)
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
void |
unSample()
Deprecated.
As of Open Inventor 9000 See documentation for more details
|
void |
updateRegions(SbBox3i32[] region)
Updates regions of the volume that have been modified.
|
SbBox3f |
voxelToXYZ(SbBox3f box)
Converts the specified box in voxel coordinates to geometric coordinates.
|
SbVec3f |
voxelToXYZ(SbVec3f dataPosition)
Converts the specified point in voxel coordinates to geometric coordinates.
|
SbBox3f |
XYZToVoxel(SbBox3f xyzBox)
Converts the specified box in geometric coordinates to voxel coordinates.
|
SbVec3f |
XYZToVoxel(SbVec3f dataPosition)
Converts the specified point in geometric coordinates to voxel coordinates.
|
dataSize, editBoxes, editSolidShape, editSubVolume, editSubVolume, editSurfaceShape, editTile, editTile, finishEditing, getDataSize, getDataType, getDatumSize, getDimension, getDoubleMinMax, getLdmDataAccess, getLdmManagerAccess, getLDMReader, getMaxNumDataSets, getMinMax, getNodeFrontManager, getNumTimeSteps, getOverlapping, getReader, getTileDimension, getTileManager, getTileVisitor, getVVizGeometry, hasEditedTile, isDataFloat, isDataSigned, isTimeDependent, numSigBits, readTile, redoEditing, resetReader, setLDM, setLDMDataModifier, setLDMReader, setReader, setReader, setTileVisitor, startEditing, undoEditing, writeTile
affectsState, callback, copy, copy, distribute, doAction, getAlternateRep, getBoundingBox, getByName, getMatrix, getPrimitiveCount, getRenderUnitID, GLRender, GLRenderBelowPath, GLRenderInPath, GLRenderOffPath, grabEventsCleanup, grabEventsSetup, handleEvent, isBoundingBoxIgnoring, isOverride, pick, rayPick, search, setOverride, touch, write
copyFieldValues, copyFieldValues, enableNotify, fieldsAreEqual, get, getAllFields, getEventIn, getEventOut, getField, getFieldName, hasDefaultValues, isNotifyEnabled, set, setToDefaults
dispose, getEXTERNPROTO, getName, getPROTO, isDisposable, isSynchronizable, setName, setSynchronizable
getAddress, getNativeResourceHandle, startInternalThreads, stopInternalThreads
@Deprecated public final SoSFInt32 volumeDataId
SoDataSet#dataSetId
instead.@Deprecated public static final int AUTO
SoVolumeData.StorageHints.AUTO
instead.@Deprecated public static final int TEX2D_MULTI
SoVolumeData.StorageHints.TEX2D_MULTI
instead.@Deprecated public static final int TEX2D
SoVolumeData.StorageHints.TEX2D
instead.@Deprecated public static final int TEX3D
SoVolumeData.StorageHints.TEX3D
instead.@Deprecated public static final int MEMORY
SoVolumeData.StorageHints.MEMORY
instead.@Deprecated public static final int VOLUMEPRO
SoVolumeData.StorageHints.VOLUMEPRO
instead.@Deprecated public static final int TEX2D_SINGLE
SoVolumeData.StorageHints.TEX2D_SINGLE
instead.@Deprecated public static final int NEAREST
SoVolumeData.SubMethods.NEAREST
instead.@Deprecated public static final int MAX
SoVolumeData.SubMethods.MAX
instead.@Deprecated public static final int AVERAGE
SoVolumeData.SubMethods.AVERAGE
instead.@Deprecated public static final int NONE
SoVolumeData.OverMethods.NONE
instead.@Deprecated public static final int CONSTANT
SoVolumeData.OverMethods.CONSTANT
instead.@Deprecated public static final int LINEAR
SoVolumeData.OverMethods.LINEAR
instead.@Deprecated public static final int CUBIC
SoVolumeData.OverMethods.CUBIC
instead.@Deprecated public static final int COORDINATES_UNIFORM
SoVolumeData.CoordinateTypes.COORDINATES_UNIFORM
instead.@Deprecated public static final int COORDINATES_RECTILINEAR
SoVolumeData.CoordinateTypes.COORDINATES_RECTILINEAR
instead.@Deprecated public static final int X
SoVolumeData.Axis.X
instead.@Deprecated public static final int Y
SoVolumeData.Axis.Y
instead.@Deprecated public static final int Z
SoVolumeData.Axis.Z
instead.public final SoSFBool usePalettedTexture
texturePrecision
field.
If this field is false, the color map is applied on the CPU and the resulting RGBA values are loaded on the GPU. This implies that the GPU will interpolate between color values. There are a few cases where this setting is better. For example, interpolating between data values could create values that not actually in the data set. Also, applying the color map on the CPU means that a very large color map can be used because the size is not limited by the maximum texture size on the GPU.
If the volume contains explicit RGBA values, then this field is ignored and RGBA values are sent to the GPU.
public final SoSFBool useSharedPalettedTexture
public final SoSFBool useExtendedData
SoOrthoSlice
roaming will be roughly the same along each axis.
public final SoSFArray3D data
fileName
field or the setReader
method.
The numSigBits parameter of SoSFArray3D.setValue
indicates the number of bits really used for each value. If it equals 0, that means to use all bits, e.g., 8 bits if type = UNSIGNED_BYTE, 16 bits if type = UNSIGNED_SHORT and so on. This parameter is useful particularly when textures are loaded in paletted mode. Currently most hardware supports only 8 bits, so VolumeViz must discard the least significant bits. For example if type is UNSIGNED_SHORT, by default in paletted mode VolumeViz will discard the lowest 8 bits. If you specify numSigBits = 10, VolumeViz will discard only the lowest 2 bits.
Calling SoSFArray3D.setValue
with a CopyPolicy set to NO_COPY is equivalent to calling the deprecated SoVolumeData.setValue method.
Volume reader: Note that when a file format reader or custom volume reader is currently being used, setting the data field will automatically replace the current volume reader with a memory reader. Subsequent calls to getReader()
will return an SoVRMemoryReader
.
public final SoSFBool dataRGBA
This field is set automatically by volume readers. If the application is setting an in-memory volume into the data
field, the data
field must be set to UNSIGNED_INT32 format and the dataRGBA
field must be set to true.
Note that, for compatibility with older versions of Open Inventor, if the data is in-memory the the unsigned int values
must contain ABGR values, not RGBA. Use the SbColor
getPackedValueEndiannessOrder() method to convert values,
not the getPackedValue() method.
@Deprecated public final SoSFEnum<SoVolumeData.StorageHints> storageHint
public long[] getHistogram()
@Deprecated public int[] getIntMinMax()
SoDataSet.getMinMax()
or SoDataSet.getDoubleMinMax()
instead.@Deprecated public SoVolumeData reSampling(SbVec3i32 dimension, SoVolumeData.SubMethods subMethod)
@Deprecated public void enableSubSampling(boolean enable)
enableAutoSubSampling()
and enableAutoUnSampling()
, VolumeViz automatically subsamples or unsamples so that all textures fit into the texture memory specified by setTexMemorySize()
. The default is true.Deprecated since Open Inventor 9000 public SbBox3f XYZToVoxel(SbBox3f xyzBox)
public void setRGBAData(boolean flag)
data
field and the data format must be UNSIGNED_INT32.@Deprecated public boolean isSubSamplingEnabled()
@Deprecated public SbVec3i32 getPageSize()
public SbVec3f XYZToVoxel(SbVec3f dataPosition)
@Deprecated public void setSubSamplingLevel(SbVec3i32 ROISampling, SbVec3i32 secondarySampling)
enableAutoSubSampling()
. ROISampling corresponds to the sampling values used for the Region Of Interest. secondarySampling corresponds to the sampling values used for the rest of the volume (not yet used). Values are given in powers of two. For example if ROISampling is set to (1,1,0), the ROI will be subsampled using the subsampling factors (2,2,1). In this case the Z axis will not be subsampled.Deprecated since Open Inventor 9000 public void updateRegions(SbBox3i32[] region)
public SbBox3f voxelToXYZ(SbBox3f box)
public SbVec3f voxelToXYZ(SbVec3f dataPosition)
@Deprecated public void setPageSize(int size)
@Deprecated public void setPageSize(SbVec3i32 size)
@Deprecated public void setTexMemorySize(int size)
@Deprecated public int getTexMemorySize()
public SoVolumeData.CoordinateTypes getCoordinateType()
public float[] getRectilinearCoordinates(SoVolumeData.Axis axis)
@Deprecated public void loadRegions(SbBox3i32[] region, SoState state, SoTransferFunction transFunc)
In addition, if state is not NULL, it will create the corresponding textures and load them in texture memory. Likewise this can be used to pre-load textures that will be needed for rendering later. In this case it must only be called when a valid OpenGL context has been made current (generally a context is current if there is an Open Inventor window and at least one render has been done). State is normally obtained by querying the current SoGLRenderAction
, for example:
SoState
state = viewer.getGLRenderAction().getState();
Normally, VolumeViz will only load bricks that are currently needed for rendering some volume geometry, e.g., a slice or a subvolume. This method allows the application to force other bricks to be loaded, which may be useful to reduce the delay when a new brick is needed to render some volume geometry. Deprecated since Open Inventor 9000
No longer supported.
@Deprecated public boolean isPaging()
@Deprecated public SoVolumeData subSetting(SbBox3i32 region)
SoLDMDataAccess
class. @Deprecated public void enableAutoUnSampling(boolean enable)
enableSubSampling()
. The default is false.Deprecated since Open Inventor 9000 @Deprecated public boolean isAutoUnSamplingEnabled()
@Deprecated public void enableAutoSubSampling(boolean enable)
enableSubSampling()
. The default is true.Deprecated since Open Inventor 9000 @Deprecated public boolean isAutoSubSamplingEnabled()
@Deprecated public SbVec3i32[] getSubSamplingLevel()
enableAutoSubSampling()
.Deprecated since Open Inventor 9000 @Deprecated public SoVolumeData reSampling(SbVec3i32 dimension, SoVolumeData.SubMethods subMethod, SoVolumeData.OverMethods name_29266)
SubMethod()
and the over-sampling method OverMethod()
.
If a reader is specified, the original volume data is not loaded.
Over-sampling is not yet implemented. NONE (default) indicates that no over-sampling is performed. For example if the original dimension is 256x256x64 and the reSampling dimension is 128x128x128, the result is a volume of dimension 128x128x64.Deprecated since Open Inventor 9000
No longer supported. Please use SoLDMDataAccess
class.
@Deprecated public void unSample()
@Deprecated public void setSubSamplingMethod(SoVolumeData.SubMethods method)
enableAutoSubSampling()
. Depending on the kind of data, it may be useful to use a specific method. The default is NEAREST.Deprecated since Open Inventor 9000 Generated on January 23, 2025, Copyright © Thermo Fisher Scientific. All rights reserved. http://www.openinventor.com