From 812125931e6e52d3a4d3f71d62dedb559ab440ba Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 12 Nov 2020 16:45:38 +0100 Subject: [PATCH] Part: [skip ci] implement editor dialog for tube feature --- src/Mod/Part/BasicShapes/CommandShapes.py | 3 +- src/Mod/Part/BasicShapes/TaskTube.ui | 152 ++++++++++++++++++ .../Part/BasicShapes/ViewProviderShapes.py | 78 +++++++++ src/Mod/Part/CMakeLists.txt | 1 + 4 files changed, 233 insertions(+), 1 deletion(-) create mode 100644 src/Mod/Part/BasicShapes/TaskTube.ui diff --git a/src/Mod/Part/BasicShapes/CommandShapes.py b/src/Mod/Part/BasicShapes/CommandShapes.py index b49e00b1df..3663814cde 100644 --- a/src/Mod/Part/BasicShapes/CommandShapes.py +++ b/src/Mod/Part/BasicShapes/CommandShapes.py @@ -48,7 +48,8 @@ class CommandTube: 'ToolTip': Qt.QT_TRANSLATE_NOOP("Part_Tube","Creates a tube")} def Activated(self): - FreeCAD.ActiveDocument.openTransaction("Create tube") + text = FreeCAD.Qt.translate("QObject", "Create tube") + FreeCAD.ActiveDocument.openTransaction(text) tube = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Tube") Shapes.TubeFeature(tube) ViewProviderShapes.ViewProviderTube(tube.ViewObject) diff --git a/src/Mod/Part/BasicShapes/TaskTube.ui b/src/Mod/Part/BasicShapes/TaskTube.ui new file mode 100644 index 0000000000..12d584f4f3 --- /dev/null +++ b/src/Mod/Part/BasicShapes/TaskTube.ui @@ -0,0 +1,152 @@ + + + PartGui::TaskTube + + + + 0 + 0 + 367 + 223 + + + + Tube + + + true + + + + + + Parameter + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 6 + + + + + false + + + mm + + + 0.000000000000000 + + + 2.000000000000000 + + + + + + + false + + + mm + + + 0.000000000000000 + + + 10.000000000000000 + + + + + + + Height: + + + + + + + Outer radius + + + + + + + Inner radius + + + + + + + false + + + mm + + + 0.000000000000000 + + + 4.000000000000000 + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 60 + + + + + + + + + + + + + Gui::QuantitySpinBox + QWidget +
Gui/QuantitySpinBox.h
+
+
+ + tubeOuterRadius + tubeInnerRadius + tubeHeight + + + + + +
diff --git a/src/Mod/Part/BasicShapes/ViewProviderShapes.py b/src/Mod/Part/BasicShapes/ViewProviderShapes.py index 540063195a..6261e3af0f 100644 --- a/src/Mod/Part/BasicShapes/ViewProviderShapes.py +++ b/src/Mod/Part/BasicShapes/ViewProviderShapes.py @@ -26,6 +26,11 @@ __url__ = "http://www.freecadweb.org" __doc__ = "Basic shapes" +import os +import FreeCAD +import FreeCADGui + +from PySide import QtGui class ViewProviderTube: def __init__(self, obj): @@ -36,6 +41,27 @@ class ViewProviderTube: ''' Setup the scene sub-graph of the view provider, this method is mandatory ''' return + def setupContextMenu(self, viewObject, menu): + action = menu.addAction(FreeCAD.Qt.translate("QObject", "Edit %1").replace("%1", viewObject.Object.Label)) + action.triggered.connect(lambda: self.startDefaultEditMode(viewObject)) + return False + + def startDefaultEditMode(self, viewObject): + text = FreeCAD.Qt.translate("QObject", "Edit %1").replace("%1", viewObject.Object.Label) + document = viewObject.Document.Document + document.openTransaction(text) + viewObject.Document.setEdit(viewObject.Object, 0) + + def setEdit(self, viewObject, mode): + if mode == 0: + FreeCADGui.Control.showDialog(TaskTubeUI(viewObject)) + return True + + def unsetEdit(self, viewObject, mode): + if mode == 0: + FreeCADGui.Control.closeDialog() + return True + def getIcon(self): return ":/icons/parametric/Part_Tube_Parametric.svg" @@ -44,3 +70,55 @@ class ViewProviderTube: def __setstate__(self,state): return None + + +class TaskTubeUI: + """A default task panel for editing tube objects.""" + + def __init__(self, viewObject): + self.viewObject = viewObject + ui_file = os.path.join(os.path.dirname(__file__), "TaskTube.ui") + ui = FreeCADGui.UiLoader() + self.form = ui.load(ui_file) + + object = self.viewObject.Object + self.form.tubeOuterRadius.setProperty("rawValue", object.OuterRadius.Value) + self.form.tubeInnerRadius.setProperty("rawValue", object.InnerRadius.Value) + self.form.tubeHeight.setProperty("rawValue", object.Height.Value) + + self.form.tubeOuterRadius.valueChanged.connect(lambda x: self.onChangeOuterRadius(x)) + self.form.tubeInnerRadius.valueChanged.connect(lambda x: self.onChangeInnerRadius(x)) + self.form.tubeHeight.valueChanged.connect(lambda x: self.onChangeHeight(x)) + + def onChangeOuterRadius(self, radius): + object = self.viewObject.Object + object.OuterRadius = radius + object.recompute() + + def onChangeInnerRadius(self, radius): + object = self.viewObject.Object + object.InnerRadius = radius + object.recompute() + + def onChangeHeight(self, height): + object = self.viewObject.Object + object.Height = height + object.recompute() + + def accept(self): + object = self.viewObject.Object + if not object.isValid(): + QtGui.QMessageBox.warning(None, "Error", object.getStatusString()) + return False + document = self.viewObject.Document.Document + document.commitTransaction() + document.recompute() + self.viewObject.Document.resetEdit() + return True + + def reject(self): + document = self.viewObject.Document.Document + document.abortTransaction() + document.recompute() + self.viewObject.Document.resetEdit() + return True diff --git a/src/Mod/Part/CMakeLists.txt b/src/Mod/Part/CMakeLists.txt index 77a8a82b24..e231288c21 100644 --- a/src/Mod/Part/CMakeLists.txt +++ b/src/Mod/Part/CMakeLists.txt @@ -35,6 +35,7 @@ if(BUILD_GUI) list (APPEND BasicShapes_Scripts BasicShapes/CommandShapes.py BasicShapes/ViewProviderShapes.py + BasicShapes/TaskTube.ui ) endif(BUILD_GUI)