diff --git a/src/Mod/Path/Gui/Resources/Path.qrc b/src/Mod/Path/Gui/Resources/Path.qrc index 599bce0ae0..e156631b80 100644 --- a/src/Mod/Path/Gui/Resources/Path.qrc +++ b/src/Mod/Path/Gui/Resources/Path.qrc @@ -62,6 +62,9 @@ panels/HoldingTagsEdit.ui panels/JobEdit.ui panels/MillFaceEdit.ui + panels/PageOpContourEdit.ui + panels/PageHeightsEdit.ui + panels/PageDepthsEdit.ui panels/PocketEdit.ui panels/PointEdit.ui panels/ProfileEdgesEdit.ui diff --git a/src/Mod/Path/Gui/Resources/panels/ContourEdit.ui b/src/Mod/Path/Gui/Resources/panels/ContourEdit.ui index 2ce88aaeee..4b383f8a89 100644 --- a/src/Mod/Path/Gui/Resources/panels/ContourEdit.ui +++ b/src/Mod/Path/Gui/Resources/panels/ContourEdit.ui @@ -6,8 +6,8 @@ 0 0 - 352 - 400 + 445 + 451 @@ -23,132 +23,15 @@ - 2 + 0 - - - - 0 - 0 - 108 - 92 - - - - - :/icons/Path-Depths.svg:/icons/Path-Depths.svg - - - Depths - - - - QFormLayout::AllNonFixedFieldsGrow - - - - - Start Depth - - - - - - - mm - - - - - - - Final Depth - - - - - - - Step Down - - - - - - - mm - - - - - - - 0.000000000000000 - - - mm - - - - - - - - - 0 - 0 - 141 - 65 - - - - - :/icons/Path-Heights.svg:/icons/Path-Heights.svg - - - Heights - - - - QFormLayout::AllNonFixedFieldsGrow - - - - - mm - - - - - - - Safe Height - - - - - - - mm - - - - - - - Clearance Height - - - - - 0 0 - 336 - 303 + 427 + 396 diff --git a/src/Mod/Path/Gui/Resources/panels/PageDepthsEdit.ui b/src/Mod/Path/Gui/Resources/panels/PageDepthsEdit.ui new file mode 100644 index 0000000000..39893dac82 --- /dev/null +++ b/src/Mod/Path/Gui/Resources/panels/PageDepthsEdit.ui @@ -0,0 +1,51 @@ + + + Form + + + + 0 + 0 + 394 + 403 + + + + Form + + + + + + + + + Start Depth + + + + + + + + + + Final Depth + + + + + + + + + + Step Down + + + + + + + + diff --git a/src/Mod/Path/Gui/Resources/panels/PageHeightsEdit.ui b/src/Mod/Path/Gui/Resources/panels/PageHeightsEdit.ui new file mode 100644 index 0000000000..3b226a53d8 --- /dev/null +++ b/src/Mod/Path/Gui/Resources/panels/PageHeightsEdit.ui @@ -0,0 +1,50 @@ + + + Form + + + + 0 + 0 + 400 + 447 + + + + Form + + + + + + + + + Safe Height + + + + + + + + + + Clearance Height + + + + + + + + Gui::InputField + QLineEdit +
Gui/InputField.h
+
+
+ + + + +
diff --git a/src/Mod/Path/Gui/Resources/panels/PageOpContourEdit.ui b/src/Mod/Path/Gui/Resources/panels/PageOpContourEdit.ui new file mode 100644 index 0000000000..18af8df671 --- /dev/null +++ b/src/Mod/Path/Gui/Resources/panels/PageOpContourEdit.ui @@ -0,0 +1,95 @@ + + + Form + + + + 0 + 0 + 424 + 428 + + + + Form + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Tool Controller + + + + + + + + + + + + + Direction + + + + + + + + CW + + + + + CCW + + + + + + + + Use Start Point + + + + + + + Use Compensation + + + + + + + Extra Offset + + + + + + + + + + + Gui::InputField + QLineEdit +
Gui/InputField.h
+
+
+ + +
diff --git a/src/Mod/Path/PathScripts/PathAreaOp.py b/src/Mod/Path/PathScripts/PathAreaOp.py index 9697dd4cc0..b43215b924 100644 --- a/src/Mod/Path/PathScripts/PathAreaOp.py +++ b/src/Mod/Path/PathScripts/PathAreaOp.py @@ -44,11 +44,12 @@ PathLog.trackModule() def translate(context, text, disambig=None): return QtCore.QCoreApplication.translate(context, text, disambig) +FeatureTool = 0x01 +FeatureDepths = 0x02 +FeatureHeights = 0x04 +FeatureStartPoint = 0x08 + class ObjectOp(object): - FeatureTool = 0x01 - FeatureDepths = 0x02 - FeatureHeights = 0x04 - FeatureStartPoint = 0x08 def __init__(self, obj): PathLog.track() @@ -56,19 +57,19 @@ class ObjectOp(object): obj.addProperty("App::PropertyBool", "Active", "Path", QtCore.QT_TRANSLATE_NOOP("App::Property", "Make False, to prevent operation from generating code")) obj.addProperty("App::PropertyString", "Comment", "Path", QtCore.QT_TRANSLATE_NOOP("App::Property", "An optional comment for this Contour")) - if self.FeatureTool & self.opFeatures(obj): + if FeatureTool & self.opFeatures(obj): obj.addProperty("App::PropertyLink", "ToolController", "Path", QtCore.QT_TRANSLATE_NOOP("App::Property", "The tool controller that will be used to calculate the path")) - if self.FeatureDepths & self.opFeatures(obj): + if FeatureDepths & self.opFeatures(obj): obj.addProperty("App::PropertyDistance", "StepDown", "Depth", QtCore.QT_TRANSLATE_NOOP("App::Property", "Incremental Step Down of Tool")) obj.addProperty("App::PropertyDistance", "StartDepth", "Depth", QtCore.QT_TRANSLATE_NOOP("App::Property", "Starting Depth of Tool- first cut depth in Z")) obj.addProperty("App::PropertyDistance", "FinalDepth", "Depth", QtCore.QT_TRANSLATE_NOOP("App::Property", "Final Depth of Tool- lowest value in Z")) - if self.FeatureHeights & self.opFeatures(obj): + if FeatureHeights & self.opFeatures(obj): obj.addProperty("App::PropertyDistance", "ClearanceHeight", "Depth", QtCore.QT_TRANSLATE_NOOP("App::Property", "The height needed to clear clamps and obstructions")) obj.addProperty("App::PropertyDistance", "SafeHeight", "Depth", QtCore.QT_TRANSLATE_NOOP("App::Property", "Rapid Safety Height between locations.")) - if self.FeatureStartPoint & self.opFeatures(obj): + if FeatureStartPoint & self.opFeatures(obj): obj.addProperty("App::PropertyVector", "StartPoint", "Start Point", QtCore.QT_TRANSLATE_NOOP("App::Property", "The start point of this path")) obj.addProperty("App::PropertyBool", "UseStartPoint", "Start Point", QtCore.QT_TRANSLATE_NOOP("App::Property", "make True, if specifying a Start Point")) @@ -90,7 +91,7 @@ class ObjectOp(object): return None def opFeatures(self, obj): - return self.FeatureTool | self.FeatureDepths | self.FeatureHeights | self.FeatureStartPoint + return FeatureTool | FeatureDepths | FeatureHeights | FeatureStartPoint def onChanged(self, obj, prop): if prop in ['AreaParams', 'PathParams', 'removalshape']: @@ -102,10 +103,10 @@ class ObjectOp(object): obj.Active = True - if self.FeatureTool & self.opFeatures(obj): + if FeatureTool & self.opFeatures(obj): obj.ToolController = PathUtils.findToolController(obj) - if self.FeatureDepths & self.opFeatures(obj): + if FeatureDepths & self.opFeatures(obj): try: shape = self.opShapeForDepths(obj) except: @@ -121,7 +122,7 @@ class ObjectOp(object): obj.FinalDepth = 0.0 obj.StepDown = 1.0 - if self.FeatureHeights & self.opFeatures(obj): + if FeatureHeights & self.opFeatures(obj): try: shape = self.opShapeForDepths(obj) except: @@ -135,7 +136,7 @@ class ObjectOp(object): obj.ClearanceHeight = 10.0 obj.SafeHeight = 8.0 - if self.FeatureStartPoint & self.opFeatures(obj): + if FeatureStartPoint & self.opFeatures(obj): obj.UseStartPoint = False self.opSetDefaultValues(obj) @@ -233,7 +234,7 @@ class ObjectOp(object): shape = self.opShape(obj, commandlist) - if self.FeatureStartPoint and obj.UseStartPoint: + if FeatureStartPoint and obj.UseStartPoint: start = obj.StartPoint else: start = FreeCAD.Vector() diff --git a/src/Mod/Path/PathScripts/PathAreaOpGui.py b/src/Mod/Path/PathScripts/PathAreaOpGui.py new file mode 100644 index 0000000000..683f2217ab --- /dev/null +++ b/src/Mod/Path/PathScripts/PathAreaOpGui.py @@ -0,0 +1,243 @@ +# -*- coding: utf-8 -*- + +# *************************************************************************** +# * * +# * Copyright (c) 2017 sliptonic * +# * * +# * 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 * +# * * +# *************************************************************************** + +import FreeCAD +import FreeCADGui +import Path +import PathScripts.PathAreaOp as PathAreaOp +import PathScripts.PathContour as PathContour +import PathScripts.PathLog as PathLog +import PathScripts.PathSelection as PathSelection + +from PathScripts import PathUtils +from PySide import QtCore, QtGui + +def translate(context, text, disambig=None): + return QtCore.QCoreApplication.translate(context, text, disambig) + + +class ViewProvider(object): + + def __init__(self, vobj): + PathLog.track() + vobj.Proxy = self + + def attach(self, vobj): + PathLog.track() + self.Object = vobj.Object + return + + def deleteObjectsOnReject(self): + PathLog.track() + return hasattr(self, 'deleteOnReject') and self.deleteOnReject + + def setEdit(self, vobj, mode=0): + PathLog.track() + FreeCADGui.Control.closeDialog() + page = self.getTaskPanelOpPage(vobj.Object) + selection = self.getSelectionFactory() + taskd = TaskPanel(vobj.Object, self.deleteObjectsOnReject(), page, selection) + FreeCADGui.Control.showDialog(taskd) + taskd.setupUi() + self.deleteOnReject = False + return True + + def getIcon(self): + return ":/icons/Path-Contour.svg" + + def __getstate__(self): + PathLog.track() + return None + + def __setstate__(self, state): + PathLog.track() + return None + +class TaskPanelPage(object): + def __init__(self, obj): + self.obj = obj + self.form = self.getForm() + self.setDirty() + self.setTitle('-') + + def setDirty(self): + self.isdirty = True + def setClean(self): + self.isdirty = False + + def pageGetFields(self): + self.getFields(self, obj) + self.setDirty() + + def pageSetFields(self): + self.setFields(self.obj) + + def pageRegisterSignalHandlers(self): + for signal in self.getSignalsForUpdate(self.obj): + signal.connect(self.pageGetFields) + + def setTitle(self, title): + self.title = title + def getTitle(self, obj): + return self.title + +class TaskPanelHeightsPage(TaskPanelPage): + def getForm(self): + return FreeCADGui.PySideUic.loadUi(":/panels/PageHeightsEdit.ui") + + def getTitle(self, obj): + return translate("Path_AreaOp", "Heights") + + def getFields(self, obj): + obj.SafeHeight = FreeCAD.Units.Quantity(self.form.safeHeight.text()).Value + obj.ClearanceHeight = FreeCAD.Units.Quantity(self.form.clearanceHeight.text()).Value + + def setFields(self, obj): + self.form.safeHeight.setText(FreeCAD.Units.Quantity(obj.SafeHeight.Value, FreeCAD.Units.Length).UserString) + self.form.clearanceHeight.setText(FreeCAD.Units.Quantity(obj.ClearanceHeight.Value, FreeCAD.Units.Length).UserString) + + def getSignalsForUpdate(self, obj): + return [self.form.safeHeight.editingFinished, self.form.clearanceHeight.editingFinished] + +class TaskPanel(object): + + def __init__(self, obj, deleteOnReject, page, selectionFactory): + FreeCAD.ActiveDocument.openTransaction(translate("Path_AreaOp", "AreaOp Operation")) + self.form = QtGui.QToolBox() + self.deleteOnReject = deleteOnReject + self.featurePages = [] + + if PathAreaOp.FeatureHeights & obj.Proxy.opFeatures(obj): + self.featurePages.append(TaskPanelHeightsPage(obj)) + + page.setTitle(translate('PathAreaOp', 'Operation')) + self.featurePages.append(page) + + for page in self.featurePages: + self.form.addItem(page.form, page.getTitle(obj)) + + self.selectionFactory = selectionFactory + self.obj = obj + self.isdirty = True + + def isDirty(self): + for page in self.featurePages: + if page.isdirty: + return True + return self.isdirty + + def setClean(self): + self.isdirty = False + for page in self.featurePages: + page.setClean() + + def accept(self): + FreeCADGui.Control.closeDialog() + FreeCADGui.ActiveDocument.resetEdit() + FreeCAD.ActiveDocument.commitTransaction() + FreeCADGui.Selection.removeObserver(self.s) + if self.isDirty(): + FreeCAD.ActiveDocument.recompute() + + def reject(self): + FreeCADGui.Control.closeDialog() + FreeCADGui.ActiveDocument.resetEdit() + FreeCAD.ActiveDocument.abortTransaction() + FreeCADGui.Selection.removeObserver(self.s) + if self.deleteOnReject: + FreeCAD.ActiveDocument.openTransaction(translate("Path_AreaOp", "Uncreate AreaOp Operation")) + FreeCAD.ActiveDocument.removeObject(self.obj.Name) + FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() + + def clicked(self, button): + if button == QtGui.QDialogButtonBox.Apply: + self.panelGetFields() + FreeCAD.ActiveDocument.recompute() + self.setClean() + + def panelGetFields(self): + PathLog.track() + for page in self.featurePages: + page.pageGetFields(self.obj) + self.opGetFields(self.obj) + + def panelSetFields(self): + PathLog.track() + for page in self.featurePages: + page.pageSetFields() + + def open(self): + self.s = SelObserver(self.selectionFactory) + # install the function mode resident + FreeCADGui.Selection.addObserver(self.s) + + def getStandardButtons(self): + return int(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel) + + def setupUi(self): + PathLog.track() + self.panelSetFields() + for page in self.featurePages: + page.pageRegisterSignalHandlers() + +class SelObserver: + + def __init__(self, factory): + factory() + + def __del__(self): + PathSelection.clear() + + def addSelection(self, doc, obj, sub, pnt): + FreeCADGui.doCommand('Gui.Selection.addSelection(FreeCAD.ActiveDocument.' + obj + ')') + FreeCADGui.updateGui() + +class _CommandSetStartPoint: + def GetResources(self): + return {'Pixmap': 'Path-StartPoint', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Path_AreaOp", "Pick Start Point"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Path_AreaOp", "Pick Start Point")} + + def IsActive(self): + if FreeCAD.ActiveDocument is None: + return False + sel = FreeCADGui.Selection.getSelection() + if not sel: + return False + obj = sel[0] + return obj and hasattr(obj, 'StartPoint') + + def setpoint(self, point, o): + obj = FreeCADGui.Selection.getSelection()[0] + obj.StartPoint.x = point.x + obj.StartPoint.y = point.y + obj.StartPoint.z = obj.ClearanceHeight.Value + + def Activated(self): + FreeCADGui.Snapper.getPoint(callback=self.setpoint) + +FreeCADGui.addCommand('Set_StartPoint', _CommandSetStartPoint()) + +FreeCAD.Console.PrintLog("Loading PathAreaOpGui... done\n") diff --git a/src/Mod/Path/PathScripts/PathContourGui.py b/src/Mod/Path/PathScripts/PathContourGui.py index ced8d7f82e..4bc53378a2 100644 --- a/src/Mod/Path/PathScripts/PathContourGui.py +++ b/src/Mod/Path/PathScripts/PathContourGui.py @@ -25,8 +25,10 @@ import FreeCAD import FreeCADGui import Path +import PathScripts.PathAreaOpGui as PathAreaOpGui import PathScripts.PathContour as PathContour import PathScripts.PathLog as PathLog +import PathScripts.PathSelection as PathSelection from PathScripts import PathUtils from PySide import QtCore, QtGui @@ -34,60 +36,74 @@ from PySide import QtCore, QtGui def translate(context, text, disambig=None): return QtCore.QCoreApplication.translate(context, text, disambig) -class _ViewProviderContour: +class TaskPanelOpPage(PathAreaOpGui.TaskPanelPage): - def __init__(self, vobj): - PathLog.track() - vobj.Proxy = self + def opSelectionFactory(self): + return PathSelection.contourselect - def attach(self, vobj): - PathLog.track() - self.Object = vobj.Object - return + def getForm(self): + return FreeCADGui.PySideUic.loadUi(":/panels/PageOpContourEdit.ui") - def deleteObjectsOnReject(self): + def getFields(self, obj): PathLog.track() - return hasattr(self, 'deleteOnReject') and self.deleteOnReject + self.obj.OffsetExtra = FreeCAD.Units.Quantity(self.form.extraOffset.text()).Value + self.obj.UseComp = self.form.useCompensation.isChecked() + self.obj.Direction = str(self.form.direction.currentText()) + tc = PathUtils.findToolController(self.obj, self.form.toolController.currentText()) + self.obj.ToolController = tc - def setEdit(self, vobj, mode=0): + def setFields(self, obj): PathLog.track() - FreeCADGui.Control.closeDialog() - taskd = TaskPanel(vobj.Object, self.deleteObjectsOnReject()) - taskd.obj = vobj.Object - FreeCADGui.Control.showDialog(taskd) - taskd.setupUi() - self.deleteOnReject = False - return True + self.form.extraOffset.setText(FreeCAD.Units.Quantity(self.obj.OffsetExtra.Value, FreeCAD.Units.Length).UserString) + self.form.useCompensation.setChecked(self.obj.UseComp) + # self.form.useStartPoint.setChecked(self.obj.UseStartPoint) + + index = self.form.direction.findText( + self.obj.Direction, QtCore.Qt.MatchFixedString) + if index >= 0: + self.form.direction.blockSignals(True) + self.form.direction.setCurrentIndex(index) + self.form.direction.blockSignals(False) + + controllers = PathUtils.getToolControllers(self.obj) + labels = [c.Label for c in controllers] + self.form.toolController.blockSignals(True) + self.form.toolController.addItems(labels) + self.form.toolController.blockSignals(False) + + if self.obj.ToolController is None: + self.obj.ToolController = PathUtils.findToolController(self.obj) + + if self.obj.ToolController is not None: + index = self.form.toolController.findText( + self.obj.ToolController.Label, QtCore.Qt.MatchFixedString) + if index >= 0: + self.form.toolController.blockSignals(True) + self.form.toolController.setCurrentIndex(index) + self.form.toolController.blockSignals(False) + else: + self.obj.ToolController = PathUtils.findToolController(self.obj) + + def getSignalsForUpdate(self, obj): + PathLog.track() + signals = [] + signals.append(self.form.direction.currentIndexChanged) + signals.append(self.form.toolController.currentIndexChanged) + signals.append(self.form.useCompensation.clicked) + signals.append(self.form.useStartPoint.clicked) + signals.append(self.form.extraOffset.editingFinished) + return signals + +class _ViewProviderContour(PathAreaOpGui.ViewProvider): + + def getTaskPanelOpPage(self, obj): + return TaskPanelOpPage(obj) def getIcon(self): return ":/icons/Path-Contour.svg" - def __getstate__(self): - PathLog.track() - return None - - def __setstate__(self, state): - PathLog.track() - return None - - -class _CommandSetStartPoint: - def GetResources(self): - return {'Pixmap': 'Path-StartPoint', - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Path_Contour", "Pick Start Point"), - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Path_Contour", "Pick Start Point")} - - def IsActive(self): - return FreeCAD.ActiveDocument is not None - - def setpoint(self, point, o): - obj = FreeCADGui.Selection.getSelection()[0] - obj.StartPoint.x = point.x - obj.StartPoint.y = point.y - obj.StartPoint.z = obj.ClearanceHeight.Value - - def Activated(self): - FreeCADGui.Snapper.getPoint(callback=self.setpoint) + def getSelectionFactory(self): + return PathSelection.contourselect def Create(name): FreeCAD.ActiveDocument.openTransaction(translate("Path", "Create a Contour")) @@ -116,148 +132,7 @@ class CommandPathContour: def Activated(self): return Create("Contour") -class TaskPanel: - def __init__(self, obj, deleteOnReject): - FreeCAD.ActiveDocument.openTransaction(translate("Path_Contour", "Contour Operation")) - self.form = FreeCADGui.PySideUic.loadUi(":/panels/ContourEdit.ui") - self.deleteOnReject = deleteOnReject - self.isDirty = True - - def accept(self): - FreeCADGui.Control.closeDialog() - FreeCADGui.ActiveDocument.resetEdit() - FreeCAD.ActiveDocument.commitTransaction() - FreeCADGui.Selection.removeObserver(self.s) - if self.isDirty: - FreeCAD.ActiveDocument.recompute() - - def reject(self): - FreeCADGui.Control.closeDialog() - FreeCADGui.ActiveDocument.resetEdit() - FreeCAD.ActiveDocument.abortTransaction() - FreeCADGui.Selection.removeObserver(self.s) - if self.deleteOnReject: - FreeCAD.ActiveDocument.openTransaction(translate("Path_Contour", "Uncreate Contour Operation")) - FreeCAD.ActiveDocument.removeObject(self.obj.Name) - FreeCAD.ActiveDocument.commitTransaction() - FreeCAD.ActiveDocument.recompute() - - def clicked(self, button): - if button == QtGui.QDialogButtonBox.Apply: - self.getFields() - FreeCAD.ActiveDocument.recompute() - self.isDirty = False - - def getFields(self): - PathLog.track() - if self.obj: - if hasattr(self.obj, "StartDepth"): - self.obj.StartDepth = FreeCAD.Units.Quantity(self.form.startDepth.text()).Value - if hasattr(self.obj, "FinalDepth"): - self.obj.FinalDepth = FreeCAD.Units.Quantity(self.form.finalDepth.text()).Value - if hasattr(self.obj, "SafeHeight"): - self.obj.SafeHeight = FreeCAD.Units.Quantity(self.form.safeHeight.text()).Value - if hasattr(self.obj, "ClearanceHeight"): - self.obj.ClearanceHeight = FreeCAD.Units.Quantity(self.form.clearanceHeight.text()).Value - if hasattr(self.obj, "StepDown"): - self.obj.StepDown = FreeCAD.Units.Quantity(self.form.stepDown.text()).Value - if hasattr(self.obj, "OffsetExtra"): - self.obj.OffsetExtra = FreeCAD.Units.Quantity(self.form.extraOffset.text()).Value - if hasattr(self.obj, "UseComp"): - self.obj.UseComp = self.form.useCompensation.isChecked() - # if hasattr(self.obj, "UseStartPoint"): - # self.obj.UseStartPoint = self.form.useStartPoint.isChecked() - if hasattr(self.obj, "Direction"): - self.obj.Direction = str(self.form.direction.currentText()) - if hasattr(self.obj, "ToolController"): - tc = PathUtils.findToolController(self.obj, self.form.uiToolController.currentText()) - self.obj.ToolController = tc - self.isDirty = True - - def setFields(self): - PathLog.track() - self.form.startDepth.setText(FreeCAD.Units.Quantity(self.obj.StartDepth.Value, FreeCAD.Units.Length).UserString) - self.form.finalDepth.setText(FreeCAD.Units.Quantity(self.obj.FinalDepth.Value, FreeCAD.Units.Length).UserString) - self.form.stepDown.setText(FreeCAD.Units.Quantity(self.obj.StepDown.Value, FreeCAD.Units.Length).UserString) - self.form.safeHeight.setText(FreeCAD.Units.Quantity(self.obj.SafeHeight.Value, FreeCAD.Units.Length).UserString) - self.form.clearanceHeight.setText(FreeCAD.Units.Quantity(self.obj.ClearanceHeight.Value, FreeCAD.Units.Length).UserString) - self.form.extraOffset.setText(FreeCAD.Units.Quantity(self.obj.OffsetExtra.Value, FreeCAD.Units.Length).UserString) - self.form.useCompensation.setChecked(self.obj.UseComp) - # self.form.useStartPoint.setChecked(self.obj.UseStartPoint) - - index = self.form.direction.findText( - self.obj.Direction, QtCore.Qt.MatchFixedString) - if index >= 0: - self.form.direction.blockSignals(True) - self.form.direction.setCurrentIndex(index) - self.form.direction.blockSignals(False) - - controllers = PathUtils.getToolControllers(self.obj) - labels = [c.Label for c in controllers] - self.form.uiToolController.blockSignals(True) - self.form.uiToolController.addItems(labels) - self.form.uiToolController.blockSignals(False) - - if self.obj.ToolController is None: - self.obj.ToolController = PathUtils.findToolController(self.obj) - - if self.obj.ToolController is not None: - index = self.form.uiToolController.findText( - self.obj.ToolController.Label, QtCore.Qt.MatchFixedString) - if index >= 0: - self.form.uiToolController.blockSignals(True) - self.form.uiToolController.setCurrentIndex(index) - self.form.uiToolController.blockSignals(False) - else: - self.obj.ToolController = PathUtils.findToolController(self.obj) - - def open(self): - self.s = SelObserver() - # install the function mode resident - FreeCADGui.Selection.addObserver(self.s) - - def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel) - - def setupUi(self): - PathLog.track() - # Connect Signals and Slots - # Depths - self.form.startDepth.editingFinished.connect(self.getFields) - self.form.finalDepth.editingFinished.connect(self.getFields) - self.form.stepDown.editingFinished.connect(self.getFields) - - # Heights - self.form.safeHeight.editingFinished.connect(self.getFields) - self.form.clearanceHeight.editingFinished.connect(self.getFields) - - # operation - self.form.direction.currentIndexChanged.connect(self.getFields) - self.form.uiToolController.currentIndexChanged.connect(self.getFields) - self.form.useCompensation.clicked.connect(self.getFields) - self.form.useStartPoint.clicked.connect(self.getFields) - self.form.extraOffset.editingFinished.connect(self.getFields) - - self.setFields() - - -class SelObserver: - def __init__(self): - import PathScripts.PathSelection as PST - PST.contourselect() - - def __del__(self): - import PathScripts.PathSelection as PST - PST.clear() - - def addSelection(self, doc, obj, sub, pnt): - FreeCADGui.doCommand('Gui.Selection.addSelection(FreeCAD.ActiveDocument.' + obj + ')') - FreeCADGui.updateGui() - - -if FreeCAD.GuiUp: - # register the FreeCAD command - FreeCADGui.addCommand('Path_Contour', CommandPathContour()) - FreeCADGui.addCommand('Set_StartPoint', _CommandSetStartPoint()) +# register the FreeCAD command +FreeCADGui.addCommand('Path_Contour', CommandPathContour()) FreeCAD.Console.PrintLog("Loading PathContourGui... done\n")