diff --git a/src/Mod/Fem/MechanicalAnalysis.py b/src/Mod/Fem/MechanicalAnalysis.py index 53b826542..09b1cbbe3 100644 --- a/src/Mod/Fem/MechanicalAnalysis.py +++ b/src/Mod/Fem/MechanicalAnalysis.py @@ -41,7 +41,7 @@ __url__ = "http://www.freecadweb.org" def makeMechanicalAnalysis(name): '''makeFemAnalysis(name): makes a Fem Analysis object''' - obj = FreeCAD.ActiveDocument.addObject("Fem::FemAnalysisPython",name) + obj = FreeCAD.ActiveDocument.addObject("Fem::FemAnalysisPython", name) _FemAnalysis(obj) _ViewProviderFemAnalysis(obj.ViewObject) #FreeCAD.ActiveDocument.recompute() @@ -52,9 +52,9 @@ class _CommandNewMechanicalAnalysis: "the Fem Analysis command definition" def GetResources(self): return {'Pixmap': 'Fem_Analysis', - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_Analysis","New mechanical analysis"), + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_Analysis", "New mechanical analysis"), 'Accel': "A", - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_Analysis","Create a new mechanical analysis")} + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_Analysis", "Create a new mechanical analysis")} def Activated(self): FreeCAD.ActiveDocument.openTransaction("Create Analysis") @@ -68,7 +68,7 @@ class _CommandNewMechanicalAnalysis: if(sel[0].isDerivedFrom("Fem::FemMeshObject")): FreeCADGui.doCommand("App.activeDocument().ActiveObject.Member = App.activeDocument().ActiveObject.Member + [App.activeDocument()." + sel[0].Name + "]") if(sel[0].isDerivedFrom("Part::Feature")): - FreeCADGui.doCommand("App.activeDocument().addObject('Fem::FemMeshShapeNetgenObject','" + sel[0].Name + "_Mesh')") + FreeCADGui.doCommand("App.activeDocument().addObject('Fem::FemMeshShapeNetgenObject', '" + sel[0].Name + "_Mesh')") FreeCADGui.doCommand("App.activeDocument().ActiveObject.Shape = App.activeDocument()." + sel[0].Name) FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [App.activeDocument().ActiveObject]") #FreeCADGui.doCommand("Gui.activeDocument().hide('" + sel[0].Name + "')") @@ -88,9 +88,9 @@ class _CommandMechanicalJobControl: "the Fem JobControl command definition" def GetResources(self): return {'Pixmap': 'Fem_NewAnalysis', - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_JobControl","Start calculation"), + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_JobControl", "Start calculation"), 'Accel': "A", - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_JobControl","Dialog to start the calculation of the mechanical anlysis")} + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_JobControl", "Dialog to start the calculation of the mechanical anlysis")} def Activated(self): import FemGui @@ -109,9 +109,9 @@ class _CommandMechanicalShowResult: "the Fem JobControl command definition" def GetResources(self): return {'Pixmap': 'Fem_Result', - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_ResultDisplacement","Show result"), + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_ResultDisplacement", "Show result"), 'Accel': "A", - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_ResultDisplacement","Show result information of an analysis")} + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_ResultDisplacement", "Show result information of an analysis")} def Activated(self): import FemGui @@ -127,7 +127,7 @@ class _CommandMechanicalShowResult: StressObject = i if not DisplacementObject and not StressObject: - QtGui.QMessageBox.critical(None, "Missing prerequisite","No result found in active Analysis") + QtGui.QMessageBox.critical(None, "Missing prerequisite", "No result found in active Analysis") return taskd = _ResultControlTaskPanel(FemGui.getActiveAnalysis()) @@ -140,24 +140,24 @@ class _CommandMechanicalShowResult: class _FemAnalysis: "The Material object" - def __init__(self,obj): + def __init__(self, obj): self.Type = "FemAnalysis" obj.Proxy = self #obj.Material = StartMat - obj.addProperty("App::PropertyString","OutputDir","Base","Directory where the jobs get generated") - obj.addProperty("App::PropertyFloat","PlateThickness","Base","Thickness of the plate") + obj.addProperty("App::PropertyString", "OutputDir", "Base", "Directory where the jobs get generated") + obj.addProperty("App::PropertyFloat", "PlateThickness", "Base", "Thickness of the plate") - def execute(self,obj): + def execute(self, obj): return - def onChanged(self,obj,prop): + def onChanged(self, obj, prop): if prop in ["MaterialName"]: return def __getstate__(self): return self.Type - def __setstate__(self,state): + def __setstate__(self, state): if state: self.Type = state @@ -165,8 +165,8 @@ class _FemAnalysis: class _ViewProviderFemAnalysis: "A View Provider for the Material object" - def __init__(self,vobj): - #vobj.addProperty("App::PropertyLength","BubbleSize","Base", str(translate("Fem","The size of the axis bubbles"))) + def __init__(self, vobj): + #vobj.addProperty("App::PropertyLength", "BubbleSize", "Base", str(translate("Fem", "The size of the axis bubbles"))) vobj.Proxy = self def getIcon(self): @@ -183,7 +183,7 @@ class _ViewProviderFemAnalysis: def onChanged(self, vobj, prop): return - def doubleClicked(self,vobj): + def doubleClicked(self, vobj): import FemGui if not FemGui.getActiveAnalysis() == self.Object: if FreeCADGui.activeWorkbench().name() != 'FemWorkbench': @@ -198,19 +198,19 @@ class _ViewProviderFemAnalysis: def __getstate__(self): return None - def __setstate__(self,state): + def __setstate__(self, state): return None class _JobControlTaskPanel: '''The editmode TaskPanel for Material objects''' - def __init__(self,object): + def __init__(self, object): # the panel has a tree widget that contains categories # for the subcomponents, such as additions, subtractions. # the categories are shown only if they are not empty. self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/MechanicalAnalysis.ui") self.fem_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem") - ccx_binary = self.fem_prefs.GetString("ccxBinaryPath","") + ccx_binary = self.fem_prefs.GetString("ccxBinaryPath", "") if ccx_binary: self.CalculixBinary = ccx_binary print "Using ccx binary path from FEM preferences: {}".format(ccx_binary) @@ -222,7 +222,7 @@ class _JobControlTaskPanel: self.CalculixBinary = FreeCAD.getHomePath() + 'bin/ccx.exe' else: self.CalculixBinary = 'ccx' - self.TempDir = FreeCAD.ActiveDocument.TransientDir.replace('\\','/') + '/FemAnl_' + object.Uid[-4:] + self.TempDir = FreeCAD.ActiveDocument.TransientDir.replace('\\', '/') + '/FemAnl_' + object.Uid[-4:] if not os.path.isdir(self.TempDir): os.mkdir(self.TempDir) @@ -268,9 +268,9 @@ class _JobControlTaskPanel: pos = rx.indexIn(out) while not pos < 0: match = rx.cap(0) - FreeCAD.Console.PrintError(match.strip().replace('\n',' ') + '\n') + FreeCAD.Console.PrintError(match.strip().replace('\n', ' ') + '\n') pos = rx.indexIn(out, pos + 1) - self.femConsoleMessage(out.replace('\n','
')) + self.femConsoleMessage(out.replace('\n', '
')) except UnicodeDecodeError: self.femConsoleMessage("Error converting stdout from CalculiX", "#FF0000") @@ -296,8 +296,8 @@ class _JobControlTaskPanel: if (newState == QtCore.QProcess.ProcessState.NotRunning): self.femConsoleMessage("CalculiX stopped.") - def calculixFinished(self,exitCode): - print "calculixFinished()",exitCode + def calculixFinished(self, exitCode): + print "calculixFinished()", exitCode print self.Calculix.state() # Restore previous cwd @@ -315,7 +315,7 @@ class _JobControlTaskPanel: if os.path.isfile(self.Basename + '.frd'): QApplication.setOverrideCursor(Qt.WaitCursor) - CalculixLib.importFrd(self.Basename + '.frd',FemGui.getActiveAnalysis()) + CalculixLib.importFrd(self.Basename + '.frd', FemGui.getActiveAnalysis()) QApplication.restoreOverrideCursor() self.femConsoleMessage("Loading results done!", "#00AA00") else: @@ -338,9 +338,9 @@ class _JobControlTaskPanel: def chooseOutputDir(self): print "chooseOutputDir" - dirname = QtGui.QFileDialog.getExistingDirectory(None, 'Choose material directory',self.params.GetString("JobDir",'/')) + dirname = QtGui.QFileDialog.getExistingDirectory(None, 'Choose material directory', self.params.GetString("JobDir", '/')) if(dirname): - self.params.SetString("JobDir",str(dirname)) + self.params.SetString("JobDir", str(dirname)) self.form.lineEdit_outputDir.setText(dirname) def write_input_file_handler(self): @@ -367,21 +367,21 @@ class _JobControlTaskPanel: if i.isDerivedFrom("Fem::FemMeshObject"): self.MeshObject = i else: - QtGui.QMessageBox.critical(None, "Missing prerequisite","No active Analysis") + QtGui.QMessageBox.critical(None, "Missing prerequisite", "No active Analysis") return False if not self.MeshObject: - QtGui.QMessageBox.critical(None, "Missing prerequisite","No mesh object in the Analysis") + QtGui.QMessageBox.critical(None, "Missing prerequisite", "No mesh object in the Analysis") return False - self.MaterialObjects = [] # [{'Object':MaterialObject}, {}, ...] + self.MaterialObjects = [] # [{'Object':MaterialObject}, {}, ...] for i in FemGui.getActiveAnalysis().Member: MaterialObjectDict = {} if i.isDerivedFrom("App::MaterialObjectPython"): MaterialObjectDict['Object'] = i self.MaterialObjects.append(MaterialObjectDict) if not self.MaterialObjects: - QtGui.QMessageBox.critical(None, "Missing prerequisite","No material object in the Analysis") + QtGui.QMessageBox.critical(None, "Missing prerequisite", "No material object in the Analysis") return False self.FixedObjects = [] # [{'Object':FixedObject, 'NodeSupports':bool}, {}, ...] @@ -391,7 +391,7 @@ class _JobControlTaskPanel: FixedObjectDict['Object'] = i self.FixedObjects.append(FixedObjectDict) if not self.FixedObjects: - QtGui.QMessageBox.critical(None, "Missing prerequisite","No fixed-constraint nodes defined in the Analysis") + QtGui.QMessageBox.critical(None, "Missing prerequisite", "No fixed-constraint nodes defined in the Analysis") return False self.ForceObjects = [] # [{'Object':ForceObject, 'NodeLoad':value}, {}, ...] @@ -401,7 +401,7 @@ class _JobControlTaskPanel: ForceObjectDict['Object'] = i self.ForceObjects.append(ForceObjectDict) if not self.ForceObjects: - QtGui.QMessageBox.critical(None, "Missing prerequisite","No force-constraint nodes defined in the Analysis") + QtGui.QMessageBox.critical(None, "Missing prerequisite", "No force-constraint nodes defined in the Analysis") return False return True @@ -410,7 +410,7 @@ class _JobControlTaskPanel: #dirName = self.form.lineEdit_outputDir.text() dirName = self.TempDir - print 'CalculiX run directory: ',dirName + print 'CalculiX run directory: ', dirName self.Basename = self.TempDir + '/' + self.MeshObject.Name filename = self.Basename + '.inp' @@ -422,7 +422,7 @@ class _JobControlTaskPanel: self.MeshObject.FemMesh.writeABAQUS(filename) # reopen file with "append" and add the analysis definition - inpfile = open(filename,'a') + inpfile = open(filename, 'a') inpfile.write('\n\n') self.femConsoleMessage("Write loads & Co...") @@ -432,7 +432,7 @@ class _JobControlTaskPanel: inpfile.write('** element sets for materials\n') for MaterialObject in self.MaterialObjects: print MaterialObject['Object'].Name, ': ', MaterialObject['Object'].Material['Name'] - inpfile.write('*ELSET,ELSET=' + MaterialObject['Object'].Name + '\n') + inpfile.write('*ELSET,ELSET=' + MaterialObject['Object'].Name + '\n') if len(self.MaterialObjects) == 1: inpfile.write('Eall\n') else: @@ -446,7 +446,7 @@ class _JobControlTaskPanel: for FixedObject in self.FixedObjects: print FixedObject['Object'].Name inpfile.write('*NSET,NSET=' + FixedObject['Object'].Name + '\n') - for o,f in FixedObject['Object'].References: + for o, f in FixedObject['Object'].References: fo = o.Shape.getElement(f) n = [] if fo.ShapeType == 'Face': @@ -469,7 +469,7 @@ class _JobControlTaskPanel: print ForceObject['Object'].Name inpfile.write('*NSET,NSET=' + ForceObject['Object'].Name + '\n') NbrForceNodes = 0 - for o,f in ForceObject['Object'].References: + for o, f in ForceObject['Object'].References: fo = o.Shape.getElement(f) n = [] if fo.ShapeType == 'Face': @@ -603,10 +603,10 @@ class _JobControlTaskPanel: def editCalculixInputFile(self): filename = self.Basename + '.inp' print 'editCalculixInputFile {}'.format(filename) - if self.fem_prefs.GetBool("UseInternalEditor",True): + if self.fem_prefs.GetBool("UseInternalEditor", True): FemGui.open(filename) else: - ext_editor_path = self.fem_prefs.GetString("ExternalEditorPath","") + ext_editor_path = self.fem_prefs.GetString("ExternalEditorPath", "") if ext_editor_path: self.start_ext_editor(ext_editor_path, filename) else: @@ -627,14 +627,14 @@ class _JobControlTaskPanel: self.cwd = QtCore.QDir.currentPath() fi = QtCore.QFileInfo(self.Basename) QtCore.QDir.setCurrent(fi.path()) - self.Calculix.start(self.CalculixBinary, ['-i',fi.baseName()]) + self.Calculix.start(self.CalculixBinary, ['-i', fi.baseName()]) QApplication.restoreOverrideCursor() class _ResultControlTaskPanel: '''The control for the displacement post-processing''' - def __init__(self,object): + def __init__(self, object): # the panel has a tree widget that contains categories # for the subcomponents, such as additions, subtractions. # the categories are shown only if they are not empty. @@ -679,22 +679,22 @@ class _ResultControlTaskPanel: QtGui.qApp.restoreOverrideCursor() - def showDisplacementClicked(self,bool): + def showDisplacementClicked(self, bool): QApplication.setOverrideCursor(Qt.WaitCursor) self.setDisplacement() QtGui.qApp.restoreOverrideCursor() - def sliderValue(self,value): + def sliderValue(self, value): if(self.form.checkBox_ShowDisplacement.isChecked()): self.MeshObject.ViewObject.animate(value) self.form.spinBox_DisplacementFactor.setValue(value) - def sliderMaxValue(self,value): + def sliderMaxValue(self, value): #print 'sliderMaxValue()' self.form.horizontalScrollBar_Factor.setMaximum(value) - def displacementFactorValue(self,value): + def displacementFactorValue(self, value): #print 'displacementFactorValue()' self.form.horizontalScrollBar_Factor.setValue(value) @@ -741,6 +741,6 @@ class _ResultControlTaskPanel: def reject(self): FreeCADGui.Control.closeDialog() -FreeCADGui.addCommand('Fem_NewMechanicalAnalysis',_CommandNewMechanicalAnalysis()) -FreeCADGui.addCommand('Fem_MechanicalJobControl',_CommandMechanicalJobControl()) -FreeCADGui.addCommand('Fem_ShowResult',_CommandMechanicalShowResult()) +FreeCADGui.addCommand('Fem_NewMechanicalAnalysis', _CommandNewMechanicalAnalysis()) +FreeCADGui.addCommand('Fem_MechanicalJobControl', _CommandMechanicalJobControl()) +FreeCADGui.addCommand('Fem_ShowResult', _CommandMechanicalShowResult())