X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_SWIG%2FsmeshBuilder.py;h=8f49d4937cd8d07035f7a8d1bbdd4d2f2e37c5d3;hb=refs%2Ftags%2FV7_7_0b1;hp=6cf59af32446d9313fbb24532da89aaf26fd6d8b;hpb=1dd2f82c6d43d470c088288248edea674d583eec;p=modules%2Fsmesh.git diff --git a/src/SMESH_SWIG/smeshBuilder.py b/src/SMESH_SWIG/smeshBuilder.py index 6cf59af32..8f49d4937 100644 --- a/src/SMESH_SWIG/smeshBuilder.py +++ b/src/SMESH_SWIG/smeshBuilder.py @@ -4519,6 +4519,52 @@ class Mesh: def MergeEqualElements(self): self.editor.MergeEqualElements() + ## Returns groups of FreeBorder's coincident within the given tolerance. + # @param tolerance the tolerance. If the tolerance <= 0.0 then one tenth of an average + # size of elements adjacent to free borders being compared is used. + # @return SMESH.CoincidentFreeBorders structure + # @ingroup l2_modif_trsf + def FindCoincidentFreeBorders (self, tolerance=0.): + return self.editor.FindCoincidentFreeBorders( tolerance ) + + ## Sew FreeBorder's of each group + # @param freeBorders either a SMESH.CoincidentFreeBorders structure or a list of lists + # where each enclosed list contains node IDs of a group of coincident free + # borders such that each consequent triple of IDs within a group describes + # a free border in a usual way: n1, n2, nLast - i.e. 1st node, 2nd node and + # last node of a border. + # For example [[1, 2, 10, 20, 21, 40], [11, 12, 15, 55, 54, 41]] describes two + # groups of coincident free borders, each group including two borders. + # @param createPolygons if @c True faces adjacent to free borders are converted to + # polygons if a node of opposite border falls on a face edge, else such + # faces are split into several ones. + # @param createPolyhedra if @c True volumes adjacent to free borders are converted to + # polyhedra if a node of opposite border falls on a volume edge, else such + # volumes, if any, remain intact and the mesh becomes non-conformal. + # @return a number of successfully sewed groups + # @ingroup l2_modif_trsf + def SewCoincidentFreeBorders (self, freeBorders, createPolygons=False, createPolyhedra=False): + if freeBorders and isinstance( freeBorders, list ): + # construct SMESH.CoincidentFreeBorders + if isinstance( freeBorders[0], int ): + freeBorders = [freeBorders] + borders = [] + coincidentGroups = [] + for nodeList in freeBorders: + if not nodeList or len( nodeList ) % 3: + raise ValueError, "Wrong number of nodes in this group: %s" % nodeList + group = [] + while nodeList: + group.append ( SMESH.FreeBorderPart( len(borders), 0, 1, 2 )) + borders.append( SMESH.FreeBorder( nodeList[:3] )) + nodeList = nodeList[3:] + pass + coincidentGroups.append( group ) + pass + freeBorders = SMESH.CoincidentFreeBorders( borders, coincidentGroups ) + + return self.editor.SewCoincidentFreeBorders( freeBorders, createPolygons, createPolyhedra ) + ## Sews free borders # @return SMESH::Sew_Error # @ingroup l2_modif_trsf @@ -4981,6 +5027,13 @@ omniORB.registerObjref(SMESH._objref_SMESH_MeshEditor._NP_RepositoryId, meshEdit # class Pattern(SMESH._objref_SMESH_Pattern): + def LoadFromFile(self, patternTextOrFile ): + text = patternTextOrFile + if os.path.exists( text ): + text = open( patternTextOrFile ).read() + pass + return SMESH._objref_SMESH_Pattern.LoadFromFile( self, text ) + def ApplyToMeshFaces(self, theMesh, theFacesIDs, theNodeIndexOnKeyPoint1, theReverse): decrFun = lambda i: i-1 theNodeIndexOnKeyPoint1,Parameters,hasVars = ParseParameters(theNodeIndexOnKeyPoint1, decrFun) @@ -4993,6 +5046,11 @@ class Pattern(SMESH._objref_SMESH_Pattern): theMesh.SetParameters(Parameters) return SMESH._objref_SMESH_Pattern.ApplyToHexahedrons( self, theMesh, theVolumesIDs, theNode000Index, theNode001Index ) + def MakeMesh(self, mesh, CreatePolygons=False, CreatePolyhedra=False): + if isinstance( mesh, Mesh ): + mesh = mesh.GetMesh() + return SMESH._objref_SMESH_Pattern.MakeMesh( self, mesh, CreatePolygons, CreatePolyhedra ) + # Registering the new proxy for Pattern omniORB.registerObjref(SMESH._objref_SMESH_Pattern._NP_RepositoryId, Pattern)