diff --git a/src/app/VtkSceneView.cpp b/src/app/VtkSceneView.cpp index e335d4b..f5b9334 100644 --- a/src/app/VtkSceneView.cpp +++ b/src/app/VtkSceneView.cpp @@ -4,6 +4,9 @@ #include #include +#include +#include + #include #include #include @@ -184,7 +187,13 @@ void VtkSceneView::setAxes(geopro::controller::AxesMode mode, geopro::controller void VtkSceneView::applyCameraView(geopro::controller::ViewDir dir) { geopro::render::applyView(scene_.renderer(), toRenderViewDir(dir)); // 设朝向(内部 ResetCamera 含底图) double bounds[6]; - if (computeDataBounds(bounds)) + const bool ok = computeDataBounds(bounds); + qInfo() << "[view] 预设取景 computeDataBounds=" << ok << " ds数=" << int(dsProps_.size()) + << (ok ? QString(" bounds[%1,%2 %3,%4 %5,%6]") + .arg(bounds[0]).arg(bounds[1]).arg(bounds[2]) + .arg(bounds[3]).arg(bounds[4]).arg(bounds[5]) + : QString()); + if (ok) scene_.renderer()->ResetCamera(bounds); // 重新取景到数据(否则被~公里级底图推到超远) scene_.renderer()->ResetCameraClippingRange(); // 裁剪面含底图 if (renderWindow_) renderWindow_->Render(); diff --git a/src/app/main.cpp b/src/app/main.cpp index eefe90e..a9048ba 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -417,6 +417,9 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re // 垂直夸张:地形须与剖面用同一 VE 才对齐(都按真实高程×VE)。 QObject::connect(drawer->col3D(), &geopro::app::Column3DDataset::verticalExaggerationChanged, basemap, [basemap](double ve) { basemap->setVerticalExaggeration(ve); }); + // 单一来源:kVerticalExaggeration 一处定义,组合根下发到 控制器(上方259) / 底图 / UI 显示。 + basemap->setVerticalExaggeration(kVerticalExaggeration); + drawer->col3D()->setVerticalExaggeration(kVerticalExaggeration); // ── 中央“空状态”引导浮层:未接入真实 sections 时,引导首次使用者从左侧入手。── // 透明背景 + 鼠标穿透(不挡 QVTK 交互);CenterOverlay 随视口尺寸保持居中; diff --git a/src/app/panels/columns/Column3DDataset.cpp b/src/app/panels/columns/Column3DDataset.cpp index 6290b1e..2d5a34b 100644 --- a/src/app/panels/columns/Column3DDataset.cpp +++ b/src/app/panels/columns/Column3DDataset.cpp @@ -1,5 +1,7 @@ #include "panels/columns/Column3DDataset.hpp" +#include + #include #include #include @@ -54,20 +56,20 @@ Column3DDataset::Column3DDataset(QWidget* parent) : QWidget(parent) { root->addLayout(form); } - // 水平/垂直比例(单滑块 + 数值) + // 水平/垂直比例(单滑块 + 数值)。初值为中性 1×(无夸张);实际配置默认由组合根 setVerticalExaggeration 下发。 { auto* row = new QHBoxLayout(); - auto* slider = new QSlider(Qt::Horizontal); - slider->setMinimum(1); - slider->setMaximum(10); - slider->setValue(1); - auto* val = new QLabel(QStringLiteral("1.0×")); - connect(slider, &QSlider::valueChanged, this, [this, val](int v) { - val->setText(QStringLiteral("%1.0×").arg(v)); + veSlider_ = new QSlider(Qt::Horizontal); + veSlider_->setMinimum(1); + veSlider_->setMaximum(10); + veSlider_->setValue(1); + veLabel_ = new QLabel(QStringLiteral("1.0×")); + connect(veSlider_, &QSlider::valueChanged, this, [this](int v) { + veLabel_->setText(QStringLiteral("%1.0×").arg(v)); emit verticalExaggerationChanged(static_cast(v)); }); - row->addWidget(slider, 1); - row->addWidget(val); + row->addWidget(veSlider_, 1); + row->addWidget(veLabel_); root->addWidget(new QLabel(QStringLiteral("水平/垂直比例"))); root->addLayout(row); } @@ -125,6 +127,13 @@ Column3DDataset::Column3DDataset(QWidget* parent) : QWidget(parent) { root->addWidget(list_, 1); } +void Column3DDataset::setVerticalExaggeration(double ve) { + const int v = std::max(1, static_cast(ve + 0.5)); + QSignalBlocker block(veSlider_); // 仅同步 UI 显示;传播由组合根分发,避免重复发信号 + veSlider_->setValue(v); + veLabel_->setText(QStringLiteral("%1.0×").arg(v)); +} + void Column3DDataset::setDatasets(const std::vector& rows) { { QSignalBlocker blocker(list_); diff --git a/src/app/panels/columns/Column3DDataset.hpp b/src/app/panels/columns/Column3DDataset.hpp index d0d8ead..09fd6bc 100644 --- a/src/app/panels/columns/Column3DDataset.hpp +++ b/src/app/panels/columns/Column3DDataset.hpp @@ -6,6 +6,8 @@ #include "repo/RepoTypes.hpp" class QTreeWidget; +class QSlider; +class QLabel; namespace geopro::app { @@ -15,6 +17,7 @@ class Column3DDataset : public QWidget { public: explicit Column3DDataset(QWidget* parent = nullptr); void setDatasets(const std::vector& rows); + void setVerticalExaggeration(double ve); // 组合根下发配置默认值(仅同步UI显示,不重复发信号) signals: void axesModeChanged(geopro::controller::AxesMode mode); @@ -30,6 +33,8 @@ signals: private: QTreeWidget* list_ = nullptr; + QSlider* veSlider_ = nullptr; // 水平/垂直比例滑块 + QLabel* veLabel_ = nullptr; }; } // namespace geopro::app