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