Skip to content

Commit

Permalink
Merge pull request #1897 from alicevision/dev/improveClearImages
Browse files Browse the repository at this point in the history
[ui] Improve "Clear Images" action's behaviour and performance
  • Loading branch information
fabiencastan authored Mar 3, 2023
2 parents a7a81b5 + 43f439b commit ea323ed
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 21 deletions.
25 changes: 25 additions & 0 deletions meshroom/ui/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,31 @@ def undoImpl(self):
listAttribute.insert(self.index, self.value)


class ClearImagesCommand(GraphCommand):
def __init__(self, graph, cameraInitNodes, parent=None):
super(ClearImagesCommand, self).__init__(graph, parent)
self.cameraInits = cameraInitNodes
self.viewpoints = { cameraInit.name: cameraInit.attribute("viewpoints").getExportValue() for cameraInit in self.cameraInits }
self.intrinsics = { cameraInit.name: cameraInit.attribute("intrinsics").getExportValue() for cameraInit in self.cameraInits }
self.title = "Clear{}Images".format(" " if len(self.cameraInits) == 1 else " All ")
self.setText(self.title)

def redoImpl(self):
for i in range(len(self.cameraInits)):
# Reset viewpoints
self.cameraInits[i].viewpoints.resetValue()
self.cameraInits[i].viewpoints.valueChanged.emit()
# Reset intrinsics
self.cameraInits[i].intrinsics.resetValue()
self.cameraInits[i].intrinsics.valueChanged.emit()

def undoImpl(self):
for cameraInit in self.viewpoints:
with GraphModification(self.graph):
self.graph.node(cameraInit).viewpoints.value = self.viewpoints[cameraInit]
self.graph.node(cameraInit).intrinsics.value = self.intrinsics[cameraInit]


class MoveNodeCommand(GraphCommand):
""" Move a node to a given position. """
def __init__(self, graph, node, position, parent=None):
Expand Down
10 changes: 10 additions & 0 deletions meshroom/ui/graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -733,6 +733,16 @@ def appendAttribute(self, attribute, value=QJsonValue()):
def removeAttribute(self, attribute):
self.push(commands.ListAttributeRemoveCommand(self._graph, attribute))

@Slot()
def clearImages(self):
with self.groupedGraphModification("Clear Images"):
self.push(commands.ClearImagesCommand(self._graph, [self.cameraInit]))

@Slot()
def clearAllImages(self):
with self.groupedGraphModification("Clear All Images"):
self.push(commands.ClearImagesCommand(self._graph, list(self.cameraInits)))

@Slot(Node)
def appendSelection(self, node):
""" Append 'node' to the selection if it is not already part of the selection. """
Expand Down
52 changes: 31 additions & 21 deletions meshroom/ui/qml/main.qml
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,26 @@ ApplicationWindow {
uigraph: _reconstruction
}

Action {
id: clearImagesAction
property string tooltip: "Clear images for the current CameraInit group"
text: "Clear Images"
onTriggered: {
_reconstruction.clearImages()
_reconstruction.selectedViewId = "-1"
}
}

Action {
id: clearAllImagesAction
property string tooltip: "Clear all the images for all the CameraInit groups"
text: "Clear All Images"
onTriggered: {
_reconstruction.clearAllImages()
_reconstruction.selectedViewId = "-1"
}
}

Action {
id: undoAction

Expand Down Expand Up @@ -638,28 +658,12 @@ ApplicationWindow {
}
}

Action {
id: clearImagesAction
text: "Clear Images"
onTriggered: {
//Loop through all the camera inits
for(var i = 0 ; i < _reconstruction.cameraInits.count; i++){
var cameraInit = _reconstruction.cameraInits.at(i)

//Delete all viewpoints
var viewpoints = cameraInit.attribute('viewpoints')
for(var y = viewpoints.value.count - 1 ; y >= 0 ; y--){
_reconstruction.removeAttribute(viewpoints.value.at(y))
}

//Delete all intrinsics
var intrinsics = cameraInit.attribute('intrinsics')
for(var z = intrinsics.value.count - 1 ; z >= 0 ; z--){
_reconstruction.removeAttribute(intrinsics.value.at(z))
}
}
}
MenuItem {
action: clearImagesAction
ToolTip.visible: hovered
ToolTip.text: clearImagesAction.tooltip
}

MenuSeparator { }
Menu {
id: advancedMenu
Expand Down Expand Up @@ -692,6 +696,12 @@ ApplicationWindow {
importProjectDialog.open();
}
}

MenuItem {
action: clearAllImagesAction
ToolTip.visible: hovered
ToolTip.text: clearAllImagesAction.tooltip
}
}
MenuSeparator { }
Action {
Expand Down

0 comments on commit ea323ed

Please sign in to comment.