Creating Meshes

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.

Construction of a Mesh

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)

 

Construction of a Submesh

 

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()

 

Editing of a mesh

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)

 

Export of a Mesh

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)