feat(ela): C VTK 视口背景随主题 + A 浮层勾选框 Ela 化
- vtkBackground(): 取 ElaTheme 窗口底色; CentralScene/详情渲染器初始用它; 切主题时中央+详情重设+刷新 - 浮层图层勾选(帘面/体素/切片/地形) → ElaCheckBox - 说明: 自定义 chrome(工作空间/项目切换器/图标按钮/PanelHeader tab/工具条)保留并随主题(强换 Ela 会丢设计); 状态栏由 QSS 随主题
This commit is contained in:
parent
57c452e2d3
commit
f5eff9e185
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include "CameraPreset.hpp"
|
||||
#include "Scene.hpp"
|
||||
#include "Theme.hpp"
|
||||
#include "actors/CurtainActor.hpp"
|
||||
#include "actors/MapLineActor.hpp"
|
||||
#include "geo/GeoLocalFrame.hpp"
|
||||
|
|
@ -18,7 +19,11 @@ void rebuildCentralScene(geopro::render::Scene& scene, vtkRenderer* renderer,
|
|||
const geopro::core::GeoLocalFrame& frame, double verticalExaggeration) {
|
||||
scene.clear();
|
||||
const bool is2D = (mode == ViewMode::Map2D);
|
||||
renderer->SetBackground(is2D ? 0.96 : 1.0, is2D ? 0.97 : 1.0, is2D ? 0.99 : 1.0);
|
||||
(void)is2D;
|
||||
// 背景随主题(取 ElaTheme 窗口底色),暗色下不再是刺眼白底。
|
||||
double bgR, bgG, bgB;
|
||||
geopro::app::vtkBackground(bgR, bgG, bgB);
|
||||
renderer->SetBackground(bgR, bgG, bgB);
|
||||
|
||||
for (const auto& s : sections) {
|
||||
if (is2D) {
|
||||
|
|
|
|||
|
|
@ -467,6 +467,14 @@ bool isDarkTheme()
|
|||
return eTheme->getThemeMode() == ElaThemeType::Dark;
|
||||
}
|
||||
|
||||
void vtkBackground(double& r, double& g, double& b)
|
||||
{
|
||||
const QColor c = roleColor(isDarkTheme(), ElaThemeType::WindowBase);
|
||||
r = c.redF();
|
||||
g = c.greenF();
|
||||
b = c.blueF();
|
||||
}
|
||||
|
||||
void applyThemedStyleSheet(QWidget* w, const QString& designQss)
|
||||
{
|
||||
if (!w) return;
|
||||
|
|
|
|||
|
|
@ -93,6 +93,9 @@ void applyTheme(QApplication& app);
|
|||
// 当前 ElaTheme 是否暗色(供内联样式判断)。
|
||||
bool isDarkTheme();
|
||||
|
||||
// VTK 渲染器背景色(随当前主题,取 ElaTheme 窗口底色)。写入 r/g/b(0–1)。
|
||||
void vtkBackground(double& r, double& g, double& b);
|
||||
|
||||
// 把一段「浅色设计稿 QSS」按当前 ElaTheme 配色着色应用到 widget,并随明/暗切换自动重着色。
|
||||
// 用于 TopBar/PanelHeader/浮层 等带内联 setStyleSheet 的自定义 chrome——让它们也跟随主题
|
||||
// (设计稿里用浅色令牌 #1F2A3D/#FFFFFF/#2D6CB5… 书写即可,与全局 QSS 同一套角色映射)。
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@
|
|||
#include <DockWidget.h>
|
||||
|
||||
#include <ElaApplication.h>
|
||||
#include <ElaCheckBox.h>
|
||||
#include <ElaDef.h>
|
||||
#include <ElaTheme.h>
|
||||
#include <ElaWindow.h>
|
||||
|
|
@ -348,13 +349,13 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
|||
"padding-bottom:3px;font-size:%2px;")
|
||||
.arg(geopro::app::type::kWeightSemibold)
|
||||
.arg(geopro::app::type::kTitle));
|
||||
auto* chkCurtain = new QCheckBox(QStringLiteral("帘面(断面墙)"));
|
||||
auto* chkCurtain = new ElaCheckBox(QStringLiteral("帘面(断面墙)"));
|
||||
chkCurtain->setChecked(true);
|
||||
auto* chkVoxel = new QCheckBox(QStringLiteral("体素(dd_voxel)"));
|
||||
auto* chkVoxel = new ElaCheckBox(QStringLiteral("体素(dd_voxel)"));
|
||||
chkVoxel->setChecked(false);
|
||||
auto* chkTerrain = new QCheckBox(QStringLiteral("地形(DEM+影像)"));
|
||||
auto* chkTerrain = new ElaCheckBox(QStringLiteral("地形(DEM+影像)"));
|
||||
chkTerrain->setChecked(false);
|
||||
auto* chkSlice = new QCheckBox(QStringLiteral("切片(dd_slice)"));
|
||||
auto* chkSlice = new ElaCheckBox(QStringLiteral("切片(dd_slice)"));
|
||||
chkSlice->setChecked(false);
|
||||
if (!crs) { // PROJ 不可用 → 体素/切片/地形层(都需配准)禁用并提示
|
||||
const QString tip = QStringLiteral("PROJ 数据(proj.db)缺失,配准不可用");
|
||||
|
|
@ -433,12 +434,27 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
|||
auto* detailWidget = new QVTKOpenGLStereoWidget();
|
||||
vtkNew<vtkGenericOpenGLRenderWindow> detailRenderWindow;
|
||||
vtkNew<vtkRenderer> detailRenderer;
|
||||
detailRenderer->SetBackground(1.0, 1.0, 1.0); // 白底
|
||||
{
|
||||
double r, g, b;
|
||||
geopro::app::vtkBackground(r, g, b); // 背景随主题
|
||||
detailRenderer->SetBackground(r, g, b);
|
||||
}
|
||||
detailWidget->setRenderWindow(detailRenderWindow);
|
||||
detailRenderWindow->AddRenderer(detailRenderer);
|
||||
vtkRenderer* detailRendererPtr = detailRenderer.Get();
|
||||
vtkGenericOpenGLRenderWindow* detailRenderWindowPtr = detailRenderWindow.Get();
|
||||
|
||||
// VTK 背景随主题切换:ElaTheme 明/暗切换时,中央+详情渲染器重设底色并刷新。
|
||||
QObject::connect(eTheme, &ElaTheme::themeModeChanged, detailWidget,
|
||||
[rendererPtr, renderWindowPtr, detailRendererPtr, detailRenderWindowPtr]() {
|
||||
double r, g, b;
|
||||
geopro::app::vtkBackground(r, g, b);
|
||||
rendererPtr->SetBackground(r, g, b);
|
||||
renderWindowPtr->Render();
|
||||
detailRendererPtr->SetBackground(r, g, b);
|
||||
detailRenderWindowPtr->Render();
|
||||
});
|
||||
|
||||
// 数据详情容器:顶部「反演剖面/原数据」工具条 + 下方 QVTK 小视图。
|
||||
auto* detailContainer = new QWidget();
|
||||
auto* detailLayout = new QVBoxLayout(detailContainer);
|
||||
|
|
|
|||
Loading…
Reference in New Issue