diff --git a/src/Mod/Fem/App/FemAnalysis.cpp b/src/Mod/Fem/App/FemAnalysis.cpp index 1d7344f91..d3fefd474 100644 --- a/src/Mod/Fem/App/FemAnalysis.cpp +++ b/src/Mod/Fem/App/FemAnalysis.cpp @@ -29,6 +29,7 @@ #include "FemAnalysis.h" #include #include +#include using namespace Fem; using namespace App; @@ -38,7 +39,9 @@ PROPERTY_SOURCE(Fem::FemAnalysis, App::DocumentObject) FemAnalysis::FemAnalysis() { + Base::Uuid id; ADD_PROPERTY_TYPE(Member,(0), "Analysis member",Prop_None,"All objects belonging to the Analysis"); + ADD_PROPERTY_TYPE(Uid,(id),0,App::Prop_None,"UUID of the Analysis"); } FemAnalysis::~FemAnalysis() diff --git a/src/Mod/Fem/App/FemAnalysis.h b/src/Mod/Fem/App/FemAnalysis.h index 6be802e75..270d85075 100644 --- a/src/Mod/Fem/App/FemAnalysis.h +++ b/src/Mod/Fem/App/FemAnalysis.h @@ -51,7 +51,11 @@ public: virtual short mustExecute(void) const; virtual PyObject *getPyObject(void); + /// Member objects of the Analysis App::PropertyLinkList Member; + /// unique identifier of the Analysis + App::PropertyUUID Uid; + protected: /// get called by the container when a property has changed diff --git a/src/Mod/Machining_Distortion/InitGui.py b/src/Mod/Machining_Distortion/InitGui.py index f0c06cca1..81dc53a47 100755 --- a/src/Mod/Machining_Distortion/InitGui.py +++ b/src/Mod/Machining_Distortion/InitGui.py @@ -112,8 +112,8 @@ class MachiningDistortionWorkbench ( Workbench ): " NlllllOP", " QRPSTUVW"}; """ - MenuText = "Machining Distortion" - ToolTip = "MachiningDistortion workbench" + MenuText = "Part Distortion" + ToolTip = "PartDistortion workbench" def setWatchers(self): class WatcherStart: @@ -121,7 +121,8 @@ class MachiningDistortionWorkbench ( Workbench ): self.commands = ["MachDist_Analysis"] self.title = "Start" def shouldShow(self): - return True + import FemGui + return FemGui.getActiveAnalysis() == None class WatcherFill: def __init__(self): @@ -129,10 +130,7 @@ class MachiningDistortionWorkbench ( Workbench ): self.title = "Modify objects" def shouldShow(self): import FemGui - if FemGui.getActiveAnalysis(): - return True - else: - return False + return FemGui.getActiveAnalysis() != None #class DraftTrayWatcher: # def __init__(self,traywidget): @@ -165,8 +163,9 @@ class MachiningDistortionWorkbench ( Workbench ): CmdList = ["MachiningDistortion_StartGUI","MachiningDistortion_StartPostprocess"] self.appendToolbar("MachiningDistortionTools",CmdList) self.appendMenu("Machining Distortion",CmdList) - self.appendToolbar("MachiningDistortionTools2",["MachDist_Analysis","MachDist_Mesh","MachDist_Alignment","MachDist_Material","MachDist_Isostatic"]) - self.appendMenu("Machining Distortion2",["MachDist_Analysis","MachDist_Mesh","MachDist_Alignment","MachDist_Material","MachDist_Isostatic"]) + CmdList2 = ["MachDist_Analysis","Separator","MachDist_Mesh","MachDist_Alignment","MachDist_Material","MachDist_Isostatic"] + self.appendToolbar("MachiningDistortionTools2",CmdList2) + self.appendMenu("Machining Distortion2",CmdList2) self.setWatchers() diff --git a/src/Mod/Machining_Distortion/MachDistAnalysis.py b/src/Mod/Machining_Distortion/MachDistAnalysis.py index fd26852ae..576181a35 100644 --- a/src/Mod/Machining_Distortion/MachDistAnalysis.py +++ b/src/Mod/Machining_Distortion/MachDistAnalysis.py @@ -45,16 +45,27 @@ class _CommandAnalysis: def Activated(self): FreeCAD.ActiveDocument.openTransaction("Create Analysis") FreeCADGui.addModule("FemGui") - FreeCADGui.doCommand("App.activeDocument().addObject('Fem::FemAnalysis','MachineDistortion')") + FreeCADGui.doCommand("App.activeDocument().addObject('Fem::FemAnalysis','PartDistortion')") FreeCADGui.doCommand("FemGui.setActiveAnalysis(App.activeDocument().ActiveObject)") + sel = FreeCADGui.Selection.getSelection() + if (len(sel) == 1): + 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().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+"')") + #FreeCADGui.doCommand("App.activeDocument().ActiveObject.touch()") + #FreeCADGui.doCommand("App.activeDocument().recompute()") + FreeCADGui.doCommand("Gui.activeDocument().setEdit(App.ActiveDocument.ActiveObject.Name)") + FreeCAD.ActiveDocument.commitTransaction() FreeCADGui.Selection.clearSelection() def IsActive(self): - if FreeCADGui.ActiveDocument: - return True - else: - return False + import FemGui + return FreeCADGui.ActiveDocument != None and FemGui.getActiveAnalysis() == None FreeCADGui.addCommand('MachDist_Analysis',_CommandAnalysis()) diff --git a/src/Mod/Machining_Distortion/MachDistMesh.py b/src/Mod/Machining_Distortion/MachDistMesh.py index 5c147c421..0f3798f26 100644 --- a/src/Mod/Machining_Distortion/MachDistMesh.py +++ b/src/Mod/Machining_Distortion/MachDistMesh.py @@ -38,20 +38,54 @@ class _CommandMesh: "the MachDist Mesh command definition" def GetResources(self): return {'Pixmap' : 'MachDist_AddFemMesh', - 'MenuText': QtCore.QT_TRANSLATE_NOOP("MachDist_Mesh","Add Mesh"), + 'MenuText': QtCore.QT_TRANSLATE_NOOP("MachDist_Mesh","Add Part"), 'Accel': "M", - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("MachDist_Mesh","Creates or edit the material definition.")} + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("MachDist_Mesh","Add a Part to the Analysis.")} def Activated(self): - FreeCAD.ActiveDocument.openTransaction("Create Mesh") - FreeCADGui.doCommand("import MachDist") - FreeCADGui.doCommand("axe = MachDist.makeMesh()") - FreeCADGui.doCommand("MachDist.makeStructuralSystem(" + MachDistCommands.getStringList(st) + ",[axe])") - FreeCADGui.doCommand("MachDist.makeMesh()") + FreeCAD.ActiveDocument.openTransaction("Add part") + FreeCADGui.addModule("FemGui") + sel = FreeCADGui.Selection.getSelection() + if (len(sel) == 1): + 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().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+"')") + FreeCADGui.doCommand("Gui.activeDocument().setEdit(App.ActiveDocument.ActiveObject.Name)") + else: + import os + filename = QtGui.QFileDialog.getOpenFileName(QtGui.qApp.activeWindow(),'Open part file..',os.getcwd(),'Mesh or Part files (*.bdf *.stp *.igs);;All files(*)') + if filename.right(3) in (u'bdf'): + FreeCADGui.addModule("Fem") + FreeCADGui.doCommand("Fem.insert('" + str(filename) +"','"+FreeCAD.ActiveDocument.Name+ "')") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [App.activeDocument().ActiveObject]") + FreeCADGui.doCommand("Gui.SendMsgToActiveView('ViewFit')") + if filename.right(3) in (u'stp',u'igs'): + FreeCADGui.addModule("Part") + FreeCADGui.doCommand("Part.insert('" + str(filename) +"','"+FreeCAD.ActiveDocument.Name+ "')") + FreeCADGui.doCommand("Gui.SendMsgToActiveView('ViewFit')") + name = FreeCAD.activeDocument().ActiveObject.Name + FreeCADGui.doCommand("App.activeDocument().addObject('Fem::FemMeshShapeNetgenObject','"+name +"_Mesh')") + FreeCADGui.doCommand("App.activeDocument().ActiveObject.Shape = App.activeDocument()."+name) + FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [App.activeDocument().ActiveObject]") + FreeCADGui.doCommand("Gui.activeDocument().hide('"+name+"')") + FreeCADGui.doCommand("Gui.activeDocument().setEdit(App.ActiveDocument.ActiveObject.Name)") + + + + FreeCAD.ActiveDocument.commitTransaction() def IsActive(self): - if FemGui.getActiveAnalysis(): + import FemGui + # check if a active analysis is present and no Mesh in it + if FemGui.getActiveAnalysis() != None: + for i in FemGui.getActiveAnalysis().Member: + if i.isDerivedFrom("Fem::FemMeshObject"): + return False return True else: return False