203{
204
205 double vertTolerance = 1
E-15;
206 std::vector<GeoFacetVertex> vertexList;
207 std::map<GeoFacet*,std::vector<size_t> > facetVertIndInSolid;
208
209
210 for(size_t facetIndInSolid = 0; facetIndInSolid<tessellated->getNumberOfFacets(); ++facetIndInSolid) {
211 GeoFacet* facet = tessellated->getFacet(facetIndInSolid);
212
213 facetVertIndInSolid[facet] = std::vector<size_t>();
214 std::vector<size_t>&
current = facetVertIndInSolid[facet];
215 if(facet->getNumberOfVertices()==3)
217 else
219
220 size_t vertexListSize = vertexList.size();
221 GeoFacetVertex
vertex(0.,0.,0.);
222
223
224 for(size_t vertexIndInFacet=0; vertexIndInFacet<facet->getNumberOfVertices(); ++vertexIndInFacet) {
225 vertex = facet->getVertex(vertexIndInFacet);
226
227
229 size_t j=0;
230 while(j<vertexListSize && !found) {
231 GeoFacetVertex vertexToCheck = vertexList[j];
233 if(!found) j++;
234 }
235
236 if(found) {
238 }
239 else {
240 vertexList.push_back(vertex);
241 current[vertexIndInFacet] = vertexList.size()-1;
242 }
243 }
244 }
245
246
247 SbPolyhedronArbitrary* polyhedron= new SbPolyhedronArbitrary(vertexList.size(),tessellated->getNumberOfFacets());
248
249
250 for(size_t vertexInd=0; vertexInd<vertexList.size(); ++vertexInd) {
251 GeoFacetVertex
vertex = vertexList[vertexInd];
253 }
254
255
256 for(size_t facetIndInSolid = 0; facetIndInSolid<tessellated->getNumberOfFacets(); ++facetIndInSolid) {
257 GeoFacet* facet = tessellated->getFacet(facetIndInSolid);
258 std::vector<size_t>&
current = facetVertIndInSolid[facet];
259
261 for (size_t j=0; j<4; j++)
262 v[j] = (j<
current.size() ? current[j]+1 : 0);
263
264 polyhedron->
AddFacet(v[0],v[1],v[2],v[3]);
265 }
266
269}
Scalar mag() const
mag method
void AddFacet(const int iv1, const int iv2, const int iv3, const int iv4=0)
void AddVertex(const double v1, const double v2, const double v3)