Suppport for engrave as part of a general job

This commit is contained in:
Markus Lampert
2018-05-28 16:56:09 -07:00
committed by wmayer
parent aaa200f015
commit 13bce09608
3 changed files with 65 additions and 4 deletions

View File

@@ -57,7 +57,8 @@ class ObjectEngrave(PathOp.ObjectOp):
def initOperation(self, obj):
'''initOperation(obj) ... create engraving specific properties.'''
obj.addProperty("App::PropertyInteger", "StartVertex", "Path", QtCore.QT_TRANSLATE_NOOP("App::Property", "The vertex index to start the path from"))
obj.addProperty("App::PropertyInteger", "StartVertex", "Path", QtCore.QT_TRANSLATE_NOOP("PathEngrave", "The vertex index to start the path from"))
obj.addProperty("App::PropertyLinkList", "BaseShapes", "Path", QtCore.QT_TRANSLATE_NOOP("PathEngrave", "Additional base objects to be engraved"))
def opExecute(self, obj):
'''opExecute(obj) ... process engraving operation'''
@@ -109,9 +110,16 @@ class ObjectEngrave(PathOp.ObjectOp):
wires.extend(TechDraw.edgeWalker(edges))
output += self.buildpathocc(obj, wires, zValues)
self.wires = wires
else:
elif not obj.BaseShapes:
PathLog.info("base object: %s" % (obj.Base))
raise ValueError('Unknown baseobject type for engraving')
if obj.BaseShapes:
wires = []
for shape in obj.BaseShapes:
output += self.buildpathocc(obj, shape.Shape.Wires, zValues)
wires.extend(shape.Shape.Wires)
self.wires = wires
output += "G0 Z" + PathUtils.fmt(obj.ClearanceHeight.Value) + "F " + PathUtils.fmt(self.vertRapid) + "\n"
self.commandlist.append(Path.Command('G0', {'Z': obj.ClearanceHeight.Value, 'F': self.vertRapid}))

View File

@@ -36,9 +36,57 @@ __author__ = "sliptonic (Brad Collette)"
__url__ = "http://www.freecadweb.org"
__doc__ = "Engrave operation page controller and command implementation."
if False:
PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule())
PathLog.trackModule(PathLog.thisModule())
else:
PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule())
def translate(context, text, disambig=None):
return QtCore.QCoreApplication.translate(context, text, disambig)
class TaskPanelBaseGeometryPage(PathOpGui.TaskPanelBaseGeometryPage):
'''Enhanced base geometry page to also allow special base objects.'''
def super(self):
return super(TaskPanelBaseGeometryPage, self)
def addBaseGeometry(self, selection):
if 1 == len(selection) and selection[0].Object.isDerivedFrom('Part::Part2DObject'):
sel = selection[0]
if sel.HasSubObjects:
for sub in sel.SubElementNames:
self.obj.Proxy.addBase(self.obj, sel.Object, sub)
else:
shapes = self.obj.BaseShapes
shapes.append(sel.Object)
self.obj.BaseShapes = shapes
return True
return self.super().addBaseGeometry(selection)
def setFields(self, obj):
self.super().setFields(obj)
self.form.baseList.blockSignals(True)
for shape in self.obj.BaseShapes:
item = QtGui.QListWidgetItem(shape.Label)
item.setData(self.super().DataObject, shape)
item.setData(self.super().DataObjectSub, None)
self.form.baseList.addItem(item)
self.form.baseList.blockSignals(False)
def updateBase(self):
PathLog.track()
shapes = []
for i in range(self.form.baseList.count()):
item = self.form.baseList.item(i)
obj = item.data(self.super().DataObject)
sub = itme.data(self.super().DataObjectSub)
if not sub:
shapes.append(obj)
PathLog.debug("Setting new base shapes: %s -> %s" % (self.obj.BaseShapes, shapes))
self.obj.BaseShapes = shapes
return self.super().updateBase()
class TaskPanelOpPage(PathOpGui.TaskPanelPage):
'''Page controller class for the Engrave operation.'''
@@ -64,6 +112,10 @@ class TaskPanelOpPage(PathOpGui.TaskPanelPage):
signals.append(self.form.toolController.currentIndexChanged)
return signals
def taskPanelBaseGeometryPage(self, obj, features):
'''taskPanelBaseGeometryPage(obj, features) ... return page for adding base geometries.'''
return TaskPanelBaseGeometryPage(obj, features)
Command = PathOpGui.SetupOperation('Engrave',
PathEngrave.Create,
TaskPanelOpPage,

View File

@@ -427,8 +427,9 @@ class TaskPanelBaseGeometryPage(TaskPanelPage):
item = self.form.baseList.item(i)
obj = item.data(self.DataObject)
sub = str(item.data(self.DataObjectSub))
base = (obj, sub)
newlist.append(base)
if sub:
base = (obj, sub)
newlist.append(base)
PathLog.debug("Setting new base: %s -> %s" % (self.obj.Base, newlist))
self.obj.Base = newlist