refactor/pure-qt-ui #3
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include "CameraPreset.hpp"
|
#include "CameraPreset.hpp"
|
||||||
#include "Scene.hpp"
|
#include "Scene.hpp"
|
||||||
|
#include "Theme.hpp"
|
||||||
#include "actors/CurtainActor.hpp"
|
#include "actors/CurtainActor.hpp"
|
||||||
#include "actors/MapLineActor.hpp"
|
#include "actors/MapLineActor.hpp"
|
||||||
#include "geo/GeoLocalFrame.hpp"
|
#include "geo/GeoLocalFrame.hpp"
|
||||||
|
|
@ -18,7 +19,11 @@ void rebuildCentralScene(geopro::render::Scene& scene, vtkRenderer* renderer,
|
||||||
const geopro::core::GeoLocalFrame& frame, double verticalExaggeration) {
|
const geopro::core::GeoLocalFrame& frame, double verticalExaggeration) {
|
||||||
scene.clear();
|
scene.clear();
|
||||||
const bool is2D = (mode == ViewMode::Map2D);
|
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) {
|
for (const auto& s : sections) {
|
||||||
if (is2D) {
|
if (is2D) {
|
||||||
|
|
|
||||||
|
|
@ -467,6 +467,14 @@ bool isDarkTheme()
|
||||||
return eTheme->getThemeMode() == ElaThemeType::Dark;
|
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)
|
void applyThemedStyleSheet(QWidget* w, const QString& designQss)
|
||||||
{
|
{
|
||||||
if (!w) return;
|
if (!w) return;
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,9 @@ void applyTheme(QApplication& app);
|
||||||
// 当前 ElaTheme 是否暗色(供内联样式判断)。
|
// 当前 ElaTheme 是否暗色(供内联样式判断)。
|
||||||
bool isDarkTheme();
|
bool isDarkTheme();
|
||||||
|
|
||||||
|
// VTK 渲染器背景色(随当前主题,取 ElaTheme 窗口底色)。写入 r/g/b(0–1)。
|
||||||
|
void vtkBackground(double& r, double& g, double& b);
|
||||||
|
|
||||||
// 把一段「浅色设计稿 QSS」按当前 ElaTheme 配色着色应用到 widget,并随明/暗切换自动重着色。
|
// 把一段「浅色设计稿 QSS」按当前 ElaTheme 配色着色应用到 widget,并随明/暗切换自动重着色。
|
||||||
// 用于 TopBar/PanelHeader/浮层 等带内联 setStyleSheet 的自定义 chrome——让它们也跟随主题
|
// 用于 TopBar/PanelHeader/浮层 等带内联 setStyleSheet 的自定义 chrome——让它们也跟随主题
|
||||||
// (设计稿里用浅色令牌 #1F2A3D/#FFFFFF/#2D6CB5… 书写即可,与全局 QSS 同一套角色映射)。
|
// (设计稿里用浅色令牌 #1F2A3D/#FFFFFF/#2D6CB5… 书写即可,与全局 QSS 同一套角色映射)。
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,7 @@
|
||||||
#include <DockWidget.h>
|
#include <DockWidget.h>
|
||||||
|
|
||||||
#include <ElaApplication.h>
|
#include <ElaApplication.h>
|
||||||
|
#include <ElaCheckBox.h>
|
||||||
#include <ElaDef.h>
|
#include <ElaDef.h>
|
||||||
#include <ElaTheme.h>
|
#include <ElaTheme.h>
|
||||||
#include <ElaWindow.h>
|
#include <ElaWindow.h>
|
||||||
|
|
@ -348,13 +349,13 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
||||||
"padding-bottom:3px;font-size:%2px;")
|
"padding-bottom:3px;font-size:%2px;")
|
||||||
.arg(geopro::app::type::kWeightSemibold)
|
.arg(geopro::app::type::kWeightSemibold)
|
||||||
.arg(geopro::app::type::kTitle));
|
.arg(geopro::app::type::kTitle));
|
||||||
auto* chkCurtain = new QCheckBox(QStringLiteral("帘面(断面墙)"));
|
auto* chkCurtain = new ElaCheckBox(QStringLiteral("帘面(断面墙)"));
|
||||||
chkCurtain->setChecked(true);
|
chkCurtain->setChecked(true);
|
||||||
auto* chkVoxel = new QCheckBox(QStringLiteral("体素(dd_voxel)"));
|
auto* chkVoxel = new ElaCheckBox(QStringLiteral("体素(dd_voxel)"));
|
||||||
chkVoxel->setChecked(false);
|
chkVoxel->setChecked(false);
|
||||||
auto* chkTerrain = new QCheckBox(QStringLiteral("地形(DEM+影像)"));
|
auto* chkTerrain = new ElaCheckBox(QStringLiteral("地形(DEM+影像)"));
|
||||||
chkTerrain->setChecked(false);
|
chkTerrain->setChecked(false);
|
||||||
auto* chkSlice = new QCheckBox(QStringLiteral("切片(dd_slice)"));
|
auto* chkSlice = new ElaCheckBox(QStringLiteral("切片(dd_slice)"));
|
||||||
chkSlice->setChecked(false);
|
chkSlice->setChecked(false);
|
||||||
if (!crs) { // PROJ 不可用 → 体素/切片/地形层(都需配准)禁用并提示
|
if (!crs) { // PROJ 不可用 → 体素/切片/地形层(都需配准)禁用并提示
|
||||||
const QString tip = QStringLiteral("PROJ 数据(proj.db)缺失,配准不可用");
|
const QString tip = QStringLiteral("PROJ 数据(proj.db)缺失,配准不可用");
|
||||||
|
|
@ -433,12 +434,27 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
||||||
auto* detailWidget = new QVTKOpenGLStereoWidget();
|
auto* detailWidget = new QVTKOpenGLStereoWidget();
|
||||||
vtkNew<vtkGenericOpenGLRenderWindow> detailRenderWindow;
|
vtkNew<vtkGenericOpenGLRenderWindow> detailRenderWindow;
|
||||||
vtkNew<vtkRenderer> detailRenderer;
|
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);
|
detailWidget->setRenderWindow(detailRenderWindow);
|
||||||
detailRenderWindow->AddRenderer(detailRenderer);
|
detailRenderWindow->AddRenderer(detailRenderer);
|
||||||
vtkRenderer* detailRendererPtr = detailRenderer.Get();
|
vtkRenderer* detailRendererPtr = detailRenderer.Get();
|
||||||
vtkGenericOpenGLRenderWindow* detailRenderWindowPtr = detailRenderWindow.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 小视图。
|
// 数据详情容器:顶部「反演剖面/原数据」工具条 + 下方 QVTK 小视图。
|
||||||
auto* detailContainer = new QWidget();
|
auto* detailContainer = new QWidget();
|
||||||
auto* detailLayout = new QVBoxLayout(detailContainer);
|
auto* detailLayout = new QVBoxLayout(detailContainer);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue