#pragma once #include #include #include #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 frame, double groundZ, std::function 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