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;
|
|
// 背景随主题(取 ElaTheme 窗口底色),暗色下不再是刺眼白底。
|
|
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
|