/** * @RDE_HEADER@ * Interface-Implementation of Viewshed * $Id$ * $HeadURL$ * $Author$ */ #pragma once // Own #include // Interface #include "map_impl.h" #include "Rubberbands/rubberband_ellipse.h" #include "Rubberbands/rubberband_multi_point_feature_3d.h" // Qt #include //---------------------------------------------------------------------------- namespace SituationMap { class ViewshedBase; class ViewshedImpl : public /*virtual*/ Viewshed { using BaseClass = Viewshed; public: explicit ViewshedImpl(SituationMap::MapImpl *mapImpl); virtual ~ViewshedImpl(); ViewshedImpl(const ViewshedImpl &other) = delete; ViewshedImpl &operator=(ViewshedImpl &other) = delete; void setViewshedUrl(const QString &viewshedServiceUrl) override; bool isReady(); bool create() override; bool create(double alpha, double innerRadius, double observerHeight, double targetHeight, double beamAngle) override; long create(const ViewshedParameter &viewshedParameter) override; bool modify(long viewshedId, double alpha, double innerRadius, double observerHeight, double targetHeight, double beamAngle) override; void remove(long viewshedId = -1) override; ViewshedParameter getViewshedParameter(long viewshedId = -1, bool *ok = nullptr) const override; private Q_SLOTS: void onRbAbort(RB::RubberbandBase *rbnd); void onRb2DApply(RB::RubberbandBase *rbnd); void onRb3DApply(RB::RubberbandBase *rbnd); void onSightFanRb2DApply(RB::RubberbandBase *rbnd); void onSightFanRb3DApply(RB::RubberbandBase *rbnd); private: ViewshedBase *create_viewshedGP(const ViewshedParameter &viewshedParameter); ViewshedBase *create_viewshedAnalysis(const ViewshedParameter &viewshedParameter); void init(); RB::RubberbandEllipse *createRubberband2D(); RB::RubberbandMultiPointFeature3D *createRubberband3D(); RB::RubberbandEllipse *createSightFanRubberband2D(); RB::RubberbandMultiPointFeature3D *createSightFanRubberband3D(); LOGGER_T m_logger; ///< Interface of the Logging-Facility class Private; /** * The private d->pointer to not break BC when changing internals of this class */ Private *d = nullptr; }; // ViewshedImpl } // namespace SituationMap