X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=doc%2Fsalome%2Fgui%2FSMESH%2Ftransforming_meshes.htm;h=4f740bb60f0e8b299f345e157db301a65b11124b;hp=6d2ada4f1d772a5f4f8ed17eceaebb9f5cbb6a9e;hb=0600c4b484dfa65efb046502dfffe6b61389c2b3;hpb=6a3292e0719908b1e6ba7d3994fb314fa9fba71b diff --git a/doc/salome/gui/SMESH/transforming_meshes.htm b/doc/salome/gui/SMESH/transforming_meshes.htm index 6d2ada4f1..4f740bb60 100755 --- a/doc/salome/gui/SMESH/transforming_meshes.htm +++ b/doc/salome/gui/SMESH/transforming_meshes.htm @@ -1,664 +1,758 @@ - - - - - -Transforming Meshes - - - - - - - - - - -

Transforming Meshes

- -

Transforming Meshes

- -

 

- -

Translation

- -

 

- -

import SMESH

- -

import SMESH_mechanic

- -

 

- -

mesh   = - SMESH_mechanic.mesh

- -

salome = SMESH_mechanic.salome

- -

 

- -

# translate a mesh

- -

anEditor = mesh.GetMeshEditor()

- -

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

- -

vector = SMESH.DirStruct(point)

- -

anEditor.TranslateObject(mesh, vector, - 1)

- -

 

- -

salome.sg.updateObjBrowser(1) -

- -

 

- -

Rotation

- -

 

- -

import SMESH

- -

import SMESH_mechanic

- -

 

- -

mport math

- -

mesh   = - SMESH_mechanic.mesh

- -

salome = SMESH_mechanic.salome

- -

 

- -

# rotate a mesh

- -

anEditor = mesh.GetMeshEditor()

- -

axisXYZ = SMESH.AxisStruct(0, 0, 0, 5, - 5, 20)

- -

angle180 =  1.5*math.pi

- -

anEditor.RotateObject(mesh, axisXYZ, angle180, - 1)

- -

 

- -

salome.sg.updateObjBrowser(1)

- -

 

- -

 

- -

Symmetry

- -

 

- -

import SMESH

- -

import SMESH_mechanic

- -

 

- -

import math

- -

mesh   = - SMESH_mechanic.mesh

- -

salome = SMESH_mechanic.salome

- -

 

- -

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

- -

anEditor = mesh.GetMeshEditor()

- -

anEditor.MirrorObject(mesh, SMESH.AxisStruct(0, - 0, 0, 0, 0, 0), SMESH.SMESH_MeshEditor.POINT, 1)

- -

 

- -

salome.sg.updateObjBrowser(1) -

- -

 

- -

 

- -

Merging - Nodes

- -

 

- -

import SMESH

- -

import SMESH_mechanic

- -

 

- -

smesh  = - SMESH_mechanic.smesh

- -

mesh   = - SMESH_mechanic.mesh

- -

salome = SMESH_mechanic.salome

- -

 

- -

# merge nodes

- -

aMeshEditor = mesh.GetMeshEditor()

- -

Tolerance = 25.0

- -

 

- -

GroupsOfNodes = aMeshEditor.FindCoincidentNodes(Tolerance)

- -

aMeshEditor.MergeNodes(GroupsOfNodes)

- -

    

- -

salome.sg.updateObjBrowser(1) -

- -

 

- -

Sewing Meshes

- -

Sew Meshes Border to Border

- -

import salome

- -

import geompy

- -

import smesh

- -

 

- -

# create two faces of a - box

- -

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

- -

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

- -

 

- -

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

- -

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

- -

EdgesList = geompy.SubShapeAll(subShapeList2[ - 1 ], geompy.ShapeType["EDGE"])

- -

 

- -

aComp = geompy.MakeCompound( - [subShapeList1[ 2 ], subShapeList2[ 1 ]] )

- -

idComp = geompy.addToStudy( - aComp, "Two faces" )

- -

aCompobj  = - salome.IDToObject( idComp )

- -

 

- -

# create a mesh on two - faces

- -

 

- -

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

- -

algo = mesh.Segment()

- -

 

- -

# define "NumberOfSegments" - hypothesis to cut an edge in a fixed number of segments

- -

algo.NumberOfSegments(9)

- -

 

- -

# create a quadrangle 2D - algorithm for faces

- -

mesh.Quadrangle()

- -

 

- -

# create a local hypothesis

- -

algo = mesh.Segment(EdgesList[2])

- -

 

- -

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

- -

mesh.Compute()

- -

 

- -

# sew free borders

- -

anEditor = mesh.GetMesh().GetMeshEditor()

- -

anEditor.SewBorderToSide(5, - 45, 6, 113, 109, 0, 0)

- -

 

- -

salome.sg.updateObjBrowser(1) -

- -

 

- -

Sew Conform Free Borders

- -

import salome

- -

import geompy

- -

import smesh

- -

 

- -

# create two faces of the - box

- -

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

- -

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

- -

 

- -

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

- -

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

- -

EdgesList = geompy.SubShapeAll(subShapeList2[ - 1 ], geompy.ShapeType["EDGE"])

- -

 

- -

aComp = geompy.MakeCompound( - [subShapeList1[ 2 ], subShapeList2[ 1 ]] )

- -

idComp = geompy.addToStudy( - aComp, "Two faces" )

- -

aCompobj  = - salome.IDToObject( idComp )

- -

 

- -

# create a mesh on two - faces

- -

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

- -

algo = mesh.Segment()

- -

 

- -

# define "NumberOfSegments" - hypothesis to cut an edge in a fixed number of segments

- -

algo.NumberOfSegments(9)

- -

 

- -

# create a quadrangle 2D - algorithm for faces

- -

mesh.Quadrangle()

- -

 

- -

# create a local hypothesis

- -

algo = mesh.Segment(EdgesList[2])

- -

 

- -

# define "Arithmetic1D" - hypothesis to cut an edge in several segments with increasing arithmetic - length

- -

algo.Arithmetic1D(1, - 4)

- -

 

- -

# define "Propagation" - hypothesis that propagate all other hypothesis on all edges on - the opposite side in case of quadrangular faces

- -

algo.Propagation()

- -

mesh.Compute()

- -

 

- -

# sew free borders

- -

anEditor = mesh.GetMesh().GetMeshEditor()

- -

anEditor.SewConformFreeBorders(5, - 45, 6, 3, 24)

- -

salome.sg.updateObjBrowser(1) -

- -

 

- -

Sew Free Borders

- -

import salome

- -

import geompy

- -

import smesh

- -

 

- -

# create two faces of the - box

- -

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

- -

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

- -

 

- -

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

- -

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

- -

EdgesList = geompy.SubShapeAll(subShapeList2[ - 1 ], geompy.ShapeType["EDGE"])

- -

 

- -

aComp = geompy.MakeCompound( - [subShapeList1[ 2 ], subShapeList2[ 1 ]] )

- -

idComp = geompy.addToStudy( - aComp, "Two faces" )

- -

aCompobj  = - salome.IDToObject( idComp )

- -

 

- -

# create a mesh on two - faces

- -

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

- -

algo = mesh.Segment()

- -

 

- -

# define "NumberOfSegments" - hypothesis to cut an edge in a fixed number of segments

- -

algo.NumberOfSegments(4)

- -

 

- -

# creates a quadrangle - 2D algorithm for faces

- -

mesh.Quadrangle()

- -

 

- -

# create a local hypothesis

- -

algo = mesh.Segment(EdgesList[2])

- -

 

- -

# define "Arithmetic1D" - hypothesis to cut an edge in several segments with  increasing - arithmetic length

- -

algo.Arithmetic1D(1, - 4)

- -

 

- -

# define "Propagation" - hypothesis that propagate all other hypothesis on all edges on - the opposite side in case of quadrangular faces

- -

algo.Propagation()

- -

mesh.Compute()

- -

 

- -

# sew free borders

- -

anEditor = mesh.GetMesh().GetMeshEditor()

- -

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

- -

 

- -

salome.sg.updateObjBrowser(1) -

- -

 

- -

Sew Side Elements

- -

import salome

- -

import geompy

- -

import smesh

- -

 

- -

# create two faces of the - box

- -

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

- -

idComp = geompy.addToStudy( - aComp, "Two faces" )

- -

aCompobj  = - salome.IDToObject( idComp )

- -

 

- -

# create a mesh on two - faces

- -

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

- -

algo = mesh.Segment()

- -

 

- -

# define "NumberOfSegments" - hypothesis to cut an edge in a fixed number of segments

- -

algo.NumberOfSegments(2)

- -

 

- -

# create a quadrangle 2D - algorithm for faces

- -

mesh.Quadrangle()

- -

 

- -

# create a local hypothesis

- -

algo = mesh.Segment(EdgesList[8])

- -

 

- -

# define "Arithmetic1D" - hypothesis to cut an edge in several segments with increasing arithmetic - length

- -

algo.NumberOfSegments(4)

- -

 

- -

# define "Propagation" - hypothesis that propagates all other hypothesis on all edges on the opposite side in case - of quadrangular faces

- -

algo.Propagation()

- -

mesh.Compute()

- -

 

- -

# sew free borders

- -

anEditor = mesh.GetMesh().GetMeshEditor()

- -

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

- -

salome.sg.updateObjBrowser(1) -

- - - - + + + + + +Transforming Meshes + + + + + + + + + + + +

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)

+ + + +