📄 hausdorff.txt
字号:
void BaseStruct::GetTopologyObjs(CList<BaseStruct *, BaseStruct *> *pBaseList,CList<ZBXY*, ZBXY*>& objs)
{
int i;
POSITION pos,temp, posTemp;
BaseStruct *pBaseStruct;
ZBXY* zb, *zbTemp;
double x, y, FirstX, FirstY, EndX, EndY;
CArray<POSITION,POSITION> posArray;
pos = pBaseList->GetHeadPosition();
if (tc[0]!='A')//||tc[1]!='A')----les 070403 防止出现tc=AT不能铺染的情况
return;
while (pos!=NULL)
{
pBaseStruct = pBaseList->GetNext(pos);
if ((pBaseStruct->left)==ysh || (pBaseStruct->right)==ysh)
{
temp = pBaseList->Find(pBaseStruct);
posArray.Add(temp);
}
}
if(posArray.GetSize()<=0)
{
return;
}
//--------------les--070418------------
//调试居民地数据时候发现“死机”现象后修改的程序
int count;
count = posArray.GetSize();
ZBXY *FirstPt;
ZBXY *EndPt;
BOOL bFlag = FALSE;
for(i=0; i<count; i++)
{
BaseStruct *pBaseStru = pBaseList->GetAt(posArray.GetAt(i));
FirstPt = pBaseStru->GetFirstPt();
EndPt = pBaseStru->GetEndPt();
if(FirstPt->X==EndPt->X && FirstPt->Y==EndPt->Y && (pBaseStru->left==1
||pBaseStru->right==1))
{
bFlag = TRUE;
posTemp = pBaseList->GetAt(posArray.GetAt(i))->CoorList.GetHeadPosition();
while (posTemp!=NULL)
{
zbTemp = pBaseList->GetAt(posArray.GetAt(i))->CoorList.GetNext(posTemp);
objs.AddTail(zbTemp);
}
break;
}
else
continue;
}
if(bFlag)
{
return;
}
//--------------------------------------
if ((pBaseList->GetAt(posArray.GetAt(0)))->left == ysh)
{
posTemp = (pBaseList->GetAt(posArray.GetAt(0))->CoorList).GetHeadPosition();
while (posTemp!=NULL)
{
zbTemp = (pBaseList->GetAt(posArray.GetAt(0))->CoorList).GetNext(posTemp);
objs.AddTail(zbTemp);
}
zb = pBaseList->GetAt(posArray.GetAt(0))->GetEndPt();
x = zb->X;
y = zb->Y;
}
else
{
posTemp = pBaseList->GetAt(posArray.GetAt(0))->CoorList.GetTailPosition();
while (posTemp!=NULL)
{
zbTemp = pBaseList->GetAt(posArray.GetAt(0))->CoorList.GetPrev(posTemp);
objs.AddTail(zbTemp);
}
zb = pBaseList->GetAt(posArray.GetAt(0))->GetFirstPt();
x = zb->X;
y = zb->Y;
}
int countFlag = 1;
int delFlag = 0;
while (posArray.GetSize()!=1)
{
for (i=1; i<posArray.GetSize(); i++)
{
FirstX = pBaseList->GetAt(posArray.GetAt(i))->GetFirstPt()->X;
FirstY = pBaseList->GetAt(posArray.GetAt(i))->GetFirstPt()->Y;
EndX = pBaseList->GetAt(posArray.GetAt(i))->GetEndPt()->X;
EndY = pBaseList->GetAt(posArray.GetAt(i))->GetEndPt()->Y;
if ((x == FirstX && y == FirstY) || (x == EndX && y == EndY))
{
if (x == EndX && y == EndY)
{
posTemp = pBaseList->GetAt(posArray.GetAt(i))->CoorList.GetTailPosition();
while (posTemp!=NULL)
{
zbTemp = pBaseList->GetAt(posArray.GetAt(i))->CoorList.GetPrev(posTemp);
objs.AddTail(zbTemp);
}
zb = pBaseList->GetAt(posArray.GetAt(i))->GetFirstPt();
x = pBaseList->GetAt(posArray.GetAt(i))->GetFirstPt()->X;
y = pBaseList->GetAt(posArray.GetAt(i))->GetFirstPt()->Y;
delFlag = i;
countFlag++;
}
else
{
posTemp = pBaseList->GetAt(posArray.GetAt(i))->CoorList.GetHeadPosition();
while (posTemp!=NULL)
{
zbTemp = pBaseList->GetAt(posArray.GetAt(i))->CoorList.GetNext(posTemp);
objs.AddTail(zbTemp);
}
zb = pBaseList->GetAt(posArray.GetAt(i))->GetEndPt();
x = pBaseList->GetAt(posArray.GetAt(i))->GetEndPt()->X;
y = pBaseList->GetAt(posArray.GetAt(i))->GetEndPt()->Y;
delFlag = i;
countFlag++;
}
if (countFlag == 1)
//posArray.RemoveAt(i-1);/////
posArray.RemoveAt(0);
else
posArray.RemoveAt(delFlag);
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -