The IVOLUME procedure creates an iTool and associated user interface (UI) configured to display and manipulate volume data.
| Note |
This routine is written in the IDL language. Its source code can be found in the file ivolume.pro in the lib/itools subdirectory of the IDL distribution.
IVOLUME[, Vol0[, Vol1][, Vol2, Vol3]]
iTool Common Keywords: [, DIMENSIONS=[x, y]] [, IDENTIFIER=variable] [, LOCATION=[x, y]] [, NAME=string] [, OVERPLOT=iToolID] [, TITLE=string] [, VIEW_GRID=[columns, rows]] [, /VIEW_NEXT] [. VIEW_NUMBER=integer] [, {X | Y | Z}RANGE=[min, max]]
iTool Volume Keywords: [, /AUTO_RENDER] [, RENDER_EXTENTS={0 | 1 | 2}] [, RENDER_QUALITY={1 | 2}] [, SUBVOLUME=[xmin, ymin, zmin, xmax, ymax, zmax]] [, VOLUME_DIMENSIONS=[width, height, depth]] [, VOLUME_LOCATION=[x, y, z]]
Volume Object Keywords: [, AMBIENT=RGB vector] [, BOUNDS=[xmin, ymin, zmin, xmax, ymax, zmax]] [, CLIP_PLANES=array] [, COMPOSITE_FUNCTION={0 | 1 | 2 | 3}] [, CUTTING_PLANES=array] [, DEPTH_CUE=[zbright, zdim]] [, /HIDE] [, HINTS={0 | 1 | 2 | 3}] [, /INTERPOLATE] [, /LIGHTING_MODEL] [, OPACITY_TABLE0=byte array of 256 elements] [, OPACITY_TABLE1=byte array of 256 elements] [, RENDER_STEP=[x, y, z]] [, RGB_TABLE0=byte array of 256 by 3 or 3 by 256 elements] [, RGB_TABLE1=byte array of 256 by 3 or 3 by 256 elements] [, /TWO_SIDED] [, /ZBUFFER] [, ZERO_OPACITY_SKIP={0 | 1}]
Axis Object Keywords: [, {X | Y | Z}GRIDSTYLE={0 | 1 | 2 | 3 | 4 | 5 | 6}] [, {X | Y | Z}MAJOR=integer] [, {X | Y | Z}MINOR=integer] [, {X | Y | Z}SUBTICKLEN=ratio] [, {X | Y | Z}TEXT_COLOR=RGB vector] [, {X | Y | Z}TICKFONT_INDEX={0 | 1 | 2 | 3 | 4}] [, {X | Y | Z}TICKFONT_SIZE=integer] [, {X | Y | Z}TICKFONT_STYLE={0 | 1 | 2 | 3}] [, {X | Y | Z}TICKFORMAT=string or string array] [, {X | Y | Z}TICKINTERVAL=value] [, {X | Y | Z}TICKLAYOUT={0 | 1 | 2}] [, {X | Y | Z}TICKLEN=value] [, {X | Y | Z}TICKNAME=string array] [, {X | Y | Z}TICKUNITS=string] [, {X | Y | Z}TICKVALUES=vector] [, {X | Y | Z}TITLE=string]
| Note |
A three-dimensional array of any numeric type containing volume data. Arrays of strings, structures, object references, and pointers are not allowed. If more than one volume is specified, they must all have the same dimensions.
The number of volumes present and the value of the COMPOSITE_FUNCTION keyword determine how the volume data is rendered by the iVolume tool. The number of volume arguments determine how the src and srcalpha values for the COMPOSITE_FUNCTION are computed:
src and srcalpha are taken directly from the RGB and OPACITY tables, as indexed by each volume data sample:src = RGB_TABLE0[VOL0] srcalpha = OPACITY_TABLE0[VOL0]
src = (RGB_TABLE0[VOL0]*RGB_TABLE1[VOL1])/256 srcalpha = (OPACITY_TABLE0[VOL0]*OPACITY_TABLE1[VOL1])/256
src = (RGB_TABLE[VOL0, 0], RGB_TABLE[VOL1, 1], $ RGB_TABLE[VOL2, 2])/256 srcalpha = (OPACITY_TABLE0[VOL3])/256.
| Note |
| Note |
Use this keyword to set the color and intensity of the volume's base ambient lighting. Color is specified as an RGB vector. The default is [255, 255, 255]. AMBIENT is applicable only when LIGHTING_MODEL is set.
Set this keyword to 1 to always render the volume. The default is to not render the volume each time the tool window is drawn.
Set this keyword to a six-element vector of the form [xmin, ymin, zmin, xmax, ymax, zmax], which represents the sub-volume to be rendered. This keyword is the same as the SUBVOLUME keyword.
Set this keyword to an array of dimensions [4, N] specifying the coefficients of the clipping planes to be applied to this object. The four coefficients for each clipping plane are of the form [A, B, C, D], where Ax + By + Cz + D = 0. Portions of this object that fall in the half space Ax + By + Cz + D > 0 will be clipped. By default, the value of this keyword is a scalar (-1) indicating that no clipping planes are to be applied.
| Note |
| Note |
The composite function determines the value of a pixel on the viewing plane by analyzing the voxels falling along the corresponding ray, according to one of the following compositing functions:
dest' = src * srcalpha + dest * (1 - srcalpha)
is used to compute the final pixel color.
dest' = src + dest * (1 - srcalpha)
is used to compute the final pixel color. This equation assumes that the color tables have been pre-multiplied by the opacity tables. The accumulated values can be no greater than 255.
| Note |
Set this keyword to a floating-point array with dimensions (4, n) specifying the coefficients of n cutting planes. The cutting plane coefficients are in the form {{nx, ny, nz, D}, ...} where (nx)X+(ny)Y+(nz)Z+ D > 0, and (X, Y, Z) are the voxel coordinates. To clear the cutting planes, set this property to any scalar value (e.g. CUTTING_PLANES = 0). By default, no cutting planes are defined.
Set this keyword to a two-element floating-point array [zbright, zdim] specifying the near and far Z planes between which depth cueing is in effect.
Depth cueing causes an object to appear to fade into the background color of the view object with changes in depth. If the depth of an object is further than zdim (that is, if the object's location in the Z direction is farther from the origin than the value specified by zdim), the object will be painted in the background color.
Similarly, if the object is closer than the value of zbright, the object will appear in its "normal" color. Anywhere in-between, the object will be a blend of the background color and the object color. For example, if the DEPTH_CUE property is set to [-1, 1], an object at the depth of 0.0 will appear as a 50% blend of the object color and the view color.
The relationship between Zbright and Zdim determines the result of the rendering:
You can disable depth cueing by setting zbright = zdim. The default is [0.0, 0.0].
Set this keyword to a two-element vector of the form [width, height] to specify the dimensions of the drawing area of the specific tool in device units. The minimum width of the window correlates to the width of the menubar. The minimum window height is 100 pixels.
Set this keyword to a boolean value indicating whether the volume should be drawn:
Set this keyword to specify one of the following acceleration hints:
Set this keyword to a named IDL variable that will contain the iToolID for the created tool. This value can then be used to reference this tool during overplotting operations or command-line-based tool management operations.
Set this keyword to indicate that trilinear interpolation is to be used to determine the data value for each step on a ray. Setting this keyword improves the quality of images produced, at the cost of more computing time. especially when the volume has low resolution with respect to the size of the viewing plane. Nearest neighbor sampling is used by default.
Set this keyword to use the current lighting model during rendering in conjunction with a local gradient evaluation.
| Note |
Set this keyword to a two-element vector of the form [x, y] to specify the location of the upper left-hand corner of the tool relative to the display screen, in device units.
Set this keyword to a string to specify the name for this particular tool. The name is used for tool-related display purposes only-as the root of the hierarchy shown in the Tool Browser, for example.
Set this keyword to a 256-element byte array to specify an opacity table for Vol0 if Vol0 or Vol0 and Vol1 are present. If all the volume arguments are present, this keyword represents the opacity of the resulting RGBA volume. A value of 0 indicates complete transparency and a value of 255 indicates complete opacity. The default table is a linear ramp.
Set this keyword to a 256-element byte array to specify an opacity table for Vol1 when Vol0 and Vol1 are present. A value of 0 indicates complete transparency and a value of 255 indicates complete opacity. The default table is a linear ramp.
Set this keyword to an iToolID to direct the graphical output of the particular tool to the tool specified by the provided iToolID.
Set this keyword to 1 (one) to place the graphical output for the command in the current tool. If no current tool exists, a new tool is created.
Set this keyword to draw a boundary around the rendered volume. The default (RENDER_EXTENTS = 2) is to draw a translucent boundary box. Possible values for this keyword are:
Set this keyword to a three element vector of the form [x, y, z] to specify the stepping factor through the voxel matrix. This keyword is only valid if render quality is set to high (RENDER_QUALITY = 2). The default render step is [1, 1, 1].
Set this keyword to determine the quality of the rendered volume. The default (RENDER_QUALITY = 1) is low quality. Possible values for this keyword are:
Set this keyword to a 3 by 256 or 256 by 3 byte array of RGB color values to specify a color table for Vol0 if Vol0 or Vol0 and Vol1 are present. If all the arguments are present, this keyword represents the RGB color values of all of these volumes. The default is a linear ramp
Set this keyword to a 3 by 256 or 256 by 3 byte array of RGB color values to specify a color table for Vol1 when Vol0 and Vol1 are present. The default is a linear ramp.
Set this keyword to a six-element vector of the form [xmin, ymin, zmin, xmax, ymax, zmax], which represents the sub-volume to be rendered. This keyword is the same as the BOUNDS keyword.
Set this keyword to a string to specify the title for this particular tool. The title is displayed in the title bar of the tool.
Set this keyword to force the lighting model to use a two-sided voxel gradient. The two-sided gradient is different from the one-sided gradient (default) in that the absolute value of the inner product of the light direction and the surface gradient is used instead of clamping to 0.0 for negative values.
Set this keyword to a two-element vector of the form [columns, rows] to specify the view layout within the new tool. This keyword is only used if a new tool is being created (for example, if OVERPLOT, VIEW_NEXT, or VIEW_NUMBER are specified then VIEW_GRID is ignored).
Set this keyword to change the view selection to the next view following the currently-selected view before issuing any graphical commands. If the currently-selected view is the last one in the layout, then /VIEW_NEXT will cause the first view in the layout to become selected. This keyword is ignored if no current tool exists.
| Note |
Set this keyword to change the currently-selected view to the view specified by the VIEW_NUMBER before issuing any graphical commands. The view number starts at 1, and corresponds to the position of the view within the graphics container (not necessarily the position on the screen). This keyword is ignored if no current tool exists.
| Note |
A 3-element vector specifying the volume dimensions in terms of user data units. For example, specifying [0.1, 0.1, 0.1] would cause the volume to be rendered into a region that is 0.1 data units long on each side of the volume cube. If this parameter is not specified, the volume is rendered into a region the same size as the number of samples, with an origin of [0, 0, 0]. In this case, a volume with sample size of [20, 25, 20] would render into the region [0:19, 0:24, 0:19] in user data units. Use the VOLUME_LOCATION keyword to specify a different origin.
A 3-element vector specifying the volume location in user data units. Use this keyword to render the volume so that the first sample voxel appears at the specified location, instead of at [0, 0, 0], the default. Specify the location in terms of coordinates after the application of the VOLUME_DIMENSIONS values. For example, if the value of the VOLUME_DIMENSIONS keyword is [0.1, 0.1, 0.1] and you want the volume to be centered at the origin, set the VOLUME_LOCATION keyword to [-0.05, -0.05, -0.05].
Set this keyword to an integer representing the number of major tick marks. The default is -1, specifying that IDL will compute the number of tickmarks. Setting MAJOR equal to zero suppresses major tickmarks entirely.
Set this keyword to an integer representing the number of minor tick marks. The default is -1, specifying that IDL will compute the number of tickmarks. Setting MINOR equal to zero suppresses minor tickmarks entirely.
Set this keyword to the desired data range of the axis, a 2-element vector. The first element is the axis minimum, and the second is the maximum.
Set this keyword to a floating-point scale ratio specifying the length of minor tick marks relative to the length of major tick marks. The default is 0.5, specifying that the minor tick mark is one-half the length of the major tick mark.
Set this keyword to an RGB value specifying the color for the axis text. The default value is [0, 0, 0] (black).
Set this keyword equal to one of the following integers, which represent the type of font to be used for the axis text:
Set this keyword to an integer representing the point size of the font used for the axis text. The default is 12.0 points.
Set this keyword equal to one of the following integers, which represent the style of font to be used for the axis text:
Set this keyword to a string, or an array of strings, in which each string represents a format string or the name of a function to be used to format the tick mark labels. If an array is provided, each string corresponds to a level of the axis. The TICKUNITS keyword determines the number of levels for an axis.
If the string begins with an open parenthesis, it is treated as a standard format string. See Format Codes.
If the string does not begin with an open parenthesis, it is interpreted as the name of a callback function to be used to generate tick mark labels.
The callback function is called with four parameters: Axis, Index, Value, and Level, where:
Used with the LABEL_DATE function, this property can easily create axes with date/time labels.
Set this keyword to a floating-point scalar indicating the interval between major tick marks for the first axis level. The default value is computed according to the axis [XYZ]RANGE and the number of major tick marks ([XYZ]MAJOR). The value of this keyword takes precedence over the value set for the [XYZ]MAJOR keyword.
For example, if TICKUNITS = ['S', 'H', 'D'], and TICKINTERVAL = 30, then the interval between major ticks for the first axis level will be 30 seconds.
Set this keyword to integer scalar that indicates the tick layout style to be used to draw each level of the axis.
Valid values include:
| Note |
Set this keyword to a floating-point value that specifies the length of each major tick mark, measured in data units. The recommended, and default, tick mark length is 0.2. IDL converts, maintains, and returns this data as double-precision floating-point.
Set this keyword to a string array of up to 30 elements that controls the annotation of each tick mark.
Set this keyword to a string (or a vector of strings) indicating the units to be used for axis tick labeling. If more than one unit is provided, the axis will be drawn in multiple levels, one level per unit.
The order in which the strings appear in the vector determines the order in which the corresponding unit levels will be drawn. The first string corresponds to the first level (the level nearest to the primary axis line).
Valid unit strings include:
If any of the time units are utilized, then the tick values are interpreted as Julian date/time values. Note that the singular form of each of the time value strings is also acceptable (e.g, TICKUNITS = 'Day' is equivalent to TICKUNITS = 'Days').
| Note |
Set this keyword to a floating-point vector of data values representing the values at each tick mark. If TICKVALUES is set to 0, the default, IDL computes the tick values based on the axis range and the number of major ticks. IDL converts, maintains, and returns this data as double-precision floating-point.
Set this keyword to a string representing the title of the specified axis.
Set this keyword to clip the rendering to the current Z-buffer and then update the buffer.
Set this keyword to skip voxels with an opacity of 0. This keyword can increase the output contrast of MIP (MAXIMUM_INTENSITY) projections by allowing the background to show through. If this keyword is set, voxels with an opacity of zero will not modify the Z-buffer. The default (not setting the keyword) continues to render voxels with an opacity of zero.
In the IDL Intelligent Tools system, data can be imported from the IDL Command Line (as described in Example 1), or data can be imported via the File menu in the iTool window (as described in Examples 2 and 3). For detailed information on importing data via the iTool file menu, refer to Data Import Methods.
This example shows how to use the IDL Command Line to bring data into the iVolume tool.
At the IDL Command Line, enter:
file = FILEPATH('clouds3d.dat', $
SUBDIRECTORY = ['examples', 'data'])
RESTORE, file
IVOLUME, clouds
Derive an interval volume by selecting Operations ® Volume ® Interval Volume. In the Interval Volume Value Selector dialog, change the minimum value to 0.2 and the Decimate: % of original surface slider to 20, then click OK.
The following figure displays the output of this example:
This example shows how to use the iTool File ® Open command to load binary data into the iVolume tool.
At the IDL Command Line, enter:
IVOLUME
Select File ® Open to display the Open dialog, then browse to find head.dat in the examples/data directory in the IDL distribution, and click Open.
In the Binary Template dialog, click New Field, and enter the following information in the New Field dialog:
Click OK to close the New Field dialog and the Binary Template dialog, and the image is displayed.
| Note |
Select Operations ® Volume ® Isosurface, and insert an isosurface with a value of 60, decimated to 20% of the original surface.
The following figure displays the output of this example:
This example shows how to use the File ® Import command to load binary data into the iVolume tool.
At the IDL Command Line, enter:
IVOLUME
Select File ® Import to display the IDL Import Data wizard.
The Binary Template wizard is displayed. In the Binary Template, change File's byte ordering to Little Endian. Then, click New Field, and enter the following information in the New Field dialog:
Click OK to close the New Field dialog and the Binary Template dialog, and the volume is displayed.
Select Operations ® Volume ® Image Plane to display a plane in the x-direction. Double-click on the plane to access its properties through the property sheet. Change the Orientation setting to Z. You can drag the image to see it at different z values by clicking on the edge of the image plane.
The following figure displays the output of this example:
This example shows how to use a second volume argument to cut away a section of the first volume argument.
First, load the MRI head data into IDL. At the IDL Command Line, enter:
file = FILEPATH('head.dat', SUBDIRECTORY = ['examples', 'data'])
data0 = READ_BINARY(file, DATA_DIMS = [80, 100, 57])
Then, create the second volume that will cut away the upper left corner of the head. At the IDL Command Line, enter:
data1 = BYTARR(80, 100, 57) + 1B data1[0:39, *, 28:56] = 0B
Derive the color and opacity tables for the second volume. At the IDL Command Line, enter:
rgbTable1 = [[BYTARR(256)], [BYTARR(256)], [BYTARR(256)]] rgbTable1[1, *] = [255, 255, 255] opacityTable1 = BYTARR(256) opacityTable1[1] = 255
Now, display the two volumes. At the IDL Command Line, enter:
IVOLUME, data0, data1, RGB_TABLE1 = rgbTable1, $ OPACITY_TABLE1 = opacityTable1, /AUTO_RENDER
The following figure displays the output of this example:
This example shows how to use all the volume arguments to display an RGB (Red, Green, Blue) volume.
First, create the volumes to contain primary colors (black, red, green, blue, yellow, cyan, magenta, and white) in each corner. At the IDL Command Line, enter:
vol0 = BYTARR(32, 32, 32) vol1 = BYTARR(32, 32, 32) vol2 = BYTARR(32, 32, 32) vol3 = BYTARR(32, 32, 32) vol0[0:15, *, *] = 255 vol1[*, 0:15, *] = 255 vol2[*, *, 0:15] = 255 vol3[*, *, *] = 128
Then, derive the color and opacity tables. At the IDL Command Line, enter:
rgbTable = [[BYTARR(256)], [BYTARR(256)], [BYTARR(256)]] opacityTable = BINDGEN(256)
Now, display the two volumes. At the IDL Command Line, enter:
IVOLUME, vol0, vol1, vol2, vol3, RGB_TABLE0 = rgbTable, $ OPACITY_TABLE0 = opacityTable, /AUTO_RENDER
The following figure displays the output of this example:
| Note |
Introduced: 6.0