implement user interface for creating a Analyses and add a part

This commit is contained in:
jriegel 2013-07-09 22:15:06 +02:00
parent 9d05dcc85c
commit d5ec1da95b
5 changed files with 73 additions and 22 deletions

View File

@ -29,6 +29,7 @@
#include "FemAnalysis.h"
#include <App/DocumentObjectPy.h>
#include <Base/Placement.h>
#include <Base/Uuid.h>
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()

View File

@ -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

View File

@ -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()

View File

@ -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())

View File

@ -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