|
|
|
@ -975,11 +975,40 @@ nmDataWellBase* nmDataAnalyzeManager::changeWellType(nmDataWellBase* pOldWellDat
|
|
|
|
return pNewWellData;
|
|
|
|
return pNewWellData;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 实现 removeWell 函数
|
|
|
|
bool nmDataAnalyzeManager::isPrimaryWell(
|
|
|
|
|
|
|
|
const nmDataWellBase* pWellData) const
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if(pWellData == nullptr) {
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const QString sPrimaryWellCode =
|
|
|
|
|
|
|
|
m_oNumericalAnalysisCase.getPrimaryWellCode();
|
|
|
|
|
|
|
|
return !sPrimaryWellCode.isEmpty() &&
|
|
|
|
|
|
|
|
pWellData->getWellCode() == sPrimaryWellCode;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool nmDataAnalyzeManager::canRemoveWell(
|
|
|
|
|
|
|
|
const nmDataWellBase* pWellData) const
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if(pWellData == nullptr || isPrimaryWell(pWellData)) {
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 不通过 WellCode 代替所有权判断,避免同编码外部对象误删管理器内的井。
|
|
|
|
|
|
|
|
for(int nIndex = 0; nIndex < m_vWellData.size(); ++nIndex) {
|
|
|
|
|
|
|
|
if(m_vWellData[nIndex] == pWellData) {
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool nmDataAnalyzeManager::removeWell(nmDataWellBase* pWellData)
|
|
|
|
bool nmDataAnalyzeManager::removeWell(nmDataWellBase* pWellData)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// 第一步:只有当前管理器真正拥有的井才允许删除,非法指针不能先污染分析方案。
|
|
|
|
// 固定主井及非法指针必须在任何版本递增、图元解绑和对象删除前拒绝。
|
|
|
|
if(pWellData == nullptr || !m_vWellData.contains(pWellData)) {
|
|
|
|
// 该检查是数据层最终兜底,不能只依赖 Map 界面的提前拦截。
|
|
|
|
|
|
|
|
if(!canRemoveWell(pWellData)) {
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -1001,11 +1030,6 @@ bool nmDataAnalyzeManager::removeWell(nmDataWellBase* pWellData)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
m_oNumericalAnalysisCase.setIncludedWells(vecIncludedWells);
|
|
|
|
m_oNumericalAnalysisCase.setIncludedWells(vecIncludedWells);
|
|
|
|
|
|
|
|
|
|
|
|
// 第四步:主分析井被删除时清空主井;新的主井必须由上层业务明确指定。
|
|
|
|
|
|
|
|
if(m_oNumericalAnalysisCase.getPrimaryWellCode() == removedWellCode) {
|
|
|
|
|
|
|
|
m_oNumericalAnalysisCase.setPrimaryWellCode(QString());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果删的是当前井,切换到其他有效井;如果没有,则清空当前井指针。
|
|
|
|
// 如果删的是当前井,切换到其他有效井;如果没有,则清空当前井指针。
|
|
|
|
if(isCurrentWell) {
|
|
|
|
if(isCurrentWell) {
|
|
|
|
m_pCurDataWell = nullptr;
|
|
|
|
m_pCurDataWell = nullptr;
|
|
|
|
@ -1048,13 +1072,8 @@ bool nmDataAnalyzeManager::removeWell(nmDataWellBase* pWellData)
|
|
|
|
|
|
|
|
|
|
|
|
void nmDataAnalyzeManager::removeWellDataAndPlot(nmDataWellBase* pWellData)
|
|
|
|
void nmDataAnalyzeManager::removeWellDataAndPlot(nmDataWellBase* pWellData)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// 参数校验
|
|
|
|
// 删除图元之前先执行同一业务预检,避免主井数据被拒绝后图元已经消失。
|
|
|
|
if(pWellData == nullptr) {
|
|
|
|
if(!canRemoveWell(pWellData)) {
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 公共删井入口中不允许删除当前井,避免活动井引用失效
|
|
|
|
|
|
|
|
if(pWellData == getCurWellData()) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -1483,8 +1502,11 @@ void nmDataAnalyzeManager::initCurWellData()
|
|
|
|
this->setCurWellData(pHFracturedWell);
|
|
|
|
this->setCurWellData(pHFracturedWell);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 当前流动段井是数值分析入口井;结果井选择独立保存在快照查看状态中。
|
|
|
|
// 第一次导入的当前流动段井固定为数值分析入口井。后续切换查看井或
|
|
|
|
if(m_pCurDataWell != nullptr && !m_pCurDataWell->getWellCode().isEmpty()) {
|
|
|
|
// 重复初始化不得改变主井身份及其求解角色。
|
|
|
|
|
|
|
|
if(m_oNumericalAnalysisCase.getPrimaryWellCode().isEmpty() &&
|
|
|
|
|
|
|
|
m_pCurDataWell != nullptr &&
|
|
|
|
|
|
|
|
!m_pCurDataWell->getWellCode().isEmpty()) {
|
|
|
|
const QString sPrimaryWellCode = m_pCurDataWell->getWellCode();
|
|
|
|
const QString sPrimaryWellCode = m_pCurDataWell->getWellCode();
|
|
|
|
m_oNumericalAnalysisCase.setPrimaryWellCode(sPrimaryWellCode);
|
|
|
|
m_oNumericalAnalysisCase.setPrimaryWellCode(sPrimaryWellCode);
|
|
|
|
m_oNumericalAnalysisCase.setPrimaryWellMode(
|
|
|
|
m_oNumericalAnalysisCase.setPrimaryWellMode(
|
|
|
|
|