diff --git a/src/app/main.cpp b/src/app/main.cpp index ebaa788..ac298e8 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -750,6 +750,12 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re geopro::app::VolumePropertiesDialog dlg(name, info, &window); dlg.exec(); } + } else if (ddCode == QStringLiteral("dd_anomaly")) { + geopro::core::Anomaly a; + if (scene3dRepo->anomalyById(dsId.toStdString(), a)) { + geopro::app::AnomalyPropertiesDialog dlg(a, &window); + dlg.exec(); + } } }); // O点位置/字体本期 stub(TODO P4:弹框)。 diff --git a/src/data/api/Api3dRepository.cpp b/src/data/api/Api3dRepository.cpp index 5a889d8..ff5de08 100644 --- a/src/data/api/Api3dRepository.cpp +++ b/src/data/api/Api3dRepository.cpp @@ -325,6 +325,13 @@ bool Api3dRepository::isAnomalyDataset(const std::string& dsId) const { return anomalies_.find(dsId) != anomalies_.end(); } +bool Api3dRepository::anomalyById(const std::string& anomalyId, geopro::core::Anomaly& out) const { + const auto it = anomalies_.find(anomalyId); + if (it == anomalies_.end()) return false; + out = it->second.a; + return true; +} + bool Api3dRepository::sliceSpec(const std::string& dsId, SliceSpec& out) const { auto it = slices_.find(dsId); if (it == slices_.end()) return false; diff --git a/src/data/api/Api3dRepository.hpp b/src/data/api/Api3dRepository.hpp index 182b437..fee79d6 100644 --- a/src/data/api/Api3dRepository.hpp +++ b/src/data/api/Api3dRepository.hpp @@ -69,6 +69,8 @@ public: bool isSliceDataset(const std::string& dsId) const; // 该 dsId 是否为异常(dd_anomaly)——勾选异常不进帘面/体素渲染勾选,显隐另管。 bool isAnomalyDataset(const std::string& dsId) const; + // 按 id 取异常(三级树双击详情用);不存在返回 false。 + bool anomalyById(const std::string& anomalyId, geopro::core::Anomaly& out) const; // 取回已保存切片位姿(还原渲染用);不存在返回 false。 bool sliceSpec(const std::string& dsId, SliceSpec& out) const;