#include "viewer/OsgView.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "config.h" #include "common/SpdLogger.h" #include "viewer/KeyMapQtOsg.h" #include "viewer/OsgCameraManipulator.h" #include "viewer/OsgViewUI.h" OsgView::OsgView(QObject* parent) noexcept : QObject(parent) { LOG_INFO("actor, self={}", fmt::ptr(this)); } OsgView::~OsgView() { LOG_INFO("dctor, self={}", fmt::ptr(this)); } void OsgView::InitView(osgViewer::View* pView) { if (nullptr == pView) { return; } view_ = pView; } osgViewer::View* OsgView::GetView() const { return view_.get(); } void OsgView::Initialize(OsgCameraManipulator* cameraManipulator) { if (initialized_) { return; } if (nullptr != cameraManipulator) { cameraManipulator->Initialize(); SetCameraManipulator(cameraManipulator); } if (!viewUI_.valid()) { const osg::Viewport* viewport = view_->getCamera()->getViewport(); osg::Viewport::value_type width = viewport->width(); osg::Viewport::value_type height = viewport->height(); viewUI_ = new OsgViewUI(view_, width, height); osg::Group* root = view_->getSceneData()->asGroup(); dyt_check(nullptr != root); root->addChild(viewUI_.get()); } view_->addEventHandler(new osgViewer::StatsHandler); view_->addEventHandler(new osgGA::StateSetManipulator(view_->getCamera()->getOrCreateStateSet())); initialized_ = true; } void OsgView::Uninitialize(void) { if (!initialized_) { return; } initialized_ = false; } bool OsgView::SetCameraManipulator(OsgCameraManipulator* cameraManipulator) { assert(view_.valid()); if (cameraManipulator_ == cameraManipulator) { return false; } osgGA::CameraManipulator* cameraMainp = cameraManipulator->GetManipulator(); if (nullptr == cameraMainp) { return false; } cameraManipulator_ = cameraManipulator; view_->setCameraManipulator(cameraMainp); return true; }