X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FGEOM_SWIG%2FgeomBuilder.py;h=5dbc1d202cb8aa211adf408876c15c8fe6696ea3;hb=b6f0965afb72083a5234f9b4fb0b233adaaf8d9d;hp=90646df4ba6169c5af160556f3ca80b3896c7cd2;hpb=40d76807e945ceef6a730f4d0177e167d3ccb453;p=modules%2Fgeom.git diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 90646df4b..5dbc1d202 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -1,5 +1,5 @@ # -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +# Copyright (C) 2007-2022 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 @@ -237,6 +237,7 @@ ## @} ## @defgroup l2_measure Using measurement tools ## @defgroup l2_field Field on Geometry +## @defgroup l2_testing Testing ## @} @@ -732,8 +733,6 @@ class geomBuilder(GEOM._objref_GEOM_Gen): GEOM._objref_GEOM_Gen.__init__(self, *args) self.myMaxNbSubShapesAllowed = 0 # auto-publishing is disabled by default self.myBuilder = None - self.father = None - self.BasicOp = None self.CurvesOp = None self.PrimOp = None @@ -747,6 +746,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): self.BlocksOp = None self.GroupOp = None self.FieldOp = None + self.TestOp = None pass ## Process object publication in the study, as follows: @@ -835,18 +835,12 @@ class geomBuilder(GEOM._objref_GEOM_Gen): def init_geom(self): self.myStudy = salome.myStudy self.myBuilder = self.myStudy.NewBuilder() - self.father = self.myStudy.FindComponent("GEOM") - notebook.myStudy = salome.myStudy - if self.father is None: - self.father = self.myBuilder.NewComponent("GEOM") - A1 = self.myBuilder.FindOrCreateAttribute(self.father, "AttributeName") - FName = A1._narrow(SALOMEDS.AttributeName) - FName.SetValue("Geometry") - A2 = self.myBuilder.FindOrCreateAttribute(self.father, "AttributePixMap") - aPixmap = A2._narrow(SALOMEDS.AttributePixMap) - aPixmap.SetPixMap("ICON_OBJBROWSER_Geometry") - self.myBuilder.DefineComponentInstance(self.father,self) - pass + + # load data from the study file, if necessary + component = self.myStudy.FindComponent("GEOM") + if component: + self.myBuilder.LoadWith(component, self) + self.BasicOp = self.GetIBasicOperations () self.CurvesOp = self.GetICurvesOperations () self.PrimOp = self.GetI3DPrimOperations () @@ -860,14 +854,9 @@ class geomBuilder(GEOM._objref_GEOM_Gen): self.BlocksOp = self.GetIBlocksOperations () self.GroupOp = self.GetIGroupOperations () self.FieldOp = self.GetIFieldOperations () + self.TestOp = self.GetITestOperations () - # set GEOM as root in the use case tree - self.myUseCaseBuilder = self.myStudy.GetUseCaseBuilder() - self.myUseCaseBuilder.SetRootCurrent() - self.myUseCaseBuilder.Append(self.father) - - # load data from the study file, if necessary - self.myBuilder.LoadWith(self.father, self) + notebook.myStudy = self.myStudy pass def GetPluginOperations(self, libraryName): @@ -1772,7 +1761,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): ## Create a plane, passing through the three given points # @param thePnt1 First of three points, defining the plane. # @param thePnt2 Second of three points, defining the plane. - # @param thePnt3 Fird of three points, defining the plane. + # @param thePnt3 Third of three points, defining the plane. # @param theTrimSize Half size of a side of quadrangle face, representing the plane. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic @@ -1789,7 +1778,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): Parameters: thePnt1 First of three points, defining the plane. thePnt2 Second of three points, defining the plane. - thePnt3 Fird of three points, defining the plane. + thePnt3 Third of three points, defining the plane. theTrimSize Half size of a side of quadrangle face, representing the plane. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic @@ -4367,7 +4356,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): # @param theBase Base shape to be extruded. # @param thePath Path shape to extrude the base shape along it. # @param theVec Vector defines a constant binormal direction to keep the - # same angle beetween the direction and the sections + # same angle between the direction and the sections # along the sweep surface. # @param IsGenerateGroups flag that tells if it is necessary to # create groups. It is equal to False by default. @@ -4396,7 +4385,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): theBase Base shape to be extruded. thePath Path shape to extrude the base shape along it. theVec Vector defines a constant binormal direction to keep the - same angle beetween the direction and the sections + same angle between the direction and the sections along the sweep surface. IsGenerateGroups flag that tells if it is necessary to create groups. It is equal to False by default. @@ -5671,9 +5660,9 @@ class geomBuilder(GEOM._objref_GEOM_Gen): # @param theShape Shape to find sub-shapes of. # @param theShapeType Type of sub-shapes to be retrieved (see ShapeType()) # @param theTopLeftPoint Point, specifying top left corner of a quadrangle - # @param theTopRigthPoint Point, specifying top right corner of a quadrangle + # @param theTopRightPoint Point, specifying top right corner of a quadrangle # @param theBottomLeftPoint Point, specifying bottom left corner of a quadrangle - # @param theBottomRigthPoint Point, specifying bottom right corner of a quadrangle + # @param theBottomRightPoint Point, specifying bottom right corner of a quadrangle # @param theState The state of the sub-shapes to find (see GEOM::shape_state) # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic @@ -5684,8 +5673,8 @@ class geomBuilder(GEOM._objref_GEOM_Gen): # @ref swig_GetShapesOnQuadrangle "Example" @ManageTransactions("ShapesOp") def GetShapesOnQuadrangle(self, theShape, theShapeType, - theTopLeftPoint, theTopRigthPoint, - theBottomLeftPoint, theBottomRigthPoint, theState, theName=None): + theTopLeftPoint, theTopRightPoint, + theBottomLeftPoint, theBottomRightPoint, theState, theName=None): """ Find in theShape all sub-shapes of type theShapeType, situated relatively the specified quadrangle by the certain way, defined through theState parameter. @@ -5694,9 +5683,9 @@ class geomBuilder(GEOM._objref_GEOM_Gen): theShape Shape to find sub-shapes of. theShapeType Type of sub-shapes to be retrieved (see geompy.ShapeType) theTopLeftPoint Point, specifying top left corner of a quadrangle - theTopRigthPoint Point, specifying top right corner of a quadrangle + theTopRightPoint Point, specifying top right corner of a quadrangle theBottomLeftPoint Point, specifying bottom left corner of a quadrangle - theBottomRigthPoint Point, specifying bottom right corner of a quadrangle + theBottomRightPoint Point, specifying bottom right corner of a quadrangle theState The state of the sub-shapes to find (see GEOM::shape_state) theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic @@ -5707,8 +5696,8 @@ class geomBuilder(GEOM._objref_GEOM_Gen): """ # Example: see GEOM_TestOthers.py aList = self.ShapesOp.GetShapesOnQuadrangle(theShape, theShapeType, - theTopLeftPoint, theTopRigthPoint, - theBottomLeftPoint, theBottomRigthPoint, theState) + theTopLeftPoint, theTopRightPoint, + theBottomLeftPoint, theBottomRightPoint, theState) RaiseIfFailed("GetShapesOnQuadrangle", self.ShapesOp) self._autoPublish(aList, theName, "shapeOnQuadrangle") return aList @@ -5718,9 +5707,9 @@ class geomBuilder(GEOM._objref_GEOM_Gen): # @param theShape Shape to find sub-shapes of. # @param theShapeType Type of sub-shapes to be retrieved (see ShapeType()) # @param theTopLeftPoint Point, specifying top left corner of a quadrangle - # @param theTopRigthPoint Point, specifying top right corner of a quadrangle + # @param theTopRightPoint Point, specifying top right corner of a quadrangle # @param theBottomLeftPoint Point, specifying bottom left corner of a quadrangle - # @param theBottomRigthPoint Point, specifying bottom right corner of a quadrangle + # @param theBottomRightPoint Point, specifying bottom right corner of a quadrangle # @param theState The state of the sub-shapes to find (see GEOM::shape_state) # # @return List of all found sub-shapes indices. @@ -5728,8 +5717,8 @@ class geomBuilder(GEOM._objref_GEOM_Gen): # @ref swig_GetShapesOnQuadrangleIDs "Example" @ManageTransactions("ShapesOp") def GetShapesOnQuadrangleIDs(self, theShape, theShapeType, - theTopLeftPoint, theTopRigthPoint, - theBottomLeftPoint, theBottomRigthPoint, theState): + theTopLeftPoint, theTopRightPoint, + theBottomLeftPoint, theBottomRightPoint, theState): """ Find in theShape all sub-shapes of type theShapeType, situated relatively the specified quadrangle by the certain way, defined through theState parameter. @@ -5738,9 +5727,9 @@ class geomBuilder(GEOM._objref_GEOM_Gen): theShape Shape to find sub-shapes of. theShapeType Type of sub-shapes to be retrieved (see geompy.ShapeType) theTopLeftPoint Point, specifying top left corner of a quadrangle - theTopRigthPoint Point, specifying top right corner of a quadrangle + theTopRightPoint Point, specifying top right corner of a quadrangle theBottomLeftPoint Point, specifying bottom left corner of a quadrangle - theBottomRigthPoint Point, specifying bottom right corner of a quadrangle + theBottomRightPoint Point, specifying bottom right corner of a quadrangle theState The state of the sub-shapes to find (see GEOM::shape_state) Returns: @@ -5749,8 +5738,8 @@ class geomBuilder(GEOM._objref_GEOM_Gen): # Example: see GEOM_TestOthers.py aList = self.ShapesOp.GetShapesOnQuadrangleIDs(theShape, theShapeType, - theTopLeftPoint, theTopRigthPoint, - theBottomLeftPoint, theBottomRigthPoint, theState) + theTopLeftPoint, theTopRightPoint, + theBottomLeftPoint, theBottomRightPoint, theState) RaiseIfFailed("GetShapesOnQuadrangleIDs", self.ShapesOp) return aList @@ -6038,6 +6027,38 @@ class geomBuilder(GEOM._objref_GEOM_Gen): self._autoPublish(anObj, theName, "inplace") return anObj + ## A sort of GetInPlace functionality, returning IDs of sub-shapes. + # For each sub-shape ID of @a theShapeWhat return a list of corresponding sub-shape + # IDs of @a theShapeWhere. + # For example, if theShapeWhat is a box and theShapeWhere is this box cut into + # two parts by a plane, then the result can be as this: + # len( result_list ) = 35, + # result_list[ 1 ] = [ 2, 36 ], which means that the box (ID 1) turned into two + # solids with IDs 2 and 36 within theShapeWhere + # + # @param theShapeWhere Shape to find sub-shapes of. + # @param theShapeWhat Shape, specifying what to find. + # @return List of lists of sub-shape IDS of theShapeWhere. + def GetInPlaceMap(self, theShapeWhere, theShapeWhat): + """ + A sort of GetInPlace functionality, returning IDs of sub-shapes. + For each sub-shape ID of @a theShapeWhat return a list of corresponding sub-shape + IDs of @a theShapeWhere. + For example, if theShapeWhat is a box and theShapeWhere is this box cut into + two parts by a plane, then the result can be as this: + len( result_list ) = 35, + result_list[ 1 ] = [ 2, 36 ], which means that the box (ID 1) turned into two + solids with IDs 2 and 36 within theShapeWhere + + Parameters: + theShapeWhere Shape to find sub-shapes of. + theShapeWhat Shape, specifying what to find. + + Returns: + List of lists of sub-shape IDS of theShapeWhere. + """ + return self.ShapesOp.GetInPlaceMap(theShapeWhere, theShapeWhat) + ## Get sub-shape of theShapeWhere, which is # equal to \a theShapeWhat. # @param theShapeWhere Shape to find sub-shape of. @@ -10515,7 +10536,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): Parameters: theInit Shape to remove material from. It must be a solid or a compound made of a single solid. theBase Closed edge or wire defining the base shape to be extruded. - theH Prism dimension along the normal to theBase + theH Prism dimension along the normal to theBase theAngle Draft angle in degrees. theInvert If true material changes the direction. theName Object name; when specified, this parameter is used @@ -10555,7 +10576,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): Parameters: theInit Shape to add material to. It must be a solid or a compound made of a single solid. theBase Closed edge or wire defining the base shape to be extruded. - theH Prism dimension along the normal to theBase + theH Prism dimension along the normal to theBase theAngle Draft angle in degrees. theInvert If true material changes the direction. theName Object name; when specified, this parameter is used @@ -11293,9 +11314,10 @@ class geomBuilder(GEOM._objref_GEOM_Gen): self._autoPublish(anObj, theName, "centerOfMass") return anObj - ## Get a vertex sub-shape by index depended with orientation. + ## Get a vertex sub-shape by index. # @param theShape Shape to find sub-shape. # @param theIndex Index to find vertex by this index (starting from zero) + # @param theUseOri To consider edge/wire orientation or not # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. @@ -11304,13 +11326,14 @@ class geomBuilder(GEOM._objref_GEOM_Gen): # # @ref tui_measurement_tools_page "Example" @ManageTransactions("MeasuOp") - def GetVertexByIndex(self, theShape, theIndex, theName=None): + def GetVertexByIndex(self, theShape, theIndex, theUseOri=True, theName=None): """ - Get a vertex sub-shape by index depended with orientation. + Get a vertex sub-shape by index. Parameters: theShape Shape to find sub-shape. theIndex Index to find vertex by this index (starting from zero) + theUseOri To consider edge/wire orientation or not theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. @@ -11319,7 +11342,9 @@ class geomBuilder(GEOM._objref_GEOM_Gen): New GEOM.GEOM_Object, containing the created vertex. """ # Example: see GEOM_TestMeasures.py - anObj = self.MeasuOp.GetVertexByIndex(theShape, theIndex) + if isinstance( theUseOri, str ): # theUseOri was inserted before theName + theUseOri, theName = True, theUseOri + anObj = self.MeasuOp.GetVertexByIndex(theShape, theIndex, theUseOri) RaiseIfFailed("GetVertexByIndex", self.MeasuOp) self._autoPublish(anObj, theName, "vertex") return anObj @@ -11348,7 +11373,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): """ # Example: see GEOM_TestMeasures.py # note: auto-publishing is done in self.GetVertexByIndex() - return self.GetVertexByIndex(theShape, 0, theName) + return self.GetVertexByIndex(theShape, 0, True, theName) ## Get the last vertex of wire/edge depended orientation. # @param theShape Shape to find last vertex. @@ -11375,7 +11400,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): # Example: see GEOM_TestMeasures.py nb_vert = self.NumberOfSubShapes(theShape, self.ShapeType["VERTEX"]) # note: auto-publishing is done in self.GetVertexByIndex() - return self.GetVertexByIndex(theShape, (nb_vert-1), theName) + return self.GetVertexByIndex(theShape, (nb_vert-1), True, theName) ## Get a normale to the given face. If the point is not given, # the normale is calculated at the center of mass. @@ -11540,7 +11565,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): ## Detect self-intersections of the given shape with algorithm based on mesh intersections. # @param theShape Shape to check. - # @param theDeflection Linear deflection coefficient that specifies quality of tesselation: + # @param theDeflection Linear deflection coefficient that specifies quality of tessellation: # - if \a theDeflection <= 0, default deflection 0.001 is used # @param theTolerance Specifies a distance between sub-shapes used for detecting gaps: # - if \a theTolerance <= 0, algorithm detects intersections (default behavior) @@ -11555,7 +11580,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): Parameters: theShape Shape to check. - theDeflection Linear deflection coefficient that specifies quality of tesselation: + theDeflection Linear deflection coefficient that specifies quality of tessellation: - if theDeflection <= 0, default deflection 0.001 is used theTolerance Specifies a distance between shapes used for detecting gaps: - if theTolerance <= 0, algorithm detects intersections (default behavior) @@ -11569,20 +11594,20 @@ class geomBuilder(GEOM._objref_GEOM_Gen): RaiseIfFailed("CheckSelfIntersectionsFast", self.MeasuOp) return IsValid - ## Check boolean and partition operations agruments. - # @param theShape the agrument of an operation to be checked - # @return TRUE if the agrument is valid for a boolean or partition + ## Check boolean and partition operations arguments. + # @param theShape the argument of an operation to be checked + # @return TRUE if the argument is valid for a boolean or partition # operation; FALSE otherwise. @ManageTransactions("MeasuOp") def CheckBOPArguments(self, theShape): """ - Check boolean and partition operations agruments. + Check boolean and partition operations arguments. Parameters: - theShape the agrument of an operation to be checked + theShape the argument of an operation to be checked Returns: - TRUE if the agrument is valid for a boolean or partition + TRUE if the argument is valid for a boolean or partition operation; FALSE otherwise. """ return self.MeasuOp.CheckBOPArguments(theShape) @@ -11593,7 +11618,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): # @param theTolerance Specifies a distance between shapes used for detecting gaps: # - if \a theTolerance <= 0, algorithm detects intersections (default behavior) # - if \a theTolerance > 0, algorithm detects gaps - # @param theDeflection Linear deflection coefficient that specifies quality of tesselation: + # @param theDeflection Linear deflection coefficient that specifies quality of tessellation: # - if \a theDeflection <= 0, default deflection 0.001 is used # @return TRUE, if there are intersections (gaps) between source shapes # @return List of sub-shapes IDs from 1st shape that localize intersection. @@ -11611,7 +11636,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): theTolerance Specifies a distance between shapes used for detecting gaps: - if theTolerance <= 0, algorithm detects intersections (default behavior) - if theTolerance > 0, algorithm detects gaps - theDeflection Linear deflection coefficient that specifies quality of tesselation: + theDeflection Linear deflection coefficient that specifies quality of tessellation: - if theDeflection <= 0, default deflection 0.001 is used Returns: @@ -11895,7 +11920,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): ## @{ ## Create a quadrangle face from four edges. Order of Edges is not - # important. It is not necessary that edges share the same vertex. + # important. It is not necessary that edges share the same vertex. # @param E1,E2,E3,E4 Edges for the face bound. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic @@ -11908,7 +11933,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): def MakeQuad(self, E1, E2, E3, E4, theName=None): """ Create a quadrangle face from four edges. Order of Edges is not - important. It is not necessary that edges share the same vertex. + important. It is not necessary that edges share the same vertex. Parameters: E1,E2,E3,E4 Edges for the face bound. @@ -12013,7 +12038,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): return anObj ## Create a hexahedral solid, bounded by the six given faces. Order of - # faces is not important. It is not necessary that Faces share the same edge. + # faces is not important. It is not necessary that Faces share the same edge. # @param F1,F2,F3,F4,F5,F6 Faces for the hexahedral solid. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic @@ -12027,7 +12052,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): def MakeHexa(self, F1, F2, F3, F4, F5, F6, theName=None): """ Create a hexahedral solid, bounded by the six given faces. Order of - faces is not important. It is not necessary that Faces share the same edge. + faces is not important. It is not necessary that Faces share the same edge. Parameters: F1,F2,F3,F4,F5,F6 Faces for the hexahedral solid. @@ -13014,7 +13039,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): RaiseIfFailed("RemoveObject", self.GroupOp) pass - ## Adds to the group all the given shapes. No errors, if some shapes are alredy included. + ## Adds to the group all the given shapes. No errors, if some shapes are already included. # @param theGroup is a GEOM group to which the new sub-shapes are added. # @param theSubShapes is a list of sub-shapes to be added. # @@ -13022,7 +13047,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): @ManageTransactions("GroupOp") def UnionList (self,theGroup, theSubShapes): """ - Adds to the group all the given shapes. No errors, if some shapes are alredy included. + Adds to the group all the given shapes. No errors, if some shapes are already included. Parameters: theGroup is a GEOM group to which the new sub-shapes are added. @@ -13033,7 +13058,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): RaiseIfFailed("UnionList", self.GroupOp) pass - ## Adds to the group all the given shapes. No errors, if some shapes are alredy included. + ## Adds to the group all the given shapes. No errors, if some shapes are already included. # @param theGroup is a GEOM group to which the new sub-shapes are added. # @param theSubShapes is a list of indices of sub-shapes to be added. # @@ -13041,7 +13066,7 @@ class geomBuilder(GEOM._objref_GEOM_Gen): @ManageTransactions("GroupOp") def UnionIDs(self,theGroup, theSubShapes): """ - Adds to the group all the given shapes. No errors, if some shapes are alredy included. + Adds to the group all the given shapes. No errors, if some shapes are already included. Parameters: theGroup is a GEOM group to which the new sub-shapes are added. @@ -13766,7 +13791,6 @@ class geomBuilder(GEOM._objref_GEOM_Gen): Returns: a new created folder """ - if not Father: Father = self.father return self.CreateFolder(Name, Father) ## Move object to the specified folder @@ -13877,6 +13901,37 @@ class geomBuilder(GEOM._objref_GEOM_Gen): # end of l2_field ## @} + ## @addtogroup l2_testing + ## @{ + + ## Build a mesh on the given shape. + # @param shape the source shape + # @param linear_deflection linear deflection coefficient + # @param is_relative says if given value of deflection is relative to shape's bounding box + # @param angular_deflection angular deflection for edges in degrees + # @return True in case of success; otherwise False. + @ManageTransactions("TestOp") + def Tesselate(self, shape, linear_deflection=0, is_relative=True, angular_deflection=0): + """Build a mesh on the given shape. + + Parameters: + shape the source shape + linear_deflection linear deflection coefficient + is_relative says if given value of deflection is relative to shape's bounding box + angular_deflection angular deflection for edges in degrees + + Returns: + True in case of success; otherwise False. + """ + if angular_deflection > 0: + angular_deflection = angular_deflection * math.pi / 180. + r = self.TestOp.Tesselate(shape, linear_deflection, is_relative, angular_deflection) + RaiseIfFailed("Tesselate", self.TestOp) + return r + + # end of l2_testing + ## @} + # Register the new proxy for GEOM_Gen omniORB.registerObjref(GEOM._objref_GEOM_Gen._NP_RepositoryId, geomBuilder) @@ -14048,6 +14103,10 @@ def New( instance=None): global engine global geom global doLcc + if instance and isinstance( instance, SALOMEDS._objref_Study ): + import sys + sys.stderr.write("Warning: 'study' argument is no more needed in geomBuilder.New(). Consider updating your script!!!\n\n") + instance = None engine = instance if engine is None: doLcc = True