revert out bad 'fix'

This commit is contained in:
David Rose 2001-11-17 04:08:49 +00:00
parent f26230de05
commit 9bc9b4bd5f
1 changed files with 29 additions and 39 deletions

View File

@ -500,17 +500,9 @@ find_fans() {
Verts::iterator vi;
// Build up several lists of far fan edges.
typedef pvector<FanMaker> FanMakers;
typedef pvector<FanMakers> FanGroups;
FanGroups fan_groups;
for (vi = _verts.begin(); vi != _verts.end(); ++vi) {
EdgePtrs &edges = (*vi).second;
fan_groups.push_back(FanMakers());
FanMakers &fans = fan_groups.back();
// 14 is the magic number of edges. 12 edges or fewer are likely
// to be found on nearly every vertex in a quadsheet (six edges
// times two, one each way). We don't want to waste time fanning
@ -520,6 +512,11 @@ find_fans() {
if (edges.size() > 6) {
const Vertex &v = (*vi).first;
// Build up a list of far fan edges.
typedef pvector<FanMaker> FanMakers;
FanMakers fans;
EdgePtrs::iterator ei;
Edge::Strips::iterator si;
for (ei = edges.begin(); ei != edges.end(); ++ei) {
@ -532,41 +529,34 @@ find_fans() {
}
}
}
}
// Sort the fans list by edge pointers, and remove duplicates.
sort(fans.begin(), fans.end());
fans.erase(unique(fans.begin(), fans.end()), fans.end());
FanMakers::iterator fi, fi2;
// Now pull out connected edges.
int joined_any;
do {
joined_any = false;
for (fi = fans.begin(); fi != fans.end(); ++fi) {
if (!(*fi).is_empty()) {
fi2 = fi;
for (++fi2; fi2 != fans.end(); ++fi2) {
if (!(*fi2).is_empty()) {
joined_any = (*fi).join(*fi2);
// Sort the fans list by edge pointers, and remove duplicates.
sort(fans.begin(), fans.end());
fans.erase(unique(fans.begin(), fans.end()),
fans.end());
FanMakers::iterator fi, fi2;
// Now pull out connected edges.
int joined_any;
do {
joined_any = false;
for (fi = fans.begin(); fi != fans.end(); ++fi) {
if (!(*fi).is_empty()) {
fi2 = fi;
for (++fi2; fi2 != fans.end(); ++fi2) {
if (!(*fi2).is_empty()) {
joined_any = (*fi).join(*fi2);
}
}
}
}
}
} while (joined_any);
}
} while (joined_any);
// Now try to make all the fans. We do this after we have gone
// completely through the list of vertices, above, since making fans
// may add more (false) triangles to the pool.
FanGroups::iterator gi;
for (gi = fan_groups.begin(); gi != fan_groups.end(); ++gi) {
FanMakers &fans = (*gi);
FanMakers::iterator fi;
for (fi = fans.begin(); fi != fans.end(); ++fi) {
if ((*fi).is_valid()) {
(*fi).build();
for (fi = fans.begin(); fi != fans.end(); ++fi) {
if ((*fi).is_valid()) {
(*fi).build();
}
}
}
}