Salome HOME
projects
/
modules
/
smesh.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
IPAL52444: Viscous Layers and Projection fail
[modules/smesh.git]
/
src
/
StdMeshers
/
StdMeshers_ProjectionUtils.cxx
diff --git
a/src/StdMeshers/StdMeshers_ProjectionUtils.cxx
b/src/StdMeshers/StdMeshers_ProjectionUtils.cxx
index 6079b0c5442464b005b1fcbf884f3da8e774b355..9739fcb3e878159389a4dc4df2378ef259cdfa67 100644
(file)
--- a/
src/StdMeshers/StdMeshers_ProjectionUtils.cxx
+++ b/
src/StdMeshers/StdMeshers_ProjectionUtils.cxx
@@
-529,6
+529,8
@@
bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the
TShapePairsList::iterator s1_s2 = shapesQueue.begin();
for ( ; s1_s2 != shapesQueue.end(); ++s1_s2 )
{
TShapePairsList::iterator s1_s2 = shapesQueue.begin();
for ( ; s1_s2 != shapesQueue.end(); ++s1_s2 )
{
+ if ( theMap.IsBound( s1_s2->first )) // avoid re-binding for a seam edge
+ continue; // to avoid this: Forward seam -> Reversed seam
InsertAssociation( s1_s2->first, s1_s2->second, theMap );
TopoDS_Iterator s1It( s1_s2->first), s2It( s1_s2->second );
for ( ; s1It.More(); s1It.Next(), s2It.Next() )
InsertAssociation( s1_s2->first, s1_s2->second, theMap );
TopoDS_Iterator s1It( s1_s2->first), s2It( s1_s2->second );
for ( ; s1It.More(); s1It.Next(), s2It.Next() )
@@
-1169,9
+1171,13
@@
bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the
RETURN_BAD_RESULT("Different nb of vertices");
}
RETURN_BAD_RESULT("Different nb of vertices");
}
- if ( vMap1.Extent() == 1 ) {
+ if ( vMap1.Extent() == 1
|| vMap2.Extent() == 1
) {
InsertAssociation( vMap1(1), vMap2(1), theMap );
if ( theShape1.ShapeType() == TopAbs_EDGE ) {
InsertAssociation( vMap1(1), vMap2(1), theMap );
if ( theShape1.ShapeType() == TopAbs_EDGE ) {
+ if ( vMap1.Extent() == 2 )
+ InsertAssociation( vMap1(2), vMap2(1), theMap );
+ else if ( vMap2.Extent() == 2 )
+ InsertAssociation( vMap2(2), vMap1(1), theMap );
InsertAssociation( theShape1, theShape2, theMap );
return true;
}
InsertAssociation( theShape1, theShape2, theMap );
return true;
}
@@
-1796,7
+1802,8
@@
FindMatchingNodesOnFaces( const TopoDS_Face& face1,
eE.Next();
// edge 1
if ( !assocMap.IsBound( e2, /*is2nd=*/true ))
eE.Next();
// edge 1
if ( !assocMap.IsBound( e2, /*is2nd=*/true ))
- RETURN_BAD_RESULT("Association not found for edge " << meshDS2->ShapeToIndex( e2 ));
+ continue;
+ //RETURN_BAD_RESULT("Association not found for edge " << meshDS2->ShapeToIndex( e2 ));
TopoDS_Edge e1 = TopoDS::Edge( assocMap( e2, /*is2nd=*/true ));
if ( !helper1.IsSubShape( e1, face1 ))
RETURN_BAD_RESULT("Wrong association, edge " << meshDS1->ShapeToIndex( e1 ) <<
TopoDS_Edge e1 = TopoDS::Edge( assocMap( e2, /*is2nd=*/true ));
if ( !helper1.IsSubShape( e1, face1 ))
RETURN_BAD_RESULT("Wrong association, edge " << meshDS1->ShapeToIndex( e1 ) <<
@@
-1840,7
+1847,11
@@
FindMatchingNodesOnFaces( const TopoDS_Face& face1,
// get 2 matching vertices
TopoDS_Vertex V2 = TopExp::FirstVertex( TopoDS::Edge( edge2 ));
if ( !assocMap.IsBound( V2, /*is2nd=*/true ))
// get 2 matching vertices
TopoDS_Vertex V2 = TopExp::FirstVertex( TopoDS::Edge( edge2 ));
if ( !assocMap.IsBound( V2, /*is2nd=*/true ))
- RETURN_BAD_RESULT("Association not found for vertex " << meshDS2->ShapeToIndex( V2 ));
+ {
+ V2 = TopExp::LastVertex( TopoDS::Edge( edge2 ));
+ if ( !assocMap.IsBound( V2, /*is2nd=*/true ))
+ RETURN_BAD_RESULT("Association not found for vertex " << meshDS2->ShapeToIndex( V2 ));
+ }
TopoDS_Vertex V1 = TopoDS::Vertex( assocMap( V2, /*is2nd=*/true ));
// nodes on vertices
TopoDS_Vertex V1 = TopoDS::Vertex( assocMap( V2, /*is2nd=*/true ));
// nodes on vertices