MedicalHelper Class |
Utility class for medical applications.
Namespace: OIV.Medical.Helpers
The MedicalHelper type exposes the following members.
Name | Description | |
---|---|---|
MedicalHelper | Initializes a new instance of the MedicalHelper class |
Name | Description | |
---|---|---|
BuildSliceAnnotation |
Slice viewer annotations.
This is just a convenience method and helps keep the demo/example programs
consistent. Applications can use SliceScaleBar (etc) directly.
| |
BuildSliceOrientationMarkers |
Build a scene graph to display slice orientation markers.
This is just a convenience method and helps keep the demo/example programs
consistent. Applications can use SliceOrientationMarkers directly.
| |
BuildSliceScaleBars |
Build a scene graph to display dynamic scale bars for slice viewing.
This is just a convenience method and helps keep the demo/example programs
consistent. Applications can use SliceScaleBar directly.
Note that a typical length, 10 cm, is assumed.
| |
CreateBoundingBox |
Convenience function to draw a specified bbox as a wireframe.
| |
CreateCube |
Convenience function to retrieve Cube corresponding to specified bbox.
| |
DicomAdjustDataRange |
Adjust data range based on values in the DICOM file,
i.e. the window center (0028,1050) and window width (0028,1051) values.
If there are multiple slices, values are taken from the first slice.
Volume is needed to get DICOM attributes, but is not modified.
| |
DicomAdjustVolume(SoVolumeData, SoMatrixTransform) |
Similar to DicomAdjustVolume( SoVolumeData, bool ) above but returns an SoMatrixTransform
that can be used to properly locate VolumeData in patient space in case of non axis aligned
acquisition:
...
SoMatrixTransform matrixTransform = new SoMatrixTransfrom();
DicomAdjustVolume(volumeData, matrixTransfrom)
root.AddChild(matrixTransform);
root.AddChild(volumeData);
... | |
DicomAdjustVolume(SoVolumeData, Boolean) |
Optimize volume data node for DICOM volumes.
The volume properties are modified (but not the data values).
Do not call this method before setting the volume data node's
fileName field or calling setReader.
- First, adjusts the LDM tile size to optimize data loading.
Note this adjustment is valid for any data format that is not already
tiled, i.e. most formats except .lda and .ldm.
- Second, adjusts the volume extent in 3D to be the actual physical extent
of the data set measured from outside edge to outside edge of the voxels.
This is a DICOM specific adjustment.
- Third, if 'useImagePosition' is true, adjusts the volume extent so the
center of the first voxel is positioned at the coordinates specified in
the data set's "Image position" (0020,0032) attribute. By default
the DICOM volume reader sets the volume extent so the center of the volume
is positioned at 0,0,0 in 3D space. This is a DICOM specific adjustment.
| |
DicomFindFilesbySeries |
Given the path to a DICOM file, returns a list containing all the files in
the same directory that are part of the same DICOM series, based on the
series UID (0x0020,0x000E).
(0020,000E) Series instance UID (required)
(0020,0011) Series number (required but may be "unknown")
(0008,103E) Series description (optional)
| |
DicomGetImagePosition |
Get the "Image Position (Patient)" attribute (0020,0032) from a DICOM volume.
DICOM calls this the upper left hand corner of the image, but more precisely
it's the center of the first voxel, in millimeters (mm). For VolumeViz the
upper left hand corner of the image is literally the corner of the voxel,
one-half voxel different from Image Position.
Note the SoVRDicomData getPosition() method does not return the value of
the Image Position attribute. It returns a value computed from Image Position.
| |
DicomGetWindowCenterWidth(SoDataRange) |
Get the window center (level) and width values from an SoDataRange node
| |
DicomGetWindowCenterWidth(SoVolumeData, SbVec2f) |
Get the window center (level) and width values from a DICOM volume.
If the query fails, returns false and sets 'winCW' to 0,0.
Uses the Window Center (0028,1050) and Window Width (0028,1051) tags from the
first image in the stack. If these tags do not exist in the volume, then window
center and width are computed from the actual data min and max values. (Note
that querying the actual min and max values may take some time because every
voxel must be loaded.)
This method may be called with a non-DICOM volume. In that case the actual
min and max data values are used.
| |
DicomSetWindowCenterWidth |
Set an SoDataRange node from the window center (level) and width values
| |
DollyZoom |
Make the scene appear larger or smaller.
Provided as a convenience to simplify application code.
Values greater than 1 make the scene appear larger. Values less than
1 make the scene appear smaller. For example a of 2 will make the
scene approximately 2 times larger in the rendering window. The
specific effect on the camera is a 'dolly' or a 'zoom' depending on
the type of camera.
This is often useful after calling ViewAll(). That method sets the
camera parameters based on a bounding sphere around the scene which
often leaves the scene not "filling" the viewport.
Details:
- SoPerspectiveCamera: changes the camera 'position' field.
For example, values greater than 1 move the camera closer to the
focal point (divide the camera's distance from the focal point by the
given value), which makes the scene appear larger. This is a 'dolly'.
- SoOrthographicCamera: changes the camera 'height' field.
For example, values greater than 1 decrease the view volume height
(scale the height by the inverse of the given value), which makes the
scene appear larger. This is a 'zoom' operation.
Note that the value expected by SoCameraInteractor.Dolly is the inverse,
which is less intuitive.
| |
Equals | Determines whether the specified Object is equal to the current Object. (Inherited from Object.) | |
ExampleDicomAnnotation |
Returns a collection of DicomInfo annotation nodes for Open Inventor medical examples.
This method is not important for customer applications, but the technique
can be useful for adding annotation text to an application window.
| |
ExampleLogoNode |
Returns a logo image node for Open Inventor medical example.
This method is not important for customer applications, but the technique
can be useful for adding logo images to an application window.
| |
ExampleWindowSize |
Returns standard window size for Open Inventor medical examples.
This method is not important for customer applications.
| |
FindNodeType |
Convenience function to find first specified node in the scene graph
Note: The function is Generic with defined constraint of NodeType : SoNode
| |
FindNodesNodeType |
Convenience function to find all node of specified type in the scene graph
| |
GetBoundingBox |
Convenience function to retrieve boundingBox of specified node.
If node contains SoVolumeData, use SoVolumeData extent.
| |
GetHashCode | Serves as a hash function for a particular type. (Inherited from Object.) | |
GetType | Gets the Type of the current instance. (Inherited from Object.) | |
MedicalAxisFromViewAxis(Axis, SbMatrix) | ||
MedicalAxisFromViewAxis(Axis, SoVolumeData) | ||
OrientView |
Adjusts the camera to view a slice or volume along the specified axis.
The camera is rotated to give the conventional orientation for the specified axis.
If the volume data is specified, then viewAll() is called to center the volume in
the view volume.
If the camera is an SoOrthographicCamera (the usual case for viewing a slice) and
the volume data node is specified, then the camera (specifically the view volume
height) is adjusted to make the slice image fill the viewport. This is convenient
because the viewAll() method gives a very loose fit around the slice image.
If the camera is an SoPerspectiveCamera (commonly used for viewing a 3D volume)
or the volume data node is specified, then ViewAll() is called, but no
additional adjustment is done to the camera. 'slack' is ignored in this case.
Axial -> "Feet" view.
Coronal -> "Anterior" view.
Sagittal -> "Left" view.
For a 3D volume rendering view, typically specify the Coronal axis.
| |
ReadFile |
Convenience function to read a .iv file and return pointer to the root
of the created scenegraph.
| |
ToString | Returns a string that represents the current object. (Inherited from Object.) | |
ViewAxisFromMedicalAxis(MedicalHelperAxis, SbMatrix) | ||
ViewAxisFromMedicalAxis(MedicalHelperAxis, SoVolumeData) |
Name | Description | |
---|---|---|
LogoImageFile |
Utility functions for medical visualization using Open Inventor.
Open Inventor includes a general purpose 3D graphics core library plus optimized extensions for specific data types and markets, including medical visualization. We recommend using these utility functions (and the Medical utility nodes) to get the best performance and productivity from the Open Inventor Medical Edition.
Call this method to adjust VolumeViz parameters for optimal performance with medical data and to position a DICOM volume correctly in 3D space when using axis aligned acquisitions.
DicomAdjustVolume():
Call this method to adjust VolumeViz parameters for optimal performance with medical data and to position a DICOM volume correctly in 3D space when using oblique acquisitions.
Call this method to set the VolumeViz data range based on the Window Center and Window Width tags in a DICOM file. If those tags are not present, automatically sets the data range to the actual range of values in the data.
DicomSetWindowCenterWidth() and DicomGetWindowCenterWidth():
In Open Inventor the range of voxel values that map onto the color map are specified as the 'min' and 'max' values of the range (see SoDataRange). These methods provide a convenient way to set and query the data range using the medical convention of 'window center' and 'window width'.
Call this method to build a list of DICOM image files in a directory that belong to the same series as the specified file. This list can be passed to the DICOM volume reader using the SetFilenameList() method.
This method is useful for orienting the camera to view a single image (a slice in VolumeViz jargon) along one of the standard axes (Axial, Coronal or Sagittal). But remember that the volume is always a 3D object to Open Inventor and you must also set the 'axis' field on the SoOrthoSlice node. See the dicomImageViewer example.