Salome HOME
d9e1f97d9431a6ca63509bb465fe4d45310abb0a
[modules/smesh.git] / doc / salome / examples / modifying_meshes_ex22.py
1 # Extrusion
2
3
4 import salome, math
5 salome.salome_init()
6 from salome.geom import geomBuilder
7 geompy = geomBuilder.New()
8
9 import SMESH
10 from salome.smesh import smeshBuilder
11 smesh =  smeshBuilder.New()
12
13 # create an empty mesh
14 mesh = smesh.Mesh() 
15
16 # add a node
17 mesh.AddNode( 0.,0.,0. )
18
19 # extrude a node into a line of 10 segments along the X axis
20 ids = mesh.GetNodesId()
21 stepVector = [1.,0.,0.]
22 nbSteps = 10
23 mesh.ExtrusionSweep( ids, stepVector, nbSteps, IsNodes=True )
24
25 # create some groups
26 lastNode      = mesh.GetNodesId()[-1]
27 lastNodeGroup = mesh.MakeGroupByIds( "node %s"% lastNode, SMESH.NODE, [lastNode])
28 lineGroup     = mesh.MakeGroupByIds( "line", SMESH.EDGE, mesh.GetElementsId() )
29
30 # rotate the segments around the first node to get a mesh of a disk quarter
31 axisZ  = [0.,0.,0., 0.,0.,1.]
32 groups = mesh.RotationSweepObject( lineGroup, axisZ, math.pi/2., 10, 1e-3, MakeGroups=True, TotalAngle=True )
33
34 # extrude all faces into volumes
35 obj        = mesh
36 stepVector = [0.,0.,-1.]
37 nbSteps    = 5
38 groups = mesh.ExtrusionSweepObject2D( obj, stepVector, nbSteps, MakeGroups=True )
39
40 # remove all segments created by the last command
41 for g in groups:
42     if g.GetType() == SMESH.EDGE:
43         mesh.RemoveGroupWithContents( g )
44
45 # extrude all segments into faces along Z
46 obj = mesh
47 stepVector = [0.,0.,1.]
48 mesh.ExtrusionSweepObject1D( obj, stepVector, nbSteps )
49
50 # extrude a group
51 lineExtruded = None
52 for g in mesh.GetGroups( SMESH.FACE ):
53     if g.GetName() == "line_extruded":
54         lineExtruded = g
55         break
56 obj        = lineExtruded
57 stepVector = [0,-5.,0.]
58 nbSteps    = 1
59 mesh.ExtrusionSweepObject( obj, stepVector, nbSteps )
60
61 # extrude all nodes and triangle faces of the disk quarter, applying a scale factor
62 diskGroup = None
63 for g in mesh.GetGroups( SMESH.FACE ):
64     if g.GetName() == "line_rotated":
65         diskGroup = g
66         break
67 crit = [ smesh.GetCriterion( SMESH.FACE, SMESH.FT_ElemGeomType,'=',SMESH.Geom_TRIANGLE ),
68          smesh.GetCriterion( SMESH.FACE, SMESH.FT_BelongToMeshGroup,'=', diskGroup )]
69 trianglesFilter = smesh.GetFilterFromCriteria( crit )
70
71 nodes      = [ diskGroup ]
72 edges      = []
73 faces      = [ trianglesFilter ]
74 stepVector = [0,0,1]
75 nbSteps    = 10
76 mesh.ExtrusionSweepObjects( nodes, edges, faces, stepVector, nbSteps, scaleFactors=[0.5], linearVariation=True )
77
78 # extrude a cylindrical group of faces by normal
79 cylGroup = None
80 for g in mesh.GetGroups( SMESH.FACE ):
81     if g.GetName().startswith("node "):
82         cylGroup = g
83         break
84
85 elements = cylGroup
86 stepSize = 5.
87 nbSteps  = 2
88 mesh.ExtrusionByNormal( elements, stepSize, nbSteps )
89
90 salome.sg.updateObjBrowser()