mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-29 10:17:27 +02:00
251 lines
7.3 KiB
QML
251 lines
7.3 KiB
QML
import QtCharts
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Layouts
|
|
|
|
import AliceVision 1.0 as AliceVision
|
|
import Charts 1.0
|
|
import Controls 1.0
|
|
import Utils 1.0
|
|
|
|
|
|
FloatingPane {
|
|
id: root
|
|
|
|
property var msfmData: null
|
|
property int viewId
|
|
property color textColor: Colors.sysPalette.text
|
|
|
|
visible: (_reconstruction.sfm && _reconstruction.sfm.isComputed) ? root.visible : false
|
|
clip: true
|
|
padding: 4
|
|
|
|
// To avoid interaction with components in background
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
|
|
onPressed: {}
|
|
onReleased: {}
|
|
onWheel: {}
|
|
}
|
|
|
|
InteractiveChartView {
|
|
id: residualChart
|
|
width: parent.width * 0.5
|
|
height: parent.height * 0.5
|
|
|
|
title: "Reprojection Errors"
|
|
legend.visible: false
|
|
antialiasing: true
|
|
|
|
ValueAxis {
|
|
id: residualValueAxisX
|
|
titleText: "Reprojection Error"
|
|
min: 0.0
|
|
max: viewStat.residualMaxAxisX
|
|
}
|
|
ValueAxis {
|
|
id: residualValueAxisY
|
|
labelFormat: "%i"
|
|
titleText: "Number of Points"
|
|
min: 0
|
|
max: viewStat.residualMaxAxisY
|
|
}
|
|
LineSeries {
|
|
id: residualFullLineSerie
|
|
axisX: residualValueAxisX
|
|
axisY: residualValueAxisY
|
|
name: "Average on All Cameras"
|
|
}
|
|
LineSeries {
|
|
id: residualViewLineSerie
|
|
axisX: residualValueAxisX
|
|
axisY: residualValueAxisY
|
|
name: "Current"
|
|
}
|
|
}
|
|
|
|
Item {
|
|
id: residualBtnContainer
|
|
|
|
Layout.fillWidth: true
|
|
anchors.bottom: residualChart.bottom
|
|
anchors.bottomMargin: 35
|
|
anchors.left: residualChart.left
|
|
anchors.leftMargin: residualChart.width * 0.15
|
|
|
|
RowLayout {
|
|
|
|
ChartViewCheckBox {
|
|
id: allResiduals
|
|
text: "ALL"
|
|
color: textColor
|
|
checkState: residualLegend.buttonGroup.checkState
|
|
onClicked: {
|
|
var _checked = checked;
|
|
for (var i = 0; i < residualChart.count; ++i) {
|
|
residualChart.series(i).visible = _checked
|
|
}
|
|
}
|
|
}
|
|
|
|
ChartViewLegend {
|
|
id: residualLegend
|
|
chartView: residualChart
|
|
}
|
|
}
|
|
}
|
|
|
|
InteractiveChartView {
|
|
id: observationsLengthsChart
|
|
width: parent.width * 0.5
|
|
height: parent.height * 0.5
|
|
anchors.top: parent.top
|
|
anchors.topMargin: (parent.height) * 0.5
|
|
|
|
legend.visible: false
|
|
title: "Observations Lengths"
|
|
|
|
ValueAxis {
|
|
id: observationsLengthsvalueAxisX
|
|
labelFormat: "%i"
|
|
titleText: "Observations Length"
|
|
min: 2
|
|
max: viewStat.observationsLengthsMaxAxisX
|
|
tickAnchor: 2
|
|
tickInterval: 1
|
|
tickCount: 5
|
|
}
|
|
ValueAxis {
|
|
id: observationsLengthsvalueAxisY
|
|
labelFormat: "%i"
|
|
titleText: "Number of Points"
|
|
min: 0
|
|
max: viewStat.observationsLengthsMaxAxisY
|
|
}
|
|
LineSeries {
|
|
id: observationsLengthsFullLineSerie
|
|
axisX: observationsLengthsvalueAxisX
|
|
axisY: observationsLengthsvalueAxisY
|
|
name: "All Cameras"
|
|
}
|
|
LineSeries {
|
|
id: observationsLengthsViewLineSerie
|
|
axisX: observationsLengthsvalueAxisX
|
|
axisY: observationsLengthsvalueAxisY
|
|
name: "Current"
|
|
}
|
|
}
|
|
|
|
Item {
|
|
id: observationsLengthsBtnContainer
|
|
|
|
Layout.fillWidth: true
|
|
anchors.bottom: observationsLengthsChart.bottom
|
|
anchors.bottomMargin: 35
|
|
anchors.left: observationsLengthsChart.left
|
|
anchors.leftMargin: observationsLengthsChart.width * 0.25
|
|
|
|
RowLayout {
|
|
ChartViewCheckBox {
|
|
id: allObservations
|
|
text: "ALL"
|
|
color: textColor
|
|
checkState: observationsLengthsLegend.buttonGroup.checkState
|
|
onClicked: {
|
|
var _checked = checked;
|
|
for (var i = 0; i < observationsLengthsChart.count; ++i) {
|
|
observationsLengthsChart.series(i).visible = _checked
|
|
}
|
|
}
|
|
}
|
|
|
|
ChartViewLegend {
|
|
id: observationsLengthsLegend
|
|
chartView: observationsLengthsChart
|
|
}
|
|
}
|
|
}
|
|
|
|
InteractiveChartView {
|
|
id: observationsScaleChart
|
|
width: parent.width * 0.5
|
|
height: parent.height * 0.5
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: (parent.width) * 0.5
|
|
anchors.top: parent.top
|
|
|
|
legend.visible: false
|
|
title: "Observations Scale"
|
|
|
|
ValueAxis {
|
|
id: observationsScaleValueAxisX
|
|
titleText: "Scale"
|
|
min: 0
|
|
max: viewStat.observationsScaleMaxAxisX
|
|
}
|
|
ValueAxis {
|
|
id: observationsScaleValueAxisY
|
|
titleText: "Number of Points"
|
|
min: 0
|
|
max: viewStat.observationsScaleMaxAxisY
|
|
}
|
|
LineSeries {
|
|
id: observationsScaleFullLineSerie
|
|
axisX: observationsScaleValueAxisX
|
|
axisY: observationsScaleValueAxisY
|
|
name: " Average on All Cameras"
|
|
}
|
|
LineSeries {
|
|
id: observationsScaleViewLineSerie
|
|
axisX: observationsScaleValueAxisX
|
|
axisY: observationsScaleValueAxisY
|
|
name: "Current"
|
|
}
|
|
}
|
|
|
|
Item {
|
|
id: observationsScaleBtnContainer
|
|
|
|
Layout.fillWidth: true
|
|
anchors.bottom: observationsScaleChart.bottom
|
|
anchors.bottomMargin: 35
|
|
anchors.left: observationsScaleChart.left
|
|
anchors.leftMargin: observationsScaleChart.width * 0.15
|
|
|
|
RowLayout {
|
|
ChartViewCheckBox {
|
|
id: allObservationsScales
|
|
text: "ALL"
|
|
color: textColor
|
|
checkState: observationsScaleLegend.buttonGroup.checkState
|
|
onClicked: {
|
|
var _checked = checked;
|
|
for (var i = 0; i < observationsScaleChart.count; ++i) {
|
|
observationsScaleChart.series(i).visible = _checked
|
|
}
|
|
}
|
|
}
|
|
|
|
ChartViewLegend {
|
|
id: observationsScaleLegend
|
|
chartView: observationsScaleChart
|
|
}
|
|
}
|
|
}
|
|
|
|
// Stats from a view the sfmData
|
|
AliceVision.MViewStats {
|
|
id: viewStat
|
|
msfmData: (root.visible && root.msfmData && root.msfmData.status === AliceVision.MSfMData.Ready) ? root.msfmData : null
|
|
viewId: root.viewId
|
|
onViewStatsChanged: {
|
|
fillResidualFullSerie(residualFullLineSerie)
|
|
fillResidualViewSerie(residualViewLineSerie)
|
|
fillObservationsLengthsFullSerie(observationsLengthsFullLineSerie)
|
|
fillObservationsLengthsViewSerie(observationsLengthsViewLineSerie)
|
|
fillObservationsScaleFullSerie(observationsScaleFullLineSerie)
|
|
fillObservationsScaleViewSerie(observationsScaleViewLineSerie)
|
|
}
|
|
}
|
|
}
|