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++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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