PAL7722. Add IsReversedInChain(). In BuildPropagationChain(), chains of edges with propagated hypothesis are filled taking into account edges orientation

This commit is contained in:
eap 2005-01-21 14:11:17 +00:00
parent d9ce7a48c1
commit dcab7b2d24
2 changed files with 32 additions and 5 deletions

View File

@ -964,6 +964,26 @@ bool SMESH_Mesh::IsPropagatedHypothesis (const TopoDS_Shape& theEdge,
return false;
}
//=============================================================================
/*!
* IsReversedInChain
*/
//=============================================================================
bool SMESH_Mesh::IsReversedInChain (const TopoDS_Shape& theEdge,
const TopoDS_Shape& theMainEdge)
{
if ( !theMainEdge.IsNull() && !theEdge.IsNull() &&
_mapPropagationChains.Contains( theMainEdge ))
{
const TopTools_IndexedMapOfShape& aChain =
_mapPropagationChains.FindFromKey( theMainEdge );
int index = aChain.FindIndex( theEdge );
if ( index )
return aChain(index).Orientation() == TopAbs_REVERSED;
}
return false;
}
//=============================================================================
/*!
@ -1075,7 +1095,7 @@ bool SMESH_Mesh::BuildPropagationChain (const TopoDS_Shape& theMainEdge)
// List of edges, added to chain on the previous cycle pass
TopTools_ListOfShape listPrevEdges;
listPrevEdges.Append(theMainEdge);
listPrevEdges.Append(theMainEdge.Oriented( TopAbs_FORWARD ));
// 5____4____3____4____5____6
// | | | | | |
@ -1122,9 +1142,6 @@ bool SMESH_Mesh::BuildPropagationChain (const TopoDS_Shape& theMainEdge)
if (!_mapAncestors.Contains(anEdges(nb))) {
MESSAGE("WIRE EXPLORER HAVE GIVEN AN INVALID EDGE !!!");
break;
} else {
int ind = _mapAncestors.FindIndex(anEdges(nb));
anEdges(nb) = _mapAncestors.FindKey(ind);
}
if (anEdges(nb).IsSame(anE)) found = nb;
}
@ -1145,7 +1162,12 @@ bool SMESH_Mesh::BuildPropagationChain (const TopoDS_Shape& theMainEdge)
aChain.Clear();
return false;
} else {
// Add found edge to the chain
// Add found edge to the chain oriented so that to
// have it in aChain co-directed with theMainEdge
TopAbs_Orientation ori = anE.Orientation();
if ( anEdges(opp).Orientation() == anEdges(found).Orientation() )
ori = TopAbs::Reverse( ori );
anOppE.Orientation( ori );
aChain.Add(anOppE);
listCurEdges.Append(anOppE);
}

View File

@ -196,6 +196,11 @@ public:
// Returns through <theMainEdge> the edge, from
// which the 1D hypothesis is propagated on <theEdge>
bool IsReversedInChain (const TopoDS_Shape& theEdge,
const TopoDS_Shape& theMainEdge);
// Returns true if theEdge should be reversed to be
// co-directed with theMainEdge
bool RebuildPropagationChains();
bool RemovePropagationChain (const TopoDS_Shape& theMainEdge);
bool BuildPropagationChain (const TopoDS_Shape& theMainEdge);