Salome HOME
IPAL54157: Empty bounding box of a non-empty mesh
[modules/smesh.git] / src / SMESH_I / SMESH_2smeshpy.cxx
index e76d1b34348c834654574b015197fd239b7fbb3b..b22af73ebdb34d756c8a7364e697759a19b80f68 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2019  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
@@ -296,6 +296,8 @@ namespace {
     //   - FT_NodeConnectivityNumber= 22
     // v 8.5.0: FT_Undefined == 49, new items:
     //   - FT_Deflection2D          = 22
+    // v 9.3.0: FT_Undefined == 50, new items:
+    //   - FT_Length3D              = 22
     //
     // It's necessary to continue recording this history and to fill
     // undef2newItems (see below) accordingly.
@@ -319,6 +321,7 @@ namespace {
       undef2newItems[ 47 ].push_back( 22 );
       undef2newItems[ 48 ].push_back( 22 );
       undef2newItems[ 49 ].push_back( 22 );
+      undef2newItems[ 50 ].push_back( 22 );
 
       ASSERT( undef2newItems.rbegin()->first == SMESH::FT_Undefined );
     }
@@ -1095,9 +1098,21 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
   // Concatenate( [mesh1, ...], ... )
   else if ( method == "Concatenate" || method == "ConcatenateWithGroups")
   {
+    // OLD IDL: ( meshes, uniteGroups, toMerge, tol )
+    // IDL: ( meshes, uniteGroups, toMerge, tol, meshToAppendTo )
+    // PY:  ( meshes, uniteGroups, toMerge, tol, allGroups=False, name="", meshToAppendTo=None )
+    _pyID appendMesh = theCommand->GetArg( 5 );
     if ( method == "ConcatenateWithGroups" ) {
       theCommand->SetMethod( "Concatenate" );
-      theCommand->SetArg( theCommand->GetNbArgs() + 1, "True" );
+      theCommand->SetArg( 5, "True" );
+    }
+    else {
+      theCommand->SetArg( 5, "False" );
+    }
+    if ( !appendMesh.IsEmpty() && appendMesh != "None" )
+    {
+      appendMesh.Insert( 1, "meshToAppendTo=" );
+      theCommand->SetArg( theCommand->GetNbArgs() + 1, appendMesh );
     }
     Handle(_pyMesh) mesh = new _pyMesh( theCommand, theCommand->GetResultValue() );
     AddObject( mesh );
@@ -1956,7 +1971,7 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
       if ( !obj->CanClear() )
         allGroupsRemoved = false;
     }
-    if ( nbGroupsBefore == myGroups.size() ) // no new _pyGroup created
+    if ( nbGroupsBefore == myGroups.size() && !obj.IsNull() ) // no new _pyGroup created
       obj->AddProcessedCmd( theCommand ); // to clear theCommand if all groups are removed
 
     if ( !allGroupsRemoved && !theGen->IsToKeepAllCommands() )
@@ -2216,7 +2231,7 @@ void _pyMesh::Flush()
   list < Handle(_pyCommand) >::iterator cmd;
 
   // try to convert algo addition like this:
-  // mesh.AddHypothesis(geom, ALGO ) --> ALGO = mesh.Algo()
+  // mesh.AddHypothesis( geom, ALGO ) --> ALGO = mesh.Algo()
   for ( cmd = myAddHypCmds.begin(); cmd != myAddHypCmds.end(); ++cmd )
   {
     Handle(_pyCommand) addCmd = *cmd;
@@ -3815,6 +3830,8 @@ bool _pyCommand::IsMethodCall()
 {
   if ( GetMethod().IsEmpty() )
     return false;
+  if ( myString.StartsWith("#") )
+    return false;
   const char* s = myString.ToCString() + GetBegPos( METHOD_IND ) + myMeth.Length() - 1;
   return ( s[0] == '(' || s[1] == '(' );
 }
@@ -5043,40 +5060,33 @@ bool _pyStringFamily::Add( const char* str )
   const int minPrefixSize = 4;
 
   // count "smaller" strings with the same prefix
-  std::list< _AString >::iterator itLess = itStr; --itLess;
   int nbLess = 0;
-  for ( ; itLess != _strings.end(); --itLess )
+  std::list< _AString >::iterator itLess = itStr;
+  while ( itLess != _strings.begin() )
+  {
+    --itLess;
     if ( strncmp( str, itLess->ToCString(), minPrefixSize ) == 0 )
       ++nbLess;
     else
+    {
+      ++itLess;
       break;
-  ++itLess;
+    }
+  }
+  // itLess points to the 1st string with same prefix
+
   // count "greater" strings with the same prefix
-  std::list< _AString >::iterator itMore = itStr;
   int nbMore = 0;
+  std::list< _AString >::iterator itMore = itStr;
   for ( ; itMore != _strings.end(); ++itMore )
     if ( strncmp( str, itMore->ToCString(), minPrefixSize ) == 0 )
       ++nbMore;
     else
       break;
-  --itMore;
+  // itMore points to the 1st string with greater prefix
+
   if ( nbLess + nbMore > 1 ) // ------- ADD a NEW CHILD FAMILY -------------
   {
-    // look for a maximal prefix length
-    // int lessPrefSize = 3, morePrefSize = 3;
-    // if ( nbLess > 0 )
-    //   while( itLess->ToCString()[ lessPrefSize ] == str[ lessPrefSize ]  )
-    //     ++lessPrefSize;
-    // if ( nbMore > 0 )
-    //   while ( itMore->ToCString()[ morePrefSize ] == str[ morePrefSize ] )
-    //     ++morePrefSize;
-    // int prefixSize = 3;
-    // if ( nbLess == 0 )
-    //   prefixSize = morePrefSize;
-    // else if ( nbMore == 0 )
-    //   prefixSize = lessPrefSize;
-    // else
-    //   prefixSize = Min( lessPrefSize, morePrefSize );
     int prefixSize = minPrefixSize;
     _AString newPrefix ( str, prefixSize );
 
@@ -5097,7 +5107,7 @@ bool _pyStringFamily::Add( const char* str )
     for ( ; nbMore > 0; --nbMore, ++itStr )
       newSubFam._strings.push_back( itStr->ToCString() + prefixSize );
 
-    _strings.erase( itLess, ++itMore );
+    _strings.erase( itLess, itMore );
   }
   else // too few string to make a family for them
   {