FEM: command package, move equation commands into commtand class module
This commit is contained in:
@@ -104,7 +104,6 @@ SET(FemObjectsScripts_SRCS
|
|||||||
SET(FemCommand_SRCS
|
SET(FemCommand_SRCS
|
||||||
femcommand/__init__.py
|
femcommand/__init__.py
|
||||||
femcommand/commands.py
|
femcommand/commands.py
|
||||||
femcommand/_CommandFemEquation.py
|
|
||||||
femcommand/manager.py
|
femcommand/manager.py
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ INSTALL(
|
|||||||
FILES
|
FILES
|
||||||
femcommand/__init__.py
|
femcommand/__init__.py
|
||||||
femcommand/commands.py
|
femcommand/commands.py
|
||||||
femcommand/_CommandFemEquation.py
|
|
||||||
femcommand/manager.py
|
femcommand/manager.py
|
||||||
DESTINATION
|
DESTINATION
|
||||||
Mod/Fem/femcommand
|
Mod/Fem/femcommand
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ class FemWorkbench (Workbench):
|
|||||||
import Fem
|
import Fem
|
||||||
import FemGui
|
import FemGui
|
||||||
import femcommand.commands
|
import femcommand.commands
|
||||||
import femcommand._CommandFemEquation
|
|
||||||
|
|
||||||
def GetClassName(self):
|
def GetClassName(self):
|
||||||
return "FemGui::Workbench"
|
return "FemGui::Workbench"
|
||||||
|
|||||||
@@ -1,130 +0,0 @@
|
|||||||
# ***************************************************************************
|
|
||||||
# * *
|
|
||||||
# * Copyright (c) 2017 - Markus Hovorka <m.hovorka@live.de> *
|
|
||||||
# * *
|
|
||||||
# * This program is free software; you can redistribute it and/or modify *
|
|
||||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
|
||||||
# * as published by the Free Software Foundation; either version 2 of *
|
|
||||||
# * the License, or (at your option) any later version. *
|
|
||||||
# * for detail see the LICENCE text file. *
|
|
||||||
# * *
|
|
||||||
# * This program is distributed in the hope that it will be useful, *
|
|
||||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
||||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
||||||
# * GNU Library General Public License for more details. *
|
|
||||||
# * *
|
|
||||||
# * You should have received a copy of the GNU Library General Public *
|
|
||||||
# * License along with this program; if not, write to the Free Software *
|
|
||||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
|
||||||
# * USA *
|
|
||||||
# * *
|
|
||||||
# ***************************************************************************
|
|
||||||
|
|
||||||
|
|
||||||
__title__ = "_CommandFemEquation"
|
|
||||||
__author__ = "Markus Hovorka"
|
|
||||||
__url__ = "http://www.freecadweb.org"
|
|
||||||
|
|
||||||
|
|
||||||
from PySide import QtCore
|
|
||||||
|
|
||||||
import FreeCAD as App
|
|
||||||
import FreeCADGui as Gui
|
|
||||||
import FemUtils
|
|
||||||
|
|
||||||
|
|
||||||
class _Base(QtCore.QObject):
|
|
||||||
|
|
||||||
def getSpecifier(self):
|
|
||||||
raise NotImplementedError()
|
|
||||||
|
|
||||||
def Activated(self):
|
|
||||||
s = Gui.Selection.getSelection()
|
|
||||||
if len(s) == 1 and FemUtils.isDerivedFrom(s[0], "Fem::FemSolverObject"):
|
|
||||||
App.ActiveDocument.openTransaction(
|
|
||||||
"Add %s equation to %s"
|
|
||||||
% (self.getSpecifier(), s[0].Label))
|
|
||||||
Gui.doCommand(
|
|
||||||
"App.ActiveDocument.%(obj)s.Proxy.addEquation("
|
|
||||||
"App.ActiveDocument.%(obj)s, '%(name)s')"
|
|
||||||
% {"obj": s[0].Name, "name": self.getSpecifier()})
|
|
||||||
App.ActiveDocument.commitTransaction()
|
|
||||||
App.ActiveDocument.recompute()
|
|
||||||
|
|
||||||
def IsActive(self):
|
|
||||||
s = Gui.Selection.getSelection()
|
|
||||||
if len(s) == 1 and FemUtils.isDerivedFrom(s[0], "Fem::FemSolverObject"):
|
|
||||||
return s[0].Proxy.isSupported(self.getSpecifier())
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
class Heat(_Base):
|
|
||||||
|
|
||||||
def getSpecifier(self):
|
|
||||||
return "Heat"
|
|
||||||
|
|
||||||
def GetResources(self):
|
|
||||||
return {
|
|
||||||
'Pixmap': 'fem-equation-heat',
|
|
||||||
'MenuText': "Heat Equation",
|
|
||||||
'ToolTip': "Creates a FEM constraint body heat flux"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class Elasticity(_Base):
|
|
||||||
|
|
||||||
def getSpecifier(self):
|
|
||||||
return "Elasticity"
|
|
||||||
|
|
||||||
def GetResources(self):
|
|
||||||
return {
|
|
||||||
'Pixmap': 'fem-equation-elasticity',
|
|
||||||
'MenuText': "Elasticity Equation",
|
|
||||||
'ToolTip': "Creates a FEM constraint for elasticity"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class Electrostatic(_Base):
|
|
||||||
|
|
||||||
def getSpecifier(self):
|
|
||||||
return "Electrostatic"
|
|
||||||
|
|
||||||
def GetResources(self):
|
|
||||||
return {
|
|
||||||
'Pixmap': 'fem-equation-electrostatic',
|
|
||||||
'MenuText': "Electrostatic Equation",
|
|
||||||
'ToolTip': "Creates a FEM equation for electrostatic"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class Fluxsolver(_Base):
|
|
||||||
|
|
||||||
def getSpecifier(self):
|
|
||||||
return "Fluxsolver"
|
|
||||||
|
|
||||||
def GetResources(self):
|
|
||||||
return {
|
|
||||||
'Pixmap': 'fem-equation-fluxsolver',
|
|
||||||
'MenuText': "Flux Solver Equation",
|
|
||||||
'ToolTip': "Creates a FEM equation for solving the flux or gradient"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class Flow(_Base):
|
|
||||||
|
|
||||||
def getSpecifier(self):
|
|
||||||
return "Flow"
|
|
||||||
|
|
||||||
def GetResources(self):
|
|
||||||
return {
|
|
||||||
'Pixmap': 'fem-equation-flow',
|
|
||||||
'MenuText': "Flow Equation",
|
|
||||||
'ToolTip': "Creates a FEM constraint body heat flux"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Gui.addCommand('FEM_EquationHeat', Heat())
|
|
||||||
Gui.addCommand('FEM_EquationElasticity', Elasticity())
|
|
||||||
Gui.addCommand('FEM_EquationElectrostatic', Electrostatic())
|
|
||||||
Gui.addCommand('FEM_EquationFluxsolver', Fluxsolver())
|
|
||||||
Gui.addCommand('FEM_EquationFlow', Flow())
|
|
||||||
@@ -198,6 +198,86 @@ class _CommandFemElementGeometry2D(CommandManager):
|
|||||||
FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeElementGeometry2D(FreeCAD.ActiveDocument))")
|
FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeElementGeometry2D(FreeCAD.ActiveDocument))")
|
||||||
|
|
||||||
|
|
||||||
|
class _CommandFemEquationElectrostatic(CommandManager):
|
||||||
|
"The FEM_EquationElectrostatic command definition"
|
||||||
|
def __init__(self):
|
||||||
|
super(_CommandFemEquationElectrostatic, self).__init__()
|
||||||
|
self.resources = {'Pixmap': 'fem-equation-electrostatic',
|
||||||
|
'MenuText': QtCore.QT_TRANSLATE_NOOP("FEM_EquationElectrostatic", "Electrostatic equation"),
|
||||||
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("FEM_EquationElectrostatic", "Creates a FEM equation for electrostatic")}
|
||||||
|
self.is_active = 'with_solver_elmer'
|
||||||
|
|
||||||
|
def Activated(self):
|
||||||
|
FreeCAD.ActiveDocument.openTransaction("Create FemEquationElasticity")
|
||||||
|
FreeCADGui.addModule("ObjectsFem")
|
||||||
|
FreeCADGui.doCommand("ObjectsFem.makeEquationElectrostatic(FreeCAD.ActiveDocument, FreeCAD.ActiveDocument." + self.selobj.Name + ")")
|
||||||
|
FreeCADGui.Selection.clearSelection()
|
||||||
|
|
||||||
|
|
||||||
|
class _CommandFemEquationElasticity(CommandManager):
|
||||||
|
"The FEM_EquationElasticity command definition"
|
||||||
|
def __init__(self):
|
||||||
|
super(_CommandFemEquationElasticity, self).__init__()
|
||||||
|
self.resources = {'Pixmap': 'fem-equation-elasticity',
|
||||||
|
'MenuText': QtCore.QT_TRANSLATE_NOOP("FEM_EquationElasticity", "Elasticity equation"),
|
||||||
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("FEM_EquationElasticity", "Creates a FEM equation for elasticity")}
|
||||||
|
self.is_active = 'with_solver_elmer'
|
||||||
|
|
||||||
|
def Activated(self):
|
||||||
|
FreeCAD.ActiveDocument.openTransaction("Create FemEquationElasticity")
|
||||||
|
FreeCADGui.addModule("ObjectsFem")
|
||||||
|
FreeCADGui.doCommand("ObjectsFem.makeEquationElasticity(FreeCAD.ActiveDocument, FreeCAD.ActiveDocument." + self.selobj.Name + ")")
|
||||||
|
FreeCADGui.Selection.clearSelection()
|
||||||
|
|
||||||
|
|
||||||
|
class _CommandFemEquationFlow(CommandManager):
|
||||||
|
"The FEM_EquationFlow command definition"
|
||||||
|
def __init__(self):
|
||||||
|
super(_CommandFemEquationFlow, self).__init__()
|
||||||
|
self.resources = {'Pixmap': 'fem-equation-flow',
|
||||||
|
'MenuText': QtCore.QT_TRANSLATE_NOOP("FEM_EquationFlow", "Flow equation"),
|
||||||
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("FEM_EquationFlow", "Creates a FEM equation for flow")}
|
||||||
|
self.is_active = 'with_solver_elmer'
|
||||||
|
|
||||||
|
def Activated(self):
|
||||||
|
FreeCAD.ActiveDocument.openTransaction("Create FemEquationFlow")
|
||||||
|
FreeCADGui.addModule("ObjectsFem")
|
||||||
|
FreeCADGui.doCommand("ObjectsFem.makeEquationFlow(FreeCAD.ActiveDocument, FreeCAD.ActiveDocument." + self.selobj.Name + ")")
|
||||||
|
FreeCADGui.Selection.clearSelection()
|
||||||
|
|
||||||
|
|
||||||
|
class _CommandFemEquationFluxsolver(CommandManager):
|
||||||
|
"The FEM_EquationFluxsolver command definition"
|
||||||
|
def __init__(self):
|
||||||
|
super(_CommandFemEquationFluxsolver, self).__init__()
|
||||||
|
self.resources = {'Pixmap': 'fem-equation-fluxsolver',
|
||||||
|
'MenuText': QtCore.QT_TRANSLATE_NOOP("FEM_EquationFluxsolver", "Fluxsolver equation"),
|
||||||
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("FEM_EquationFluxsolver", "Creates a FEM equation for fluxsolver")}
|
||||||
|
self.is_active = 'with_solver_elmer'
|
||||||
|
|
||||||
|
def Activated(self):
|
||||||
|
FreeCAD.ActiveDocument.openTransaction("Create FemEquationFluxsolver")
|
||||||
|
FreeCADGui.addModule("ObjectsFem")
|
||||||
|
FreeCADGui.doCommand("ObjectsFem.makeEquationFluxsolver(FreeCAD.ActiveDocument, FreeCAD.ActiveDocument." + self.selobj.Name + ")")
|
||||||
|
FreeCADGui.Selection.clearSelection()
|
||||||
|
|
||||||
|
|
||||||
|
class _CommandFemEquationHeat(CommandManager):
|
||||||
|
"The FEM_EquationHeat command definition"
|
||||||
|
def __init__(self):
|
||||||
|
super(_CommandFemEquationHeat, self).__init__()
|
||||||
|
self.resources = {'Pixmap': 'fem-equation-heat',
|
||||||
|
'MenuText': QtCore.QT_TRANSLATE_NOOP("FEM_EquationHeat", "Fluxsolver heat"),
|
||||||
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("FEM_EquationHeat", "Creates a FEM equation for heat")}
|
||||||
|
self.is_active = 'with_solver_elmer'
|
||||||
|
|
||||||
|
def Activated(self):
|
||||||
|
FreeCAD.ActiveDocument.openTransaction("Create FemEquationHeat")
|
||||||
|
FreeCADGui.addModule("ObjectsFem")
|
||||||
|
FreeCADGui.doCommand("ObjectsFem.makeEquationHeat(FreeCAD.ActiveDocument, FreeCAD.ActiveDocument." + self.selobj.Name + ")")
|
||||||
|
FreeCADGui.Selection.clearSelection()
|
||||||
|
|
||||||
|
|
||||||
class _CommandFemMaterialFluid(CommandManager):
|
class _CommandFemMaterialFluid(CommandManager):
|
||||||
"The FEM_MaterialFluid command definition"
|
"The FEM_MaterialFluid command definition"
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -652,6 +732,11 @@ FreeCADGui.addCommand('FEM_ConstraintSelfWeight', _CommandFemConstraintSelfWeigh
|
|||||||
FreeCADGui.addCommand('FEM_ElementFluid1D', _CommandFemElementFluid1D())
|
FreeCADGui.addCommand('FEM_ElementFluid1D', _CommandFemElementFluid1D())
|
||||||
FreeCADGui.addCommand('FEM_ElementGeometry1D', _CommandFemElementGeometry1D())
|
FreeCADGui.addCommand('FEM_ElementGeometry1D', _CommandFemElementGeometry1D())
|
||||||
FreeCADGui.addCommand('FEM_ElementGeometry2D', _CommandFemElementGeometry2D())
|
FreeCADGui.addCommand('FEM_ElementGeometry2D', _CommandFemElementGeometry2D())
|
||||||
|
FreeCADGui.addCommand('FEM_EquationElectrostatic', _CommandFemEquationElectrostatic())
|
||||||
|
FreeCADGui.addCommand('FEM_EquationElasticity', _CommandFemEquationElasticity())
|
||||||
|
FreeCADGui.addCommand('FEM_EquationFlow', _CommandFemEquationFlow())
|
||||||
|
FreeCADGui.addCommand('FEM_EquationFluxsolver', _CommandFemEquationFluxsolver())
|
||||||
|
FreeCADGui.addCommand('FEM_EquationHeat', _CommandFemEquationHeat())
|
||||||
FreeCADGui.addCommand('FEM_MaterialFluid', _CommandFemMaterialFluid())
|
FreeCADGui.addCommand('FEM_MaterialFluid', _CommandFemMaterialFluid())
|
||||||
FreeCADGui.addCommand('FEM_MaterialMechanicalNonlinear', _CommandFemMaterialMechanicalNonlinear())
|
FreeCADGui.addCommand('FEM_MaterialMechanicalNonlinear', _CommandFemMaterialMechanicalNonlinear())
|
||||||
FreeCADGui.addCommand('FEM_MaterialSolid', _CommandFemMaterialSolid())
|
FreeCADGui.addCommand('FEM_MaterialSolid', _CommandFemMaterialSolid())
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class CommandManager(object):
|
|||||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_Command", "Default Fem Command ToolTip")}
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_Command", "Default Fem Command ToolTip")}
|
||||||
# FIXME add option description
|
# FIXME add option description
|
||||||
self.is_active = None
|
self.is_active = None
|
||||||
|
self.selobj = None
|
||||||
|
|
||||||
def GetResources(self):
|
def GetResources(self):
|
||||||
return self.resources
|
return self.resources
|
||||||
@@ -72,6 +73,8 @@ class CommandManager(object):
|
|||||||
active = FemGui.getActiveAnalysis() is not None and self.active_analysis_in_active_doc() and self.material_solid_selected()
|
active = FemGui.getActiveAnalysis() is not None and self.active_analysis_in_active_doc() and self.material_solid_selected()
|
||||||
elif self.is_active == 'with_solver':
|
elif self.is_active == 'with_solver':
|
||||||
active = FemGui.getActiveAnalysis() is not None and self.active_analysis_in_active_doc() and self.solver_selected()
|
active = FemGui.getActiveAnalysis() is not None and self.active_analysis_in_active_doc() and self.solver_selected()
|
||||||
|
elif self.is_active == 'with_solver_elmer':
|
||||||
|
active = FemGui.getActiveAnalysis() is not None and self.active_analysis_in_active_doc() and self.solver_elmer_selected()
|
||||||
elif self.is_active == 'with_analysis_without_solver':
|
elif self.is_active == 'with_analysis_without_solver':
|
||||||
active = FemGui.getActiveAnalysis() is not None and self.active_analysis_in_active_doc() and not self.analysis_has_solver()
|
active = FemGui.getActiveAnalysis() is not None and self.active_analysis_in_active_doc() and not self.analysis_has_solver()
|
||||||
return active
|
return active
|
||||||
@@ -162,6 +165,14 @@ class CommandManager(object):
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def solver_elmer_selected(self):
|
||||||
|
sel = FreeCADGui.Selection.getSelection()
|
||||||
|
if len(sel) == 1 and hasattr(sel[0], "Proxy") and sel[0].Proxy.Type == "Fem::FemSolverObjectElmer":
|
||||||
|
self.selobj = sel[0]
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
def analysis_has_solver(self):
|
def analysis_has_solver(self):
|
||||||
solver = False
|
solver = False
|
||||||
analysis_members = FemGui.getActiveAnalysis().Group
|
analysis_members = FemGui.getActiveAnalysis().Group
|
||||||
|
|||||||
Reference in New Issue
Block a user