diff --git a/meshroom/ui/components/csvData.py b/meshroom/ui/components/csvData.py index 6d00a42cd5b..93b12315288 100644 --- a/meshroom/ui/components/csvData.py +++ b/meshroom/ui/components/csvData.py @@ -23,6 +23,10 @@ def getColumn(self, index): def getFilepath(self): return self._filepath + @Slot(result=int) + def getNbColumns(self): + return len(self._data) if self._ready else 0 + def setFilepath(self, filepath): if self._filepath == filepath: return @@ -41,8 +45,9 @@ def updateData(self): self._data.clear() newColumns = self.read() if newColumns: + if len(newColumns) >= 4: self._data.setObjectList(newColumns) - self.setReady(True) + self.setReady(True) def read(self): """Read the CSV file and return a list containing CsvColumn objects.""" @@ -73,7 +78,8 @@ def read(self): filepath = Property(str, getFilepath, setFilepath, notify=filepathChanged) readyChanged = Signal() ready = Property(bool, lambda self: self._ready, notify=readyChanged) - data = Property(QObject, lambda self: self._data, constant=True) + data = Property(QObject, lambda self: self._data, notify=readyChanged) + nbColumns = Property(int, getNbColumns, notify=readyChanged) class CsvColumn(QObject): diff --git a/meshroom/ui/qml/Viewer/CameraResponseGraph.qml b/meshroom/ui/qml/Viewer/CameraResponseGraph.qml index f149b839150..8a50b6c3d2f 100644 --- a/meshroom/ui/qml/Viewer/CameraResponseGraph.qml +++ b/meshroom/ui/qml/Viewer/CameraResponseGraph.qml @@ -34,7 +34,24 @@ FloatingPane { onWheel: {} } - property bool ready: csvData.ready + property bool crfReady: csvData.ready + onCrfReadyChanged: { + if(crfReady) + { + redCurve.clear() + greenCurve.clear() + blueCurve.clear() + csvData.getColumn(1).fillChartSerie(redCurve) + csvData.getColumn(2).fillChartSerie(greenCurve) + csvData.getColumn(3).fillChartSerie(blueCurve) + } + else + { + redCurve.clear() + greenCurve.clear() + blueCurve.clear() + } + } Item { anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter @@ -54,8 +71,8 @@ FloatingPane { id: valueAxisX labelFormat: "%i" titleText: "Camera Brightness" - min: ready ? csvData.getColumn(0).getFirst() : 0 - max: ready ? csvData.getColumn(0).getLast() : 1 + min: csvData.ready ? csvData.getColumn(0).getFirst() : 0 + max: csvData.ready ? csvData.getColumn(0).getLast() : 1 } ValueAxis { id: valueAxisY @@ -67,30 +84,27 @@ FloatingPane { // We cannot use a Repeater with these Components so we need to instantiate them one by one // Red curve LineSeries { + id: redCurve axisX: valueAxisX axisY: valueAxisY - name: ready ? csvData.getColumn(1).title : "" + name: csvData.ready ? csvData.getColumn(1).title : "" color: name.toLowerCase() - - Component.onCompleted: if(ready) csvData.getColumn(1).fillChartSerie(this) } // Green curve LineSeries { + id: greenCurve axisX: valueAxisX axisY: valueAxisY - name: ready ? csvData.getColumn(2).title : "" + name: csvData.ready ? csvData.getColumn(2).title : "" color: name.toLowerCase() - - Component.onCompleted: if(ready) csvData.getColumn(2).fillChartSerie(this) } // Blue curve LineSeries { + id: blueCurve axisX: valueAxisX axisY: valueAxisY - name: ready ? csvData.getColumn(3).title : "" + name: csvData.ready ? csvData.getColumn(3).title : "" color: name.toLowerCase() - - Component.onCompleted: if(ready) csvData.getColumn(3).fillChartSerie(this) } }