From 4acbf05ae0f82112551d092289c778b8959c8262 Mon Sep 17 00:00:00 2001 From: brige Date: Mon, 21 Apr 2025 08:20:00 +0800 Subject: [PATCH] modify workspace --- src/app/Application.cpp | 1 - src/app/Application.h | 3 +-- src/main.cpp | 1 + src/scene/OEScene.cpp | 6 ++++++ src/scene/OEScene.h | 2 ++ src/translations/Dyt_zh_CN.ts | 20 ++++---------------- src/ui/MainWindow.cpp | 2 +- src/viewer/OsgWidget.cpp | 11 ++++++++++- src/viewer/QtOsgViewWidget.cpp | 27 +++++++++++++-------------- src/workspace/WorkSpace.cpp | 12 ++++++++++++ src/workspace/WorkSpace.h | 5 +---- src/workspace/WorkSpaceManager.cpp | 9 +++++++-- 12 files changed, 58 insertions(+), 41 deletions(-) diff --git a/src/app/Application.cpp b/src/app/Application.cpp index 8557120e..c06bb2e2 100644 --- a/src/app/Application.cpp +++ b/src/app/Application.cpp @@ -16,7 +16,6 @@ Application::Application(int& argc, char** argv, int /*= ApplicationFlags*/) } Application::~Application() { - Uninit(); } QString Application::GetWorkSpacePath() { diff --git a/src/app/Application.h b/src/app/Application.h index 7860e81b..e049ff99 100644 --- a/src/app/Application.h +++ b/src/app/Application.h @@ -10,8 +10,7 @@ public: ~Application() override; static QString GetWorkSpacePath(); - + void Uninit(); protected: void Init(); - void Uninit(); }; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 3617895d..fe1903a2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -385,6 +385,7 @@ int main(int argc, char* argv[]) { mainWindow.showMaximized(); // int ret = app.exec(); + app.Uninit(); return ret; //osg::ArgumentParser arguments(&argc, argv); diff --git a/src/scene/OEScene.cpp b/src/scene/OEScene.cpp index d4ab5071..805787db 100644 --- a/src/scene/OEScene.cpp +++ b/src/scene/OEScene.cpp @@ -65,6 +65,12 @@ bool OEScene::AddToScene(osg::Node* node) const { return entityRoot_->addChild(node); } +void OEScene::SetHomeViewpoint(const osgEarth::Viewpoint& viewpoint, double duration_s) { + dyt_check(nullptr != earthManipulator_); + earthManipulator_->setViewpoint(viewpoint, duration_s); + earthManipulator_->setHomeViewpoint(viewpoint, duration_s); +} + // // void OEScene::InitEventHandle(osgViewer::View* view) { // if (nullptr == view) { diff --git a/src/scene/OEScene.h b/src/scene/OEScene.h index 0639363d..3cbd46ba 100644 --- a/src/scene/OEScene.h +++ b/src/scene/OEScene.h @@ -2,6 +2,7 @@ #include #include +#include #include "common/SpdLogger.h" #include "config.h" @@ -21,6 +22,7 @@ public: void DetachView(osgViewer::View* view); bool AddToScene(osg::Node* node) const; + void SetHomeViewpoint(const osgEarth::Viewpoint& viewpoint, double duration_s); osgEarth::MapNode* GetMapNode(void) const { dyt_check(earthMapNode_.valid()); diff --git a/src/translations/Dyt_zh_CN.ts b/src/translations/Dyt_zh_CN.ts index 0c4f5de4..63776138 100644 --- a/src/translations/Dyt_zh_CN.ts +++ b/src/translations/Dyt_zh_CN.ts @@ -694,18 +694,12 @@ OsgWidget - - + warning - - default workspace failed - - - - + open dyt file failed @@ -1253,18 +1247,12 @@ QtOsgViewWidget - - + warning - - default workspace failed - - - - + open dyt file failed diff --git a/src/ui/MainWindow.cpp b/src/ui/MainWindow.cpp index 6056bcc1..7bc775c3 100644 --- a/src/ui/MainWindow.cpp +++ b/src/ui/MainWindow.cpp @@ -35,7 +35,7 @@ MainWindow::MainWindow(QWidget* parent) ui->setupUi(this); InitUI(); -} +} MainWindow::~MainWindow() { //OsgViewer::Get().Uninitialize(); diff --git a/src/viewer/OsgWidget.cpp b/src/viewer/OsgWidget.cpp index 6011f62e..c4211b5f 100644 --- a/src/viewer/OsgWidget.cpp +++ b/src/viewer/OsgWidget.cpp @@ -50,6 +50,15 @@ OsgWidget::OsgWidget(QWidget* parent, Qt::WindowFlags f) void OsgWidget::Initialize() { QHBoxLayout* layout = new QHBoxLayout(this); activeScene_ = new OEScene(); + connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, [this](WorkSpace* workspace) { + if (nullptr == workspace) { + LOG_WARN("workspace is nullptr"); + return; + } + + activeScene_->SetHomeViewpoint(workspace->GetHomeViewpoint(), 3.0); + } + ); QWidget* widget = addViewWidget( createGraphicsWindow(0,0,100,100)); layout->addWidget(widget); @@ -61,7 +70,7 @@ void OsgWidget::LoadDefaultScene() { dyt_check(nullptr != activeScene_); if (nullptr == WorkSpaceManager::Get().LoadDefaultWorkspace(activeScene_)) { LOG_ERROR("load default workspace failed"); - QMessageBox::warning(this, tr("warning"), tr("default workspace failed")); + //QMessageBox::warning(this, tr("warning"), tr("default workspace failed")); } } diff --git a/src/viewer/QtOsgViewWidget.cpp b/src/viewer/QtOsgViewWidget.cpp index cbeaf0ae..1363a795 100644 --- a/src/viewer/QtOsgViewWidget.cpp +++ b/src/viewer/QtOsgViewWidget.cpp @@ -80,24 +80,24 @@ void QtOsgViewWidget::Initialize(void) { osgEarth::Util::EarthManipulator* manipulator = new osgEarth::Util::EarthManipulator; - connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, [](WorkSpace* workspace) { + connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, [this](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(gaManipulator); - //if (nullptr == ccm) { - // LOG_WARN("ccm is nullptr"); - // return; - //} + OsgCameraManipulator* manipulator = view_->GetCameraManipulator(); + if (nullptr == manipulator) { + LOG_WARN("manipulator is nullptr"); + return; + } + osgGA::CameraManipulator* gaManipulator = manipulator->GetManipulator(); + osgEarth::Util::EarthManipulator* ccm = dynamic_cast(gaManipulator); + if (nullptr == ccm) { + LOG_WARN("ccm is nullptr"); + return; + } - //ccm->setViewpoint(workspace->GetHomeViewpoint(), 3.0); + ccm->setViewpoint(workspace->GetHomeViewpoint(), 3.0); } ); @@ -126,7 +126,6 @@ void QtOsgViewWidget::LoadDefaultScene(void) { dyt_check(nullptr != activeScene_); if (nullptr == WorkSpaceManager::Get().LoadDefaultWorkspace(activeScene_)) { LOG_ERROR("load default workspace failed"); - QMessageBox::warning(this, tr("warning"), tr("default workspace failed")); } } diff --git a/src/workspace/WorkSpace.cpp b/src/workspace/WorkSpace.cpp index 677410a3..36e0c5bc 100644 --- a/src/workspace/WorkSpace.cpp +++ b/src/workspace/WorkSpace.cpp @@ -59,6 +59,18 @@ void WorkSpace::RemoveEntity(Entity* entity) { } } +void WorkSpace::SetActiveScene(OEScene* scene) { + dyt_check(nullptr != scene); + scene_ = scene; + + osgEarth::Viewpoint vp; + vp.name() = "home"; + vp.focalPoint()->set(scene->GetSrs(), -121.488, 46.2054, 0, osgEarth::AltitudeMode::ALTMODE_ABSOLUTE); + vp.pitch() = -50.0; + vp.range() = 100000; + homeViewpoint_ = vp; +} + bool WorkSpace::SetTimestep(Timestep* timestep) { if (!timestep) { return false; diff --git a/src/workspace/WorkSpace.h b/src/workspace/WorkSpace.h index a61eabed..dbc9d28d 100644 --- a/src/workspace/WorkSpace.h +++ b/src/workspace/WorkSpace.h @@ -95,10 +95,7 @@ public: return entities_; } - void SetActiveScene(OEScene* scene) { - dyt_check(nullptr != scene); - scene_ = scene; - } + void SetActiveScene(OEScene* scene); OEScene* GetActiveScene() const { dyt_check(nullptr != scene_); diff --git a/src/workspace/WorkSpaceManager.cpp b/src/workspace/WorkSpaceManager.cpp index 680ab069..582e244f 100644 --- a/src/workspace/WorkSpaceManager.cpp +++ b/src/workspace/WorkSpaceManager.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "app/Application.h" #include "workspace/WorkSpace.h" @@ -64,8 +65,12 @@ WorkSpace* WorkSpaceManager::LoadDefaultWorkspace(class OEScene* secen) { void WorkSpaceManager::SaveDefaultWorkspace() { const QString iniFile = GetDefaultWorkSpaceName(); if (!QFile::exists(iniFile)) { - LOG_ERROR("default workspace file not exist:{}", iniFile.toStdString()); - return; + QFileInfo fileInfo(iniFile); + QDir dir; + if (!dir.mkdir(fileInfo.absolutePath())) { + LOG_ERROR("default workspace file not exist:{}", iniFile.toStdString()); + return; + } } WorkSpace* current = GetCurrent();