You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/3rd/VTK7.1/source/VTK-7.1.1/Rendering/OpenGL/vtkDefaultPainter.cxx

362 lines
10 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkDefaultPainter.cxx
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 "vtkDefaultPainter.h"
#include "vtkActor.h"
#include "vtkClipPlanesPainter.h"
#include "vtkCoincidentTopologyResolutionPainter.h"
#include "vtkCompositePainter.h"
#include "vtkDisplayListPainter.h"
#include "vtkGarbageCollector.h"
#include "vtkLightingPainter.h"
#include "vtkObjectFactory.h"
#include "vtkPolyData.h"
#include "vtkProperty.h"
#include "vtkRepresentationPainter.h"
#include "vtkScalarsToColorsPainter.h"
vtkStandardNewMacro(vtkDefaultPainter);
vtkCxxSetObjectMacro(vtkDefaultPainter, DefaultPainterDelegate, vtkPainter);
vtkCxxSetObjectMacro(vtkDefaultPainter, ScalarsToColorsPainter,
vtkScalarsToColorsPainter);
vtkCxxSetObjectMacro(vtkDefaultPainter, ClipPlanesPainter,
vtkClipPlanesPainter);
vtkCxxSetObjectMacro(vtkDefaultPainter, DisplayListPainter,
vtkDisplayListPainter);
vtkCxxSetObjectMacro(vtkDefaultPainter, CompositePainter, vtkCompositePainter);
vtkCxxSetObjectMacro(vtkDefaultPainter, CoincidentTopologyResolutionPainter,
vtkCoincidentTopologyResolutionPainter);
vtkCxxSetObjectMacro(vtkDefaultPainter, LightingPainter, vtkLightingPainter);
vtkCxxSetObjectMacro(vtkDefaultPainter, RepresentationPainter, vtkRepresentationPainter);
//-----------------------------------------------------------------------------
vtkDefaultPainter::vtkDefaultPainter()
{
this->ScalarsToColorsPainter = 0;
this->ClipPlanesPainter = 0;
this->DisplayListPainter = 0;
this->CompositePainter = 0;
this->CoincidentTopologyResolutionPainter = 0;
this->LightingPainter = 0;
this->RepresentationPainter = 0;
this->DefaultPainterDelegate = 0;
vtkScalarsToColorsPainter* scp = vtkScalarsToColorsPainter::New();
this->SetScalarsToColorsPainter(scp);
scp->Delete();
vtkClipPlanesPainter* cp = vtkClipPlanesPainter::New();
this->SetClipPlanesPainter(cp);
cp->Delete();
vtkDisplayListPainter* dlp = vtkDisplayListPainter::New();
this->SetDisplayListPainter(dlp);
dlp->Delete();
vtkCompositePainter* cpp = vtkCompositePainter::New();
this->SetCompositePainter(cpp);
cpp->Delete();
vtkCoincidentTopologyResolutionPainter* ctrp =
vtkCoincidentTopologyResolutionPainter::New();
this->SetCoincidentTopologyResolutionPainter(ctrp);
ctrp->Delete();
vtkLightingPainter* lp = vtkLightingPainter::New();
this->SetLightingPainter(lp);
lp->Delete();
vtkRepresentationPainter* vp = vtkRepresentationPainter::New();
this->SetRepresentationPainter(vp);
vp->Delete();
}
//-----------------------------------------------------------------------------
vtkDefaultPainter::~vtkDefaultPainter()
{
this->SetScalarsToColorsPainter(0);
this->SetClipPlanesPainter(0);
this->SetDisplayListPainter(0);
this->SetCompositePainter(0);
this->SetCoincidentTopologyResolutionPainter(0);
this->SetLightingPainter(0);
this->SetRepresentationPainter(0);
this->SetDefaultPainterDelegate(0);
}
//-----------------------------------------------------------------------------
void vtkDefaultPainter::BuildPainterChain()
{
vtkPainter* headPainter = 0;
vtkPainter* prevPainter = 0;
vtkPainter* painter = 0;
painter = this->GetScalarsToColorsPainter();
if (painter)
{
if (prevPainter)
{
prevPainter->SetDelegatePainter(painter);
}
prevPainter = painter;
headPainter = (headPainter)? headPainter : painter;
}
painter = this->GetClipPlanesPainter();
if (painter)
{
if (prevPainter)
{
prevPainter->SetDelegatePainter(painter);
}
prevPainter = painter;
headPainter = (headPainter)? headPainter : painter;
}
painter = this->GetDisplayListPainter();
if (painter)
{
if (prevPainter)
{
prevPainter->SetDelegatePainter(painter);
}
prevPainter = painter;
headPainter = (headPainter)? headPainter : painter;
}
// We are always putting in the composite painter since it does not have any
// significant overhead for non-composite datasets.
painter = this->GetCompositePainter();
if (painter)
{
if (prevPainter)
{
prevPainter->SetDelegatePainter(painter);
}
prevPainter = painter;
headPainter = (headPainter)? headPainter : painter;
}
painter = this->GetLightingPainter();
if (painter)
{
if (prevPainter)
{
prevPainter->SetDelegatePainter(painter);
}
prevPainter = painter;
headPainter = (headPainter)? headPainter : painter;
}
painter = this->GetRepresentationPainter();
if (painter)
{
if (prevPainter)
{
prevPainter->SetDelegatePainter(painter);
}
prevPainter = painter;
headPainter = (headPainter)? headPainter : painter;
}
painter = this->GetCoincidentTopologyResolutionPainter();
if (painter)
{
if (prevPainter)
{
prevPainter->SetDelegatePainter(painter);
}
prevPainter = painter;
headPainter = (headPainter)? headPainter : painter;
}
// this will set in internal delegate painter.
this->Superclass::SetDelegatePainter(headPainter);
if (prevPainter)
{
prevPainter->SetDelegatePainter(this->DefaultPainterDelegate);
}
}
//-----------------------------------------------------------------------------
void vtkDefaultPainter::Render(vtkRenderer* renderer, vtkActor* actor,
unsigned long typeflags, bool forceCompileOnly)
{
if (this->ChainBuildTime < this->MTime)
{
this->BuildPainterChain();
this->ChainBuildTime.Modified();
}
this->Superclass::Render(renderer, actor, typeflags,forceCompileOnly);
}
//-----------------------------------------------------------------------------
void vtkDefaultPainter::ReleaseGraphicsResources(vtkWindow *window)
{
if (this->DefaultPainterDelegate)
{
this->DefaultPainterDelegate->ReleaseGraphicsResources(window);
}
if (this->ScalarsToColorsPainter)
{
this->ScalarsToColorsPainter->ReleaseGraphicsResources(window);
}
this->Superclass::ReleaseGraphicsResources(window);
}
//-----------------------------------------------------------------------------
void vtkDefaultPainter::SetDelegatePainter(vtkPainter* painter)
{
this->SetDefaultPainterDelegate(painter);
}
//-----------------------------------------------------------------------------
void vtkDefaultPainter::ReportReferences(vtkGarbageCollector* collector)
{
this->Superclass::ReportReferences(collector);
vtkGarbageCollectorReport(collector, this->ScalarsToColorsPainter,
"ScalarsToColors Painter");
vtkGarbageCollectorReport(collector, this->DisplayListPainter,
"DisplayListPainter");
vtkGarbageCollectorReport(collector, this->ClipPlanesPainter,
"ClipPlanes Painter");
vtkGarbageCollectorReport(collector, this->CompositePainter,
"Composite Painter");
vtkGarbageCollectorReport(collector,
this->CoincidentTopologyResolutionPainter,
"CoincidentTopologyResolution Painter");
vtkGarbageCollectorReport(collector, this->LightingPainter,
"Lighting Painter");
vtkGarbageCollectorReport(collector, this->RepresentationPainter,
"Wireframe Painter");
vtkGarbageCollectorReport(collector, this->DefaultPainterDelegate,
"DefaultPainter Delegate");
}
//-------------------------------------------------------------------------
void vtkDefaultPainter::UpdateBounds(double bounds[6])
{
// need the superclass to start with the first painter in the chain
vtkPainter *painter = this->Superclass::GetDelegatePainter();
if( painter )
{
// delegate the task of updating the bounds
painter->UpdateBounds(bounds);
}
else
{
// no painter in the chain. let's build the chain if needed.
if (this->ChainBuildTime < this->MTime)
{
// build the chain of painters
this->BuildPainterChain();
this->ChainBuildTime.Modified();
}
// try again to get the first painter in the chain
painter = this->Superclass::GetDelegatePainter();
if( painter )
{
//delegate the task of updating the bounds
painter->UpdateBounds(bounds);
}
}
}
//-----------------------------------------------------------------------------
void vtkDefaultPainter::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os, indent);
os << indent << "ScalarsToColorsPainter: " ;
if (this->ScalarsToColorsPainter)
{
os << endl ;
this->ScalarsToColorsPainter->PrintSelf(os, indent.GetNextIndent());
}
else
{
os << "(none)" << endl;
}
os << indent << "ClipPlanesPainter: " ;
if (this->ClipPlanesPainter)
{
os << endl ;
this->ClipPlanesPainter->PrintSelf(os, indent.GetNextIndent());
}
else
{
os << "(none)" << endl;
}
os << indent << "DisplayListPainter: " ;
if (this->DisplayListPainter)
{
os << endl;
this->DisplayListPainter->PrintSelf(
os, indent.GetNextIndent());
}
else
{
os << "(none)" << endl;
}
os << indent << "CompositePainter: ";
if (this->CompositePainter)
{
os << endl;
this->CompositePainter->PrintSelf(os, indent.GetNextIndent());
}
else
{
os << "(none)" << endl;
}
os << indent << "CoincidentTopologyResolutionPainter: " ;
if (this->CoincidentTopologyResolutionPainter)
{
os << endl;
this->CoincidentTopologyResolutionPainter->PrintSelf(
os, indent.GetNextIndent());
}
else
{
os << "(none)" << endl;
}
os << indent << "LightingPainter: " ;
if (this->LightingPainter)
{
os << endl ;
this->LightingPainter->PrintSelf(os, indent.GetNextIndent());
}
else
{
os << "(none)" << endl;
}
os << indent << "RepresentationPainter: " ;
if (this->RepresentationPainter)
{
os << endl ;
this->RepresentationPainter->PrintSelf(os, indent.GetNextIndent());
}
else
{
os << "(none)" << endl;
}
}