geopro/src/app/TileBasemapPlaneAdapter.hpp

38 lines
1.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <functional>
#include <memory>
#include <utility>
#include "TileBasemap.hpp"
#include "controller/DatasetRenderStrategy.hpp" // geopro::controller::IPlaneBasemap
namespace geopro::render { class Scene; }
namespace geopro::core { class GeoLocalFrame; }
class vtkRenderWindow;
namespace geopro::app {
// 2D 平面底图适配器:把 app 层 TileBasemap 适配到控制器层抽象 IPlaneBasemap
// 使 geopro_controller(仅链 geopro_data+Qt::Core) 不反依赖 app 层与 VTK仿 I3dSceneView/VtkSceneView
// main.cpp 经底图工厂按平面 z 造之;持 TileBasemap 值成员,随适配器析构而析构(移除瓦片→底图随平面消失)。
class TileBasemapPlaneAdapter : public geopro::controller::IPlaneBasemap {
public:
TileBasemapPlaneAdapter(geopro::render::Scene& scene, vtkRenderWindow* rw,
std::shared_ptr<geopro::core::GeoLocalFrame> frame, double groundZ,
std::function<double()> radiusProvider)
: bm_(scene, rw, std::move(frame), nullptr, groundZ) {
bm_.setDataRadiusProvider(std::move(radiusProvider));
}
void show(int kind) override {
bm_.show(kind == 0 ? TileBasemap::Street : TileBasemap::Hidden);
}
void hide() override { bm_.hide(); }
void setOpacity(double o) override { bm_.setOpacity(o); }
void setGroundZ(double z) override { bm_.setGroundZ(z); }
private:
TileBasemap bm_;
};
} // namespace geopro::app