Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

895 lines
21 KiB
C++

#include "StdAfx.h"
#include "globalfunc.h"
#include "AcDbObjectPtr.h"
#include "WellSerial.h"
#include <stack>
#include "DbWell.h"
#include "Dbpipe.h"
#include "PickEntSet.h"
extern void ModifyWellDimPosAngle(Entity &ent);
extern int EvadeUpdating(Entity &ent);
//两条支管长度比较
bool CompareList(SSearchPipeList *pList1, SSearchPipeList *pList2)
{
if (pList1->m_iSpare > pList2->m_iSpare)
{
return false;
}
else if (pList1->m_iSpare == pList2->m_iSpare)
{
if (pList1->m_nSpare >= pList2->m_nSpare)
{
return false;
}
}
return true;
}
CWellSerial::CWellSerial()
{
m_bEvade = true;
m_bUpdateSerial = true;
}
void CWellSerial::SetEvade(bool bEvade)
{
m_bEvade = bEvade;
}
void CWellSerial::SetStartWell( Entity &ent )
{
m_entStartWell = ent;
}
void CWellSerial::SetEndWell( Entity &ent)
{
m_entEndWell = ent;
}
void CWellSerial::SetSerialType( int nType )
{
m_nSeriralType = nType;
}
void CWellSerial::SetAdd( bool bAdd )
{
m_bAdd = bAdd;
}
void CWellSerial::SetWellSerial( const CString &sSerial )
{
m_sWellSerial = sSerial;
}
bool CWellSerial::CheckWellSys()
{
CString sLayerS, sLayerE;
OPENOBJ_BEGIN(m_entStartWell, AcDb::kForRead, AecXDbWell, pEnt);
if(pEnt != NULL)
{
sLayerS = pEnt->layer();
}
OPENOBJ_END();
OPENOBJ_BEGIN(m_entEndWell, AcDb::kForRead, AecXDbWell, pEnt);
if(pEnt != NULL)
{
sLayerE = pEnt->layer();
}
OPENOBJ_END();
if (sLayerS.Compare(sLayerE) == 0)
{
m_sWellLayer = sLayerS;
return true;
}
return false;
}
void CWellSerial::UpdateWellSerival()
{
// 起始井和终止井不是同一图层 zxl 2013.04.25 add
if (!CheckWellSys())
{
acedPrompt(_T("\n起点井与终点井不属于同一类型,请再次选择!"));
return;
}
// 根据起点井搜索管网系统
SSearchPipeList *pList = new SSearchPipeList();
PickSet ssAll(SS_FREE);
if(!GlobalFunc::SearchSprinkPipeSys(m_entStartWell, NULL, pList, ssAll))
{
acutPrintf(_T("\n发现系统存在回路,请核查!"));
delete pList;
return;
}
if (pList != NULL)
{
pList->m_iType = 3;
}
// 初始化管网,以判断井是否已编号
SSearchPipeList *pLstNew = new SSearchPipeList;
InitPipeSys(pList, pLstNew);
while (pLstNew->m_pPrevious != NULL)
{
pLstNew = pLstNew->m_pPrevious;
}
delete pList;
pList = NULL;
pList = pLstNew;
// 找出终点井
SSearchPipeList *pEndWell = FindEndWell(pList);
if (pEndWell == NULL)
{
// 提示请在同一管网上选择井
acutPrintf(_T("\n起点井与终点井不在同一管网系统中,请核查连接是否正确!\n"));
ssAll.Redraw(3);
delete pList;
return;
}
//选择终止井后 实施躲避更新时缩放全屏 使管网中所有井进入当前屏幕 zxl 2011.11.07 add
if (m_bEvade)
{
XPoint ptLow,ptUp;
ssAll.GetExtend(ptLow,ptUp);
GlobalFunc::AssureInCurrentView_New(ptLow,ptUp);//支持UCS
}
// 根据支路编号方式,进行编号
switch(m_nSeriralType)
{
case 0: // Y24 ← Y24-3 ←Y24-2 ←Y24-1
{
UpdateSerialType0(pEndWell);
break;
}
case 1: // Y24 ← Y24-1 ←Y24-2 ←Y24-3
{
UpdateSerialType1(pEndWell);
break;
}
case 2: // Y24 ← Y83 ←Y82 ←Y81
{
UpdateSerialType2(pEndWell, false);
break;
}
case 3: // Y24 ← Y81 ←Y82 ←Y83
{
UpdateSerialType3(pEndWell, false);
break;
}
case 4: // Y24 ← Y27 ←Y26 ←Y25
{
UpdateSerialType4(pEndWell, false);
break;
}
case 5: // Y24 ← Y25 ←Y26 ←Y27
{
UpdateSerialType5(pEndWell, false);
break;
}
case 6: // 不修改支路井编号
{
UpdateSerialType6(pEndWell);
break;
}
}
if (m_bUpdateSerial)
{
m_bAdd = !m_bAdd;
ChangeWellSerial();
}
acutPrintf(XString(_T("终点井编号为%s!"), m_sWellSerial));
delete pList;
}
SSearchPipeList* CWellSerial::FindEndWell(SSearchPipeList *pList)
{
if (pList == NULL)
{
return NULL;
}
AcDbObjectId id;
acdbGetObjectId(id, m_entEndWell);
std::stack<SSearchPipeList *> stWell;
stWell.push(pList);
SSearchPipeList *pTemp = NULL;
while (!stWell.empty())
{
pTemp = stWell.top();
stWell.pop();
if (pTemp->m_iType == 3)
{
if (id == pTemp->m_ID)
{
return pTemp;
}
}
for (int i = 0; i < pTemp->m_lstNode.Length(); i++)
{
stWell.push(pTemp->m_lstNode[i]);
}
}
return NULL;
}
// zxl 2013.04.27 add
void SetValue(SSearchPipeList *pS, SSearchPipeList *qD)
{
qD->m_bNeedCale = pS->m_bNeedCale;
qD->m_csName = pS->m_csName;
qD->m_ID = pS->m_ID;
qD->m_iType = pS->m_iType;
}
void CWellSerial::InitPipeSys(SSearchPipeList *pList, SSearchPipeList *pLstNew)
{
if (pList == NULL)
{
return;
}
// zxl 2013.04.27 add
pList->m_bNeedCale = false;
if (!(pList->m_iType != 3 && pList->m_lstNode.Length() > 1) && !(pList->m_iType == 3 && !IsSameSys(pList->m_ID)))
{
SetValue(pList, pLstNew);
pLstNew->m_lstNode.Reset();
}
else
{
pLstNew->m_pPrevious->m_lstNode.Remove();
pLstNew = pLstNew->m_pPrevious;
while (pLstNew != NULL)
{
if (pLstNew->m_iType == 3 && IsSameSys(pLstNew->m_ID))
{
break;
}
for (int n = 0; n < pLstNew->m_pPrevious->m_lstNode.Length(); n++)
{
if (pLstNew->m_pPrevious->m_lstNode[n] == pLstNew)
{
pLstNew->m_pPrevious->m_lstNode.Remove(n);
}
}
pLstNew = pLstNew->m_pPrevious;
}
}
for (int i = 0; i < pList->m_lstNode.Length(); i++)
{
// zxl 2013.04.27 add
SSearchPipeList *p = new SSearchPipeList;
pLstNew->m_lstNode.Append(p);
p->m_pPrevious = pLstNew;
InitPipeSys(pList->m_lstNode[i], p);
}
}
void CWellSerial::SetPipeDirection(std::vector<SSearchPipeList *> &vecPipe, std::vector<SSearchPipeList *> &vecWell, bool bBra = false)
{
std::vector<SSearchPipeList*>::iterator itPipe;
std::vector<SSearchPipeList*>::iterator itWell;
for (itPipe = vecPipe.begin(), itWell = vecWell.begin(); itPipe != vecPipe.end() && itWell != vecWell.end(); itPipe++, itWell++)
{
XPoint ptFront;
SSearchPipeList *pListWell = *itWell;
OPENOBJ_BEGIN(pListWell->m_ID, AcDb::kForRead, CDbEquipment, pEquip);
if (pEquip == NULL)
{
continue;
}
ptFront = pEquip->GetLocation();
OPENOBJ_END();
SSearchPipeList *pListPipe = *itPipe;
OPENOBJ_BEGIN(pListPipe->m_ID, AcDb::kForWrite, CDbPipe, pPipe);
if(pPipe)
{
XPoint p1 = ptFront;
p1.z = 0;
XPoint p2 = pPipe->StartPoint();
p2.z = 0;
if (!bBra)//主干流向
{
if(p1 == p2)
pPipe->SetFlowDir(TPipeSys::kFromEnd);
else
pPipe->SetFlowDir(TPipeSys::kFromStart);
}
else//分支流向
{
if(p1 == p2)
pPipe->SetFlowDir(TPipeSys::kFromStart);
else
pPipe->SetFlowDir(TPipeSys::kFromEnd);
}
}
OPENOBJ_END();
}
}
void CWellSerial::UpdateSerialType0( SSearchPipeList *pEndWell )
{
std::vector<SSearchPipeList *> vecWell;
std::vector<SSearchPipeList *> vecPipe;
GetMainWell(pEndWell, vecWell, vecPipe); // 获得主干上的井和管线
SetPipeDirection(vecPipe, vecWell);
CString sName;
AcDbObjectId idEnd = pEndWell->m_ID;
std::vector<SSearchPipeList *>::reverse_iterator it;
//遍历主干井
for (it = vecWell.rbegin(); it != vecWell.rend(); it++)
{
AcDbObjectId id = NULL;
SSearchPipeList *pList = *it;
if (pList->m_iType != 3)
{
continue;
}
id = pList->m_ID;
ModifyWellSerial(id);
pList->m_csName = m_sWellSerial;
sName = m_sWellSerial;
if (pList->m_lstNode.Length() > 1)
{
ModifyBranchSeiral0(pList, pList->m_ID);
}
m_sWellSerial = sName;
ChangeWellSerial();
}
}
// 编号 支井(从叶子节点向主干递减) zxl 2012.10.18 add
void CWellSerial::ModifyBranchSeiral0(SSearchPipeList *pList, AcDbObjectId &id)
{
int iLen = 0;
double dLen = 0;
CString csName = pList->m_csName;
//寻找分支,从分支末端进行编号
if (pList->m_lstNode.Length() > 1)
{
std::vector<SSearchPipeList *> vecLongestList;
std::vector<SSearchPipeList *> vecPList;
//遍历各个分支节点,得到每条分支的最长管线
for (int i = 0; i < pList->m_lstNode.Length(); i++)
{
SSearchPipeList *pListBra = pList->m_lstNode[i];
if (!pListBra->m_bNeedCale)
{
iLen = 0;
dLen = 0;
vecPList.clear();
CalcNodeNum(pListBra, iLen, dLen, vecPList);
std::sort(vecPList.begin(), vecPList.end(), CompareList);
pListBra = vecPList.back();
vecLongestList.push_back(pListBra);
}
}
//以每个分支的最长管线作为主干进行递归编号
std::sort(vecLongestList.begin(), vecLongestList.end(), CompareList);
m_sWellSerial.Format(_T("%s-1"), csName);
std::vector<SSearchPipeList *>::reverse_iterator it;
CString csSerial;
for (it = vecLongestList.rbegin(); it != vecLongestList.rend(); it++)
{
SSearchPipeList *pLongList = *it;
//从末端开始进行编号
while (!pLongList->m_bNeedCale)
{
if (pLongList->m_iType == 3)
{
ModifyWellSerial(pLongList->m_ID);
pLongList->m_csName = m_sWellSerial;
pLongList->m_bNeedCale = true;
m_sWellSerial = GlobalFunc::PlusString(m_sWellSerial, 1, TRUE);
csSerial = m_sWellSerial;
ModifyBranchSeiral0(pLongList, pLongList->m_ID);// 记录分支号,对分支的分支进行编号
m_sWellSerial = csSerial;
}
if (pLongList->m_iType == 0)//设置管线流向
{
std::vector<SSearchPipeList *> vecBraWell;
std::vector<SSearchPipeList *> vecBraPipe;
vecBraPipe.push_back(pLongList);
vecBraWell.push_back(pLongList->m_pPrevious);
SetPipeDirection(vecBraPipe, vecBraWell);
}
pLongList = pLongList->m_pPrevious;
}
}
}
}
// 编号 支井(从叶子节点向主干递增) zxl 2012.10.18 add
void CWellSerial::ModifyBranchSeiral1(SSearchPipeList *pList, AcDbObjectId &id)
{
int iLen = 0;
double dLen = 0;
CString csName = pList->m_csName;
//寻找分支,从分支末端进行编号
if (pList->m_lstNode.Length() > 1)
{
std::vector<SSearchPipeList *> vecLongestList;
std::vector<SSearchPipeList *> vecPList;
//遍历各个分支节点,得到每条分支的最长管线
for (int i = 0; i < pList->m_lstNode.Length(); i++)
{
SSearchPipeList *pListBra = pList->m_lstNode[i];
if (!pListBra->m_bNeedCale)
{
iLen = 0;
dLen = 0;
vecPList.clear();
CalcNodeNum(pListBra, iLen, dLen, vecPList);
std::sort(vecPList.begin(), vecPList.end(), CompareList);
pListBra = vecPList.back();
vecLongestList.push_back(pListBra);
}
}
//以每个分支的最长管线作为主干进行递归编号
std::sort(vecLongestList.begin(), vecLongestList.end(), CompareList);
m_sWellSerial.Format(_T("%s-1"), csName);
std::vector<SSearchPipeList *>::reverse_iterator it;
CString csSerial;
for (it = vecLongestList.rbegin(); it != vecLongestList.rend(); it++)
{
SSearchPipeList *pLongList = *it;
//从分支开始处进行编号
std::vector<SSearchPipeList *> vecLst;
while (!pLongList->m_bNeedCale)
{
pLongList->m_bNeedCale = true;
vecLst.push_back(pLongList);
pLongList = pLongList->m_pPrevious;
}
std::vector<SSearchPipeList *>::reverse_iterator itR;
for (itR = vecLst.rbegin(); itR!= vecLst.rend(); itR++)
{
pLongList = *itR;
if (pLongList->m_iType == 3)
{
ModifyWellSerial(pLongList->m_ID);
pLongList->m_csName = m_sWellSerial;
pLongList->m_bNeedCale = true;
m_sWellSerial = GlobalFunc::PlusString(m_sWellSerial, 1, TRUE);
csSerial = m_sWellSerial;
ModifyBranchSeiral1(pLongList, pLongList->m_ID);// 记录分支号,对分支的分支进行编号
m_sWellSerial = csSerial;
}
if (pLongList->m_iType == 0)//设置管线流向
{
std::vector<SSearchPipeList *> vecBraWell;
std::vector<SSearchPipeList *> vecBraPipe;
vecBraPipe.push_back(pLongList);
vecBraWell.push_back(pLongList->m_pPrevious);
SetPipeDirection(vecBraPipe, vecBraWell);
}
}
}
}
}
void CWellSerial::UpdateSerialType1( SSearchPipeList *pEndWell )
{
std::vector<SSearchPipeList *> vecWell;
std::vector<SSearchPipeList *> vecPipe;
GetMainWell(pEndWell, vecWell, vecPipe); // 获得主干上的井和管线
SetPipeDirection(vecPipe, vecWell);
CString sName;
AcDbObjectId idEnd = pEndWell->m_ID;
std::vector<SSearchPipeList *>::reverse_iterator it;
//遍历主干井
for (it = vecWell.rbegin(); it != vecWell.rend(); it++)
{
AcDbObjectId id = NULL;
SSearchPipeList *pList = *it;
if (pList->m_iType != 3)
{
continue;
}
id = pList->m_ID;
ModifyWellSerial(id);
pList->m_csName = m_sWellSerial;
sName = m_sWellSerial;
if (pList->m_lstNode.Length() > 1)
{
ModifyBranchSeiral1(pList, pList->m_ID);
}
m_sWellSerial = sName;
ChangeWellSerial();
}
}
//检查井是否只有一条支路井
bool CWellSerial::CheckPipeBra(SSearchPipeList *&pListBra)
{
int iNum = 0;
int iNo = 0;
SSearchPipeList *pListTemp;
for (int j = 0; j < pListBra->m_lstNode.Length(); j++)
{
pListTemp = pListBra->m_lstNode[j];
if (pListTemp->m_bNeedCale)
{
continue;
}
SSearchPipeList *pListNode;
for (int n = 0; n < pListTemp->m_lstNode.Length(); n++)
{
pListNode = pListTemp->m_lstNode[n];
if (pListNode->m_iType == 3)
{
iNum++;
iNo = j;
}
}
}
if (iNum > 1)
{
return false;
}
else if(pListBra->m_lstNode.Length() > 0)
{
pListBra = pListBra->m_lstNode[iNo];
return true;
}
return false;
}
void CWellSerial::UpdateSerialType2or3(SSearchPipeList *pEndWell, bool bBraSerial, bool bAdd)
{
std::vector<SSearchPipeList *> vecWell;
std::vector<SSearchPipeList *> vecPipe;
GetMainWell(pEndWell, vecWell, vecPipe); // 获得主干上的井
if (!bBraSerial)
{
SetPipeDirection(vecPipe, vecWell);
}
else
{
SetPipeDirection(vecPipe, vecWell, true);
}
//判断是支路,且递增性与该类型标注相同时从分支起始处编号
if (bBraSerial && bAdd)
{
std::reverse(vecWell.begin(), vecWell.end());
}
std::vector<SSearchPipeList *>::reverse_iterator it;
for (it = vecWell.rbegin(); it != vecWell.rend(); it++)
{
SSearchPipeList *pList = *it;
if (pList->m_iType != 3)
{
continue;
}
ModifyWellSerial(pList->m_ID);
ChangeWellSerial();
}
if (bBraSerial && bAdd)
{
std::reverse(vecWell.begin(), vecWell.end());
}
//遍历支路时,从叶子节点开始遍历
if (bBraSerial)
{
std::reverse(vecWell.begin(), vecWell.end());
}
int iLen = 0;
double dLen = 0;
//遍历主干,分别对支路进行编号
for (it = vecWell.rbegin(); it != vecWell.rend(); it++)
{
SSearchPipeList *pList = *it;
if (pList->m_lstNode.Length() > 1)
{
std::vector<SSearchPipeList *> vecLongestList;
std::vector<SSearchPipeList *> vecPList;
//遍历各个分支节点,得到每条分支的最长管线
for (int i = 0; i < pList->m_lstNode.Length(); i++)
{
SSearchPipeList *pListBra = pList->m_lstNode[i];
if (!pListBra->m_bNeedCale)
{
iLen = 0;
dLen = 0;
vecPList.clear();
CalcNodeNum(pListBra, iLen, dLen, vecPList);
std::sort(vecPList.begin(), vecPList.end(), CompareList);
pListBra = vecPList.back();
vecLongestList.push_back(pListBra);
}
}
//以每个分支的最长管线作为主干进行递归编号
std::sort(vecLongestList.begin(), vecLongestList.end(), CompareList);
while (!vecLongestList.empty())
{
SSearchPipeList *pLongList = vecLongestList.back();
vecLongestList.pop_back();
UpdateSerialType2or3(pLongList, true, bAdd);
}
}
}
}
void CWellSerial::UpdateSerialType2( SSearchPipeList *pEndWell, bool bBraSerial)
{
UpdateSerialType2or3(pEndWell, bBraSerial, m_bAdd);
}
void CWellSerial::UpdateSerialType3( SSearchPipeList *pEndWell, bool bBraSerial)
{
UpdateSerialType2or3(pEndWell, bBraSerial, !m_bAdd);
}
//主干和分支混合标注:先编号主干,遇到分支则开始分支编号
void CWellSerial::UpdateSerialType4or5(SSearchPipeList *pEndWell, bool bBraSerial, bool bAdd)
{
std::vector<SSearchPipeList *> vecWell;
std::vector<SSearchPipeList *> vecPipe;
GetMainWell(pEndWell, vecWell, vecPipe); // 获得主干上的井
if (!bBraSerial)
{
SetPipeDirection(vecPipe, vecWell);
}
if (bBraSerial && bAdd)
{
std::reverse(vecWell.begin(), vecWell.end());
}
int iLen = 0;
double dLen = 0;
std::vector<SSearchPipeList*>::reverse_iterator it;
//遍历主干并编号,遇到对支路时对支路进行编号
for (it = vecWell.rbegin(); it != vecWell.rend(); it++)
{
SSearchPipeList *pList = *it;
if (pList->m_iType != 3)
{
continue;
}
ModifyWellSerial(pList->m_ID);
ChangeWellSerial();
if (pList->m_lstNode.Length() > 1)
{
std::vector<SSearchPipeList *> vecLongestList;
std::vector<SSearchPipeList *> vecPList;
//遍历各个分支节点,得到每条分支的最长管线
for (int i = 0; i < pList->m_lstNode.Length(); i++)
{
SSearchPipeList *pListBra = pList->m_lstNode[i];
if (!pListBra->m_bNeedCale)
{
iLen = 0;
dLen = 0;
vecPList.clear();
CalcNodeNum(pListBra, iLen, dLen, vecPList);
std::sort(vecPList.begin(), vecPList.end(), CompareList);
pListBra = vecPList.back();
vecLongestList.push_back(pListBra);
}
}
//以每个分支的最长管线作为主干进行递归编号
std::sort(vecLongestList.begin(), vecLongestList.end(), CompareList);
while (!vecLongestList.empty())
{
SSearchPipeList *pLongList = vecLongestList.back();
vecLongestList.pop_back();
UpdateSerialType2or3(pLongList, true, bAdd);
}
}
}
}
void CWellSerial::UpdateSerialType4( SSearchPipeList *pEndWell, bool bBraSerial)
{
UpdateSerialType4or5(pEndWell, bBraSerial, m_bAdd);
}
void CWellSerial::UpdateSerialType5( SSearchPipeList *pEndWell, bool bBraSerial)
{
UpdateSerialType4or5(pEndWell, bBraSerial, !m_bAdd);
}
void CWellSerial::CalcNodeNum( SSearchPipeList *pList, int iLen, double dLen, std::vector<SSearchPipeList *> &vecPList)
{
if (pList->m_lstNode.Length() == 0)
{
pList->m_iSpare = iLen;
pList->m_nSpare = dLen;
vecPList.push_back(pList);
return;
}
if (pList->m_iType == 3)
{
iLen ++;
}
else if(pList->m_iType == 0)
{//获取管长
OPENOBJ_BEGIN(pList->m_ID, AcDb::kForRead, CDbPipe, pEnt);
if(pEnt)
{
XPoint ptS, ptE;
pEnt->getStartPoint(ptS);
pEnt->getEndPoint(ptE);
dLen += ptS.Distance2d(ptE);
}
OPENOBJ_END();
}
for (int i = 0; i < pList->m_lstNode.Length(); i++)
{
CalcNodeNum(pList->m_lstNode[i], iLen, dLen, vecPList);
}
}
void CWellSerial::UpdateSerialType6( SSearchPipeList *pEndWell)
{
std::vector<SSearchPipeList *> vecWell;
std::vector<SSearchPipeList *> vecPipe;
GetMainWell(pEndWell, vecWell, vecPipe); // 获得主干上的井
SetPipeDirection(vecPipe, vecWell);
std::vector<SSearchPipeList *>::reverse_iterator it;
for (it = vecWell.rbegin(); it != vecWell.rend(); it++)
{
SSearchPipeList *pList = *it;
if (pList->m_iType != 3)
{
continue;
}
ModifyWellSerial(pList->m_ID);
ChangeWellSerial();
}
}
// 判断该井是否和起始井是同一系统 zxl 2013.04.25 add
bool CWellSerial::IsSameSys(const AcDbObjectId &id)
{
bool bIsSame = false;
OPENOBJ_BEGIN(id, AcDb::kForRead, AecXDbWell, pEnt);
if(pEnt != NULL)
{
CString sLayer = pEnt->layer();
if (sLayer.Compare(m_sWellLayer) == 0)
{
bIsSame = true;
}
}
OPENOBJ_END();
return bIsSame;
}
void CWellSerial::GetMainWell( SSearchPipeList *pEndWell, std::vector<SSearchPipeList *> &vecWell, std::vector<SSearchPipeList*> &vecPipe)
{
while(pEndWell != NULL)
{
if (pEndWell->m_bNeedCale)
{
return;
}
if (pEndWell->m_iType == 3 || pEndWell->m_iType == 4)
{
vecWell.push_back(pEndWell);
}
else if (pEndWell->m_iType == 0)
{
vecPipe.push_back(pEndWell);
}
pEndWell->m_bNeedCale = true;
pEndWell = pEndWell->m_pPrevious;
}
}
void CWellSerial::ModifyWellSerial(const AcDbObjectId &idWell)
{
OPENOBJ_BEGIN(idWell, AcDb::kForWrite, AecXDbWell, pEnt);
if(pEnt)
{
pEnt->SetWellName(m_sWellSerial);
pEnt->EnableDrawLabel(true);//zxl 2011.12.05 add 显示井编号
}
OPENOBJ_END();
// 调整井编号角度和距离
ads_name name;
Acad::ErrorStatus es = acdbGetAdsName(name,idWell);
Entity ent = name;
ModifyWellDimPosAngle(ent);
// 实施躲避更新
if (m_bEvade)
{
EvadeUpdating(ent);
}
}
//判断井编号是否小于1
bool CWellSerial::IsLessEqual1()
{
TCHAR chText;
CString strText1 = _T("");
for (int i = m_sWellSerial.GetLength(); i >0; i--)
{
chText = m_sWellSerial[i - 1];
if(chText <= _T('9') && chText >= _T('0'))
{
strText1.Insert(0, chText);
}
else
{
break;
}
}
double dNo = 0.0;
dNo = _tstof(strText1);
if (dNo <= 1.0)
{
return true;
}
return false;
}
//判断递增还是递减,重设井编号名字
void CWellSerial::ChangeWellSerial()
{
if (m_bAdd)//井编号递增
{
m_sWellSerial = GlobalFunc::PlusString(m_sWellSerial, 1, TRUE);
m_bUpdateSerial= true;
}
else//井编号递减
{
if (IsLessEqual1())//井编号递减为1时
{
m_bUpdateSerial = false;
}
else
{
m_sWellSerial = GlobalFunc::PlusString(m_sWellSerial, -1,TRUE);
m_bUpdateSerial = true;
}
}
}