You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
5.3 KiB
155 lines
5.3 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkVolumeProVP1000Mapper.h,v $
|
|
|
|
Copyright (c) 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 vtkVolumeProVP1000Mapper - Superclass for VP1000 board
|
|
//
|
|
// .SECTION Description
|
|
// vtkVolumeProVP1000Mapper is the superclass for VolumePRO volume rendering
|
|
// mappers based on the VP1000 chip. Subclasses are for underlying graphics
|
|
// languages. Users should not create subclasses directly -
|
|
// a vtkVolumeProMapper will automatically create the object of the right
|
|
// type.
|
|
//
|
|
// This class is not included in the Rendering CMakeLists by default. If you
|
|
// want to add this class to your vtk build, you need to have the vli header
|
|
// and library files, and you will need to perform the following steps:
|
|
//
|
|
// 1. Run cmake, and set the VTK_USE_VOLUMEPRO flag to true.
|
|
// 2. If the libary file (VLI_LIBRARY_FOR_VP1000) is not found by cmake, set
|
|
// the path to that file, and rerun cmake.
|
|
// 3. If the header file (VLI_INCLUDE_PATH_FOR_VP1000) is not found by cmake,
|
|
// set the path to that file, and rerun cmake.
|
|
// 4. Rebuild VTK.
|
|
//
|
|
// For more information on the VolumePRO hardware, please see:
|
|
//
|
|
// http://www.terarecon.com/products/volumepro_prod.html
|
|
//
|
|
// If you encounter any problems with this class, please inform Kitware, Inc.
|
|
// at kitware@kitware.com.
|
|
//
|
|
//
|
|
// .SECTION See Also
|
|
// vtkVolumeMapper vtkVolumeProMapper vtkOpenGLVolumeProVP1000Mapper
|
|
//
|
|
|
|
#ifndef __vtkVolumeProVP1000Mapper_h
|
|
#define __vtkVolumeProVP1000Mapper_h
|
|
|
|
#include "vtkVolumeProMapper.h"
|
|
|
|
#ifdef _WIN32
|
|
#include "VolumePro1000/inc/vli.h" // Needed for VLI internal types
|
|
#else
|
|
#include "vli3/include/vli.h" // Needed for VLI internal types
|
|
#endif
|
|
|
|
#define VTK_VOLUME_16BIT 3
|
|
#define VTK_VOLUME_32BIT 4
|
|
|
|
class VTK_VOLUMERENDERING_EXPORT vtkVolumeProVP1000Mapper : public vtkVolumeProMapper
|
|
{
|
|
public:
|
|
vtkTypeRevisionMacro(vtkVolumeProVP1000Mapper,vtkVolumeProMapper);
|
|
static vtkVolumeProVP1000Mapper *New();
|
|
virtual void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Render the image using the hardware and place it in the frame buffer
|
|
virtual void Render( vtkRenderer *, vtkVolume * );
|
|
virtual int GetAvailableBoardMemory();
|
|
virtual void GetLockSizesForBoardMemory(unsigned int type,
|
|
unsigned int *xSize,
|
|
unsigned int *ySize,
|
|
unsigned int *zSize);
|
|
|
|
protected:
|
|
vtkVolumeProVP1000Mapper();
|
|
~vtkVolumeProVP1000Mapper();
|
|
|
|
// Update the camera - set the camera matrix
|
|
void UpdateCamera( vtkRenderer *, vtkVolume * );
|
|
|
|
// Update the lights
|
|
void UpdateLights( vtkRenderer *, vtkVolume * );
|
|
|
|
// Update the properties of the volume including transfer functions
|
|
// and material properties
|
|
void UpdateProperties( vtkRenderer *, vtkVolume * );
|
|
|
|
// Update the volume - create it if necessary
|
|
// Set the volume matrix.
|
|
void UpdateVolume( vtkRenderer *, vtkVolume * );
|
|
|
|
// Set the crop box (as defined in the vtkVolumeMapper superclass)
|
|
void UpdateCropping( vtkRenderer *, vtkVolume * );
|
|
|
|
// Set the cursor
|
|
void UpdateCursor( vtkRenderer *, vtkVolume * );
|
|
|
|
// Update the cut plane
|
|
void UpdateCutPlane( vtkRenderer *, vtkVolume * );
|
|
|
|
// Render the image buffer to the screen
|
|
// Defined in the specific graphics implementation.
|
|
virtual void RenderImageBuffer( vtkRenderer * vtkNotUsed(ren),
|
|
vtkVolume * vol,
|
|
int size[2],
|
|
unsigned int * outData )
|
|
{(void)vol; (void)size; (void)outData;}
|
|
|
|
// Render a bounding box of the volume because the texture map would
|
|
// be too large.
|
|
virtual void RenderBoundingBox( vtkRenderer * vtkNotUsed(ren),
|
|
vtkVolume * vol )
|
|
{(void)vol;}
|
|
|
|
// Get the depth buffer values
|
|
virtual void GetDepthBufferValues( vtkRenderer *vtkNotUsed(ren),
|
|
int size[2],
|
|
unsigned int *outData )
|
|
{ (void)outData; }
|
|
|
|
#if ((VTK_MAJOR_VERSION == 3)&&(VTK_MINOR_VERSION == 2))
|
|
vtkGetVectorMacro( VoxelCroppingRegionPlanes, float, 6 );
|
|
void ConvertCroppingRegionPlanesToVoxels();
|
|
float VoxelCroppingRegionPlanes[6];
|
|
#endif
|
|
|
|
|
|
// Keep track of the size of the data loaded so we know if we can
|
|
// simply update when a change occurs or if we need to release and
|
|
// create again
|
|
int LoadedDataSize[3];
|
|
|
|
VLIImageBuffer *ImageBuffer;
|
|
VLIDepthBuffer *DepthBuffer;
|
|
|
|
VLIStatus CheckSubSampling(const VLIVolume *inVolume,
|
|
const VLIContext *inContext,
|
|
int &outImageWidth, int &outImageHeight);
|
|
|
|
int DrawBoundingBox;
|
|
|
|
private:
|
|
vtkVolumeProVP1000Mapper(const vtkVolumeProVP1000Mapper&); // Not implemented
|
|
void operator=(const vtkVolumeProVP1000Mapper&); // Not implemented
|
|
};
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|