Rimossa (temporaneamente) la parte che cerca le altre componenti connesse.

This commit is contained in:
Federico Ponchio 2006-10-14 12:03:55 +00:00
parent 4a9d5af123
commit 568dbaf75f
1 changed files with 24 additions and 7 deletions

View File

@ -63,10 +63,11 @@ class Pivot {
std::vector<int> nb; //number of fronts a vertex is into,
//this is used for the Visited and Border flags
//but adding topology may not be needed anymode
int last_seed;
Pivot(MESH &_mesh, ScalarType _radius, ScalarType _mindist = 0.05, ScalarType _crease = -0.5):
mesh(_mesh), radius(_radius), mindist(_mindist), crease(_crease) {
mesh(_mesh), radius(_radius), mindist(_mindist), crease(_crease), last_seed(0) {
//Compute bounding box. (this may be passed as a parameter?
for(int i = 0; i < mesh.vert.size(); i++)
@ -147,6 +148,18 @@ bool seed(bool outside = true, int start = -1) {
break;
}
}
//check on the other side there are not a surface
Point3x recenter;
if(!findSphere(p0, p2, p1, recenter)) continue;
for(int t = 0; t < n; t++) {
CVertex &v = mesh.vert[targets[t]];
Point3x &p = v.P();
if((center - p).Norm() <= radius && (v.IsV() || v.IsB())) {
failed = true;
break;
}
}
if(failed) continue;
found = true;
i = k = j = n;
@ -203,18 +216,21 @@ int addFace() {
}
if(!front.size()) {
return -1;
//maybe there are unconnected parts of the mesh:
//find a non D, V, B point and try to seed if failed D it.
for(int i = 0; i < mesh.vert.size();i ++) {
CVertex &v = mesh.vert[i];
for(; last_seed < mesh.vert.size(); ++last_seed) {
CVertex &v = mesh.vert[last_seed];
if(v.IsD() || v.IsV() || v.IsB()) continue;
if(seed(true, i)) return 1;
printf("seeding new: %i\n", last_seed);
if(seed(true, last_seed)) return 1;
v.SetD();
--mesh.vn;
}
printf("done\n");
return -1;
}
if(last_seed > 1) printf("frontsixe: %d\n", front.size());
typename std::list<Edgex>::iterator ei = front.begin();
Edgex &e = *ei;
Edgex &previous = *e.previous;
@ -346,7 +362,7 @@ int addFace() {
(*up).v1 = v2;
(*up).face = fn;
(*up).center = center;
moveBack(ei);
moveBack(ei);
}
@ -500,7 +516,8 @@ int addFace() {
int tot = 0;
//HACK to speed up things until i can use a seach structure
int i = mesh.face.size() - 2*(front.size());
// i = 0;
if(front.size() < 100) i = mesh.face.size() - 100;
// i = 0;
if(i < 0) i = 0;
for(; i < mesh.face.size(); i++) {
CFace &f = mesh.face[i];