Added combined dialog for TC editing - refactored UI controller into separate class.

This commit is contained in:
Markus Lampert
2017-08-26 19:41:29 -07:00
committed by wmayer
parent b05a6e1945
commit d7558ed6ba
6 changed files with 730 additions and 153 deletions

View File

@@ -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

View File

@@ -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()

View File

@@ -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())