Black - Job

Holding tag black

Feature extension black

Dressup boundary and dogbone black
This commit is contained in:
sliptonic
2022-01-24 14:16:14 -06:00
parent 3c8b65aee4
commit 946944e1de
11 changed files with 1593 additions and 608 deletions

View File

@@ -33,22 +33,26 @@ from pivy import coin
# lazily loaded modules
from lazy_loader.lazy_loader import LazyLoader
Part = LazyLoader('Part', globals(), 'Part')
Part = LazyLoader("Part", globals(), "Part")
__title__ = "Path Feature Extensions UI"
__author__ = "sliptonic (Brad Collette)"
__url__ = "https://www.freecadweb.org"
__doc__ = "Extensions feature page controller."
def translate(context, text, disambig=None):
return QtCore.QCoreApplication.translate(context, text, disambig)
PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule())
#PathLog.trackModule(PathLog.thisModule())
# PathLog.trackModule(PathLog.thisModule())
class _Extension(object):
ColourEnabled = (1.0, .5, 1.0)
ColourDisabled = (1.0, 1.0, .5)
ColourEnabled = (1.0, 0.5, 1.0)
ColourDisabled = (1.0, 1.0, 0.5)
TransparencySelected = 0.0
TransparencyDeselected = 0.7
@@ -152,7 +156,7 @@ class _Extension(object):
if self.switch:
self.switch.whichChild = coin.SO_SWITCH_NONE
def enable(self, ena = True):
def enable(self, ena=True):
if ena:
self.material.diffuseColor = self.ColourEnabled
else:
@@ -173,10 +177,10 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
DataSwitch = QtCore.Qt.ItemDataRole.UserRole + 2
Direction = {
FeatureExtensions.Extension.DirectionNormal: translate('PathPocket', 'Normal'),
FeatureExtensions.Extension.DirectionX: translate('PathPocket', 'X'),
FeatureExtensions.Extension.DirectionY: translate('PathPocket', 'Y')
}
FeatureExtensions.Extension.DirectionNormal: translate("PathPocket", "Normal"),
FeatureExtensions.Extension.DirectionX: translate("PathPocket", "X"),
FeatureExtensions.Extension.DirectionY: translate("PathPocket", "Y"),
}
def initPage(self, obj):
self.setTitle("Extensions")
@@ -193,17 +197,21 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
self.extensions = list()
self.defaultLength = PathGui.QuantitySpinBox(self.form.defaultLength, obj, 'ExtensionLengthDefault') # pylint: disable=attribute-defined-outside-init
self.defaultLength = PathGui.QuantitySpinBox(
self.form.defaultLength, obj, "ExtensionLengthDefault"
) # pylint: disable=attribute-defined-outside-init
self.form.extensionTree.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.form.extensionTree.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
self.switch = coin.SoSwitch() # pylint: disable=attribute-defined-outside-init
self.switch = coin.SoSwitch() # pylint: disable=attribute-defined-outside-init
self.obj.ViewObject.RootNode.addChild(self.switch)
self.switch.whichChild = coin.SO_SWITCH_ALL
self.model = QtGui.QStandardItemModel(self.form.extensionTree) # pylint: disable=attribute-defined-outside-init
self.model.setHorizontalHeaderLabels(['Base', 'Extension'])
self.model = QtGui.QStandardItemModel(
self.form.extensionTree
) # pylint: disable=attribute-defined-outside-init
self.model.setHorizontalHeaderLabels(["Base", "Extension"])
"""
# russ4262: This `if` block shows all available extensions upon edit of operation with any extension enabled.
@@ -216,7 +224,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
"""
self.form.showExtensions.setCheckState(QtCore.Qt.Unchecked)
self.blockUpdateData = False # pylint: disable=attribute-defined-outside-init
self.blockUpdateData = False # pylint: disable=attribute-defined-outside-init
def cleanupPage(self, obj):
try:
@@ -243,29 +251,33 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
def currentExtensions(self):
PathLog.debug("currentExtensions()")
extensions = []
def extractExtension(item, ext):
if ext and ext.edge and item.checkState() == QtCore.Qt.Checked:
extensions.append(ext.ext)
if self.form.enableExtensions.isChecked():
self.forAllItemsCall(extractExtension)
PathLog.track('extensions', extensions)
PathLog.track("extensions", extensions)
return extensions
def updateProxyExtensions(self, obj):
PathLog.debug("updateProxyExtensions()")
self.extensions = self.currentExtensions() # pylint: disable=attribute-defined-outside-init
self.extensions = (
self.currentExtensions()
) # pylint: disable=attribute-defined-outside-init
FeatureExtensions.setExtensions(obj, self.extensions)
def getFields(self, obj):
PathLog.track(obj.Label, self.model.rowCount(), self.model.columnCount())
self.blockUpdateData = True # pylint: disable=attribute-defined-outside-init
self.blockUpdateData = True # pylint: disable=attribute-defined-outside-init
if obj.ExtensionCorners != self.form.extendCorners.isChecked():
obj.ExtensionCorners = self.form.extendCorners.isChecked()
self.defaultLength.updateProperty()
self.updateProxyExtensions(obj)
self.blockUpdateData = False # pylint: disable=attribute-defined-outside-init
self.blockUpdateData = False # pylint: disable=attribute-defined-outside-init
def setFields(self, obj):
PathLog.track(obj.Label)
@@ -285,7 +297,9 @@ 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)
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"):
@@ -311,7 +325,9 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
self._enableExtensions() # Recalculate extensions
def createItemForBaseModel(self, base, sub, edges, extensions):
PathLog.track(base.Label, sub, '+', len(edges), len(base.Shape.getElement(sub).Edges))
PathLog.track(
base.Label, sub, "+", len(edges), len(base.Shape.getElement(sub).Edges)
)
# PathLog.debug("createItemForBaseModel() label: {}, sub: {}, {}, edgeCnt: {}, subEdges: {}".format(base.Label, sub, '+', len(edges), len(base.Shape.getElement(sub).Edges)))
extendCorners = self.form.extendCorners.isChecked()
@@ -341,7 +357,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
extensionEdges = {}
if includeEdges:
if self.useOutline == 1 and sub.startswith('Face'):
if self.useOutline == 1 and sub.startswith("Face"):
# Only show exterior extensions if `Use Outline` is True
subEdges = subShape.Wires[0].Edges
else:
@@ -358,26 +374,48 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
createSubItem(label, ext1)
if extendCorners and includeEdges:
def edgesMatchShape(e0, e1):
flipped = PathGeom.flipEdge(e1)
if flipped:
return PathGeom.edgesMatch(e0, e1) or PathGeom.edgesMatch(e0, flipped)
return PathGeom.edgesMatch(e0, e1) or PathGeom.edgesMatch(
e0, flipped
)
else:
return PathGeom.edgesMatch(e0, e1)
self.extensionEdges = extensionEdges
PathLog.debug("extensionEdges.values(): {}".format(extensionEdges.values()))
for edgeList in Part.sortEdges(list(extensionEdges.keys())): # Identify connected edges that form wires
for edgeList in Part.sortEdges(
list(extensionEdges.keys())
): # Identify connected edges that form wires
self.edgeList = edgeList
if len(edgeList) == 1:
label = "Edge%s" % [extensionEdges[keyEdge] for keyEdge in extensionEdges.keys() if edgesMatchShape(keyEdge, edgeList[0])][0]
label = (
"Edge%s"
% [
extensionEdges[keyEdge]
for keyEdge in extensionEdges.keys()
if edgesMatchShape(keyEdge, edgeList[0])
][0]
)
else:
label = "Wire(%s)" % ','.join(sorted([extensionEdges[keyEdge] for e in edgeList for keyEdge in extensionEdges.keys() if edgesMatchShape(e, keyEdge)], key=lambda s: int(s))) # pylint: disable=unnecessary-lambda
label = "Wire(%s)" % ",".join(
sorted(
[
extensionEdges[keyEdge]
for e in edgeList
for keyEdge in extensionEdges.keys()
if edgesMatchShape(e, keyEdge)
],
key=lambda s: int(s),
)
) # pylint: disable=unnecessary-lambda
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):
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)
@@ -406,8 +444,11 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
self.form.extensionTree.blockSignals(True)
# remember current visual state
if hasattr(self, 'selectionModel'):
selectedExtensions = [self.model.itemFromIndex(index).data(self.DataObject).ext for index in self.selectionModel.selectedIndexes()]
if hasattr(self, "selectionModel"):
selectedExtensions = [
self.model.itemFromIndex(index).data(self.DataObject).ext
for index in self.selectionModel.selectedIndexes()
]
else:
selectedExtensions = []
collapsedModels = []
@@ -420,7 +461,9 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
for featureRow in range(model.rowCount()):
feature = model.child(featureRow, 0)
if not self.form.extensionTree.isExpanded(feature.index()):
collapsedFeatures.append("%s.%s" % (modelName, feature.data(QtCore.Qt.EditRole)))
collapsedFeatures.append(
"%s.%s" % (modelName, feature.data(QtCore.Qt.EditRole))
)
# remove current extensions and all their visuals
def removeItemSwitch(item, ext):
@@ -428,6 +471,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
ext.hide()
if ext.root:
self.switch.removeChild(ext.root)
self.forAllItemsCall(removeItemSwitch)
self.model.clear()
@@ -435,14 +479,19 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
if self.enabled:
for base in self.obj.Base:
show = False
edges = [(edge, "Edge%d" % (i + 1)) for i, edge in enumerate(base[0].Shape.Edges)]
edges = [
(edge, "Edge%d" % (i + 1))
for i, edge in enumerate(base[0].Shape.Edges)
]
baseItem = QtGui.QStandardItem()
baseItem.setData(base[0].Label, QtCore.Qt.EditRole)
baseItem.setSelectable(False)
for sub in sorted(base[1]):
if sub.startswith('Face'):
if sub.startswith("Face"):
show = True
baseItem.appendRow(self.createItemForBaseModel(base[0], sub, edges, extensions))
baseItem.appendRow(
self.createItemForBaseModel(base[0], sub, edges, extensions)
)
if show:
self.model.appendRow(baseItem)
@@ -458,10 +507,10 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
self.form.extensionTree.setExpanded(model.index(), False)
for featureRow in range(model.rowCount()):
feature = model.child(featureRow, 0)
featureName = "%s.%s" % (modelName, feature.data(QtCore.Qt.EditRole))
featureName = "%s.%s" % (modelName, feature.data(QtCore.Qt.EditRole))
if featureName in collapsedFeatures:
self.form.extensionTree.setExpanded(feature.index(), False)
if hasattr(self, 'selectionModel') and selectedExtensions:
if hasattr(self, "selectionModel") and selectedExtensions:
self.restoreSelection(selectedExtensions)
self.form.extensionTree.blockSignals(False)
@@ -475,22 +524,22 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
if not self.blockUpdateData:
if self.fieldsSet:
if self.form.enableExtensions.isChecked():
if prop == 'ExtensionLengthDefault':
self.updateQuantitySpinBoxes()
elif prop == 'Base':
self.extensionsReady = False
self.setExtensions(FeatureExtensions.getExtensions(obj))
elif prop == 'UseOutline':
self._getUseOutlineState() # Find `useOutline` checkbox and get its boolean value
self._includeEdgesAndWires()
elif prop == 'Base':
if prop == "ExtensionLengthDefault":
self.updateQuantitySpinBoxes()
elif prop == "Base":
self.extensionsReady = False
self.setExtensions(FeatureExtensions.getExtensions(obj))
elif prop == "UseOutline":
self._getUseOutlineState() # Find `useOutline` checkbox and get its boolean value
self._includeEdgesAndWires()
elif prop == "Base":
self.extensionsReady = False
def restoreSelection(self, selection):
PathLog.debug("restoreSelection()")
PathLog.track()
if 0 == self.model.rowCount():
PathLog.track('-')
PathLog.track("-")
self.form.buttonClear.setEnabled(False)
self.form.buttonDisable.setEnabled(False)
self.form.buttonEnable.setEnabled(False)
@@ -515,7 +564,9 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
def setSelectionVisuals(item, ext):
if selectItem(item, ext):
self.selectionModel.select(item.index(), QtCore.QItemSelectionModel.Select)
self.selectionModel.select(
item.index(), QtCore.QItemSelectionModel.Select
)
selected = self.selectionModel.isSelected(item.index())
if selected:
@@ -528,6 +579,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
ext.show()
else:
ext.hide()
self.forAllItemsCall(setSelectionVisuals)
def selectionChanged(self):
@@ -536,6 +588,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
def extensionsClear(self):
PathLog.debug("extensionsClear()")
def disableItem(item, ext):
item.setCheckState(QtCore.Qt.Unchecked)
ext.disable()
@@ -572,16 +625,20 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
def showHideExtension(self):
if self.form.showExtensions.isChecked():
def enableExtensionEdit(item, ext):
# pylint: disable=unused-argument
ext.show()
self.forAllItemsCall(enableExtensionEdit)
else:
def disableExtensionEdit(item, ext):
if not self.selectionModel.isSelected(item.index()):
ext.hide()
self.forAllItemsCall(disableExtensionEdit)
#self.setDirty()
# self.setDirty()
def toggleExtensionCorners(self):
PathLog.debug("toggleExtensionCorners()")
@@ -612,7 +669,9 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
self.model.itemChanged.connect(self.updateItemEnabled)
self.selectionModel = self.form.extensionTree.selectionModel() # pylint: disable=attribute-defined-outside-init
self.selectionModel = (
self.form.extensionTree.selectionModel()
) # pylint: disable=attribute-defined-outside-init
self.selectionModel.selectionChanged.connect(self.selectionChanged)
self.selectionChanged()
@@ -626,12 +685,14 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
if self.useOutlineCheckbox:
self.useOutline = self.useOutlineCheckbox.isChecked()
if hasattr(self, 'parent'):
parent = getattr(self, 'parent')
if parent and hasattr(parent, 'featurePages'):
if hasattr(self, "parent"):
parent = getattr(self, "parent")
if parent and hasattr(parent, "featurePages"):
for page in parent.featurePages:
if hasattr(page, 'panelTitle'):
if page.panelTitle == 'Operation' and hasattr(page.form, 'useOutline'):
if hasattr(page, "panelTitle"):
if page.panelTitle == "Operation" and hasattr(
page.form, "useOutline"
):
PathLog.debug("Found useOutline checkbox")
self.useOutlineCheckbox = page.form.useOutline
if page.form.useOutline.isChecked():
@@ -669,10 +730,14 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
self.form.includeEdges.blockSignals(True)
# Make changes to form
msg = translate("PathPocketShape",
"Edge count greater than threshold of" + " " +
str(self.edgeCountThreshold) + ": " +
str(self.initialEdgeCount))
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()
@@ -763,6 +828,8 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
reset[k] = self.extensionsCache[k]
self.extensionsCache = reset
self.extensionsReady = False
# Eclass
FreeCAD.Console.PrintLog("Loading PathFeatureExtensionsGui... done\n")