X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=doc%2Fsalome%2Fgui%2FSMESH%2Finput%2Ftui_transforming_meshes.doc;h=22f11886f64f4cca29148358908f035cb43bbb45;hb=ccac421ca7a3b986d981a0287ad2b87178f1ab90;hp=e47935311fba41a8064a7cd4487ced7abea8c8ac;hpb=ddff0c0a7efbda0a2bc6d93c46a00662a96bf2af;p=modules%2Fsmesh.git diff --git a/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc b/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc index e47935311..22f11886f 100644 --- a/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc +++ b/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc @@ -380,7 +380,7 @@ print "Nodes : ", mesh.NbNodes() print "Edges : ", mesh.NbEdges() print "Triangles : ", mesh.NbTriangles() -groupOfCreatedNodes = mesh.DoubleNodeGroup(nodes1, faces1) +groupOfCreatedNodes = mesh.DoubleNodeGroup(nodes1, faces1, theMakeGroup=True) print "New nodes:", groupOfCreatedNodes.GetIDs() print "\nMesh after the first nodes duplication:" @@ -408,7 +408,7 @@ print "Nodes : ", mesh.NbNodes() print "Edges : ", mesh.NbEdges() print "Triangles : ", mesh.NbTriangles() -groupOfNewEdges = mesh.DoubleNodeElemGroup( edges, nodes2, faces2 ) +groupOfNewEdges = mesh.DoubleNodeElemGroup( edges, nodes2, faces2, theMakeGroup=True ) print "New edges:", groupOfNewEdges.GetIDs() print "\nMesh after the second nodes duplication:" @@ -421,4 +421,167 @@ if salome.sg.hasDesktop(): salome.sg.updateObjBrowser(0) \endcode +
+\anchor tui_make_2dmesh_from_3d +

Create boundary elements

+ +\code +# The objective of these samples is to illustrate the following use cases: +# 1) The mesh MESH1 with 3D cells has no or only a part of its skin (2D cells): +# 1.1) Add the 2D skin (missing 2D cells) to MESH1 (what is done now by the algorithm). +# 1.2) Create a new 3D Mesh MESH2 that consists of MESH1 and added 2D skin cells. +# 1.3) Create a new 2D Mesh MESH3 that consists only of 2D skin cells. +# 2) The mesh MESH1 with 3D cells has all its skin (2D cells): +# Create a new 2D Mesh MESH3 that consists only of 2D skin cells. +# +# In all cases an option to create a group containing these 2D skin cells is available. + +from smesh import * + +box = geompy.MakeBoxDXDYDZ(1,1,1) +geompy.addToStudy(box,"box") +boxFace = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])[0] +geompy.addToStudyInFather(box,boxFace,"boxFace") + +MESH1 = Mesh(box,"MESH1") +MESH1.AutomaticHexahedralization() + +init_nb_edges = MESH1.NbEdges() +init_nb_faces = MESH1.NbFaces() +init_nb_volumes = MESH1.NbVolumes() + +# ========================================================================================= +# 1) The mesh MESH1 with 3D cells has no or only a part of its skin (2D cells) +# ========================================================================================= +# remove some faces +all_faces = MESH1.GetElementsByType(SMESH.FACE) +rm_faces = all_faces[:init_nb_faces/5] + all_faces[4*init_nb_faces/5:] +MESH1.RemoveElements(rm_faces) +assert(MESH1.NbFaces() == init_nb_faces-len(rm_faces)) + +# 1.1) Add the 2D skin (missing 2D cells) to MESH1 +# ------------------------------------------------- +# add missing faces +# 1.1.1) to the whole mesh +m,g = MESH1.MakeBoundaryMesh(MESH1) +assert(init_nb_faces == MESH1.NbFaces()) +assert(init_nb_edges == MESH1.NbEdges()) +assert(m) +assert(not g) + +# 1.1.2) to some elements +MESH1.RemoveElements(rm_faces) +MESH1.MakeBoundaryMesh([]) +assert(init_nb_faces != MESH1.NbFaces()) +volumes = MESH1.GetElementsByType(SMESH.VOLUME) +for v in volumes: + MESH1.MakeBoundaryMesh([v]) +assert(init_nb_faces == MESH1.NbFaces()) +assert(init_nb_edges == MESH1.NbEdges()) + +# 1.1.3) to a group of elements +volGroup1 = MESH1.CreateEmptyGroup(SMESH.VOLUME, "volGroup1") +volGroup1.Add( volumes[: init_nb_volumes/2]) +volGroup2 = MESH1.CreateEmptyGroup(SMESH.VOLUME, "volGroup2") +volGroup1.Add( volumes[init_nb_volumes/2:]) +MESH1.RemoveElements(rm_faces) +MESH1.MakeBoundaryMesh(volGroup1) +MESH1.MakeBoundaryMesh(volGroup2) +assert(init_nb_faces == MESH1.NbFaces()) +assert(init_nb_edges == MESH1.NbEdges()) + +# 1.1.4) to a submesh. +# The submesh has no volumes, so it is required to check if it passes without crash and does not create +# missing faces +faceSubmesh = MESH1.GetSubMesh( boxFace, "boxFace" ) +MESH1.RemoveElements(rm_faces) +MESH1.MakeBoundaryMesh(faceSubmesh) +assert(init_nb_faces != MESH1.NbFaces()) + +# check group creation +MESH1.RemoveElements(rm_faces) +groupName = "added to mesh" +m,group = MESH1.MakeBoundaryMesh(MESH1,groupName=groupName) +assert(group) +assert(group.GetName() == groupName) +assert(group.Size() == len(rm_faces)) + + +# 1.2) Create a new 3D Mesh MESH2 that consists of MESH1 and added 2D skin cells. +# ------------------------------------------------------------------------------ +MESH1.RemoveElements(rm_faces) +meshName = "MESH2" +MESH2,group = MESH1.MakeBoundaryMesh(MESH1,meshName=meshName,toCopyElements=True) +assert(MESH2) +assert(MESH2.GetName() == meshName) +assert(MESH2.NbVolumes() == MESH1.NbVolumes()) +assert(MESH2.NbFaces() == len(rm_faces)) + +# check group creation +MESH1.RemoveElements(rm_faces) +MESH2,group = MESH1.MakeBoundaryMesh(MESH1,meshName="MESH2_0", + groupName=groupName,toCopyElements=True) +assert(group) +assert(group.GetName() == groupName) +assert(group.Size() == len(rm_faces)) +assert(group.GetMesh()._is_equivalent(MESH2.GetMesh())) + +# 1.3) Create a new 2D Mesh MESH3 that consists only of 2D skin cells. +# ----------------------------------------------------------------------- +MESH1.RemoveElements(rm_faces) +meshName = "MESH3" +MESH3,group = MESH1.MakeBoundaryMesh(MESH1,meshName=meshName,toCopyExistingBondary=True) +assert(MESH3) +assert(not group) +assert(MESH3.GetName() == meshName) +assert(MESH3.NbVolumes() == 0) +assert(MESH3.NbFaces() == init_nb_faces) + +# check group creation +MESH1.RemoveElements(rm_faces) +MESH3,group = MESH1.MakeBoundaryMesh(MESH1,meshName=meshName, + groupName=groupName, toCopyExistingBondary=True) +assert(group) +assert(group.GetName() == groupName) +assert(group.Size() == len(rm_faces)) +assert(group.GetMesh()._is_equivalent(MESH3.GetMesh())) +assert(MESH3.NbFaces() == init_nb_faces) + +# ================================================================== +# 2) The mesh MESH1 with 3D cells has all its skin (2D cells) +# Create a new 2D Mesh MESH3 that consists only of 2D skin cells. +# ================================================================== +MESH1.MakeBoundaryMesh(MESH1) +MESH3,group = MESH1.MakeBoundaryMesh(MESH1,meshName=meshName,toCopyExistingBondary=True) +assert(MESH3) +assert(not group) +assert(MESH3.NbVolumes() == 0) +assert(MESH3.NbFaces() == init_nb_faces) + +# check group creation +MESH3,group = MESH1.MakeBoundaryMesh(MESH1,meshName=meshName, + groupName=groupName, toCopyExistingBondary=True) +assert(group) +assert(group.GetName() == groupName) +assert(group.Size() == 0) +assert(group.GetMesh()._is_equivalent(MESH3.GetMesh())) +assert(MESH3.NbFaces() == init_nb_faces) + +# ================ +# Make 1D from 2D +# ================ + +MESH1.Clear() +MESH1.Compute() +MESH1.RemoveElements( MESH1.GetElementsByType(SMESH.EDGE)) + +rm_faces = faceSubmesh.GetIDs()[:2] # to remove few adjacent faces +nb_missing_edges = 2 + 2*len(rm_faces) + +MESH1.RemoveElements(rm_faces) +mesh,group = MESH1.MakeBoundaryMesh(MESH1, BND_1DFROM2D) +assert( MESH1.NbEdges() == nb_missing_edges ) + + +\endcode */