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 1c25c1520b
commit 83ab3bd3f2
6 changed files with 730 additions and 153 deletions

View File

@@ -54,6 +54,7 @@
<file>panels/DlgJobChooser.ui</file>
<file>panels/DlgJobCreate.ui</file>
<file>panels/DlgSelectPostProcessor.ui</file>
<file>panels/DlgToolControllerEdit.ui</file>
<file>panels/DlgToolCopy.ui</file>
<file>panels/DlgTCChooser.ui</file>
<file>panels/DogboneEdit.ui</file>

View File

@@ -0,0 +1,534 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>492</width>
<height>648</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QToolBox" name="toolBox">
<widget class="QWidget" name="toolBoxPage1" native="true">
<attribute name="label">
<string>Controller</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox_4">
<property name="title">
<string>Controller Name / Tool Number</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="tcName">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="tcNumber"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Horiz. Feed</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Vert. Feed</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Horiz Rapid</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Vert Rapid</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="Gui::InputField" name="horizFeed">
<property name="minimum" stdset="0">
<double>0.000000000000000</double>
</property>
<property name="unit" stdset="0">
<string notr="true">mm/s</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="Gui::InputField" name="vertFeed">
<property name="minimum" stdset="0">
<double>0.000000000000000</double>
</property>
<property name="unit" stdset="0">
<string notr="true">mm/s</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="Gui::InputField" name="horizRapid">
<property name="minimum" stdset="0">
<double>0.000000000000000</double>
</property>
<property name="unit" stdset="0">
<string notr="true">mm/s</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="Gui::InputField" name="vertRapid">
<property name="minimum" stdset="0">
<double>0.000000000000000</double>
</property>
<property name="unit" stdset="0">
<string notr="true">mm/s</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Spindle</string>
</property>
<layout class="QFormLayout" name="formLayout_2">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<item row="0" column="1">
<widget class="QComboBox" name="spindleDirection">
<item>
<property name="text">
<string>Forward</string>
</property>
</item>
<item>
<property name="text">
<string>Reverse</string>
</property>
</item>
</widget>
</item>
<item row="0" column="0">
<widget class="QDoubleSpinBox" name="spindleSpeed">
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>100000.000000000000000</double>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="toolBoxPage2" native="true">
<attribute name="label">
<string>Tool</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Tool Properties</string>
</property>
<layout class="QFormLayout" name="formLayout_3">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Name</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="toolName">
<property name="maxLength">
<number>50</number>
</property>
<property name="placeholderText">
<string>Display Name</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Type</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="toolType">
<property name="currentIndex">
<number>6</number>
</property>
<item>
<property name="text">
<string>Drill</string>
</property>
</item>
<item>
<property name="text">
<string>CenterDrill</string>
</property>
</item>
<item>
<property name="text">
<string>CounterSink</string>
</property>
</item>
<item>
<property name="text">
<string>CounterBore</string>
</property>
</item>
<item>
<property name="text">
<string>Reamer</string>
</property>
</item>
<item>
<property name="text">
<string>Tap</string>
</property>
</item>
<item>
<property name="text">
<string>EndMill</string>
</property>
</item>
<item>
<property name="text">
<string>SlotCutter</string>
</property>
</item>
<item>
<property name="text">
<string>BallEndMill</string>
</property>
</item>
<item>
<property name="text">
<string>ChamferMill</string>
</property>
</item>
<item>
<property name="text">
<string>CornerRound</string>
</property>
</item>
<item>
<property name="text">
<string>Engraver</string>
</property>
</item>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Material</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="toolMaterial">
<item>
<property name="text">
<string>HighSpeedSteel</string>
</property>
</item>
<item>
<property name="text">
<string>HighCarbonSteel</string>
</property>
</item>
<item>
<property name="text">
<string>CastAlloy</string>
</property>
</item>
<item>
<property name="text">
<string>Carbide</string>
</property>
</item>
<item>
<property name="text">
<string>Ceramics</string>
</property>
</item>
<item>
<property name="text">
<string>Diamond</string>
</property>
</item>
<item>
<property name="text">
<string>Sialon</string>
</property>
</item>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Diameter</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Length Offset</string>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Flat Radius</string>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Corner Radius</string>
</property>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Cutting Edge Angle</string>
</property>
</widget>
</item>
<item row="18" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Cutting Edge Height</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="Gui::InputField" name="toolDiameter">
<property name="text">
<string>0 mm</string>
</property>
<property name="singleStep" stdset="0">
<double>0.125000000000000</double>
</property>
<property name="maximum" stdset="0">
<double>100.000000000000000</double>
</property>
<property name="minimum" stdset="0">
<double>0.000000000000000</double>
</property>
<property name="unit" stdset="0">
<string notr="true">mm</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="Gui::InputField" name="toolLengthOffset">
<property name="text">
<string>0 mm</string>
</property>
<property name="maximum" stdset="0">
<double>100.000000000000000</double>
</property>
<property name="minimum" stdset="0">
<double>0.000000000000000</double>
</property>
<property name="unit" stdset="0">
<string notr="true">mm</string>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="Gui::InputField" name="toolFlatRadius">
<property name="text">
<string>0 mm</string>
</property>
<property name="maximum" stdset="0">
<double>100.000000000000000</double>
</property>
<property name="minimum" stdset="0">
<double>0.000000000000000</double>
</property>
<property name="unit" stdset="0">
<string notr="true">mm</string>
</property>
</widget>
</item>
<item row="14" column="1">
<widget class="Gui::InputField" name="toolCornerRadius">
<property name="text">
<string>0 mm</string>
</property>
<property name="maximum" stdset="0">
<double>100.000000000000000</double>
</property>
<property name="minimum" stdset="0">
<double>0.000000000000000</double>
</property>
<property name="unit" stdset="0">
<string notr="true">mm</string>
</property>
</widget>
</item>
<item row="18" column="1">
<widget class="Gui::InputField" name="toolCuttingEdgeHeight">
<property name="text">
<string>0 mm</string>
</property>
<property name="maximum" stdset="0">
<double>100.000000000000000</double>
</property>
<property name="minimum" stdset="0">
<double>0.000000000000000</double>
</property>
<property name="unit" stdset="0">
<string notr="true">mm</string>
</property>
</widget>
</item>
<item row="16" column="1">
<widget class="Gui::InputField" name="toolCuttingEdgeAngle">
<property name="unit" stdset="0">
<string notr="true">°</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="label_14">
<property name="frameShape">
<enum>QFrame::WinPanel</enum>
</property>
<property name="text">
<string>Any modifications only affect this ToolController!</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>Gui::InputField</class>
<extends>QLineEdit</extends>
<header>Gui/InputField.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>Dialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>Dialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@@ -86,8 +86,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>378</width>
<height>477</height>
<width>294</width>
<height>309</height>
</rect>
</property>
<attribute name="label">
@@ -225,8 +225,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>378</width>
<height>403</height>
<width>368</width>
<height>399</height>
</rect>
</property>
<attribute name="label">
@@ -443,8 +443,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>378</width>
<height>403</height>
<width>142</width>
<height>41</height>
</rect>
</property>
<attribute name="label">
@@ -468,8 +468,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>378</width>
<height>403</height>
<width>142</width>
<height>41</height>
</rect>
</property>
<attribute name="label">
@@ -532,12 +532,18 @@
</column>
<column>
<property name="text">
<string>H-Feed</string>
<string>Feed</string>
</property>
<property name="icon">
<iconset theme="object-flip-horizontal"/>
</property>
</column>
<column>
<property name="text">
<string>V-Feed</string>
<string>Feed</string>
</property>
<property name="icon">
<iconset theme="object-flip-vertical"/>
</property>
</column>
<column>
@@ -744,6 +750,9 @@
<item row="0" column="1">
<widget class="Gui::InputField" name="defaultSafeHeight"/>
</item>
<item row="1" column="1">
<widget class="Gui::InputField" name="defaultClearanceHeight"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
@@ -751,9 +760,6 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="Gui::InputField" name="defaultClearanceHeight"/>
</item>
</layout>
</widget>
</item>
@@ -782,6 +788,46 @@
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Rapid Speed</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Horizontal</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="Gui::InputField" name="lineEdit"/>
</item>
<item row="1" column="1">
<widget class="Gui::InputField" name="lineEdit_2"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Vertical</string>
</property>
</widget>
</item>
</layout>
<zorder>label_15</zorder>
<zorder>label_3</zorder>
<zorder>lineEdit</zorder>
<zorder>lineEdit_2</zorder>
<zorder>label_4</zorder>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">

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