feat/vtk-3d-view #7
|
|
@ -50,6 +50,7 @@ add_executable(geopro_desktop WIN32
|
|||
panels/chart/ContourPlotItem.cpp
|
||||
panels/chart/LivePanner.cpp
|
||||
panels/chart/ScatterHoverTip.cpp
|
||||
panels/columns/Column2DDataset.cpp
|
||||
panels/columns/Column3DDataset.cpp
|
||||
panels/AnomalyTablePanel.cpp
|
||||
panels/LoadingOverlay.cpp
|
||||
|
|
|
|||
|
|
@ -0,0 +1,89 @@
|
|||
#include "panels/columns/Column2DDataset.hpp"
|
||||
|
||||
#include <QComboBox>
|
||||
#include <QDoubleSpinBox>
|
||||
#include <QFormLayout>
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QTreeWidget>
|
||||
#include <QTreeWidgetItemIterator>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
#include "Theme.hpp"
|
||||
#include "panels/DatasetListPanel.hpp"
|
||||
|
||||
namespace geopro::app {
|
||||
|
||||
Column2DDataset::Column2DDataset(QWidget* parent) : QWidget(parent) {
|
||||
auto* root = new QVBoxLayout(this);
|
||||
root->setContentsMargins(space::kMd, space::kMd, space::kMd, space::kMd);
|
||||
root->setSpacing(space::kMd);
|
||||
|
||||
// 地图
|
||||
{
|
||||
auto* form = new QFormLayout();
|
||||
auto* basemap = new QComboBox();
|
||||
basemap->addItem(QStringLiteral("天地图"));
|
||||
basemap->addItem(QStringLiteral("Google Map"));
|
||||
basemap->addItem(QStringLiteral("隐藏"));
|
||||
connect(basemap, qOverload<int>(&QComboBox::currentIndexChanged), this,
|
||||
[this](int index) { emit basemapChanged(index); });
|
||||
form->addRow(QStringLiteral("底图源"), basemap);
|
||||
root->addWidget(new QLabel(QStringLiteral("地图")));
|
||||
root->addLayout(form);
|
||||
}
|
||||
|
||||
// 2D视图
|
||||
{
|
||||
auto* form = new QFormLayout();
|
||||
auto* view2d = new QComboBox();
|
||||
view2d->addItem(QStringLiteral("关闭"));
|
||||
view2d->addItem(QStringLiteral("Z=0"));
|
||||
view2d->addItem(QStringLiteral("顶部"));
|
||||
view2d->addItem(QStringLiteral("底部"));
|
||||
view2d->addItem(QStringLiteral("自定义"));
|
||||
view2d->setCurrentIndex(1);
|
||||
auto* zSpin = new QDoubleSpinBox();
|
||||
zSpin->setRange(-1000000, 1000000);
|
||||
zSpin->setSuffix(QStringLiteral(" m"));
|
||||
zSpin->setValue(0);
|
||||
zSpin->setVisible(false);
|
||||
connect(view2d, qOverload<int>(&QComboBox::currentIndexChanged), this,
|
||||
[this, zSpin](int idx) {
|
||||
zSpin->setVisible(idx == 4);
|
||||
emit view2DModeChanged(idx);
|
||||
});
|
||||
connect(zSpin, qOverload<double>(&QDoubleSpinBox::valueChanged), this,
|
||||
[this](double z) { emit customZChanged(z); });
|
||||
form->addRow(QStringLiteral("位置"), view2d);
|
||||
form->addRow(QStringLiteral("Z 值"), zSpin);
|
||||
root->addWidget(new QLabel(QStringLiteral("2D视图")));
|
||||
root->addLayout(form);
|
||||
}
|
||||
|
||||
// 数据集列表(可勾选)
|
||||
list_ = new QTreeWidget();
|
||||
list_->setHeaderHidden(true);
|
||||
list_->setRootIsDecorated(true);
|
||||
applyDatasetCardDelegate(list_);
|
||||
connect(list_, &QTreeWidget::itemChanged, this, [this](QTreeWidgetItem*, int) {
|
||||
QStringList ids;
|
||||
for (QTreeWidgetItemIterator it(list_); *it; ++it) {
|
||||
if ((*it)->checkState(0) == Qt::Checked)
|
||||
ids << (*it)->data(0, kDsIdRole).toString();
|
||||
}
|
||||
emit checkedDatasetsChanged(ids);
|
||||
});
|
||||
root->addWidget(list_, 1);
|
||||
}
|
||||
|
||||
void Column2DDataset::setDatasets(const std::vector<geopro::data::DsRow>& rows) {
|
||||
populateDatasetList(list_, rows, /*append=*/false);
|
||||
for (QTreeWidgetItemIterator it(list_); *it; ++it) {
|
||||
(*it)->setFlags((*it)->flags() | Qt::ItemIsUserCheckable);
|
||||
if ((*it)->checkState(0) != Qt::Checked)
|
||||
(*it)->setCheckState(0, Qt::Unchecked);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace geopro::app
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#pragma once
|
||||
#include <QWidget>
|
||||
#include <QStringList>
|
||||
#include <vector>
|
||||
#include "repo/RepoTypes.hpp"
|
||||
|
||||
class QTreeWidget;
|
||||
|
||||
namespace geopro::app {
|
||||
|
||||
// 二维数据集栏:地图 + 2D视图(含自定义 Z) + 2D 数据集列表。
|
||||
class Column2DDataset : public QWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Column2DDataset(QWidget* parent = nullptr);
|
||||
void setDatasets(const std::vector<geopro::data::DsRow>& rows);
|
||||
|
||||
signals:
|
||||
void basemapChanged(int index); // 0 天地图 / 1 Google / 2 隐藏
|
||||
void view2DModeChanged(int index); // 0 关闭 /1 Z=0 /2 顶部 /3 底部 /4 自定义
|
||||
void customZChanged(double z); // 世界绝对高程(米),向上为正
|
||||
void checkedDatasetsChanged(const QStringList& dsIds);
|
||||
|
||||
private:
|
||||
QTreeWidget* list_ = nullptr;
|
||||
};
|
||||
|
||||
} // namespace geopro::app
|
||||
Loading…
Reference in New Issue