DYTSrouce/src/viewer/OsgViewUI.cpp

68 lines
1.8 KiB
C++
Raw Normal View History

2025-01-12 17:35:51 +00:00
#include "viewer/OsgViewUI.h"
#include <osg/Matrix>
#include <osgViewer/ViewerEventHandlers>
#include <osgWidget/ViewerEventHandlers>
#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;
}
}
}