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.
220 lines
6.4 KiB
220 lines
6.4 KiB
2 years ago
|
/*=========================================================================
|
||
|
|
||
|
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");
|
||
|
}
|