From 68d3e18ab4c8e988071d87be35abd133a52c2b72 Mon Sep 17 00:00:00 2001 From: sliptonic Date: Sun, 20 Nov 2016 13:55:49 -0600 Subject: [PATCH] PATH: Drilling: allow selection of partial circular edges --- src/Mod/Path/PathScripts/PathDrilling.py | 38 ++++++++++++++++++++--- src/Mod/Path/PathScripts/PathJob.py | 3 -- src/Mod/Path/PathScripts/PathSelection.py | 2 +- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/Mod/Path/PathScripts/PathDrilling.py b/src/Mod/Path/PathScripts/PathDrilling.py index 37f86aa14d..ccdec749b8 100644 --- a/src/Mod/Path/PathScripts/PathDrilling.py +++ b/src/Mod/Path/PathScripts/PathDrilling.py @@ -195,7 +195,7 @@ class ObjectDrilling: if isinstance(subobj.Edges[0].Curve, Part.Circle): drillable = True if str(subobj.Surface) == "": - drillable = True + drillable = subobj.isClosed() if len(subobj.Edges) == 3: cedge = [] ledge = [] @@ -211,7 +211,7 @@ class ObjectDrilling: drillable = False if sub[0:4] == 'Edge': o = obj.getElement(sub) - if isinstance(o.Curve, Part.Circle) and len(o.Vertexes) == 1: + if isinstance(o.Curve, Part.Circle): drillable = True return drillable @@ -266,9 +266,37 @@ class ObjectDrilling: FreeCAD.Console.PrintWarning("Drillable location already in the list" + "\n") else: baselist.append(item) - print baselist - obj.Base = baselist - self.execute(obj) + + if sub[0:4] == 'Edge': + drillableEdges = [] + o = ss.Shape.getElement(sub) + + for i in range(len(ss.Shape.Edges)): + candidateedge = ss.Shape.getElement("Edge" + str(i+1)) + if self.checkdrillable(ss.Shape, "Edge" + str(i+1)): + if candidateedge.Curve.Radius == o.Curve.Radius and candidateedge.Curve.Center.z == o.Curve.Center.z: + drillableEdges.append("Edge" + str(i+1)) + if len(drillableEdges) > 1: + reply = QtGui.QMessageBox.question(None,"","Multiple drillable faces found. Drill them all?", + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) + if reply == QtGui.QMessageBox.Yes: + for i in drillableEdges: + if i in baselist: + FreeCAD.Console.PrintWarning("Drillable location already in the list" + "\n") + continue + else: + newitem = (ss, i) + baselist.append(newitem) + else: + if item in baselist: + FreeCAD.Console.PrintWarning("Drillable location already in the list" + "\n") + else: + baselist.append(item) + + print baselist + obj.Base = baselist + self.execute(obj) + class _ViewProviderDrill: def __init__(self, obj): diff --git a/src/Mod/Path/PathScripts/PathJob.py b/src/Mod/Path/PathScripts/PathJob.py index 12bee9bd77..c22e657ed7 100644 --- a/src/Mod/Path/PathScripts/PathJob.py +++ b/src/Mod/Path/PathScripts/PathJob.py @@ -332,11 +332,8 @@ class TaskPanel: else: for o in FreeCADGui.Selection.getCompleteSelection(): baseindex = self.form.cboBaseObject.findText(o.Name, QtCore.Qt.MatchFixedString) - print baseindex if baseindex >= 0: - self.form.cboBaseObject.blockSignals(True) self.form.cboBaseObject.setCurrentIndex(baseindex) - self.form.cboBaseObject.blockSignals(False) def open(self): diff --git a/src/Mod/Path/PathScripts/PathSelection.py b/src/Mod/Path/PathScripts/PathSelection.py index 3fa24b653e..78bd7af7d1 100644 --- a/src/Mod/Path/PathScripts/PathSelection.py +++ b/src/Mod/Path/PathScripts/PathSelection.py @@ -105,7 +105,7 @@ class DRILLGate: subobj = obj.getElement(sub) drillable = isinstance(subobj.Edges[0].Curve, Part.Circle) if str(subobj.Surface) == "": - drillable = True + drillable = subobj.isClosed() if sub[0:4] == 'Edge': o = obj.getElement(sub)