Salome HOME
[GPUSPHGUI] fix errors relating to eCustomControl + offset
authoreap <eap@opencascade.com>
Wed, 7 Mar 2018 10:47:57 +0000 (13:47 +0300)
committereap <eap@opencascade.com>
Wed, 7 Mar 2018 10:47:57 +0000 (13:47 +0300)
+ Fix SMESH_Gen_i::Concatenate()

src/SMESHGUI/SMESHGUI.cxx
src/SMESHGUI/SMESHGUI_Selection.cxx
src/SMESHUtils/SMESH_Offset.cxx
src/SMESH_I/SMESH_Gen_i.cxx

index 54cd3a3..62582e0 100644 (file)
@@ -1700,7 +1700,9 @@ namespace
     ActionControl.Bind( SMESHOp::OpOverConstrainedVolume, SMESH_Actor::eOverConstrainedVolume );
     ActionControl.Bind( SMESHOp::OpEqualVolume,           SMESH_Actor::eCoincidentElems3D );
 
-    return theReversed ? ActionControl.Find2( theID ) : ActionControl.Find1( theID );
+    if ( theReversed )
+      return ActionControl.IsBound2( theID ) ? ActionControl.Find2( theID ) : 0;
+    return   ActionControl.IsBound1( theID ) ? ActionControl.Find1( theID ) : 0;
   }
 
   void Control( int theCommandID )
index 5eb6dba..8d8f46a 100644 (file)
@@ -389,6 +389,7 @@ QString SMESHGUI_Selection::controlMode( int ind ) const
     case SMESH_Actor::eCoincidentElems1D:     mode = "eCoincidentElems1D";     break;
     case SMESH_Actor::eCoincidentElems2D:     mode = "eCoincidentElems2D";     break;
     case SMESH_Actor::eCoincidentElems3D:     mode = "eCoincidentElems3D";     break;
+    case SMESH_Actor::eCustomControl:         mode = "eCustomControl";         break;
     default:break;
     }
   }
index f571535..efd648a 100644 (file)
@@ -40,7 +40,7 @@
 
 namespace
 {
-  const size_t theMaxNbFaces = 256; // max number of faces sharing a node
+  const int theMaxNbFaces = 256; // max number of faces sharing a node
 
   typedef NCollection_DataMap< Standard_Address, const SMDS_MeshNode* > TNNMap;
   typedef NCollection_Map< SMESH_Link, SMESH_Link >                     TLinkMap;
@@ -575,7 +575,7 @@ namespace
     TIDSortedElemSet elemSet, avoidSet;
     int iFace = 0;
     const SMDS_MeshElement* f;
-    for ( ; faceIt->more(); faceIt->next() )
+    for ( ; faceIt->more() && iFace < theMaxNbFaces; faceIt->next() )
     {
       avoidSet.insert( faces[ iFace ].myFace );
       f = SMESH_MeshAlgos::FindFaceInSet( theNewNode, faces[ iFace ].myNode2.Node(),
@@ -597,7 +597,7 @@ namespace
       faces[ iFace ].SetNodes( i0, i1 );
       faces[ iFace ].SetNormal( theFaceNormals );
     }
-    int nbFaces = Min( iFace + 1, (int)theMaxNbFaces );
+    int nbFaces = iFace + 1;
 
     theNewPos.SetCoord( 0, 0, 0 );
     gp_XYZ oldXYZ = SMESH_NodeXYZ( theNewNode );
@@ -682,9 +682,10 @@ namespace
           dot *= -1;
         if ( dot * theSign < 0 )
         {
-          gp_XYZ p1 = oldXYZ + faces[ i ].Norm()     * theOffset;
-          gp_XYZ p2 = oldXYZ + faces[ iPrev ].Norm() * theOffset;
-          useOneNormal = ( p1 - p2 ).SquareModulus() > theTol * theTol;
+          useOneNormal = true;
+          // gp_XYZ p1 = oldXYZ + faces[ i ].Norm()     * theOffset;
+          // gp_XYZ p2 = oldXYZ + faces[ iPrev ].Norm() * theOffset;
+          // useOneNormal = ( p1 - p2 ).SquareModulus() > theTol * theTol;
         }
       }
       if ( useOneNormal && theNewNode->isMarked() )
@@ -1393,7 +1394,8 @@ namespace
     for ( int is2nd = 0; is2nd < 2; ++is2nd )
     {
       const SMDS_MeshElement* f = is2nd ? myFace1 : myFace2;
-      const CutFace&         cf = myCutFaces.Added( CutFace( is2nd ? myFace2 : myFace1 ));
+      if ( !f ) continue;
+      const CutFace& cf = myCutFaces.Added( CutFace( is2nd ? myFace2 : myFace1 ));
       for ( size_t i = 0; i < cf.myLinks.size(); ++i )
         if ( cf.myLinks[i].myFace == f &&
              //cf.myLinks[i].myIndex != EdgePart::_COPLANAR &&
index e8cd0a3..bdaaa51 100644 (file)
@@ -2485,10 +2485,13 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray,
 
     // assure that IDs increments by one during iteration
     ::SMESH_Mesh& initLocMesh = initImpl->GetImpl();
-    SMESHDS_Mesh* initMeshDS = initLocMesh.GetMeshDS();
-    if ( initMeshDS->MaxNodeID()    != initMeshDS->NbNodes() ||
-         initMeshDS->MaxElementID() != initMeshDS->NbElements() )
+    SMESHDS_Mesh*  initMeshDS = initLocMesh.GetMeshDS();
+    if ( initMeshDS->MaxNodeID()    > initMeshDS->NbNodes() ||
+         initMeshDS->MaxElementID() > initMeshDS->NbElements() )
+    {
+      initMeshDS->Modified();
       initMeshDS->CompactMesh();
+    }
 
     // remember nb of elements before filling in
     SMESH::long_array_var prevState =  newMesh->GetNbElementsByType();