smesh/doc/salome/examples/modifying_meshes_ex22.py

91 lines
2.6 KiB
Python
Raw Normal View History

2013-02-12 20:37:44 +06:00
# Extrusion
import salome, math
salome.salome_init()
from salome.geom import geomBuilder
2017-06-13 15:01:10 +05:00
geompy = geomBuilder.New()
import SMESH
from salome.smesh import smeshBuilder
2017-06-13 15:01:10 +05:00
smesh = smeshBuilder.New()
2013-02-12 20:37:44 +06:00
# create an empty mesh
mesh = smesh.Mesh()
2013-02-12 20:37:44 +06:00
# add a node
mesh.AddNode( 0.,0.,0. )
2013-02-12 20:37:44 +06:00
# extrude a node into a line of 10 segments along the X axis
ids = mesh.GetNodesId()
stepVector = [1.,0.,0.]
nbSteps = 10
mesh.ExtrusionSweep( ids, stepVector, nbSteps, IsNodes=True )
2013-02-12 20:37:44 +06:00
# create some groups
lastNode = mesh.GetNodesId()[-1]
lastNodeGroup = mesh.MakeGroupByIds( "node %s"% lastNode, SMESH.NODE, [lastNode])
lineGroup = mesh.MakeGroupByIds( "line", SMESH.EDGE, mesh.GetElementsId() )
2013-02-12 20:37:44 +06:00
# rotate the segments around the first node to get a mesh of a disk quarter
axisZ = [0.,0.,0., 0.,0.,1.]
groups = mesh.RotationSweepObject( lineGroup, axisZ, math.pi/2., 10, 1e-3, MakeGroups=True, TotalAngle=True )
2013-02-12 20:37:44 +06:00
# extrude all faces into volumes
obj = mesh
stepVector = [0.,0.,-1.]
nbSteps = 5
groups = mesh.ExtrusionSweepObject2D( obj, stepVector, nbSteps, MakeGroups=True )
# remove all segments created by the last command
for g in groups:
if g.GetType() == SMESH.EDGE:
mesh.RemoveGroupWithContents( g )
# extrude all segments into faces along Z
obj = mesh
stepVector = [0.,0.,1.]
mesh.ExtrusionSweepObject1D( obj, stepVector, nbSteps )
# extrude a group
lineExtruded = None
for g in mesh.GetGroups( SMESH.FACE ):
if g.GetName() == "line_extruded":
lineExtruded = g
break
obj = lineExtruded
stepVector = [0,-5.,0.]
nbSteps = 1
mesh.ExtrusionSweepObject( obj, stepVector, nbSteps )
# extrude all nodes and triangle faces of the disk quarter, applying a scale factor
diskGroup = None
for g in mesh.GetGroups( SMESH.FACE ):
if g.GetName() == "line_rotated":
diskGroup = g
break
crit = [ smesh.GetCriterion( SMESH.FACE, SMESH.FT_ElemGeomType,'=',SMESH.Geom_TRIANGLE ),
smesh.GetCriterion( SMESH.FACE, SMESH.FT_BelongToMeshGroup,'=', diskGroup )]
trianglesFilter = smesh.GetFilterFromCriteria( crit )
nodes = [ diskGroup ]
edges = []
faces = [ trianglesFilter ]
stepVector = [0,0,1]
nbSteps = 10
mesh.ExtrusionSweepObjects( nodes, edges, faces, stepVector, nbSteps, scaleFactors=[0.5], linearVariation=True )
# extrude a cylindrical group of faces by normal
cylGroup = None
for g in mesh.GetGroups( SMESH.FACE ):
if g.GetName().startswith("node "):
cylGroup = g
break
elements = cylGroup
stepSize = 5.
nbSteps = 2
mesh.ExtrusionByNormal( elements, stepSize, nbSteps )
2013-02-12 20:37:44 +06:00
2017-06-13 15:01:10 +05:00
salome.sg.updateObjBrowser()