Salome HOME
0020594: EDF 1166 SMESH: Creation of a group of elements from a compound in TUI
authoreap <eap@opencascade.com>
Fri, 20 Nov 2009 13:03:18 +0000 (13:03 +0000)
committereap <eap@opencascade.com>
Fri, 20 Nov 2009 13:03:18 +0000 (13:03 +0000)
   fix GroupOnGeom() for the case of a compound which is not a GEOM group.

src/SMESH_SWIG/smeshDC.py

index 484b68682f85a8b4cfcacdd4ddb5933289c06e6e..4789415c96b2ac875e48a97c99d1d6f60d907771 100644 (file)
@@ -1393,19 +1393,37 @@ class Mesh:
             elif tgeo == "SHELL":
                 typ = VOLUME
             elif tgeo == "COMPOUND":
-                if len( self.geompyD.GetObjectIDs( grp )) == 0:
-                    print "Mesh.Group: empty geometric group", GetName( grp )
-                    return 0
-                tgeo = self.geompyD.GetType(grp)
-                if tgeo == geompyDC.ShapeType["VERTEX"]:
-                    typ = NODE
-                elif tgeo == geompyDC.ShapeType["EDGE"]:
-                    typ = EDGE
-                elif tgeo == geompyDC.ShapeType["FACE"]:
-                    typ = FACE
-                elif tgeo == geompyDC.ShapeType["SOLID"]:
-                    typ = VOLUME
-
+                try: # it raises on a compound of compounds
+                    if len( self.geompyD.GetObjectIDs( grp )) == 0:
+                        print "Mesh.Group: empty geometric group", GetName( grp )
+                        return 0
+                    pass
+                except:
+                    pass
+                if grp.GetType() == 37: # GEOMImpl_Types.hxx: #define GEOM_GROUP 37
+                    # group
+                    tgeo = self.geompyD.GetType(grp)
+                    if tgeo == geompyDC.ShapeType["VERTEX"]:
+                        typ = NODE
+                    elif tgeo == geompyDC.ShapeType["EDGE"]:
+                        typ = EDGE
+                    elif tgeo == geompyDC.ShapeType["FACE"]:
+                        typ = FACE
+                    elif tgeo == geompyDC.ShapeType["SOLID"]:
+                        typ = VOLUME
+                        pass
+                    pass
+                else:
+                    # just a compound
+                    for elemType, shapeType in [[VOLUME,"SOLID"],[FACE,"FACE"],
+                                                [EDGE,"EDGE"],[NODE,"VERTEX"]]:
+                        if self.geompyD.SubShapeAll(grp,geompyDC.ShapeType[shapeType]):
+                            typ = elemType
+                            break
+                        pass
+                    pass
+                pass
+            pass
         if typ == None:
             print "Mesh.Group: bad first argument: expected a group, a vertex, an edge, a face or a solid"
             return 0