Salome HOME
[SALOME platform 0019943]: Pb with projection 2d
authoreap <eap@opencascade.com>
Tue, 2 Sep 2008 08:46:36 +0000 (08:46 +0000)
committereap <eap@opencascade.com>
Tue, 2 Sep 2008 08:46:36 +0000 (08:46 +0000)
     In SMESH_Pattern::Load(mesh,face), fix treating seam vertices of not seam edges

src/SMESH/SMESH_Pattern.cxx

index 342c4fe595faaaa00b5e9e29b2a605e4fb213a70..b8dd698a16b37967d1aed8058db657328be6416c 100644 (file)
@@ -631,12 +631,13 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
 
     // vertices
     for ( elIt = eList.begin(); elIt != eList.end(); elIt++ ) {
+      int nbV = myShapeIDMap.Extent();
       myShapeIDMap.Add( TopExp::FirstVertex( *elIt, true ));
-      if ( helper.IsSeamShape( *elIt ) ) {
-        // vertices present twice in the wire have two corresponding key points
-        const TopoDS_Vertex& lastV = TopExp::LastVertex( *elIt, true );
-        if ( helper.IsRealSeam( lastV ))
-          myShapeIDMap.Add( lastV );// vertex orienation is REVERSED
+      bool added = ( nbV < myShapeIDMap.Extent() );
+      if ( !added ) { // vertex encountered twice
+        // a seam vertex have two corresponding key points
+        myShapeIDMap.Add( TopExp::FirstVertex( *elIt, true ).Reversed());
+        ++nbNodes;
       }
       if ( SMESHDS_SubMesh * eSubMesh = aMeshDS->MeshElements( *elIt ))
         nbNodes += eSubMesh->NbNodes() + 1;
@@ -677,7 +678,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
         else { // on CLOSED edge (i.e. having one vertex with different orienations)
           for ( int is2 = 0; is2 < 2; ++is2 ) {
             TopoDS_Shape & v = is2 ? v2 : v1;
-            if ( helper.IsSeamShape( v ) ) {
+            if ( helper.IsRealSeam( v ) ) {
               // reverse or not depending on orientation of adjacent seam
               TopoDS_Edge seam;
               list<TopoDS_Edge>::iterator eIt2 = elIt;