FEM: command module, use selection from command manager module

This commit is contained in:
Bernd Hahnebach
2017-12-06 23:47:29 +01:00
parent 6a5408b5db
commit 65bc90d508
2 changed files with 60 additions and 86 deletions

View File

@@ -360,35 +360,21 @@ class _CommandFemMesh2Mesh(CommandManager):
self.is_active = 'with_femmesh_andor_res'
def Activated(self):
FreeCAD.ActiveDocument.openTransaction("Create FEM mesh")
FreeCADGui.addModule("FemGui")
sel = FreeCADGui.Selection.getSelection()
if (len(sel) == 1):
if(sel[0].isDerivedFrom("Fem::FemMeshObject")):
FreeCAD.ActiveDocument.openTransaction("Create Mesh from FEMMesh")
FreeCADGui.addModule("femmesh.femmesh2mesh")
FreeCADGui.doCommand("out_mesh = femmesh.femmesh2mesh.femmesh_2_mesh(App.ActiveDocument." + sel[0].Name + ".FemMesh)")
FreeCADGui.addModule("Mesh")
FreeCADGui.doCommand("Mesh.show(Mesh.Mesh(out_mesh))")
FreeCADGui.doCommand("App.ActiveDocument." + sel[0].Name + ".ViewObject.hide()")
if (len(sel) == 2):
femmesh = None
res = None
if(sel[0].isDerivedFrom("Fem::FemMeshObject")):
if(sel[1].isDerivedFrom("Fem::FemResultObject")):
femmesh = sel[0]
res = sel[1]
elif(sel[1].isDerivedFrom("Fem::FemMeshObject")):
if(sel[0].isDerivedFrom("Fem::FemResultObject")):
femmesh = sel[1]
res = sel[0]
if femmesh and res:
FreeCAD.ActiveDocument.openTransaction("Create Mesh from FEMMesh")
FreeCADGui.addModule("femmesh.femmesh2mesh")
FreeCADGui.doCommand("out_mesh = femmesh.femmesh2mesh.femmesh_2_mesh(App.ActiveDocument." + femmesh.Name + ".FemMesh, App.ActiveDocument." + res.Name + ")")
FreeCADGui.addModule("Mesh")
FreeCADGui.doCommand("Mesh.show(Mesh.Mesh(out_mesh))")
FreeCADGui.doCommand("App.ActiveDocument." + femmesh.Name + ".ViewObject.hide()")
FreeCAD.ActiveDocument.openTransaction("Create Mesh from FEMMesh")
if self.selobj and not self.selobj2: # no result object selected
FreeCADGui.addModule("femmesh.femmesh2mesh")
FreeCADGui.doCommand("out_mesh = femmesh.femmesh2mesh.femmesh_2_mesh(App.ActiveDocument." + self.selobj.Name + ".FemMesh)")
FreeCADGui.addModule("Mesh")
FreeCADGui.doCommand("Mesh.show(Mesh.Mesh(out_mesh))")
FreeCADGui.doCommand("App.ActiveDocument." + self.selobj.Name + ".ViewObject.hide()")
if self.selobj and self.selobj2:
femmesh = self.selobj
res = self.selobj2
FreeCADGui.addModule("femmesh.femmesh2mesh")
FreeCADGui.doCommand("out_mesh = femmesh.femmesh2mesh.femmesh_2_mesh(App.ActiveDocument." + femmesh.Name + ".FemMesh, App.ActiveDocument." + res.Name + ")")
FreeCADGui.addModule("Mesh")
FreeCADGui.doCommand("Mesh.show(Mesh.Mesh(out_mesh))")
FreeCADGui.doCommand("App.ActiveDocument." + femmesh.Name + ".ViewObject.hide()")
FreeCADGui.Selection.clearSelection()
@@ -405,8 +391,7 @@ class _CommandFemMeshBoundaryLayer(CommandManager):
def Activated(self):
FreeCAD.ActiveDocument.openTransaction("Create FemMeshBoundaryLayer")
FreeCADGui.addModule("ObjectsFem")
self.mesh = FreeCADGui.Selection.getSelection()[0] # see 'with_gmsh_femmesh' in CommandManager for selection check
FreeCADGui.doCommand("ObjectsFem.makeMeshBoundaryLayer(FreeCAD.ActiveDocument, FreeCAD.ActiveDocument." + self.mesh.Name + ")")
FreeCADGui.doCommand("ObjectsFem.makeMeshBoundaryLayer(FreeCAD.ActiveDocument, FreeCAD.ActiveDocument." + self.selobj.Name + ")")
FreeCADGui.Selection.clearSelection()
@@ -421,12 +406,10 @@ class _CommandFemMeshClear(CommandManager):
self.is_active = 'with_femmesh'
def Activated(self):
sel = FreeCADGui.Selection.getSelection()
if len(sel) == 1 and sel[0].isDerivedFrom("Fem::FemMeshObject"):
FreeCAD.ActiveDocument.openTransaction("Clear FEM mesh")
FreeCADGui.addModule("Fem")
FreeCADGui.doCommand("App.ActiveDocument." + sel[0].Name + ".FemMesh = Fem.FemMesh()")
FreeCADGui.doCommand("App.ActiveDocument.recompute()")
FreeCAD.ActiveDocument.openTransaction("Clear FEM mesh")
FreeCADGui.addModule("Fem")
FreeCADGui.doCommand("App.ActiveDocument." + self.selobj.Name + ".FemMesh = Fem.FemMesh()")
FreeCADGui.doCommand("App.ActiveDocument.recompute()")
FreeCADGui.Selection.clearSelection()
@@ -442,18 +425,15 @@ class _CommandFemMeshGmshFromShape(CommandManager):
def Activated(self):
FreeCAD.ActiveDocument.openTransaction("Create FEM mesh by Gmsh")
FreeCADGui.addModule("FemGui")
sel = FreeCADGui.Selection.getSelection()
if (len(sel) == 1):
if(sel[0].isDerivedFrom("Part::Feature")):
mesh_obj_name = 'FEMMeshGmsh'
# mesh_obj_name = sel[0].Name + "_Mesh" # if requested by some people add Preference for this
FreeCADGui.addModule("ObjectsFem")
FreeCADGui.doCommand("ObjectsFem.makeMeshGmsh(FreeCAD.ActiveDocument, '" + mesh_obj_name + "')")
FreeCADGui.doCommand("FreeCAD.ActiveDocument.ActiveObject.Part = FreeCAD.ActiveDocument." + sel[0].Name)
if FemGui.getActiveAnalysis():
FreeCADGui.addModule("FemGui")
FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(FreeCAD.ActiveDocument.ActiveObject)")
FreeCADGui.doCommand("Gui.ActiveDocument.setEdit(FreeCAD.ActiveDocument.ActiveObject.Name)")
mesh_obj_name = 'FEMMeshGmsh'
# mesh_obj_name = self.selobj.Name + "_Mesh" # if requested by some people add Preference for this
FreeCADGui.addModule("ObjectsFem")
FreeCADGui.doCommand("ObjectsFem.makeMeshGmsh(FreeCAD.ActiveDocument, '" + mesh_obj_name + "')")
FreeCADGui.doCommand("FreeCAD.ActiveDocument.ActiveObject.Part = FreeCAD.ActiveDocument." + self.selobj.Name)
if FemGui.getActiveAnalysis():
FreeCADGui.addModule("FemGui")
FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(FreeCAD.ActiveDocument.ActiveObject)")
FreeCADGui.doCommand("Gui.ActiveDocument.setEdit(FreeCAD.ActiveDocument.ActiveObject.Name)")
FreeCADGui.Selection.clearSelection()
@@ -470,8 +450,7 @@ class _CommandFemMeshGroup(CommandManager):
def Activated(self):
FreeCAD.ActiveDocument.openTransaction("Create FemMeshGroup")
FreeCADGui.addModule("ObjectsFem")
self.mesh = FreeCADGui.Selection.getSelection()[0] # see 'with_gmsh_femmesh' in CommandManager for selection check
FreeCADGui.doCommand("ObjectsFem.makeMeshGroup(FreeCAD.ActiveDocument, FreeCAD.ActiveDocument." + self.mesh.Name + ")")
FreeCADGui.doCommand("ObjectsFem.makeMeshGroup(FreeCAD.ActiveDocument, FreeCAD.ActiveDocument." + self.selobj.Name + ")")
FreeCADGui.Selection.clearSelection()
@@ -487,17 +466,14 @@ class _CommandFemMeshNetgenFromShape(CommandManager):
def Activated(self):
FreeCAD.ActiveDocument.openTransaction("Create FEM mesh Netgen")
FreeCADGui.addModule("FemGui")
sel = FreeCADGui.Selection.getSelection()
if (len(sel) == 1):
if(sel[0].isDerivedFrom("Part::Feature")):
mesh_obj_name = 'FEMMeshNetgen'
# mesh_obj_name = sel[0].Name + "_Mesh" # if requested by some people add Preference for this
FreeCADGui.doCommand("App.ActiveDocument.addObject('Fem::FemMeshShapeNetgenObject', '" + mesh_obj_name + "')")
FreeCADGui.doCommand("App.ActiveDocument.ActiveObject.Shape = App.activeDocument()." + sel[0].Name)
if FemGui.getActiveAnalysis():
FreeCADGui.addModule("FemGui")
FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(App.ActiveDocument.ActiveObject)")
FreeCADGui.doCommand("Gui.ActiveDocument.setEdit(App.ActiveDocument.ActiveObject.Name)")
mesh_obj_name = 'FEMMeshNetgen'
# mesh_obj_name = sel[0].Name + "_Mesh" # if requested by some people add Preference for this
FreeCADGui.doCommand("App.ActiveDocument.addObject('Fem::FemMeshShapeNetgenObject', '" + mesh_obj_name + "')")
FreeCADGui.doCommand("App.ActiveDocument.ActiveObject.Shape = App.activeDocument()." + self.selobj.Name)
if FemGui.getActiveAnalysis():
FreeCADGui.addModule("FemGui")
FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(App.ActiveDocument.ActiveObject)")
FreeCADGui.doCommand("Gui.ActiveDocument.setEdit(App.ActiveDocument.ActiveObject.Name)")
FreeCADGui.Selection.clearSelection()
@@ -512,13 +488,11 @@ class _CommandFemMeshPrintInfo(CommandManager):
self.is_active = 'with_femmesh'
def Activated(self):
sel = FreeCADGui.Selection.getSelection()
if len(sel) == 1 and sel[0].isDerivedFrom("Fem::FemMeshObject"):
FreeCAD.ActiveDocument.openTransaction("Print FEM mesh info")
FreeCADGui.doCommand("print(App.ActiveDocument." + sel[0].Name + ".FemMesh)")
FreeCADGui.addModule("PySide")
FreeCADGui.doCommand("mesh_info = str(App.ActiveDocument." + sel[0].Name + ".FemMesh)")
FreeCADGui.doCommand("PySide.QtGui.QMessageBox.information(None, 'FEM Mesh Info', mesh_info)")
FreeCAD.ActiveDocument.openTransaction("Print FEM mesh info")
FreeCADGui.doCommand("print(App.ActiveDocument." + self.selobj.Name + ".FemMesh)")
FreeCADGui.addModule("PySide")
FreeCADGui.doCommand("mesh_info = str(App.ActiveDocument." + self.selobj.Name + ".FemMesh)")
FreeCADGui.doCommand("PySide.QtGui.QMessageBox.information(None, 'FEM Mesh Info', mesh_info)")
FreeCADGui.Selection.clearSelection()
@@ -535,8 +509,7 @@ class _CommandFemMeshRegion(CommandManager):
def Activated(self):
FreeCAD.ActiveDocument.openTransaction("Create FemMeshRegion")
FreeCADGui.addModule("ObjectsFem")
self.mesh = FreeCADGui.Selection.getSelection()[0] # see 'with_gmsh_femmesh' in CommandManager for selection check
FreeCADGui.doCommand("ObjectsFem.makeMeshRegion(FreeCAD.ActiveDocument, FreeCAD.ActiveDocument." + self.mesh.Name + ")")
FreeCADGui.doCommand("ObjectsFem.makeMeshRegion(FreeCAD.ActiveDocument, FreeCAD.ActiveDocument." + self.selobj.Name + ")")
FreeCADGui.Selection.clearSelection()
@@ -551,11 +524,7 @@ class _CommandFemResultShow(CommandManager):
self.is_active = 'with_selresult'
def Activated(self):
sel = FreeCADGui.Selection.getSelection()
if (len(sel) == 1):
if sel[0].isDerivedFrom("Fem::FemResultObject"):
result_object = sel[0]
result_object.ViewObject.startEditing()
self.selobj.ViewObject.startEditing()
class _CommandFemResultsPurge(CommandManager):
@@ -621,8 +590,7 @@ class _CommandFemSolverControl(CommandManager):
self.is_active = 'with_solver'
def Activated(self):
solver_obj = FreeCADGui.Selection.getSelection()[0]
FreeCADGui.ActiveDocument.setEdit(solver_obj, 0)
FreeCADGui.ActiveDocument.setEdit(self.selobj, 0)
class _CommandFemSolverElmer(CommandManager):
@@ -663,7 +631,7 @@ class _CommandFemSolverRun(CommandManager):
else:
print ("CalculiX failed ccx finished with error {}".format(ret_code))
self.solver = FreeCADGui.Selection.getSelection()[0] # see 'with_solver' in CommandManager for selection check
self.solver = self.selobj
if hasattr(self.solver, "SolverType") and self.solver.SolverType == "FemSolverCalculix":
import FemToolsCcx
self.fea = FemToolsCcx.FemToolsCcx(None, self.solver)

View File

@@ -44,6 +44,7 @@ class CommandManager(object):
# FIXME add option description
self.is_active = None
self.selobj = None
self.selobj2 = None
def GetResources(self):
return self.resources
@@ -88,21 +89,18 @@ class CommandManager(object):
return results
def result_selected(self):
result_is_in_active_analysis = False
sel = FreeCADGui.Selection.getSelection()
if len(sel) == 1 and sel[0].isDerivedFrom("Fem::FemResultObject"):
for o in FemGui.getActiveAnalysis().Group:
if o == sel[0]:
result_is_in_active_analysis = True
break
if result_is_in_active_analysis:
return True
else:
return False
self.selobj = o
return True
return False
def part_feature_selected(self):
sel = FreeCADGui.Selection.getSelection()
if len(sel) == 1 and sel[0].isDerivedFrom("Part::Feature"):
self.selobj = sel[0]
return True
else:
return False
@@ -110,6 +108,7 @@ class CommandManager(object):
def femmesh_selected(self):
sel = FreeCADGui.Selection.getSelection()
if len(sel) == 1 and sel[0].isDerivedFrom("Fem::FemMeshObject"):
self.selobj = sel[0]
return True
else:
return False
@@ -117,6 +116,7 @@ class CommandManager(object):
def gmsh_femmesh_selected(self):
sel = FreeCADGui.Selection.getSelection()
if len(sel) == 1 and hasattr(sel[0], "Proxy") and sel[0].Proxy.Type == "FemMeshGmsh":
self.selobj = sel[0]
return True
else:
return False
@@ -147,15 +147,20 @@ class CommandManager(object):
def with_femmesh_andor_res_selected(self):
sel = FreeCADGui.Selection.getSelection()
if len(sel) == 1 and sel[0].isDerivedFrom("Fem::FemMeshObject"):
self.selobj = sel[0]
return True
elif len(sel) == 2:
if(sel[0].isDerivedFrom("Fem::FemMeshObject")):
if(sel[1].isDerivedFrom("Fem::FemResultObject")):
self.selobj = sel[0] # mesh
self.selobj2 = sel[1] # res
return True
else:
return False
elif(sel[1].isDerivedFrom("Fem::FemMeshObject")):
if(sel[0].isDerivedFrom("Fem::FemResultObject")):
self.selobj = sel[1] # mesh
self.selobj2 = sel[0] # res
return True
else:
return False
@@ -170,6 +175,7 @@ class CommandManager(object):
def solver_selected(self):
sel = FreeCADGui.Selection.getSelection()
if len(sel) == 1 and sel[0].isDerivedFrom("Fem::FemSolverObjectPython"):
self.selobj = sel[0]
return True
else:
return False