50 lines
1.6 KiB
C++
50 lines
1.6 KiB
C++
#include "CentralScene.hpp"
|
||
|
||
#include <vtkActor.h>
|
||
#include <vtkRenderWindow.h>
|
||
#include <vtkRenderer.h>
|
||
|
||
#include "CameraPreset.hpp"
|
||
#include "Scene.hpp"
|
||
#include "Theme.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);
|
||
(void)is2D;
|
||
// 背景永远深色(规范§0.5 视图区常深,不随明暗切换),让色阶数据更突出。
|
||
double bgR, bgG, bgB;
|
||
geopro::app::vtkBackground(bgR, bgG, bgB);
|
||
renderer->SetBackground(bgR, bgG, bgB);
|
||
|
||
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
|