All,
Thanks for this interesting python package.
I did some testing of the SMESH module and added generation of 2nd degree
elements
which could be added to the examples.
The maxarea and maxvolume settings did not seem to have any impact on the
generated
elements.
I believe the volume meshing (Hex) functions needs a lot of manual
intervention to be usable.
The mesher stops at curved edges etc. You probably need an interface like
Salome offers.
The triangle mesher handle curved surfaces OK, but is has less value for
analysis.
The quad surface mesher has the same problem as the volume (Hex) mesher.
Runar
Code:
"""
from itertools import count
class MeshSettings:
def __init__(self):
self.type = "HEX20"
self.maxedge = 0.
self.avgedge = 0.
self.segments = 0
self.deflection = 0.
self.maxarea = 0.
self.maxvolume = 0.
def meshShape(shape, settings):
from OCC.SMESH import SMESH_Gen
from OCC.StdMeshers import StdMeshers_MaxLength
from OCC.StdMeshers import StdMeshers_LocalLength
from OCC.StdMeshers import StdMeshers_NumberOfSegments
from OCC.StdMeshers import StdMeshers_AutomaticLength
from OCC.StdMeshers import StdMeshers_Deflection1D
from OCC.StdMeshers import StdMeshers_Regular_1D
from OCC.StdMeshers import StdMeshers_MaxElementArea
from OCC.StdMeshers import StdMeshers_QuadraticMesh
from OCC.StdMeshers import StdMeshers_QuadranglePreference
from OCC.StdMeshers import StdMeshers_TrianglePreference
from OCC.StdMeshers import StdMeshers_Quadrangle_2D
from OCC.StdMeshers import StdMeshers_MEFISTO_2D
from OCC.StdMeshers import StdMeshers_MaxElementVolume
from OCC.StdMeshers import StdMeshers_Hexa_3D
# Create the Mesh
meshgen = SMESH_Gen()
mesh = meshgen.CreateMesh(0, True)
# keep track of hypoteses numbering
hyp = count(0).next
# 1D
if settings.maxedge > 0:
hyp1d = StdMeshers_MaxLength(hyp(),0,meshgen)
hyp1d.SetLength(settings.maxedge)
if settings.avgedge > 0.:
hyp1d = StdMeshers_LocalLength(hyp(),0,meshgen)
hyp1d.SetLength(settings.avgedge)
if settings.segments > 0:
hyp1d = StdMeshers_NumberOfSegments(hyp(),0,meshgen)
hyp1d.SetNumberOfSegments(settings.segments)
if settings.maxedge == 0. and settings.avgedge == 0. and settings.segments
== 0:
# default
hyp1d = StdMeshers_AutomaticLength(hyp(),0,meshgen)
if settings.deflection > 0.:
hyp1d = StdMeshers_Deflection1D(hyp(),0,meshgen)
hyp1d.SetDeflection(settings.deflection)
alg1d = StdMeshers_Regular_1D(hyp(),0,meshgen)
if settings.type == "HEX20":
# 1D - Quadratic edges
hypex1d = StdMeshers_QuadraticMesh(hyp(),0,meshgen)
# 2D
hyp2d = StdMeshers_QuadranglePreference(hyp(),0,meshgen)
alg2d = StdMeshers_Quadrangle_2D(hyp(),0,meshgen)
# 3D
hyp3d = StdMeshers_Hexa_3D(hyp(),0,meshgen)
elif settings.type == "HEX8":
# 2D
hyp2d = StdMeshers_QuadranglePreference(hyp(),0,meshgen)
alg2d = StdMeshers_Quadrangle_2D(hyp(),0,meshgen)
# 3D
hyp3d = StdMeshers_Hexa_3D(hyp(),0,meshgen)
elif settings.type == "QUAD8":
# 1D - Quadratic edges
hypex1d = StdMeshers_QuadraticMesh(hyp(),0,meshgen)
# 2D
hyp2d = StdMeshers_QuadranglePreference(hyp(),0,meshgen)
alg2d = StdMeshers_Quadrangle_2D(hyp(),0,meshgen)
elif settings.type == "TRI6":
hypex1d = StdMeshers_QuadraticMesh(hyp(),0,meshgen)
# 2d
hyp2d = StdMeshers_TrianglePreference(hyp(),0,meshgen)
alg2d = StdMeshers_MEFISTO_2D(hyp(),0,meshgen)
elif settings.type == "QUAD4":
# 2D
hyp2d = StdMeshers_QuadranglePreference(hyp(),0,meshgen)
alg2d = StdMeshers_Quadrangle_2D(hyp(),0,meshgen)
elif settings.type == "TRI3":
# 2d
hyp2d = StdMeshers_TrianglePreference(hyp(),0,meshgen)
alg2d = StdMeshers_MEFISTO_2D(hyp(),0,meshgen)
# 2d
if settings.type not in ("HEX20", "HEX8") and settings.maxarea > 0.:
hyp2d = StdMeshers_MaxElementArea(hyp(),0,meshgen)
hyp2d.SetMaxArea(settings.maxarea)
# 3d
if settings.type in ("HEX20", "HEX8") and settings.maxvolume > 0.:
hyp3d = StdMeshers_MaxElementVolume(hyp(),0,meshgen)
hyp3d.SetMaxVolume(settings.maxvolume)
#Calculate mesh
mesh.ShapeToMesh(shape)
#Assign hyptothesis to mesh
for i in range(hyp()):
mesh.AddHypothesis(shape,i)
#Compute the mesh
meshgen.Compute(mesh,mesh.GetShapeToMesh())
return mesh
"""
_______________________________________________
Pythonocc-users mailing list
Pythonocc-users@gna.org
https://mail.gna.org/listinfo/pythonocc-users