From b6df2852e750210752c74a469e1bfaefda5e5fc4 Mon Sep 17 00:00:00 2001 From: Aurore LAFAURIE Date: Tue, 20 Aug 2024 11:52:34 +0200 Subject: [PATCH] [ui] Recompute and Re-submit not allowed with Compatibility Nodes Renaming of canCompute to canComputeTopologically to understand the static aspect of the function --- meshroom/core/graph.py | 6 ++++-- meshroom/core/taskManager.py | 4 ++-- meshroom/ui/qml/GraphEditor/GraphEditor.qml | 22 ++++++++++++++------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/meshroom/core/graph.py b/meshroom/core/graph.py index b5a5c36e5d..e278ae33e9 100644 --- a/meshroom/core/graph.py +++ b/meshroom/core/graph.py @@ -1132,9 +1132,10 @@ def finishEdge(edge, graph): return nodes, edges @Slot(Node, result=bool) - def canCompute(self, node): + def canComputeTopologically(self, node): """ Return the computability of a node based on itself and its dependency chain. + It is a static result as it depends on the graph topology. Computation can't happen for: - CompatibilityNodes - nodes having a non-computed CompatibilityNode in its dependency chain @@ -1200,7 +1201,7 @@ def finishEdge(edge, graph): self.dfs(visitor=visitor, startNodes=leaves) # update graph computability status - canComputeLeaves = all([self.canCompute(node) for node in leaves]) + canComputeLeaves = all([self.canComputeTopologically(node) for node in leaves]) if self._canComputeLeaves != canComputeLeaves: self._canComputeLeaves = canComputeLeaves self.canComputeLeavesChanged.emit() @@ -1290,6 +1291,7 @@ def getOutputNodes(self, node, recursive, dependenciesOnly): def canSubmitOrCompute(self, startNode): """ Check if a node can be submitted/computed. + It does not depend on the topology of the graph and is based on the node status and its dependencies. Returns: int: 0 = cannot be submitted or computed / diff --git a/meshroom/core/taskManager.py b/meshroom/core/taskManager.py index 901cee3745..b1d225a6c1 100644 --- a/meshroom/core/taskManager.py +++ b/meshroom/core/taskManager.py @@ -341,12 +341,12 @@ def checkNodesDependencies(self, graph, toNodes, context): if not node.isComputable: inputNodes.append(node) elif context == "COMPUTATION": - if graph.canCompute(node) and graph.canSubmitOrCompute(node) % 2 == 1: + if graph.canComputeTopologically(node) and graph.canSubmitOrCompute(node) % 2 == 1: ready.append(node) elif node.isComputed: computed.append(node) elif context == "SUBMITTING": - if graph.canCompute(node) and graph.canSubmitOrCompute(node) > 1: + if graph.canComputeTopologically(node) and graph.canSubmitOrCompute(node) > 1: ready.append(node) elif node.isComputed: computed.append(node) diff --git a/meshroom/ui/qml/GraphEditor/GraphEditor.qml b/meshroom/ui/qml/GraphEditor/GraphEditor.qml index a718eddce3..3f400da525 100755 --- a/meshroom/ui/qml/GraphEditor/GraphEditor.qml +++ b/meshroom/ui/qml/GraphEditor/GraphEditor.qml @@ -555,7 +555,7 @@ Item { Menu { id: nodeMenu property var currentNode: null - property bool canComputeNode: currentNode != null && uigraph.graph.canCompute(currentNode) + property bool canComputeNode: currentNode != null && uigraph.graph.canComputeTopologically(currentNode) //canSubmitOrCompute: return int n : 0 >= n <= 3 | n=0 cannot submit or compute | n=1 can compute | n=2 can submit | n=3 can compute & submit property int canSubmitOrCompute: currentNode != null && uigraph.graph.canSubmitOrCompute(currentNode) property bool isComputed: { @@ -584,11 +584,15 @@ Item { enabled: { var canCompute = false for (var i = 0; i < uigraph.selectedNodes.count; ++i) { - if (uigraph.graph.canCompute(uigraph.selectedNodes.at(i)) && uigraph.graph.canSubmitOrCompute(uigraph.selectedNodes.at(i)) % 2 == 1) { - canCompute = true + if (uigraph.graph.canComputeTopologically(uigraph.selectedNodes.at(i))) { + if (nodeMenu.isComputed) { + canCompute = true + } else if (uigraph.graph.canSubmitOrCompute(uigraph.selectedNodes.at(i)) % 2 == 1) { + canCompute = true + } } } - return canCompute || nodeMenu.isComputed //canSubmit if canSubmitOrCompute == 1(can compute) or 3(can compute & submit) + return canCompute //canSubmit if canSubmitOrCompute == 1(can compute) or 3(can compute & submit) } @@ -617,11 +621,15 @@ Item { enabled: { var canSubmit = false for (var i = 0; i < uigraph.selectedNodes.count; ++i) { - if (uigraph.graph.canCompute(uigraph.selectedNodes.at(i)) && uigraph.graph.canSubmitOrCompute(uigraph.selectedNodes.at(i)) > 1) { - canSubmit = true + if (uigraph.graph.canComputeTopologically(uigraph.selectedNodes.at(i))) { + if (nodeMenu.isComputed) { + canSubmit = true + } else if (uigraph.graph.canSubmitOrCompute(uigraph.selectedNodes.at(i)) > 1) { + canSubmit = true + } } } - return canSubmit || nodeMenu.isComputed + return canSubmit } onTriggered: { if (nodeMenu.isComputed) {