Commit d921dab4 authored by Lisa Avila's avatar Lisa Avila

ENH: First check in of the vtkFixedPointVolumeRayCastMapper and related...

ENH: First check in of the vtkFixedPointVolumeRayCastMapper and related classes / tests. This mapper is stable, but is still a work in progress. Expect internal changes in the next few months.
parent a485d502
......@@ -26,8 +26,16 @@ vtkDirectionEncoder.cxx
vtkEncodedGradientEstimator.cxx
vtkEncodedGradientShader.cxx
vtkFiniteDifferenceGradientEstimator.cxx
vtkFixedPointVolumeRayCastCompositeGOHelper.cxx
vtkFixedPointVolumeRayCastCompositeGOShadeHelper.cxx
vtkFixedPointVolumeRayCastCompositeHelper.cxx
vtkFixedPointVolumeRayCastCompositeShadeHelper.cxx
vtkFixedPointVolumeRayCastHelper.cxx
vtkFixedPointVolumeRayCastMIPHelper.cxx
vtkFixedPointVolumeRayCastMapper.cxx
vtkRayCastImageDisplayHelper.cxx
vtkRecursiveSphereDirectionEncoder.cxx
vtkSphericalDirectionEncoder.cxx
vtkVolumeMapper.cxx
vtkVolumeRayCastCompositeFunction.cxx
vtkVolumeRayCastFunction.cxx
......@@ -58,6 +66,7 @@ SET( KitOpenGL_SRCS
SET_SOURCE_FILES_PROPERTIES(
vtkDirectionEncoder
vtkEncodedGradientEstimator
vtkFixedPointVolumeRayCastHelper
vtkRayCastImageDisplayHelper
vtkVolumeMapper
vtkVolumeRayCastFunction
......
......@@ -7,6 +7,10 @@ IF (VTK_USE_RENDERING AND VTK_USE_VOLUMERENDERING)
FOREACH ( tfile
gaussian
TestBunykRayCastFunction
TestFixedPointRayCasterLinear
TestFixedPointRayCasterNearest
TestFixedPointRayCasterLinearCropped
TestFixedPointRayCasterNearestCropped
TestHomogeneousRayIntegration
TestLinearRayIntegration
TestLODProp3D
......
source [file join [file dirname [info script]] TestFixedPointRayCasterNearest.tcl]
for { set j 0 } { $j < 5 } { incr j } {
for { set i 0 } { $i < 5 } { incr i } {
volumeProperty${i}${j} SetInterpolationTypeToLinear
}
}
renWin Render
source [file join [file dirname [info script]] TestFixedPointRayCasterNearest.tcl]
for { set j 0 } { $j < 5 } { incr j } {
for { set i 0 } { $i < 5 } { incr i } {
volumeMapper${i}${j} SetCroppingRegionPlanes 10 20 10 20 10 20
volumeMapper${i}${j} SetCroppingRegionFlags 253440
volumeMapper${i}${j} CroppingOn
volumeProperty${i}${j} SetInterpolationTypeToLinear
}
}
renWin Render
package require vtk
# Create a gaussian
vtkImageGaussianSource gs
gs SetWholeExtent 0 30 0 30 0 30
gs SetMaximum 255.0
gs SetStandardDeviation 5
gs SetCenter 15 15 15
# threshold to leave a gap that should show up for
# gradient opacity
vtkImageThreshold t
t SetInput [gs GetOutput]
t ReplaceInOn
t SetInValue 0
t ThresholdBetween 150 200
# Use a shift scale to convert to unsigned char
vtkImageShiftScale ss
ss SetInput [t GetOutput]
ss SetOutputScalarTypeToUnsignedChar
# grid will be used for two component dependent
vtkImageGridSource grid0
grid0 SetDataScalarTypeToUnsignedChar
grid0 SetGridSpacing 10 10 10
grid0 SetLineValue 200
grid0 SetFillValue 10
grid0 SetDataExtent 0 30 0 30 0 30
# use dilation to thicken the grid
vtkImageContinuousDilate3D d
d SetInput [grid0 GetOutput]
d SetKernelSize 3 3 3
# Now make a two component dependent
vtkImageAppendComponents iac
iac AddInput [d GetOutput]
iac AddInput [ss GetOutput]
# Some more gaussians for the four component indepent case
vtkImageGaussianSource gs1
gs1 SetWholeExtent 0 30 0 30 0 30
gs1 SetMaximum 255.0
gs1 SetStandardDeviation 4
gs1 SetCenter 5 5 5
vtkImageThreshold t1
t1 SetInput [gs1 GetOutput]
t1 ReplaceInOn
t1 SetInValue 0
t1 ThresholdBetween 150 256
vtkImageGaussianSource gs2
gs2 SetWholeExtent 0 30 0 30 0 30
gs2 SetMaximum 255.0
gs2 SetStandardDeviation 4
gs2 SetCenter 12 12 12
vtkImageGaussianSource gs3
gs3 SetWholeExtent 0 30 0 30 0 30
gs3 SetMaximum 255.0
gs3 SetStandardDeviation 4
gs3 SetCenter 19 19 19
vtkImageThreshold t3
t3 SetInput [gs3 GetOutput]
t3 ReplaceInOn
t3 SetInValue 0
t3 ThresholdBetween 150 256
vtkImageGaussianSource gs4
gs4 SetWholeExtent 0 30 0 30 0 30
gs4 SetMaximum 255.0
gs4 SetStandardDeviation 4
gs4 SetCenter 26 26 26
# we need a few append filters ...
vtkImageAppendComponents iac1
iac1 AddInput [t1 GetOutput]
iac1 AddInput [gs2 GetOutput]
vtkImageAppendComponents iac2
iac2 AddInput [iac1 GetOutput]
iac2 AddInput [t3 GetOutput]
vtkImageAppendComponents iac3
iac3 AddInput [iac2 GetOutput]
iac3 AddInput [gs4 GetOutput]
# create the four component dependend -
# use lines in x, y, z for colors
vtkImageGridSource gridR
gridR SetDataScalarTypeToUnsignedChar
gridR SetGridSpacing 10 100 100
gridR SetLineValue 250
gridR SetFillValue 100
gridR SetDataExtent 0 30 0 30 0 30
vtkImageContinuousDilate3D dR
dR SetInput [gridR GetOutput]
dR SetKernelSize 2 2 2
vtkImageGridSource gridG
gridG SetDataScalarTypeToUnsignedChar
gridG SetGridSpacing 100 10 100
gridG SetLineValue 250
gridG SetFillValue 100
gridG SetDataExtent 0 30 0 30 0 30
vtkImageContinuousDilate3D dG
dG SetInput [gridG GetOutput]
dG SetKernelSize 2 2 2
vtkImageGridSource gridB
gridB SetDataScalarTypeToUnsignedChar
gridB SetGridSpacing 100 100 10
gridB SetLineValue 0
gridB SetFillValue 250
gridB SetDataExtent 0 30 0 30 0 30
vtkImageContinuousDilate3D dB
dB SetInput [gridB GetOutput]
dB SetKernelSize 2 2 2
# need some appending
vtkImageAppendComponents iacRG
iacRG AddInput [dR GetOutput]
iacRG AddInput [dG GetOutput]
vtkImageAppendComponents iacRGB
iacRGB AddInput [iacRG GetOutput]
iacRGB AddInput [dB GetOutput]
vtkImageAppendComponents iacRGBA
iacRGBA AddInput [iacRGB GetOutput]
iacRGBA AddInput [ss GetOutput]
# We need a bunch of opacity functions
# this one is a simple ramp to .2
vtkPiecewiseFunction rampPoint2
rampPoint2 AddPoint 0 0.0
rampPoint2 AddPoint 255 0.2
# this one is a simple ramp to 1
vtkPiecewiseFunction ramp1
ramp1 AddPoint 0 0.0
ramp1 AddPoint 255 1.0
# this one shows a sharp surface
vtkPiecewiseFunction surface
surface AddPoint 0 0.0
surface AddPoint 10 0.0
surface AddPoint 50 1.0
surface AddPoint 255 1.0
# this one is constant 1
vtkPiecewiseFunction constant1
constant1 AddPoint 0 1.0
constant1 AddPoint 255 1.0
# this one is used for gradient opacity
vtkPiecewiseFunction gop
gop AddPoint 0 0.0
gop AddPoint 20 0.0
gop AddPoint 60 1.0
gop AddPoint 255 1.0
# We need a bunch of color functions
# This one is a simple rainbow
vtkColorTransferFunction rainbow
rainbow SetColorSpaceToHSV
rainbow HSVWrapOff
rainbow AddHSVPoint 0 0.1 1.0 1.0
rainbow AddHSVPoint 255 0.9 1.0 1.0
# this is constant red
vtkColorTransferFunction red
red AddRGBPoint 0 1 0 0
red AddRGBPoint 255 1 0 0
# this is constant green
vtkColorTransferFunction green
green AddRGBPoint 0 0 1 0
green AddRGBPoint 255 0 1 0
# this is constant blue
vtkColorTransferFunction blue
blue AddRGBPoint 0 0 0 1
blue AddRGBPoint 255 0 0 1
# this is constant yellow
vtkColorTransferFunction yellow
yellow AddRGBPoint 0 1 1 0
yellow AddRGBPoint 255 1 1 0
vtkRenderer ren1
vtkRenderWindow renWin
renWin AddRenderer ren1
renWin SetSize 500 500
vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
[ren1 GetCullers] InitTraversal
set culler [[ren1 GetCullers] GetNextItem]
$culler SetSortingStyleToBackToFront
# We need 25 mapper / actor pairs which we will render
# in a grid. Going down we will vary the input data
# with the top row unsigned char, then float, then
# two dependent components, then four dependent components
# then four independent components. Going across we
# will vary the rendering method with MIP, Composite,
# Composite Shade, Composite GO, and Composite GO Shade.
for { set j 0 } { $j < 5 } { incr j } {
for { set i 0 } { $i < 5 } { incr i } {
vtkVolumeProperty volumeProperty${i}${j}
vtkFixedPointVolumeRayCastMapper volumeMapper${i}${j}
volumeMapper${i}${j} SetSampleDistance 0.25
vtkVolume volume${i}${j}
volume${i}${j} SetMapper volumeMapper${i}${j}
volume${i}${j} SetProperty volumeProperty${i}${j}
volume${i}${j} AddPosition [expr $i*30] [expr $j*30] 0
ren1 AddVolume volume${i}${j}
}
}
for { set i 0 } { $i < 5 } { incr i } {
volumeMapper0${i} SetInput [t GetOutput]
volumeMapper1${i} SetInput [ss GetOutput]
volumeMapper2${i} SetInput [iac GetOutput]
volumeMapper3${i} SetInput [iac3 GetOutput]
volumeMapper4${i} SetInput [iacRGBA GetOutput]
volumeMapper${i}0 SetBlendModeToMaximumIntensity
volumeMapper${i}1 SetBlendModeToComposite
volumeMapper${i}2 SetBlendModeToComposite
volumeMapper${i}3 SetBlendModeToComposite
volumeMapper${i}4 SetBlendModeToComposite
volumeProperty0${i} IndependentComponentsOn
volumeProperty1${i} IndependentComponentsOn
volumeProperty2${i} IndependentComponentsOff
volumeProperty3${i} IndependentComponentsOn
volumeProperty4${i} IndependentComponentsOff
volumeProperty0${i} SetColor rainbow
volumeProperty0${i} SetScalarOpacity rampPoint2
volumeProperty0${i} SetGradientOpacity constant1
volumeProperty1${i} SetColor rainbow
volumeProperty1${i} SetScalarOpacity rampPoint2
volumeProperty1${i} SetGradientOpacity constant1
volumeProperty2${i} SetColor rainbow
volumeProperty2${i} SetScalarOpacity rampPoint2
volumeProperty2${i} SetGradientOpacity constant1
volumeProperty3${i} SetColor 0 red
volumeProperty3${i} SetColor 1 green
volumeProperty3${i} SetColor 2 blue
volumeProperty3${i} SetColor 3 yellow
volumeProperty3${i} SetScalarOpacity 0 rampPoint2
volumeProperty3${i} SetScalarOpacity 1 rampPoint2
volumeProperty3${i} SetScalarOpacity 2 rampPoint2
volumeProperty3${i} SetScalarOpacity 3 rampPoint2
volumeProperty3${i} SetGradientOpacity 0 constant1
volumeProperty3${i} SetGradientOpacity 1 constant1
volumeProperty3${i} SetGradientOpacity 2 constant1
volumeProperty3${i} SetGradientOpacity 3 constant1
volumeProperty3${i} SetComponentWeight 0 1
volumeProperty3${i} SetComponentWeight 1 1
volumeProperty3${i} SetComponentWeight 2 1
volumeProperty3${i} SetComponentWeight 3 1
volumeProperty4${i} SetColor rainbow
volumeProperty4${i} SetScalarOpacity rampPoint2
volumeProperty4${i} SetGradientOpacity constant1
volumeProperty${i}2 ShadeOn
volumeProperty${i}4 ShadeOn 0
volumeProperty${i}4 ShadeOn 1
volumeProperty${i}4 ShadeOn 2
volumeProperty${i}4 ShadeOn 3
}
volumeProperty00 SetScalarOpacity ramp1
volumeProperty10 SetScalarOpacity ramp1
volumeProperty20 SetScalarOpacity ramp1
volumeProperty30 SetScalarOpacity 0 surface
volumeProperty30 SetScalarOpacity 1 surface
volumeProperty30 SetScalarOpacity 2 surface
volumeProperty30 SetScalarOpacity 3 surface
volumeProperty40 SetScalarOpacity ramp1
volumeProperty02 SetScalarOpacity surface
volumeProperty12 SetScalarOpacity surface
volumeProperty22 SetScalarOpacity surface
volumeProperty32 SetScalarOpacity 0 surface
volumeProperty32 SetScalarOpacity 1 surface
volumeProperty32 SetScalarOpacity 2 surface
volumeProperty32 SetScalarOpacity 3 surface
volumeProperty42 SetScalarOpacity surface
volumeProperty04 SetScalarOpacity surface
volumeProperty14 SetScalarOpacity surface
volumeProperty24 SetScalarOpacity surface
volumeProperty34 SetScalarOpacity 0 surface
volumeProperty34 SetScalarOpacity 1 surface
volumeProperty34 SetScalarOpacity 2 surface
volumeProperty34 SetScalarOpacity 3 surface
volumeProperty44 SetScalarOpacity surface
volumeProperty03 SetGradientOpacity gop
volumeProperty13 SetGradientOpacity gop
volumeProperty23 SetGradientOpacity gop
volumeProperty33 SetGradientOpacity 0 gop
volumeProperty33 SetGradientOpacity 2 gop
volumeProperty43 SetGradientOpacity gop
volumeProperty33 SetScalarOpacity 0 ramp1
volumeProperty33 SetScalarOpacity 2 ramp1
volumeProperty04 SetGradientOpacity gop
volumeProperty14 SetGradientOpacity gop
volumeProperty24 SetGradientOpacity gop
volumeProperty34 SetGradientOpacity 0 gop
volumeProperty34 SetGradientOpacity 2 gop
volumeProperty44 SetGradientOpacity gop
renWin Render
[ren1 GetActiveCamera] Dolly 1.3
[ren1 GetActiveCamera] Azimuth 15
[ren1 GetActiveCamera] Elevation 5
ren1 ResetCameraClippingRange
wm withdraw .
iren Initialize
source [file join [file dirname [info script]] TestFixedPointRayCasterNearest.tcl]
for { set j 0 } { $j < 5 } { incr j } {
for { set i 0 } { $i < 5 } { incr i } {
volumeMapper${i}${j} SetCroppingRegionPlanes 10 20 10 20 10 20
volumeMapper${i}${j} SetCroppingRegionFlags 253440
volumeMapper${i}${j} CroppingOn
}
}
renWin Render
/*=========================================================================
Program: Visualization Toolkit
Module: vtkFixedPointVolumeRayCastCompositeGOHelper.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkFixedPointVolumeRayCastCompositeGOHelper - A helper that generates composite images for the volume ray cast mapper
// .SECTION Description
// This is one of the helper classes for the vtkFixedPointVolumeRayCastMapper.
// It will generate composite images using an alpha blending operation.
// This class should not be used directly, it is a helper class for
// the mapper and has no user-level API.
//
// .SECTION see also
// vtkFixedPointVolumeRayCastMapper
#ifndef __vtkFixedPointVolumeRayCastCompositeGOHelper_h
#define __vtkFixedPointVolumeRayCastCompositeGOHelper_h
#include "vtkFixedPointVolumeRayCastHelper.h"
class vtkFixedPointVolumeRayCastMapper;
class vtkVolume;
class VTK_VOLUMERENDERING_EXPORT vtkFixedPointVolumeRayCastCompositeGOHelper : public vtkFixedPointVolumeRayCastHelper
{
public:
static vtkFixedPointVolumeRayCastCompositeGOHelper *New();
vtkTypeRevisionMacro(vtkFixedPointVolumeRayCastCompositeGOHelper,vtkFixedPointVolumeRayCastHelper);
void PrintSelf( ostream& os, vtkIndent indent );
virtual void GenerateImage( int threadID,
int threadCount,
vtkVolume *vol,
vtkFixedPointVolumeRayCastMapper *mapper);
protected:
vtkFixedPointVolumeRayCastCompositeGOHelper();
~vtkFixedPointVolumeRayCastCompositeGOHelper();
private:
vtkFixedPointVolumeRayCastCompositeGOHelper(const vtkFixedPointVolumeRayCastCompositeGOHelper&); // Not implemented.
void operator=(const vtkFixedPointVolumeRayCastCompositeGOHelper&); // Not implemented.
};
#endif
/*=========================================================================
Program: Visualization Toolkit
Module: vtkFixedPointVolumeRayCastCompositeGOShadeHelper.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkFixedPointVolumeRayCastCompositeGOShadeHelper - A helper that generates composite images for the volume ray cast mapper
// .SECTION Description
// This is one of the helper classes for the vtkFixedPointVolumeRayCastMapper.
// It will generate composite images using an alpha blending operation.
// This class should not be used directly, it is a helper class for
// the mapper and has no user-level API.
//
// .SECTION see also
// vtkFixedPointVolumeRayCastMapper
#ifndef __vtkFixedPointVolumeRayCastCompositeGOShadeHelper_h
#define __vtkFixedPointVolumeRayCastCompositeGOShadeHelper_h
#include "vtkFixedPointVolumeRayCastHelper.h"
class vtkFixedPointVolumeRayCastMapper;
class vtkVolume;
class VTK_VOLUMERENDERING_EXPORT vtkFixedPointVolumeRayCastCompositeGOShadeHelper : public vtkFixedPointVolumeRayCastHelper
{
public:
static vtkFixedPointVolumeRayCastCompositeGOShadeHelper *New();
vtkTypeRevisionMacro(vtkFixedPointVolumeRayCastCompositeGOShadeHelper,vtkFixedPointVolumeRayCastHelper);
void PrintSelf( ostream& os, vtkIndent indent );
virtual void GenerateImage( int threadID,
int threadCount,
vtkVolume *vol,
vtkFixedPointVolumeRayCastMapper *mapper);
protected:
vtkFixedPointVolumeRayCastCompositeGOShadeHelper();
~vtkFixedPointVolumeRayCastCompositeGOShadeHelper();
private:
vtkFixedPointVolumeRayCastCompositeGOShadeHelper(const vtkFixedPointVolumeRayCastCompositeGOShadeHelper&); // Not implemented.
void operator=(const vtkFixedPointVolumeRayCastCompositeGOShadeHelper&); // Not implemented.
};
#endif
This diff is collapsed.
/*=========================================================================
Program: Visualization Toolkit
Module: vtkFixedPointVolumeRayCastCompositeHelper.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkFixedPointVolumeRayCastCompositeHelper - A helper that generates composite images for the volume ray cast mapper
// .SECTION Description
// This is one of the helper classes for the vtkFixedPointVolumeRayCastMapper.
// It will generate composite images using an alpha blending operation.
// This class should not be used directly, it is a helper class for
// the mapper and has no user-level API.
//
// .SECTION see also
// vtkFixedPointVolumeRayCastMapper
#ifndef __vtkFixedPointVolumeRayCastCompositeHelper_h
#define __vtkFixedPointVolumeRayCastCompositeHelper_h
#include "vtkFixedPointVolumeRayCastHelper.h"
class vtkFixedPointVolumeRayCastMapper;
class vtkVolume;
class VTK_VOLUMERENDERING_EXPORT vtkFixedPointVolumeRayCastCompositeHelper : public vtkFixedPointVolumeRayCastHelper
{
public:
static vtkFixedPointVolumeRayCastCompositeHelper *New();
vtkTypeRevisionMacro(vtkFixedPointVolumeRayCastCompositeHelper,vtkFixedPointVolumeRayCastHelper);
void PrintSelf( ostream& os, vtkIndent indent );
virtual void GenerateImage( int threadID,
int threadCount,
vtkVolume *vol,
vtkFixedPointVolumeRayCastMapper *mapper);
protected:
vtkFixedPointVolumeRayCastCompositeHelper();
~vtkFixedPointVolumeRayCastCompositeHelper();
private:
vtkFixedPointVolumeRayCastCompositeHelper(const vtkFixedPointVolumeRayCastCompositeHelper&); // Not implemented.
void operator=(const vtkFixedPointVolumeRayCastCompositeHelper&); // Not implemented.
};
#endif
/*=========================================================================
Program: Visualization Toolkit
Module: vtkFixedPointVolumeRayCastCompositeShadeHelper.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR