From 4916fa8ac1b9f87f7d0db61c36338114f24e95d8 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Wed, 3 Jun 2020 23:48:42 +0200 Subject: [PATCH] FEM: move task panel in separate module, constraint electrostatic potential --- src/Mod/Fem/CMakeLists.txt | 1 + .../task_constraint_electrostaticpotential.py | 146 ++++++++++++++++++ .../view_constraint_electrostaticpotential.py | 117 +------------- 3 files changed, 150 insertions(+), 114 deletions(-) create mode 100644 src/Mod/Fem/femtaskpanels/task_constraint_electrostaticpotential.py diff --git a/src/Mod/Fem/CMakeLists.txt b/src/Mod/Fem/CMakeLists.txt index c8d490983a..e05939e2fe 100755 --- a/src/Mod/Fem/CMakeLists.txt +++ b/src/Mod/Fem/CMakeLists.txt @@ -349,6 +349,7 @@ SET(FemGuiObjects_SRCS SET(FemGuiTaskPanels_SRCS femtaskpanels/__init__.py + femtaskpanels/task_constraint_electrostaticpotential.py femtaskpanels/task_mesh_gmsh.py femtaskpanels/task_result_mechanical.py femtaskpanels/task_solver_ccxtools.py diff --git a/src/Mod/Fem/femtaskpanels/task_constraint_electrostaticpotential.py b/src/Mod/Fem/femtaskpanels/task_constraint_electrostaticpotential.py new file mode 100644 index 0000000000..de869e0d99 --- /dev/null +++ b/src/Mod/Fem/femtaskpanels/task_constraint_electrostaticpotential.py @@ -0,0 +1,146 @@ +# *************************************************************************** +# * Copyright (c) 2017 Markus Hovorka * +# * Copyright (c) 2020 Bernd Hahnebach * +# * * +# * This file is part of the FreeCAD CAx development system. * +# * * +# * 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__ = "FreeCAD FEM constraint electrostatic potential task panel for the document object" +__author__ = "Markus Hovorka, Bernd Hahnebach" +__url__ = "http://www.freecadweb.org" + +## @package task_constraint_electrostaticpotential +# \ingroup FEM +# \brief task panel for constraint electrostatic potential object + +import FreeCAD +import FreeCADGui +from FreeCAD import Units + +from femguiutils import selection_widgets +from femtools import femutils +from femtools import membertools + + +class _TaskPanel(object): + + def __init__(self, obj): + self._obj = obj + self._refWidget = selection_widgets.BoundarySelector() + self._refWidget.setReferences(obj.References) + self._paramWidget = FreeCADGui.PySideUic.loadUi( + FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ElectrostaticPotential.ui") + self._initParamWidget() + self.form = [self._refWidget, self._paramWidget] + analysis = obj.getParentGroup() + self._mesh = None + self._part = None + if analysis is not None: + self._mesh = membertools.get_single_member(analysis, "Fem::FemMeshObject") + if self._mesh is not None: + self._part = femutils.get_part_to_mesh(self._mesh) + self._partVisible = None + self._meshVisible = None + + def open(self): + if self._mesh is not None and self._part is not None: + self._meshVisible = self._mesh.ViewObject.isVisible() + self._partVisible = self._part.ViewObject.isVisible() + self._mesh.ViewObject.hide() + self._part.ViewObject.show() + + def reject(self): + self._restoreVisibility() + FreeCADGui.ActiveDocument.resetEdit() + return True + + def accept(self): + if self._obj.References != self._refWidget.references(): + self._obj.References = self._refWidget.references() + self._applyWidgetChanges() + self._obj.Document.recompute() + FreeCADGui.ActiveDocument.resetEdit() + self._restoreVisibility() + return True + + def _restoreVisibility(self): + if self._mesh is not None and self._part is not None: + if self._meshVisible: + self._mesh.ViewObject.show() + else: + self._mesh.ViewObject.hide() + if self._partVisible: + self._part.ViewObject.show() + else: + self._part.ViewObject.hide() + + def _initParamWidget(self): + unit = "V" + q = Units.Quantity("{} {}".format(self._obj.Potential, unit)) + + self._paramWidget.potentialTxt.setText( + q.UserString) + self._paramWidget.potentialBox.setChecked( + not self._obj.PotentialEnabled) + self._paramWidget.potentialConstantBox.setChecked( + self._obj.PotentialConstant) + + self._paramWidget.electricInfinityBox.setChecked( + self._obj.ElectricInfinity) + + self._paramWidget.electricForcecalculationBox.setChecked( + self._obj.ElectricForcecalculation) + + self._paramWidget.capacitanceBodyBox.setChecked( + not self._obj.CapacitanceBodyEnabled) + self._paramWidget.capacitanceBody_spinBox.setValue( + self._obj.CapacitanceBody) + + def _applyWidgetChanges(self): + unit = "V" + self._obj.PotentialEnabled = \ + not self._paramWidget.potentialBox.isChecked() + if self._obj.PotentialEnabled: + # if the input widget shows not a green hook, but the user presses ok + # we could run into a syntax error on getting the quantity, try mV + quantity = None + try: + quantity = Units.Quantity(self._paramWidget.potentialTxt.text()) + except ValueError: + FreeCAD.Console.PrintMessage( + "Wrong input. OK has been triggered without a green hook " + "in the input field. Not recognised input: '{}' " + "Potential has not been set.\n" + .format(self._paramWidget.potentialTxt.text()) + ) + if quantity is not None: + self._obj.Potential = float(quantity.getValueAs(unit)) + self._obj.PotentialConstant = self._paramWidget.potentialConstantBox.isChecked() + + self._obj.ElectricInfinity = self._paramWidget.electricInfinityBox.isChecked() + + calc_is_checked = self._paramWidget.electricForcecalculationBox.isChecked() + self._obj.ElectricForcecalculation = calc_is_checked # two lines because max line length + + self._obj.CapacitanceBodyEnabled = \ + not self._paramWidget.capacitanceBodyBox.isChecked() + if self._obj.CapacitanceBodyEnabled: + self._paramWidget.capacitanceBody_spinBox.setEnabled(True) + self._obj.CapacitanceBody = self._paramWidget.capacitanceBody_spinBox.value() diff --git a/src/Mod/Fem/femviewprovider/view_constraint_electrostaticpotential.py b/src/Mod/Fem/femviewprovider/view_constraint_electrostaticpotential.py index 9589e2ebae..db0fa81759 100644 --- a/src/Mod/Fem/femviewprovider/view_constraint_electrostaticpotential.py +++ b/src/Mod/Fem/femviewprovider/view_constraint_electrostaticpotential.py @@ -1,5 +1,6 @@ # *************************************************************************** # * Copyright (c) 2017 Markus Hovorka * +# * Copyright (c) 2020 Bernd Hahnebach * # * * # * This file is part of the FreeCAD CAx development system. * # * * @@ -29,14 +30,8 @@ __url__ = "http://www.freecadweb.org" # \ingroup FEM # \brief view provider for constraint electrostatic potential object -import FreeCAD -import FreeCADGui -from FreeCAD import Units - -from femguiutils import selection_widgets +from femtaskpanels import task_constraint_electrostaticpotential from . import view_base_femconstraint -from femtools import femutils -from femtools import membertools class VPConstraintElectroStaticPotential(view_base_femconstraint.VPBaseFemConstraint): @@ -46,111 +41,5 @@ class VPConstraintElectroStaticPotential(view_base_femconstraint.VPBaseFemConstr self, vobj, mode, - _TaskPanel + task_constraint_electrostaticpotential._TaskPanel ) - - -class _TaskPanel(object): - - def __init__(self, obj): - self._obj = obj - self._refWidget = selection_widgets.BoundarySelector() - self._refWidget.setReferences(obj.References) - self._paramWidget = FreeCADGui.PySideUic.loadUi( - FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ElectrostaticPotential.ui") - self._initParamWidget() - self.form = [self._refWidget, self._paramWidget] - analysis = obj.getParentGroup() - self._mesh = None - self._part = None - if analysis is not None: - self._mesh = membertools.get_single_member(analysis, "Fem::FemMeshObject") - if self._mesh is not None: - self._part = femutils.get_part_to_mesh(self._mesh) - self._partVisible = None - self._meshVisible = None - - def open(self): - if self._mesh is not None and self._part is not None: - self._meshVisible = self._mesh.ViewObject.isVisible() - self._partVisible = self._part.ViewObject.isVisible() - self._mesh.ViewObject.hide() - self._part.ViewObject.show() - - def reject(self): - self._restoreVisibility() - FreeCADGui.ActiveDocument.resetEdit() - return True - - def accept(self): - if self._obj.References != self._refWidget.references(): - self._obj.References = self._refWidget.references() - self._applyWidgetChanges() - self._obj.Document.recompute() - FreeCADGui.ActiveDocument.resetEdit() - self._restoreVisibility() - return True - - def _restoreVisibility(self): - if self._mesh is not None and self._part is not None: - if self._meshVisible: - self._mesh.ViewObject.show() - else: - self._mesh.ViewObject.hide() - if self._partVisible: - self._part.ViewObject.show() - else: - self._part.ViewObject.hide() - - def _initParamWidget(self): - unit = "V" - q = Units.Quantity("{} {}".format(self._obj.Potential, unit)) - - self._paramWidget.potentialTxt.setText( - q.UserString) - self._paramWidget.potentialBox.setChecked( - not self._obj.PotentialEnabled) - self._paramWidget.potentialConstantBox.setChecked( - self._obj.PotentialConstant) - - self._paramWidget.electricInfinityBox.setChecked( - self._obj.ElectricInfinity) - - self._paramWidget.electricForcecalculationBox.setChecked( - self._obj.ElectricForcecalculation) - - self._paramWidget.capacitanceBodyBox.setChecked( - not self._obj.CapacitanceBodyEnabled) - self._paramWidget.capacitanceBody_spinBox.setValue( - self._obj.CapacitanceBody) - - def _applyWidgetChanges(self): - unit = "V" - self._obj.PotentialEnabled = \ - not self._paramWidget.potentialBox.isChecked() - if self._obj.PotentialEnabled: - # if the input widget shows not a green hook, but the user presses ok - # we could run into a syntax error on getting the quantity, try mV - quantity = None - try: - quantity = Units.Quantity(self._paramWidget.potentialTxt.text()) - except ValueError: - FreeCAD.Console.PrintMessage( - "Wrong input. OK has been triggered without a green hook " - "in the input field. Not recognised input: '{}' " - "Potential has not been set.\n" - .format(self._paramWidget.potentialTxt.text()) - ) - if quantity is not None: - self._obj.Potential = float(quantity.getValueAs(unit)) - self._obj.PotentialConstant = self._paramWidget.potentialConstantBox.isChecked() - - self._obj.ElectricInfinity = self._paramWidget.electricInfinityBox.isChecked() - - self._obj.ElectricForcecalculation = self._paramWidget.electricForcecalculationBox.isChecked() - - self._obj.CapacitanceBodyEnabled = \ - not self._paramWidget.capacitanceBodyBox.isChecked() - if self._obj.CapacitanceBodyEnabled: - self._paramWidget.capacitanceBody_spinBox.setEnabled(True) - self._obj.CapacitanceBody = self._paramWidget.capacitanceBody_spinBox.value()