diff --git a/src/translations/Dyt_zh_CN.ts b/src/translations/Dyt_zh_CN.ts index d2e2fcdb..32238090 100644 --- a/src/translations/Dyt_zh_CN.ts +++ b/src/translations/Dyt_zh_CN.ts @@ -6,22 +6,22 @@ ParamSetting - 参数设置 + input param name - 参数名 + input param descript - 参数描述 + input value - + @@ -29,7 +29,7 @@ AddParamSetting - + @@ -92,32 +92,20 @@ ChartPlotMenu - 图表绘图 + Run Simu - - 2D Curver - 2D - - - 2D(lg) Curver - 2D(lg) - - - 3D Curver - 3D - CodeEdtUI &file - 文件(&f) + @@ -221,7 +209,7 @@ ... - ... + @@ -378,22 +366,22 @@ FileManagerMenu - 文件 + new workspace - 新建 + open workspace - 打开 + save workspace - 保存 + @@ -404,7 +392,7 @@ open dyt file - 打开空间 + @@ -415,7 +403,7 @@ save dyt file - 保存空间 + @@ -423,7 +411,7 @@ FitCurveChartView - + @@ -480,40 +468,28 @@ Dyt - + file manager - 文件 + + + + + system manager + + + + + play manager + simu manager - - view manager - 视图管理 - - - plan manager - 想定管理 - - - dynamic display - 动态显示 - - - - system manager - 系统管理 - - - - play manager - 回放管理 - MainWindow @@ -525,7 +501,7 @@ model elements - 模型元素 + @@ -661,7 +637,7 @@ ParamSetting - 参数设置 + @@ -669,7 +645,7 @@ model elements - 模型元素 + @@ -695,7 +671,7 @@ Release Track - 取消跟踪 + @@ -730,7 +706,7 @@ Track - 跟随 + @@ -745,7 +721,7 @@ Delete - 删除 + @@ -761,7 +737,7 @@ PlayManagerMenu - 回放管理 + @@ -769,12 +745,12 @@ play - 播放 + stop - 停止 + @@ -794,12 +770,12 @@ up - 加速 + down - 慢速 + @@ -811,7 +787,7 @@ question - 询问 + @@ -823,14 +799,14 @@ has not workspace - 未加载空间 + pause - 暂停 + @@ -969,7 +945,7 @@ ... - ... + @@ -1171,7 +1147,7 @@ ... - ... + @@ -1179,7 +1155,7 @@ Name - 名称 + @@ -1192,7 +1168,7 @@ ... - ... + @@ -1280,7 +1256,7 @@ Name - 名称 + @@ -1301,12 +1277,12 @@ QtOsgViewWidget - + notify - + open dyt file failed @@ -1322,7 +1298,7 @@ Path - 路径 + @@ -1515,7 +1491,7 @@ ... - ... + @@ -1572,7 +1548,7 @@ Name - 名称 + @@ -1634,22 +1610,22 @@ exit - 退出 + ui setting - ui设置 + question - 询问 + are you sure to exit - 是否退出 + @@ -1708,52 +1684,52 @@ New WorkSpace - 工作空间 + Name - 名称 - - - - Path - 路径 + input workspace name - 输入名称 + + + + + Path + select workspace save path - 选择路径 + ... - ... + describe - 描述 + Sure - 确定 + Cancel - 取消 + new workspace - 新建 + @@ -1764,47 +1740,47 @@ warning - 警告 + name or save path is empty, please check it - 没有选择路径 + save current workspace? - 保存当前空间? + current path is contains current folder, do you want to overwrite it? - 当前路径已经包含,是否覆盖? + removeRecursively failed - 创建失败 + mkpath failed - 创建路径失败 + name is exits - 当前名称已经存在 + create workSpace failed - 创建失败 + - + save spaceWork directory - 选择空间目录 + diff --git a/src/ui/WorkSpace/WorkSpaceDlg.cpp b/src/ui/WorkSpace/WorkSpaceDlg.cpp index b67a1e60..5b83447a 100644 --- a/src/ui/WorkSpace/WorkSpaceDlg.cpp +++ b/src/ui/WorkSpace/WorkSpaceDlg.cpp @@ -99,7 +99,6 @@ void WorkSpaceDlg::OnSure() { return; } - emit WorkSpaceManager::Get().WorkSpaceChanged(workSpace); WorkSpaceManager::Get().SetCurrent(workSpace); accept(); } diff --git a/src/utils/StringUtils.cpp b/src/utils/StringUtils.cpp index 522226a2..92a28cbf 100644 --- a/src/utils/StringUtils.cpp +++ b/src/utils/StringUtils.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "common/SpdLogger.h" @@ -32,3 +33,54 @@ std::string StringUtils::Vec4ToString(const osg::Vec4& value) { << value.x() << "," << value.y() << "," << value.z() << "," << value.w(); return oss.str(); } + +osgEarth::Viewpoint StringUtils::StringToViewpoint(const std::string& name, const std::string& value) { + std::stringstream ss(value); + std::vector values; + double v; + + while (ss >> v) { + values.push_back(v); + if (ss.peek() == ',') { + ss.ignore(); + } + } + + if (values.size() != 6) { + return osgEarth::Viewpoint(name.c_str(), 120.000000, 25.000000, 100.000000, -2.500000, -90.000000, 8200000.000000); + } + + double longitude = values[0]; + double latitude = values[1]; + double altitude = values[2]; + double heading = values[3]; + double pitch = values[4]; + double range = values[5]; + + osgEarth::Viewpoint viewpoint(name.c_str(), longitude, latitude, altitude, heading, pitch, range); + + return viewpoint; +} + +std::string StringUtils::ViewpointToString(const osgEarth::Viewpoint& value) { + const auto& location = value.focalPoint(); + double longitude = location->x(); + double latitude = location->y(); + double altitude = location->z(); + + double heading = value.heading().get(); + double pitch = value.pitch().get(); + double range = value.range().get(); + + std::stringstream ss; + ss << std::fixed << std::setprecision(6); + + ss << longitude << ", " + << latitude << ", " + << altitude << ", " + << heading << ", " + << pitch << ", " + << range; + + return ss.str(); +} diff --git a/src/utils/StringUtils.h b/src/utils/StringUtils.h index 9839cac3..57b4741d 100644 --- a/src/utils/StringUtils.h +++ b/src/utils/StringUtils.h @@ -4,6 +4,7 @@ #include #include +#include class StringUtils { public: @@ -11,4 +12,6 @@ public: static std::string Vec3ToString(const osg::Vec3& value); static osg::Vec4 StringToVec4(const char* value); static std::string Vec4ToString(const osg::Vec4& value); + static osgEarth::Viewpoint StringToViewpoint(const std::string& name, const std::string& value); + static std::string ViewpointToString(const osgEarth::Viewpoint& value); }; \ No newline at end of file diff --git a/src/viewer/QtOsgViewWidget.cpp b/src/viewer/QtOsgViewWidget.cpp index 3146b90e..68fbb22a 100644 --- a/src/viewer/QtOsgViewWidget.cpp +++ b/src/viewer/QtOsgViewWidget.cpp @@ -78,8 +78,26 @@ void QtOsgViewWidget::Initialize(void) { osgEarth::Util::EarthManipulator* manipulator = new osgEarth::Util::EarthManipulator; - osgEarth::Viewpoint vp("home", 107.85, 32.35, 100.0, -2.50, -90.0, 1.5e7); - manipulator->setHomeViewpoint(vp, 3.0); + 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(gaManipulator); + if (nullptr == ccm) { + LOG_WARN("ccm is nullptr"); + return; + } + + ccm->setViewpoint(workspace->GetHomeViewpoint(), 3.0); + } + ); OsgCameraManipulator* cameraManipulator = new OsgCameraManipulator(manipulator, this); diff --git a/src/workspace/WorkSpace.cpp b/src/workspace/WorkSpace.cpp index 384f2942..d73a4d49 100644 --- a/src/workspace/WorkSpace.cpp +++ b/src/workspace/WorkSpace.cpp @@ -23,12 +23,14 @@ Q_DECLARE_METATYPE(WorkSpace*) WorkSpace::WorkSpace(QObject* parent) noexcept : QObject(parent) { uuid_ = QUuid::createUuid().toString(); + homeViewpoint_ = osgEarth::Viewpoint("home", 120.000000, 25.000000, 100.000000, -2.500000, -90.000000, 8200000.000000); } WorkSpace::WorkSpace(const QString& path, QObject* parent) : QObject(parent) , path_(path){ uuid_ = QUuid::createUuid().toString(); + homeViewpoint_ = osgEarth::Viewpoint("home", 120.000000, 25.000000, 100.000000, -2.500000, -90.000000, 8200000.000000); } const QString WorkSpace::GetDir() const { diff --git a/src/workspace/WorkSpace.h b/src/workspace/WorkSpace.h index 044ab9ab..003891ae 100644 --- a/src/workspace/WorkSpace.h +++ b/src/workspace/WorkSpace.h @@ -3,6 +3,8 @@ #include #include +#include + #include "scene/OsgScene.h" #include "scene/OEScene.h" #include "config.h" @@ -44,6 +46,13 @@ public: inline const QString& GetDescribe() const { return describe_; } + inline void SetHomeViewpoint(const osgEarth::Viewpoint& viewpoint) { + homeViewpoint_ = viewpoint; + } + inline const osgEarth::Viewpoint& GetHomeViewpoint() const { + return homeViewpoint_; + } + const std::vector& GetEntities() const { return entities_; } @@ -98,6 +107,7 @@ private: QString uuid_; QString describe_; QString path_; + osgEarth::Viewpoint homeViewpoint_; bool leaded_{ false }; std::vector entities_; diff --git a/src/workspace/WorkSpaceXMLParse.cpp b/src/workspace/WorkSpaceXMLParse.cpp index 72ed03e2..466921b6 100644 --- a/src/workspace/WorkSpaceXMLParse.cpp +++ b/src/workspace/WorkSpaceXMLParse.cpp @@ -4,7 +4,8 @@ #include "entities/EntitiesManager.h" #include "common/SpdLogger.h" -#include "WorkSpaceManager.h" +#include "workspace/WorkSpaceManager.h" +#include "utils/StringUtils.h" WorkSpaceXMLParse::WorkSpaceXMLParse(WorkSpace* workspace, QObject* parent) noexcept : QObject(parent) @@ -22,25 +23,35 @@ bool WorkSpaceXMLParse::ParseScene(const tinyxml2::XMLElement* element) { return false; } - const char* eleName = element->Name(); - if (0 == strcmp(eleName, "scene")) { - const char* name = element->Attribute("name"); + const tinyxml2::XMLAttribute* current = element->FirstAttribute(); + bool flag = false; + while (nullptr != current) { + const char* eleName = current->Name(); + if (0 == strcmp(eleName, "name")) { + const char* name = current->Value(); - workSpace_->SetName(name); - return true; - } else if (0 == strcmp(eleName, "describe")) { - const char* value = element->Attribute("describe"); + workSpace_->SetName(name); + flag = true; + + } else if (0 == strcmp(eleName, "describe")) { + const char* value = current->Value(); - workSpace_->SetDescribe(value); - return true; - } else if (0 == strcmp(eleName, "uuid")) { - const char* value = element->Attribute("uuid"); + workSpace_->SetDescribe(value); + flag = true; + } else if (0 == strcmp(eleName, "uuid")) { + const char* value = current->Value(); - workSpace_->SetUUid(value); - return true; + workSpace_->SetUUid(value); + flag = true; + } else if (0 == strcmp(eleName, "viewpoint")) { + const char* value = current->Value(); + workSpace_->SetHomeViewpoint(StringUtils::StringToViewpoint("home", value)); + flag = true; + } + current = current->Next(); } - LOG_WARN("element not has name"); - return false; + + return flag; } bool WorkSpaceXMLParse::ParseTimestep(const tinyxml2::XMLElement* element) { @@ -216,18 +227,6 @@ bool WorkSpaceXMLParse::Load(const QString& dyt) { else if (0 == strcmp(name, "ReportInfo")) { ParseReport(xmlElement); } - else { - /* Control* control = CreateControl(name); - if (nullptr == control) { - continue; - } - - if (!control_) { - Attach(control); - } - - control->Serialize(xmlElement);*/ - } xmlElement = xmlElement->NextSiblingElement(); } diff --git a/src/workspace/WorkSpaceXMLWrite.cpp b/src/workspace/WorkSpaceXMLWrite.cpp index 98a79d7b..734bf9a7 100644 --- a/src/workspace/WorkSpaceXMLWrite.cpp +++ b/src/workspace/WorkSpaceXMLWrite.cpp @@ -7,8 +7,9 @@ #include "workspace/LampStatus.h" #include "common/SpdLogger.h" +#include "utils/StringUtils.h" -#include "WorkSpaceManager.h" +#include "workspace/WorkSpaceManager.h" WorkSpaceXMLWrite::WorkSpaceXMLWrite(WorkSpace* workspace, QObject* parent) noexcept : QObject(parent) @@ -53,6 +54,7 @@ bool WorkSpaceXMLWrite::SaveScene(tinyxml2::XMLElement* scene) { scene->SetAttribute("name", name.toStdString().c_str()); scene->SetAttribute("describe", workSpace_->GetDescribe().toStdString().c_str()); scene->SetAttribute("uuid", workSpace_->GetUUid().toStdString().c_str()); + scene->SetAttribute("viewpoint", StringUtils::ViewpointToString(workSpace_->GetHomeViewpoint()).c_str()); return true; }