From dcab7b2d24224d2d956107e0b8e5a8d8ecdcbea1 Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 21 Jan 2005 14:11:17 +0000 Subject: [PATCH] PAL7722. Add IsReversedInChain(). In BuildPropagationChain(), chains of edges with propagated hypothesis are filled taking into account edges orientation --- src/SMESH/SMESH_Mesh.cxx | 32 +++++++++++++++++++++++++++----- src/SMESH/SMESH_Mesh.hxx | 5 +++++ 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index a778699e1..ef500ac8e 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -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); } diff --git a/src/SMESH/SMESH_Mesh.hxx b/src/SMESH/SMESH_Mesh.hxx index 0ddd8398b..a28a67ea5 100644 --- a/src/SMESH/SMESH_Mesh.hxx +++ b/src/SMESH/SMESH_Mesh.hxx @@ -196,6 +196,11 @@ public: // Returns through the edge, from // which the 1D hypothesis is propagated on + 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); -- 2.39.2