From fc04645402496a7c882e64091467f1e5d4fe0a32 Mon Sep 17 00:00:00 2001 From: UR-0 Date: Wed, 24 Jun 2020 07:39:28 +0200 Subject: [PATCH] FEM: ccx constraint section print, add task panel --- src/Mod/Fem/CMakeLists.txt | 1 + .../task_constraint_sectionprint.py | 102 ++++++++++++++++++ .../view_constraint_sectionprint.py | 9 +- 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 src/Mod/Fem/femtaskpanels/task_constraint_sectionprint.py diff --git a/src/Mod/Fem/CMakeLists.txt b/src/Mod/Fem/CMakeLists.txt index 9e35f69915..a2a89a477a 100755 --- a/src/Mod/Fem/CMakeLists.txt +++ b/src/Mod/Fem/CMakeLists.txt @@ -358,6 +358,7 @@ SET(FemGuiTaskPanels_SRCS femtaskpanels/task_constraint_electrostaticpotential.py femtaskpanels/task_constraint_flowvelocity.py femtaskpanels/task_constraint_initialflowvelocity.py + femtaskpanels/task_constraint_sectionprint.py femtaskpanels/task_constraint_tie.py femtaskpanels/task_element_fluid1D.py femtaskpanels/task_element_geometry1D.py diff --git a/src/Mod/Fem/femtaskpanels/task_constraint_sectionprint.py b/src/Mod/Fem/femtaskpanels/task_constraint_sectionprint.py new file mode 100644 index 0000000000..168ee6fbe0 --- /dev/null +++ b/src/Mod/Fem/femtaskpanels/task_constraint_sectionprint.py @@ -0,0 +1,102 @@ +# *************************************************************************** +# * 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 section print task panel for the document object" +__author__ = "Bernd Hahnebach" +__url__ = "http://www.freecadweb.org" + +## @package task_constraint_sectionprint +# \ingroup FEM +# \brief task panel for constraint section print object + +from PySide import QtGui + +import FreeCAD +import FreeCADGui + +from femguiutils import selection_widgets + + +# TODO uses the old style Add button, move to the new style. See constraint fixed +class _TaskPanel: + """ + The TaskPanel for editing References property of ConstraintSectionPrint objects + """ + + def __init__(self, obj): + + self.obj = obj + + # parameter widget + self.parameterWidget = FreeCADGui.PySideUic.loadUi( + FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ConstraintSectionPrint.ui" + ) + + # geometry selection widget + self.selectionWidget = selection_widgets.GeometryElementsSelection( + obj.References, + ["Face"] + ) + + # form made from param and selection widget + self.form = [self.parameterWidget, self.selectionWidget] + + def accept(self): + # check values + items = len(self.selectionWidget.references) + FreeCAD.Console.PrintMessage( + "Task panel: found references: {}\n{}\n" + .format(items, self.selectionWidget.references) + ) + + if items != 1: + msgBox = QtGui.QMessageBox() + msgBox.setIcon(QtGui.QMessageBox.Question) + msgBox.setText( + "Constraint SectionPrint requires exactly one face\n\nfound references: {}" + .format(items) + ) + msgBox.setWindowTitle("FreeCAD FEM Constraint SectionPrint") + retryButton = msgBox.addButton(QtGui.QMessageBox.Retry) + ignoreButton = msgBox.addButton(QtGui.QMessageBox.Ignore) + msgBox.exec_() + + if msgBox.clickedButton() == retryButton: + return False + elif msgBox.clickedButton() == ignoreButton: + pass + self.obj.References = self.selectionWidget.references + self.recompute_and_set_back_all() + return True + + def reject(self): + self.recompute_and_set_back_all() + return True + + def recompute_and_set_back_all(self): + doc = FreeCADGui.getDocument(self.obj.Document) + doc.Document.recompute() + self.selectionWidget.setback_listobj_visibility() + if self.selectionWidget.sel_server: + FreeCADGui.Selection.removeObserver(self.selectionWidget.sel_server) + doc.resetEdit() diff --git a/src/Mod/Fem/femviewprovider/view_constraint_sectionprint.py b/src/Mod/Fem/femviewprovider/view_constraint_sectionprint.py index 0f37668276..a19a3e8e30 100644 --- a/src/Mod/Fem/femviewprovider/view_constraint_sectionprint.py +++ b/src/Mod/Fem/femviewprovider/view_constraint_sectionprint.py @@ -29,6 +29,7 @@ __url__ = "http://www.freecadweb.org" # \ingroup FEM # \brief view provider for constraint section print object +from femtaskpanels import task_constraint_sectionprint from . import view_base_femconstraint @@ -37,4 +38,10 @@ class VPConstraintSectionPrint(view_base_femconstraint.VPBaseFemConstraint): A View Provider for the ConstraintSectionPrint object """ - pass + def setEdit(self, vobj, mode=0): + view_base_femconstraint.VPBaseFemConstraint.setEdit( + self, + vobj, + mode, + task_constraint_sectionprint._TaskPanel + )