Path: Remove waterline, outline, and avoid extensions
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user