At first see Example of 3d mesh generation, using smesh package.
Other examples of python scripts will be also updated soon to use smesh package instead of direct usage of idl interface.
Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use smesh package.
import salome
import geompy
import StdMeshers
smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
smeshgui = salome.ImportComponentGUI("SMESH")
smeshgui.Init(salome.myStudyId);
# create a box
box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
# add box to the study
idbox = geompy.addToStudy(box, "box")
# create a hypothesis
print "-------------------------- create Hypothesis"
print "-------------------------- NumberOfSegments"
numberOfSegments = 7
hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
hypNbSeg.SetNumberOfSegments(numberOfSegments)
print hypNbSeg.GetName()
print hypNbSeg.GetId()
print hypNbSeg.GetNumberOfSegments()
smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10")
print "-------------------------- MaxElementArea"
maxElementArea = 800
hypArea = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
hypArea.SetMaxElementArea(maxElementArea)
print hypArea.GetName()
print hypArea.GetId()
print hypArea.GetMaxElementArea()
smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_500")
print "-------------------------- MaxElementVolume"
maxElementVolume = 900
hypVolume = smesh.CreateHypothesis("MaxElementVolume", "libStdMeshersEngine.so")
hypVolume.SetMaxElementVolume(maxElementVolume)
print hypVolume.GetName()
print hypVolume.GetId()
print hypVolume.GetMaxElementVolume()
smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_500")
# create algorithms
print "-------------------------- create Algorithms"
print "-------------------------- Regular_1D"
regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation")
print "-------------------------- MEFISTO_2D"
mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D")
# initialize a mesh with the box
mesh = smesh.CreateMesh(box)
smeshgui.SetName(salome.ObjectToID(mesh), "MeshBox")
# add the hypothesis to the box
print "-------------------------- add hypothesis to the box"
mesh.AddHypothesis(box,hypNbSeg)
mesh.AddHypothesis(box,hypArea)
mesh.AddHypothesis(box,hypVolume)
mesh.AddHypothesis(box,regular1D)
mesh.AddHypothesis(box,mefisto2D)
# compute the mesh
print "-------------------------- compute the mesh of the box"
ret = smesh.Compute(mesh,box)
print ret
if ret == 0:
print "probleme when computing the mesh"
salome.sg.updateObjBrowser(1)
from geompy import *
import smesh
# create vertices
Point111 = MakeVertex( 0, 0, 0)
Point211 = MakeVertex(10, 0, 0)
Point121 = MakeVertex( 0, 10, 0)
Point221 = MakeVertex(10, 10, 0)
Point112 = MakeVertex( 0, 0, 10)
Point212 = MakeVertex(10, 0, 10)
Point122 = MakeVertex( 0, 10, 10)
Point222 = MakeVertex(10, 10, 10)
# create edges
EdgeX111 = MakeEdge(Point111, Point211)
EdgeX121 = MakeEdge(Point121, Point221)
EdgeX112 = MakeEdge(Point112, Point212)
EdgeX122 = MakeEdge(Point122, Point222)
EdgeY11 = MakeEdge(Point111, Point121)
EdgeY21 = MakeEdge(Point211, Point221)
EdgeY12 = MakeEdge(Point112, Point122)
EdgeY22 = MakeEdge(Point212, Point222)
EdgeZ111 = MakeEdge(Point111, Point112)
EdgeZ211 = MakeEdge(Point211, Point212)
EdgeZ121 = MakeEdge(Point121, Point122)
EdgeZ221 = MakeEdge(Point221, Point222)
# create faces
FaceX11 = MakeQuad(EdgeY11, EdgeZ111, EdgeY12, EdgeZ121)
FaceX21 = MakeQuad(EdgeY21, EdgeZ211, EdgeY22, EdgeZ221)
FaceY111 = MakeQuad(EdgeX111, EdgeZ111, EdgeX112, EdgeZ211)
FaceY121 = MakeQuad(EdgeX121, EdgeZ121, EdgeX122, EdgeZ221)
FaceZ11 = MakeQuad(EdgeX111, EdgeY11, EdgeX121, EdgeY21)
FaceZ12 = MakeQuad(EdgeX112, EdgeY12, EdgeX122, EdgeY22)
# create a solid
Block = MakeHexa(FaceX11, FaceX21, FaceY111, FaceY121, FaceZ11, FaceZ12)
# create a compound
box = MakeCompound([Block])
# add in the study
box_id = addToStudy(box, "Box compound")
# create hexahedral mesh on the box
hexa = smesh.Mesh(box, "Box compound : hexahedrical mesh")
algo = hexa.Segment()
# define "NumberOfSegments" hypothesis to cut the edge in a fixed number of segments
algo.NumberOfSegments(4)
# creates a quadrangle 2D algorithm for the faces
hexa.Quadrangle()
# construct a submesh with a local hypothesis
algo = hexa.Segment(EdgeX111)
# define "Arithmetic1D" hypothesis to cut an edge in several segments with increasing arithmetic length
algo.Arithmetic1D(1, 4)
# define "Propagation" hypothesis that propagates all other hypothesis on all edges on the opposite side in case of quadrangular faces
algo.Propagation()
# compute the mesh
hexa.Compute()
Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use smesh package.
import salome
import geompy
import SMESH
import StdMeshers
smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
smesh.SetCurrentStudy(salome.myStudy)
box = geompy.MakeBox(0., 0., 0., 20., 20., 20.)
idbox = geompy.addToStudy(box, "box")
subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["EDGE"])
edge = subShapeList[0]
name = geompy.SubShapeName(edge, box)
idedge = geompy.addToStudyInFather(box, edge, name)
box = salome.IDToObject(idbox)
edge = salome.IDToObject(idedge)
hyp1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
hyp1.SetNumberOfSegments(3)
hyp2 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
hyp2.SetMaxElementArea(10)
hyp3 = smesh.CreateHypothesis("Arithmetic1D", "libStdMeshersEngine.so")
hyp3.SetLength(1,1)
hyp3.SetLength(6,0)
hyp4 = smesh.CreateHypothesis("Propagation", "libStdMeshersEngine.so")
algo1 = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
algo2 = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
mesh = smesh.CreateMesh(box)
mesh.AddHypothesis(box,hyp1)
mesh.AddHypothesis(box,hyp2)
mesh.AddHypothesis(box,algo1)
mesh.AddHypothesis(box,algo2)
mesh.AddHypothesis(edge,hyp3)
mesh.AddHypothesis(edge,hyp4)
mesh.AddHypothesis(edge,algo1)
smesh.Compute(mesh,box)
salome.sg.updateObjBrowser(1)
# remove a hypothesis
mesh.RemoveHypothesis(edge,hyp4)
smesh.Compute(mesh,box)
salome.sg.updateObjBrowser(1)
# change the value of the hypothesis
hyp2.SetMaxElementArea(2)
mesh.AddHypothesis(box,hyp2)
smesh.Compute(mesh,box)
salome.sg.updateObjBrowser(1)
Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use smesh package.
import salome
import geompy
import StdMeshers
smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
smeshgui = salome.ImportComponentGUI("SMESH")
smeshgui.Init(salome.myStudyId);
# create a box
box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
# add the box to the study
idbox = geompy.addToStudy(box, "box")
# create a hypothesis
print "-------------------------- create Hypothesis"
print "-------------------------- NumberOfSegments"
numberOfSegments = 7
hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
hypNbSeg.SetNumberOfSegments(numberOfSegments)
print hypNbSeg.GetName()
print hypNbSeg.GetId()
print hypNbSeg.GetNumberOfSegments()
smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10")
print "-------------------------- MaxElementArea"
maxElementArea = 800
hypArea = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
hypArea.SetMaxElementArea(maxElementArea)
print hypArea.GetName()
print hypArea.GetId()
print hypArea.GetMaxElementArea()
smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_500")
print "-------------------------- MaxElementVolume"
maxElementVolume = 900
hypVolume = smesh.CreateHypothesis("MaxElementVolume", "libStdMeshersEngine.so")
hypVolume.SetMaxElementVolume(maxElementVolume)
print hypVolume.GetName()
print hypVolume.GetId()
print hypVolume.GetMaxElementVolume()
smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_500")
# create algorithms
print "-------------------------- create Algorithms"
print "-------------------------- Regular_1D"
regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation")
print "-------------------------- MEFISTO_2D"
mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D")
# initialize a mesh with the box
mesh = smesh.CreateMesh(box)
smeshgui.SetName(salome.ObjectToID(mesh), "MeshBox")
# add the hypothesis to the box
print "-------------------------- add hypothesis to the box"
mesh.AddHypothesis(box,hypNbSeg)
mesh.AddHypothesis(box,hypArea)
mesh.AddHypothesis(box,hypVolume)
mesh.AddHypothesis(box,regular1D)
mesh.AddHypothesis(box,mefisto2D)
# compute the mesh
print "-------------------------- compute the mesh of the box"
ret = smesh.Compute(mesh,box)
print ret
if ret == 0:
print "probleme when computing the mesh"
salome.sg.updateObjBrowser(1)
mesh.ExportMED("/tmp/meshMED.med",0)