21 #include "vtkCellArray.h"
22 #include "vtkCleanPolyData.h"
23 #include "vtkPLYReader.h"
24 #include "vtkPoints.h"
25 #include "vtkPolyData.h"
26 #include "vtkTriangleFilter.h"
28 #include "SimpleOpt.h"
32 std::istringstream
in;
36 std::streambuf*
on = std::cout.rdbuf();
37 std::ofstream
fout(
"/dev/null");
52 #include "ply2tri.help"
61 int main(
int argc,
char *argv[])
67 if (args.LastError() == SO_SUCCESS)
74 o << args.OptionArg();
75 std::istringstream
in(o.str().c_str());
78 if ((val>-1)&&(val<10))
84 std::cerr <<
"Invalid argument: " << args.OptionText() << std::endl;
85 return error(args.LastError());
88 if (args.FileCount() != 0)
return error(-3);
89 vtkPLYReader * reader = vtkPLYReader::New();
90 reader->SetFileName(
"/dev/stdin");
95 vtkPolyData * output = reader->GetOutput();
96 vtkCellArray * triangles_n = output->GetPolys();
97 int n_tri = output->GetNumberOfPolys();
100 vtkCleanPolyData * clean = vtkCleanPolyData::New();
101 clean->SetInputConnection(reader->GetOutputPort());
103 clean->ConvertPolysToLinesOff();
104 vtkTriangleFilter * onlytri = vtkTriangleFilter::New();
105 onlytri->SetInputConnection(clean->GetOutputPort());
108 output = onlytri->GetOutput();
110 vtkPoints * pts_n = output->GetPoints();
111 int n_pts = pts_n->GetNumberOfPoints();
112 std::cout << n_pts << std::endl;
113 std::cout << std::fixed << std::setprecision(
pre);
114 for (
unsigned int k = 0; k < n_pts; k++)
117 pts_n->GetPoint(k,x);
118 std::cout << x[0] <<
' ' << x[1] <<
' ' << x[2] << std::endl;
120 triangles_n = output->GetPolys();
121 n_tri = output->GetNumberOfPolys();
122 std::cout <<
n_tri << std::endl;
123 triangles_n->InitTraversal();
124 for (
unsigned int k = 0; k <
n_tri; k++)
126 const vtkIdType * ref_pt =
nullptr;
128 triangles_n->GetNextCell(npt,ref_pt);
129 std::cout << ref_pt[0] <<
' ' << ref_pt[1] <<
' ' << ref_pt[2] << std::endl;
int main(int argc, char *argv[])
CSimpleOpt::SOption g_rgOptions[]
void set_cout(std::streambuf *buf)
std::ofstream fout("/dev/null")