Salome HOME
rnc : gived some details about ExtrusionSweepObjectXD in documentation
[modules/smesh.git] / src / SMESH_SWIG / smeshDC.py
index 3e52108c653cc8a1f550b5125cf9913cef07f1c3..c13932a4f911fadddc8aba4d572b61698ea32726 100644 (file)
@@ -1,4 +1,3 @@
-#  -*- coding: iso-8859-1 -*-
 #  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
 #
 #  This library is free software; you can redistribute it and/or
@@ -569,7 +568,7 @@ class smeshDC(SMESH._objref_SMESH_Gen):
     #  @return SMESH.AxisStruct
     #  @ingroup l1_auxiliary
     def GetAxisStruct(self,theObj):
-        edges = self.geompyD.ExtractShapes( theObj, geompyDC.ShapeType["EDGE"] )
+        edges = self.geompyD.SubShapeAll( theObj, geompyDC.ShapeType["EDGE"] )
         if len(edges) > 1:
             vertex1, vertex2 = self.geompyD.SubShapeAll( edges[0], geompyDC.ShapeType["VERTEX"] )
             vertex3, vertex4 = self.geompyD.SubShapeAll( edges[1], geompyDC.ShapeType["VERTEX"] )
@@ -787,6 +786,10 @@ class smeshDC(SMESH._objref_SMESH_Gen):
             else:
                 print "Error: The treshold should be a shape."
                 return None
+            if isinstance(UnaryOp,float):
+                aCriterion.Tolerance = UnaryOp
+                UnaryOp = FT_Undefined
+                pass
         elif CritType == FT_RangeOfIds:
             # Checks the treshold
             if isinstance(aTreshold, str):
@@ -880,7 +883,7 @@ class smeshDC(SMESH._objref_SMESH_Gen):
         aCriteria = []
         aCriteria.append(aCriterion)
         aFilter.SetCriteria(aCriteria)
-        aFilterMgr.Destroy()
+        aFilterMgr.UnRegister()
         return aFilter
 
     ## Creates a numerical functor by its type
@@ -1005,7 +1008,7 @@ class smeshDC(SMESH._objref_SMESH_Gen):
             pass
         aMeasurements = self.CreateMeasurements()
         result = aMeasurements.MinDistance(src1, src2)
-        aMeasurements.Destroy()
+        aMeasurements.UnRegister()
         return result
 
     ## Get bounding box of the specified object(s)
@@ -1042,7 +1045,7 @@ class smeshDC(SMESH._objref_SMESH_Gen):
             pass
         aMeasurements = self.CreateMeasurements()
         result = aMeasurements.BoundingBox(srclist)
-        aMeasurements.Destroy()
+        aMeasurements.UnRegister()
         return result
 
 import omniORB
@@ -1081,7 +1084,16 @@ class Mesh:
         if obj != 0:
             if isinstance(obj, geompyDC.GEOM._objref_GEOM_Object):
                 self.geom = obj
+                # publish geom of mesh (issue 0021122)
+                if not self.geom.GetStudyEntry():
+                    studyID = smeshpyD.GetCurrentStudy()._get_StudyId()
+                    if studyID != geompyD.myStudyId:
+                        geompyD.init_geom( smeshpyD.GetCurrentStudy())
+                        pass
+                    geo_name = "%s_%s"%(self.geom.GetShapeType(), id(self.geom)%100)
+                    geompyD.addToStudy( self.geom, geo_name )
                 self.mesh = self.smeshpyD.CreateMesh(self.geom)
+
             elif isinstance(obj, SMESH._objref_SMESH_Mesh):
                 self.SetMesh(obj)
         else:
@@ -1352,8 +1364,8 @@ class Mesh:
         shape = geom
         if shape==0:
             shape = self.geom
-        nbSolids = len( self.geompyD.ExtractShapes( shape, geompyDC.ShapeType["SOLID"] ))
-        nbShells = len( self.geompyD.ExtractShapes( shape, geompyDC.ShapeType["SHELL"] ))
+        nbSolids = len( self.geompyD.SubShapeAll( shape, geompyDC.ShapeType["SOLID"] ))
+        nbShells = len( self.geompyD.SubShapeAll( shape, geompyDC.ShapeType["SHELL"] ))
         if nbSolids == 0 or nbSolids == nbShells:
             return Mesh_Prism3D(self,  geom)
         return Mesh_RadialPrism3D(self,  geom)
@@ -1794,7 +1806,7 @@ class Mesh:
         aCriteria.append(Criterion)
         aFilter.SetCriteria(aCriteria)
         group = self.MakeGroupByFilter(groupName, aFilter)
-        aFilterMgr.Destroy()
+        aFilterMgr.UnRegister()
         return group
 
     ## Creates a mesh group by the given criteria (list of criteria)
@@ -1807,7 +1819,7 @@ class Mesh:
         aFilter = aFilterMgr.CreateFilter()
         aFilter.SetCriteria(theCriteria)
         group = self.MakeGroupByFilter(groupName, aFilter)
-        aFilterMgr.Destroy()
+        aFilterMgr.UnRegister()
         return group
 
     ## Creates a mesh group by the given filter
@@ -1838,7 +1850,7 @@ class Mesh:
         aPredicate = aFilterMgr.CreateFreeEdges()
         aPredicate.SetMesh(self.mesh)
         aBorders = aPredicate.GetBorders()
-        aFilterMgr.Destroy()
+        aFilterMgr.UnRegister()
         return aBorders
 
     ## Removes a group
@@ -1921,10 +1933,10 @@ class Mesh:
     def CutListOfGroups(self, main_groups, tool_groups, name):
       return self.mesh.CutListOfGroups(main_groups, tool_groups, name)
 
-    ## Produces a group of elements with specified element type using list of existing groups
+    ## Produces a group of elements of specified type using list of existing groups
     #  A new group is created. System
-    #  1) extract all nodes on which groups elements are built
-    #  2) combine all elements of specified dimension laying on these nodes
+    #  1) extracts all nodes on which groups elements are built
+    #  2) combines all elements of specified dimension laying on these nodes
     #  @return an instance of SMESH_Group
     #  @ingroup l2_grps_operon
     def CreateDimGroup(self, groups, elem_type, name):
@@ -2402,7 +2414,7 @@ class Mesh:
 
         aMeasurements = self.smeshpyD.CreateMeasurements()
         aMeasure = aMeasurements.MinDistance(id1, id2)
-        aMeasurements.Destroy()
+        aMeasurements.UnRegister()
         return aMeasure
 
     ## Get bounding box of the specified object(s)
@@ -2451,7 +2463,7 @@ class Mesh:
             pass
         aMeasurements = self.smeshpyD.CreateMeasurements()
         aMeasure = aMeasurements.BoundingBox(srclist)
-        aMeasurements.Destroy()
+        aMeasurements.UnRegister()
         return aMeasure
 
     # Mesh edition (SMESH_MeshEditor functionality):
@@ -3046,19 +3058,26 @@ class Mesh:
     ## Converts the mesh to quadratic, deletes old elements, replacing
     #  them with quadratic with the same id.
     #  @param theForce3d new node creation method:
-    #         0 - the medium node lies at the geometrical edge from which the mesh element is built
+    #         0 - the medium node lies at the geometrical entity from which the mesh element is built
     #         1 - the medium node lies at the middle of the line segments connecting start and end node of a mesh element
+    #  @param theSubMesh a group or a sub-mesh to convert; WARNING: in this case the mesh can become not conformal
     #  @ingroup l2_modif_tofromqu
-    def ConvertToQuadratic(self, theForce3d):
-        self.editor.ConvertToQuadratic(theForce3d)
+    def ConvertToQuadratic(self, theForce3d, theSubMesh=None):
+        if theSubMesh:
+            self.editor.ConvertToQuadraticObject(theForce3d,theSubMesh)
+        else:
+            self.editor.ConvertToQuadratic(theForce3d)
 
     ## Converts the mesh from quadratic to ordinary,
     #  deletes old quadratic elements, \n replacing
     #  them with ordinary mesh elements with the same id.
-    #  @return TRUE in case of success, FALSE otherwise.
+    #  @param theSubMesh a group or a sub-mesh to convert; WARNING: in this case the mesh can become not conformal
     #  @ingroup l2_modif_tofromqu
-    def ConvertFromQuadratic(self):
-        return self.editor.ConvertFromQuadratic()
+    def ConvertFromQuadratic(self, theSubMesh=None):
+        if theSubMesh:
+            self.editor.ConvertFromQuadraticObject(theSubMesh)
+        else:
+            return self.editor.ConvertFromQuadratic()
 
     ## Creates 2D mesh as skin on boundary faces of a 3D mesh
     #  @return TRUE if operation has been completed successfully, FALSE otherwise
@@ -3069,15 +3088,18 @@ class Mesh:
     ## Creates missing boundary elements
     #  @param elements - elements whose boundary is to be checked:
     #                    mesh, group, sub-mesh or list of elements
+    #   if elements is mesh, it must be the mesh whose MakeBoundaryMesh() is called
     #  @param dimension - defines type of boundary elements to create:
     #                     SMESH.BND_2DFROM3D, SMESH.BND_1DFROM3D, SMESH.BND_1DFROM2D
+    #    SMESH.BND_1DFROM3D creates mesh edges on all borders of free facets of 3D cells
     #  @param groupName - a name of group to store created boundary elements in,
     #                     "" means not to create the group
     #  @param meshName - a name of new mesh to store created boundary elements in,
     #                     "" means not to create the new mesh
-    #  @param toCopyElements - if true, the checked elements will be copied into the new mesh
+    #  @param toCopyElements - if true, the checked elements will be copied into
+    #     the new mesh else only boundary elements will be copied into the new mesh
     #  @param toCopyExistingBondary - if true, not only new but also pre-existing
-    #                                boundary elements will be copied into the new mesh
+    #     boundary elements will be copied into the new mesh
     #  @return tuple (mesh, group) where bondary elements were added to
     #  @ingroup l2_modif_edit
     def MakeBoundaryMesh(self, elements, dimension=SMESH.BND_2DFROM3D, groupName="", meshName="",
@@ -3093,6 +3115,29 @@ class Mesh:
         if mesh: mesh = self.smeshpyD.Mesh(mesh)
         return mesh, group
 
+    ##
+    # @brief Creates missing boundary elements around either the whole mesh or 
+    #    groups of 2D elements
+    #  @param dimension - defines type of boundary elements to create
+    #  @param groupName - a name of group to store all boundary elements in,
+    #    "" means not to create the group
+    #  @param meshName - a name of a new mesh, which is a copy of the initial 
+    #    mesh + created boundary elements; "" means not to create the new mesh
+    #  @param toCopyAll - if true, the whole initial mesh will be copied into
+    #    the new mesh else only boundary elements will be copied into the new mesh
+    #  @param groups - groups of 2D elements to make boundary around
+    #  @retval tuple( long, mesh, groups )
+    #                 long - number of added boundary elements
+    #                 mesh - the mesh where elements were added to
+    #                 group - the group of boundary elements or None
+    #
+    def MakeBoundaryElements(self, dimension=SMESH.BND_2DFROM3D, groupName="", meshName="",
+                             toCopyAll=False, groups=[]):
+        nb, mesh, group = self.editor.MakeBoundaryElements(dimension,groupName,meshName,
+                                                           toCopyAll,groups)
+        if mesh: mesh = self.smeshpyD.Mesh(mesh)
+        return nb, mesh, group
+
     ## Renumber mesh nodes
     #  @ingroup l2_modif_renumber
     def RenumberNodes(self):
@@ -3139,7 +3184,8 @@ class Mesh:
         return []
 
     ## Generates new elements by rotation of the elements of object around the axis
-    #  @param theObject object which elements should be sweeped
+    #  @param theObject object which elements should be sweeped.
+    #                   It can be a mesh, a sub mesh or a group.
     #  @param Axis the axis of rotation, AxisStruct or line(geom object)
     #  @param AngleInRadians the angle of Rotation
     #  @param NbOfSteps number of steps
@@ -3174,7 +3220,8 @@ class Mesh:
         return []
 
     ## Generates new elements by rotation of the elements of object around the axis
-    #  @param theObject object which elements should be sweeped
+    #  @param theObject object which elements should be sweeped.
+    #                   It can be a mesh, a sub mesh or a group.
     #  @param Axis the axis of rotation, AxisStruct or line(geom object)
     #  @param AngleInRadians the angle of Rotation
     #  @param NbOfSteps number of steps
@@ -3209,7 +3256,8 @@ class Mesh:
         return []
 
     ## Generates new elements by rotation of the elements of object around the axis
-    #  @param theObject object which elements should be sweeped
+    #  @param theObject object which elements should be sweeped.
+    #                   It can be a mesh, a sub mesh or a group.
     #  @param Axis the axis of rotation, AxisStruct or line(geom object)
     #  @param AngleInRadians the angle of Rotation
     #  @param NbOfSteps number of steps
@@ -3245,7 +3293,7 @@ class Mesh:
 
     ## Generates new elements by extrusion of the elements with given ids
     #  @param IDsOfElements the list of elements ids for extrusion
-    #  @param StepVector vector or DirStruct, defining the direction and value of extrusion
+    #  @param StepVector vector or DirStruct, 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
     #  @return the list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
@@ -3286,8 +3334,9 @@ class Mesh:
         return []
 
     ## Generates new elements by extrusion of the elements which belong to the object
-    #  @param theObject the object which elements should be processed
-    #  @param StepVector vector, defining the direction and value of extrusion
+    #  @param theObject the object which elements should be processed.
+    #                   It can be a mesh, a sub mesh or a group.
+    #  @param StepVector vector, 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
     #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
@@ -3307,8 +3356,9 @@ class Mesh:
         return []
 
     ## Generates new elements by extrusion of the elements which belong to the object
-    #  @param theObject object which elements should be processed
-    #  @param StepVector vector, defining the direction and value of extrusion
+    #  @param theObject object which elements should be processed.
+    #                   It can be a mesh, a sub mesh or a group.
+    #  @param StepVector vector, 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 to generate new groups from existing ones
     #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
@@ -3328,8 +3378,9 @@ class Mesh:
         return []
 
     ## Generates new elements by extrusion of the elements which belong to the object
-    #  @param theObject object which elements should be processed
-    #  @param StepVector vector, defining the direction and value of extrusion
+    #  @param theObject object which elements should be processed.
+    #                   It can be a mesh, a sub mesh or a group.
+    #  @param StepVector vector, 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
     #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
@@ -3352,7 +3403,7 @@ class Mesh:
 
     ## Generates new elements by extrusion of the given elements
     #  The path of extrusion must be a meshed edge.
-    #  @param Base mesh or list of ids of elements for extrusion
+    #  @param Base mesh or group, or submesh, or list of ids of elements for extrusion
     #  @param Path - 1D mesh or 1D sub-mesh, along which proceeds the extrusion
     #  @param NodeStart the start node from Path. Defines the direction of extrusion
     #  @param HasAngles allows the shape to be rotated around the path
@@ -3379,8 +3430,7 @@ class Mesh:
         Parameters = AnglesParameters + var_separator + RefPointParameters
         self.mesh.SetParameters(Parameters)
 
-        if (isinstance(Path, Mesh)):
-            Path = Path.GetMesh()
+        if (isinstance(Path, Mesh)): Path = Path.GetMesh()
 
         if isinstance(Base, list):
             IDsOfElements = []
@@ -3443,7 +3493,8 @@ class Mesh:
 
     ## Generates new elements by extrusion of the elements which belong to the object
     #  The path of extrusion must be a meshed edge.
-    #  @param theObject the object which elements should be processed
+    #  @param theObject the object which elements should be processed.
+    #                   It can be a mesh, a sub mesh or a group.
     #  @param PathMesh mesh containing a 1D sub-mesh on the edge, along which the extrusion proceeds
     #  @param PathShape shape(edge) defines the sub-mesh for the path
     #  @param NodeStart the first or the last node on the edge. Defines the direction of extrusion
@@ -3485,7 +3536,8 @@ class Mesh:
 
     ## Generates new elements by extrusion of the elements which belong to the object
     #  The path of extrusion must be a meshed edge.
-    #  @param theObject the object which elements should be processed
+    #  @param theObject the object which elements should be processed.
+    #                   It can be a mesh, a sub mesh or a group.
     #  @param PathMesh mesh containing a 1D sub-mesh on the edge, along which the extrusion proceeds
     #  @param PathShape shape(edge) defines the sub-mesh for the path
     #  @param NodeStart the first or the last node on the edge. Defines the direction of extrusion
@@ -3527,7 +3579,8 @@ class Mesh:
 
     ## Generates new elements by extrusion of the elements which belong to the object
     #  The path of extrusion must be a meshed edge.
-    #  @param theObject the object which elements should be processed
+    #  @param theObject the object which elements should be processed.
+    #                   It can be a mesh, a sub mesh or a group.
     #  @param PathMesh mesh containing a 1D sub-mesh on the edge, along which the extrusion proceeds
     #  @param PathShape shape(edge) defines the sub-mesh for the path
     #  @param NodeStart the first or the last node on the edge. Defines the direction of extrusion
@@ -4023,7 +4076,9 @@ class Mesh:
     #  @param theModifiedElems list of groups of elements to be updated.
     #  @return TRUE if operation has been completed successfully, FALSE otherwise
     #  @ingroup l2_modif_edit
-    def DoubleNodeGroups(self, theNodes, theModifiedElems):
+    def DoubleNodeGroups(self, theNodes, theModifiedElems, theMakeGroup=False):
+        if theMakeGroup:
+            return self.editor.DoubleNodeGroupsNew(theNodes, theModifiedElems)
         return self.editor.DoubleNodeGroups(theNodes, theModifiedElems)
 
     ## Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -4056,6 +4111,8 @@ class Mesh:
     #  @param theAffectedElems - group of elements to which the replicated nodes
     #         should be associated to.
     #  @param theMakeGroup forces the generation of a group containing new elements.
+    #  @return TRUE or a created group if operation has been completed successfully,
+    #          FALSE or None otherwise
     #  @ingroup l2_modif_edit
     def DoubleNodeElemGroup(self, theElems, theNodesNot, theAffectedElems, theMakeGroup=False):
         if theMakeGroup:
@@ -4079,9 +4136,13 @@ class Mesh:
     #  @param theNodesNot - list of groups of nodes not to replicated
     #  @param theAffectedElems - group of elements to which the replicated nodes
     #         should be associated to.
-    #  @return TRUE if operation has been completed successfully, FALSE otherwise
+    #  @param theMakeGroup forces the generation of a group containing new elements.
+    #  @return TRUE or a created group if operation has been completed successfully,
+    #          FALSE or None otherwise
     #  @ingroup l2_modif_edit
-    def DoubleNodeElemGroups(self, theElems, theNodesNot, theAffectedElems):
+    def DoubleNodeElemGroups(self, theElems, theNodesNot, theAffectedElems, theMakeGroup=False):
+        if theMakeGroup:
+            return self.editor.DoubleNodeElemGroupsNew(theElems, theNodesNot, theAffectedElems)
         return self.editor.DoubleNodeElemGroups(theElems, theNodesNot, theAffectedElems)
 
     ## Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -4107,6 +4168,16 @@ class Mesh:
     def DoubleNodesOnGroupBoundaries(self, theDomains, createJointElems ):
        return self.editor.DoubleNodesOnGroupBoundaries( theDomains, createJointElems )
 
+    ## Double nodes on some external faces and create flat elements.
+    # Flat elements are mainly used by some types of mechanic calculations.
+    #
+    # Each group of the list must be constituted of faces.
+    # Triangles are transformed in prisms, and quadrangles in hexahedrons.
+    # @param theGroupsOfFaces - list of groups of faces
+    # @return TRUE if operation has been completed successfully, FALSE otherwise
+    def CreateFlatElementsOnFacesGroups(self, theGroupsOfFaces ):
+        return self.editor.CreateFlatElementsOnFacesGroups( theGroupsOfFaces )
+
     def _valueFromFunctor(self, funcType, elemId):
         fn = self.smeshpyD.GetFunctor(funcType)
         fn.SetMesh(self.mesh)
@@ -4338,12 +4409,20 @@ class Mesh_Algorithm:
                 name = GetName(geom)
                 pass
             except:
+                pass
+            if not name and geom.GetShapeType() != geompyDC.GEOM.COMPOUND:
+                # for all groups SubShapeName() returns "Compound_-1"
                 name = mesh.geompyD.SubShapeName(geom, piece)
-                if not name:
-                    name = "%s_%s"%(geom.GetShapeType(), id(geom%1000))
+            if not name:
+                name = "%s_%s"%(geom.GetShapeType(), id(geom)%10000)
+            # publish geom of sub-mesh (issue 0021122)
+            if not self.geom.IsSame( self.mesh.geom ) and not self.geom.GetStudyEntry():
+                studyID = self.mesh.smeshpyD.GetCurrentStudy()._get_StudyId()
+                if studyID != self.mesh.geompyD.myStudyId:
+                    self.mesh.geompyD.init_geom( self.mesh.smeshpyD.GetCurrentStudy())
+                self.mesh.geompyD.addToStudyInFather( self.mesh.geom, self.geom, name )
                 pass
             self.subm = mesh.mesh.GetSubMesh(geom, algo.GetName())
-
         self.algo = algo
         status = mesh.mesh.AddHypothesis(self.geom, self.algo)
         TreatHypoStatus( status, algo.GetName(), name, True )
@@ -4395,6 +4474,29 @@ class Mesh_Algorithm:
         if not entry: return ""
         return entry
 
+    ## Defines "ViscousLayers" hypothesis to give parameters of layers of prisms to build
+    #  near mesh boundary. This hypothesis can be used by several 3D algorithms:
+    #  NETGEN 3D, GHS3D, Hexahedron(i,j,k)
+    #  @param thickness total thickness of layers of prisms
+    #  @param numberOfLayers number of layers of prisms
+    #  @param stretchFactor factor (>1.0) of growth of layer thickness towards inside of mesh
+    #  @param ignoreFaces geometrical face (or their ids) not to generate layers on
+    #  @ingroup l3_hypos_additi
+    def ViscousLayers(self, thickness, numberOfLayers, stretchFactor, ignoreFaces=[]):
+        if not isinstance(self.algo, SMESH._objref_SMESH_3D_Algo):
+            raise TypeError, "ViscousLayers are supported by 3D algorithms only"
+        if not "ViscousLayers" in self.GetCompatibleHypothesis():
+            raise TypeError, "ViscousLayers are not supported by %s"%self.algo.GetName()
+        if ignoreFaces and isinstance( ignoreFaces[0], geompyDC.GEOM._objref_GEOM_Object ):
+            ignoreFaces = [ self.mesh.geompyD.GetSubShapeID(self.mesh.geom, f) for f in ignoreFaces ]
+        hyp = self.Hypothesis("ViscousLayers",
+                              [thickness, numberOfLayers, stretchFactor, ignoreFaces])
+        hyp.SetTotalThickness(thickness)
+        hyp.SetNumberLayers(numberOfLayers)
+        hyp.SetStretchFactor(stretchFactor)
+        hyp.SetIgnoreFaces(ignoreFaces)
+        return hyp
+
 # Public class: Mesh_Segment
 # --------------------------
 
@@ -5221,7 +5323,7 @@ class Mesh_Tetrahedron(Mesh_Algorithm):
                     self.params = self.Hypothesis("NETGEN_Parameters", [],
                                                   "libNETGENEngine.so", UseExisting=0)
 
-            if self.algoType == NETGEN:
+            elif self.algoType == NETGEN:
                 self.params = self.Hypothesis("NETGEN_Parameters_3D", [],
                                               "libNETGENEngine.so", UseExisting=0)
 
@@ -5233,7 +5335,7 @@ class Mesh_Tetrahedron(Mesh_Algorithm):
                 self.params = self.Hypothesis("GHS3DPRL_Parameters", [],
                                               "libGHS3DPRLEngine.so", UseExisting=0)
             else:
-                print "Algo supports no multi-parameter hypothesis"
+                print "Warning: %s supports no multi-parameter hypothesis"%self.algo.GetName()
 
         return self.params