Salome HOME
Fix regressions caused by improvements
authoreap <eap@opencascade.com>
Wed, 15 Jul 2015 14:05:14 +0000 (17:05 +0300)
committereap <eap@opencascade.com>
Wed, 15 Jul 2015 14:05:14 +0000 (17:05 +0300)
idl/SMESH_Mesh.idl
src/SMESH/SMESH_MeshEditor.cxx
src/SMESH_I/SMESH_MeshEditor_i.cxx
src/SMESH_I/SMESH_Mesh_i.cxx
src/SMESH_I/SMESH_Mesh_i.hxx
src/SMESH_SWIG/smeshBuilder.py
src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx

index 0805ce2359ca7ecc20624b5ee4b63818459745a4..fc8a2c6a55014409537926837968aea5a37e86eb 100644 (file)
@@ -776,7 +776,10 @@ module SMESH
     long NbBiQuadQuadrangles()
       raises (SALOME::SALOME_Exception);
 
     long NbBiQuadQuadrangles()
       raises (SALOME::SALOME_Exception);
 
-    long NbPolygons(in ElementOrder order)
+    long NbPolygons()
+      raises (SALOME::SALOME_Exception);
+
+    long NbPolygonsOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
     long NbVolumes()
       raises (SALOME::SALOME_Exception);
 
     long NbVolumes()
index 8ca7653e074993ef57d109244060b7abaae480ca..3094dd2f3ae37af22107b89228561f2002e5f99a 100644 (file)
@@ -5356,8 +5356,7 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
           SMDS_MeshCell::interlacedSmdsOrder( elem->GetEntityType(), nbn );
         SMDS_MeshCell::applyInterlaceRev( interlace, nodeVec );
 
           SMDS_MeshCell::interlacedSmdsOrder( elem->GetEntityType(), nbn );
         SMDS_MeshCell::applyInterlaceRev( interlace, nodeVec );
 
-        if ( const SMDS_MeshElement* face = AddElement( nodeVec, anyFace.Init( elem )))
-          myLastCreatedElems.Append( face );
+        AddElement( nodeVec, anyFace.Init( elem ));
 
         while ( srcElements.Length() < myLastCreatedElems.Length() )
           srcElements.Append( elem );
 
         while ( srcElements.Length() < myLastCreatedElems.Length() )
           srcElements.Append( elem );
@@ -12531,7 +12530,7 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
 
   typedef vector<const SMDS_MeshNode*> TConnectivity;
   TConnectivity tgtNodes;
 
   typedef vector<const SMDS_MeshNode*> TConnectivity;
   TConnectivity tgtNodes;
-  ElemFeatures elemKind( missType );
+  ElemFeatures elemKind( missType ), elemToCopy;
 
   SMDS_ElemIteratorPtr eIt;
   if (elements.empty()) eIt = aMesh->elementsIterator(elemType);
 
   SMDS_ElemIteratorPtr eIt;
   if (elements.empty()) eIt = aMesh->elementsIterator(elemType);
@@ -12566,9 +12565,9 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
           for ( int i = 0; i < nbFaceNodes; i += 1+iQuad)
           {
             for ( int j = 0; j < nodes.size(); ++j )
           for ( int i = 0; i < nbFaceNodes; i += 1+iQuad)
           {
             for ( int j = 0; j < nodes.size(); ++j )
-              nodes[j] =nn[i+j];
+              nodes[j] = nn[ i+j ];
             if ( const SMDS_MeshElement* edge =
             if ( const SMDS_MeshElement* edge =
-                 aMesh->FindElement(nodes,SMDSAbs_Edge,/*noMedium=*/false))
+                 aMesh->FindElement( nodes, SMDSAbs_Edge, /*noMedium=*/false ))
               presentBndElems.push_back( edge );
             else
               missingBndElems.push_back( nodes );
               presentBndElems.push_back( edge );
             else
               missingBndElems.push_back( nodes );
@@ -12703,7 +12702,7 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
         tgtNodes.resize( e->NbNodes() );
         for ( inode = 0; inode < nodes.size(); ++inode )
           tgtNodes[inode] = getNodeWithSameID( tgtMeshDS, e->GetNode(inode) );
         tgtNodes.resize( e->NbNodes() );
         for ( inode = 0; inode < nodes.size(); ++inode )
           tgtNodes[inode] = getNodeWithSameID( tgtMeshDS, e->GetNode(inode) );
-        presentEditor->AddElement( tgtNodes, elemKind.Init( e ));
+        presentEditor->AddElement( tgtNodes, elemToCopy.Init( e ));
       }
     else // store present elements to add them to a group
       for ( int i = 0 ; i < presentBndElems.size(); ++i )
       }
     else // store present elements to add them to a group
       for ( int i = 0 ; i < presentBndElems.size(); ++i )
@@ -12738,7 +12737,7 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
       tgtNodes.resize( elem->NbNodes() );
       for ( inode = 0; inode < tgtNodes.size(); ++inode )
         tgtNodes[inode] = getNodeWithSameID( tgtMeshDS, elem->GetNode(inode) );
       tgtNodes.resize( elem->NbNodes() );
       for ( inode = 0; inode < tgtNodes.size(); ++inode )
         tgtNodes[inode] = getNodeWithSameID( tgtMeshDS, elem->GetNode(inode) );
-      tgtEditor.AddElement( tgtNodes, elemKind.Init( elem ));
+      tgtEditor.AddElement( tgtNodes, elemToCopy.Init( elem ));
 
       tgtEditor.myLastCreatedElems.Clear();
     }
 
       tgtEditor.myLastCreatedElems.Clear();
     }
index 1c6f60200661b3dbf22012cd7ea917bd1f2bc510..a3fe510c7bcb36daeb31a80341f991a0b7ade58b 100644 (file)
@@ -6441,9 +6441,9 @@ CORBA::Long SMESH_MeshEditor_i::MakeBoundaryElements(SMESH::Bnd_Dimension dim,
     THROW_SALOME_CORBA_EXCEPTION("Invalid boundary dimension", SALOME::BAD_PARAM);
 
   // separate groups belonging to this and other mesh
     THROW_SALOME_CORBA_EXCEPTION("Invalid boundary dimension", SALOME::BAD_PARAM);
 
   // separate groups belonging to this and other mesh
-  SMESH::ListOfIDSources_var groupsOfThisMesh = new SMESH::ListOfIDSources;
+  SMESH::ListOfIDSources_var groupsOfThisMesh  = new SMESH::ListOfIDSources;
   SMESH::ListOfIDSources_var groupsOfOtherMesh = new SMESH::ListOfIDSources;
   SMESH::ListOfIDSources_var groupsOfOtherMesh = new SMESH::ListOfIDSources;
-  groupsOfThisMesh->length( groups.length() );
+  groupsOfThisMesh ->length( groups.length() );
   groupsOfOtherMesh->length( groups.length() );
   int nbGroups = 0, nbGroupsOfOtherMesh = 0;
   for ( int i = 0; i < groups.length(); ++i )
   groupsOfOtherMesh->length( groups.length() );
   int nbGroups = 0, nbGroupsOfOtherMesh = 0;
   for ( int i = 0; i < groups.length(); ++i )
index 060329f4c9c80e2753980654bb25a11481970d43..fed66cd85c7e8e477dc20064c3b66ffeee8e33f6 100644 (file)
@@ -3765,7 +3765,16 @@ CORBA::Long SMESH_Mesh_i::NbBiQuadQuadrangles()throw(SALOME::SALOME_Exception)
   return _impl->NbBiQuadQuadrangles();
 }
 
   return _impl->NbBiQuadQuadrangles();
 }
 
-CORBA::Long SMESH_Mesh_i::NbPolygons(SMESH::ElementOrder order) throw(SALOME::SALOME_Exception)
+CORBA::Long SMESH_Mesh_i::NbPolygons() throw(SALOME::SALOME_Exception)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+  if ( _preMeshInfo )
+    return _preMeshInfo->NbPolygons();
+
+  return _impl->NbPolygons();
+}
+
+CORBA::Long SMESH_Mesh_i::NbPolygonsOfOrder(SMESH::ElementOrder order) throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
index 24874a03a50b76ea55b2d2a54c5ce30d5a1afd12..2a67fd8a78815d20cf2a99bc68f6e15fb824267e 100644 (file)
@@ -315,7 +315,10 @@ public:
   CORBA::Long NbBiQuadQuadrangles()
     throw (SALOME::SALOME_Exception);
 
   CORBA::Long NbBiQuadQuadrangles()
     throw (SALOME::SALOME_Exception);
 
-  CORBA::Long NbPolygons(SMESH::ElementOrder order=SMESH::ORDER_ANY)
+  CORBA::Long NbPolygons()
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Long NbPolygonsOfOrder(SMESH::ElementOrder order=SMESH::ORDER_ANY)
     throw (SALOME::SALOME_Exception);
 
   CORBA::Long NbVolumes()
     throw (SALOME::SALOME_Exception);
 
   CORBA::Long NbVolumes()
index 63fb499c720183b6e2c69cd897aa6783c6188ab9..78495e6cc7a6ff7ee8edd6816b5042b21768cb89 100644 (file)
@@ -2359,7 +2359,7 @@ class Mesh:
     #  @return an integer value
     #  @ingroup l1_meshinfo
     def NbPolygons(self, elementOrder = SMESH.ORDER_ANY):
     #  @return an integer value
     #  @ingroup l1_meshinfo
     def NbPolygons(self, elementOrder = SMESH.ORDER_ANY):
-        return self.mesh.NbPolygons(elementOrder)
+        return self.mesh.NbPolygonsOfOrder(elementOrder)
 
     ## Returns the number of volumes in the mesh
     #  @return an integer value
 
     ## Returns the number of volumes in the mesh
     #  @return an integer value
@@ -4940,6 +4940,10 @@ class meshEditor(SMESH._objref_SMESH_MeshEditor):
         if len( args ) == 1:
             return SMESH._objref_SMESH_MeshEditor.FindCoincidentNodes( self, args[0], False )
         return SMESH._objref_SMESH_MeshEditor.FindCoincidentNodes( self, *args )
         if len( args ) == 1:
             return SMESH._objref_SMESH_MeshEditor.FindCoincidentNodes( self, args[0], False )
         return SMESH._objref_SMESH_MeshEditor.FindCoincidentNodes( self, *args )
+    def FindCoincidentNodesOnPart(self,*args): # a 3d arg added (SeparateCornerAndMediumNodes)
+        if len( args ) == 2:
+            args += False,
+        return SMESH._objref_SMESH_MeshEditor.FindCoincidentNodesOnPart( self, *args )
     def MergeNodes(self,*args): # a 2nd arg added (NodesToKeep)
         if len( args ) == 1:
             return SMESH._objref_SMESH_MeshEditor.MergeNodes( self, args[0], [] )
     def MergeNodes(self,*args): # a 2nd arg added (NodesToKeep)
         if len( args ) == 1:
             return SMESH._objref_SMESH_MeshEditor.MergeNodes( self, args[0], [] )
index 4c5269eb6b5e2985572654c677a32e811c7c76ea..f3b76232c4bf961d46ea3e5bba3aa0d2aeb836c2 100644 (file)
@@ -369,7 +369,7 @@ namespace
    */
   //================================================================================
 
    */
   //================================================================================
 
-  void getInternalEdges( SMESH_Mesh&                mesh,
+  bool getInternalEdges( SMESH_Mesh&                mesh,
                          const TopoDS_Shape&        shape,
                          const TopTools_MapOfShape& cornerVV,
                          TopTools_MapOfShape&       internEE)
                          const TopoDS_Shape&        shape,
                          const TopTools_MapOfShape& cornerVV,
                          TopTools_MapOfShape&       internEE)
@@ -436,11 +436,13 @@ namespace
           ridgeE = TopoDS::Edge( nextRidgeE );
           V0 = V1;
 
           ridgeE = TopoDS::Edge( nextRidgeE );
           V0 = V1;
 
+          if ( ridgeE.IsNull() )
+            return false;
         } // check EDGEs around the last VERTEX of ridgeE 
       } // loop on ridge EDGEs around a corner VERTEX
     } // loop on on corner VERTEXes
 
         } // check EDGEs around the last VERTEX of ridgeE 
       } // loop on ridge EDGEs around a corner VERTEX
     } // loop on on corner VERTEXes
 
-    return;
+    return true;
   } // getInternalEdges()
 } // namespace
 
   } // getInternalEdges()
 } // namespace
 
@@ -463,9 +465,10 @@ bool StdMeshers_CompositeHexa_3D::findBoxFaces( const TopoDS_Shape&    shape,
   TopTools_MapOfShape cornerVertices;
   getBlockCorners( mesh, shape, cornerVertices );
   if ( cornerVertices.Extent() != 8 )
   TopTools_MapOfShape cornerVertices;
   getBlockCorners( mesh, shape, cornerVertices );
   if ( cornerVertices.Extent() != 8 )
-    return false;
+    return error( COMPERR_BAD_INPUT_MESH, "Can't find 8 corners of a block" );
   TopTools_MapOfShape internalEdges;
   TopTools_MapOfShape internalEdges;
-  getInternalEdges( mesh, shape, cornerVertices, internalEdges );
+  if ( !getInternalEdges( mesh, shape, cornerVertices, internalEdges ))
+    return error( COMPERR_BAD_INPUT_MESH, "2D mesh is not suitable for i,j,k hexa meshing" );
 
   list< _QuadFaceGrid >::iterator boxFace;
   TopExp_Explorer exp;
 
   list< _QuadFaceGrid >::iterator boxFace;
   TopExp_Explorer exp;