/*========================================================================= Program: Visualization Toolkit Module: $RCSfile: vtkClosePolyData.cxx,v $ Language: C++ Date: $Date: 2009/05/14 13:54:34 $ Version: $Revision: 1.2 $ Copyright (c) 1993-2002 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 "vtkClosePolyData.h" #include "vtkObjectFactory.h" #include "vtkPolyData.h" #include "vtkFeatureEdges.h" #include "vtkStripper.h" #include "vtkTriangleFilter.h" //#include "vtkGLUTesselatorTriangleFilter.h" #include "vtkAppendPolyData.h" #include "vtkCleanPolyData.h" vtkCxxRevisionMacro(vtkClosePolyData, "$Revision: 1.2 $"); vtkStandardNewMacro(vtkClosePolyData); //---------------------------------------------------------------------------- vtkClosePolyData::vtkClosePolyData() { } //---------------------------------------------------------------------------- vtkClosePolyData::~vtkClosePolyData() { } //---------------------------------------------------------------------------- // This method is much too long, and has to be broken up! // Furthermore we are loosing the normals !!! void vtkClosePolyData::Execute() { vtkPolyData *input = this->GetInput(); vtkPolyData *output = this->GetOutput(); //#closing the polydata see : close.py for details vtkFeatureEdges *boundary = vtkFeatureEdges::New(); boundary->SetInput( input ); boundary->BoundaryEdgesOn (); boundary->FeatureEdgesOff (); boundary->NonManifoldEdgesOff (); boundary->ManifoldEdgesOff (); //boundary->ColoringOff (); vtkStripper *stripper = vtkStripper::New(); stripper->SetInput( boundary->GetOutput() ); stripper->Update(); //important boundary->Delete(); vtkPolyData *pd = vtkPolyData::New(); pd->SetPoints ( stripper->GetOutput()->GetPoints() ); pd->SetPolys ( stripper->GetOutput()->GetLines() ); stripper->Delete(); //vtkGLUTesselatorTriangleFilter *triangle = vtkGLUTesselatorTriangleFilter::New(); vtkTriangleFilter *triangle = vtkTriangleFilter::New(); triangle->SetInput( pd ); pd->Delete(); vtkAppendPolyData *append = vtkAppendPolyData::New(); append->AddInput( input ); append->AddInput( triangle->GetOutput()); triangle->Delete(); vtkCleanPolyData *clean = vtkCleanPolyData::New(); clean->SetInput( append->GetOutput()); append->Delete(); // When all optimizations are complete, this squeeze will be unecessary. // (But it does not seem to cost much.) clean->Update(); //important before ShallowCopy output->ShallowCopy( clean->GetOutput() ); clean->Delete(); } //---------------------------------------------------------------------------- void vtkClosePolyData::PrintSelf(ostream& os, vtkIndent indent) { this->Superclass::PrintSelf(os,indent); }