X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_SWIG%2FsmeshBuilder.py;h=262685a4324ed370f9174507adea3bc1170994ff;hp=779aeb24e2790f16e160c342bf73fb7dbb9c097b;hb=e8af590068866acaacd724c667089dc7ab3572f5;hpb=c94d606fe399faeb356151a1a9754e5f21754082 diff --git a/src/SMESH_SWIG/smeshBuilder.py b/src/SMESH_SWIG/smeshBuilder.py index 779aeb24e..262685a43 100644 --- a/src/SMESH_SWIG/smeshBuilder.py +++ b/src/SMESH_SWIG/smeshBuilder.py @@ -1,9 +1,9 @@ -# Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2014 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. +# 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 @@ -93,6 +93,16 @@ import SALOME import SALOMEDS import os +class MeshMeta(type): + def __instancecheck__(cls, inst): + """Implement isinstance(inst, cls).""" + return any(cls.__subclasscheck__(c) + for c in {type(inst), inst.__class__}) + + def __subclasscheck__(cls, sub): + """Implement issubclass(sub, cls).""" + return type.__subclasscheck__(cls, sub) or (cls.__name__ == sub.__name__ and cls.__module__ == sub.__module__) + ## @addtogroup l1_auxiliary ## @{ @@ -1144,6 +1154,7 @@ def New( study, instance=None): # new nodes and elements and by changing the existing entities), to get information # about a mesh and to export a mesh into different formats. class Mesh: + __metaclass__ = MeshMeta geom = 0 mesh = 0 @@ -1552,13 +1563,24 @@ class Mesh: if not geom: geom = self.mesh.GetShapeToMesh() pass - AssureGeomPublished( self, geom, "shape for %s" % hyp.GetName()) - status = self.mesh.AddHypothesis(geom, hyp) - isAlgo = hyp._narrow( SMESH_Algo ) + isApplicable = True + if self.mesh.HasShapeToMesh(): + hyp_type = hyp.GetName() + lib_name = hyp.GetLibName() + checkAll = ( not geom.IsSame( self.mesh.GetShapeToMesh() )) + if checkAll and geom: + checkAll = geom.GetType() == 37 + isApplicable = self.smeshpyD.IsApplicable(hyp_type, lib_name, geom, checkAll) + if isApplicable: + AssureGeomPublished( self, geom, "shape for %s" % hyp.GetName()) + status = self.mesh.AddHypothesis(geom, hyp) + else: + status = HYP_BAD_GEOMETRY hyp_name = GetName( hyp ) geom_name = "" if geom: - geom_name = GetName( geom ) + geom_name = geom.GetName() + isAlgo = hyp._narrow( SMESH_Algo ) TreatHypoStatus( status, hyp_name, geom_name, isAlgo ) return status @@ -1630,17 +1652,24 @@ class Mesh: # - 1D if all mesh nodes lie on OX coordinate axis, or # - 2D if all mesh nodes lie on XOY coordinate plane, or # - 3D in the rest cases. - # # If @a autoDimension is @c False, the space dimension is always 3. + # @param fields : list of GEOM fields defined on the shape to mesh. + # @param geomAssocFields : each character of this string means a need to export a + # corresponding field; correspondence between fields and characters is following: + # - 'v' stands for _vertices_ field; + # - 'e' stands for _edges_ field; + # - 'f' stands for _faces_ field; + # - 's' stands for _solids_ field. # @ingroup l2_impexp def ExportMED(self, f, auto_groups=0, version=MED_V2_2, - overwrite=1, meshPart=None, autoDimension=True): - if meshPart: + overwrite=1, meshPart=None, autoDimension=True, fields=[], geomAssocFields=''): + if meshPart or fields or geomAssocFields: unRegister = genObjUnRegister() if isinstance( meshPart, list ): meshPart = self.GetIDSource( meshPart, SMESH.ALL ) unRegister.set( meshPart ) - self.mesh.ExportPartToMED( meshPart, f, auto_groups, version, overwrite, autoDimension) + self.mesh.ExportPartToMED( meshPart, f, auto_groups, version, overwrite, autoDimension, + fields, geomAssocFields) else: self.mesh.ExportToMEDX(f, auto_groups, version, overwrite, autoDimension) @@ -1901,7 +1930,7 @@ class Mesh: def RemoveGroupWithContents(self, group): self.mesh.RemoveGroupWithContents(group) - ## Gets the list of groups existing in the mesh + ## Gets the list of groups existing in the mesh in the order of creation (starting from the oldest one) # @return a sequence of SMESH_GroupBase # @ingroup l2_grps_create def GetGroups(self): @@ -4596,7 +4625,7 @@ class Mesh: return self._valueFromFunctor(SMESH.FT_Skew, elemId) pass # end of Mesh class - + ## Helper class for wrapping of SMESH.SMESH_Pattern CORBA class # class Pattern(SMESH._objref_SMESH_Pattern):