Added ToolTable to job and convert old ToolController property on the fly.

This commit is contained in:
Markus Lampert
2020-12-28 16:09:14 -08:00
parent 2203dcec93
commit 8a95005586
2 changed files with 28 additions and 10 deletions

View File

@@ -58,6 +58,7 @@ class JobTemplate:
PostProcessorOutputFile = 'Output'
SetupSheet = 'SetupSheet'
Stock = 'Stock'
# TCs are grouped under ToolTable in a job, the template refers to them directly though
ToolController = 'ToolController'
Version = 'Version'
@@ -120,7 +121,7 @@ class ObjectJob:
obj.addProperty("App::PropertyLink", "Stock", "Base", QtCore.QT_TRANSLATE_NOOP("PathJob", "Solid object to be used as stock."))
obj.addProperty("App::PropertyLink", "Operations", "Base", QtCore.QT_TRANSLATE_NOOP("PathJob", "Compound path of all operations in the order they are processed."))
obj.addProperty("App::PropertyLinkList", "ToolController", "Base", QtCore.QT_TRANSLATE_NOOP("PathJob", "Collection of tool controllers available for this job."))
#obj.addProperty("App::PropertyLinkList", "ToolController", "Base", QtCore.QT_TRANSLATE_NOOP("PathJob", "Collection of tool controllers available for this job."))
obj.addProperty("App::PropertyBool", "SplitOutput", "Output", QtCore.QT_TRANSLATE_NOOP("PathJob", "Split output into multiple gcode files"))
obj.addProperty("App::PropertyEnumeration", "OrderOutputBy", "WCS", QtCore.QT_TRANSLATE_NOOP("PathJob", "If multiple WCS, order the output this way"))
@@ -150,6 +151,7 @@ class ObjectJob:
self.setupSetupSheet(obj)
self.setupBaseModel(obj, models)
self.setupToolTable(obj)
self.tooltip = None
self.tooltipArgs = None
@@ -191,6 +193,18 @@ class ObjectJob:
obj.Base = None
obj.removeProperty('Base')
def setupToolTable(self, obj):
if not hasattr(obj, 'ToolTable'):
obj.addProperty("App::PropertyLink", "ToolTable", "Base", QtCore.QT_TRANSLATE_NOOP("PathJob", "Collection of all tool controllers for the job"))
toolTable = FreeCAD.ActiveDocument.addObject("App::DocumentObjectGroup", "ToolTable")
toolTable.Label = 'ToolTable'
if toolTable.ViewObject:
toolTable.ViewObject.Visibility = False
if hasattr(obj, 'ToolController'):
toolTable.addObjects(obj.ToolController)
obj.removeProperty('ToolController')
obj.ToolTable = toolTable
def removeBase(self, obj, base, removeFromModel):
if isResourceClone(obj, base, None):
PathUtil.clearExpressionEngine(base)
@@ -234,14 +248,16 @@ class ObjectJob:
# Tool controllers might refer to either legacy tool or toolbit
PathLog.debug('taking down tool controller')
for tc in obj.ToolController:
for tc in obj.ToolTable.Group:
if hasattr(tc.Tool, "Proxy"):
PathUtil.clearExpressionEngine(tc.Tool)
doc.removeObject(tc.Tool.Name)
PathUtil.clearExpressionEngine(tc)
tc.Proxy.onDelete(tc)
doc.removeObject(tc.Name)
obj.ToolController = []
obj.ToolTable = []
doc.removeObject(obj.ToolTable.Name)
obj.ToolTable = None
# SetupSheet
PathUtil.clearExpressionEngine(obj.SetupSheet)
@@ -268,6 +284,7 @@ class ObjectJob:
self.setupBaseModel(obj)
self.fixupOperations(obj)
self.setupSetupSheet(obj)
self.setupToolTable(obj)
obj.setEditorMode('Operations', 2) # hide
obj.setEditorMode('Placement', 2)
@@ -334,7 +351,7 @@ class ObjectJob:
obj.Stock = PathStock.CreateFromTemplate(obj, attrs.get(JobTemplate.Stock))
PathLog.debug("setting tool controllers (%d)" % len(tcs))
obj.ToolController = tcs
obj.ToolTable.Group = tcs
else:
PathLog.error(translate('PathJob', "Unsupported PathJob template version %s") % attrs.get(JobTemplate.Version))
if not tcs:
@@ -414,13 +431,12 @@ class ObjectJob:
op.Path.Center = self.obj.Operations.Path.Center
def addToolController(self, tc):
group = self.obj.ToolController
group = self.obj.ToolTable.Group
PathLog.debug("addToolController(%s): %s" % (tc.Label, [t.Label for t in group]))
if tc.Name not in [str(t.Name) for t in group]:
tc.setExpression('VertRapid', "%s.%s" % (self.setupSheet.expressionReference(), PathSetupSheet.Template.VertRapid))
tc.setExpression('HorizRapid', "%s.%s" % (self.setupSheet.expressionReference(), PathSetupSheet.Template.HorizRapid))
group.append(tc)
self.obj.ToolController = group
self.obj.ToolTable.addObject(tc)
Notification.updateTC.emit(self.obj, tc)
def allOperations(self):