Skip to content
Snippets Groups Projects
Commit 80d67795 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

fix import of VRML polys with numvert > 4
parent 455d84cb
Branches
Tags
No related merge requests found
// $Id: GModelIO.cpp,v 1.19 2006-08-17 18:15:39 geuzaine Exp $ // $Id: GModelIO.cpp,v 1.20 2006-08-17 19:19:14 geuzaine Exp $
// //
// Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
// //
...@@ -792,18 +792,21 @@ static int readElementsVRML(FILE *fp, std::map<int, MVertex*> &v, int region, ...@@ -792,18 +792,21 @@ static int readElementsVRML(FILE *fp, std::map<int, MVertex*> &v, int region,
return 0; return 0;
} }
} }
if(idx.size() == 2){ if(idx.size() < 2){
Msg(INFO, "Skipping %d-vertex element", (int)idx.size());
}
else if(idx.size() == 2){
elements[0][region].push_back(new MLine(v[idx[0]], v[idx[1]])); elements[0][region].push_back(new MLine(v[idx[0]], v[idx[1]]));
} }
else if(idx.size() == 3){ else if(idx.size() == 3){
elements[1][region].push_back elements[1][region].push_back
(new MTriangle(v[idx[0]], v[idx[1]], v[idx[2]])); (new MTriangle(v[idx[0]], v[idx[1]], v[idx[2]]));
} }
else if(idx.size() == 4 && !strips){ else if(!strips && idx.size() == 4){
elements[2][region].push_back elements[2][region].push_back
(new MQuadrangle(v[idx[0]], v[idx[1]], v[idx[2]], v[idx[3]])); (new MQuadrangle(v[idx[0]], v[idx[1]], v[idx[2]], v[idx[3]]));
} }
else if(idx.size() > 2 && strips){ else if(strips){ // triangle strip
for(unsigned int j = 2; j < idx.size(); j++){ for(unsigned int j = 2; j < idx.size(); j++){
if(j % 2) if(j % 2)
elements[1][region].push_back elements[1][region].push_back
...@@ -813,6 +816,12 @@ static int readElementsVRML(FILE *fp, std::map<int, MVertex*> &v, int region, ...@@ -813,6 +816,12 @@ static int readElementsVRML(FILE *fp, std::map<int, MVertex*> &v, int region,
(new MTriangle(v[idx[j - 2]], v[idx[j - 1]], v[idx[j]])); (new MTriangle(v[idx[j - 2]], v[idx[j - 1]], v[idx[j]]));
} }
} }
else{ // import polygon as triangle fan
for(unsigned int j = 2; j < idx.size(); j++){
elements[1][region].push_back
(new MTriangle(v[idx[0]], v[idx[j-1]], v[idx[j]]));
}
}
idx.clear(); idx.clear();
} }
} }
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment