Skip to content

Commit

Permalink
[ui] new concept of pickedViewId to scroll in 2D viewer without const…
Browse files Browse the repository at this point in the history
…antly updating selectedViewId
  • Loading branch information
mugulmd committed Apr 24, 2023
1 parent 1f5737f commit e8cc706
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 4 deletions.
23 changes: 20 additions & 3 deletions meshroom/ui/qml/Viewer/SequencePlayer.qml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,16 @@ FloatingPane {
return viewIds;
}

function updateReconstructionView() {
if (_reconstruction && m.frame >= 0 && m.frame < m.sortedViewIds.length) {
if (m.syncSelected) {
_reconstruction.selectedViewId = m.sortedViewIds[m.frame];
} else {
_reconstruction.pickedViewId = m.sortedViewIds[m.frame];
}
}
}

// Sequence player model:
// - ordered set of viewpoints
// - current frame
Expand All @@ -50,14 +60,17 @@ FloatingPane {
property var viewpoints: currentCameraInit ? currentCameraInit.attribute('viewpoints').value : undefined
property var sortedViewIds: viewpoints ? sequence(viewpoints) : []
property int frame: 0
property bool syncSelected: true
property bool playing: false
property bool repeat: false
property real fps: 1

onFrameChanged: {
if (_reconstruction && frame >= 0 && frame < sortedViewIds.length) {
_reconstruction.selectedViewId = sortedViewIds[frame];
}
updateReconstructionView();
}

onSyncSelectedChanged: {
updateReconstructionView();
}
}

Expand Down Expand Up @@ -179,6 +192,10 @@ FloatingPane {
m.frame = value;
}

onPressedChanged: {
m.syncSelected = !pressed;
}

Connections {
target: m
onFrameChanged: {
Expand Down
2 changes: 1 addition & 1 deletion meshroom/ui/qml/Viewer/Viewer2D.qml
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ FocusScope {
return sourceExternal;
}
if (_reconstruction && (!displayedNode || outputAttribute.name == "gallery")) {
return Filepath.stringToUrl(getViewpointAttribute("path",_reconstruction.selectedViewId));
return Filepath.stringToUrl(getViewpointAttribute("path",_reconstruction.pickedViewId));
}

var viewId = -1;
Expand Down
10 changes: 10 additions & 0 deletions meshroom/ui/reconstruction.py
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,7 @@ def __init__(self, undoStack, taskManager, defaultPipeline='', parent=None):
self._solvedIntrinsics = None
self._selectedViewId = None
self._selectedViewpoint = None
self._pickedViewId = None
self._liveSfmManager = LiveSfmManager(self)

self._workerThreads = ThreadPool(processes=1)
Expand Down Expand Up @@ -1063,6 +1064,7 @@ def setSelectedViewId(self, viewId):
if viewId == self._selectedViewId:
return
self._selectedViewId = viewId
self.setPickedViewId(viewId)
vp = None
if self.viewpoints:
vp = next((v for v in self.viewpoints if str(v.viewId.value) == self._selectedViewId), None)
Expand All @@ -1075,6 +1077,12 @@ def _setSelectedViewpoint(self, viewpointAttribute):
self._selectedViewpoint.deleteLater()
self._selectedViewpoint = ViewpointWrapper(viewpointAttribute, self) if viewpointAttribute else None

def setPickedViewId(self, viewId):
if viewId == self._pickedViewId:
return
self._pickedViewId = viewId
self.pickedViewIdChanged.emit()

def reconstructedCamerasCount(self):
""" Get the number of reconstructed cameras in the current context. """
viewpoints = self.getViewpoints()
Expand Down Expand Up @@ -1120,6 +1128,8 @@ def getPoseRT(self, viewpoint):
selectedViewIdChanged = Signal()
selectedViewId = Property(str, lambda self: self._selectedViewId, setSelectedViewId, notify=selectedViewIdChanged)
selectedViewpoint = Property(ViewpointWrapper, lambda self: self._selectedViewpoint, notify=selectedViewIdChanged)
pickedViewIdChanged = Signal()
pickedViewId = Property(str, lambda self: self._pickedViewId, setPickedViewId, notify=pickedViewIdChanged)

sfmChanged = Signal()
sfm = Property(QObject, getSfm, setSfm, notify=sfmChanged)
Expand Down

0 comments on commit e8cc706

Please sign in to comment.