=========================================================================*/
#include "vtkClosePolyData.h"
-#include "vtkObjectFactory.h"
#include "vtkPolyData.h"
#include "vtkFeatureEdges.h"
#include "vtkStripper.h"
//EED 2017-01-01 Migration VTK7
#if VTK_MAJOR_VERSION <= 5
-vtkCxxRevisionMacro(vtkClosePolyData, "$Revision: 1.3 $");
+ vtkCxxRevisionMacro(vtkClosePolyData, "$Revision: 1.3 $");
#else
- //...
+ #include "vtkDataObject.h"
+ #include "vtkInformation.h"
+ #include "vtkDemandDrivenPipeline.h"
+ #include "vtkInformationVector.h"
#endif
vtkStandardNewMacro(vtkClosePolyData);
append->AddInput( input );
append->AddInput( triangle->GetOutput());
triangle->Delete();
-
+ vtkInformation
vtkCleanPolyData *clean = vtkCleanPolyData::New();
clean->SetInput( append->GetOutput());
append->Delete();
}
#else
- int vtkClosePolyData::ProcessRequest( vtkInformation *request,
- vtkInformationVector **inputVector,
- vtkInformationVector *outputVector)
- {
-printf("EED Warning ERROR ! vtkClosePolyData::ProcessRequest not implemented VTK7 migration")
- }
+
+int vtkClosePolyData::RequestData( vtkInformation *vtkNotUsed(request), vtkInformationVector **inputVector, vtkInformationVector *outputVector)
+{
+ // get the info objects
+ vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
+ vtkInformation *outInfo = outputVector->GetInformationObject(0);
+ // get the input and output
+ vtkPolyData *input = vtkPolyData::SafeDownCast( inInfo->Get(vtkDataObject::DATA_OBJECT()));
+ vtkPolyData *output = vtkPolyData::SafeDownCast( outInfo->Get(vtkDataObject::DATA_OBJECT()));
+ //#closing the polydata see : close.py for details
+
+ vtkFeatureEdges *boundary = vtkFeatureEdges::New();
+ boundary->SetInputData( input );
+ boundary->BoundaryEdgesOn ();
+ boundary->FeatureEdgesOff ();
+ boundary->NonManifoldEdgesOff ();
+ boundary->ManifoldEdgesOff ();
+ // boundary->ColoringOff ();
+ boundary->Update();
+
+ vtkStripper *stripper = vtkStripper::New();
+ stripper->SetInputConnection( boundary->GetOutputPort() );
+ stripper->Update(); //important
+
+ vtkPolyData *pd = vtkPolyData::New();
+ pd->SetPoints ( stripper->GetOutput()->GetPoints() );
+ pd->SetPolys ( stripper->GetOutput()->GetLines() );
+ //vtkGLUTesselatorTriangleFilter *triangle = vtkGLUTesselatorTriangleFilter::New();
+
+ vtkTriangleFilter *triangle = vtkTriangleFilter::New();
+ triangle->SetInputData( pd );
+ triangle->Update( );
+
+ vtkAppendPolyData *append = vtkAppendPolyData::New();
+ append->AddInputData( input );
+ append->AddInputConnection( triangle->GetOutputPort() );
+ append->Update();
+
+ vtkCleanPolyData *clean = vtkCleanPolyData::New();
+ clean->SetInputConnection( append->GetOutputPort());
+ // 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() );
+
+ append -> Delete();
+ clean -> Delete();
+ boundary -> Delete();
+ stripper -> Delete();
+ pd -> Delete();
+ triangle -> Delete();
+
+ return 1;
+}
#endif