public class SoVolumeDetail extends SoDetail
SoPickedPoint
object. If the picked geometry is an SoVolumeSkin
or SoVolumeRender
, use the getDetail method and cast the result to the appropriate class (SoVolumeSkinDetail
or SoVolumeRenderDetail
) to get extra information about the location of the pick.
SoVolumeDetail
returns information about the first (closest) non-transparent voxel along the pick ray and/or information about all the voxels intersected by the pick ray (called a profile). For the first non-transparent voxel (if any) on the pick ray, it returns XYZ position, IJK location, and data value. For the profile defined by all the intersected voxels, it returns:
This class returns information about the data values in the picked voxels. SoVolumeRenderDetail
also returns information about the mapped RGBA colors of the picked voxels.
GPU picking vs. CPU picking VolumeViz can compute the picked voxel(s) and voxel colors on the GPU. Important: To enable GPU picking
Also be aware of the following trade-off. If the realValue parameter is set to false, the voxel value returned may be based on lower resolution (sub-sampled) data. The values should be approximately the same, but to be sure of getting values from the full resolution data, set the realValue parameter to true.
Limitations:
See also:
GPU picking is generally faster than CPU picking, but more importantly it is the only way to be sure of getting the correct result if the application is using a custom shader (see SoVolumeShader
and VVizComputeFragmentColor) to compute voxel color and opacity. CPU picking always uses the color and opacity values assigned by the SoTransferFunction
node. Therefore the result should be the same when using SoTransferFunction
to assign color and opacity, but when using a custom shader the CPU picking algorithm is not able to know the color and opacity assigned by the shader.
SoRayPickAction
must be aware of the SoSceneManager
.
SoHandleEventAction
does this automatically, so it is not necessary for the application to take any action when using an SoEventCallback
node and calling the getPickedPoint() method. However if the application creates its own instance of SoRayPickAction
, then it must call the method SoAction.setSceneManager()
on that instance. If the scene manager is not specified, a warning message is issued and CPU picking is done.
SoMultiDataSeparator
, the detail class only returns values for the first volume in the scene graph.
SoDetail
, SoFenceSliceDetail
, SoVolumeRenderDetail
, SoVolumeSkinDetail
, SoVolumeRender
, SoVolumeSkin
Modifier and Type | Class and Description |
---|---|
static class |
SoVolumeDetail.ProfileValue |
static class |
SoVolumeDetail.ProfileValueD |
static class |
SoVolumeDetail.TransparentDoubleValue |
static class |
SoVolumeDetail.TransparentLongValue |
Inventor.ConstructorCommand
VERBOSE_LEVEL, ZeroHandle
Constructor and Description |
---|
SoVolumeDetail()
Constructor.
|
Modifier and Type | Method and Description |
---|---|
SoDetail |
copy()
Returns an instance that is a copy of this instance.
|
SoVolumeDetail.TransparentDoubleValue |
getFirstNonTransparentDoubleValue()
Calls getFirstNonTransparentDoubleValue(false).
|
SoVolumeDetail.TransparentDoubleValue |
getFirstNonTransparentDoubleValue(boolean realValue)
Returns the floating point value of the first non-transparent voxel along the pick ray (if any) and its position in object and data space.
|
SoVolumeDetail.TransparentLongValue |
getFirstNonTransparentValue()
Calls getFirstNonTransparentValue(false).
|
SoVolumeDetail.TransparentLongValue |
getFirstNonTransparentValue(boolean realValue)
Returns the integer value of the first non-transparent voxel along the pick ray (if any) and its position in object and data space.
|
SbVec3i32[] |
getProfileDataPos()
Returns the number of values along the profile and the profile position in data space (voxel coordinates).
|
int |
getProfileNumValues()
Returns the number of values along the profile and the profile position in data space (voxel coordinates).
|
SbVec3f[] |
getProfileObjectPos()
Returns the profile position in object space (world coordinates).
|
SoVolumeDetail.ProfileValue |
getProfileValue(int index)
Calls getProfileValue(index, false).
|
SoVolumeDetail.ProfileValue |
getProfileValue(int index,
boolean realValue)
Returns the index'th value (as an integer) and its position in object and data space.
|
SoVolumeDetail.ProfileValueD |
getProfileValueD(int index)
Calls getProfileValueD(index, false).
|
SoVolumeDetail.ProfileValueD |
getProfileValueD(int index,
boolean realValue)
Returns the index'th value (as a double) and its position in object and data space.
|
void |
setDetails(SbLine line,
SoVolumeData vd,
SoTransferFunction tf,
SoROI r) |
dispose, getAddress, getNativeResourceHandle, startInternalThreads, stopInternalThreads
public SoVolumeDetail.ProfileValue getProfileValue(int index)
public SoVolumeDetail.ProfileValueD getProfileValueD(int index)
public SoVolumeDetail.TransparentDoubleValue getFirstNonTransparentDoubleValue()
public SoVolumeDetail.TransparentLongValue getFirstNonTransparentValue()
public void setDetails(SbLine line, SoVolumeData vd, SoTransferFunction tf, SoROI r)
public SoVolumeDetail.TransparentLongValue getFirstNonTransparentValue(boolean realValue)
If the realValue parameter is true, VolumeViz will return the actual voxel value from the full resolution data. Note that this may require a read from disk if full resolution data is not currently in memory. If false, VolumeViz will return the voxel value from the (possibly subsampled) data currently in memory.
Warning To use GPU picking, you must specify realValue = false.
public SoVolumeDetail.ProfileValueD getProfileValueD(int index, boolean realValue)
getProfileDataPos()
method. However index is automatically clamped to the valid range of values.
If realValue is true, VolumeViz will return the actual voxel value from the full resolution data. Note that this may require a read from disk if full resolution data is not currently in memory. If false, VolumeViz will return the voxel value from the (possibly subsampled) data currently in memory.
Warning To use GPU picking, you must specify realValue = false.
public SoDetail copy()
public SoVolumeDetail.TransparentDoubleValue getFirstNonTransparentDoubleValue(boolean realValue)
If the realValue parameter is true, VolumeViz will return the actual voxel value from the full resolution data. Note that this may require a read from disk if full resolution data is not currently in memory. If false, VolumeViz will return the voxel value from the (possibly subsampled) data currently in memory.
Warning To use GPU picking, you must specify realValue = false.
public SoVolumeDetail.ProfileValue getProfileValue(int index, boolean realValue)
getProfileDataPos()
method. However index is automatically clamped to the valid range of values.
If realValue is true, VolumeViz will return the actual voxel value from the full resolution data. Note that this may require a read from disk if full resolution data is not currently in memory. If false, VolumeViz will return the voxel value from the (possibly subsampled) data currently in memory.
Warning To use GPU picking, you must specify realValue = false.
public int getProfileNumValues()
public SbVec3i32[] getProfileDataPos()
public SbVec3f[] getProfileObjectPos()
Generated on January 23, 2025, Copyright © Thermo Fisher Scientific. All rights reserved. http://www.openinventor.com