85 std::shared_ptr<GeometryHandler> handle =
obj->getGeometryHandler();
86 if (!(handle->canTriangulate()))
88 std::stringstream buf;
92 auto noPts = handle->numberOfPoints();
94 auto noTris = handle->numberOfTriangles();
96 AutoPtr<Element> pPiece =
m_doc->createElement(
"Piece");
99 pPiece->setAttribute(
"name", buf.str());
103 pPiece->setAttribute(
"NumberOfPoints", buf.str());
107 pPiece->setAttribute(
"NumberOfPolys", buf.str());
109 AutoPtr<Element> pPoints =
m_doc->createElement(
"Points");
110 AutoPtr<Element> pPtsDataArray =
m_doc->createElement(
"DataArray");
112 pPtsDataArray->setAttribute(
"type",
"Float32");
113 pPtsDataArray->setAttribute(
"NumberOfComponents",
"3");
114 pPtsDataArray->setAttribute(
"format",
"ascii");
117 const auto &points = handle->getTriangleVertices();
119 for (i = 0; i < points.size(); i++) {
120 buf << points[i] <<
" ";
122 AutoPtr<Text> pPointText =
m_doc->createTextNode(buf.str());
123 pPtsDataArray->appendChild(pPointText);
124 pPoints->appendChild(pPtsDataArray);
126 AutoPtr<Element> pFaces =
m_doc->createElement(
"Polys");
127 AutoPtr<Element> pTrisDataArray =
m_doc->createElement(
"DataArray");
129 pTrisDataArray->setAttribute(
"type",
"UInt32");
130 pTrisDataArray->setAttribute(
"Name",
"connectivity");
131 pTrisDataArray->setAttribute(
"format",
"ascii");
134 const auto &faces = handle->getTriangleFaces();
135 for (i = 0; i < faces.size(); i++) {
136 buf << faces[i] <<
" ";
138 AutoPtr<Text> pTrisDataText =
m_doc->createTextNode(buf.str());
139 pTrisDataArray->appendChild(pTrisDataText);
140 pFaces->appendChild(pTrisDataArray);
142 AutoPtr<Element> pTrisOffsetDataArray =
m_doc->createElement(
"DataArray");
144 pTrisOffsetDataArray->setAttribute(
"type",
"UInt32");
145 pTrisOffsetDataArray->setAttribute(
"Name",
"offsets");
146 pTrisOffsetDataArray->setAttribute(
"format",
"ascii");
148 for (i = 1; i < noTris + 1; i++) {
151 AutoPtr<Text> pTrisOffsetDataText =
m_doc->createTextNode(buf.str());
152 pTrisOffsetDataArray->appendChild(pTrisOffsetDataText);
153 pFaces->appendChild(pTrisOffsetDataArray);
156 pPiece->appendChild(pPoints);
157 pPiece->appendChild(pFaces);
160 m_root->appendChild(pPiece);