You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Src/nmNum/nmSubWnd/nmAnalyzeLayerGeometryDataS...

31 lines
1.5 KiB
C++

#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);
}