From a22dbd4b464ea0c9810ae90de558944dae7ecdfe Mon Sep 17 00:00:00 2001 From: phfb3vlou <1323801688@qq.com> Date: Thu, 30 Apr 2026 18:33:37 +0800 Subject: [PATCH] =?UTF-8?q?Add=20=E5=8F=AF=E8=A7=86=E5=8C=96=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E6=8E=A5=E5=8F=A3=20VisualizationInterface.h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...§†åŒ–æ¨¡å—æ¥å£ VisualizationInterface.h | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 å¯è§†åŒ–æ¨¡å—æ¥å£ VisualizationInterface.h diff --git a/å¯è§†åŒ–æ¨¡å—æ¥å£ VisualizationInterface.h b/å¯è§†åŒ–æ¨¡å—æ¥å£ VisualizationInterface.h new file mode 100644 index 0000000..e5b3577 --- /dev/null +++ b/å¯è§†åŒ–æ¨¡å—æ¥å£ VisualizationInterface.h @@ -0,0 +1,86 @@ +#ifndef VISUALIZATION_INTERFACE_H +#define VISUALIZATION_INTERFACE_H + +#include "DataStructures.h" +#include +#include +#include + +namespace Battlefield { + +class VisualizationInterface { +public: + virtual ~VisualizationInterface() = default; + + // åˆå§‹åŒ–å¯è§†åŒ–系统 + virtual bool initialize(int width, int height, const std::string& title) = 0; + + // 渲染战场æ€åŠ¿ + virtual void renderSituation(const BattlefieldSituation& situation) = 0; + + // 渲染决策建议 + virtual void renderDecisions(const std::vector& decisions) = 0; + + // æ›´æ–°åœ°å›¾æ•°æ® + virtual void updateMapData(const std::vector& terrain, + const std::vector& labels) = 0; + + // 设置事件å›è°ƒ + virtual void setClickCallback(std::function callback) = 0; + virtual void setSelectCallback(std::function callback) = 0; + + // è·å–用户输入 + virtual std::vector getUserInput() = 0; + + // 显示/éšè—图层 + virtual void setLayerVisible(const std::string& layerName, bool visible) = 0; + + // 添加自定义覆盖物 + virtual void addOverlay(const std::vector& points, + const std::string& color, + const std::string& label) = 0; + + // 清除覆盖物 + virtual void clearOverlays() = 0; + + // ä¿å­˜æ€åŠ¿å›¾ + virtual bool saveImage(const std::string& filename) = 0; + + // è·å–视å£ä¿¡æ¯ + virtual struct { + GeoCoordinate center; + double zoomLevel; + double rotation; + } getViewport() = 0; +}; + +// 基äºQtçš„3Då¯è§†åŒ–å®ç° +class Qt3DVisualization : public VisualizationInterface { +public: + Qt3DVisualization(); + ~Qt3DVisualization() override; + + bool initialize(int width, int height, const std::string& title) override; + void renderSituation(const BattlefieldSituation& situation) override; + void renderDecisions(const std::vector& decisions) override; + void updateMapData(const std::vector& terrain, + const std::vector& labels) override; + void setClickCallback(std::function callback) override; + void setSelectCallback(std::function callback) override; + std::vector getUserInput() override; + void setLayerVisible(const std::string& layerName, bool visible) override; + void addOverlay(const std::vector& points, + const std::string& color, + const std::string& label) override; + void clearOverlays() override; + bool saveImage(const std::string& filename) override; + struct { GeoCoordinate center; double zoomLevel; double rotation; } getViewport() override; + +private: + class Impl; + std::unique_ptr pImpl; +}; + +} // namespace Battlefield + +#endif // VISUALIZATION_INTERFACE_H \ No newline at end of file