refactor(vtk): VE默认值收敛为单一来源(kVerticalExaggeration一处定义,组合根下发控制器/底图/UI);加预设取景诊断日志
This commit is contained in:
parent
97dfd54445
commit
052fdc1168
|
|
@ -4,6 +4,9 @@
|
|||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QString>
|
||||
|
||||
#include <vtkActor.h>
|
||||
#include <vtkBoundingBox.h>
|
||||
#include <vtkCubeAxesActor.h>
|
||||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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 随视口尺寸保持居中;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
#include "panels/columns/Column3DDataset.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include <QComboBox>
|
||||
#include <QFormLayout>
|
||||
#include <QHBoxLayout>
|
||||
|
|
@ -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<double>(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<int>(ve + 0.5));
|
||||
QSignalBlocker block(veSlider_); // 仅同步 UI 显示;传播由组合根分发,避免重复发信号
|
||||
veSlider_->setValue(v);
|
||||
veLabel_->setText(QStringLiteral("%1.0×").arg(v));
|
||||
}
|
||||
|
||||
void Column3DDataset::setDatasets(const std::vector<geopro::data::DsRow>& rows) {
|
||||
{
|
||||
QSignalBlocker blocker(list_);
|
||||
|
|
|
|||
|
|
@ -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<geopro::data::DsRow>& 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
|
||||
|
|
|
|||
Loading…
Reference in New Issue