修改osgearth ui
This commit is contained in:
parent
ea260fcaaa
commit
9b47b518d5
19
src/main.cpp
19
src/main.cpp
@ -373,26 +373,25 @@ protected:
|
|||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
SpdLogger logger("logs/log.txt", 5);
|
SpdLogger logger("logs/log.txt", 5);
|
||||||
//
|
//
|
||||||
// Application::setAttribute(Qt::AA_EnableHighDpiScaling);
|
Application::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||||
//
|
//
|
||||||
// Application app(argc, argv);
|
Application app(argc, argv);
|
||||||
// app.setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
|
app.setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
|
||||||
// InstallCrashHandler();
|
// InstallCrashHandler();
|
||||||
//
|
//
|
||||||
// RecourceHelper::ChangeSkin("default");
|
RecourceHelper::ChangeSkin("default");
|
||||||
|
|
||||||
|
MainFrame mainWindow;
|
||||||
|
mainWindow.showMaximized();
|
||||||
//
|
//
|
||||||
// MainFrame mainWindow;
|
int ret = app.exec();
|
||||||
// mainWindow.showMaximized();
|
return ret;
|
||||||
//
|
|
||||||
// int ret = app.exec();
|
|
||||||
// return ret;
|
|
||||||
|
|
||||||
osg::ArgumentParser arguments(&argc, argv);
|
osg::ArgumentParser arguments(&argc, argv);
|
||||||
|
|
||||||
// Qt5 is currently crashing and reporting "Cannot make QOpenGLContext current in a different thread" when the viewer is run multi-threaded, this is regression from Qt4
|
// Qt5 is currently crashing and reporting "Cannot make QOpenGLContext current in a different thread" when the viewer is run multi-threaded, this is regression from Qt4
|
||||||
osgViewer::ViewerBase::ThreadingModel threadingModel = osgViewer::ViewerBase::SingleThreaded;
|
osgViewer::ViewerBase::ThreadingModel threadingModel = osgViewer::ViewerBase::SingleThreaded;
|
||||||
|
|
||||||
QApplication app(argc, argv);
|
|
||||||
OsgWidget* viewWidget = new OsgWidget(nullptr, Qt::Widget);
|
OsgWidget* viewWidget = new OsgWidget(nullptr, Qt::Widget);
|
||||||
// ViewerWidget* viewWidget = new ViewerWidget(nullptr, Qt::Widget, threadingModel);
|
// ViewerWidget* viewWidget = new ViewerWidget(nullptr, Qt::Widget, threadingModel);
|
||||||
viewWidget->setGeometry( 100, 100, 800, 600 );
|
viewWidget->setGeometry( 100, 100, 800, 600 );
|
||||||
|
@ -1,8 +1,31 @@
|
|||||||
#include "CompositeHandle.h"
|
#include "CompositeHandle.h"
|
||||||
|
#include <osgEarthUtil/EarthManipulator>
|
||||||
#include "CompositeWidgetManager.h"
|
#include "CompositeWidgetManager.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
|
||||||
|
#define M_PI 3.14159265358979323846 /* mathematical constant pi */
|
||||||
|
|
||||||
|
///Radian to degree conversion factor
|
||||||
|
static const double RAD2DEG = 180.0 / M_PI;
|
||||||
|
///Degree to radian conversion factor
|
||||||
|
static const double DEG2RAD = M_PI / 180.0;
|
||||||
|
|
||||||
|
inline double angFix360(double in) {
|
||||||
|
in -= 45.0;
|
||||||
|
if ((in < 0.0) || (in >= 360.0)) {
|
||||||
|
in = fmod(in, 360.0);
|
||||||
|
|
||||||
|
if (in < 0.0)
|
||||||
|
in += 360.0;
|
||||||
|
}
|
||||||
|
return in;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool areEqual(double a, double b, double t = 1.0e-6) {
|
||||||
|
return fabs(a - b) < t;
|
||||||
|
}
|
||||||
|
|
||||||
CompositeHandle::CompositeHandle(CompositeWidgetManager* cw)
|
CompositeHandle::CompositeHandle(CompositeWidgetManager* cw)
|
||||||
: _cw(cw),
|
: _cw(cw),
|
||||||
_operate(cw->GetcanvasO()),
|
_operate(cw->GetcanvasO()),
|
||||||
@ -17,7 +40,32 @@ CompositeHandle::CompositeHandle(CompositeWidgetManager* cw)
|
|||||||
bool CompositeHandle::handle(const osgGA::GUIEventAdapter&ea, osgGA::GUIActionAdapter& aa)
|
bool CompositeHandle::handle(const osgGA::GUIEventAdapter&ea, osgGA::GUIActionAdapter& aa)
|
||||||
{
|
{
|
||||||
if (ea.getEventType() == osgGA::GUIEventAdapter::FRAME) {
|
if (ea.getEventType() == osgGA::GUIEventAdapter::FRAME) {
|
||||||
|
constexpr double TWO_DECIMAL_PLACES = 1e-02;
|
||||||
|
double heading = 0.0;
|
||||||
|
osgViewer::View* activeView = static_cast<osgViewer::View*>(aa.asView());
|
||||||
|
const osgEarth::Util::EarthManipulator* manip = dynamic_cast<const osgEarth::Util::EarthManipulator*>(activeView->getCameraManipulator());
|
||||||
|
if (manip != NULL)
|
||||||
|
{
|
||||||
|
manip->getCompositeEulerAngles(&heading);
|
||||||
|
// Convert to degrees
|
||||||
|
heading = angFix360(heading * RAD2DEG);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Fall back to the viewpoint's heading
|
||||||
|
heading = angFix360(manip->getViewpoint().heading()->as(osgEarth::Units::DEGREES));
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure that anything equivalent to 0.00 is displayed as 0.00
|
||||||
|
if (areEqual(heading, 0.0, TWO_DECIMAL_PLACES) || areEqual(heading, 360.0, TWO_DECIMAL_PLACES)) {
|
||||||
|
heading = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!areEqual(_N->getRotate(), -heading, TWO_DECIMAL_PLACES))
|
||||||
|
{
|
||||||
|
_N->setRotate(-heading);
|
||||||
|
_N->update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// compass_->update_();
|
// compass_->update_();
|
||||||
|
|
||||||
|
@ -29,13 +29,13 @@ void OESceneUI::InitUI(OsgViewUI* ui) {
|
|||||||
|
|
||||||
compositeWidgetManager_ = new CompositeWidgetManager();
|
compositeWidgetManager_ = new CompositeWidgetManager();
|
||||||
compositeWidgetManager_->AttachViewUI(ui);
|
compositeWidgetManager_->AttachViewUI(ui);
|
||||||
zoomManager_ = new ZoomManager(oeScene_);
|
//zoomManager_ = new ZoomManager(oeScene_);
|
||||||
zoomManager_->AttachViewUI(ui);
|
//zoomManager_->AttachViewUI(ui);
|
||||||
|
|
||||||
queryElevationWidget_ = new QueryElevationWidget(oeScene_);
|
queryElevationWidget_ = new QueryElevationWidget(oeScene_);
|
||||||
queryElevationWidget_->AttachViewUI(ui);
|
queryElevationWidget_->AttachViewUI(ui);
|
||||||
|
|
||||||
ui->getView()->addEventHandler(new ZoomHandle(zoomManager_, compositeWidgetManager_));
|
//ui->getView()->addEventHandler(new ZoomHandle(zoomManager_, compositeWidgetManager_));
|
||||||
ui->getView()->addEventHandler(new CompositeHandle(compositeWidgetManager_));
|
ui->getView()->addEventHandler(new CompositeHandle(compositeWidgetManager_));
|
||||||
|
|
||||||
isInit_ = true;
|
isInit_ = true;
|
||||||
@ -44,9 +44,9 @@ void OESceneUI::InitUI(OsgViewUI* ui) {
|
|||||||
|
|
||||||
void OESceneUI::OnResize(double width, double height) {
|
void OESceneUI::OnResize(double width, double height) {
|
||||||
dyt_check(compositeWidgetManager_);
|
dyt_check(compositeWidgetManager_);
|
||||||
dyt_check(zoomManager_);
|
//dyt_check(zoomManager_);
|
||||||
|
|
||||||
compositeWidgetManager_->ResetCanvasPosition(width, height);
|
compositeWidgetManager_->ResetCanvasPosition(width, height);
|
||||||
zoomManager_->ResetCanvasPosition(width, height);
|
//zoomManager_->ResetCanvasPosition(width, height);
|
||||||
queryElevationWidget_->ResetCanvasPosition(width, height);
|
queryElevationWidget_->ResetCanvasPosition(width, height);
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,6 @@ private:
|
|||||||
class OEScene* oeScene_;
|
class OEScene* oeScene_;
|
||||||
bool isInit_{ false };
|
bool isInit_{ false };
|
||||||
osg::ref_ptr<class CompositeWidgetManager> compositeWidgetManager_{ nullptr };
|
osg::ref_ptr<class CompositeWidgetManager> compositeWidgetManager_{ nullptr };
|
||||||
osg::ref_ptr<class ZoomManager> zoomManager_{ nullptr };
|
//osg::ref_ptr<class ZoomManager> zoomManager_{ nullptr };
|
||||||
osg::ref_ptr<class QueryElevationWidget> queryElevationWidget_{ nullptr };
|
osg::ref_ptr<class QueryElevationWidget> queryElevationWidget_{ nullptr };
|
||||||
};
|
};
|
||||||
|
@ -82,6 +82,8 @@ void ZoomManager::slotZoom() {
|
|||||||
double dx = val*(-1.0)*(0.0005);// dx不起作用
|
double dx = val*(-1.0)*(0.0005);// dx不起作用
|
||||||
double dy = val*(-1.0)*(0.0005);
|
double dy = val*(-1.0)*(0.0005);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
// dx *= getSettings()->getMouseSensitivity();
|
// dx *= getSettings()->getMouseSensitivity();
|
||||||
// dy *= getSettings()->getMouseSensitivity();
|
// dy *= getSettings()->getMouseSensitivity();
|
||||||
|
|
||||||
|
@ -21,6 +21,9 @@ public:
|
|||||||
osgWidget::Canvas* GetCanvasZoom() {
|
osgWidget::Canvas* GetCanvasZoom() {
|
||||||
return _canvasZoom;
|
return _canvasZoom;
|
||||||
}
|
}
|
||||||
|
osgWidget::Widget* GetBar() const {
|
||||||
|
return _bar;
|
||||||
|
}
|
||||||
|
|
||||||
void AttachViewUI(class OsgViewUI* ui);
|
void AttachViewUI(class OsgViewUI* ui);
|
||||||
//
|
//
|
||||||
|
@ -38,11 +38,14 @@ bool ZoomWidget::mousePush(double x, double y, const osgWidget::WindowManager*
|
|||||||
if ("lessen" == _order)
|
if ("lessen" == _order)
|
||||||
{
|
{
|
||||||
_pZoomManager->zoom = -43;
|
_pZoomManager->zoom = -43;
|
||||||
|
UpdateBarPosition(_pZoomManager->zoom);
|
||||||
}
|
}
|
||||||
else if ("enlargement" == _order)
|
else if ("enlargement" == _order)
|
||||||
{
|
{
|
||||||
_pZoomManager->zoom = 43;
|
_pZoomManager->zoom = 43;
|
||||||
|
UpdateBarPosition(_pZoomManager->zoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
setColor(1, 1, 1, 1);
|
setColor(1, 1, 1, 1);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -51,48 +54,55 @@ bool ZoomWidget::mouseRelease(double x, double y, const osgWidget::WindowManager
|
|||||||
{
|
{
|
||||||
_pZoomManager->state = ZoomManager::MOUSE_RELEASE;
|
_pZoomManager->state = ZoomManager::MOUSE_RELEASE;
|
||||||
|
|
||||||
if ("bar" == _order)
|
//if ("bar" == _order)
|
||||||
{
|
//{
|
||||||
setOrigin(0, 67);
|
// setOrigin(0, 67);
|
||||||
getParent()->getByName("bar_")->setOrigin(0, 66);
|
// getParent()->getByName("bar_")->setOrigin(0, 66);
|
||||||
getParent()->resize();
|
// getParent()->resize();
|
||||||
}
|
//}
|
||||||
_pZoomManager->zoom = 0.0;
|
_pZoomManager->zoom = 0.0;
|
||||||
|
UpdateBarPosition(_pZoomManager->zoom);
|
||||||
setColor(1, 1, 1, 0);
|
setColor(1, 1, 1, 0);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
//bool ZoomWidget::mouseDrag(double x, double y, const osgWidget::WindowManager* wm)
|
||||||
|
//{
|
||||||
|
// if (_order == "bar")
|
||||||
|
// {
|
||||||
|
// _pointX += x;
|
||||||
|
// _pointY += y;
|
||||||
|
//
|
||||||
|
// while (_pZoomManager->zoom > 43)
|
||||||
|
// _pZoomManager->zoom = 43;
|
||||||
|
// while (_pZoomManager->zoom < -43)
|
||||||
|
// _pZoomManager->zoom = -43;
|
||||||
|
//
|
||||||
|
// if (y > 43 - _pZoomManager->zoom)
|
||||||
|
// {
|
||||||
|
// y = 43 - _pZoomManager->zoom;
|
||||||
|
// }
|
||||||
|
// if (y < -43 - _pZoomManager->zoom)
|
||||||
|
// {
|
||||||
|
// y = -43 - _pZoomManager->zoom;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (_pZoomManager->zoom >= -43 && _pZoomManager->zoom <= 43)
|
||||||
|
// {
|
||||||
|
// /*addOrigin(0, y);
|
||||||
|
// getParent()->getByName("bar_")->addOrigin(0, y);*/
|
||||||
|
// double y1 = _pZoomManager->GetBar()->getOrigin().y();
|
||||||
|
// UpdateBarPosition(y + y1);
|
||||||
|
// _pZoomManager->zoom += y;
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// _pZoomManager->zoom += y;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return true;
|
||||||
|
//}
|
||||||
|
|
||||||
bool ZoomWidget::mouseDrag(double x, double y, const osgWidget::WindowManager* wm)
|
void ZoomWidget::UpdateBarPosition(double y) {
|
||||||
{
|
_pZoomManager->GetBar()->setOrigin(0, 67 + y * 0.5);
|
||||||
if (_order == "bar")
|
_pZoomManager->GetCanvasZoom()->update();
|
||||||
{
|
|
||||||
_pointX += x;
|
|
||||||
_pointY += y;
|
|
||||||
|
|
||||||
while (_pZoomManager->zoom > 43)
|
|
||||||
_pZoomManager->zoom = 43;
|
|
||||||
while (_pZoomManager->zoom < -43)
|
|
||||||
_pZoomManager->zoom = -43;
|
|
||||||
|
|
||||||
if (y > 43 - _pZoomManager->zoom)
|
|
||||||
{
|
|
||||||
y = 43 - _pZoomManager->zoom;
|
|
||||||
}
|
|
||||||
if (y < -43 - _pZoomManager->zoom)
|
|
||||||
{
|
|
||||||
y = -43 - _pZoomManager->zoom;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_pZoomManager->zoom >= -43 && _pZoomManager->zoom <= 43)
|
|
||||||
{
|
|
||||||
addOrigin(0, y);
|
|
||||||
getParent()->getByName("bar_")->addOrigin(0, y);
|
|
||||||
_pZoomManager->zoom += y;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_pZoomManager->zoom += y;
|
|
||||||
}
|
|
||||||
getParent()->resize();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
@ -25,11 +25,12 @@ public:
|
|||||||
|
|
||||||
bool mousePush(double, double, const osgWidget::WindowManager*);
|
bool mousePush(double, double, const osgWidget::WindowManager*);
|
||||||
bool mouseRelease(double, double, const osgWidget::WindowManager*);
|
bool mouseRelease(double, double, const osgWidget::WindowManager*);
|
||||||
bool mouseDrag(double, double, const osgWidget::WindowManager*);
|
//bool mouseDrag(double, double, const osgWidget::WindowManager*);
|
||||||
|
|
||||||
std::string GetOrder() { return _order; }
|
std::string GetOrder() { return _order; }
|
||||||
double GetPointerX() { return _pointX; }
|
double GetPointerX() { return _pointX; }
|
||||||
double GetpointerY() { return _pointY; }
|
double GetpointerY() { return _pointY; }
|
||||||
|
void UpdateBarPosition(double y);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
double _pointX;
|
double _pointX;
|
||||||
|
Loading…
Reference in New Issue
Block a user