feat(app): CentralScene 数据驱动 helper(解耦中央三维编排,下一轮接真实DS复用)
This commit is contained in:
parent
c78022a6b6
commit
6241eb3a7e
|
|
@ -22,7 +22,8 @@ add_executable(geopro_desktop WIN32
|
|||
login/LoginWindow.cpp
|
||||
panels/AnomalyListPanel.cpp
|
||||
panels/DatasetListPanel.cpp
|
||||
panels/ObjectTreePanel.cpp)
|
||||
panels/ObjectTreePanel.cpp
|
||||
CentralScene.cpp)
|
||||
|
||||
target_include_directories(geopro_desktop PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
#include "CentralScene.hpp"
|
||||
|
||||
#include <vtkActor.h>
|
||||
#include <vtkRenderWindow.h>
|
||||
#include <vtkRenderer.h>
|
||||
|
||||
#include "CameraPreset.hpp"
|
||||
#include "Scene.hpp"
|
||||
#include "actors/CurtainActor.hpp"
|
||||
#include "actors/MapLineActor.hpp"
|
||||
#include "geo/GeoLocalFrame.hpp"
|
||||
|
||||
namespace geopro::app {
|
||||
|
||||
void rebuildCentralScene(geopro::render::Scene& scene, vtkRenderer* renderer,
|
||||
vtkRenderWindow* renderWindow, ViewMode mode,
|
||||
const std::vector<SectionInput>& sections, bool showCurtain,
|
||||
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);
|
||||
|
||||
for (const auto& s : sections) {
|
||||
if (is2D) {
|
||||
auto line = geopro::render::buildSurveyLine(s.grid, frame);
|
||||
if (line) scene.addActor(line);
|
||||
} else if (showCurtain) {
|
||||
auto curtain = geopro::render::buildCurtain(s.grid, s.colorScale, frame);
|
||||
if (curtain) {
|
||||
curtain->SetScale(1.0, 1.0, verticalExaggeration); // 纵向夸张成墙
|
||||
scene.addActor(curtain);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is2D)
|
||||
geopro::render::applyTop2D(renderer);
|
||||
else
|
||||
geopro::render::applyFree3D(renderer);
|
||||
renderer->ResetCamera();
|
||||
renderWindow->Render();
|
||||
}
|
||||
|
||||
} // namespace geopro::app
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
#pragma once
|
||||
#include <vector>
|
||||
|
||||
#include "model/ColorScale.hpp"
|
||||
#include "model/Field.hpp"
|
||||
|
||||
namespace geopro::core { class GeoLocalFrame; }
|
||||
namespace geopro::render { class Scene; }
|
||||
class vtkRenderer;
|
||||
class vtkRenderWindow;
|
||||
|
||||
namespace geopro::app {
|
||||
|
||||
// 中央视图模式:二维地图(测线红线俯视)/ 三维视图(断面墙)。
|
||||
enum class ViewMode { Map2D, View3D };
|
||||
|
||||
// 一个待渲染剖面:grid(2D 测线 / 3D 帘面都用)+ colorScale(3D 帘面上色)。
|
||||
struct SectionInput {
|
||||
geopro::core::Grid grid;
|
||||
geopro::core::ColorScale colorScale;
|
||||
};
|
||||
|
||||
// 中央场景重建(脱离对象树,按显式 sections 渲染):
|
||||
// 2D = 每个 section 的 buildSurveyLine;3D = 每个 section 的 buildCurtain(受 showCurtain)。
|
||||
// 下一轮接真实 DS:构建 sections 后调用本函数即可,render 层零改动。
|
||||
void rebuildCentralScene(geopro::render::Scene& scene, vtkRenderer* renderer,
|
||||
vtkRenderWindow* renderWindow, ViewMode mode,
|
||||
const std::vector<SectionInput>& sections, bool showCurtain,
|
||||
const geopro::core::GeoLocalFrame& frame, double verticalExaggeration);
|
||||
|
||||
} // namespace geopro::app
|
||||
Loading…
Reference in New Issue