X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=doc%2Fexamples%2Fmechanic.py;fp=doc%2Fexamples%2Fmechanic.py;h=902ce7184424a4b54e32e367bd6e5468b1facf70;hp=0000000000000000000000000000000000000000;hb=4cf07a14111e98e8889620ee7e6371574c31a50c;hpb=d9f4b53e489dd5857db264ede6acded7b076c9f1 diff --git a/doc/examples/mechanic.py b/doc/examples/mechanic.py new file mode 100644 index 000000000..902ce7184 --- /dev/null +++ b/doc/examples/mechanic.py @@ -0,0 +1,86 @@ +# Inspired by SMESH_mechanic.py. +# Creates geometry and a mesh to be used in other examples +# -------------------------------------------------------- + +import salome +salome.salome_init_without_session() + +import SMESH +from salome.geom import geomBuilder +from salome.smesh import smeshBuilder + +geom_builder = geomBuilder.New() +smesh_builder = smeshBuilder.New() + +# Geometry +# -------- + +# create planar face on a wire combined from a segment and three arcs + +p1 = geom_builder.MakeVertex(100.0, 0.0, 0.0) +p2 = geom_builder.MakeVertex(50.0, 50.0, 0.0) +p3 = geom_builder.MakeVertex(100.0, 100.0, 0.0) +arc1 = geom_builder.MakeArc(p1, p2, p3) + +p4 = geom_builder.MakeVertex(170.0, 100.0, 0.0) +seg1 = geom_builder.MakeVector(p3, p4) + +p5 = geom_builder.MakeVertex(200.0, 70.0, 0.0) +p6 = geom_builder.MakeVertex(170.0, 40.0, 0.0) +arc2 = geom_builder.MakeArc(p4, p5, p6) + +p7 = geom_builder.MakeVertex(120.0, 30.0, 0.0) +arc3 = geom_builder.MakeArc(p6, p7, p1) + +wire1 = geom_builder.MakeWire([arc1, seg1, arc2, arc3]) +face1 = geom_builder.MakeFace(wire1, True) + +# create main shape by extruding just created planar face + +pO = geom_builder.MakeVertex(0.0, 0.0, 0.0) +pz = geom_builder.MakeVertex(0.0, 0.0, 100.0) +vz = geom_builder.MakeVector(pO, pz) +prism1 = geom_builder.MakePrismVecH(face1, vz, 100.0) + +# create two cylinders + +pc1 = geom_builder.MakeVertex(90.0, 50.0, -40.0) +pc2 = geom_builder.MakeVertex(170.0, 70.0, -40.0) + +cyl1 = geom_builder.MakeCylinder(pc1, vz, 20.0, 180.0) +cyl2 = geom_builder.MakeCylinder(pc2, vz, 20.0, 180.0) + +# create final shape by cutting one cylinder and fusing with another + +shape = geom_builder.MakeBoolean(prism1, cyl1, 2) +mechanic = geom_builder.MakeBoolean(shape, cyl2, 3) + +# get all faces from shape and keep sub of them into variables for future processing + +shape_faces = geom_builder.SubShapeAllSorted(mechanic, geom_builder.ShapeType["FACE"]) + +sub_face1 = shape_faces[0] +sub_face2 = shape_faces[4] +sub_face3 = shape_faces[5] +sub_face4 = shape_faces[10] + +# Mesh +# ---- + +# create tria+tetra mesh from mechanic shape + +mesh = smesh_builder.Mesh(mechanic, "mechanic") +mesh.Segment().NumberOfSegments(10) +mesh.Triangle().MaxElementArea(25) +mesh.Tetrahedron() + +# create quad sub-meshes on faces sub_face1 - sub_face4 + +mesh.Quadrangle(sub_face1) +mesh.Quadrangle(sub_face2) +mesh.Quadrangle(sub_face3) +mesh.Quadrangle(sub_face4) + +# finally compute whole mesh + +mesh.Compute()