38 lines
1.5 KiB
C++
38 lines
1.5 KiB
C++
#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
|