Add a task panel page for controlling turning diameters

This commit is contained in:
Daniel Wood
2020-10-11 07:56:36 +01:00
parent 66afbc36a8
commit 61dc5dea04
4 changed files with 193 additions and 1 deletions

View File

@@ -64,6 +64,7 @@ FeatureBaseFaces = 0x0400 # Base
FeatureBasePanels = 0x0800 # Base
FeatureLocations = 0x1000 # Locations
FeatureCoolant = 0x2000 # Coolant
FeatureDiameters = 0x4000 # Turning Diameters
FeatureBaseGeometry = FeatureBaseVertexes | FeatureBaseFaces | FeatureBaseEdges | FeatureBasePanels
@@ -91,6 +92,7 @@ class ObjectOp(object):
FeatureBasePanels ... Base geometry support for Arch.Panels
FeatureLocations ... Base location support
FeatureCoolant ... Support for operation coolant
FeatureDiameters ... Support for turning operation diameters
The base class handles all base API and forwards calls to subclasses with
an op prefix. For instance, an op is not expected to overwrite onChanged(),
@@ -169,6 +171,10 @@ class ObjectOp(object):
obj.addProperty("App::PropertyVectorDistance", "StartPoint", "Start Point", QtCore.QT_TRANSLATE_NOOP("PathOp", "The start point of this path"))
obj.addProperty("App::PropertyBool", "UseStartPoint", "Start Point", QtCore.QT_TRANSLATE_NOOP("PathOp", "Make True, if specifying a Start Point"))
if FeatureDiameters & features:
obj.addProperty("App::PropertyDistance", "MinDiameter", "Diameter", QtCore.QT_TRANSLATE_NOOP("PathOp", "Lower limit of the turning diameter"))
obj.addProperty("App::PropertyDistance", "MaxDiameter", "Diameter", QtCore.QT_TRANSLATE_NOOP("PathOp", "Upper limit of the turning diameter."))
# members being set later
self.commandlist = None
self.horizFeed = None
@@ -352,6 +358,10 @@ class ObjectOp(object):
if not self.applyExpression(obj, 'ClearanceHeight', job.SetupSheet.ClearanceHeightExpression):
obj.ClearanceHeight = '5 mm'
if FeatureDiameters & features:
obj.MinDiameter = '0 mm'
obj.MaxDiameter = '0 mm'
if FeatureStartPoint & features:
obj.UseStartPoint = False

View File

@@ -928,6 +928,43 @@ class TaskPanelDepthsPage(TaskPanelPage):
self.form.startDepthSet.setEnabled(False)
self.form.finalDepthSet.setEnabled(False)
class TaskPanelDiametersPage(TaskPanelPage):
'''Page controller for diameters.'''
def __init__(self, obj, features):
super(TaskPanelDiametersPage, self).__init__(obj, features)
# members initialized later
self.clearanceHeight = None
self.safeHeight = None
def getForm(self):
return FreeCADGui.PySideUic.loadUi(":/panels/PageDiametersEdit.ui")
def initPage(self, obj):
self.minDiameter = PathGui.QuantitySpinBox(self.form.minDiameter, obj, 'MinDiameter')
self.maxDiameter = PathGui.QuantitySpinBox(self.form.maxDiameter, obj, 'MaxDiameter')
def getTitle(self, obj):
return translate("Path", "Diameters")
def getFields(self, obj):
self.minDiameter.updateProperty()
self.maxDiameter.updateProperty()
def setFields(self, obj):
self.minDiameter.updateSpinBox()
self.maxDiameter.updateSpinBox()
def getSignalsForUpdate(self, obj):
signals = []
signals.append(self.form.minDiameter.editingFinished)
signals.append(self.form.maxDiameter.editingFinished)
return signals
def pageUpdateData(self, obj, prop):
if prop in ['MinDiameter', 'MaxDiameter']:
self.setFields(obj)
class TaskPanel(object):
'''
@@ -953,6 +990,8 @@ class TaskPanel(object):
self.finalDepth = None
self.stepDown = None
self.buttonBox = None
self.minDiameter = None
self.maxDiameter = None
features = obj.Proxy.opFeatures(obj)
opPage.features = features
@@ -980,7 +1019,13 @@ class TaskPanel(object):
self.featurePages.append(opPage.taskPanelHeightsPage(obj, features))
else:
self.featurePages.append(TaskPanelHeightsPage(obj, features))
if PathOp.FeatureDiameters & features:
if hasattr(opPage, 'taskPanelDiametersPage'):
self.featurePages.append(opPage.taskPanelDiametersPage(obj, features))
else:
self.featurePages.append(TaskPanelDiametersPage(obj, features))
self.featurePages.append(opPage)
for page in self.featurePages: