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.
265 lines
7.3 KiB
265 lines
7.3 KiB
2 years ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: $RCSfile: vtkVolumeProMapper.cxx,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.
|
||
|
|
||
|
=========================================================================*/
|
||
|
|
||
|
#include "vtkVolumeProMapper.h"
|
||
|
#include "vtkRenderer.h"
|
||
|
#include "vtkToolkits.h"
|
||
|
|
||
|
#if defined (VTK_HAVE_VP1000) || defined (VTK_FORCE_COMPILE_VP1000)
|
||
|
#include "vtkVolumeProVP1000Mapper.h"
|
||
|
#endif
|
||
|
|
||
|
#include "vtkDebugLeaks.h"
|
||
|
|
||
|
|
||
|
#include "vtkObjectFactory.h"
|
||
|
|
||
|
vtkCxxRevisionMacro(vtkVolumeProMapper, "$Revision: 1.1 $");
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
// Needed when we don't use the vtkStandardNewMacro.
|
||
|
vtkInstantiatorNewMacro(vtkVolumeProMapper);
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
// Create the mapper. No context has been created, no volume has
|
||
|
// been created yet.
|
||
|
vtkVolumeProMapper::vtkVolumeProMapper()
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
this->Context = NULL;
|
||
|
this->Volume = NULL;
|
||
|
this->VolumeInput = NULL;
|
||
|
this->VolumeBuildTime = vtkTimeStamp::New();
|
||
|
this->Lights = NULL;
|
||
|
this->NumberOfLights = 0;
|
||
|
this->BlendMode = VTK_BLEND_MODE_COMPOSITE;
|
||
|
|
||
|
// Disable the subvolume
|
||
|
for ( i = 0; i < 6; i++ )
|
||
|
{
|
||
|
this->SubVolume[i] = -1;
|
||
|
}
|
||
|
|
||
|
this->GradientOpacityModulation = 0;
|
||
|
this->GradientDiffuseModulation = 0;
|
||
|
this->GradientSpecularModulation = 0;
|
||
|
|
||
|
this->Cursor = 0;
|
||
|
this->CursorType = VTK_CURSOR_TYPE_CROSSHAIR;
|
||
|
this->CursorPosition[0] = 0.0;
|
||
|
this->CursorPosition[1] = 0.0;
|
||
|
this->CursorPosition[2] = 0.0;
|
||
|
|
||
|
this->CursorXAxisColor[0] = 1.0;
|
||
|
this->CursorXAxisColor[1] = 0.0;
|
||
|
this->CursorXAxisColor[2] = 0.0;
|
||
|
|
||
|
this->CursorYAxisColor[0] = 0.0;
|
||
|
this->CursorYAxisColor[1] = 1.0;
|
||
|
this->CursorYAxisColor[2] = 0.0;
|
||
|
|
||
|
this->CursorZAxisColor[0] = 0.0;
|
||
|
this->CursorZAxisColor[1] = 0.0;
|
||
|
this->CursorZAxisColor[2] = 1.0;
|
||
|
|
||
|
this->CutPlane = 0;
|
||
|
this->CutPlaneEquation[0] = 1.0;
|
||
|
this->CutPlaneEquation[1] = 0.0;
|
||
|
this->CutPlaneEquation[2] = 0.0;
|
||
|
this->CutPlaneEquation[3] = 0.0;
|
||
|
this->CutPlaneThickness = 0.0;
|
||
|
this->CutPlaneFallOffDistance = 0;
|
||
|
|
||
|
this->SuperSampling = 0;
|
||
|
this->SuperSamplingFactor[0] = 1.0;
|
||
|
this->SuperSamplingFactor[1] = 1.0;
|
||
|
this->SuperSamplingFactor[2] = 1.0;
|
||
|
|
||
|
this->NumberOfBoards = 0;
|
||
|
this->MajorBoardVersion = 0;
|
||
|
this->MinorBoardVersion = 0;
|
||
|
|
||
|
this->NoHardware = 0;
|
||
|
this->WrongVLIVersion = 0;
|
||
|
this->DisplayedMessage = 0;
|
||
|
|
||
|
this->Cut = NULL;
|
||
|
|
||
|
this->IntermixIntersectingGeometry = 0;
|
||
|
}
|
||
|
|
||
|
// Destroy the mapper. Delete the context, volume build time, and the
|
||
|
// volume if necessary
|
||
|
vtkVolumeProMapper::~vtkVolumeProMapper()
|
||
|
{
|
||
|
this->VolumeBuildTime->Delete();
|
||
|
}
|
||
|
|
||
|
// Simplified version - just assume the mapper type
|
||
|
vtkVolumeProMapper *vtkVolumeProMapper::New()
|
||
|
{
|
||
|
// First try to create the object from the vtkObjectFactory
|
||
|
vtkObject* ret = vtkObjectFactory::CreateInstance("vtkVolumeProMapper");
|
||
|
if(ret)
|
||
|
{
|
||
|
return (vtkVolumeProMapper*)ret;
|
||
|
}
|
||
|
|
||
|
#if defined (VTK_HAVE_VP1000) || defined (VTK_FORCE_COMPILE_VP1000)
|
||
|
vtkDebugLeaks::DestructClass("vtkVolumeProMapper");
|
||
|
return vtkVolumeProVP1000Mapper::New();
|
||
|
#else
|
||
|
// if not using vli, then return the stub class, which will render
|
||
|
// nothing....
|
||
|
return new vtkVolumeProMapper;
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
int vtkVolumeProMapper::StatusOK()
|
||
|
{
|
||
|
if ( this->NoHardware )
|
||
|
{
|
||
|
if ( !this->DisplayedMessage )
|
||
|
{
|
||
|
vtkErrorMacro( << "No Hardware Found!" );
|
||
|
this->DisplayedMessage = 1;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if ( this->WrongVLIVersion )
|
||
|
{
|
||
|
if ( !this->DisplayedMessage )
|
||
|
{
|
||
|
vtkErrorMacro( << "Wrong VLI Version found!" );
|
||
|
this->DisplayedMessage = 1;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if ( this->Context == NULL )
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if ( this->LookupTable == NULL )
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if ( this->Cut == NULL )
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
void vtkVolumeProMapper::SetSuperSamplingFactor( double x, double y, double z )
|
||
|
{
|
||
|
if ( x < 0.0 || x > 1.0 ||
|
||
|
y < 0.0 || y > 1.0 ||
|
||
|
z < 0.0 || z > 1.0 )
|
||
|
{
|
||
|
vtkErrorMacro( << "Invalid supersampling factor" << endl <<
|
||
|
"Each component must be between 0 and 1" );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
this->SuperSamplingFactor[0] = x;
|
||
|
this->SuperSamplingFactor[1] = y;
|
||
|
this->SuperSamplingFactor[2] = z;
|
||
|
|
||
|
this->Modified();
|
||
|
}
|
||
|
|
||
|
void vtkVolumeProMapper::PrintSelf(ostream& os, vtkIndent indent)
|
||
|
{
|
||
|
this->Superclass::PrintSelf(os,indent);
|
||
|
|
||
|
// don't print this->SubVolume
|
||
|
os << indent << "Number Of Boards: " << this->NumberOfBoards << endl;
|
||
|
|
||
|
os << indent << "Major Board Version: " << this->MajorBoardVersion << endl;
|
||
|
|
||
|
os << indent << "Minor Board Version: " << this->MinorBoardVersion << endl;
|
||
|
|
||
|
os << indent << "Hardware Available: " <<
|
||
|
(this->NoHardware ? "No\n" : "Yes\n");
|
||
|
|
||
|
os << indent << "Correct vli Version: " <<
|
||
|
(this->WrongVLIVersion ? "No\n" : "Yes\n");
|
||
|
|
||
|
os << indent << "Super Sampling: " <<
|
||
|
(this->SuperSampling ? "On\n" : "Off\n");
|
||
|
|
||
|
os << indent << "Super Sampling Factor: " <<
|
||
|
this->SuperSamplingFactor[0] << " by " <<
|
||
|
this->SuperSamplingFactor[1] << " by " <<
|
||
|
this->SuperSamplingFactor[2] << endl;
|
||
|
|
||
|
os << indent << "Intermix Intersecting Geometry: "
|
||
|
<< (this->IntermixIntersectingGeometry ? "On\n" : "Off\n");
|
||
|
|
||
|
os << indent << "Cursor: " << (this->Cursor ? "On\n" : "Off\n");
|
||
|
|
||
|
os << indent << "Cursor Position: (" <<
|
||
|
this->CursorPosition[0] << ", " <<
|
||
|
this->CursorPosition[1] << ", " <<
|
||
|
this->CursorPosition[0] << ")\n";
|
||
|
|
||
|
os << indent << "Cursor X Axis Color: (" <<
|
||
|
this->CursorXAxisColor[0] << ", " <<
|
||
|
this->CursorXAxisColor[1] << ", " <<
|
||
|
this->CursorXAxisColor[0] << ")\n";
|
||
|
|
||
|
os << indent << "Cursor Y Axis Color: (" <<
|
||
|
this->CursorYAxisColor[0] << ", " <<
|
||
|
this->CursorYAxisColor[1] << ", " <<
|
||
|
this->CursorYAxisColor[0] << ")\n";
|
||
|
|
||
|
os << indent << "Cursor Z Axis Color: (" <<
|
||
|
this->CursorZAxisColor[0] << ", " <<
|
||
|
this->CursorZAxisColor[1] << ", " <<
|
||
|
this->CursorZAxisColor[0] << ")\n";
|
||
|
|
||
|
os << indent << "Cursor Type: " << this->GetCursorTypeAsString() << endl;
|
||
|
|
||
|
os << indent << "Blend Mode: " << this->GetBlendModeAsString() << endl;
|
||
|
|
||
|
os << indent << "Cut Plane: " << (this->CutPlane ? "On\n" : "Off\n");
|
||
|
|
||
|
os << indent << "Cut Plane Equation: \n" << indent << " (" <<
|
||
|
this->CutPlaneEquation[0] << ")X + (" <<
|
||
|
this->CutPlaneEquation[1] << ")Y + (" <<
|
||
|
this->CutPlaneEquation[2] << ")Z + (" <<
|
||
|
this->CutPlaneEquation[3] << ") = 0\n";
|
||
|
|
||
|
os << indent << "Cut Plane Thickness " << this->CutPlaneThickness << endl;
|
||
|
|
||
|
os << indent << "Cut Plane FallOff Distance " <<
|
||
|
this->CutPlaneFallOffDistance << endl;
|
||
|
|
||
|
os << indent << "Gradient Opacity Modulation: " <<
|
||
|
(this->GradientOpacityModulation ? "On\n" : "Off\n");
|
||
|
|
||
|
os << indent << "Gradient Specular Modulation: " <<
|
||
|
(this->GradientSpecularModulation ? "On\n" : "Off\n");
|
||
|
|
||
|
os << indent << "Gradient Diffuse Modulation: " <<
|
||
|
(this->GradientDiffuseModulation ? "On\n" : "Off\n");
|
||
|
}
|