#include "nmAnalyzeLayerGeometryDataSource.h" #include "nmDataAnalyzeManager.h" nmAnalyzeLayerGeometryDataSource::nmAnalyzeLayerGeometryDataSource(nmDataAnalyzeManager* manager) : m_pDataManager(manager), m_bLoaded(false) { // 只记录弱引用,后续每次访问都检查有效性;不延长工程或分析数据的生命周期。 } bool nmAnalyzeLayerGeometryDataSource::load(nmLayerGeometry& geometry) { // 对照快照来自真实层列表,不是后续从分析生成的默认值;空列表同样是有效的对照状态。 m_bLoaded = m_pDataManager && nmLayerGeometry::fromLayers(m_pDataManager->getLayers(), m_oOriginalGeometry); if (!m_bLoaded) return false; geometry = m_oOriginalGeometry; // 老工程没有几何层时才从分析初始化,已有层绝不在打开时重建。 return !geometry.m_vecLayers.isEmpty() || loadFromAnalysis(6000.0, geometry); } bool nmAnalyzeLayerGeometryDataSource::loadFromAnalysis(double firstTop, nmLayerGeometry& geometry) { // 只产生新的编辑副本,不改 m_oOriginalGeometry;用户重置后取消仍无需回滚工程数据。 return m_pDataManager && m_pDataManager->getAnalysisLayerGeometry(firstTop, geometry); } bool nmAnalyzeLayerGeometryDataSource::commit(const nmLayerGeometry& geometry) { // 原始数据是否已改变、是否允许替换以及旧对象如何释放,全部由数据层统一处理。 return m_bLoaded && m_pDataManager && m_pDataManager->replaceLayerGeometry(geometry, m_oOriginalGeometry); }