#pragma once #include "BgViewer/viewerCtrl/mainloop.h" #include "bdv_helper.h" #include "buildingviewercommon_export.h" #include "logger.h" #include #include #include #include #include #include #include class QWidget; namespace LtsPluginManager { class LtsPluginManager; } namespace BuildingViewer { class CommunicationInterfaceInternal; class BuildingViewerDdsController; class PluginProvider; class BUILDINGVIEWERCOMMON_EXPORT BgViewerController : public QObject { Q_OBJECT public: explicit BgViewerController(QObject* parent = nullptr); ~BgViewerController(); void clearInterfaces(const LtsSession::DdsConnectionParams& conParams); bool isBgViewerApplicationRunning() const; LtsSession::DdsConnectionParams currentDdsConnParams() const; bool startBgViewerAppInSession(PluginProvider* pStartingSession); void openBuilding(const QString& strBuildingFeatureId); void closeBuilding(const QString& strBuildingFeatureId = QString()); bool forceInit(PluginProvider* pSession); void updatePlayerSymbols(int size); void closeAll(); QWidget* getBgViewerWidget(); bool init(PluginProvider* pSession, bool bStartRendering = false, const QString& modelPath = buildingModelPath()); PluginProvider* activeSession() const; void excConnect(const std::vector& paths, const QString& strXMLFile = QString()); void excGetBuildingList(); void excGetViewState(); void excHighlightView(const QString& strFeatureID); void excRestoreViewState(const QJsonValue& state); void excSetGlobalDotsMode(bool useDots); void excSetGlobalTransparency(double transparency); void excSetGlobalViewMode(bool useOrtho); void excSetHitlineDuration(uint32_t duration_s); void excStartRecording(const QString& strPathOutputFolder, const QString& strFeatureID = QStringLiteral("all"), int w = 800, int h = 600, int framerate = 20, int quality = 100); void excStopRecording(const QString& strFeatureID = QStringLiteral("all")); static QString buildingModelPath(); LtsPluginManager::LtsPluginManager* app() { return m_bgvApp; } Q_SIGNALS: void bgvAppIsInitialized(); void signalBgViewerInitFinished(); void signalReceivedBuildingList(const QVector& list); void signalReceivedViewState(const QJsonValue& state); void signalViewerEventButton(); void signalPlayerPicked(int playerId); void signalAssetPicked(int structureElementId); void signalViewerEventWidgetClosed(const QString& featureID); void signalViewerEventWidgetMaximized(const QString& featureID); void signalViewerEventWidgetMinimized(const QString& featureID); void signalViewerEventWidgetFocused(const QString& featureID); void signalViewerEventRoomNameClicked(const QString& featureID, const QString& roomID); void signalViewerZoomChanged(const QString& featureId, double top, double left, double bottom, double right); public slots: void slotStartRecording(const QString& strFolderPath, const QJsonValue& state); void slotStopRecording(); void hideLiveVideo(); private slots: void slotLoadBuilding(); void slotWidgetReleased(); private: NGL::INGLLogger& m_logger; void showBgViewerInfoMessageBox(); private: VCtrl::MainLoop m_mainloop; bool m_widgetStolen; std::vector m_buildingsToShow; CommunicationInterfaceInternal* m_comIfc{nullptr}; VCtrl::ViewerInterface* m_viewerInterface{nullptr}; BuildingViewerDdsController* m_pBgViewerDDSController; bool m_initExerciseWasSuccessful{false}; LtsSession::DdsConnectionParams m_currentDdsConnParams; LtsPluginManager::LtsPluginManager* m_bgvApp; bool m_bgvAppIsInitialized{false}; QTimer* m_tickTimer{nullptr}; QWidget* m_bgViewerBaseLayoutWidget{nullptr}; }; } // namespace BuildingViewer