X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_SWIG%2Fsmesh.py;h=92a88aaf3ac2364294328bb88c2ff852c24863de;hp=50df727f9aa4f5aa0ec9b61d52aaf30b3d842b78;hb=c21442db90073d240f66d88902767e12b619247b;hpb=15549165c3faa2be13dfb2df8676b2bad9e9b64c diff --git a/src/SMESH_SWIG/smesh.py b/src/SMESH_SWIG/smesh.py index 50df727f9..92a88aaf3 100644 --- a/src/SMESH_SWIG/smesh.py +++ b/src/SMESH_SWIG/smesh.py @@ -1,557 +1,122 @@ -# Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE # -# 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. +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS # -# 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. +# 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. # -# 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 +# 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. # -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +# 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.py # Author : Francis KLOSS, OCC # Module : SMESH - -""" - \namespace smesh +# +"""@package smesh \brief Module smesh """ +import inspect import salome -import geompy -import StdMeshers -import SMESH - -# Public variables -# ---------------- - -REGULAR = 1 -PYTHON = 2 - -NETGEN = 3 -GHS3D = 4 - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -# Private functions -# ----------------- - -NO_NAME = "NoName" - -def GetName(obj): - ior = salome.orb.object_to_string(obj) - sobj = salome.myStudy.FindObjectIOR(ior) - if sobj is None: - return NO_NAME - else: - attr = sobj.FindAttribute("AttributeName")[1] - return attr.Value() - -def SetName(obj, name): - ior = salome.orb.object_to_string(obj) - sobj = salome.myStudy.FindObjectIOR(ior) - attr = sobj.FindAttribute("AttributeName")[1] - attr.SetValue(name) - -# Algorithms and hypothesis -# ========================= - -# Private class: Mesh_Algorithm -# ----------------------------- - -class Mesh_Algorithm: - """ - Mother class to define algorithm, recommended to don't use directly - """ - - mesh = 0 - geom = 0 - subm = 0 - - def GetSubMesh(self): - """ - If the algorithm is global, return 0 - else return the submesh associated to this algorithm - """ - return self.subm - - def Create(self, mesh, geom, hypo, so="libStdMeshersEngine.so"): - """ - Private method - """ - self.mesh = mesh - piece = mesh.geom - if geom==0: - self.geom = piece - name = GetName(piece) - else: - self.geom = geom - name = GetName(geom) - if name==NO_NAME: - name = geompy.SubShapeName(geom, piece) - geompy.addToStudyInFather(piece, geom, name) - self.subm = mesh.mesh.GetSubMesh(geom, hypo) - - algo = smesh.CreateHypothesis(hypo, so) - SetName(algo, name + "/" + hypo) - mesh.mesh.AddHypothesis(self.geom, algo) - - def Hypothesis(self, hyp, args=[], so="libStdMeshersEngine.so"): - """ - Private method - """ - hypo = smesh.CreateHypothesis(hyp, so) - a = "" - s = "=" - i = 0 - n = len(args) - while i 0 : - return 3 - elif geompy.NumberOfFaces( self.geom ) > 0 : - return 2 - elif geompy.NumberOfEdges( self.geom ) > 0 : - return 1 - else: - return 0; - pass - - def Segment(self, algo=REGULAR, geom=0): - """ - Creates a segment discretization 1D algorithm. - If the optional \a algo parameter is not sets, this algorithm is REGULAR. - If the optional \a geom parameter is not sets, this algorithm is global. - Otherwise, this algorithm define a submesh based on \a geom subshape. - \param algo values are smesh.REGULAR or smesh.PYTHON for discretization via python function - \param geom If defined, subshape to be meshed - """ - if algo == REGULAR: - return Mesh_Segment(self, geom) - elif algo == PYTHON: - return Mesh_Segment_Python(self, geom) - else: - return Mesh_Segment(self, algo) - - def Triangle(self, geom=0): - """ - Creates a triangle 2D algorithm for faces. - If the optional \a geom parameter is not sets, this algorithm is global. - Otherwise, this algorithm define a submesh based on \a geom subshape. - \param geom If defined, subshape to be meshed - """ - return Mesh_Triangle(self, geom) - - def Quadrangle(self, geom=0): - """ - Creates a quadrangle 2D algorithm for faces. - If the optional \a geom parameter is not sets, this algorithm is global. - Otherwise, this algorithm define a submesh based on \a geom subshape. - \param geom If defined, subshape to be meshed - """ - return Mesh_Quadrangle(self, geom) - - def Tetrahedron(self, algo, geom=0): - """ - Creates a tetrahedron 3D algorithm for solids. - The parameter \a algo permits to choice the algorithm: NETGEN or GHS3D - If the optional \a geom parameter is not sets, this algorithm is global. - Otherwise, this algorithm define a submesh based on \a geom subshape. - \param algo values are: smesh.NETGEN, smesh.GHS3D - \param geom If defined, subshape to be meshed - """ - return Mesh_Tetrahedron(self, algo, geom) - - def Hexahedron(self, geom=0): - """ - Creates a hexahedron 3D algorithm for solids. - If the optional \a geom parameter is not sets, this algorithm is global. - Otherwise, this algorithm define a submesh based on \a geom subshape. - \param geom If defined, subshape to be meshed - """ - return Mesh_Hexahedron(self, geom) - - def Compute(self): - """ - Compute the mesh and return the status of the computation - """ - b = smesh.Compute(self.mesh, self.geom) - if salome.sg.hasDesktop(): - smeshgui = salome.ImportComponentGUI("SMESH") - smeshgui.Init(salome.myStudyId) - smeshgui.SetMeshIcon( salome.ObjectToID( self.mesh ), b ) - salome.sg.updateObjBrowser(1) - return b +import geompy - def AutomaticTetrahedralization(self): - """ - Compute tetrahedral mesh using AutomaticLength + MEFISTO + NETGEN - """ - dim = self.MeshDimension() - # assign hypotheses - self.RemoveGlobalHypotheses() - self.Segment().AutomaticLength() - if dim > 1 : - self.Triangle().LengthFromEdges() - pass - if dim > 2 : - self.Tetrahedron(NETGEN) +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +# retrieve SMESH engine in try/except block +# to avoid problems in some cases, e.g. when generating documentation +try: + # get instance of class smeshBuilder + engineSmesh = salome.lcc.FindOrLoadComponent( "FactoryServer", "SMESH" ) + smesh = smeshBuilder.New(True,engineSmesh) +except: + print("exception in smesh.py: instance creation failed") + smesh = None + pass + +# load plugins and add dynamically generated methods to Mesh class, +# the same for global variables declared by plug-ins +from salome.smesh.smeshBuilder import * +from salome.smesh.smeshBuilder import Mesh, algoCreator +for pluginName in os.environ[ "SMESH_MeshersList" ].split( ":" ): + # + #print "pluginName: ", pluginName + pluginBuilderName = pluginName + "Builder" + try: + exec( "from salome.%s.%s import *" % (pluginName, pluginBuilderName)) + except Exception as e: + from salome_utils import verbose + if verbose(): print("Exception while loading %s: %s" % ( pluginBuilderName, e )) + continue + exec( "from salome.%s import %s" % (pluginName, pluginBuilderName)) + plugin = eval( pluginBuilderName ) + + # add methods creating algorithms to Mesh + for k in dir( plugin ): + if k[0] == '_': continue + algo = getattr( plugin, k ) + if inspect.isclass(algo) and hasattr(algo, "meshMethod"): + if not hasattr( Mesh, algo.meshMethod ): + setattr( Mesh, algo.meshMethod, algoCreator() ) + pass + getattr( Mesh, algo.meshMethod ).add( algo ) pass - self.Compute() pass + pass +del pluginName - def AutomaticHexahedralization(self): - """ - Compute hexahedral mesh using AutomaticLength + Quadrangle + Hexahedron - """ - dim = self.MeshDimension() - # assign hypotheses - self.RemoveGlobalHypotheses() - self.Segment().AutomaticLength() - if dim > 1 : - self.Quadrangle() - pass - if dim > 2 : - self.Hexahedron() - pass - self.Compute() - pass +# export the methods of smeshBuilder +if smesh: + for k in dir( smesh ): + if k[0] == '_': continue + globals()[k] = getattr( smesh, k ) + del k + pass - def RemoveGlobalHypotheses(self): - """ - Removes all global hypotheses - """ - current_hyps = self.mesh.GetHypothesisList( self.geom ) - for hyp in current_hyps: - self.mesh.RemoveHypothesis( self.geom, hyp ) - pass - pass +print(""" +=============================================================================== +WARNING: +Usage of smesh.py is deprecated in SALOME V7.2! +smesh.py will be removed in a future version! +TODO: +The following changes in your scripts are required to avoid this message: - def Group(self, grp, name=""): - """ - Create a mesh group based on geometric object \a grp - and give a \a name, if this parameter is not defined - the name is the same as the geometric group name - \param grp is a geometric group, a vertex, an edge, a face or a solid - \param name is the name of the mesh group - """ - if name == "": - name = grp.GetName() +replace +------- - type = [] - tgeo = str(grp.GetShapeType()) - if tgeo == "VERTEX": - type = SMESH.NODE - elif tgeo == "EDGE": - type = SMESH.EDGE - elif tgeo == "FACE": - type = SMESH.FACE - elif tgeo == "SOLID": - type = SMESH.VOLUME - elif tgeo == "SHELL": - type = SMESH.VOLUME - elif tgeo == "COMPOUND": - tgeo = geompy.GetType(grp) - if tgeo == geompy.ShapeType["VERTEX"]: - type = SMESH.NODE - elif tgeo == geompy.ShapeType["EDGE"]: - type = SMESH.EDGE - elif tgeo == geompy.ShapeType["FACE"]: - type = SMESH.FACE - elif tgeo == geompy.ShapeType["SOLID"]: - type = SMESH.VOLUME +import smesh, SMESH - if type == []: - print "Mesh.Group: bad first argument: expected a group, a vertex, an edge, a face or a solid" - return 0 - else: - return self.mesh.CreateGroupFromGEOM(type, name, grp) +with +---- + +import SMESH +from salome.smesh import smeshBuilder +smesh = smeshBuilder.New() - def ExportToMED(self, f, version, opt=0): - """ - Export the mesh in a file with the MED format and choice the \a version of MED format - \param f is the file name - \param version values are smesh.MED_V2_1, smesh.MED_V2_2 - """ - self.mesh.ExportToMED(f, opt, version) +you also need to modify some lines where smeshBuilder is used instead of smesh - def ExportMED(self, f, opt=0): - """ - Export the mesh in a file with the MED format - \param f is the file name - """ - self.mesh.ExportMED(f, opt) +algo=smesh.xxxx ==> algo=smeshBuilder.xxxx - def ExportDAT(self, f): - """ - Export the mesh in a file with the DAT format - \param f is the file name - """ - self.mesh.ExportDAT(f) +See also SMESH User's Guide for more details - def ExportUNV(self, f): - """ - Export the mesh in a file with the UNV format - \param f is the file name - """ - self.mesh.ExportUNV(f) +WARNING: +The smesh.py module works correctly only in the first created study. +It does not work in the second, third, etc studies! - def ExportSTL(self, f, ascii=1): - """ - Export the mesh in a file with the STL format - \param f is the file name - \param ascii defined the kind of file contents - """ - self.mesh.ExportSTL(f, ascii) +=============================================================================== +""")