X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_SWIG%2FsmeshBuilder.py;h=a37bffc803646fe4721540ff93347b086bd5b76a;hp=1baa0400d148a19a8f5678a64fa5febae0f95314;hb=b3cb4c5a571fe8f36ff6fa5bb90f5d9f122cafad;hpb=08a7d4d04edd8d34b3ee2e229a8e90a16ed10646 diff --git a/src/SMESH_SWIG/smeshBuilder.py b/src/SMESH_SWIG/smeshBuilder.py index 1baa0400d..a37bffc80 100644 --- a/src/SMESH_SWIG/smeshBuilder.py +++ b/src/SMESH_SWIG/smeshBuilder.py @@ -1497,13 +1497,20 @@ class Mesh: print allReasons pass if salome.sg.hasDesktop() and self.mesh.GetStudyId() >= 0: - smeshgui = salome.ImportComponentGUI("SMESH") - smeshgui.Init(self.mesh.GetStudyId()) - smeshgui.SetMeshIcon( salome.ObjectToID( self.mesh ), ok, (self.NbNodes()==0) ) - if refresh: salome.sg.updateObjBrowser(1) - pass + if not isinstance( refresh, list): # not a call from subMesh.Compute() + smeshgui = salome.ImportComponentGUI("SMESH") + smeshgui.Init(self.mesh.GetStudyId()) + smeshgui.SetMeshIcon( salome.ObjectToID( self.mesh ), ok, (self.NbNodes()==0) ) + if refresh: salome.sg.updateObjBrowser(1) + return ok + ## Return a list of error messages (SMESH.ComputeError) of the last Compute() + def GetComputeErrors(self, shape=0 ): + if shape == 0: + shape = self.mesh.GetShapeToMesh() + return self.smeshpyD.GetComputeErrors( self.mesh, shape ) + ## Return a name of a sub-shape by its ID # @param subShapeID a unique ID of a sub-shape # @return a string describing the sub-shape; possible variants: @@ -3814,17 +3821,27 @@ class Mesh: NbOfSteps, Tolerance, MakeGroups, TotalAngle) ## Generates new elements by extrusion of the given elements and nodes - # @param nodes - nodes to extrude: a list including ids, groups, sub-meshes or a mesh - # @param edges - edges to extrude: a list including ids, groups, sub-meshes or a mesh - # @param faces - faces to extrude: a list including ids, groups, sub-meshes or a mesh + # @param nodes nodes to extrude: a list including ids, groups, sub-meshes or a mesh + # @param edges edges to extrude: a list including ids, groups, sub-meshes or a mesh + # @param faces faces to extrude: a list including ids, groups, sub-meshes or a mesh # @param StepVector vector or DirStruct or 3 vector components, defining # the direction and value of extrusion for one step (the total extrusion # length will be NbOfSteps * ||StepVector||) # @param NbOfSteps the number of steps # @param MakeGroups forces the generation of new groups from existing ones + # @param scaleFactors optional scale factors to apply during extrusion + # @param linearVariation if @c True, scaleFactors are spread over all @a scaleFactors, + # else scaleFactors[i] is applied to nodes at the i-th extrusion step + # @param basePoint optional scaling center; if not provided, a gravity center of + # nodes and elements being extruded is used as the scaling center. + # It can be either + # - a list of tree components of the point or + # - a node ID or + # - a GEOM point # @return the list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise # @ingroup l2_modif_extrurev - def ExtrusionSweepObjects(self, nodes, edges, faces, StepVector, NbOfSteps, MakeGroups=False): + def ExtrusionSweepObjects(self, nodes, edges, faces, StepVector, NbOfSteps, MakeGroups=False, + scaleFactors=[], linearVariation=False, basePoint=[] ): unRegister = genObjUnRegister() nodes = self._getIdSourceList( nodes, SMESH.NODE, unRegister ) edges = self._getIdSourceList( edges, SMESH.EDGE, unRegister ) @@ -3835,12 +3852,22 @@ class Mesh: if isinstance( StepVector, list ): StepVector = self.smeshpyD.MakeDirStruct(*StepVector) + if isinstance( basePoint, int): + xyz = self.GetNodeXYZ( basePoint ) + if not xyz: + raise RuntimeError, "Invalid node ID: %s" % basePoint + basePoint = xyz + if isinstance( basePoint, geomBuilder.GEOM._objref_GEOM_Object ): + basePoint = self.geompyD.PointCoordinates( basePoint ) + NbOfSteps,Parameters,hasVars = ParseParameters(NbOfSteps) Parameters = StepVector.PS.parameters + var_separator + Parameters self.mesh.SetParameters(Parameters) return self.editor.ExtrusionSweepObjects( nodes, edges, faces, - StepVector, NbOfSteps, MakeGroups) + StepVector, NbOfSteps, + scaleFactors, linearVariation, basePoint, + MakeGroups) ## Generates new elements by extrusion of the elements with given ids @@ -4975,7 +5002,7 @@ class Mesh: pass # end of Mesh class -## class used to compensate change of CORBA API of SMESH_Mesh for backward compatibility +## Class used to compensate change of CORBA API of SMESH_Mesh for backward compatibility # with old dump scripts which call SMESH_Mesh directly and not via smeshBuilder.Mesh # class meshProxy(SMESH._objref_SMESH_Mesh): @@ -4991,7 +5018,40 @@ class meshProxy(SMESH._objref_SMESH_Mesh): pass omniORB.registerObjref(SMESH._objref_SMESH_Mesh._NP_RepositoryId, meshProxy) -## class used to compensate change of CORBA API of SMESH_MeshEditor for backward compatibility + +## Class wrapping SMESH_SubMesh in order to add Compute() +# +class submeshProxy(SMESH._objref_SMESH_subMesh): + def __init__(self): + SMESH._objref_SMESH_subMesh.__init__(self) + self.mesh = None + def __deepcopy__(self, memo=None): + new = self.__class__() + return new + + ## Computes the sub-mesh and returns the status of the computation + # @param refresh if @c True, Object browser is automatically updated (when running in GUI) + # @return True or False + # @ingroup l2_construct + def Compute(self,refresh=False): + if not self.mesh: + self.mesh = Mesh( smeshBuilder(), None, self.GetMesh()) + + ok = self.mesh.Compute( self.GetSubShape(),refresh=[] ) + + if salome.sg.hasDesktop() and self.mesh.GetStudyId() >= 0: + smeshgui = salome.ImportComponentGUI("SMESH") + smeshgui.Init(self.mesh.GetStudyId()) + smeshgui.SetMeshIcon( salome.ObjectToID( self ), ok, (self.GetNumberOfElements()==0) ) + if refresh: salome.sg.updateObjBrowser(1) + pass + + return ok + pass +omniORB.registerObjref(SMESH._objref_SMESH_subMesh._NP_RepositoryId, submeshProxy) + + +## Class used to compensate change of CORBA API of SMESH_MeshEditor for backward compatibility # with old dump scripts which call SMESH_MeshEditor directly and not via smeshBuilder.Mesh # class meshEditor(SMESH._objref_SMESH_MeshEditor): @@ -5103,7 +5163,7 @@ class algoCreator: raise RuntimeError, "No class found for algo type %s" % algoType return None -# Private class used to substitute and store variable parameters of hypotheses. +## Private class used to substitute and store variable parameters of hypotheses. # class hypMethodWrapper: def __init__(self, hyp, method): @@ -5134,7 +5194,8 @@ class hypMethodWrapper: return result pass -# A helper class that call UnRegister() of SALOME.GenericObj'es stored in it +## A helper class that call UnRegister() of SALOME.GenericObj'es stored in it +# class genObjUnRegister: def __init__(self, genObj=None): @@ -5155,6 +5216,9 @@ class genObjUnRegister: if genObj and hasattr( genObj, "UnRegister" ): genObj.UnRegister() + +## Bind methods creating mesher plug-ins to the Mesh class +# for pluginName in os.environ[ "SMESH_MeshersList" ].split( ":" ): # #print "pluginName: ", pluginName