# Grouping Elements

### Create a Standalone Group

import SMESH

import SMESH_mechanic

smesh = SMESH_mechanic.smesh

mesh = SMESH_mechanic.mesh

salome = SMESH_mechanic.salome

aFilterMgr = smesh.CreateFilterManager()

# Criterion : AREA > 100

aFunctor = aFilterMgr.CreateArea()

aPredicate = aFilterMgr.CreateMoreThan()

aPredicate.SetNumFunctor( aFunctor )

aPredicate.SetMargin( 100 )

aFilter = aFilterMgr.CreateFilter()

aFilter.SetPredicate( aPredicate )

anIds = aFilter.GetElementsId( mesh )

# print the result

print "Criterion: Area > 100 Nb = ", len( anIds )

for i in range( len( anIds ) ):

print anIds[ i ]

# create a group consisting of faces with area > 100

aGroup = mesh.CreateGroup( SMESH.FACE, "Area > 100" )

aGroup.Add( anIds )

salome.sg.updateObjBrowser(1)

### Create a Group on Geometry

import salome

import geompy

import SMESH

import StdMeshers

smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")

# create a box

box = geompy.MakeBox(0., 0., 0., 100., 100., 100.)

# add the box to the study

idbox = geompy.addToStudy(box, "box")

# add the first face of the box to the study

subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])

face = subShapeList[0]

name = geompy.SubShapeName(face, box)

idface = geompy.addToStudyInFather(box, face, name)

# create a hypothesis

numberOfSegments = 7

hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")

hypNbSeg.SetNumberOfSegments(numberOfSegments)

# create algorithms

regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")

quad2D = smesh.CreateHypothesis("Quadrangle_2D", "libStdMeshersEngine.so")

# initialize a mesh with the box

mesh = smesh.CreateMesh(box)

# add hypotheses and algorithms to the box

mesh.AddHypothesis(box,hypNbSeg)

mesh.AddHypothesis(box,regular1D)

mesh.AddHypothesis(box,quad2D)

# compute the mesh

ret = smesh.Compute(mesh,box)

if ret == 0:

print "probleme when computing the mesh"

else:

print "Computation succeded"

# create geometry groups on the face

aGeomGroup1 = geompy.CreateGroup(face, geompy.ShapeType["FACE"])

geompy.AddObject(aGeomGroup1, 1)

aGeomGroup2 = geompy.CreateGroup(face, geompy.ShapeType["EDGE"])

geompy.AddObject(aGeomGroup2, 3)

geompy.AddObject(aGeomGroup2, 6)

geompy.AddObject(aGeomGroup2, 8)

geompy.AddObject(aGeomGroup2, 10)

geompy.addToStudy(aGeomGroup1, "Group on Faces")

geompy.addToStudy(aGeomGroup2, "Group on Edges")

# create SMESH groups

aSmeshGroup1 = mesh.CreateGroupFromGEOM(SMESH.FACE, "SMESHGroup1",

aGeomGroup1)

aSmeshGroup2 = mesh.CreateGroupFromGEOM(SMESH.EDGE, "SMESHGroup2", aGeomGroup2)

salome.sg.updateObjBrowser(1)

### Edit a Group

import SMESH

import SMESH_mechanic

smesh = SMESH_mechanic.smesh

mesh = SMESH_mechanic.mesh

salome = SMESH_mechanic.salome

aFilterMgr = smesh.CreateFilterManager()

# Criterion : AREA > 20

aFunctor = aFilterMgr.CreateArea()

aPredicate = aFilterMgr.CreateMoreThan()

aPredicate.SetNumFunctor( aFunctor )

aPredicate.SetMargin( 30 )

aFilter = aFilterMgr.CreateFilter()

aFilter.SetPredicate( aPredicate )

anIds = aFilter.GetElementsId( mesh )

# create a group by adding elements with area > 20

aGroup = mesh.CreateGroup( SMESH.FACE, "Area > 20" )

aGroup.Add( anIds )

print "Criterion: Area > 20 Nb = ", len( anIds )

for i in range( len( anIds ) ):

print anIds[ i ]

# Criterion : AREA > 60

aFunctor = aFilterMgr.CreateArea()

aPredicate = aFilterMgr.CreateMoreThan()

aPredicate.SetNumFunctor( aFunctor )

aPredicate.SetMargin( 60 )

aFilter = aFilterMgr.CreateFilter()

aFilter.SetPredicate( aPredicate )

anIds = aFilter.GetElementsId( mesh )

# create a group of elements with area [20; 60] by removing elements with area > 60 from group aGroup

aGroup.Remove(anIds)

# print the result

aGroupElemIDs = aGroup.GetListOfID()

print "Criterion: 20 < Area < 60 = ", len( aGroupElemIDs )

for i in range( len( aGroupElemIDs ) ):

print aGroupElemIDs[ i ]

salome.sg.updateObjBrowser(1)

### Union of two groups

import SMESH

import SMESH_mechanic

smesh = SMESH_mechanic.smesh

mesh = SMESH_mechanic.mesh

salome = SMESH_mechanic.salome

aFilterMgr = smesh.CreateFilterManager()

# Criterion : AREA > 20

aFunctor = aFilterMgr.CreateArea()

aPredicate = aFilterMgr.CreateMoreThan()

aPredicate.SetNumFunctor( aFunctor )

aPredicate.SetMargin( 20 )

aFilter = aFilterMgr.CreateFilter()

aFilter.SetPredicate( aPredicate )

anIds = aFilter.GetElementsId( mesh )

# create a group by adding elements with area > 20

aGroup1 = mesh.CreateGroup( SMESH.FACE, "Area > 20" )

aGroup1.Add( anIds )

print "Criterion: Area > 20 Nb = ", len( anIds )

for i in range( len( anIds ) ):

print anIds[ i ]

# Criterion : AREA = 20

aFunctor = aFilterMgr.CreateArea()

aPredicate = aFilterMgr.CreateEqualTo()

aPredicate.SetNumFunctor( aFunctor )

aPredicate.SetMargin( 20 )

aFilter = aFilterMgr.CreateFilter()

aFilter.SetPredicate( aPredicate )

anIds = aFilter.GetElementsId( mesh )

# create a group by adding elements with area > 20

aGroup2 = mesh.CreateGroup( SMESH.FACE, "Area = 20" )

aGroup2.Add( anIds )

print "Criterion: Area = 20 Nb = ", len( anIds )

for i in range( len( anIds ) ):

print anIds[ i ]

# create union group : area >= 20

aGroup3 = mesh.UnionGroups(aGroup1, aGroup2, "Area >= 20")

print "Criterion: Area >= 20 Nb = ", len( aGroup3.GetListOfID() )

# Criterion : AREA < 20

aFunctor = aFilterMgr.CreateArea()

aPredicate = aFilterMgr.CreateLessThan()

aPredicate.SetNumFunctor( aFunctor )

aPredicate.SetMargin( 20 )

aFilter = aFilterMgr.CreateFilter()

aFilter.SetPredicate( aPredicate )

anIds = aFilter.GetElementsId( mesh )

# create a group by adding elements with area < 20

aGroup4 = mesh.CreateGroup( SMESH.FACE, "Area < 20" )

aGroup4.Add( anIds )

print "Criterion: Area < 20 Nb = ", len( anIds )

for i in range( len( anIds ) ):

print anIds[ i ]

# create union group : area >= 20 and area < 20

aGroup5 = mesh.UnionGroups(aGroup3, aGroup4, "Any Area")

print "Criterion: Any Area Nb = ", len( aGroup5.GetListOfID() )

salome.sg.updateObjBrowser(1)

### Intersection of two groups

import SMESH

import SMESH_mechanic

smesh = SMESH_mechanic.smesh

mesh = SMESH_mechanic.mesh

salome = SMESH_mechanic.salome

aFilterMgr = smesh.CreateFilterManager()

# Criterion : AREA > 20

aFunctor = aFilterMgr.CreateArea()

aPredicate = aFilterMgr.CreateMoreThan()

aPredicate.SetNumFunctor( aFunctor )

aPredicate.SetMargin( 20 )

aFilter = aFilterMgr.CreateFilter()

aFilter.SetPredicate( aPredicate )

anIds = aFilter.GetElementsId( mesh )

# create a group by adding elements with area > 20

aGroup1 = mesh.CreateGroup( SMESH.FACE, "Area > 20" )

aGroup1.Add( anIds )

print "Criterion: Area > 20 Nb = ", len( anIds )

for i in range( len( anIds ) ):

print anIds[ i ]

# Criterion : AREA < 60

aFunctor = aFilterMgr.CreateArea()

aPredicate = aFilterMgr.CreateLessThan()

aPredicate.SetNumFunctor( aFunctor )

aPredicate.SetMargin( 60 )

aFilter = aFilterMgr.CreateFilter()

aFilter.SetPredicate( aPredicate )

anIds = aFilter.GetElementsId( mesh )

# create a group by adding elements with area < 60

aGroup2 = mesh.CreateGroup( SMESH.FACE, "Area < 60" )

aGroup2.Add( anIds )

print "Criterion: Area < 60 Nb = ", len( anIds )

for i in range( len( anIds ) ):

print anIds[ i ]

# create an intersection of groups : 20 < area < 60

aGroup3 = mesh.IntersectGroups(aGroup1, aGroup2, "20 < Area < 60")

print "Criterion: 20 < Area < 60 Nb = ", len( aGroup3.GetListOfID() )

salome.sg.updateObjBrowser(1)

### Cut of two groups

import SMESH

import SMESH_mechanic

smesh = SMESH_mechanic.smesh

mesh = SMESH_mechanic.mesh

salome = SMESH_mechanic.salome

aFilterMgr = smesh.CreateFilterManager()

# Criterion : AREA > 20

aFunctor = aFilterMgr.CreateArea()

aPredicate = aFilterMgr.CreateMoreThan()

aPredicate.SetNumFunctor( aFunctor )

aPredicate.SetMargin( 20 )

aFilter = aFilterMgr.CreateFilter()

aFilter.SetPredicate( aPredicate )

anIds = aFilter.GetElementsId( mesh )

# create a group by adding elements with area > 20

aGroupMain = mesh.CreateGroup( SMESH.FACE, "Area > 20" )

aGroupMain.Add( anIds )

print "Criterion: Area > 20 Nb = ", len( anIds )

for i in range( len( anIds ) ):

print anIds[ i ]

# Criterion : AREA < 60

aFunctor = aFilterMgr.CreateArea()

aPredicate = aFilterMgr.CreateLessThan()

aPredicate.SetNumFunctor( aFunctor )

aPredicate.SetMargin( 60 )

aFilter = aFilterMgr.CreateFilter()

aFilter.SetPredicate( aPredicate )

anIds = aFilter.GetElementsId( mesh )

# create a group by adding elements with area < 60

aGroupTool = mesh.CreateGroup( SMESH.FACE, "Area < 60" )

aGroupTool.Add( anIds )

print "Criterion: Area < 60 Nb = ", len( anIds )

for i in range( len( anIds ) ):

print anIds[ i ]

# create an intersection of groups : area >= 60

aGroupRes = mesh.CutGroups(aGroupMain, aGroupTool, "Area >= 60")

print "Criterion: Area >= 60 Nb = ", len( aGroupRes.GetListOfID() )

salome.sg.updateObjBrowser(1)