X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_SWIG%2FSMESH_mechanic.py;h=bd1b239dcc2593078aea75c85a75bf0dbd94bfb7;hb=f3ce9fcd4028efd124456c5e55c4c4c7983cad9f;hp=3011c0c827b1cbee036c2e7012f997e7e81088d1;hpb=c3bf92bd87b770fd81631a3853f7f5bb1ac6a4e8;p=modules%2Fsmesh.git diff --git a/src/SMESH_SWIG/SMESH_mechanic.py b/src/SMESH_SWIG/SMESH_mechanic.py index 3011c0c82..bd1b239dc 100644 --- a/src/SMESH_SWIG/SMESH_mechanic.py +++ b/src/SMESH_SWIG/SMESH_mechanic.py @@ -1,67 +1,61 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE # +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS # +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. # +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + # File : SMESH_withHole.py # Author : Lucien PIGNOLONI # Module : SMESH # $Header$ - +#------------------------------------------------------------------------- +# import salome -import geompy +salome.salome_init() +import GEOM +from salome.geom import geomBuilder +geompy = geomBuilder.New(salome.myStudy) -geom = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM") -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder +smesh = smeshBuilder.New(salome.myStudy) -geom.GetCurrentStudy(salome.myStudy._get_StudyId()) -smesh.SetCurrentStudy(salome.myStudy) - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId); - -import StdMeshers +from salome.StdMeshers import StdMeshersBuilder # ---------------------------- GEOM -------------------------------------- -ShapeTypeCompSolid = 1 -ShapeTypeSolid = 2 -ShapeTypeShell = 3 -ShapeTypeFace = 4 -ShapeTypeWire = 5 -ShapeTypeEdge = 6 -ShapeTypeVertex = 7 # ---- define contigous arcs and segment to define a closed wire -p1 = geom.MakePointStruct( 100.0, 0.0, 0.0 ) -p2 = geom.MakePointStruct( 50.0, 50.0, 0.0 ) -p3 = geom.MakePointStruct( 100.0, 100.0, 0.0 ) -arc1 = geom.MakeArc( p1, p2, p3 ) +p1 = geompy.MakeVertex( 100.0, 0.0, 0.0 ) +p2 = geompy.MakeVertex( 50.0, 50.0, 0.0 ) +p3 = geompy.MakeVertex( 100.0, 100.0, 0.0 ) +arc1 = geompy.MakeArc( p1, p2, p3 ) -p4 = geom.MakePointStruct( 170.0, 100.0, 0.0 ) -seg1 = geom.MakeVector( p3, p4 ) +p4 = geompy.MakeVertex( 170.0, 100.0, 0.0 ) +seg1 = geompy.MakeVector( p3, p4 ) -p5 = geom.MakePointStruct( 200.0, 70.0, 0.0 ) -p6 = geom.MakePointStruct( 170.0, 40.0, 0.0 ) -arc2 = geom.MakeArc( p4, p5, p6 ) +p5 = geompy.MakeVertex( 200.0, 70.0, 0.0 ) +p6 = geompy.MakeVertex( 170.0, 40.0, 0.0 ) +arc2 = geompy.MakeArc( p4, p5, p6 ) -p7 = geom.MakePointStruct( 120.0, 30.0, 0.0 ) -arc3 = geom.MakeArc( p6, p7, p1 ) +p7 = geompy.MakeVertex( 120.0, 30.0, 0.0 ) +arc3 = geompy.MakeArc( p6, p7, p1 ) # ---- define a closed wire with arcs and segment List1 = [] @@ -70,225 +64,128 @@ List1.append( seg1 ) List1.append( arc2 ) List1.append( arc3 ) -ListIOR1 = [] -for S in List1 : - ListIOR1.append( S._get_Name() ) -wire1 = geom.MakeWire( ListIOR1 ) - -Id_wire1 = geompy.addToStudy( wire1, "wire1") +wire1 = geompy.MakeWire( List1 ) +Id_wire1 = geompy.addToStudy( wire1, "wire1" ) # ---- define a planar face with wire WantPlanarFace = 1 #True -face1 = geom.MakeFace( wire1, WantPlanarFace ) -Id_face1 = geompy.addToStudy( face1, "face1") +face1 = geompy.MakeFace( wire1, WantPlanarFace ) +Id_face1 = geompy.addToStudy( face1, "face1" ) # ---- create a shape by extrusion -pO = geom.MakePointStruct( 0.0, 0.0, 0.0 ) -pz = geom.MakePointStruct( 0.0, 0.0, 100.0 ) +pO = geompy.MakeVertex( 0.0, 0.0, 0.0 ) +pz = geompy.MakeVertex( 0.0, 0.0, 100.0 ) +vz = geompy.MakeVector( pO, pz ) -prism1 = geom.MakePrism( face1, pO, pz ) -Id_prism1 = geompy.addToStudy( prism1, "prism1") +prism1 = geompy.MakePrismVecH( face1, vz, 100.0 ) +Id_prism1 = geompy.addToStudy( prism1, "prism1" ) # ---- create two cylinders +pc1 = geompy.MakeVertex( 90.0, 50.0, -40.0 ) +pc2 = geompy.MakeVertex( 170.0, 70.0, -40.0 ) -pc1 = geom.MakePointStruct( 90.0, 50.0, -40.0 ) -pc2 = geom.MakePointStruct( 170.0, 70.0, -40.0 ) -vz = geom.MakeDirection( pz ) radius = 20.0 height = 180.0 -cyl1 = geom.MakeCylinder( pc1, vz, radius, height ) -cyl2 = geom.MakeCylinder( pc2, vz, radius, height ) +cyl1 = geompy.MakeCylinder( pc1, vz, radius, height ) +cyl2 = geompy.MakeCylinder( pc2, vz, radius, height ) Id_Cyl1 = geompy.addToStudy( cyl1, "cyl1" ) Id_Cyl2 = geompy.addToStudy( cyl2, "cyl2" ) -# ---- cut with cyl1 -shape = geom.MakeBoolean( prism1, cyl1, 2 ) - -# ---- fuse with cyl2 -shape1 = geom.MakeBoolean( shape, cyl2, 3 ) +# ---- cut with cyl1 +shape = geompy.MakeBoolean( prism1, cyl1, 2 ) -Id_shape1 = geompy.addToStudy( shape1, "shape1") +# ---- fuse with cyl2 to obtain the final mechanic piece :) +mechanic = geompy.MakeBoolean( shape, cyl2, 3 ) +Id_mechanic = geompy.addToStudy( mechanic, "mechanic" ) -#faces = geompy.SubShapeAllSorted( shape1, ShapeTypeFace) -#i = 0 -#for face in faces: -# geompy.addToStudy(face,"face_" + str(i)) -# i = i+1 - -# ---- add a face sub shape in study to be meshed different -IdSubFaceList = [] -IdSubFaceList.append(1) -sub_face = geompy.SubShapeSorted( shape1, ShapeTypeFace, IdSubFaceList ) -name = geompy.SubShapeName( sub_face._get_Name(), shape1._get_Name() ) +# ---- explode on faces +SubFaceL = geompy.SubShapeAllSorted(mechanic, geompy.ShapeType["FACE"]) -Id_SubFace = geompy.addToStudyInFather( shape1, sub_face, name ) +# ---- add a face sub-shape in study to be meshed different +sub_face1 = SubFaceL[0] +name = geompy.SubShapeName( sub_face1, mechanic ) -# ---- add a face sub shape in study to be meshed different -IdSubFaceL = [] -IdSubFaceL.append(2) -sub_face2 = geompy.SubShapeSorted( shape1, ShapeTypeFace, IdSubFaceL ) -name = geompy.SubShapeName( sub_face2._get_Name(), shape1._get_Name() ) +Id_SubFace1 = geompy.addToStudyInFather( mechanic, sub_face1, name ) -Id_SubFace2 = geompy.addToStudyInFather( shape1, sub_face2, name ) +# ---- add a face sub-shape in study to be meshed different +sub_face2 = SubFaceL[4] +name = geompy.SubShapeName( sub_face2, mechanic ) -# ---- add a face sub shape in study to be meshed different -IdSubFaceL = [] -IdSubFaceL.append(3) -sub_face3 = geompy.SubShapeSorted( shape1, ShapeTypeFace, IdSubFaceL ) -name = geompy.SubShapeName( sub_face3._get_Name(), shape1._get_Name() ) +Id_SubFace2 = geompy.addToStudyInFather( mechanic, sub_face2, name ) -Id_SubFace3 = geompy.addToStudyInFather( shape1, sub_face3, name ) +# ---- add a face sub-shape in study to be meshed different +sub_face3 = SubFaceL[5] +name = geompy.SubShapeName( sub_face3, mechanic ) -# ---- add a face sub shape in study to be meshed different -IdSubFaceL = [] -IdSubFaceL.append(6) -sub_face4 = geompy.SubShapeSorted( shape1, ShapeTypeFace, IdSubFaceL ) -name = geompy.SubShapeName( sub_face4._get_Name(), shape1._get_Name() ) +Id_SubFace3 = geompy.addToStudyInFather( mechanic, sub_face3, name ) -Id_SubFace4 = geompy.addToStudyInFather( shape1, sub_face4, name ) +# ---- add a face sub-shape in study to be meshed different +sub_face4 = SubFaceL[10] +name = geompy.SubShapeName( sub_face4, mechanic ) +Id_SubFace4 = geompy.addToStudyInFather( mechanic, sub_face4, name ) # ---------------------------- SMESH -------------------------------------- +smesh.SetCurrentStudy(salome.myStudy) -# ------------------------------ Length Hypothesis - -print "-------------------------- create Hypothesis" -print "-------------------------- LocalLength" -hyp1 = smesh.CreateHypothesis("LocalLength", "libStdMeshersEngine.so") -hyp1.SetLength( 100.0 ) -print hyp1.GetName() -print hyp1.GetId() -print hyp1.GetLength() +# -- Init -- +shape_mesh = salome.IDToObject( Id_mechanic ) -idlength = salome.ObjectToID(hyp1) -smeshgui.SetName(idlength, "Local_Length_100"); +mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic") print "-------------------------- NumberOfSegments" -hyp2 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hyp2.SetNumberOfSegments( 10 ) -print hyp2.GetName() -print hyp2.GetId() -print hyp2.GetNumberOfSegments() - -idseg = salome.ObjectToID(hyp2) -smeshgui.SetName(idseg, "NumberOfSegments_12"); - -print "-------------------------- MaxElementArea" - -hyp3 = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" ) -hyp3.SetMaxElementArea( 25 ) -print hyp3.GetName() -print hyp3.GetId() -print hyp3.GetMaxElementArea() +numberOfSegment = 10 -idarea1 = salome.ObjectToID(hyp3) -smeshgui.SetName(idarea1, "MaxElementArea_20"); +algo = mesh.Segment() +hypNbSeg = algo.NumberOfSegments(numberOfSegment) +print hypNbSeg.GetName() +print hypNbSeg.GetId() +print hypNbSeg.GetNumberOfSegments() +smesh.SetName(hypNbSeg, "NumberOfSegments_10") print "-------------------------- MaxElementArea" -hyp4 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hyp4.SetMaxElementArea( 35 ) -print hyp4.GetName() -print hyp4.GetId() -print hyp4.GetMaxElementArea() - -idarea2 = salome.ObjectToID(hyp4) -smeshgui.SetName(idarea2, "MaxElementArea_30"); - - -print "-------------------------- Regular_1D" - -alg1 = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -listHyp =alg1.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print alg1.GetName() -print alg1.GetId() +maxElementArea = 25 -idreg1d = salome.ObjectToID(alg1) -smeshgui.SetName( idreg1d, "Regular_1D" ); +algo = mesh.Triangle() +hypArea25 = algo.MaxElementArea(maxElementArea) +print hypArea25.GetName() +print hypArea25.GetId() +print hypArea25.GetMaxElementArea() +smesh.SetName(hypArea25, "MaxElementArea_25") -print "-------------------------- MEFISTO_2D" +# Create submesh on sub_face1 - sub_face4 +# --------------------------------------- -alg2 = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") -listHyp = alg2.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print alg2.GetName() -print alg2.GetId() +# Set 2D algorithm to submesh on sub_face1 +algo = mesh.Quadrangle(sub_face1) +smesh.SetName(algo.GetSubMesh(), "SubMeshFace1") -idmef = salome.ObjectToID(alg2) -smeshgui.SetName( idmef, "MEFISTO_2D" ); +# Set 2D algorithm to submesh on sub_face2 +algo = mesh.Quadrangle(sub_face2) +smesh.SetName(algo.GetSubMesh(), "SubMeshFace2") -print "-------------------------- SMESH_Quadrangle_2D" +# Set 2D algorithm to submesh on sub_face3 +algo = mesh.Quadrangle(sub_face3) +smesh.SetName(algo.GetSubMesh(), "SubMeshFace3") -alg3 = smesh.CreateHypothesis( "Quadrangle_2D", "libStdMeshersEngine.so" ) -listHyp = alg3.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print alg3.GetName() -print alg3.GetId() +# Set 2D algorithm to submesh on sub_face4 +algo = mesh.Quadrangle(sub_face4) +smesh.SetName(algo.GetSubMesh(), "SubMeshFace4") -idqad2 = salome.ObjectToID(alg3) -smeshgui.SetName( idqad2, "SMESH_Quadrangle_2D" ); +print "-------------------------- compute the mesh of the mechanic piece" - -print "-------------------------- add hypothesis to main shape1" - -shape_mesh = salome.IDToObject( Id_shape1 ) - -mesh = smesh.CreateMesh(shape_mesh) - -idmesh = salome.ObjectToID(mesh) -smeshgui.SetName( idmesh, "Mesh_mechanic" ); - -mesh.AddHypothesis( shape_mesh, alg1 ) # Regular 1D/wire discretisation -mesh.AddHypothesis( shape_mesh, alg2 ) # MEFISTO 2D - -ret = mesh.AddHypothesis( shape_mesh, hyp2 ) # nb segments -ret = mesh.AddHypothesis( shape_mesh, hyp3 ) # max area - -print "--------Add hypothesis and algorith to sub face" - -#sub_face = salome.IDToObject( Id_SubFace ) -submesh = mesh.GetSubMesh(sub_face, "SubMeshFace") - -mesh.AddHypothesis( sub_face, alg3 ) # Quadrangle 2D -mesh.AddHypothesis( sub_face, hyp4 ) # max area - -print "--------Add hypothesis and algorith to sub face 2" - -#sub_face2 = salome.IDToObject( Id_SubFace2 ) -submesh = mesh.GetSubMesh(sub_face2, "SubMeshFace2") - -mesh.AddHypothesis( sub_face2, alg3 ) # Quadrangle 2D -ret = mesh.AddHypothesis( sub_face2, hyp4 ) # max area - -print "--------Add hypothesis and algorith to sub face 3" - -#sub_face3 = salome.IDToObject( Id_SubFace3 ) -submesh = mesh.GetSubMesh(sub_face3, "SubMeshFace3") - -mesh.AddHypothesis( sub_face3, alg3 ) # Quadrangle 2D -ret = mesh.AddHypothesis( sub_face3, hyp4 ) # max area - -print "--------Add hypothesis and algorith to sub face 4" - -#sub_face4 = salome.IDToObject( Id_SubFace4 ) -submesh = mesh.GetSubMesh(sub_face4, "SubMeshFace4") - -mesh.AddHypothesis( sub_face4, alg3 ) # Quadrangle 2D -ret = mesh.AddHypothesis( sub_face4, hyp4 ) # max area - -smesh.Compute(mesh,shape_mesh) +mesh.Compute() print "Information about the Mesh_mechanic:" -print "Number of nodes : ", mesh.NbNodes() -print "Number of edges : ", mesh.NbEdges() -print "Number of faces : ", mesh.NbFaces() -print "Number of triangles : ", mesh.NbTriangles() -print "Number of quadrangles: ", mesh.NbQuadrangles() - -salome.sg.updateObjBrowser(1); +print "Number of nodes : ", mesh.NbNodes() +print "Number of edges : ", mesh.NbEdges() +print "Number of faces : ", mesh.NbFaces() +print "Number of triangles : ", mesh.NbTriangles() +print "Number of quadrangles : ", mesh.NbQuadrangles() +print "Number of volumes : ", mesh.NbVolumes() +print "Number of tetrahedrons: ", mesh.NbTetras() + +salome.sg.updateObjBrowser(1)