Fix interference check to not report not-2-manifold edges; those
can occur in assemblies with coincident faces. And turn on smooth shading, finally. [git-p4: depot-paths = "//depot/solvespace/": change = 1971]
This commit is contained in:
parent
213c21db87
commit
7a279c4e3f
|
@ -181,7 +181,7 @@ void glxFillMesh(int specColor, SMesh *m, DWORD h, DWORD s1, DWORD s2)
|
||||||
glBegin(GL_TRIANGLES);
|
glBegin(GL_TRIANGLES);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(1 || tr->an.EqualsExactly(Vector::From(0, 0, 0))) {
|
if(0 || tr->an.EqualsExactly(Vector::From(0, 0, 0))) {
|
||||||
// Compute the normal from the vertices
|
// Compute the normal from the vertices
|
||||||
Vector n = tr->Normal();
|
Vector n = tr->Normal();
|
||||||
glNormal3d(n.x, n.y, n.z);
|
glNormal3d(n.x, n.y, n.z);
|
||||||
|
|
7
mesh.cpp
7
mesh.cpp
|
@ -914,6 +914,13 @@ void SKdNode::MakeCertainEdgesInto(SEdgeList *sel, int how,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SELF_INTER_EDGES:
|
||||||
|
if(thisIntersects) {
|
||||||
|
sel->AddEdge(a, b);
|
||||||
|
if(inter) *inter = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case TURNING_EDGES:
|
case TURNING_EDGES:
|
||||||
if((tr->Normal().z < LENGTH_EPS) &&
|
if((tr->Normal().z < LENGTH_EPS) &&
|
||||||
(n == 1) &&
|
(n == 1) &&
|
||||||
|
|
|
@ -236,8 +236,9 @@ public:
|
||||||
bool *inter, bool *fwd,
|
bool *inter, bool *fwd,
|
||||||
DWORD *face);
|
DWORD *face);
|
||||||
static const int NAKED_OR_SELF_INTER_EDGES = 100;
|
static const int NAKED_OR_SELF_INTER_EDGES = 100;
|
||||||
static const int TURNING_EDGES = 200;
|
static const int SELF_INTER_EDGES = 200;
|
||||||
static const int EMPHASIZED_EDGES = 300;
|
static const int TURNING_EDGES = 300;
|
||||||
|
static const int EMPHASIZED_EDGES = 400;
|
||||||
void MakeCertainEdgesInto(SEdgeList *sel, int how, bool coplanarIsInter,
|
void MakeCertainEdgesInto(SEdgeList *sel, int how, bool coplanarIsInter,
|
||||||
bool *inter, bool *leaky);
|
bool *inter, bool *leaky);
|
||||||
|
|
||||||
|
|
|
@ -458,7 +458,7 @@ void SolveSpace::MenuAnalyze(int id) {
|
||||||
SKdNode *root = SKdNode::From(m);
|
SKdNode *root = SKdNode::From(m);
|
||||||
bool inters, leaks;
|
bool inters, leaks;
|
||||||
root->MakeCertainEdgesInto(&(SS.nakedEdges),
|
root->MakeCertainEdgesInto(&(SS.nakedEdges),
|
||||||
SKdNode::NAKED_OR_SELF_INTER_EDGES, false, &inters, &leaks);
|
SKdNode::SELF_INTER_EDGES, false, &inters, &leaks);
|
||||||
|
|
||||||
InvalidateGraphics();
|
InvalidateGraphics();
|
||||||
|
|
||||||
|
@ -466,10 +466,6 @@ void SolveSpace::MenuAnalyze(int id) {
|
||||||
Error("%d edges interfere with other triangles, bad.",
|
Error("%d edges interfere with other triangles, bad.",
|
||||||
SS.nakedEdges.l.n);
|
SS.nakedEdges.l.n);
|
||||||
} else {
|
} else {
|
||||||
// MakeCertainEdgesInto also reports "naked" edges, which
|
|
||||||
// will include some types of coincident geometry that are
|
|
||||||
// not errors.
|
|
||||||
SS.nakedEdges.Clear();
|
|
||||||
Message("The assembly does not interfere, good.");
|
Message("The assembly does not interfere, good.");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user