From 44a0b5308fc8e7bcf8dfcadca0b66a479ea8028e Mon Sep 17 00:00:00 2001
From: Russell Johnson <47639332+Russ4262@users.noreply.github.com>
Date: Thu, 17 Feb 2022 22:48:32 -0600
Subject: [PATCH 1/2] Path: Convert enable extensions button to checkbox
---
.../Resources/panels/PageOpPocketExtEdit.ui | 26 +++----------------
1 file changed, 3 insertions(+), 23 deletions(-)
diff --git a/src/Mod/Path/Gui/Resources/panels/PageOpPocketExtEdit.ui b/src/Mod/Path/Gui/Resources/panels/PageOpPocketExtEdit.ui
index 19a00cb96a..5076d0db7e 100644
--- a/src/Mod/Path/Gui/Resources/panels/PageOpPocketExtEdit.ui
+++ b/src/Mod/Path/Gui/Resources/panels/PageOpPocketExtEdit.ui
@@ -17,40 +17,20 @@
-
-
-
+
- Click to disable Extensions
+ Enable Extensions
true
- true
-
-
-
- -
-
-
- Ignore Edges and Wires
-
-
- true
-
-
- true
+ false
- -
-
-
- ---
-
-
-
-
From 56f95bb4e8b4dfaad51f8ebe97aedda419b0ef2a Mon Sep 17 00:00:00 2001
From: Russell Johnson <47639332+Russ4262@users.noreply.github.com>
Date: Thu, 17 Feb 2022 22:48:51 -0600
Subject: [PATCH 2/2] Path: Remove waterline, outline, and avoid extensions
---
.../Path/PathScripts/PathFeatureExtensions.py | 103 +-------------
.../PathScripts/PathFeatureExtensionsGui.py | 127 +++---------------
2 files changed, 23 insertions(+), 207 deletions(-)
diff --git a/src/Mod/Path/PathScripts/PathFeatureExtensions.py b/src/Mod/Path/PathScripts/PathFeatureExtensions.py
index 51d17a55fa..0075bbf8b4 100644
--- a/src/Mod/Path/PathScripts/PathFeatureExtensions.py
+++ b/src/Mod/Path/PathScripts/PathFeatureExtensions.py
@@ -281,26 +281,7 @@ class Extension(object):
and sub element provided at class instantiation, as a closed wire. If no closed wire
is possible, a `None` value is returned."""
- if self.sub[:6] == "Avoid_":
- feature = self.obj.Shape.getElement(self.feature)
- self.extFaces = [Part.Face(feature.Wires[0])]
- return feature.Wires[0]
- if self.sub[:7] == "Extend_":
- rtn = self._getOutlineWire()
- if rtn:
- return rtn
- else:
- PathLog.debug("no Outline Wire")
- return None
- if self.sub[:10] == "Waterline_":
- rtn = self._getWaterlineWire()
- if rtn:
- return rtn
- else:
- PathLog.debug("no Waterline Wire")
- return None
- else:
- return self._getRegularWire()
+ return self._getRegularWire()
def _getRegularWire(self):
"""_getRegularWire()... Private method to retrieve the extension area, pertaining to the feature
@@ -403,88 +384,6 @@ class Extension(object):
PathLog.debug("Extending multi-edge open wire")
return extendWire(feature, sub, length)
- def _getOutlineWire(self):
- """_getOutlineWire()... Private method to retrieve an extended outline extension area,
- pertaining to the feature and sub element provided at class instantiation, as a closed wire.
- If no closed wire is possible, a `None` value is returned."""
- PathLog.track()
-
- baseShape = self.obj.Shape
- face = baseShape.getElement(self.feature)
- useOutline = False
- msg = translate("PathAdaptive", "Extend Outline error")
-
- if hasattr(self.op, "UseOutline"):
- useOutline = self.op.UseOutline
-
- if useOutline:
- outFace = Part.Face(face.Wires[0])
- rawFace = getExtendOutlineFace(baseShape, outFace, self.length)
-
- if rawFace:
- extFace = rawFace.cut(outFace)
- else:
- PathLog.error(msg + " 1")
- extFace = outFace
- else:
- rawFace = getExtendOutlineFace(baseShape, face, self.length)
-
- if rawFace:
- extFace = rawFace.cut(face)
- else:
- PathLog.error(msg + " 2")
- extFace = face
-
- # Debug
- # Part.show(extFace)
- # FreeCAD.ActiveDocument.ActiveObject.Label = "outline_wire"
-
- if len(extFace.Wires) > 0:
- self.extFaces = [f for f in extFace.Faces]
- return extFace.Wires[0]
-
- return None
-
- def _getWaterlineWire(self):
- """_getWaterlineWire()... Private method to retrieve a waterline extension area,
- pertaining to the feature and sub element provided at class instantiation, as a closed wire.
- Only waterline faces touching source face are returned as part of the waterline extension area.
- If no closed wire is possible, a `None` value is returned."""
- PathLog.track()
-
- msg = translate("PathFeatureExtensions", "Waterline error")
- useOutline = False
- if hasattr(self.op, "UseOutline"):
- useOutline = self.op.UseOutline
-
- baseShape = self.obj.Shape
- if useOutline:
- face = Part.Face(baseShape.getElement(self.feature).Wire1)
- else:
- face = baseShape.getElement(self.feature)
-
- rawFace = getWaterlineFace(baseShape, face)
-
- if not rawFace:
- PathLog.error(msg + " 1")
- return None
-
- if rawFace:
- extFace = rawFace.cut(face)
- else:
- PathLog.error(msg + " 2")
- extFace = face
-
- # Debug
- # Part.show(extFace)
- # FreeCAD.ActiveDocument.ActiveObject.Label = "waterline_face"
-
- if len(extFace.Wires) > 0:
- self.extFaces = [f for f in extFace.Faces]
- return extFace.Wires[0]
-
- return None
-
def _makeCircularExtFace(self, edge, extWire):
"""_makeCircularExtensionFace(edge, extWire)...
Create proper circular extension face shape. Incoming edge is expected to be a circle.
diff --git a/src/Mod/Path/PathScripts/PathFeatureExtensionsGui.py b/src/Mod/Path/PathScripts/PathFeatureExtensionsGui.py
index a4a9a8e869..b1d2b5b72d 100644
--- a/src/Mod/Path/PathScripts/PathFeatureExtensionsGui.py
+++ b/src/Mod/Path/PathScripts/PathFeatureExtensionsGui.py
@@ -234,8 +234,6 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
def getForm(self):
form = FreeCADGui.PySideUic.loadUi(":/panels/PageOpPocketExtEdit.ui")
- # Hide warning label by default
- form.enableExtensionsWarning.hide()
return form
def forAllItemsCall(self, cb):
@@ -297,21 +295,12 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
Subroutine called inside `setFields()` to initialize Extensions efficiently."""
if self.enabled:
self.extensions = FeatureExtensions.getExtensions(obj)
- elif (
- len(obj.ExtensionFeature) > 0
- ): # latter test loads pre-existing extensions (editing of existing operation)
- noEdges = True
- for (__, __, subFeat) in FeatureExtensions.readObjExtensionFeature(obj):
- if subFeat.startswith("Edge") or subFeat.startswith("Wire"):
- noEdges = False
- break
+ elif len(obj.ExtensionFeature) > 0:
self.extensions = FeatureExtensions.getExtensions(obj)
self.form.enableExtensions.setChecked(True)
- if noEdges:
- self._enableExtensions()
- else:
- self.form.includeEdges.setChecked(True)
- self._includeEdgesAndWires()
+ self._includeEdgesAndWires()
+ else:
+ self.form.extensionEdit.setDisabled(True)
self.setExtensions(self.extensions)
def updateQuantitySpinBoxes(self, index=None):
@@ -331,7 +320,6 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
# PathLog.debug("createItemForBaseModel() label: {}, sub: {}, {}, edgeCnt: {}, subEdges: {}".format(base.Label, sub, '+', len(edges), len(base.Shape.getElement(sub).Edges)))
extendCorners = self.form.extendCorners.isChecked()
- includeEdges = self.form.includeEdges.isChecked()
subShape = base.Shape.getElement(sub)
def createSubItem(label, ext0):
@@ -356,24 +344,23 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
item.setSelectable(False)
extensionEdges = {}
- if includeEdges:
- if self.useOutline == 1 and sub.startswith("Face"):
- # Only show exterior extensions if `Use Outline` is True
- subEdges = subShape.Wires[0].Edges
- else:
- # Show all exterior and interior extensions if `Use Outline` is False
- subEdges = subShape.Edges
+ if self.useOutline == 1 and sub.startswith("Face"):
+ # Only show exterior extensions if `Use Outline` is True
+ subEdges = subShape.Wires[0].Edges
+ else:
+ # Show all exterior and interior extensions if `Use Outline` is False
+ subEdges = subShape.Edges
- for edge in subEdges:
- for (e, label) in edges:
- if edge.isSame(e):
- ext1 = self._cachedExtension(self.obj, base, sub, label)
- if ext1.isValid():
- extensionEdges[e] = label[4:] # isolate edge number
- if not extendCorners:
- createSubItem(label, ext1)
+ for edge in subEdges:
+ for (e, label) in edges:
+ if edge.isSame(e):
+ ext1 = self._cachedExtension(self.obj, base, sub, label)
+ if ext1.isValid():
+ extensionEdges[e] = label[4:] # isolate edge number
+ if not extendCorners:
+ createSubItem(label, ext1)
- if extendCorners and includeEdges:
+ if extendCorners:
def edgesMatchShape(e0, e1):
flipped = PathGeom.flipEdge(e1)
@@ -414,23 +401,6 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
ext2 = self._cachedExtension(self.obj, base, sub, label)
createSubItem(label, ext2)
- # Only add these subItems for horizontally oriented faces, not edges or vertical faces (from vertical face loops)
- if sub.startswith("Face") and PathGeom.isHorizontal(subShape):
- # Add entry to extend outline of face
- label = "Extend_" + sub
- ext3 = self._cachedExtension(self.obj, base, sub, label)
- createSubItem(label, ext3)
-
- # Add entry for waterline at face
- label = "Waterline_" + sub
- ext4 = self._cachedExtension(self.obj, base, sub, label)
- createSubItem(label, ext4)
-
- # Add entry for avoid face
- label = "Avoid_" + sub
- ext5 = self._cachedExtension(self.obj, base, sub, label)
- createSubItem(label, ext5)
-
return item
def setExtensions(self, extensions):
@@ -654,7 +624,6 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
signals = []
signals.append(self.form.defaultLength.editingFinished)
signals.append(self.form.enableExtensions.toggled)
- signals.append(self.form.includeEdges.toggled)
return signals
def registerSignalHandlers(self, obj):
@@ -665,7 +634,6 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
self.form.buttonEnable.clicked.connect(self.extensionsEnable)
self.form.defaultLength.editingFinished.connect(self.updateQuantitySpinBoxes)
self.form.enableExtensions.toggled.connect(self._enableExtensions)
- self.form.includeEdges.toggled.connect(self._includeEdgesAndWires)
self.model.itemChanged.connect(self.updateItemEnabled)
@@ -716,46 +684,10 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
The return value is a simple boolean to communicate whether or not Extensions
are be enabled.
"""
- enabled = True
+ enabled = False
- if self.initialEdgeCount < 1:
- self.initialEdgeCount = 0
- for base in self.obj.Base:
- for sub in sorted(base[1]):
- self.initialEdgeCount += len(base[0].Shape.getElement(sub).Edges)
- if self.initialEdgeCount > self.edgeCountThreshold:
- # Block signals
- self.form.enableExtensions.blockSignals(True)
- self.form.enableExtensionsWarning.blockSignals(True)
- self.form.includeEdges.blockSignals(True)
-
- # Make changes to form
- msg = translate(
- "PathPocketShape",
- "Edge count greater than threshold of"
- + " "
- + str(self.edgeCountThreshold)
- + ": "
- + str(self.initialEdgeCount),
- )
- self.form.enableExtensionsWarning.setText(msg)
- self.form.enableExtensions.setChecked(False)
- self.form.enableExtensionsWarning.show()
- msg = translate("PathFeatureExtensions", "Click to enable Extensions")
- self.form.enableExtensions.setText(msg)
- self.form.extensionEdit.setDisabled(True)
- self.form.includeEdges.setChecked(False)
- msg = translate("PathFeatureExtensions", "Click to include Edges/Wires")
- self.form.includeEdges.setText(msg)
-
- # Unblock signals
- self.form.enableExtensions.blockSignals(False)
- self.form.enableExtensionsWarning.blockSignals(False)
- self.form.includeEdges.blockSignals(False)
-
- enabled = False
- elif not self.form.enableExtensions.isChecked():
- enabled = False
+ if self.form.enableExtensions.isChecked():
+ enabled = True
PathLog.debug("_autoEnableExtensions() is {}".format(enabled))
self.enabled = enabled
@@ -771,15 +703,10 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
if self.form.enableExtensions.isChecked():
self.enabled = True
self.extensionsReady = False
- msg = translate("PathFeatureExtensions", "Extensions enabled")
- self.form.enableExtensions.setText(msg)
- self.form.enableExtensionsWarning.hide()
self.form.extensionEdit.setEnabled(True)
self.extensions = FeatureExtensions.getExtensions(self.obj)
self.setExtensions(self.extensions)
else:
- msg = translate("PathFeatureExtensions", "Click to enable Extensions")
- self.form.enableExtensions.setText(msg)
self.form.extensionEdit.setDisabled(True)
self.enabled = False
@@ -790,12 +717,6 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
"""
self._getUseOutlineState() # Find `useOutline` checkbox and get its boolean value
PathLog.debug("_includeEdgesAndWires()")
- if self.form.includeEdges.isChecked():
- msg = translate("PathFeatureExtensions", "Including Edges/Wires")
- self.form.includeEdges.setText(msg)
- else:
- msg = translate("PathFeatureExtensions", "Click to include Edges/Wires")
- self.form.includeEdges.setText(msg)
self.extensionsReady = False
self._enableExtensions()
@@ -822,10 +743,6 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
def _resetCachedExtensions(self):
PathLog.debug("_resetCachedExtensions()")
reset = dict()
- # Keep waterline extensions as they will not change
- for k in self.extensionsCache.keys():
- if k.startswith("Waterline"):
- reset[k] = self.extensionsCache[k]
self.extensionsCache = reset
self.extensionsReady = False