feat(vtk): 3D 底图控件移渲染区工具栏(天地图/无+透明度滑块)
This commit is contained in:
parent
aea5b6b8cb
commit
ef56529d8c
|
|
@ -3,11 +3,13 @@
|
|||
#include <QFrame>
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QMenu>
|
||||
#include <QPoint>
|
||||
#include <QSize>
|
||||
#include <QSlider>
|
||||
#include <QToolButton>
|
||||
#include <QVBoxLayout>
|
||||
#include <QWidgetAction>
|
||||
|
||||
#include "Glyphs.hpp"
|
||||
#include "Theme.hpp"
|
||||
|
|
@ -52,9 +54,28 @@ VtkViewToolbar::VtkViewToolbar(QWidget* parent) : QWidget(parent) {
|
|||
col->addWidget(line);
|
||||
};
|
||||
|
||||
// ── 段1:设置(坐标轴)──
|
||||
// ── 段1:设置(坐标轴)/ 底图 ──
|
||||
connect(iconBtn(Glyph::Gear, QStringLiteral("坐标轴设置")), &QToolButton::clicked, this,
|
||||
&VtkViewToolbar::axesSettingsRequested);
|
||||
// 共享 3D 底图控件:天地图/无 + 透明度滑块(spec §7.5/§9.1,从数据集栏移至渲染区工具条,全局唯一)。
|
||||
{
|
||||
auto* mapBtn = iconBtn(Glyph::Map, QStringLiteral("底图"));
|
||||
mapBtn->setPopupMode(QToolButton::InstantPopup);
|
||||
auto* menu = new QMenu(mapBtn);
|
||||
menu->addAction(QStringLiteral("天地图"), this, [this] { emit basemapKindChanged(0); });
|
||||
menu->addAction(QStringLiteral("无"), this, [this] { emit basemapKindChanged(1); });
|
||||
menu->addSeparator();
|
||||
auto* wa = new QWidgetAction(menu);
|
||||
auto* sld = new QSlider(Qt::Horizontal, menu);
|
||||
sld->setRange(0, 100);
|
||||
sld->setValue(50);
|
||||
sld->setToolTip(QStringLiteral("底图透明度"));
|
||||
connect(sld, &QSlider::valueChanged, this,
|
||||
[this](int v) { emit basemapOpacityChanged(v / 100.0); });
|
||||
wa->setDefaultWidget(sld);
|
||||
menu->addAction(wa);
|
||||
mapBtn->setMenu(menu);
|
||||
}
|
||||
sep();
|
||||
// ── 段2:快捷视图(前/后/上/下/左/右)──
|
||||
struct V {
|
||||
|
|
@ -67,7 +88,6 @@ VtkViewToolbar::VtkViewToolbar(QWidget* parent) : QWidget(parent) {
|
|||
const ViewDir d = v.d;
|
||||
auto* b = textBtn(QString::fromUtf8(v.t));
|
||||
connect(b, &QToolButton::clicked, this, [this, d] { emit viewRequested(d); });
|
||||
viewDirButtons_.push_back(b); // 二维分析下禁用(会改朝向、破坏近俯视锁定)
|
||||
}
|
||||
sep();
|
||||
// ── 段3:缩放 / 复位 ──(三维体不透明度已移交色阶「不透明度」,旧「透」滑块退役移除)
|
||||
|
|
@ -89,12 +109,4 @@ VtkViewToolbar::VtkViewToolbar(QWidget* parent) : QWidget(parent) {
|
|||
adjustSize();
|
||||
}
|
||||
|
||||
void VtkViewToolbar::setAnalysisMode2D(bool is2D) {
|
||||
for (auto* b : viewDirButtons_) {
|
||||
if (!b) continue;
|
||||
b->setEnabled(!is2D);
|
||||
b->setToolTip(is2D ? QStringLiteral("二维分析下不可用(已锁定近俯视)") : QString());
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace geopro::app
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
#pragma once
|
||||
#include <QWidget>
|
||||
#include <vector>
|
||||
#include "I3dSceneView.hpp" // geopro::controller::ViewDir
|
||||
|
||||
class QToolButton;
|
||||
|
|
@ -9,27 +8,21 @@ class QLabel;
|
|||
|
||||
namespace geopro::app {
|
||||
|
||||
// VTK 画布竖排工具条(spec §9):全局视图控制——设置(坐标轴)/前后上下左右/放大缩小复位。
|
||||
// 仅发信号,不认 VTK;由 main 接到场景控制器。
|
||||
// VTK 画布竖排工具条(spec §9):全局视图控制——设置(坐标轴)/底图/前后上下左右/放大缩小复位。
|
||||
// 仅发信号,不认 VTK;由 main 接到场景控制器与共享 3D 底图。
|
||||
class VtkViewToolbar : public QWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit VtkViewToolbar(QWidget* parent = nullptr);
|
||||
|
||||
public slots:
|
||||
// 二维分析激活时禁用不适用的工具:6 向快捷视图会改相机朝向→破坏二维近俯视锁定,故二维下禁用;
|
||||
// 缩放/适配/坐标轴设置(含 VE)仍可用。切回三维恢复。
|
||||
void setAnalysisMode2D(bool is2D);
|
||||
|
||||
signals:
|
||||
void axesSettingsRequested(); // 设置 → 弹 AxesSettingsDialog
|
||||
void basemapKindChanged(int kind); // 底图类型:0 天地图 / 1 无
|
||||
void basemapOpacityChanged(double o); // 底图透明度:0..1
|
||||
void viewRequested(geopro::controller::ViewDir dir); // 前/后/上/下/左/右
|
||||
void zoomInRequested();
|
||||
void zoomOutRequested();
|
||||
void fitRequested(); // 复位=适配
|
||||
|
||||
private:
|
||||
std::vector<QToolButton*> viewDirButtons_; // 6 向快捷视图按钮:二维分析下禁用
|
||||
};
|
||||
|
||||
} // namespace geopro::app
|
||||
|
|
|
|||
|
|
@ -1350,6 +1350,15 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
|||
};
|
||||
// 相机程序化变化(取景/预设/缩放)后,底图按新视锥重算覆盖(治首帧部分瓦片需手动微动才出)。
|
||||
sceneView->onCameraChanged = [basemap]() { basemap->refresh(); };
|
||||
// D3:渲染区工具条「底图」控件 → 共享 3D 底图(天地图/无 + 透明度),替代旧 col2D basemapChanged 接线。
|
||||
QObject::connect(viewToolbar, &geopro::app::VtkViewToolbar::basemapKindChanged, basemap,
|
||||
[basemap, basemapKind](int kind) {
|
||||
*basemapKind = (kind == 0) ? geopro::app::TileBasemap::Satellite
|
||||
: geopro::app::TileBasemap::Hidden;
|
||||
basemap->show(*basemapKind);
|
||||
});
|
||||
QObject::connect(viewToolbar, &geopro::app::VtkViewToolbar::basemapOpacityChanged, basemap,
|
||||
[basemap](double o) { basemap->setOpacity(o); });
|
||||
// 底图最大范围按当前勾选剖面合并范围动态定(随增删自动伸缩);刷新时实时查询。
|
||||
basemap->setDataRadiusProvider([sceneView]() { return sceneView->dataHorizontalRadius(); });
|
||||
// 垂直夸张:地形须与剖面用同一 VE 才对齐(都按真实高程×VE)。单一来源 kVerticalExaggeration 下发
|
||||
|
|
|
|||
Loading…
Reference in New Issue