diff --git a/meshroom/ui/graph.py b/meshroom/ui/graph.py index d108030b..3724a31b 100644 --- a/meshroom/ui/graph.py +++ b/meshroom/ui/graph.py @@ -816,6 +816,30 @@ class UIGraph(QObject): def removeAttribute(self, attribute): self.push(commands.ListAttributeRemoveCommand(self._graph, attribute)) + @Slot(Attribute) + def removeImage(self, image): + with self.groupedGraphModification("Remove Image"): + # look if the viewpoint's intrinsic is used by another viewpoint + # if not, remove it + intrinsicId = image.intrinsicId.value + + intrinsicUsed = False + for intrinsic in self.cameraInit.attribute("viewpoints").getExportValue(): + if image.getExportValue() != intrinsic and intrinsic['intrinsicId'] == intrinsicId: + intrinsicUsed = True + break + + if not intrinsicUsed: + #find the intrinsic and remove it + for x in range(len(self.cameraInit.attribute("intrinsics"))): + intrinsic = self.cameraInit.attribute("intrinsics").at(x) + if intrinsic.getExportValue()["intrinsicId"] == intrinsicId: + self.removeAttribute(intrinsic) + break + + # After every check we finally remove the attribute + self.removeAttribute(image) + @Slot() def removeAllImages(self): with self.groupedGraphModification("Remove All Images"): diff --git a/meshroom/ui/qml/ImageGallery/ImageGallery.qml b/meshroom/ui/qml/ImageGallery/ImageGallery.qml index c7cfdaed..b85eaebb 100644 --- a/meshroom/ui/qml/ImageGallery/ImageGallery.qml +++ b/meshroom/ui/qml/ImageGallery/ImageGallery.qml @@ -291,30 +291,14 @@ Panel { } function sendRemoveRequest() { - if (!readOnly) { - // look if the viewpoint's intrinsic is used by another viewpoint - var intrinsicId = object.value.get('intrinsicId').value - var intrinsicUsed = false - for (var i = 0; i < m.viewpoints.count; ++i) { - if (m.viewpoints.at(i) != object && m.viewpoints.at(i).value.get("intrinsicId").value === intrinsicId) { - intrinsicUsed = true - break - } - } - if (!intrinsicUsed) { - //find the intrinsic and remove it - for (var i = 0; i < m.intrinsics.count; ++i) { - if (m.intrinsics.at(i).value.get("intrinsicId").value === intrinsicId) { - _reconstruction.removeAttribute(m.intrinsics.at(i)) - break - } - } - } - removeImageRequest(object) - // If the last image has been removed, make sure the viewpoints and intrinsics are reset - if (m.viewpoints.count === 0) - allViewpointsCleared() - } + if (readOnly) + return + + removeImageRequest(object) + + // If the last image has been removed, make sure the viewpoints and intrinsics are reset + if (m.viewpoints.count === 0) + allViewpointsCleared() } function removeAllImages() { diff --git a/meshroom/ui/qml/WorkspaceView.qml b/meshroom/ui/qml/WorkspaceView.qml index 9b8a632e..e70f95f1 100644 --- a/meshroom/ui/qml/WorkspaceView.qml +++ b/meshroom/ui/qml/WorkspaceView.qml @@ -78,7 +78,7 @@ Item { cameraInit: reconstruction ? reconstruction.cameraInit : null tempCameraInit: reconstruction ? reconstruction.tempCameraInit : null cameraInitIndex: reconstruction ? reconstruction.cameraInitIndex : -1 - onRemoveImageRequest: reconstruction.removeAttribute(attribute) + onRemoveImageRequest: reconstruction.removeImage(attribute) onAllViewpointsCleared: { reconstruction.removeAllImages(); reconstruction.selectedViewId = "-1" } onFilesDropped: { if (drop["meshroomScenes"].length == 1) {