Added combined dialog for TC editing - refactored UI controller into separate class.
This commit is contained in:
@@ -132,7 +132,7 @@ class ObjectOp(PathOp.ObjectOp):
|
||||
obj.Side = "Inside"
|
||||
|
||||
except Exception as e:
|
||||
PathLog.error(translate("PatArea", "Error in calculating depths: %s" % e))
|
||||
PathLog.error(translate("PatArea", "Error in calculating depths: %s") % e)
|
||||
obj.StartDepth = 5.0
|
||||
obj.ClearanceHeight = 10.0
|
||||
obj.SafeHeight = 8.0
|
||||
|
||||
@@ -96,6 +96,10 @@ class TaskPanel:
|
||||
self.deleteOnReject = deleteOnReject
|
||||
self.form = FreeCADGui.PySideUic.loadUi(":/panels/PathEdit.ui")
|
||||
|
||||
vUnit = FreeCAD.Units.Quantity(1, FreeCAD.Units.Velocity).getUserPreferred()[2]
|
||||
self.form.toolControllerList.horizontalHeaderItem(1).setText('#')
|
||||
self.form.toolControllerList.horizontalHeaderItem(2).setText(vUnit)
|
||||
self.form.toolControllerList.horizontalHeaderItem(3).setText(vUnit)
|
||||
self.form.toolControllerList.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.Stretch)
|
||||
self.form.toolControllerList.resizeColumnsToContents()
|
||||
|
||||
@@ -110,7 +114,6 @@ class TaskPanel:
|
||||
for o in PathJob.ObjectJob.baseCandidates():
|
||||
self.form.infoModel.addItem(o.Label, o)
|
||||
|
||||
|
||||
self.postProcessorDefaultTooltip = self.form.postProcessor.toolTip()
|
||||
self.postProcessorArgsDefaultTooltip = self.form.postProcessorArguments.toolTip()
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ import xml.etree.ElementTree as xml
|
||||
from FreeCAD import Units
|
||||
from PySide import QtCore, QtGui
|
||||
|
||||
if True:
|
||||
if False:
|
||||
PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule())
|
||||
PathLog.trackModule(PathLog.thisModule())
|
||||
else:
|
||||
@@ -190,8 +190,7 @@ class ViewProvider:
|
||||
def setEdit(self, vobj, mode):
|
||||
# this is executed when the object is double-clicked in the tree
|
||||
FreeCADGui.Control.closeDialog()
|
||||
taskd = TaskPanel()
|
||||
taskd.obj = vobj.Object
|
||||
taskd = TaskPanel(vobj.Object)
|
||||
FreeCADGui.Control.showDialog(taskd)
|
||||
taskd.setupUi()
|
||||
|
||||
@@ -252,109 +251,13 @@ class CommandPathToolController:
|
||||
PathLog.track()
|
||||
Create()
|
||||
|
||||
class TaskPanel:
|
||||
def __init__(self):
|
||||
self.form = FreeCADGui.PySideUic.loadUi(":/panels/ToolControl.ui")
|
||||
#self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/ToolControl.ui")
|
||||
self.editform = FreeCADGui.PySideUic.loadUi(":/panels/ToolEdit.ui")
|
||||
class ToolControllerEditor:
|
||||
|
||||
self.updating = False
|
||||
self.toolrep = None
|
||||
|
||||
def accept(self):
|
||||
self.getFields()
|
||||
|
||||
FreeCADGui.ActiveDocument.resetEdit()
|
||||
FreeCADGui.Control.closeDialog()
|
||||
if self.toolrep is not None:
|
||||
FreeCAD.ActiveDocument.removeObject(self.toolrep.Name)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
FreeCADGui.Selection.removeObserver(self.s)
|
||||
|
||||
def reject(self):
|
||||
FreeCADGui.Control.closeDialog()
|
||||
if self.toolrep is not None:
|
||||
FreeCAD.ActiveDocument.removeObject(self.toolrep.Name)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
FreeCADGui.Selection.removeObserver(self.s)
|
||||
|
||||
def getFields(self):
|
||||
if self.obj:
|
||||
if hasattr(self.obj, "Label"):
|
||||
self.obj.Label = self.form.tcoName.text()
|
||||
if hasattr(self.obj, "VertFeed"):
|
||||
self.obj.VertFeed = self.form.vertFeed.text()
|
||||
if hasattr(self.obj, "HorizFeed"):
|
||||
self.obj.HorizFeed = self.form.horizFeed.text()
|
||||
if hasattr(self.obj, "VertRapid"):
|
||||
self.obj.VertRapid = self.form.vertRapid.text()
|
||||
if hasattr(self.obj, "HorizRapid"):
|
||||
self.obj.HorizRapid = self.form.horizRapid.text()
|
||||
if hasattr(self.obj, "ToolNumber"):
|
||||
self.obj.ToolNumber = self.form.uiToolNum.value()
|
||||
if hasattr(self.obj, "SpindleSpeed"):
|
||||
self.obj.SpindleSpeed = self.form.spindleSpeed.value()
|
||||
if hasattr(self.obj, "SpindleDir"):
|
||||
self.obj.SpindleDir = str(self.form.cboSpindleDirection.currentText())
|
||||
|
||||
self.obj.Proxy.execute(self.obj)
|
||||
|
||||
def setFields(self):
|
||||
self.form.tcoName.setText(self.obj.Label)
|
||||
self.form.uiToolNum.setValue(self.obj.ToolNumber)
|
||||
self.form.vertFeed.setText(self.obj.VertFeed.UserString)
|
||||
self.form.horizFeed.setText(self.obj.HorizFeed.UserString)
|
||||
self.form.vertRapid.setText(self.obj.VertRapid.UserString)
|
||||
self.form.horizRapid.setText(self.obj.HorizRapid.UserString)
|
||||
|
||||
self.form.spindleSpeed.setValue(self.obj.SpindleSpeed)
|
||||
|
||||
index = self.form.cboSpindleDirection.findText(self.obj.SpindleDir, QtCore.Qt.MatchFixedString)
|
||||
if index >= 0:
|
||||
self.form.cboSpindleDirection.setCurrentIndex(index)
|
||||
|
||||
try:
|
||||
tool = self.obj.Tool
|
||||
self.form.txtToolType.setText(tool.ToolType)
|
||||
self.form.txtToolMaterial.setText(tool.Material)
|
||||
diam = Units.Quantity(tool.Diameter, FreeCAD.Units.Length)
|
||||
self.form.txtToolDiameter.setText(diam.getUserPreferred()[0])
|
||||
self.form.txtToolName.setText(tool.Name)
|
||||
except:
|
||||
self.form.txtToolType.setText("UNDEFINED")
|
||||
self.form.txtToolMaterial.setText("UNDEFINED")
|
||||
self.form.txtToolDiameter.setText("UNDEFINED")
|
||||
|
||||
radius = tool.Diameter / 2
|
||||
length = tool.CuttingEdgeHeight
|
||||
t = Part.makeCylinder(radius, length)
|
||||
self.toolrep.Shape = t
|
||||
|
||||
def open(self):
|
||||
self.s = SelObserver()
|
||||
# install the function mode resident
|
||||
FreeCADGui.Selection.addObserver(self.s)
|
||||
|
||||
def getStandardButtons(self):
|
||||
return int(QtGui.QDialogButtonBox.Ok)
|
||||
|
||||
def edit(self, item, column):
|
||||
if not self.updating:
|
||||
self.resetObject()
|
||||
|
||||
def resetObject(self, remove=None):
|
||||
"transfers the values from the widget to the object"
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def setupUi(self):
|
||||
self.form.tcoName.editingFinished.connect(self.getFields)
|
||||
self.form.cmdEditLocal.clicked.connect(self.editTool)
|
||||
|
||||
t = Part.makeCylinder(1, 1)
|
||||
self.toolrep = FreeCAD.ActiveDocument.addObject("Part::Feature", "tool")
|
||||
self.toolrep.Shape = t
|
||||
|
||||
self.setFields()
|
||||
def __init__(self, obj, asDialog):
|
||||
self.form = FreeCADGui.PySideUic.loadUi(":/panels/DlgToolControllerEdit.ui")
|
||||
if not asDialog:
|
||||
self.form.buttonBox.hide()
|
||||
self.obj = obj
|
||||
|
||||
def getType(self, tooltype):
|
||||
"gets a combobox index number for a given type or viceversa"
|
||||
@@ -381,45 +284,135 @@ class TaskPanel:
|
||||
else:
|
||||
return matslist[material]
|
||||
|
||||
def editTool(self):
|
||||
toolnum = self.obj.ToolNumber
|
||||
def updateUi(self):
|
||||
PathLog.info("updateUI")
|
||||
tc = self.obj
|
||||
self.form.tcName.setText(tc.Label)
|
||||
self.form.tcNumber.setValue(tc.ToolNumber)
|
||||
self.form.horizFeed.setText(tc.HorizFeed.UserString)
|
||||
self.form.vertFeed.setText(tc.VertFeed.UserString)
|
||||
self.form.horizRapid.setText(tc.HorizRapid.UserString)
|
||||
self.form.vertRapid.setText(tc.VertRapid.UserString)
|
||||
self.form.spindleSpeed.setValue(tc.SpindleSpeed)
|
||||
index = self.form.spindleDirection.findText(tc.SpindleDir, QtCore.Qt.MatchFixedString)
|
||||
if index >= 0:
|
||||
self.form.spindleDirection.setCurrentIndex(index)
|
||||
|
||||
self.form.toolName.setText(tc.Tool.Name)
|
||||
self.form.toolType.setCurrentIndex(self.getType(tc.Tool.ToolType))
|
||||
self.form.toolMaterial.setCurrentIndex(self.getMaterial(tc.Tool.Material))
|
||||
self.form.toolDiameter.setText(FreeCAD.Units.Quantity(tc.Tool.Diameter, FreeCAD.Units.Length).UserString)
|
||||
self.form.toolLengthOffset.setText(FreeCAD.Units.Quantity(tc.Tool.LengthOffset, FreeCAD.Units.Length).UserString)
|
||||
self.form.toolFlatRadius.setText(FreeCAD.Units.Quantity(tc.Tool.FlatRadius, FreeCAD.Units.Length).UserString)
|
||||
self.form.toolCornerRadius.setText(FreeCAD.Units.Quantity(tc.Tool.CornerRadius, FreeCAD.Units.Length).UserString)
|
||||
self.form.toolCuttingEdgeAngle.setText(FreeCAD.Units.Quantity(tc.Tool.CuttingEdgeAngle, FreeCAD.Units.Angle).UserString)
|
||||
self.form.toolCuttingEdgeHeight.setText(FreeCAD.Units.Quantity(tc.Tool.CuttingEdgeHeight, FreeCAD.Units.Length).UserString)
|
||||
|
||||
def updateToolController(self):
|
||||
PathLog.info("updateToolController")
|
||||
tc = self.obj
|
||||
try:
|
||||
tc.Label = self.form.tcName.text()
|
||||
tc.ToolNumber = self.form.tcNumber.value()
|
||||
tc.HorizFeed = self.form.horizFeed.text()
|
||||
tc.VertFeed = self.form.vertFeed.text()
|
||||
tc.HorizRapid = self.form.horizRapid.text()
|
||||
tc.VertRapid = self.form.vertRapid.text()
|
||||
tc.SpindleSpeed = self.form.spindleSpeed.value()
|
||||
tc.SpindleDir = self.form.spindleDirection.currentText()
|
||||
|
||||
tc.Tool.Name = str(self.form.toolName.text())
|
||||
tc.Tool.ToolType = self.getType(self.form.toolType.currentIndex())
|
||||
tc.Tool.Material = self.getMaterial(self.form.toolMaterial.currentIndex())
|
||||
tc.Tool.Diameter = FreeCAD.Units.parseQuantity(self.form.toolDiameter.text())
|
||||
tc.Tool.LengthOffset = FreeCAD.Units.parseQuantity(self.form.toolLengthOffset.text())
|
||||
tc.Tool.FlatRadius = FreeCAD.Units.parseQuantity(self.form.toolFlatRadius.text())
|
||||
tc.Tool.CornerRadius = FreeCAD.Units.parseQuantity(self.form.toolCornerRadius.text())
|
||||
tc.Tool.CuttingEdgeAngle = FreeCAD.Units.Quantity(self.form.toolCuttingEdgeAngle.text())
|
||||
tc.Tool.CuttingEdgeHeight = FreeCAD.Units.parseQuantity(self.form.toolCuttingEdgeHeight.text())
|
||||
except Exception as e:
|
||||
PathLog.error(translate("PathToolController", "Error updating TC: %s") % e)
|
||||
|
||||
|
||||
def refresh(self):
|
||||
self.form.blockSignals(True)
|
||||
self.updateToolController()
|
||||
self.updateUi()
|
||||
self.form.blockSignals(False)
|
||||
|
||||
def setupUi(self):
|
||||
self.form.tcName.editingFinished.connect(self.refresh)
|
||||
self.form.horizFeed.editingFinished.connect(self.refresh)
|
||||
self.form.vertFeed.editingFinished.connect(self.refresh)
|
||||
self.form.horizRapid.editingFinished.connect(self.refresh)
|
||||
self.form.vertRapid.editingFinished.connect(self.refresh)
|
||||
|
||||
self.form.toolName.editingFinished.connect(self.refresh)
|
||||
self.form.toolDiameter.editingFinished.connect(self.refresh)
|
||||
self.form.toolLengthOffset.editingFinished.connect(self.refresh)
|
||||
self.form.toolFlatRadius.editingFinished.connect(self.refresh)
|
||||
self.form.toolCornerRadius.editingFinished.connect(self.refresh)
|
||||
self.form.toolCuttingEdgeAngle.editingFinished.connect(self.refresh)
|
||||
self.form.toolCuttingEdgeHeight.editingFinished.connect(self.refresh)
|
||||
|
||||
class TaskPanel:
|
||||
|
||||
def __init__(self, obj):
|
||||
self.editor = ToolControllerEditor(obj, False)
|
||||
self.form = self.editor.form
|
||||
self.updating = False
|
||||
self.toolrep = None
|
||||
self.obj = obj
|
||||
|
||||
def accept(self):
|
||||
self.getFields()
|
||||
|
||||
FreeCADGui.ActiveDocument.resetEdit()
|
||||
FreeCADGui.Control.closeDialog()
|
||||
if self.toolrep is not None:
|
||||
FreeCAD.ActiveDocument.removeObject(self.toolrep.Name)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def reject(self):
|
||||
FreeCADGui.Control.closeDialog()
|
||||
if self.toolrep is not None:
|
||||
FreeCAD.ActiveDocument.removeObject(self.toolrep.Name)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def getFields(self):
|
||||
self.editor.updateToolController()
|
||||
self.obj.Proxy.execute(self.obj)
|
||||
|
||||
def setFields(self):
|
||||
self.editor.updateUi()
|
||||
|
||||
tool = self.obj.Tool
|
||||
editform = FreeCADGui.PySideUic.loadUi(":/panels/ToolEdit.ui")
|
||||
radius = tool.Diameter / 2
|
||||
length = tool.CuttingEdgeHeight
|
||||
t = Part.makeCylinder(radius, length)
|
||||
self.toolrep.Shape = t
|
||||
|
||||
editform.NameField.setText(tool.Name)
|
||||
editform.TypeField.setCurrentIndex(self.getType(tool.ToolType))
|
||||
editform.MaterialField.setCurrentIndex(self.getMaterial(tool.Material))
|
||||
editform.DiameterField.setText(FreeCAD.Units.Quantity(tool.Diameter, FreeCAD.Units.Length).UserString)
|
||||
editform.LengthOffsetField.setText(FreeCAD.Units.Quantity(tool.LengthOffset, FreeCAD.Units.Length).UserString)
|
||||
editform.FlatRadiusField.setText(FreeCAD.Units.Quantity(tool.FlatRadius, FreeCAD.Units.Length).UserString)
|
||||
editform.CornerRadiusField.setText(FreeCAD.Units.Quantity(tool.CornerRadius, FreeCAD.Units.Length).UserString)
|
||||
editform.CuttingEdgeAngleField.setText(FreeCAD.Units.Quantity(tool.CuttingEdgeAngle, FreeCAD.Units.Angle).UserString)
|
||||
editform.CuttingEdgeHeightField.setText(FreeCAD.Units.Quantity(tool.CuttingEdgeHeight, FreeCAD.Units.Length).UserString)
|
||||
def getStandardButtons(self):
|
||||
return int(QtGui.QDialogButtonBox.Ok)
|
||||
|
||||
r = editform.exec_()
|
||||
if r:
|
||||
if editform.NameField.text():
|
||||
tool.Name = str(editform.NameField.text()) #FIXME: not unicode safe!
|
||||
tool.ToolType = self.getType(editform.TypeField.currentIndex())
|
||||
tool.Material = self.getMaterial(editform.MaterialField.currentIndex())
|
||||
tool.Diameter = FreeCAD.Units.parseQuantity(editform.DiameterField.text())
|
||||
tool.LengthOffset = FreeCAD.Units.parseQuantity(editform.LengthOffsetField.text())
|
||||
tool.FlatRadius = FreeCAD.Units.parseQuantity(editform.FlatRadiusField.text())
|
||||
tool.CornerRadius = FreeCAD.Units.parseQuantity(editform.CornerRadiusField.text())
|
||||
tool.CuttingEdgeAngle = FreeCAD.Units.Quantity(editform.CuttingEdgeAngleField.text())
|
||||
tool.CuttingEdgeHeight = FreeCAD.Units.parseQuantity(editform.CuttingEdgeHeightField.text())
|
||||
self.obj.Tool = tool
|
||||
self.setFields()
|
||||
def edit(self, item, column):
|
||||
if not self.updating:
|
||||
self.resetObject()
|
||||
|
||||
def resetObject(self, remove=None):
|
||||
"transfers the values from the widget to the object"
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def setupUi(self):
|
||||
t = Part.makeCylinder(1, 1)
|
||||
self.toolrep = FreeCAD.ActiveDocument.addObject("Part::Feature", "tool")
|
||||
self.toolrep.Shape = t
|
||||
|
||||
self.setFields()
|
||||
self.editor.setupUi()
|
||||
|
||||
|
||||
|
||||
class SelObserver:
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def __del__(self):
|
||||
pass
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
# register the FreeCAD command
|
||||
FreeCADGui.addCommand('Path_ToolController', CommandPathToolController())
|
||||
|
||||
Reference in New Issue
Block a user