moidyf render
This commit is contained in:
parent
32ed1bf037
commit
ad02144014
@ -26,7 +26,7 @@ QString Application::GetWorkSpacePath() {
|
|||||||
|
|
||||||
void Application::Init() {
|
void Application::Init() {
|
||||||
Singleton<MeshManager>::Create(this);
|
Singleton<MeshManager>::Create(this);
|
||||||
//Singleton<OsgViewer>::Create(this);
|
Singleton<OsgViewer>::Create(this);
|
||||||
Singleton<RecourceHelper>::Create(this);
|
Singleton<RecourceHelper>::Create(this);
|
||||||
Singleton<EntitiesManager>::Create(this);
|
Singleton<EntitiesManager>::Create(this);
|
||||||
Singleton<WorkSpaceManager>::Create(this);
|
Singleton<WorkSpaceManager>::Create(this);
|
||||||
@ -40,6 +40,6 @@ void Application::Uninit() {
|
|||||||
Singleton<WorkSpaceManager>::Destory();
|
Singleton<WorkSpaceManager>::Destory();
|
||||||
Singleton<EntitiesManager>::Destory();
|
Singleton<EntitiesManager>::Destory();
|
||||||
Singleton<RecourceHelper>::Destory();
|
Singleton<RecourceHelper>::Destory();
|
||||||
//Singleton<OsgViewer>::Destory();
|
Singleton<OsgViewer>::Destory();
|
||||||
Singleton<MeshManager>::Destory();
|
Singleton<MeshManager>::Destory();
|
||||||
}
|
}
|
||||||
|
@ -55,10 +55,10 @@ void OEScene::AttachView(OsgView* view) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AttachView(view->GetView());
|
//AttachView(view->GetView());
|
||||||
}
|
}
|
||||||
|
|
||||||
void OEScene::AttachView(osgViewer::View* view) {
|
void OEScene::AttachView(osgViewer::Viewer* view) {
|
||||||
earthRootNode_ = osgDB::readNodeFile("triton.earth");
|
earthRootNode_ = osgDB::readNodeFile("triton.earth");
|
||||||
if (!earthRootNode_) {
|
if (!earthRootNode_) {
|
||||||
LOG_ERROR("read earth node(triton.earth) failed");
|
LOG_ERROR("read earth node(triton.earth) failed");
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include <osgEarth/ModelNode>
|
#include <osgEarth/ModelNode>
|
||||||
#include <osgEarth/Sky>
|
#include <osgEarth/Sky>
|
||||||
#include <osgEarth/LogarithmicDepthBuffer>
|
#include <osgEarth/LogarithmicDepthBuffer>
|
||||||
|
#include <osgViewer/Viewer>
|
||||||
|
|
||||||
//#include "scene/SkyDome.h"
|
//#include "scene/SkyDome.h"
|
||||||
|
|
||||||
@ -22,7 +23,7 @@ public:
|
|||||||
void InitEventHandle(OsgView* view);
|
void InitEventHandle(OsgView* view);
|
||||||
void InitEventHandle(osgViewer::View* view);
|
void InitEventHandle(osgViewer::View* view);
|
||||||
void AttachView(OsgView* view);
|
void AttachView(OsgView* view);
|
||||||
void AttachView(osgViewer::View* view);
|
void AttachView(osgViewer::Viewer* view);
|
||||||
void DetachView(OsgView* view);
|
void DetachView(OsgView* view);
|
||||||
|
|
||||||
osg::ref_ptr<osg::TextureCubeMap> LoadCubeMapTextures(const std::string& dir);
|
osg::ref_ptr<osg::TextureCubeMap> LoadCubeMapTextures(const std::string& dir);
|
||||||
|
@ -1254,18 +1254,12 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>QtOsgViewWidget</name>
|
<name>QtOsgViewWidget</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../viewer/QtOsgViewWidget.cpp" line="369"/>
|
<location filename="../viewer/QtOsgViewWidget.cpp" line="273"/>
|
||||||
<location filename="../viewer/QtOsgViewWidget.cpp" line="377"/>
|
|
||||||
<source>warning</source>
|
<source>warning</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../viewer/QtOsgViewWidget.cpp" line="369"/>
|
<location filename="../viewer/QtOsgViewWidget.cpp" line="273"/>
|
||||||
<source>default workspace failed</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../viewer/QtOsgViewWidget.cpp" line="377"/>
|
|
||||||
<source>open dyt file failed</source>
|
<source>open dyt file failed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -83,8 +83,8 @@ void MainWindow::InitUI() {
|
|||||||
connect(modelBrowser_, &ModelBrowser::WorkSpaceChange, propertyBrowser_, &PropertyBrowser::OnWorkSpaceChange);
|
connect(modelBrowser_, &ModelBrowser::WorkSpaceChange, propertyBrowser_, &PropertyBrowser::OnWorkSpaceChange);
|
||||||
connect(modelBrowser_, &ModelBrowser::EntityChange, propertyBrowser_, &PropertyBrowser::OnEntityChange);
|
connect(modelBrowser_, &ModelBrowser::EntityChange, propertyBrowser_, &PropertyBrowser::OnEntityChange);
|
||||||
|
|
||||||
//qtOsgViewWidget_ = new ViewWidget;
|
qtOsgViewWidget_ = new ViewWidget;
|
||||||
qtOsgViewWidget_ = new OsgOpenGLWindow;
|
//qtOsgViewWidget_ = new OsgOpenGLWindow;
|
||||||
//qtOsgViewWidget_->Initialize();
|
//qtOsgViewWidget_->Initialize();
|
||||||
m_mapDockWidget.insert("PropertyBrowser", attribte);
|
m_mapDockWidget.insert("PropertyBrowser", attribte);
|
||||||
|
|
||||||
@ -212,8 +212,7 @@ void MainWindow::InitUI() {
|
|||||||
|
|
||||||
//ui->viewWidget->layout()->addWidget(qtOsgViewWidget_);
|
//ui->viewWidget->layout()->addWidget(qtOsgViewWidget_);
|
||||||
//qtOsgViewWidget_->LoadDefaultScene();
|
//qtOsgViewWidget_->LoadDefaultScene();
|
||||||
//OsgViewer::Get().Initialize();
|
|
||||||
//OsgViewer::Get().OnFrame();
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
MatlabObject* mtlb = new MatlabObject;
|
MatlabObject* mtlb = new MatlabObject;
|
||||||
@ -237,8 +236,8 @@ void MainWindow::InitDockLayout() {
|
|||||||
|
|
||||||
tabWidget_->insertTab(i, mainWindow_, strTabName);
|
tabWidget_->insertTab(i, mainWindow_, strTabName);
|
||||||
if (listDocArea[0].toList().size() > 0) {
|
if (listDocArea[0].toList().size() > 0) {
|
||||||
//mainWindow_->setCentralWidget(qtOsgViewWidget_);
|
mainWindow_->setCentralWidget(qtOsgViewWidget_);
|
||||||
mainWindow_->setCentralWidget(qtOsgViewWidget_->AsWidget());
|
//mainWindow_->setCentralWidget(qtOsgViewWidget_->AsWidget());
|
||||||
//OsgViewer::Get().Initialize();
|
//OsgViewer::Get().Initialize();
|
||||||
//OsgViewer::Get().OnFrame();
|
//OsgViewer::Get().OnFrame();
|
||||||
} else {
|
} else {
|
||||||
|
@ -55,8 +55,8 @@ private:
|
|||||||
class ModelBrowser* modelBrowser_{ nullptr };
|
class ModelBrowser* modelBrowser_{ nullptr };
|
||||||
class PropertyBrowser* propertyBrowser_{ nullptr };
|
class PropertyBrowser* propertyBrowser_{ nullptr };
|
||||||
class QWebEngineView* webEngineView_{ nullptr };
|
class QWebEngineView* webEngineView_{ nullptr };
|
||||||
//class ViewWidget* qtOsgViewWidget_{ nullptr };
|
class ViewWidget* qtOsgViewWidget_{ nullptr };
|
||||||
class OsgOpenGLWindow* qtOsgViewWidget_{ nullptr };
|
//class OsgOpenGLWindow* qtOsgViewWidget_{ nullptr };
|
||||||
|
|
||||||
class FitCurveDialog* fitCurveDlg_{ nullptr };
|
class FitCurveDialog* fitCurveDlg_{ nullptr };
|
||||||
class FitCurveDialog* fitYLgCurveDlg_{ nullptr };
|
class FitCurveDialog* fitYLgCurveDlg_{ nullptr };
|
||||||
|
@ -107,6 +107,12 @@ namespace {
|
|||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GraphicsWindowEx::GraphicsWindowEx(osg::GraphicsContext::Traits* traits)
|
||||||
|
: osgViewer::GraphicsWindowEmbedded(traits) {
|
||||||
|
LOG_INFO("actor, self={}", spdlog::fmt_lib::ptr(this));
|
||||||
|
}
|
||||||
|
|
||||||
GraphicsWindowEx::GraphicsWindowEx(int x, int y, int width, int height)
|
GraphicsWindowEx::GraphicsWindowEx(int x, int y, int width, int height)
|
||||||
: osgViewer::GraphicsWindowEmbedded(x, y, width == 0 ? 1 : width, height == 0 ? 1 : height) {
|
: osgViewer::GraphicsWindowEmbedded(x, y, width == 0 ? 1 : width, height == 0 ? 1 : height) {
|
||||||
LOG_INFO("actor, self={}", spdlog::fmt_lib::ptr(this));
|
LOG_INFO("actor, self={}", spdlog::fmt_lib::ptr(this));
|
||||||
@ -118,75 +124,76 @@ GraphicsWindowEx::~GraphicsWindowEx() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool GraphicsWindowEx::realizeImplementation() {
|
bool GraphicsWindowEx::realizeImplementation() {
|
||||||
LOG_INFO("realizeImplementation, isRealized_:{}, self={}", isRealized_, spdlog::fmt_lib::ptr(this));
|
//LOG_INFO("realizeImplementation, isRealized_:{}, self={}", isRealized_, spdlog::fmt_lib::ptr(this));
|
||||||
if (isRealized_) {
|
//if (isRealized_) {
|
||||||
return true;
|
// return true;
|
||||||
}
|
//}
|
||||||
|
|
||||||
dyt_check(nullptr != _state);
|
//dyt_check(nullptr != _state);
|
||||||
_state->resetVertexAttributeAlias(false);
|
//_state->resetVertexAttributeAlias(false);
|
||||||
|
|
||||||
_state->setModeValidity(GL_LIGHTING, false);
|
//_state->setModeValidity(GL_LIGHTING, false);
|
||||||
_state->setModeValidity(GL_NORMALIZE, false);
|
//_state->setModeValidity(GL_NORMALIZE, false);
|
||||||
_state->setModeValidity(GL_RESCALE_NORMAL, false);
|
//_state->setModeValidity(GL_RESCALE_NORMAL, false);
|
||||||
_state->setModeValidity(GL_LINE_STIPPLE, false);
|
//_state->setModeValidity(GL_LINE_STIPPLE, false);
|
||||||
_state->setModeValidity(GL_LINE_SMOOTH, false);
|
//_state->setModeValidity(GL_LINE_SMOOTH, false);
|
||||||
|
|
||||||
isRealized_ = true;
|
//isRealized_ = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GraphicsWindowEx::makeCurrentImplementation() {
|
bool GraphicsWindowEx::makeCurrentImplementation() {
|
||||||
LOG_INFO("makeCurrentImplementation, isRealized_:{}, self={}", isRealized_, spdlog::fmt_lib::ptr(this));
|
//LOG_INFO("makeCurrentImplementation, isRealized_:{}, self={}", isRealized_, spdlog::fmt_lib::ptr(this));
|
||||||
|
//
|
||||||
|
//if (nullptr != offScreenContext_) {
|
||||||
|
// offScreenContext_->makeCurrent(offScreenSurface_.get());
|
||||||
|
//}
|
||||||
|
|
||||||
InitOffScreenContext();
|
//InitFrameBuffer();
|
||||||
if (nullptr != offScreenContext_) {
|
|
||||||
offScreenContext_->makeCurrent(offScreenSurface_.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
InitFrameBuffer();
|
|
||||||
|
|
||||||
setDefaultFboId(renderFramebuffer_->handle());
|
|
||||||
renderFramebuffer_->bind();
|
|
||||||
|
|
||||||
|
//setDefaultFboId(renderFramebuffer_->handle());
|
||||||
|
//renderFramebuffer_->bind();
|
||||||
|
//
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsWindowEx::closeImplementation() {
|
void GraphicsWindowEx::closeImplementation() {
|
||||||
if (!isSharedContextSet_) {
|
//if (!isSharedContextSet_) {
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
|
|
||||||
if (isFrameBufferInitialized_) {
|
//if (isFrameBufferInitialized_) {
|
||||||
offScreenContext_->makeCurrent(offScreenSurface_.get());
|
// offScreenContext_->makeCurrent(offScreenSurface_.get());
|
||||||
renderFramebuffer_.reset();
|
// renderFramebuffer_.reset();
|
||||||
sharedFrameBuffer_.reset();
|
// sharedFrameBuffer_.reset();
|
||||||
offScreenContext_->doneCurrent();
|
// offScreenContext_->doneCurrent();
|
||||||
}
|
//}
|
||||||
|
|
||||||
offScreenContext_.reset();
|
//offScreenContext_.reset();
|
||||||
offScreenSurface_.reset();
|
//offScreenSurface_.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GraphicsWindowEx::releaseContextImplementation() {
|
bool GraphicsWindowEx::releaseContextImplementation() {
|
||||||
LOG_INFO("releaseContextImplementation, self={}", spdlog::fmt_lib::ptr(this));
|
//LOG_INFO("releaseContextImplementation, self={}", spdlog::fmt_lib::ptr(this));
|
||||||
QOpenGLFramebufferObject::bindDefault();
|
|
||||||
offScreenContext_->doneCurrent();
|
//QOpenGLFramebufferObject::bindDefault();
|
||||||
|
//offScreenContext_->doneCurrent();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsWindowEx::swapBuffersImplementation() {
|
void GraphicsWindowEx::swapBuffersImplementation() {
|
||||||
offScreenContext_->functions()->glFinish();
|
//offScreenContext_->functions()->glFinish();
|
||||||
frameBufferId_ = renderFramebuffer_->texture();
|
//frameBufferId_ = renderFramebuffer_->texture();
|
||||||
if (!isRenderDonwn_) {
|
//if (!isRenderDonwn_) {
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
qSwap(renderFramebuffer_, sharedFrameBuffer_);
|
//qSwap(renderFramebuffer_, sharedFrameBuffer_);
|
||||||
isRenderDonwn_ = false;
|
//isRenderDonwn_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GraphicsWindowEx::SetSharedContext(QOpenGLContext* sharedContext) {
|
bool GraphicsWindowEx::SetSharedContext(QOpenGLContext* sharedContext) {
|
||||||
sharedContext_ = sharedContext;
|
sharedContext_ = sharedContext;
|
||||||
|
InitOffScreenContext();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
class GraphicsWindowEx : public osgViewer::GraphicsWindowEmbedded {
|
class GraphicsWindowEx : public osgViewer::GraphicsWindowEmbedded {
|
||||||
public:
|
public:
|
||||||
|
GraphicsWindowEx(osg::GraphicsContext::Traits* traits);
|
||||||
GraphicsWindowEx(int x, int y, int width, int height);
|
GraphicsWindowEx(int x, int y, int width, int height);
|
||||||
~GraphicsWindowEx() override;
|
~GraphicsWindowEx() override;
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ bool s_gBChecked = false;
|
|||||||
|
|
||||||
bool OSGEnv::init() {
|
bool OSGEnv::init() {
|
||||||
osgEarth::initialize();
|
osgEarth::initialize();
|
||||||
const osgEarth::Capabilities& csCapabilities = osgEarth::Registry::instance()->getCapabilities();
|
/*const osgEarth::Capabilities& csCapabilities = osgEarth::Registry::instance()->getCapabilities();
|
||||||
s_gBChecked = csCapabilities.supportsGLSL();
|
s_gBChecked = csCapabilities.supportsGLSL();
|
||||||
if (!s_gBChecked) {
|
if (!s_gBChecked) {
|
||||||
return(s_gBChecked);
|
return(s_gBChecked);
|
||||||
@ -45,7 +45,7 @@ bool OSGEnv::init() {
|
|||||||
format.setSwapInterval(traits.vsync ? 1 : 0);
|
format.setSwapInterval(traits.vsync ? 1 : 0);
|
||||||
format.setStereo(traits.quadBufferStereo ? 1 : 0);
|
format.setStereo(traits.quadBufferStereo ? 1 : 0);
|
||||||
|
|
||||||
QSurfaceFormat::setDefaultFormat(format);
|
QSurfaceFormat::setDefaultFormat(format);*/
|
||||||
osgDB::Registry::instance()->getObjectWrapperManager()->findWrapper("osg::Image");
|
osgDB::Registry::instance()->getObjectWrapperManager()->findWrapper("osg::Image");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -33,14 +33,18 @@
|
|||||||
#include <QWheelEvent>
|
#include <QWheelEvent>
|
||||||
|
|
||||||
#include <osgViewer/GraphicsWindow>
|
#include <osgViewer/GraphicsWindow>
|
||||||
|
#include <osgEarth/GLUtils>
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "common/SpdLogger.h"
|
#include "common/SpdLogger.h"
|
||||||
|
#include "workspace/WorkSpaceManager.h"
|
||||||
|
|
||||||
|
|
||||||
OSGRenderer::OSGRenderer(QObject* parent)
|
OSGRenderer::OSGRenderer(QObject* parent)
|
||||||
: QObject(parent), osgViewer::Viewer() {
|
: QObject(parent), osgViewer::Viewer() {
|
||||||
|
setThreadingModel(osgViewer::Viewer::SingleThreaded);
|
||||||
|
connect(this, &OSGRenderer::Initialized, &WorkSpaceManager::Get(), &WorkSpaceManager::OnRendererLoaded);
|
||||||
|
setRealizeOperation(new osgEarth::GL3RealizeOperation());
|
||||||
}
|
}
|
||||||
|
|
||||||
OSGRenderer::~OSGRenderer()
|
OSGRenderer::~OSGRenderer()
|
||||||
@ -63,15 +67,16 @@ void OSGRenderer::Init(osg::GraphicsContext* gc) {
|
|||||||
getCamera()->setReadBuffer(GL_BACK);
|
getCamera()->setReadBuffer(GL_BACK);
|
||||||
getCamera()->setProjectionMatrixAsPerspective(45, 1.0, 0.01, 100.);
|
getCamera()->setProjectionMatrixAsPerspective(45, 1.0, 0.01, 100.);
|
||||||
isInited_ = true;
|
isInited_ = true;
|
||||||
|
|
||||||
|
emit Initialized(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSGRenderer::Resize(GraphicsWindowEx* gc, int width, int height) {
|
void OSGRenderer::Resize(GraphicsWindowEx* gc, int width, int height) {
|
||||||
LOG_INFO("OSGRenderer::Resize {}, gc:{}", isInited_, spdlog::fmt_lib::ptr(gc));
|
|
||||||
dyt_check(nullptr != gc);
|
|
||||||
if (!isInited_) {
|
if (!isInited_) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
LOG_INFO("OSGRenderer::Resize {}, gc:{}", isInited_, spdlog::fmt_lib::ptr(gc));
|
||||||
|
dyt_check(nullptr != gc);
|
||||||
gc->ReizeWindow(width, height);
|
gc->ReizeWindow(width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,6 +65,7 @@ public:
|
|||||||
bool event(QEvent* event) override;
|
bool event(QEvent* event) override;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
void Initialized(OSGRenderer* viewer);
|
||||||
void RenderFlush();
|
void RenderFlush();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -49,6 +49,11 @@ static const char* fragmentShaderSource =
|
|||||||
OsgOpenGLWindow::OsgOpenGLWindow(QWidget* parent)
|
OsgOpenGLWindow::OsgOpenGLWindow(QWidget* parent)
|
||||||
: QOpenGLWindow(QOpenGLWindow::NoPartialUpdate, nullptr) {
|
: QOpenGLWindow(QOpenGLWindow::NoPartialUpdate, nullptr) {
|
||||||
widget_ = QWidget::createWindowContainer(this);
|
widget_ = QWidget::createWindowContainer(this);
|
||||||
|
widget_->setAttribute(Qt::WA_PaintOnScreen, true);
|
||||||
|
widget_->setAttribute(Qt::WA_StaticContents, true);
|
||||||
|
widget_->setAttribute(Qt::WA_NoSystemBackground, true);
|
||||||
|
widget_->setAttribute(Qt::WA_OpaquePaintEvent, true);
|
||||||
|
widget_->setAttribute(Qt::WA_DontCreateNativeAncestors, false);
|
||||||
gw_ = new GraphicsWindowEx(0, 0, width(), height());
|
gw_ = new GraphicsWindowEx(0, 0, width(), height());
|
||||||
renderer_ = new OSGRenderer(this);
|
renderer_ = new OSGRenderer(this);
|
||||||
connect(renderer_, &OSGRenderer::RenderFlush, this, &OsgOpenGLWindow::OnRenderFlush, Qt::QueuedConnection);
|
connect(renderer_, &OSGRenderer::RenderFlush, this, &OsgOpenGLWindow::OnRenderFlush, Qt::QueuedConnection);
|
||||||
|
@ -35,18 +35,25 @@
|
|||||||
|
|
||||||
OsgViewWidget::OsgViewWidget(QWidget* parent /*= nullptr*/)
|
OsgViewWidget::OsgViewWidget(QWidget* parent /*= nullptr*/)
|
||||||
: QGLWidget(parent) {
|
: QGLWidget(parent) {
|
||||||
osgEarth::initialize();
|
//osgEarth::initialize();
|
||||||
osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
|
osg::ref_ptr<osg::DisplaySettings> ds = osg::DisplaySettings::instance();
|
||||||
|
osg::ref_ptr<osg::GraphicsContext::Traits> traits
|
||||||
|
= new osg::GraphicsContext::Traits(ds);
|
||||||
traits->x = 0;
|
traits->x = 0;
|
||||||
traits->y = 0;
|
traits->y = 0;
|
||||||
traits->width = width();
|
traits->width = width();
|
||||||
traits->height = height();
|
traits->height = height();
|
||||||
traits->doubleBuffer = true;
|
traits->alpha = ds->getMinimumNumAlphaBits();
|
||||||
//traits->depth = 32;
|
traits->stencil = ds->getMinimumNumStencilBits();
|
||||||
//traits->samples = 16;
|
traits->sampleBuffers = 2/*ds->getMultiSamples()*/;//_numMultiSamples osg default was 0
|
||||||
traits->sharedContext = nullptr;
|
traits->samples = 4/*ds->getNumMultiSamples()*/;//_numMultiSamples osg default was 0
|
||||||
traits->setInheritedWindowPixelFormat = true;
|
gw_ = new GraphicsWindowEx(traits);
|
||||||
//gw_ = new GraphicsWindowEx(traits.get());
|
|
||||||
|
setAttribute(Qt::WA_PaintOnScreen, true);
|
||||||
|
setAttribute(Qt::WA_StaticContents, true);
|
||||||
|
setAttribute(Qt::WA_NoSystemBackground, true);
|
||||||
|
setAttribute(Qt::WA_OpaquePaintEvent, true);
|
||||||
|
setAttribute(Qt::WA_DontCreateNativeAncestors, false);
|
||||||
setFocusPolicy(Qt::ClickFocus);
|
setFocusPolicy(Qt::ClickFocus);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,6 +74,23 @@ void OsgViewWidget::OnLoadDyt(const QString& path) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OsgViewWidget::initializeGL() {
|
||||||
|
QGLWidget::initializeGL();
|
||||||
|
|
||||||
|
osgViewer::Viewer* viewer = OsgViewer::Get().GetViewer();
|
||||||
|
dyt_check(nullptr != viewer);
|
||||||
|
|
||||||
|
osg::Camera* camera = viewer->getCamera();
|
||||||
|
camera->setGraphicsContext(gw_);
|
||||||
|
camera->setViewport(new osg::Viewport(0, 0, width(), height()));
|
||||||
|
camera->setDrawBuffer(GL_BACK);
|
||||||
|
camera->setReadBuffer(GL_BACK);
|
||||||
|
camera->setProjectionMatrixAsPerspective(45, 1.0, 0.01, 100.);
|
||||||
|
|
||||||
|
OsgViewer::Get().Initialize();
|
||||||
|
OsgViewer::Get().OnFrame();
|
||||||
|
}
|
||||||
|
|
||||||
void OsgViewWidget::resizeGL(int width, int height) {
|
void OsgViewWidget::resizeGL(int width, int height) {
|
||||||
gw_->getEventQueue()->windowResize(0, 0, width, height);
|
gw_->getEventQueue()->windowResize(0, 0, width, height);
|
||||||
gw_->resized(0, 0, width, height);
|
gw_->resized(0, 0, width, height);
|
||||||
|
@ -50,7 +50,7 @@ signals:
|
|||||||
void signalScaleInfo(const QString&);
|
void signalScaleInfo(const QString&);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void init();
|
void initializeGL();
|
||||||
void resizeGL(int width, int height) override;
|
void resizeGL(int width, int height) override;
|
||||||
void keyPressEvent(QKeyEvent* event) override;
|
void keyPressEvent(QKeyEvent* event) override;
|
||||||
void keyReleaseEvent(QKeyEvent* event) override;
|
void keyReleaseEvent(QKeyEvent* event) override;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <osg/BlendFunc>
|
#include <osg/BlendFunc>
|
||||||
#include <osgEarth/GLUtils>
|
//#include <osgEarth/GLUtils>
|
||||||
#include <osgDB/Registry>
|
#include <osgDB/Registry>
|
||||||
|
|
||||||
#include "common/SpdLogger.h"
|
#include "common/SpdLogger.h"
|
||||||
@ -18,18 +18,17 @@ constexpr QEvent::Type sOsgViewUpdateEvent{ QEvent::Type(QEvent::User + 1) };
|
|||||||
|
|
||||||
OsgViewer::OsgViewer(QObject* parent) noexcept
|
OsgViewer::OsgViewer(QObject* parent) noexcept
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, compositeViewer_(new osgViewer::CompositeViewer) {
|
, viewer_(new osgViewer::Viewer) {
|
||||||
LOG_INFO("actor, self={}", fmt::ptr(this));
|
LOG_INFO("actor, self={}", fmt::ptr(this));
|
||||||
compositeViewer_->setKeyEventSetsDone(0);
|
viewer_->setKeyEventSetsDone(0);
|
||||||
//compositeViewer_->getDatabasePager()->setUnrefImageDataAfterApplyPolicy(true, false);
|
//compositeViewer_->getDatabasePager()->setUnrefImageDataAfterApplyPolicy(true, false);
|
||||||
osgEarth::initialize();
|
|
||||||
osgDB::Registry::instance()->getObjectWrapperManager()->findWrapper("osg::Image");
|
osgDB::Registry::instance()->getObjectWrapperManager()->findWrapper("osg::Image");
|
||||||
compositeViewer_->setThreadingModel(osgViewer::ViewerBase::ThreadingModel::SingleThreaded);
|
viewer_->setThreadingModel(osgViewer::ViewerBase::ThreadingModel::SingleThreaded);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
OsgViewer::~OsgViewer() {
|
OsgViewer::~OsgViewer() {
|
||||||
compositeViewer_ = nullptr;
|
viewer_ = nullptr;
|
||||||
LOG_INFO("dctor, self={}", fmt::ptr(this));
|
LOG_INFO("dctor, self={}", fmt::ptr(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,16 +36,19 @@ void OsgViewer::OnDestory() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
osgViewer::Viewer* OsgViewer::GetViewer(void) const {
|
||||||
|
return viewer_;
|
||||||
|
}
|
||||||
|
|
||||||
void OsgViewer::OnFrame(void) {
|
void OsgViewer::OnFrame(void) {
|
||||||
return;
|
assert(nullptr != viewer_);
|
||||||
assert(nullptr != compositeViewer_);
|
|
||||||
|
|
||||||
WorkSpaceManager::Get().OnFrame();
|
WorkSpaceManager::Get().OnFrame();
|
||||||
|
|
||||||
if (IsDone()) {
|
if (IsDone()) {
|
||||||
RenderUpdate();
|
RenderUpdate();
|
||||||
|
|
||||||
compositeViewer_->frame();
|
viewer_->frame();
|
||||||
}
|
}
|
||||||
|
|
||||||
qApp->postEvent(this, new QEvent(sOsgViewUpdateEvent));
|
qApp->postEvent(this, new QEvent(sOsgViewUpdateEvent));
|
||||||
@ -60,7 +62,7 @@ OsgView* OsgViewer::CreateView(int x, int y, int width, int height, void* winHan
|
|||||||
|
|
||||||
view->InitGraphiceWindow(x, y, width, height, reinterpret_cast<WId>(winHandle), "dytView");
|
view->InitGraphiceWindow(x, y, width, height, reinterpret_cast<WId>(winHandle), "dytView");
|
||||||
|
|
||||||
OnAddView(view, x, y, width, height);
|
//OnAddView(view, x, y, width, height);
|
||||||
//compositeViewer_->setRealizeOperation(new osgEarth::GL3RealizeOperation());
|
//compositeViewer_->setRealizeOperation(new osgEarth::GL3RealizeOperation());
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
@ -70,12 +72,12 @@ void OsgViewer::DestroyView(OsgView* osgView) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
OnRemoveView(osgView);
|
//OnRemoveView(osgView);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OsgViewer::IsDone() const {
|
bool OsgViewer::IsDone() const {
|
||||||
assert(nullptr != compositeViewer_);
|
assert(nullptr != viewer_);
|
||||||
bool done = compositeViewer_->done();
|
bool done = viewer_->done();
|
||||||
return !done && initalized_;
|
return !done && initalized_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +94,7 @@ bool OsgViewer::Initialize(void) {
|
|||||||
return initalized_;
|
return initalized_;
|
||||||
}
|
}
|
||||||
initalized_ = true;
|
initalized_ = true;
|
||||||
compositeViewer_->setRealizeOperation(new osgEarth::GL3RealizeOperation());
|
//compositeViewer_->setRealizeOperation(new osgEarth::GL3RealizeOperation());
|
||||||
return initalized_;
|
return initalized_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,29 +140,29 @@ void OsgViewer::customEvent(QEvent* event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OsgViewer::OnStartPlay() {
|
void OsgViewer::OnStartPlay() {
|
||||||
compositeViewer_->setStartTick(0);
|
viewer_->setStartTick(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OsgViewer::OnAddView(OsgView* osgView, int x, int y, int width, int height) {
|
//void OsgViewer::OnAddView(OsgView* osgView, int x, int y, int width, int height) {
|
||||||
osgViewer::View* view = new osgViewer::View;
|
// osgViewer::View* view = new osgViewer::View;
|
||||||
osgView->InitView(view);
|
// osgView->InitView(view);
|
||||||
|
//
|
||||||
compositeViewer_->addView(view);
|
// viewer_->addView(view);
|
||||||
osgViews_.insert(osgView);
|
// osgViews_.insert(osgView);
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
void OsgViewer::OnRemoveView(OsgView* osgView) {
|
//void OsgViewer::OnRemoveView(OsgView* osgView) {
|
||||||
if (nullptr == osgView || nullptr == osgView->GetView()) {
|
// if (nullptr == osgView || nullptr == osgView->GetView()) {
|
||||||
LOG_WARN("osgview is nullptr or getview is nullptr");
|
// LOG_WARN("osgview is nullptr or getview is nullptr");
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
osgViews_.erase(osgView);
|
// osgViews_.erase(osgView);
|
||||||
compositeViewer_->removeView(osgView->GetView());
|
// compositeViewer_->removeView(osgView->GetView());
|
||||||
}
|
//}
|
||||||
|
|
||||||
void OsgViewer::RenderUpdate() {
|
void OsgViewer::RenderUpdate() {
|
||||||
osg::FrameStamp* frameStamp = compositeViewer_->getFrameStamp();
|
osg::FrameStamp* frameStamp = viewer_->getFrameStamp();
|
||||||
double dt = frameStamp->getSimulationTime();
|
double dt = frameStamp->getSimulationTime();
|
||||||
for (auto render : updateRenderList_) {
|
for (auto render : updateRenderList_) {
|
||||||
render->Render(dt);
|
render->Render(dt);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
#include <osgViewer/CompositeViewer>
|
#include <osgViewer/Viewer>
|
||||||
#include <osgViewer/GraphicsWindow>
|
#include <osgViewer/GraphicsWindow>
|
||||||
|
|
||||||
#include "app/Singleton.h"
|
#include "app/Singleton.h"
|
||||||
@ -20,6 +20,7 @@ public:
|
|||||||
~OsgViewer() override;
|
~OsgViewer() override;
|
||||||
void OnDestory();
|
void OnDestory();
|
||||||
|
|
||||||
|
osgViewer::Viewer* GetViewer(void) const;
|
||||||
void OnFrame(void);
|
void OnFrame(void);
|
||||||
class OsgView* CreateView(int x, int y, int width, int height, void* winHandle);
|
class OsgView* CreateView(int x, int y, int width, int height, void* winHandle);
|
||||||
void DestroyView(OsgView* view);
|
void DestroyView(OsgView* view);
|
||||||
@ -38,12 +39,12 @@ protected:
|
|||||||
|
|
||||||
void OnStartPlay();
|
void OnStartPlay();
|
||||||
|
|
||||||
void OnAddView(OsgView* view, int x, int y, int width, int height);
|
//void OnAddView(OsgView* view, int x, int y, int width, int height);
|
||||||
void OnRemoveView(OsgView* view);
|
//void OnRemoveView(OsgView* view);
|
||||||
void RenderUpdate();
|
void RenderUpdate();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
osg::ref_ptr<osgViewer::CompositeViewer> compositeViewer_;
|
osg::ref_ptr<osgViewer::Viewer> viewer_;
|
||||||
bool initalized_{ false };
|
bool initalized_{ false };
|
||||||
|
|
||||||
using OsgViewSet = std::set<OsgView*>;
|
using OsgViewSet = std::set<OsgView*>;
|
||||||
|
@ -196,108 +196,6 @@ void QtOsgViewWidget::keyReleaseEvent(QKeyEvent* event) {
|
|||||||
view_->KeyRelease(event);
|
view_->KeyRelease(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QtOsgViewWidget::OnComputeScale() {
|
|
||||||
osgEarth::MapNode* mapNode = activeScene_->GetMapNode();
|
|
||||||
if (nullptr == mapNode || nullptr == mapNode->getTerrain()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dyt_check(nullptr != view_);
|
|
||||||
|
|
||||||
float x = 0.0f, y = 0.0f;
|
|
||||||
osg::Vec3d world1, world2;
|
|
||||||
if (!mapNode->getTerrain()->getWorldCoordsUnderMouse(view_->GetView(), x, y, world1)) {
|
|
||||||
emit signalScaleInfo("");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
x += devicePixelRatio_;
|
|
||||||
if (!mapNode->getTerrain()->getWorldCoordsUnderMouse(view_->GetView(), x, y, world2)) {
|
|
||||||
emit signalScaleInfo("");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
TRACE("w1: %g %g %g w2: %g %g %g",
|
|
||||||
world1.x(), world1.y(), world1.z(),
|
|
||||||
world2.x(), world2.y(), world2.z());
|
|
||||||
#endif
|
|
||||||
|
|
||||||
double meters;
|
|
||||||
double radius = 6378137.0;
|
|
||||||
dyt_check(nullptr != g_srs_);
|
|
||||||
radius = g_srs_->getEllipsoid().getRadiusEquator();
|
|
||||||
|
|
||||||
if (!g_srs_->isGeocentric() ) {
|
|
||||||
// TRACE("Map is geographic");
|
|
||||||
// World cords are already lat/long
|
|
||||||
// Compute great circle distance
|
|
||||||
meters = osgEarth::GeoMath::distance(world1, world2, g_srs_);
|
|
||||||
} else {
|
|
||||||
osgEarth::GeoPoint mapPoint1, mapPoint2;
|
|
||||||
mapPoint1.fromWorld(g_srs_, world1);
|
|
||||||
mapPoint1.makeGeographic();
|
|
||||||
mapPoint2.fromWorld(g_srs_, world2);
|
|
||||||
mapPoint2.makeGeographic();
|
|
||||||
// Compute great circle distance
|
|
||||||
meters = osgEarth::GeoMath::distance(osg::DegreesToRadians(mapPoint1.y()),
|
|
||||||
osg::DegreesToRadians(mapPoint1.x()),
|
|
||||||
osg::DegreesToRadians(mapPoint2.y()),
|
|
||||||
osg::DegreesToRadians(mapPoint2.x()),
|
|
||||||
radius);
|
|
||||||
}
|
|
||||||
|
|
||||||
double scale = meters / devicePixelRatio_;
|
|
||||||
double pixelWidth = devicePixelRatio_ * 2.0;
|
|
||||||
// 1mi = 5280 feet
|
|
||||||
//double scaleMiles = scale / 1609.344; // International mile = 1609.344m
|
|
||||||
//double scaleNauticalMiles = scale / 1852.0; // nautical mile = 1852m
|
|
||||||
//double scaleUSSurveyMiles = scale / 1609.347218694; // US survey mile = 5280 US survey feet
|
|
||||||
//double scaleUSSurveyFeet = scale * 3937.0/1200.0; // US survey foot = 1200/3937 m
|
|
||||||
#if 0
|
|
||||||
TRACE("m: %g px: %g m/px: %g", meters, pixelWidth, scale);
|
|
||||||
#endif
|
|
||||||
switch (scaleUnits_) {
|
|
||||||
case ScaleBarHandler::Delegate::Units::UNITS_NAUTICAL_MILES: {
|
|
||||||
double nmi = meters / 1852.0;
|
|
||||||
scale = nmi / devicePixelRatio_;
|
|
||||||
nmi = normalizeScaleNauticalMiles(nmi);
|
|
||||||
pixelWidth = nmi / scale;
|
|
||||||
emit signalScaleInfo(QString("%1 nmi").arg(nmi));
|
|
||||||
} break;
|
|
||||||
case ScaleBarHandler::Delegate::Units::UNITS_US_SURVEY_FEET: {
|
|
||||||
double feet = meters * 3937.0 / 1200.0;
|
|
||||||
scale = feet / pixelWidth;
|
|
||||||
feet = normalizeScaleFeet(feet);
|
|
||||||
pixelWidth = feet / scale;
|
|
||||||
if (feet >= 5280) {
|
|
||||||
emit signalScaleInfo(QString("%1 miUS").arg(feet / 5280.0));
|
|
||||||
} else {
|
|
||||||
emit signalScaleInfo(QString("%1 ftUS").arg(feet));
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
case ScaleBarHandler::Delegate::Units::UNITS_INTL_FEET: {
|
|
||||||
double feet = 5280.0 * meters / 1609.344;
|
|
||||||
scale = feet / pixelWidth;
|
|
||||||
feet = normalizeScaleFeet(feet);
|
|
||||||
pixelWidth = feet / scale;
|
|
||||||
if (feet >= 5280) {
|
|
||||||
emit signalScaleInfo(QString("%1 mi").arg(feet / 5280.0));
|
|
||||||
} else {
|
|
||||||
emit signalScaleInfo(QString("%1 ft").arg(feet));
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
case ScaleBarHandler::Delegate::Units::UNITS_METERS:
|
|
||||||
default: {
|
|
||||||
meters = normalizeScaleMeters(meters);
|
|
||||||
pixelWidth = meters / scale;
|
|
||||||
if (meters >= 1000) {
|
|
||||||
emit signalScaleInfo(QString("%1 km").arg(meters * 0.001));
|
|
||||||
} else {
|
|
||||||
emit signalScaleInfo(QString("%1 m").arg(meters));
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void QtOsgViewWidget::Initialize(void) {
|
void QtOsgViewWidget::Initialize(void) {
|
||||||
if (view_) {
|
if (view_) {
|
||||||
LOG_INFO("view is created");
|
LOG_INFO("view is created");
|
||||||
@ -314,40 +212,38 @@ void QtOsgViewWidget::Initialize(void) {
|
|||||||
|
|
||||||
setMouseTracking(true);
|
setMouseTracking(true);
|
||||||
|
|
||||||
activeScene_ = new OEScene;
|
|
||||||
activeScene_->AttachView(view_);
|
|
||||||
activeScene_->InitEventHandle(view_);
|
|
||||||
|
|
||||||
|
|
||||||
osgEarth::Util::EarthManipulator* manipulator = new osgEarth::Util::EarthManipulator;
|
|
||||||
connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, [](WorkSpace* workspace) {
|
|
||||||
LOG_INFO("WorkSpaceChanged");
|
|
||||||
if (nullptr == workspace) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
OsgCameraManipulator* manipulator = OsgViewer::Get().GetView()->GetCameraManipulator();
|
|
||||||
if (nullptr == manipulator) {
|
|
||||||
LOG_WARN("manipulator is nullptr");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
osgGA::CameraManipulator* gaManipulator = manipulator->GetManipulator();
|
|
||||||
osgEarth::Util::EarthManipulator* ccm = dynamic_cast<osgEarth::Util::EarthManipulator*>(gaManipulator);
|
|
||||||
if (nullptr == ccm) {
|
|
||||||
LOG_WARN("ccm is nullptr");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ccm->setViewpoint(workspace->GetHomeViewpoint(), 3.0);
|
//osgEarth::Util::EarthManipulator* manipulator = new osgEarth::Util::EarthManipulator;
|
||||||
}
|
//connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, [](WorkSpace* workspace) {
|
||||||
);
|
// LOG_INFO("WorkSpaceChanged");
|
||||||
|
// if (nullptr == workspace) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// OsgCameraManipulator* manipulator = OsgViewer::Get().GetView()->GetCameraManipulator();
|
||||||
|
// if (nullptr == manipulator) {
|
||||||
|
// LOG_WARN("manipulator is nullptr");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// osgGA::CameraManipulator* gaManipulator = manipulator->GetManipulator();
|
||||||
|
// osgEarth::Util::EarthManipulator* ccm = dynamic_cast<osgEarth::Util::EarthManipulator*>(gaManipulator);
|
||||||
|
// if (nullptr == ccm) {
|
||||||
|
// LOG_WARN("ccm is nullptr");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// ccm->setViewpoint(workspace->GetHomeViewpoint(), 3.0);
|
||||||
|
// }
|
||||||
|
//);
|
||||||
|
|
||||||
|
|
||||||
OsgCameraManipulator* cameraManipulator = new OsgCameraManipulator(manipulator, this);
|
//OsgCameraManipulator* cameraManipulator = new OsgCameraManipulator(manipulator, this);
|
||||||
view_->Initialize(cameraManipulator);
|
//view_->Initialize(cameraManipulator);
|
||||||
|
|
||||||
OsgViewUI* viewUI = view_->GetViewUI();
|
//OsgViewUI* viewUI = view_->GetViewUI();
|
||||||
dyt_check(nullptr != viewUI);
|
//dyt_check(nullptr != viewUI);
|
||||||
viewUI->AddUI(activeScene_->GetOrCreateSceneUI());
|
//viewUI->AddUI(activeScene_->GetOrCreateSceneUI());
|
||||||
}
|
}
|
||||||
|
|
||||||
void QtOsgViewWidget::Uninitialize(void) {
|
void QtOsgViewWidget::Uninitialize(void) {
|
||||||
@ -362,13 +258,13 @@ void QtOsgViewWidget::Uninitialize(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QtOsgViewWidget::LoadDefaultScene(void) {
|
//void QtOsgViewWidget::LoadDefaultScene(void) {
|
||||||
dyt_check(nullptr != activeScene_);
|
// dyt_check(nullptr != activeScene_);
|
||||||
if (nullptr == WorkSpaceManager::Get().LoadDefaultWorkspace(activeScene_)) {
|
// if (nullptr == WorkSpaceManager::Get().LoadDefaultWorkspace(activeScene_)) {
|
||||||
LOG_ERROR("load default workspace failed");
|
// LOG_ERROR("load default workspace failed");
|
||||||
QMessageBox::warning(this, tr("warning"), tr("default workspace failed"));
|
// QMessageBox::warning(this, tr("warning"), tr("default workspace failed"));
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
void QtOsgViewWidget::OnLoadDyt(const QString& path) {
|
void QtOsgViewWidget::OnLoadDyt(const QString& path) {
|
||||||
LOG_INFO("load dyt path:{}", path.toStdString());
|
LOG_INFO("load dyt path:{}", path.toStdString());
|
||||||
|
@ -3,9 +3,6 @@
|
|||||||
// #include <QGLWidget>
|
// #include <QGLWidget>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
#include "scene/OEScene.h"
|
|
||||||
#include "scene/ScaleBarHandler.h"
|
|
||||||
|
|
||||||
|
|
||||||
class QMouseEvent;
|
class QMouseEvent;
|
||||||
class QWheelEvent;
|
class QWheelEvent;
|
||||||
@ -13,7 +10,7 @@ class QKeyEvent;
|
|||||||
class QInputEvent;
|
class QInputEvent;
|
||||||
class QResizeEvent;
|
class QResizeEvent;
|
||||||
|
|
||||||
class QtOsgViewWidget : public QWidget, public ScaleBarHandler::Delegate {
|
class QtOsgViewWidget : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit QtOsgViewWidget(QWidget* parent = nullptr);
|
explicit QtOsgViewWidget(QWidget* parent = nullptr);
|
||||||
@ -24,12 +21,10 @@ public:
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnComputeScale() override;
|
|
||||||
|
|
||||||
void Initialize(void);
|
void Initialize(void);
|
||||||
void Uninitialize(void);
|
void Uninitialize(void);
|
||||||
|
|
||||||
void LoadDefaultScene(void);
|
//void LoadDefaultScene(void);
|
||||||
|
|
||||||
void OnLoadDyt(const QString& path);
|
void OnLoadDyt(const QString& path);
|
||||||
//void setKeyboardModifiers(QInputEvent* event);
|
//void setKeyboardModifiers(QInputEvent* event);
|
||||||
@ -47,8 +42,6 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
class OsgView* view_{ nullptr };
|
class OsgView* view_{ nullptr };
|
||||||
osg::ref_ptr<OEScene> activeScene_;
|
|
||||||
class WorkSpace* workspace_{ nullptr };
|
class WorkSpace* workspace_{ nullptr };
|
||||||
ScaleBarHandler::Delegate::Units scaleUnits_{ ScaleBarHandler::Delegate::Units::UNITS_METERS };
|
|
||||||
float devicePixelRatio_{ 1.0f };
|
float devicePixelRatio_{ 1.0f };
|
||||||
};
|
};
|
@ -36,70 +36,65 @@
|
|||||||
ViewWidget::ViewWidget(QWidget* parent /*= nullptr*/)
|
ViewWidget::ViewWidget(QWidget* parent /*= nullptr*/)
|
||||||
: OsgViewWidget(parent) {
|
: OsgViewWidget(parent) {
|
||||||
//osg::DisplaySettings::instance()->setNumMultiSamples(16);
|
//osg::DisplaySettings::instance()->setNumMultiSamples(16);
|
||||||
setKeyEventSetsDone(0);
|
//setKeyEventSetsDone(0);
|
||||||
|
//
|
||||||
|
////osg::ref_ptr<osg::Viewport> viewPort = new osg::Viewport(0, 0, width(), height());
|
||||||
|
////getCamera()->setViewport(viewPort);
|
||||||
|
|
||||||
osg::ref_ptr<osg::Viewport> viewPort = new osg::Viewport(0, 0, width(), height());
|
//getCamera()->setProjectionMatrixAsPerspective(30.0f,
|
||||||
getCamera()->setViewport(viewPort);
|
// static_cast<double>(width()) / static_cast<double>(height()), 1.0f, 10000.0f);
|
||||||
|
//getCamera()->setGraphicsContext(getGraphicsWindow());
|
||||||
getCamera()->setProjectionMatrixAsPerspective(30.0f,
|
//setRealizeOperation(new osgEarth::GL3RealizeOperation());
|
||||||
static_cast<double>(width()) / static_cast<double>(height()), 1.0f, 10000.0f);
|
|
||||||
getCamera()->setGraphicsContext(getGraphicsWindow());
|
|
||||||
setRealizeOperation(new osgEarth::GL3RealizeOperation());
|
|
||||||
//setThreadingModel(osgViewer::ViewerBase::SingleThreaded);
|
//setThreadingModel(osgViewer::ViewerBase::SingleThreaded);
|
||||||
//getCamera()->setNearFarRatio(0.0000001);
|
//getCamera()->setNearFarRatio(0.0000001);
|
||||||
//getCamera()->setComputeNearFarMode(osg::CullSettings::COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES);//);
|
//getCamera()->setComputeNearFarMode(osg::CullSettings::COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES);//);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewWidget::Initialize(void) {
|
void ViewWidget::Initialize(void) {
|
||||||
OEScene* activeScene_ = new OEScene;
|
// OEScene* activeScene_ = new OEScene;
|
||||||
activeScene_->AttachView(this);
|
// activeScene_->AttachView(this);
|
||||||
activeScene_->InitEventHandle(this);
|
// activeScene_->InitEventHandle(this);
|
||||||
|
|
||||||
const osg::Viewport* viewport = getCamera()->getViewport();
|
// const osg::Viewport* viewport = getCamera()->getViewport();
|
||||||
osg::Viewport::value_type width = viewport->width();
|
// osg::Viewport::value_type width = viewport->width();
|
||||||
osg::Viewport::value_type height = viewport->height();
|
// osg::Viewport::value_type height = viewport->height();
|
||||||
viewUI_ = new OsgViewUI(this, width, height);
|
// viewUI_ = new OsgViewUI(this, width, height);
|
||||||
osg::Group* root = getSceneData()->asGroup();
|
// osg::Group* root = getSceneData()->asGroup();
|
||||||
dyt_check(nullptr != root);
|
// dyt_check(nullptr != root);
|
||||||
root->addChild(viewUI_.get());
|
// root->addChild(viewUI_.get());
|
||||||
|
|
||||||
|
|
||||||
osgEarth::Util::EarthManipulator* manipulator = new osgEarth::Util::EarthManipulator;
|
// osgEarth::Util::EarthManipulator* manipulator = new osgEarth::Util::EarthManipulator;
|
||||||
/* connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, [](WorkSpace* workspace) {
|
///* connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, [](WorkSpace* workspace) {
|
||||||
LOG_INFO("WorkSpaceChanged");
|
// LOG_INFO("WorkSpaceChanged");
|
||||||
if (nullptr == workspace) {
|
// if (nullptr == workspace) {
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
OsgCameraManipulator* manipulator = OsgViewer::Get().GetView()->GetCameraManipulator();
|
// OsgCameraManipulator* manipulator = OsgViewer::Get().GetView()->GetCameraManipulator();
|
||||||
if (nullptr == manipulator) {
|
// if (nullptr == manipulator) {
|
||||||
LOG_WARN("manipulator is nullptr");
|
// LOG_WARN("manipulator is nullptr");
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
osgGA::CameraManipulator* gaManipulator = manipulator->GetManipulator();
|
// osgGA::CameraManipulator* gaManipulator = manipulator->GetManipulator();
|
||||||
osgEarth::Util::EarthManipulator* ccm = dynamic_cast<osgEarth::Util::EarthManipulator*>(gaManipulator);
|
// osgEarth::Util::EarthManipulator* ccm = dynamic_cast<osgEarth::Util::EarthManipulator*>(gaManipulator);
|
||||||
if (nullptr == ccm) {
|
// if (nullptr == ccm) {
|
||||||
LOG_WARN("ccm is nullptr");
|
// LOG_WARN("ccm is nullptr");
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
ccm->setViewpoint(workspace->GetHomeViewpoint(), 3.0);
|
// ccm->setViewpoint(workspace->GetHomeViewpoint(), 3.0);
|
||||||
}
|
// }
|
||||||
);
|
// );
|
||||||
|
|
||||||
|
|
||||||
OsgCameraManipulator* cameraManipulator = new OsgCameraManipulator(manipulator, this);
|
// OsgCameraManipulator* cameraManipulator = new OsgCameraManipulator(manipulator, this);
|
||||||
view_->Initialize(cameraManipulator);*/
|
// view_->Initialize(cameraManipulator);*/
|
||||||
setCameraManipulator(manipulator);
|
// setCameraManipulator(manipulator);
|
||||||
|
|
||||||
|
//
|
||||||
viewUI_->AddUI(activeScene_->GetOrCreateSceneUI());
|
// viewUI_->AddUI(activeScene_->GetOrCreateSceneUI());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewWidget::Uninitialize(void) {
|
void ViewWidget::Uninitialize(void) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewWidget::paintGL() {
|
|
||||||
frame();
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
#include "viewer/OsgViewWidget.h"
|
#include "viewer/OsgViewWidget.h"
|
||||||
|
|
||||||
|
|
||||||
class ViewWidget : public OsgViewWidget, public osgViewer::Viewer {
|
class ViewWidget : public OsgViewWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ViewWidget(QWidget* parent = nullptr);
|
explicit ViewWidget(QWidget* parent = nullptr);
|
||||||
@ -14,10 +14,4 @@ public:
|
|||||||
|
|
||||||
void Initialize(void) override;
|
void Initialize(void) override;
|
||||||
void Uninitialize(void) override;
|
void Uninitialize(void) override;
|
||||||
|
|
||||||
protected:
|
|
||||||
void paintGL() override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
osg::ref_ptr<class OsgViewUI> viewUI_;
|
|
||||||
};
|
};
|
@ -1,5 +1,6 @@
|
|||||||
#ifndef OSGQOPENGLWIDGET_H
|
#pragma once
|
||||||
#define OSGQOPENGLWIDGET_H
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
# define __glext_h_
|
# define __glext_h_
|
||||||
@ -22,7 +23,6 @@
|
|||||||
#include <QReadWriteLock>
|
#include <QReadWriteLock>
|
||||||
|
|
||||||
class OSGRenderer;
|
class OSGRenderer;
|
||||||
#if 0
|
|
||||||
|
|
||||||
namespace osgViewer
|
namespace osgViewer
|
||||||
{
|
{
|
||||||
@ -86,5 +86,3 @@ protected:
|
|||||||
private:
|
private:
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // OSGQOPENGLWIDGET_H
|
|
@ -169,6 +169,18 @@ void WorkSpaceManager::OnFrame() {
|
|||||||
lastTime_ = t;
|
lastTime_ = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WorkSpaceManager::OnRendererLoaded(OSGRenderer* renderer) {
|
||||||
|
if (scene_) {
|
||||||
|
LOG_INFO("activeScene_ loaded");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderer_ = renderer;
|
||||||
|
scene_ = new OEScene;
|
||||||
|
scene_->AttachView(renderer);
|
||||||
|
scene_->InitEventHandle(renderer);
|
||||||
|
}
|
||||||
|
|
||||||
QString WorkSpaceManager::GetDefaultWorkSpaceName() {
|
QString WorkSpaceManager::GetDefaultWorkSpaceName() {
|
||||||
#if _DEBUG
|
#if _DEBUG
|
||||||
const QString iniFile = QString("%1workspace/config.ini").arg(QString(CONFIG_PATH)).arg(skin);
|
const QString iniFile = QString("%1workspace/config.ini").arg(QString(CONFIG_PATH)).arg(skin);
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
#include "app/Singleton.h"
|
#include "app/Singleton.h"
|
||||||
|
#include "scene/OEScene.h"
|
||||||
|
#include "viewer/OSGRenderer.h"
|
||||||
#include "ui/chartPlot/DYTChart.h"
|
#include "ui/chartPlot/DYTChart.h"
|
||||||
#include "ui/Table/targetlistwgt.h"
|
#include "ui/Table/targetlistwgt.h"
|
||||||
|
|
||||||
@ -31,6 +32,8 @@ public:
|
|||||||
|
|
||||||
void OnFrame();
|
void OnFrame();
|
||||||
|
|
||||||
|
void OnRendererLoaded(OSGRenderer* renderer);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void WorkSpaceChanged(WorkSpace*);
|
void WorkSpaceChanged(WorkSpace*);
|
||||||
|
|
||||||
@ -38,8 +41,9 @@ private:
|
|||||||
QString GetDefaultWorkSpaceName();
|
QString GetDefaultWorkSpaceName();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
osg::ref_ptr<class OEScene> scene_;
|
||||||
|
osg::observer_ptr<OSGRenderer> renderer_;
|
||||||
std::unordered_map<QString, WorkSpace*> workSpaces_;
|
std::unordered_map<QString, WorkSpace*> workSpaces_;
|
||||||
class OEScene* scene_{ nullptr };
|
|
||||||
WorkSpace* current_{ nullptr };
|
WorkSpace* current_{ nullptr };
|
||||||
int64_t lastTime_{ 0 };
|
int64_t lastTime_{ 0 };
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user