PathEdit integration of the setup-sheet editor.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>642</width>
|
||||
<width>500</width>
|
||||
<height>721</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -19,7 +19,7 @@
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tabWidgetPage1" native="true">
|
||||
<widget class="QWidget" name="tabWidgetPage1">
|
||||
<attribute name="title">
|
||||
<string>Operation</string>
|
||||
</attribute>
|
||||
@@ -38,7 +38,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="startDepthExpr">
|
||||
<widget class="QLineEdit" name="setupStartDepthExpr">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Expression set as the StartDepth of a newly created operation.</p><p><br/></p><p>Default: OpStartDepth</p></body></html></string>
|
||||
</property>
|
||||
@@ -52,7 +52,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="finalDepthExpr">
|
||||
<widget class="QLineEdit" name="setupFinalDepthExpr">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Expression set as the FinalDepth for a newly created operation.</p><p><br/></p><p>Default: OpFinalDepth</p></body></html></string>
|
||||
</property>
|
||||
@@ -66,7 +66,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="stepDownExpr">
|
||||
<widget class="QLineEdit" name="setupStepDownExpr">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Expression set as the StepDown of a newly created operation.</p><p><br/></p><p>Default: OpToolDiameter</p></body></html></string>
|
||||
</property>
|
||||
@@ -96,21 +96,21 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1" colspan="2">
|
||||
<widget class="QLineEdit" name="safeHeightExpr">
|
||||
<widget class="QLineEdit" name="setupSafeHeightExpr">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Expression set as SafeHeight for new operations.</p><p><br/></p><p>Default: &quot;OpStockZMax+SetupSheet.SafeHeightOffset&quot;</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="2">
|
||||
<widget class="QLineEdit" name="clearanceHeightExpr">
|
||||
<widget class="QLineEdit" name="setupClearanceHeightExpr">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Expression set as ClearanceHeight for new operations.</p><p><br/></p><p>Default: &quot;OpStockZMax+SetupSheet.ClearanceHeightOffset&quot;</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="Gui::QuantitySpinBox" name="clearanceHeightOffs">
|
||||
<widget class="Gui::QuantitySpinBox" name="setupClearanceHeightOffs">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>ClearanceHeightOffset - can be used by expressions to set the default ClearanceHeight for new operations.</p><p><br/></p><p>Default: &quot;3 mm&quot;</p></body></html></string>
|
||||
</property>
|
||||
@@ -137,7 +137,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="3">
|
||||
<widget class="Gui::QuantitySpinBox" name="safeHeightOffs">
|
||||
<widget class="Gui::QuantitySpinBox" name="setupSafeHeightOffs">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>SafeHeightOffset can be for expressions to set the SafeHeight for new operations.</p><p><br/></p><p>Default: &quot;5 mm&quot;</p></body></html></string>
|
||||
</property>
|
||||
@@ -161,7 +161,7 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tabWidgetPage2" native="true">
|
||||
<widget class="QWidget" name="tabWidgetPage2">
|
||||
<attribute name="title">
|
||||
<string>Tool Controller</string>
|
||||
</attribute>
|
||||
@@ -180,7 +180,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="Gui::QuantitySpinBox" name="rapidHorizontal">
|
||||
<widget class="Gui::QuantitySpinBox" name="setupRapidHorizontal">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -200,7 +200,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="Gui::QuantitySpinBox" name="rapidVertical">
|
||||
<widget class="Gui::QuantitySpinBox" name="setupRapidVertical">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
|
||||
@@ -31,6 +31,7 @@ import PathScripts.PathGeom as PathGeom
|
||||
import PathScripts.PathGui as PathGui
|
||||
import PathScripts.PathLog as PathLog
|
||||
import PathScripts.PathPreferences as PathPreferences
|
||||
import PathScripts.PathSetupSheetGui as PathSetupSheetGui
|
||||
import PathScripts.PathStock as PathStock
|
||||
import PathScripts.PathToolController as PathToolController
|
||||
import PathScripts.PathToolLibraryManager as PathToolLibraryManager
|
||||
@@ -489,6 +490,9 @@ class TaskPanel:
|
||||
self.stockCreateCylinder = None
|
||||
self.stockEdit = None
|
||||
|
||||
self.setupGlobal = PathSetupSheetGui.GlobalEditor(self.obj.SetupSheet, self.form)
|
||||
self.setupOps = PathSetupSheetGui.OpsDefaultEditor(self.obj.SetupSheet, self.form.tabOpDefaults)
|
||||
|
||||
def preCleanup(self):
|
||||
PathLog.track()
|
||||
FreeCADGui.Selection.removeObserver(self)
|
||||
@@ -499,12 +503,16 @@ class TaskPanel:
|
||||
PathLog.track()
|
||||
self.preCleanup()
|
||||
self.getFields()
|
||||
self.setupGlobal.accept()
|
||||
self.setupOps.accept()
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
self.cleanup(resetEdit)
|
||||
|
||||
def reject(self, resetEdit=True):
|
||||
PathLog.track()
|
||||
self.preCleanup()
|
||||
self.setupGlobal.reject()
|
||||
self.setupOps.reject()
|
||||
FreeCAD.ActiveDocument.abortTransaction()
|
||||
if self.deleteOnReject:
|
||||
PathLog.info("Uncreate Job")
|
||||
@@ -557,6 +565,9 @@ class TaskPanel:
|
||||
|
||||
self.obj.Proxy.execute(self.obj)
|
||||
|
||||
self.setupGlobal.getFields()
|
||||
self.setupOps.getFields()
|
||||
|
||||
def selectComboBoxText(self, widget, text):
|
||||
index = widget.findText(text, QtCore.Qt.MatchFixedString)
|
||||
if index >= 0:
|
||||
@@ -652,6 +663,8 @@ class TaskPanel:
|
||||
|
||||
self.updateToolController()
|
||||
self.stockEdit.setFields(self.obj)
|
||||
self.setupGlobal.setFields()
|
||||
self.setupOps.setFields()
|
||||
|
||||
def setPostProcessorOutputFile(self):
|
||||
filename = QtGui.QFileDialog.getSaveFileName(self.form, translate("Path_Job", "Select Output File"), None, translate("Path_Job", "All Files (*.*)"))
|
||||
@@ -948,6 +961,8 @@ class TaskPanel:
|
||||
|
||||
|
||||
def setupUi(self, activate):
|
||||
self.setupGlobal.setupUi()
|
||||
self.setupOps.setupUi()
|
||||
self.updateStockEditor(-1)
|
||||
self.setFields()
|
||||
|
||||
@@ -1035,6 +1050,6 @@ def Create(base, template=None):
|
||||
return obj
|
||||
except Exception as exc:
|
||||
PathLog.error(sys.exc_info())
|
||||
#traceback.print_exc(exc)
|
||||
traceback.print_exc(exc)
|
||||
FreeCAD.ActiveDocument.abortTransaction()
|
||||
|
||||
|
||||
@@ -131,7 +131,7 @@ class OpTaskPanel:
|
||||
self.obj = obj
|
||||
self.op = op
|
||||
self.form = FreeCADGui.PySideUic.loadUi(":/panels/SetupOp.ui")
|
||||
self.form.setWindowTitle(self.name)
|
||||
self.form.setWindowTitle("Op {}".format(self.name))
|
||||
self.props = sorted(op.properties())
|
||||
self.prototype = op.prototype(name)
|
||||
|
||||
@@ -200,39 +200,60 @@ class OpTaskPanel:
|
||||
return propertiesCreatedRemoved
|
||||
|
||||
|
||||
class TaskPanel:
|
||||
DataIds = QtCore.Qt.ItemDataRole.UserRole
|
||||
DataKey = QtCore.Qt.ItemDataRole.UserRole + 1
|
||||
class OpsDefaultEditor:
|
||||
|
||||
def __init__(self, vobj):
|
||||
self.vobj = vobj
|
||||
self.obj = vobj.Object
|
||||
PathLog.track(self.obj.Label)
|
||||
self.globalForm = FreeCADGui.PySideUic.loadUi(":/panels/SetupGlobal.ui")
|
||||
def __init__(self, obj, parent):
|
||||
self.obj = obj
|
||||
self.ops = sorted([OpTaskPanel(self.obj, name, op) for name, op in PathUtil.keyValueIter(PathSetupSheet._RegisteredOps)], key = lambda op: op.name)
|
||||
self.form = [self.globalForm] + [op.form for op in self.ops]
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Path_SetupSheet", "Edit SetupSheet"))
|
||||
if parent:
|
||||
self.toolbox = QtGui.QToolBox(parent)
|
||||
for op in self.ops:
|
||||
self.toolbox.addItem(op.form, op.form.windowTitle())
|
||||
self.toolbox.setParent(parent)
|
||||
parent.layout().addWidget(self.toolbox)
|
||||
|
||||
def reject(self):
|
||||
FreeCAD.ActiveDocument.abortTransaction()
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
pass
|
||||
|
||||
def accept(self):
|
||||
self.getFields()
|
||||
[op.accept() for op in self.ops]
|
||||
if any([op.accept() for op in self.ops]):
|
||||
PathLog.track()
|
||||
#sel = FreeCADGui.Selection.getSelection()
|
||||
#FreeCADGui.Selection.clearSelection()
|
||||
#for o in sel:
|
||||
# FreeCADGui.Selection.addSelection(o)
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCADGui.ActiveDocument.resetEdit()
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
#FreeCADGui.Selection.removeObserver(self.s)
|
||||
#FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def getFields(self):
|
||||
pass
|
||||
|
||||
def updateUI(self):
|
||||
pass
|
||||
|
||||
def updateModel(self, recomp = True):
|
||||
PathLog.track()
|
||||
self.getFields()
|
||||
self.updateUI()
|
||||
if recomp:
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def setFields(self):
|
||||
self.updateUI()
|
||||
|
||||
def setupUi(self):
|
||||
for op in self.ops:
|
||||
op.setupUi()
|
||||
|
||||
class GlobalEditor(object):
|
||||
|
||||
def __init__(self, obj, form):
|
||||
self.form = form
|
||||
self.obj = obj
|
||||
|
||||
def reject(self):
|
||||
pass
|
||||
|
||||
def accept(self):
|
||||
self.getFields()
|
||||
|
||||
def getFields(self):
|
||||
def updateExpression(name, widget):
|
||||
@@ -241,11 +262,11 @@ class TaskPanel:
|
||||
if val != value:
|
||||
PathGui.setProperty(self.obj, name, value)
|
||||
|
||||
updateExpression('StartDepthExpression', self.globalForm.startDepthExpr)
|
||||
updateExpression('FinalDepthExpression', self.globalForm.finalDepthExpr)
|
||||
updateExpression('StepDownExpression', self.globalForm.stepDownExpr)
|
||||
updateExpression('ClearanceHeightExpression', self.globalForm.clearanceHeightExpr)
|
||||
updateExpression('SafeHeightExpression', self.globalForm.safeHeightExpr)
|
||||
updateExpression('StartDepthExpression', self.form.setupStartDepthExpr)
|
||||
updateExpression('FinalDepthExpression', self.form.setupFinalDepthExpr)
|
||||
updateExpression('StepDownExpression', self.form.setupStepDownExpr)
|
||||
updateExpression('ClearanceHeightExpression', self.form.setupClearanceHeightExpr)
|
||||
updateExpression('SafeHeightExpression', self.form.setupSafeHeightExpr)
|
||||
self.clearanceHeightOffs.updateProperty()
|
||||
self.safeHeightOffs.updateProperty()
|
||||
self.rapidVertical.updateProperty()
|
||||
@@ -253,43 +274,83 @@ class TaskPanel:
|
||||
|
||||
def updateUI(self):
|
||||
PathLog.track()
|
||||
self.globalForm.startDepthExpr.setText( self.obj.StartDepthExpression)
|
||||
self.globalForm.finalDepthExpr.setText( self.obj.FinalDepthExpression)
|
||||
self.globalForm.stepDownExpr.setText( self.obj.StepDownExpression)
|
||||
self.globalForm.clearanceHeightExpr.setText( self.obj.ClearanceHeightExpression)
|
||||
self.globalForm.safeHeightExpr.setText( self.obj.SafeHeightExpression)
|
||||
self.form.setupStartDepthExpr.setText( self.obj.StartDepthExpression)
|
||||
self.form.setupFinalDepthExpr.setText( self.obj.FinalDepthExpression)
|
||||
self.form.setupStepDownExpr.setText( self.obj.StepDownExpression)
|
||||
self.form.setupClearanceHeightExpr.setText( self.obj.ClearanceHeightExpression)
|
||||
self.form.setupSafeHeightExpr.setText( self.obj.SafeHeightExpression)
|
||||
self.clearanceHeightOffs.updateSpinBox()
|
||||
self.safeHeightOffs.updateSpinBox()
|
||||
self.rapidVertical.updateSpinBox()
|
||||
self.rapidHorizontal.updateSpinBox()
|
||||
|
||||
def updateModel(self):
|
||||
def updateModel(self, recomp = True):
|
||||
PathLog.track()
|
||||
self.getFields()
|
||||
self.updateUI()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def setupCombo(self, combo, text, items):
|
||||
if items and len(items) > 0:
|
||||
for i in range(combo.count(), -1, -1):
|
||||
combo.removeItem(i)
|
||||
combo.addItems(items)
|
||||
index = combo.findText(text, QtCore.Qt.MatchFixedString)
|
||||
if index >= 0:
|
||||
combo.setCurrentIndex(index)
|
||||
if recomp:
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def setFields(self):
|
||||
self.updateUI()
|
||||
|
||||
def setupUi(self):
|
||||
self.clearanceHeightOffs = PathGui.QuantitySpinBox(self.globalForm.clearanceHeightOffs, self.obj, 'ClearanceHeightOffset')
|
||||
self.safeHeightOffs = PathGui.QuantitySpinBox(self.globalForm.safeHeightOffs, self.obj, 'SafeHeightOffset')
|
||||
self.rapidHorizontal = PathGui.QuantitySpinBox(self.globalForm.rapidHorizontal, self.obj, 'HorizRapid')
|
||||
self.rapidVertical = PathGui.QuantitySpinBox(self.globalForm.rapidVertical, self.obj, 'VertRapid')
|
||||
self.clearanceHeightOffs = PathGui.QuantitySpinBox(self.form.setupClearanceHeightOffs, self.obj, 'ClearanceHeightOffset')
|
||||
self.safeHeightOffs = PathGui.QuantitySpinBox(self.form.setupSafeHeightOffs, self.obj, 'SafeHeightOffset')
|
||||
self.rapidHorizontal = PathGui.QuantitySpinBox(self.form.setupRapidHorizontal, self.obj, 'HorizRapid')
|
||||
self.rapidVertical = PathGui.QuantitySpinBox(self.form.setupRapidVertical, self.obj, 'VertRapid')
|
||||
self.setFields()
|
||||
|
||||
for op in self.ops:
|
||||
op.setupUi()
|
||||
class TaskPanel:
|
||||
|
||||
def __init__(self, vobj):
|
||||
self.vobj = vobj
|
||||
self.obj = vobj.Object
|
||||
PathLog.track(self.obj.Label)
|
||||
self.globalForm = FreeCADGui.PySideUic.loadUi(":/panels/SetupGlobal.ui")
|
||||
self.globalEditor = GlobalEditor(self.obj, self.globalForm)
|
||||
self.opsEditor = OpsDefaultEditor(self.obj, None)
|
||||
self.form = [op.form for op in self.opsEditor.ops] + [self.globalForm]
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Path_SetupSheet", "Edit SetupSheet"))
|
||||
|
||||
def reject(self):
|
||||
self.globalEditor.reject()
|
||||
self.opsEditor.reject()
|
||||
FreeCAD.ActiveDocument.abortTransaction()
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def accept(self):
|
||||
self.globalEditor.accept()
|
||||
self.opsEditor.accept()
|
||||
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCADGui.ActiveDocument.resetEdit()
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
#FreeCADGui.Selection.removeObserver(self.s)
|
||||
#FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def getFields(self):
|
||||
self.globalEditor.getFields()
|
||||
self.opsEditor.getFields()
|
||||
|
||||
def updateUI(self):
|
||||
self.globalEditor.updateUI()
|
||||
self.opsEditor.updateUI()
|
||||
|
||||
def updateModel(self):
|
||||
self.globalEditor.updateModel(False)
|
||||
self.opsEditor.updateModel(False)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def setFields(self):
|
||||
self.globalEditor.setFields()
|
||||
self.opsEditor.setFields()
|
||||
|
||||
def setupUi(self):
|
||||
self.globalEditor.setupUi()
|
||||
self.opsEditor.setupUi()
|
||||
|
||||
def Create(name = 'SetupSheet'):
|
||||
'''Create(name = 'SetupSheet') ... creates a new setup sheet'''
|
||||
|
||||
Reference in New Issue
Block a user