Don't merge coincident surfaces when combining two shells as

"assemble". And don't show "naked" (not occuring in anti-parallel
pairs) edges when just testing for interference.

[git-p4: depot-paths = "//depot/solvespace/": change = 1967]
solver
Jonathan Westhues 2009-06-06 00:21:03 -08:00
parent 2d653eada8
commit 2f7a6bb61d
2 changed files with 14 additions and 3 deletions

View File

@ -168,7 +168,9 @@ void Group::GenerateShellAndMesh(void) {
GenerateForStepAndRepeat<SShell> GenerateForStepAndRepeat<SShell>
(prev, toStep, &runningShell, src->meshCombine); (prev, toStep, &runningShell, src->meshCombine);
runningShell.MergeCoincidentSurfaces(); if(meshCombine != COMBINE_AS_ASSEMBLE) {
runningShell.MergeCoincidentSurfaces();
}
} else { } else {
SMesh prevm, stepm; SMesh prevm, stepm;
ZERO(&prevm); ZERO(&prevm);
@ -288,7 +290,9 @@ void Group::GenerateShellAndMesh(void) {
thisShell.RemapFaces(this, 0); thisShell.RemapFaces(this, 0);
} }
thisShell.MergeCoincidentSurfaces(); if(meshCombine != COMBINE_AS_ASSEMBLE) {
thisShell.MergeCoincidentSurfaces();
}
// So now we've got the mesh or shell for this group. Combine it with // So now we've got the mesh or shell for this group. Combine it with
// the previous group's mesh or shell with the requested Boolean, and // the previous group's mesh or shell with the requested Boolean, and
@ -298,7 +302,10 @@ void Group::GenerateShellAndMesh(void) {
if(pg->runningMesh.IsEmpty() && thisMesh.IsEmpty() && !forceToMesh) { if(pg->runningMesh.IsEmpty() && thisMesh.IsEmpty() && !forceToMesh) {
SShell *prevs = &(pg->runningShell); SShell *prevs = &(pg->runningShell);
GenerateForBoolean<SShell>(prevs, &thisShell, &runningShell); GenerateForBoolean<SShell>(prevs, &thisShell, &runningShell);
runningShell.MergeCoincidentSurfaces();
if(meshCombine != COMBINE_AS_ASSEMBLE) {
runningShell.MergeCoincidentSurfaces();
}
// If the Boolean failed, then we should note that in the text screen // If the Boolean failed, then we should note that in the text screen
// for this group. // for this group.

View File

@ -466,6 +466,10 @@ 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;