From 9bc978b52a9b8e1ffa3df7312f6fcdd89e4ea159 Mon Sep 17 00:00:00 2001 From: Markus Lampert Date: Sun, 8 Sep 2019 22:14:12 -0700 Subject: [PATCH] Added editing functionality to the tool editor --- src/Mod/Path/PathScripts/PathToolBit.py | 15 ++++--- src/Mod/Path/PathScripts/PathToolBitEdit.py | 37 ++++++++++++------ src/Mod/Path/PathScripts/PathToolBitGui.py | 7 ++-- .../Path/Tools/Template/drill-straight.fcstd | Bin 10158 -> 10111 bytes src/Mod/Path/Tools/Template/v-bit.fcstd | Bin 11989 -> 11981 bytes 5 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/Mod/Path/PathScripts/PathToolBit.py b/src/Mod/Path/PathScripts/PathToolBit.py index d15dfe0969..881746910a 100644 --- a/src/Mod/Path/PathScripts/PathToolBit.py +++ b/src/Mod/Path/PathScripts/PathToolBit.py @@ -56,18 +56,23 @@ ParameterTypeConstraint = { def updateConstraint(sketch, name, value): for i, constraint in enumerate(sketch.Constraints): if constraint.Name.split(';')[0] == name: + constr = None if constraint.Type in ['DistanceX', 'DistanceY', 'Distance', 'Radius']: + constr = Sketcher.Constraint(constraint.Type, constraint.First, value) + elif constraint.Type in ['Angle']: + constr = Sketcher.Constraint(constraint.Type, constraint.First, constraint.FirstPos, constraint.Second, constraint.SecondPos, value) + else: + print(constraint.Name, constraint.Type) + + if constr is not None: if not PathGeom.isRoughly(constraint.Value, value.Value): - PathLog.track(name, constraint.Type, 'update', i) - constr = Sketcher.Constraint(constraint.Type, constraint.First, value) + PathLog.track(name, constraint.Type, 'update', i, "(%.2f -> %.2f)" % (constraint.Value, value.Value)) sketch.delConstraint(i) sketch.recompute() n = sketch.addConstraint(constr) sketch.renameConstraint(n, constraint.Name) else: PathLog.track(name, constraint.Type, 'unchanged') - else: - print(constraint.Name, constraint.Type) break PropertyGroupBit = 'Bit' @@ -183,7 +188,7 @@ class ToolBit(object): value = constraint.Value if constraint.Type == 'Angle': value = value * 180 / math.pi - PathUtil.setProperty(obj, prop, constraint.Value) + PathUtil.setProperty(obj, prop, value) def getBitThumbnail(self, obj): if obj.BitTemplate: diff --git a/src/Mod/Path/PathScripts/PathToolBitEdit.py b/src/Mod/Path/PathScripts/PathToolBitEdit.py index f2fe552580..0464a2b019 100644 --- a/src/Mod/Path/PathScripts/PathToolBitEdit.py +++ b/src/Mod/Path/PathScripts/PathToolBitEdit.py @@ -37,19 +37,7 @@ from PySide import QtGui PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) PathLog.trackModule(PathLog.thisModule()) - -ParameterTypeConstraint = { - 'Angle': 'Angle', - 'Distance': 'Length', - 'DistanceX': 'Length', - 'DistanceY': 'Length', - 'Radius': 'Length' - } - -ParameterTypeProperty = { - 'Length': 'App::PropertyLength', - 'Angle': 'App::PropertyAngle' - } +LastPath = 'src/Mod/Path/Tools/Template' class ToolBitEditor: '''UI and controller for editing a ToolBit. @@ -83,6 +71,11 @@ class ToolBitEditor: # qsb.setToolTip(parameter['Desc']) layout.addRow(label, qsb) self.bitEditor = editor + img = tool.Proxy.getBitThumbnail(tool) + if img: + self.form.image.setPixmap(QtGui.QPixmap(QtGui.QImage.fromData(img))) + else: + self.form.image.setPixmap(QtGui.QPixmap()) def accept(self): self.refresh() @@ -101,6 +94,10 @@ class ToolBitEditor: def updateTemplate(self): self.tool.BitTemplate = str(self.form.templatePath.text()) self.setupTool(self.tool) + self.form.toolName.setText(self.tool.Label) + + for editor in self.bitEditor: + self.bitEditor[editor].updateSpinBox() def updateTool(self): PathLog.track() @@ -119,9 +116,23 @@ class ToolBitEditor: self.updateUI() self.form.blockSignals(False) + def selectTemplate(self): + global LastPath + path = self.tool.BitTemplate + if not path: + path = LastPath + foo = QtGui.QFileDialog.getOpenFileName(QtGui.QApplication.activeWindow(), + "Path - Tool Template", + path, + "*.fcstd")[0] + if foo: + self.form.templatePath.setText(foo) + self.updateTemplate() + def setupUI(self): PathLog.track() self.updateUI() self.form.toolName.editingFinished.connect(self.refresh) self.form.templatePath.editingFinished.connect(self.updateTemplate) + self.form.templateSet.clicked.connect(self.selectTemplate) diff --git a/src/Mod/Path/PathScripts/PathToolBitGui.py b/src/Mod/Path/PathScripts/PathToolBitGui.py index cec2d86980..92e08cd0c7 100644 --- a/src/Mod/Path/PathScripts/PathToolBitGui.py +++ b/src/Mod/Path/PathScripts/PathToolBitGui.py @@ -83,15 +83,16 @@ class ViewProvider(object): def setEdit(self, vobj, mode=0): # pylint: disable=unused-argument PathLog.track() - taskPanel = TaskPanel(vobj) + self.taskPanel = TaskPanel(vobj) FreeCADGui.Control.closeDialog() - FreeCADGui.Control.showDialog(taskPanel) - taskPanel.setupUi() + FreeCADGui.Control.showDialog(self.taskPanel) + self.taskPanel.setupUi() return True def unsetEdit(self, vobj, mode): # pylint: disable=unused-argument FreeCADGui.Control.closeDialog() + self.taskPanel = None return def claimChildren(self): diff --git a/src/Mod/Path/Tools/Template/drill-straight.fcstd b/src/Mod/Path/Tools/Template/drill-straight.fcstd index 1de5f441816c2e0cf7755070e633971d4ba8a2f0..275b401e34853c53e168a00bd8a7df7cd7e156d3 100644 GIT binary patch delta 6662 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 HANultF0@e= diff --git a/src/Mod/Path/Tools/Template/v-bit.fcstd b/src/Mod/Path/Tools/Template/v-bit.fcstd index b9370436666181512e652be6ceddf43b37683653..97fee679d9eb013331688959c7f1bd1e8595ec3f 100644 GIT binary patch delta 7650 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

2s9 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