Salome HOME
52548: Set filter on standalone group of edges does't work
authoreap <eap@opencascade.com>
Thu, 23 Oct 2014 08:21:14 +0000 (12:21 +0400)
committereap <eap@opencascade.com>
Thu, 23 Oct 2014 08:21:14 +0000 (12:21 +0400)
2) Allow passing a geom group as faces arg of ViscousLayers()
3) Prevent crash of Adaptive hyp when only degenerated EDGEs leave not meshed

src/SMESH_I/SMESH_Filter_i.cxx
src/SMESH_SWIG/smesh_algorithm.py
src/StdMeshers/StdMeshers_Adaptive1D.cxx

index 0293f51..d0bb58c 100644 (file)
@@ -3020,7 +3020,8 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria
 
   SMESH::Predicate_ptr aPrevPredicate = SMESH::Predicate::_nil();
   int aPrevBinary = SMESH::FT_Undefined;
-  aBinaries.back() = SMESH::FT_Undefined;
+  if ( !aBinaries.empty() )
+    aBinaries.back() = SMESH::FT_Undefined;
 
   for ( aPredIter = aPredicates.begin(), aBinaryIter = aBinaries.begin();
         aPredIter != aPredicates.end() && aBinaryIter != aBinaries.end();
index 46f2270..8ce382e 100644 (file)
@@ -274,7 +274,14 @@ class Mesh_Algorithm:
         if not "ViscousLayers" in self.GetCompatibleHypothesis():
             raise TypeError, "ViscousLayers are not supported by %s"%self.algo.GetName()
         if faces and isinstance( faces[0], geomBuilder.GEOM._objref_GEOM_Object ):
-            faces = [ self.mesh.geompyD.GetSubShapeID(self.mesh.geom, f) for f in faces ]
+            import GEOM
+            faceIDs = []
+            for f in faces:
+                if self.mesh.geompyD.ShapeIdToType( f.GetType() ) == "GROUP":
+                    faceIDs += f.GetSubShapeIndices()
+                else:
+                    faceIDs += [self.mesh.geompyD.GetSubShapeID(self.mesh.geom, f)]
+            faces = faceIDs
         hyp = self.Hypothesis("ViscousLayers",
                               [thickness, numberOfLayers, stretchFactor, faces, isFacesToIgnore],
                               toAdd=False)
index 62a2cf5..7bcfca7 100644 (file)
@@ -1179,6 +1179,7 @@ bool AdaptiveAlgo::Compute(SMESH_Mesh &         theMesh,
       eData.AddPoint( eData.myPoints.end(), eData.myC3d.LastParameter() );
     }
   }
+  if ( myEdges.empty() ) return true;
   if ( _computeCanceled ) return false;
 
   // Take into account size of already existing segments