mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-08-04 09:18:27 +02:00
[ui] new concept of pickedViewId to scroll in 2D viewer without constantly updating selectedViewId
This commit is contained in:
parent
f1de96127d
commit
4c58d4b93f
3 changed files with 31 additions and 4 deletions
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -179,6 +192,10 @@ FloatingPane {
|
|||
m.frame = value;
|
||||
}
|
||||
|
||||
onPressedChanged: {
|
||||
m.syncSelected = !pressed;
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: m
|
||||
onFrameChanged: {
|
||||
|
|
|
@ -201,7 +201,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;
|
||||
|
|
|
@ -441,6 +441,7 @@ class Reconstruction(UIGraph):
|
|||
self._solvedIntrinsics = None
|
||||
self._selectedViewId = None
|
||||
self._selectedViewpoint = None
|
||||
self._pickedViewId = None
|
||||
self._liveSfmManager = LiveSfmManager(self)
|
||||
|
||||
self._workerThreads = ThreadPool(processes=1)
|
||||
|
@ -1067,6 +1068,7 @@ class Reconstruction(UIGraph):
|
|||
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)
|
||||
|
@ -1079,6 +1081,12 @@ class Reconstruction(UIGraph):
|
|||
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()
|
||||
|
@ -1124,6 +1132,8 @@ class Reconstruction(UIGraph):
|
|||
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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue