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.
 
 
 
 
 
 

219 lines
6.4 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkDataSetMapper.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 "vtkDataSetMapper.h"
#include "vtkDataSet.h"
#include "vtkDataSetSurfaceFilter.h"
#include "vtkExecutive.h"
#include "vtkGarbageCollector.h"
#include "vtkInformation.h"
#include "vtkObjectFactory.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
vtkCxxRevisionMacro(vtkDataSetMapper, "$Revision: 1.70 $");
vtkStandardNewMacro(vtkDataSetMapper);
//----------------------------------------------------------------------------
vtkDataSetMapper::vtkDataSetMapper()
{
this->GeometryExtractor = NULL;
this->PolyDataMapper = NULL;
}
//----------------------------------------------------------------------------
vtkDataSetMapper::~vtkDataSetMapper()
{
// delete internally created objects.
if ( this->GeometryExtractor )
{
this->GeometryExtractor->Delete();
}
if ( this->PolyDataMapper )
{
this->PolyDataMapper->Delete();
}
}
//----------------------------------------------------------------------------
void vtkDataSetMapper::SetInput(vtkDataSet *input)
{
if(input)
{
this->SetInputConnection(0, input->GetProducerPort());
}
else
{
// Setting a NULL input removes the connection.
this->SetInputConnection(0, 0);
}
}
//----------------------------------------------------------------------------
vtkDataSet *vtkDataSetMapper::GetInput()
{
return this->Superclass::GetInputAsDataSet();
}
//----------------------------------------------------------------------------
void vtkDataSetMapper::ReleaseGraphicsResources( vtkWindow *renWin )
{
if (this->PolyDataMapper)
{
this->PolyDataMapper->ReleaseGraphicsResources( renWin );
}
}
//----------------------------------------------------------------------------
// Receives from Actor -> maps data to primitives
//
void vtkDataSetMapper::Render(vtkRenderer *ren, vtkActor *act)
{
// make sure that we've been properly initialized
//
if ( !this->GetInput() )
{
vtkErrorMacro(<< "No input!\n");
return;
}
// Need a lookup table
//
if ( this->LookupTable == NULL )
{
this->CreateDefaultLookupTable();
}
this->LookupTable->Build();
// Now can create appropriate mapper
//
if ( this->PolyDataMapper == NULL )
{
vtkDataSetSurfaceFilter *gf = vtkDataSetSurfaceFilter::New();
vtkPolyDataMapper *pm = vtkPolyDataMapper::New();
pm->SetInput(gf->GetOutput());
this->GeometryExtractor = gf;
this->PolyDataMapper = pm;
}
// share clipping planes with the PolyDataMapper
//
if (this->ClippingPlanes != this->PolyDataMapper->GetClippingPlanes())
{
this->PolyDataMapper->SetClippingPlanes(this->ClippingPlanes);
}
// For efficiency: if input type is vtkPolyData, there's no need to
// pass it thru the geometry filter.
//
if ( this->GetInput()->GetDataObjectType() == VTK_POLY_DATA )
{
this->PolyDataMapper->SetInput(static_cast<vtkPolyData*>(this->GetInput()));
}
else
{
this->GeometryExtractor->SetInput(this->GetInput());
this->PolyDataMapper->SetInput(this->GeometryExtractor->GetOutput());
}
// update ourselves in case something has changed
this->PolyDataMapper->SetLookupTable(this->GetLookupTable());
this->PolyDataMapper->SetScalarVisibility(this->GetScalarVisibility());
this->PolyDataMapper->SetUseLookupTableScalarRange(
this->GetUseLookupTableScalarRange());
this->PolyDataMapper->SetScalarRange(this->GetScalarRange());
this->PolyDataMapper->SetImmediateModeRendering(
this->GetImmediateModeRendering());
this->PolyDataMapper->SetColorMode(this->GetColorMode());
this->PolyDataMapper->SetInterpolateScalarsBeforeMapping(
this->GetInterpolateScalarsBeforeMapping());
this->PolyDataMapper->SetScalarMode(this->GetScalarMode());
if ( this->ScalarMode == VTK_SCALAR_MODE_USE_POINT_FIELD_DATA ||
this->ScalarMode == VTK_SCALAR_MODE_USE_CELL_FIELD_DATA )
{
if ( this->ArrayAccessMode == VTK_GET_ARRAY_BY_ID )
{
this->PolyDataMapper->ColorByArrayComponent(this->ArrayId,ArrayComponent);
}
else
{
this->PolyDataMapper->ColorByArrayComponent(this->ArrayName,ArrayComponent);
}
}
this->PolyDataMapper->Render(ren,act);
this->TimeToDraw = this->PolyDataMapper->GetTimeToDraw();
}
//----------------------------------------------------------------------------
void vtkDataSetMapper::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os,indent);
if ( this->PolyDataMapper )
{
os << indent << "Poly Mapper: (" << this->PolyDataMapper << ")\n";
}
else
{
os << indent << "Poly Mapper: (none)\n";
}
if ( this->GeometryExtractor )
{
os << indent << "Geometry Extractor: (" << this->GeometryExtractor << ")\n";
}
else
{
os << indent << "Geometry Extractor: (none)\n";
}
}
//----------------------------------------------------------------------------
unsigned long vtkDataSetMapper::GetMTime()
{
unsigned long mTime=this->vtkMapper::GetMTime();
unsigned long time;
if ( this->LookupTable != NULL )
{
time = this->LookupTable->GetMTime();
mTime = ( time > mTime ? time : mTime );
}
return mTime;
}
//----------------------------------------------------------------------------
int vtkDataSetMapper::FillInputPortInformation(
int vtkNotUsed(port), vtkInformation* info)
{
info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkDataSet");
return 1;
}
//----------------------------------------------------------------------------
void vtkDataSetMapper::ReportReferences(vtkGarbageCollector* collector)
{
this->Superclass::ReportReferences(collector);
// These filters share our input and are therefore involved in a
// reference loop.
vtkGarbageCollectorReport(collector, this->GeometryExtractor,
"GeometryExtractor");
vtkGarbageCollectorReport(collector, this->PolyDataMapper,
"PolyDataMapper");
}