Cloned library of VTK-5.0.0 with extra build files for internal package management.
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.
 
 
 
 
 
 

201 lines
5.0 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkTexture.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 "vtkTexture.h"
#include "vtkExecutive.h"
#include "vtkGraphicsFactory.h"
#include "vtkImageData.h"
#include "vtkLookupTable.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
vtkCxxRevisionMacro(vtkTexture, "$Revision: 1.53 $");
//----------------------------------------------------------------------------
// Needed when we don't use the vtkStandardNewMacro.
vtkInstantiatorNewMacro(vtkTexture);
//----------------------------------------------------------------------------
// Construct object and initialize.
vtkTexture::vtkTexture()
{
this->Repeat = 1;
this->Interpolate = 0;
this->Quality = VTK_TEXTURE_QUALITY_DEFAULT;
this->LookupTable = NULL;
this->MappedScalars = NULL;
this->MapColorScalarsThroughLookupTable = 0;
this->SelfAdjustingTableRange = 0;
this->SetNumberOfOutputPorts(0);
}
vtkTexture::~vtkTexture()
{
if (this->MappedScalars)
{
this->MappedScalars->Delete();
}
if (this->LookupTable != NULL)
{
this->LookupTable->UnRegister(this);
}
}
// return the correct type of Texture
vtkTexture *vtkTexture::New()
{
// First try to create the object from the vtkObjectFactory
vtkObject* ret = vtkGraphicsFactory::CreateInstance("vtkTexture");
return (vtkTexture*)ret;
}
vtkImageData *vtkTexture::GetInput()
{
if (this->GetNumberOfInputConnections(0) < 1)
{
return 0;
}
return vtkImageData::SafeDownCast(this->GetExecutive()->GetInputData(0, 0));
}
void vtkTexture::SetLookupTable(vtkLookupTable *lut)
{
if ( this->LookupTable != lut )
{
if ( this->LookupTable != NULL ) {this->LookupTable->UnRegister(this);}
this->LookupTable = lut;
if ( this->LookupTable != NULL ) {this->LookupTable->Register(this);}
this->Modified();
}
}
void vtkTexture::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os,indent);
os << indent << "Interpolate: " << (this->Interpolate ? "On\n" : "Off\n");
os << indent << "Repeat: " << (this->Repeat ? "On\n" : "Off\n");
os << indent << "Quality: ";
switch (this->Quality)
{
case VTK_TEXTURE_QUALITY_DEFAULT:
os << "Default\n";
break;
case VTK_TEXTURE_QUALITY_16BIT:
os << "16Bit\n";
break;
case VTK_TEXTURE_QUALITY_32BIT:
os << "32Bit\n";
break;
}
os << indent << "MapColorScalarsThroughLookupTable: " << (this->MapColorScalarsThroughLookupTable ? "On\n" : "Off\n");
if ( this->GetInput() )
{
os << indent << "Input: (" << (void *)this->GetInput() << ")\n";
}
else
{
os << indent << "Input: (none)\n";
}
if ( this->LookupTable )
{
os << indent << "LookupTable:\n";
this->LookupTable->PrintSelf (os, indent.GetNextIndent ());
}
else
{
os << indent << "LookupTable: (none)\n";
}
if ( this->MappedScalars )
{
os << indent << "Mapped Scalars: " << this->MappedScalars << "\n";
}
else
{
os << indent << "Mapped Scalars: (none)\n";
}
}
unsigned char *vtkTexture::MapScalarsToColors (vtkDataArray *scalars)
{
int numPts = scalars->GetNumberOfTuples();
vtkUnsignedCharArray *mappedScalars;
// if there is no lookup table, create one
if (this->LookupTable == NULL)
{
this->LookupTable = vtkLookupTable::New();
this->LookupTable->Register(this);
this->LookupTable->Delete();
this->LookupTable->Build ();
this->SelfAdjustingTableRange = 1;
}
else
{
this->SelfAdjustingTableRange = 0;
}
// if there is no pixmap, create one
if (!this->MappedScalars)
{
this->MappedScalars = vtkUnsignedCharArray::New();
this->MappedScalars->SetNumberOfComponents(4);
}
// if the texture created its own lookup table, set the Table Range
// to the range of the scalar data.
if (this->SelfAdjustingTableRange)
{
this->LookupTable->SetTableRange (scalars->GetRange(0));
}
// map the scalars to colors
mappedScalars = this->MappedScalars;
mappedScalars->SetNumberOfTuples(numPts);
unsigned char *cptr = (unsigned char *)mappedScalars->GetVoidPointer(0);
this->LookupTable->MapScalarsThroughTable(scalars,cptr);
return cptr;
}
void vtkTexture::Render(vtkRenderer *ren)
{
vtkImageData *input = this->GetInput();
if (input) //load texture map
{
// We do not want more than requested.
input->RequestExactExtentOn();
// Updating the whole extent may not be necessary.
input->UpdateInformation();
input->SetUpdateExtentToWholeExtent();
input->Update();
this->Load(ren);
}
}