diff --git a/src/Mod/Fem/CalculixLib.py b/src/Mod/Fem/CalculixLib.py index b79cbedda..e3f988673 100644 --- a/src/Mod/Fem/CalculixLib.py +++ b/src/Mod/Fem/CalculixLib.py @@ -113,15 +113,19 @@ def readResult(frd_input) : return {'Nodes':nodes,'Tet10Elem':elements,'Displacement':disp,'Stress':stress} -def importFrd(filename): +def importFrd(filename,Analysis=None): m = readResult(filename); MeshObject = None if(len(m) > 0): import Fem - AnalysisName = os.path.splitext(os.path.basename(filename))[0] - AnalysisObject = FreeCAD.ActiveDocument.addObject('Fem::FemAnalysis','Analysis') - AnalysisObject.Label = AnalysisName - if(m.has_key('Tet10Elem') and m.has_key('Nodes') ): + if Analysis == None: + AnalysisName = os.path.splitext(os.path.basename(filename))[0] + AnalysisObject = FreeCAD.ActiveDocument.addObject('Fem::FemAnalysis','Analysis') + AnalysisObject.Label = AnalysisName + else: + AnalysisObject = Analysis + + if(m.has_key('Tet10Elem') and m.has_key('Nodes') and not Analysis ): mesh = Fem.FemMesh() nds = m['Nodes'] for i in nds: @@ -131,34 +135,36 @@ def importFrd(filename): for i in elms: e = elms[i] mesh.addVolume([e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9]],i) - - MeshObject = FreeCAD.ActiveDocument.addObject('Fem::FemMeshObject','ResultMesh') - MeshObject.FemMesh = mesh - AnalysisObject.Member = AnalysisObject.Member + [MeshObject] + if len(nds) > 0: + MeshObject = FreeCAD.ActiveDocument.addObject('Fem::FemMeshObject','ResultMesh') + MeshObject.FemMesh = mesh + AnalysisObject.Member = AnalysisObject.Member + [MeshObject] if(m.has_key('Displacement')): disp = m['Displacement'] - o = FreeCAD.ActiveDocument.addObject('Fem::FemResultVector','Displacement') - o.Values = disp.values() - o.DataType = 'Displacement' - o.ElementNumbers = disp.keys() - if(MeshObject): - o.Mesh = MeshObject - AnalysisObject.Member = AnalysisObject.Member + [o] + if len(disp)>0: + o = FreeCAD.ActiveDocument.addObject('Fem::FemResultVector','Displacement') + o.Values = disp.values() + o.DataType = 'Displacement' + o.ElementNumbers = disp.keys() + if(MeshObject): + o.Mesh = MeshObject + AnalysisObject.Member = AnalysisObject.Member + [o] if(m.has_key('Stress')): stress = m['Stress'] - o = FreeCAD.ActiveDocument.addObject('Fem::FemResultValue','MisesStress') - mstress = [] - for i in stress.values(): - # van mises stress (http://en.wikipedia.org/wiki/Von_Mises_yield_criterion) - mstress.append( sqrt( pow( i[0] - i[1] ,2) + pow( i[1] - i[2] ,2) + pow( i[2] - i[0] ,2) + 6 * (pow(i[3],2)+pow(i[4],2)+pow(i[5],2) ) ) ) - - o.Values = mstress - o.DataType = 'VanMisesStress' - o.ElementNumbers = stress.keys() - if(MeshObject): - o.Mesh = MeshObject - AnalysisObject.Member = AnalysisObject.Member + [o] + if len(stress)>0: + o = FreeCAD.ActiveDocument.addObject('Fem::FemResultValue','MisesStress') + mstress = [] + for i in stress.values(): + # van mises stress (http://en.wikipedia.org/wiki/Von_Mises_yield_criterion) + mstress.append( sqrt( pow( i[0] - i[1] ,2) + pow( i[1] - i[2] ,2) + pow( i[2] - i[0] ,2) + 6 * (pow(i[3],2)+pow(i[4],2)+pow(i[5],2) ) ) ) + + o.Values = mstress + o.DataType = 'VanMisesStress' + o.ElementNumbers = stress.keys() + if(MeshObject): + o.Mesh = MeshObject + AnalysisObject.Member = AnalysisObject.Member + [o] if(FreeCAD.GuiUp): import FemGui, FreeCADGui if FreeCADGui.activeWorkbench().name() != 'FemWorkbench': diff --git a/src/Mod/Fem/MechanicalAnalysis.py b/src/Mod/Fem/MechanicalAnalysis.py index ba1227e40..4857d670e 100644 --- a/src/Mod/Fem/MechanicalAnalysis.py +++ b/src/Mod/Fem/MechanicalAnalysis.py @@ -20,7 +20,7 @@ #* * #*************************************************************************** -import FreeCAD, Fem, FemLib +import FreeCAD, Fem, FemLib, CalculixLib import os,sys,string,math,shutil,glob,subprocess,tempfile if FreeCAD.GuiUp: @@ -188,7 +188,7 @@ class _ViewProviderFemAnalysis: def doubleClicked(self,vobj): import FemGui - if FemGui.getActiveAnalysis() == None: + if not FemGui.getActiveAnalysis() == self.Object: if FreeCADGui.activeWorkbench().name() != 'FemWorkbench': FreeCADGui.activateWorkbench("FemWorkbench") FemGui.setActiveAnalysis(self.Object) @@ -366,29 +366,22 @@ class _JobControlTaskPanel: inpfile.write('S \n') inpfile.write('*END STEP \n') + # run Claculix + import subprocess,FreeCADGui + #FreeCADGui.updateGui() + #p1 = subprocess.Popen(['C:/Tools/Calculix4Win/c4w/programs/ccx/ccx.exe', '-i','c:/users/jriegel/appdata/local/temp/Pocket_Mesh'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + #ret = None + #while ret == None: + # print p1.communicate() + # FreeCADGui.updateGui() + # ret = p1.poll() - #*MATERIAL, Name=steel - #*ELASTIC - #28000000, 0.3 - #*SOLID SECTION, Elset=Eall, Material=steel - #*STEP - #*STATIC - #*BOUNDARY - #Nfix1,3,3,0 - #Nfix2,2,3,0 - #Nfix3,1,3,0 - #*DLOAD - #*INCLUDE, INPUT=load.dlo - #*NODE FILE - #U - #*EL FILE - #S, E - #*END STEP - #current_file_name - - #young_modulus = float(matmap['FEM_youngsmodulus']) - #poisson_ratio = float(matmap['FEM_poissonratio']) - + ret = subprocess.call(['C:/Tools/Calculix4Win/c4w/programs/ccx/ccx.exe', '-i','c:/users/jriegel/appdata/local/temp/Pocket_Mesh'],shell=True) + print "Calculix terminated with code:" , str(ret) + print "Read Result:" + #FreeCADGui.updateGui() + + CalculixLib.importFrd('c:/users/jriegel/appdata/local/temp/Pocket_Mesh.frd',FemGui.getActiveAnalysis() ) class _ResultControlTaskPanel: '''The control for the displacement post-processing'''