From b44e7572beb32293c196c6837b516becfa84fc54 Mon Sep 17 00:00:00 2001 From: markus Date: Fri, 21 Sep 2018 17:41:24 -0700 Subject: [PATCH] Added extracting the wire of an extension --- src/Mod/Path/PathScripts/PathPocketShape.py | 41 +++++++++++++++++-- .../Path/PathScripts/PathPocketShapeGui.py | 25 +++++++---- 2 files changed, 56 insertions(+), 10 deletions(-) diff --git a/src/Mod/Path/PathScripts/PathPocketShape.py b/src/Mod/Path/PathScripts/PathPocketShape.py index 457d4903d0..428a6b5034 100644 --- a/src/Mod/Path/PathScripts/PathPocketShape.py +++ b/src/Mod/Path/PathScripts/PathPocketShape.py @@ -61,6 +61,40 @@ class Extension(object): self.length = length self.direction = direction + def extendEdge(self, e0, direction): + e2 = e0.copy() + off = self.length.Value * direction + e2.translate(off) + print("extendEdge(%.2f, %.2f, %.2f)" % (off.x, off.y, off.z)) + e2 = PathGeom.flipEdge(e2) + e1 = Part.Edge(Part.LineSegment(e0.valueAt(e0.LastParameter), e2.valueAt(e2.FirstParameter))) + e3 = Part.Edge(Part.LineSegment(e2.valueAt(e2.LastParameter), e0.valueAt(e0.FirstParameter))) + wire = Part.Wire([e0, e1, e2, e3]) + self.wire = wire + return wire + + def getWire(self): + if PathGeom.isRoughly(0, self.length.Value): + return None + + feature = self.obj.Shape.getElement(self.sub) + if Part.Edge == type(feature): + e0 = feature + print("getEdgeCorners(%s)" % self.sub) + midparam = e0.FirstParameter + 0.5 * (e0.LastParameter - e0.FirstParameter) + tangent = e0.tangentAt(midparam) + normal = tangent.cross(FreeCAD.Vector(0, 0, 1)).normalize() + poffPlus = e0.valueAt(midparam) + 0.01 * normal + poffMinus = e0.valueAt(midparam) - 0.01 * normal + if not self.obj.Shape.isInside(poffPlus, 0.005, True): + print('poffPlus') + return self.extendEdge(e0, normal) + if not self.obj.Shape.isInside(poffMinus, 0.005, True): + print('poffMinus') + return self.extendEdge(e0, normal.negative()) + else: + print("getCorners(%s)" % self.sub) + class ObjectPocket(PathPocketBase.ObjectPocket): '''Proxy object for Pocket operation.''' @@ -188,13 +222,15 @@ class ObjectPocket(PathPocketBase.ObjectPocket): obj.OpStartDepth = bb.ZMax obj.ExtensionLengthDefault = obj.OpToolDiameter / 2 + def createExtension(self, obj, extObj, extSub): + return Extension(extObj, extSub, obj.ExtensionLengthDefault, Extension.DirectionNormal) + def getExtensions(self, obj): extensions = [] i = 0 for extObj,features in obj.ExtensionFeature: for extSub in features: - ext = Extension(extObj, extSub, obj.ExtensionLengthDefault, Extension.DirectionNormal) - extensions.append(ext) + extensions.append(self.createExtension(obj, extObj, extSub)) i = i + 1 return extensions @@ -205,7 +241,6 @@ class ObjectPocket(PathPocketBase.ObjectPocket): subs.append(ext.sub) features[ext.obj] = subs PathLog.track('setExtension', obj.Label) - #obj.ExtensionFeature = [(obj, sub) for obj, sub in PathUtil.keyValueIter(features)] obj.ExtensionFeature = [(ext.obj, ext.sub) for ext in extensions] def SetupProperties(): diff --git a/src/Mod/Path/PathScripts/PathPocketShapeGui.py b/src/Mod/Path/PathScripts/PathPocketShapeGui.py index e547ea1228..a4fe74ec6f 100644 --- a/src/Mod/Path/PathScripts/PathPocketShapeGui.py +++ b/src/Mod/Path/PathScripts/PathPocketShapeGui.py @@ -49,6 +49,8 @@ else: PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule()) +Wires = [] + class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): DataObject = QtCore.Qt.ItemDataRole.UserRole Direction = { @@ -116,13 +118,12 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): self.form.extensions.blockSignals(False) def updateSelection(self, obj, sel): - PathLog.track(sel) if sel and sel[0].SubElementNames: self.form.buttonAdd.setEnabled(True) else: self.form.buttonAdd.setEnabled(False) - def currentItemChanged(self, now, prev): + def itemSelectionChanged(self): if 0 == self.form.extensions.rowCount(): self.form.buttonClear.setEnabled(False) self.form.buttonRemove.setEnabled(False) @@ -137,8 +138,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): for sel in FreeCADGui.Selection.getSelectionEx(): for subname in sel.SubElementNames: row = self.form.extensions.rowCount() - ext = PathPocketShape.Extension(sel.Object, subname, 0.0, 0) - self.extensions.append(ext) + self.extensions.append(self.obj.Proxy.createExtension(self.obj, sel.Object, subname)) self.setFields(self.obj) self.setDirty() @@ -147,16 +147,27 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage): self.form.extensions.setRowCount(0) def extensionsRemove(self): - pass + global Wires + Wires = [] + processed = [] + for item in self.form.extensions.selectedItems(): + ext = item.data(self.DataObject) + if not ext in processed: + Wires.append(ext) + wire = ext.getWire() + if wire: + import Part + Part.show(wire) + processed.append(ext) def pageRegisterSignalHandlers(self): - self.form.extensions.currentItemChanged.connect(self.currentItemChanged) + self.form.extensions.itemSelectionChanged.connect(self.itemSelectionChanged) self.form.buttonAdd.clicked.connect(self.extensionsAdd) self.form.buttonClear.clicked.connect(self.extensionsClear) self.form.buttonRemove.clicked.connect(self.extensionsRemove) self.updateSelection(self.obj, FreeCADGui.Selection.getSelectionEx()) - self.currentItemChanged(-1, -1) + self.itemSelectionChanged() class TaskPanelOpPage(PathPocketBaseGui.TaskPanelOpPage): '''Page controller class for Pocket operation'''