68 lines
1.8 KiB
C++
68 lines
1.8 KiB
C++
|
|
#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;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|