Transforming Meshes

Transforming Meshes

 

Translation

 

import SMESH_mechanic

 

smesh = SMESH_mechanic.smesh

mesh = SMESH_mechanic.mesh

 

# define translation vector

point = smesh.PointStruct(-150., -150., 0.)

vector =smesh.DirStruct(point)

 

# translate a mesh

doCopy = 1

 

mesh.Translate([], vector, doCopy)  

 

Rotation

 

import math

import SMESH_mechanic

 

smesh = SMESH_mechanic.smesh

mesh = SMESH_mechanic.mesh

 

# define rotation axis and angle

axisXYZ = smesh.AxisStruct(0., 0., 0., 5., 5., 20.)

angle270 = 1.5 * math.pi

 

# rotate a mesh

mesh.Rotate([], axisXYZ, angle270, 1)  

 

Symmetry

 

import math

 

import SMESH_mechanic

 

smesh = SMESH_mechanic.smesh

mesh = SMESH_mechanic.mesh

 

# create a symmetrical copy of the mesh mirrored through a point

axis = SMESH.AxisStruct(0, 0, 0, 0, 0, 0)

 

mesh.Mirror([], axis, smesh.POINT, 1)

 

Merging Nodes

 

import SMESH_mechanic

mesh = SMESH_mechanic.mesh

 

# merge nodes

Tolerance = 25.0

 

GroupsOfNodes =  mesh.FindCoincidentNodes(Tolerance)

mesh.MergeNodes(GroupsOfNodes)  

 

Merging Elements

import salome

import geompy

import smesh

 

# create a face to be meshed

px = geompy.MakeVertex(100., 0.  , 0.  )

py = geompy.MakeVertex(0.  , 100., 0.  )

pz = geompy.MakeVertex(0.  , 0.  , 100.)

 

vxy = geompy.MakeVector(px, py)

arc = geompy.MakeArc(py, pz, px)

 

wire = geompy.MakeWire([vxy, arc])

isPlanarFace = 1

 

face1 = geompy.MakeFace(wire, isPlanarFace)

id_face1 = geompy.addToStudy(face1, "Face1")

 

# create a circle to be an extrusion path

px1 = geompy.MakeVertex( 100.,  100.,  0.)

py1 = geompy.MakeVertex(-100., -100.,  0.)

pz1 = geompy.MakeVertex(   0.,    0., 50.)

 

circle = geompy.MakeCircleThreePnt(py1, pz1, px1)

id_circle = geompy.addToStudy(circle, "Path")

 

# create a 2D mesh on the face

trias = smesh.Mesh(face1, "Face : 2D mesh")

 

algo1D = trias.Segment()

algo1D.NumberOfSegments(6)

algo2D = trias.Triangle()

algo2D.LengthFromEdges()

 

trias.Compute()

 

# create a path mesh

circlemesh = smesh.Mesh(circle, "Path mesh")

algo = circlemesh.Segment()

algo.NumberOfSegments(10)

circlemesh.Compute()

 

# extrusion of the mesh

trias.ExtrusionAlongPath([], circlemesh, circle,

                         1, 0, [], 0, smesh.PointStruct(0, 0, 0))

 

# merge nodes

print "Number of nodes before MergeNodes:",

trias.NbNodes()

tolerance = 0.001

array_of_nodes_groups = trias.FindCoincidentNodes(tolerance)

 

trias.MergeNodes(array_of_nodes_groups)

 

print "Number of nodes after MergeNodes:", trias.NbNodes()

print ""

print "Number of elements before MergeEqualElements:"

print "Edges      : ", trias.NbEdges()

print "Triangles  : ", trias.NbTriangles()

print "Quadrangles: ", trias.NbQuadrangles()

print "Volumes    : ", trias.NbVolumes()

 

# merge elements

trias.MergeEqualElements()

print "Number of elements after MergeEqualElements:"

print "Edges      : ", trias.NbEdges()

print "Triangles  : ", trias.NbTriangles()

print "Quadrangles: ", trias.NbQuadrangles()

print "Volumes    : ", trias.NbVolumes()

 

salome.sg.updateObjBrowser(1)

 

Sewing Meshes

Sew Meshes Border to Border

import geompy

import smesh

 

# create two faces of a box

box1 = geompy.MakeBox(0., 0., -10., 30., 20., 25.)

facesList1 = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])

face1 = facesList1[2]

 

box2 = geompy.MakeBox(0., 5., 0., 20., 20., 15.)

facesList2 = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])

face2 = facesList2[1]

 

edgesList = geompy.SubShapeAll(face2, geompy.ShapeType["EDGE"])

edge1 = edgesList[2]

 

aComp = geompy.MakeCompound([face1, face2])

geompy.addToStudy(aComp, "Two faces")

 

# create a mesh on two faces

mesh = smesh.Mesh(aComp, "Two faces : quadrangle mesh")

 

algo1D = mesh.Segment()

algo1D.NumberOfSegments(9)

algo2D = mesh.Quadrangle()

 

algo_local = mesh.Segment(edge1)

algo_local.Arithmetic1D(1, 4)

algo_local.Propagation()

 

mesh.Compute()

 

# sew border to side

# FirstNodeIDOnFreeBorder, SecondNodeIDOnFreeBorder, LastNodeIDOnFreeBorder,

# FirstNodeIDOnSide, LastNodeIDOnSide,

# CreatePolygons, CreatePolyedrs

mesh.SewBorderToSide(5, 45, 6, 113, 109, 0, 0)

Sew Conform Free Borders

import geompy

import smesh

 

# create two faces of the box

box1 = geompy.MakeBox(0., 0., -10., 20., 20., 15.)

facesList1 = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])

face1 = facesList1[2]

 

box2 = geompy.MakeBox(0., 5., 0., 20., 20., 15.)

facesList2 = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])

face2 = facesList2[1]

 

edgesList = geompy.SubShapeAll(face2, geompy.ShapeType["EDGE"])

edge1 = edgesList[2]

 

aComp = geompy.MakeCompound([face1, face2])

geompy.addToStudy(aComp, "Two faces")

 

# create a mesh on two faces

mesh = smesh.Mesh(aComp, "Two faces : quadrangle mesh")

 

algo1D = mesh.Segment()

algo1D.NumberOfSegments(9)

algo2D = mesh.Quadrangle()

 

algo_local = mesh.Segment(edge1)

algo_local.Arithmetic1D(1, 4)

algo_local.Propagation()

 

mesh.Compute()

 

# sew conform free borders

# FirstNodeID1, SecondNodeID1, LastNodeID1, FirstNodeID2, SecondNodeID2

mesh.SewConformFreeBorders(5, 45, 6, 3, 24)  

Sew Free Borders

import geompy

import smesh

 

# create two faces of the box

box1 = geompy.MakeBox(0., 0., 0., 20., 20., 15.)

facesList1 = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])

face1 = facesList1[2]

 

box2 = geompy.MakeBox(0., 5., 0., 20., 20., 15.)

facesList2 = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])

face2 = facesList2[1]

 

edgesList = geompy.SubShapeAll(face2, geompy.ShapeType["EDGE"])

edge1 = edgesList[2]

 

aComp = geompy.MakeCompound([face1, face2])

geompy.addToStudy(aComp, "Two faces")

 

# create a mesh on two faces

mesh = smesh.Mesh(aComp, "Two faces : quadrangle mesh")

 

algo1D = mesh.Segment()

algo1D.NumberOfSegments(4)

algo2D = mesh.Quadrangle()

 

algo_local = mesh.Segment(edge1)

algo_local.Arithmetic1D(1, 4)

algo_local.Propagation()

 

mesh.Compute()

 

# sew free borders

# FirstNodeID1, SecondNodeID1, LastNodeID1,

# FirstNodeID2, SecondNodeID2, LastNodeID2, CreatePolygons, CreatePolyedrs

mesh.SewFreeBorders(6, 21, 5, 1, 12, 3, 0, 0)

Sew Side Elements

import geompy

import smesh

 

# create two boxes

box1 = geompy.MakeBox(0.,  0., 0., 10., 10., 10.)

box2 = geompy.MakeBox(0., 15., 0., 20., 25., 10.)

 

EdgesList = geompy.SubShapeAll(box2, geompy.ShapeType["EDGE"])

 

aComp = geompy.MakeCompound([box1, box2])

geompy.addToStudy(aComp, "Two boxes")

 

# create a mesh on two boxes

mesh = smesh.Mesh(aComp, "Two faces : quadrangle mesh")

 

algo1D = mesh.Segment()

algo1D.NumberOfSegments(2)

algo2D = mesh.Quadrangle()

 

algo_local = mesh.Segment(EdgesList[8])

algo_local.NumberOfSegments(4)

algo_local.Propagation()

 

mesh.Compute()

 

# sew side elements

# IDsOfSide1Elements, IDsOfSide2Elements,

# NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge, NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge

mesh.SewSideElements([69, 70, 71, 72], [91, 92, 89, 90], 8, 38, 23, 58)