#include "viewer/OsgViewUI.h" #include #include #include #include "config.h" #include "common/SpdLogger.h" #include "viewer/KeyMapQtOsg.h" #include "viewer/OsgCameraManipulator.h" const unsigned int MASK_2D = 0xF0000000; const unsigned int MASK_3D = 0x0F000000; OsgViewUI::OsgViewUI(osgViewer::View* view/*= 0*/, osgWidget::point_type width, osgWidget::point_type height) noexcept : osgWidget::WindowManager(view, width, height, MASK_2D, 0) { hudCamera_ = createParentOrthoCamera(); dyt_check(hudCamera_); hudCamera_->setName("OsgViewUI"); osg::Group* root = view->getSceneData()->asGroup(); root->addChild(hudCamera_); view->addEventHandler(new osgWidget::MouseHandler(this)); view->addEventHandler(new osgWidget::KeyboardHandler(this)); view->addEventHandler(new osgWidget::ResizeHandler(this, hudCamera_)); view->addEventHandler(new osgWidget::CameraSwitchHandler(this, hudCamera_)); view->addEventHandler(new osgViewer::WindowSizeHandler()); } void OsgViewUI::Resize(double width, double height) { setSize(width, height); setWindowSize(width, height); hudCamera_->setProjectionMatrix(osg::Matrix::ortho2D(0.0, width, 0.0f, height)); for (auto& ui : viewUIs_) { ui->OnResize(width, height); } resizeAllWindows(); } void OsgViewUI::AddUI(OsgViewUI::ViewUI* viewUI) { if (nullptr == viewUI) { return; } for (auto& ui : viewUIs_) { if (ui == viewUI) { return; } } viewUI->InitUI(this); viewUIs_.push_back(viewUI); } void OsgViewUI::RemoveUI(OsgViewUI::ViewUI* viewUI) { for (auto it = viewUIs_.begin(); it != viewUIs_.end(); ++it) { if (*it == viewUI) { viewUIs_.erase(it); return; } } }