Salome HOME
PR: tools for crack meshing : when building pyramids on complex shapes, orientation...
[modules/smesh.git] / src / StdMeshers / StdMeshers_Projection_1D2D.cxx
index 15c15dfa79efbf5460d3c617ce5c3d5afdaec662..7e5cfe82181ca4f87276f0a52dc5fe1165b5a2b7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -27,6 +27,7 @@
 
 #include "SMESH_Gen.hxx"
 #include "SMESH_MesherHelper.hxx"
+#include "SMESH_subMesh.hxx"
 #include "SMESH_subMeshEventListener.hxx"
 #include "StdMeshers_FaceSide.hxx"
 #include "StdMeshers_ProjectionSource2D.hxx"
@@ -143,7 +144,7 @@ bool StdMeshers_Projection_1D2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape
         return error("The existing 1D mesh mismatches the generated 2D mesh");
     }
 
-    const bool checkExisting = wires[ iWire ]->NbSegments();
+    const bool checkExisting = ( wires[ iWire ]->NbSegments() || helper.HasSeam() );
 
     if ( _quadraticMesh )
     {
@@ -196,7 +197,7 @@ bool StdMeshers_Projection_1D2D::Evaluate(SMESH_Mesh&         theMesh,
 
   typedef StdMeshers_ProjectionUtils SPU;
   SPU::TShapeShapeMap shape2ShapeMap;
-  SPU::InitVertexAssociation( _sourceHypo, shape2ShapeMap, theShape );
+  SPU::InitVertexAssociation( _sourceHypo, shape2ShapeMap );
   if ( !SPU::FindSubShapeAssociation( theShape, &theMesh, srcFace, srcMesh, shape2ShapeMap))
     return error(COMPERR_BAD_SHAPE,"Topology of source and target faces seems different" );
 
@@ -232,7 +233,7 @@ bool StdMeshers_Projection_1D2D::Evaluate(SMESH_Mesh&         theMesh,
         if ( aVec.empty() )
           return error(COMPERR_BAD_INPUT_MESH,"Source mesh is wrongly evaluated");
       }
-      TopoDS_Shape tgtEdge = shape2ShapeMap( srcSM->GetSubShape() );
+      TopoDS_Shape tgtEdge = shape2ShapeMap( srcSM->GetSubShape(), /*isSrc=*/true  );
       SMESH_subMesh* tgtSM = theMesh.GetSubMesh( tgtEdge );
       aResMap.insert(std::make_pair(tgtSM,aVec));
     }