Path: Remove waterline, outline, and avoid extensions

This commit is contained in:
Russell Johnson
2022-02-17 22:48:51 -06:00
parent 44a0b5308f
commit 56f95bb4e8
2 changed files with 23 additions and 207 deletions

View File

@@ -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.

View File

@@ -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