X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_SWIG%2FStdMeshersBuilder.py;h=0d6a55acbf8d98a54093e5566d24875220cf8562;hp=4e5b2d217cf13a4f5c29ad59304fb1cc18930c79;hb=05a38ac54ef63d2013e30033d2a308af0fc8dad5;hpb=f7aba4830d53719b963fdb7fccc98b760fdef2d1 diff --git a/src/SMESH_SWIG/StdMeshersBuilder.py b/src/SMESH_SWIG/StdMeshersBuilder.py index 4e5b2d217..0d6a55acb 100644 --- a/src/SMESH_SWIG/StdMeshersBuilder.py +++ b/src/SMESH_SWIG/StdMeshersBuilder.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 @@ -385,7 +385,7 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm): algo = self.mesh.smeshpyD.CreateHypothesis("SegmentAroundVertex_0D", "libStdMeshersEngine.so") pass status = self.mesh.mesh.AddHypothesis(self.geom, algo) - TreatHypoStatus(status, "SegmentAroundVertex_0D", name, True) + TreatHypoStatus(status, "SegmentAroundVertex_0D", name, True, self.mesh) # from salome.smesh.smeshBuilder import IsEqual comFun = lambda hyp, args: IsEqual(hyp.GetLength(), args[0]) @@ -597,7 +597,7 @@ class StdMeshersBuilder_Quadrangle(Mesh_Algorithm): # must be created by the mesher. Shapes can be of any type, # vertices of given shapes define positions of enforced nodes. # Only vertices successfully projected to the face are used. - # @param enfPoint: list of points giving positions of enforced nodes. + # @param enfPoints: list of points giving positions of enforced nodes. # Point can be defined either as SMESH.PointStruct's # ([SMESH.PointStruct(x1,y1,z1), SMESH.PointStruct(x2,y2,z2),...]) # or triples of values ([[x1,y1,z1], [x2,y2,z2], ...]). @@ -1400,22 +1400,21 @@ class StdMeshersBuilder_Cartesian_3D(Mesh_Algorithm): # Examples: # - "10.5" - defines a grid with a constant spacing # - [["1", "1+10*t", "11"] [0.1, 0.6]] - defines different spacing in 3 ranges. - # @param yGridDef defines the grid along the Y asix the same way as \a xGridDef does - # @param zGridDef defines the grid along the Z asix the same way as \a xGridDef does + # @param yGridDef defines the grid along the Y asix the same way as \a xGridDef does. + # @param zGridDef defines the grid along the Z asix the same way as \a xGridDef does. # @param sizeThreshold (> 1.0) defines a minimal size of a polyhedron so that - # a polyhedron of size less than hexSize/sizeThreshold is not created - # @param UseExisting if ==true - searches for the existing hypothesis created with - # the same parameters, else (default) - creates a new one - def SetGrid(self, xGridDef, yGridDef, zGridDef, sizeThreshold=4.0, UseExisting=False): + # a polyhedron of size less than hexSize/sizeThreshold is not created. + # @param implEdges enables implementation of geometrical edges into the mesh. + def SetGrid(self, xGridDef, yGridDef, zGridDef, sizeThreshold=4.0, implEdges=False): if not self.hyp: compFun = lambda hyp, args: False self.hyp = self.Hypothesis("CartesianParameters3D", [xGridDef, yGridDef, zGridDef, sizeThreshold], - UseExisting=UseExisting, CompareMethod=compFun) + UseExisting=False, CompareMethod=compFun) if not self.mesh.IsUsedHypothesis( self.hyp, self.geom ): self.mesh.AddHypothesis( self.hyp, self.geom ) - for axis, gridDef in enumerate( [xGridDef, yGridDef, zGridDef]): + for axis, gridDef in enumerate( [xGridDef, yGridDef, zGridDef] ): if not gridDef: raise ValueError, "Empty grid definition" if isinstance( gridDef, str ): self.hyp.SetGridSpacing( [gridDef], [], axis ) @@ -1427,8 +1426,69 @@ class StdMeshersBuilder_Cartesian_3D(Mesh_Algorithm): else: self.hyp.SetGridSpacing( gridDef[0], gridDef[1], axis ) self.hyp.SetSizeThreshold( sizeThreshold ) + self.hyp.SetToAddEdges( implEdges ) + return self.hyp + + ## Defines custom directions of axes of the grid + # @param xAxis either SMESH.DirStruct or a vector, or 3 vector components + # @param yAxis either SMESH.DirStruct or a vector, or 3 vector components + # @param zAxis either SMESH.DirStruct or a vector, or 3 vector components + def SetAxesDirs( self, xAxis, yAxis, zAxis ): + import GEOM + if hasattr( xAxis, "__getitem__" ): + xAxis = self.mesh.smeshpyD.MakeDirStruct( xAxis[0],xAxis[1],xAxis[2] ) + elif isinstance( xAxis, GEOM._objref_GEOM_Object ): + xAxis = self.mesh.smeshpyD.GetDirStruct( xAxis ) + if hasattr( yAxis, "__getitem__" ): + yAxis = self.mesh.smeshpyD.MakeDirStruct( yAxis[0],yAxis[1],yAxis[2] ) + elif isinstance( yAxis, GEOM._objref_GEOM_Object ): + yAxis = self.mesh.smeshpyD.GetDirStruct( yAxis ) + if hasattr( zAxis, "__getitem__" ): + zAxis = self.mesh.smeshpyD.MakeDirStruct( zAxis[0],zAxis[1],zAxis[2] ) + elif isinstance( zAxis, GEOM._objref_GEOM_Object ): + zAxis = self.mesh.smeshpyD.GetDirStruct( zAxis ) + if not self.hyp: + self.hyp = self.Hypothesis("CartesianParameters3D") + if not self.mesh.IsUsedHypothesis( self.hyp, self.geom ): + self.mesh.AddHypothesis( self.hyp, self.geom ) + self.hyp.SetAxesDirs( xAxis, yAxis, zAxis ) + return self.hyp + + ## Automatically defines directions of axes of the grid at which + # a number of generated hexahedra is maximal + # @param isOrthogonal defines whether the axes mush be orthogonal + def SetOptimalAxesDirs(self, isOrthogonal=True): + if not self.hyp: + self.hyp = self.Hypothesis("CartesianParameters3D") + if not self.mesh.IsUsedHypothesis( self.hyp, self.geom ): + self.mesh.AddHypothesis( self.hyp, self.geom ) + x,y,z = self.hyp.ComputeOptimalAxesDirs( self.geom, isOrthogonal ) + self.hyp.SetAxesDirs( x,y,z ) return self.hyp + ## Sets/unsets a fixed point. The algorithm makes a plane of the grid pass + # through the fixed point in each direction at which the grid is defined + # by spacing + # @param p coordinates of the fixed point. Either SMESH.PointStruct or + # a vertex or 3 components of coordinates. + # @param toUnset defines whether the fixed point is defined or removed. + def SetFixedPoint( self, p, toUnset=False ): + import SMESH, GEOM + if toUnset: + if not self.hyp: return + p = SMESH.PointStruct(0,0,0) + elif hasattr( p, "__getitem__" ): + p = SMESH.PointStruct( p[0],p[1],p[2] ) + elif isinstance( p, GEOM._objref_GEOM_Object ): + p = self.mesh.smeshpyD.GetPointStruct( p ) + if not self.hyp: + self.hyp = self.Hypothesis("CartesianParameters3D") + if not self.mesh.IsUsedHypothesis( self.hyp, self.geom ): + self.mesh.AddHypothesis( self.hyp, self.geom ) + self.hyp.SetFixedPoint( p, toUnset ) + return self.hyp + + pass # end of StdMeshersBuilder_Cartesian_3D class ## Defines a stub 1D algorithm, which enables "manual" creation of nodes and