mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-29 10:17:27 +02:00
[reconstruction] small structural re-organization
* move LiveSfmManager.stepCreated to Reconstruction.sfmAugmented * add utility methods in Reconstruction to get all images/views used in the graph * ui: perform local auto-layout on sfm augmentation on created nodes
This commit is contained in:
parent
4f392a310b
commit
9f2dbc9639
4 changed files with 24 additions and 13 deletions
|
@ -223,6 +223,7 @@ class QObjectListModel(QtCore.QAbstractListModel):
|
||||||
"""
|
"""
|
||||||
return obj in self._objects
|
return obj in self._objects
|
||||||
|
|
||||||
|
@QtCore.Slot(QtCore.QObject, result=int)
|
||||||
def indexOf(self, matchObj, fromIndex=0, positive=True):
|
def indexOf(self, matchObj, fromIndex=0, positive=True):
|
||||||
""" Returns the index position of the first occurrence of object in
|
""" Returns the index position of the first occurrence of object in
|
||||||
the model, searching forward from index position from.
|
the model, searching forward from index position from.
|
||||||
|
|
|
@ -25,12 +25,6 @@ Panel {
|
||||||
padding: 2
|
padding: 2
|
||||||
clip: true
|
clip: true
|
||||||
|
|
||||||
Connections {
|
|
||||||
target: root.liveSfmManager
|
|
||||||
// Request graph auto-layout when an augmentation step is added for readability
|
|
||||||
onStepCreated: requestGraphAutoLayout()
|
|
||||||
}
|
|
||||||
|
|
||||||
Platform.FolderDialog {
|
Platform.FolderDialog {
|
||||||
id: selectFolderDialog
|
id: selectFolderDialog
|
||||||
title: "Live Reconstruction - Select Image Folder"
|
title: "Live Reconstruction - Select Image Folder"
|
||||||
|
|
|
@ -286,6 +286,17 @@ ApplicationWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: _reconstruction
|
||||||
|
// Request graph auto-layout when an augmentation step is added for readability
|
||||||
|
onSfmAugmented: graphEditor.doAutoLayout(_reconstruction.graph.nodes.indexOf(arguments[0]),
|
||||||
|
_reconstruction.graph.nodes.indexOf(arguments[1]),
|
||||||
|
0,
|
||||||
|
graphEditor.boundingBox().height + graphEditor.gridSpacing
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
Controls1.SplitView {
|
Controls1.SplitView {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
orientation: Qt.Vertical
|
orientation: Qt.Vertical
|
||||||
|
|
|
@ -59,7 +59,7 @@ class LiveSfmManager(QObject):
|
||||||
self._folder = folder
|
self._folder = folder
|
||||||
self.folderChanged.emit()
|
self.folderChanged.emit()
|
||||||
self.cameraInit = self.sfm = None
|
self.cameraInit = self.sfm = None
|
||||||
self.allImages = self.imagesInReconstruction()
|
self.allImages = self.reconstruction.allImagePaths()
|
||||||
self.minImagesPerStep = minImagesPerStep
|
self.minImagesPerStep = minImagesPerStep
|
||||||
self.setRunning(True)
|
self.setRunning(True)
|
||||||
self.update() # trigger initial update
|
self.update() # trigger initial update
|
||||||
|
@ -94,7 +94,6 @@ class LiveSfmManager(QObject):
|
||||||
self.reconstruction.beginModification("SfM Augmentation")
|
self.reconstruction.beginModification("SfM Augmentation")
|
||||||
# Add SfM augmentation step in the graph
|
# Add SfM augmentation step in the graph
|
||||||
self.cameraInit, self.sfm = self.reconstruction.addSfmAugmentation()
|
self.cameraInit, self.sfm = self.reconstruction.addSfmAugmentation()
|
||||||
self.stepCreated.emit()
|
|
||||||
self.addImageToStep(imagePath)
|
self.addImageToStep(imagePath)
|
||||||
|
|
||||||
# If we have enough images and the graph is not being computed, compute augmentation step
|
# If we have enough images and the graph is not being computed, compute augmentation step
|
||||||
|
@ -115,9 +114,6 @@ class LiveSfmManager(QObject):
|
||||||
""" Get images in the current augmentation step. """
|
""" Get images in the current augmentation step. """
|
||||||
return self.imagePathsInCameraInit(self.cameraInit) if self.cameraInit else []
|
return self.imagePathsInCameraInit(self.cameraInit) if self.cameraInit else []
|
||||||
|
|
||||||
def imagesInReconstruction(self):
|
|
||||||
""" Get all images in the reconstruction. """
|
|
||||||
return [vp.path.value for node in self.reconstruction.cameraInits for vp in node.viewpoints]
|
|
||||||
|
|
||||||
@Slot()
|
@Slot()
|
||||||
def computeStep(self):
|
def computeStep(self):
|
||||||
|
@ -137,7 +133,6 @@ class LiveSfmManager(QObject):
|
||||||
self.reconstruction.endModification()
|
self.reconstruction.endModification()
|
||||||
self.reconstruction.execute(sfm)
|
self.reconstruction.execute(sfm)
|
||||||
|
|
||||||
stepCreated = Signal()
|
|
||||||
runningChanged = Signal()
|
runningChanged = Signal()
|
||||||
running = Property(bool, lambda self: self._running, notify=runningChanged)
|
running = Property(bool, lambda self: self._running, notify=runningChanged)
|
||||||
folderChanged = Signal()
|
folderChanged = Signal()
|
||||||
|
@ -296,9 +291,17 @@ class Reconstruction(UIGraph):
|
||||||
|
|
||||||
# connect last SfM node to ImageMatchingMultiSfm
|
# connect last SfM node to ImageMatchingMultiSfm
|
||||||
self.addEdge(sfm.output, imageMatching.inputB)
|
self.addEdge(sfm.output, imageMatching.inputB)
|
||||||
|
self.sfmAugmented.emit(cameraInit, structureFromMotion)
|
||||||
return cameraInit, structureFromMotion
|
return cameraInit, structureFromMotion
|
||||||
|
|
||||||
|
def allImagePaths(self):
|
||||||
|
""" Get all image paths in the reconstruction. """
|
||||||
|
return [vp.path.value for node in self._cameraInits for vp in node.viewpoints]
|
||||||
|
|
||||||
|
def allViewIds(self):
|
||||||
|
""" Get all view Ids involved in the reconstruction. """
|
||||||
|
return [vp.viewId.value for node in self._cameraInits for vp in node.viewpoints]
|
||||||
|
|
||||||
@Slot(QObject, graph.Node)
|
@Slot(QObject, graph.Node)
|
||||||
def handleFilesDrop(self, drop, cameraInit):
|
def handleFilesDrop(self, drop, cameraInit):
|
||||||
""" Handle drop events aiming to add images to the Reconstruction.
|
""" Handle drop events aiming to add images to the Reconstruction.
|
||||||
|
@ -426,3 +429,5 @@ class Reconstruction(UIGraph):
|
||||||
sfmReportChanged = Signal()
|
sfmReportChanged = Signal()
|
||||||
# convenient property for QML binding re-evaluation when sfm report changes
|
# convenient property for QML binding re-evaluation when sfm report changes
|
||||||
sfmReport = Property(bool, lambda self: len(self._poses) > 0, notify=sfmReportChanged)
|
sfmReport = Property(bool, lambda self: len(self._poses) > 0, notify=sfmReportChanged)
|
||||||
|
sfmAugmented = Signal(graph.Node, graph.Node)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue