537 lines
15 KiB
C++
537 lines
15 KiB
C++
#include "stdafx.h"
|
||
#include "commonRoad.h"
|
||
//#include <dbobjptr.h>
|
||
#include "TDbObjectPointer.h"
|
||
|
||
#include "RoadDataCenterNew.h"
|
||
|
||
|
||
void CRoadDataCenterNew::SelectEntInCAD(const AcGePoint2d &ptLeftDown, const AcGePoint2d &ptRightUp,
|
||
AcAryLineEntEdgeAdapterPtr &lineEdges, AcAryArcEntEdgeAdapterPtr &arcEdges,
|
||
AcAryLineEntEdgeAdapterPtr &lineMids, AcAryArcEntEdgeAdapterPtr &arcMids)
|
||
{
|
||
//add tyj 20161020:解决在UCS坐标系下,道路无法正常倒角
|
||
/*-----------------begin-------------------*/
|
||
TADSGePoint3d ptSave1(ptLeftDown.x, ptLeftDown.y, 0.0);
|
||
TADSGePoint3d ptSave2(ptRightUp.x, ptRightUp.y, 0.0);
|
||
ptSave1 = Wcs2Ucs(ptSave1);
|
||
ptSave2 = Wcs2Ucs(ptSave2);
|
||
ads_point pt1 = {ptSave1.x, ptSave1.y, 0.0};
|
||
ads_point pt2 = {ptSave2.x, ptSave2.y, 0.0};
|
||
//ads_point pt1 = {ptLeftDown.x, ptLeftDown.y, 0.0};
|
||
//ads_point pt2 = {ptRightUp.x, ptRightUp.y, 0.0};
|
||
/*------------------end--------------------*/
|
||
CString strRoadLay = LAY_ROAD;
|
||
CString strMidRoadLay = LAY_ROADDOTE;
|
||
|
||
ads_name ssName; // 差选!
|
||
acedSSGet(_T("C"), pt1, pt2, NULL, ssName);
|
||
|
||
Adesk::Int32 len = 0;
|
||
acedSSLength(ssName, &len);
|
||
ads_name ent;
|
||
AcDbObjectId id;
|
||
|
||
for (long i = 0; i < len; i++)
|
||
{
|
||
if (acedSSName(ssName, i, ent) == RTNORM)
|
||
if (acdbGetObjectId(id, ent) == Acad::eOk)
|
||
{
|
||
AcDbObjectPointer<AcDbEntity> pEnt;
|
||
if (pEnt.open(id, AcDb::kForRead) == Acad::eOk)
|
||
{
|
||
TCHAR* lay = pEnt->layer();
|
||
if (strRoadLay.CompareNoCase(pEnt->layer()) == 0)
|
||
{
|
||
if (pEnt->isKindOf(AcDbLine::desc()))
|
||
{
|
||
pEnt.close();
|
||
// CLineCADEntEdgeAdapter line(id);
|
||
lineEdges.append(new CLineCADEntEdgeAdapter(id));
|
||
}
|
||
else if (pEnt->isKindOf(AcDbArc::desc()))
|
||
{
|
||
pEnt.close();
|
||
// CArcCADEntEdgeAdapter arc(id);
|
||
arcEdges.append(new CArcCADEntEdgeAdapter(id));
|
||
}
|
||
}
|
||
else if (strMidRoadLay.CompareNoCase(pEnt->layer()) == 0)
|
||
{
|
||
if (pEnt->isKindOf(AcDbLine::desc()))
|
||
{
|
||
pEnt.close();
|
||
// CLineCADEntEdgeAdapter line(id);
|
||
lineMids.append(new CLineCADEntEdgeAdapter(id));
|
||
}
|
||
else if (pEnt->isKindOf(AcDbArc::desc()))
|
||
{
|
||
pEnt.close();
|
||
// CArcCADEntEdgeAdapter arc(id);
|
||
arcMids.append(new CArcCADEntEdgeAdapter(id));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
ads_ssfree(ssName);
|
||
}
|
||
|
||
template <class TRoad, class TEdge, class TEdgeEnt>
|
||
void EdgeSplitFunTem(const TRoad &road, ROAD_EDGE_STRUCT &res, const TEdge &edge, TEdgeEnt &edgeEnt)
|
||
{
|
||
AcAryInterStructPointer arLeftInterDump, arRightInterDump, arIntersAll;
|
||
road.SplitEdge(edge, arLeftInterDump, arRightInterDump, edgeEnt, arIntersAll);
|
||
res.leftIntersAll.append(arLeftInterDump);
|
||
res.rightIntersAll.append(arRightInterDump);
|
||
res.intersOriginAll.append(arIntersAll);
|
||
|
||
}
|
||
|
||
// #define MidSplitFunTem(road, leftInters, rightInters, edge, edgeEnt, ArType)\
|
||
// {\
|
||
// ArType arLeftInterDump, arRightInterDump; \
|
||
// road.SplitMid(edge, arLeftInterDump, arRightInterDump, edgeEnt); \
|
||
// leftInters.append(arLeftInterDump); \
|
||
// rightInters.append(arRightInterDump); \
|
||
// }
|
||
|
||
|
||
template <class TRoad, class TEdge, class TEdgeEnt>
|
||
void MidSplitFunTem(const TRoad &road, ROAD_MID_STRUCT &rms, const TEdge &edge, TEdgeEnt &edgeEnt)
|
||
{
|
||
AcAryInterStructPointer arLeftInterDump, arRightInterDump;
|
||
road.SplitMid(edge, arLeftInterDump, arRightInterDump, edgeEnt);
|
||
rms.leftInterMid.append(arLeftInterDump);
|
||
rms.rightInterMid.append(arRightInterDump);
|
||
}
|
||
|
||
//把单线实体处理为道路左边的(interStruct),和道路右边的interStruct,
|
||
void CRoadDataCenterNew::DealLeftAndRightEnt(const CLineRoad &lineRoad, ROAD_MID_STRUCT &rms, ROAD_EDGE_STRUCT &res)
|
||
{
|
||
int i = 0;
|
||
for (i = 0; i < (int)res.lineEdges.length(); i++)
|
||
{
|
||
AcGeLineSeg2d line = res.lineEdges[i]->Line();//
|
||
|
||
EdgeSplitFunTem(lineRoad, res, line, *res.lineEdges[i]);
|
||
}
|
||
|
||
for (i = 0; i < (int)res.arcEdges.length(); i++)
|
||
{
|
||
AcGeCircArc2d arc = res.arcEdges[i]->Arc();
|
||
EdgeSplitFunTem(lineRoad, res, arc, *res.arcEdges[i]);
|
||
}
|
||
|
||
for (i = 0; i < (int)rms.lineMids.length(); i++)
|
||
{
|
||
AcGeLineSeg2d line = rms.lineMids[i]->Line();
|
||
MidSplitFunTem(lineRoad, rms, line, *rms.lineMids[i]);
|
||
}
|
||
|
||
for (i = 0; i < (int)rms.arcMids.length(); i++)
|
||
{
|
||
AcGeCircArc2d arc = rms.arcMids[i]->Arc();
|
||
MidSplitFunTem(lineRoad, rms, arc, *rms.arcMids[i]);
|
||
}
|
||
|
||
SaveMidInterStruct(rms);
|
||
}
|
||
|
||
//把单线实体处理为道路左边的(interStruct),和道路右边的interStruct,
|
||
void CRoadDataCenterNew::DealLeftAndRightEnt(const CArcRoad &arcRoad, ROAD_MID_STRUCT &rms, ROAD_EDGE_STRUCT &res)
|
||
{
|
||
int i = 0;
|
||
for (i = 0; i < (int)res.lineEdges.length(); i++)
|
||
{
|
||
AcGeLineSeg2d line = res.lineEdges[i]->Line();//
|
||
EdgeSplitFunTem(arcRoad, res, line, *res.lineEdges[i]);
|
||
}
|
||
|
||
for (i = 0; i < (int)res.arcEdges.length(); i++)
|
||
{
|
||
AcGeCircArc2d arc = res.arcEdges[i]->Arc();
|
||
EdgeSplitFunTem(arcRoad, res, arc, *res.arcEdges[i]);
|
||
}
|
||
|
||
for ( i = 0; i < (int)rms.lineMids.length(); i++)
|
||
{
|
||
AcGeLineSeg2d line = rms.lineMids[i]->Line();
|
||
MidSplitFunTem(arcRoad, rms, line, *rms.lineMids[i]);
|
||
}
|
||
|
||
for (i = 0; i < (int)rms.arcMids.length(); i++)
|
||
{
|
||
AcGeCircArc2d arc = rms.arcMids[i]->Arc();
|
||
MidSplitFunTem(arcRoad, rms, arc, *rms.arcMids[i]);
|
||
}
|
||
|
||
SaveMidInterStruct(rms);
|
||
}
|
||
|
||
struct __InterSortStruct
|
||
{
|
||
CInterStruct* pInter;
|
||
double dLen;// 带方向的长度
|
||
};
|
||
|
||
int CompareLineSortStruct(const void *p1, const void *p2)
|
||
{
|
||
const __InterSortStruct *ps1 = (__InterSortStruct*)(p1);
|
||
const __InterSortStruct *ps2 = (__InterSortStruct*)(p2);
|
||
|
||
ASSERT(ps1 != NULL);
|
||
ASSERT(ps2 != NULL);
|
||
|
||
// 不设置0返回。
|
||
return ps1->dLen < ps2->dLen ? -1 : 1;
|
||
}
|
||
|
||
|
||
|
||
// 对道路的相交结构体排序(包括的可能有直线的,弧线的)
|
||
// 问题描述,这些点分布在道路上边线上,根据道路的方向对这些点,执行排序。
|
||
void CRoadDataCenterNew::SortInterStructsSimp(const AcGeLineSeg2d &lineDir, bool bSequence, AcAryInterStructPointer &arInterPointer)
|
||
{
|
||
ASSERT(bSequence == true);
|
||
|
||
if (arInterPointer.length() < 2)
|
||
return; // 只有一个也不排序
|
||
|
||
AcGePoint2d ptStart = lineDir.startPoint();
|
||
AcGeVector2d vecDir = lineDir.direction();
|
||
|
||
__InterSortStruct *pSortStruct = new __InterSortStruct[arInterPointer.length()];
|
||
int i;
|
||
for (i = 0;i < (int)arInterPointer.length(); i++)
|
||
{
|
||
AcGeVector2d vecDump = arInterPointer[i]->InterPoint() - ptStart;
|
||
pSortStruct[i].pInter = arInterPointer[i];
|
||
pSortStruct[i].dLen = vecDump.dotProduct(vecDir);
|
||
}
|
||
|
||
qsort(pSortStruct, (int)arInterPointer.length(), sizeof(__InterSortStruct), CompareLineSortStruct);
|
||
|
||
for (i = 0; i < (int)arInterPointer.length(); i++)
|
||
{
|
||
arInterPointer[i] = pSortStruct[i].pInter;
|
||
}
|
||
|
||
delete [] pSortStruct;
|
||
}
|
||
|
||
|
||
// 方法:
|
||
// 想象圆弧是一个两端有限延伸的曲线,该排序建立在这个曲线上。从起点到终点。
|
||
void CRoadDataCenterNew::SortInterStructsSimp(const AcGeCircArc2d &arcDir, bool bSequence, AcAryInterStructPointer &arInterPointer)
|
||
{
|
||
ASSERT(bSequence == true);
|
||
|
||
if (arInterPointer.length() < 2)
|
||
return;
|
||
|
||
AcGePoint2d ptStart = arcDir.startPoint();
|
||
AcGePoint2d ptEnd = arcDir.endPoint();
|
||
AcGePoint2d ptCenter = arcDir.center();
|
||
|
||
double dStartAngle = AcGeVector2d(ptStart - ptCenter).angle();
|
||
double dEndAngle = AcGeVector2d(ptEnd - ptCenter).angle();
|
||
double dArcAngle = AngleInClock(arcDir.isClockWise() == Adesk::kTrue, dStartAngle, dEndAngle);
|
||
|
||
// 计算每个点与这个角度的夹角
|
||
double dAccurateStartAngle = AntiAngle(AddAngleInClock(arcDir.isClockWise() == Adesk::kTrue, dStartAngle, dArcAngle*0.5));
|
||
|
||
__InterSortStruct *pSortStruct = new __InterSortStruct[arInterPointer.length()];
|
||
int i;
|
||
for (i = 0; i < (int)arInterPointer.length(); i++)
|
||
{
|
||
AcGeVector2d vecDump = arInterPointer[i]->InterPoint() - ptCenter;
|
||
pSortStruct[i].pInter = arInterPointer[i];
|
||
pSortStruct[i].dLen = AngleInClock(arcDir.isClockWise() == Adesk::kTrue, dAccurateStartAngle, vecDump.angle());
|
||
}
|
||
|
||
qsort(pSortStruct, (int)arInterPointer.length(), sizeof(__InterSortStruct), CompareLineSortStruct);
|
||
|
||
for (i = 0; i < (int)arInterPointer.length(); i++)
|
||
{
|
||
arInterPointer[i] = pSortStruct[i].pInter;
|
||
}
|
||
|
||
delete [] pSortStruct;
|
||
}
|
||
|
||
|
||
bool GetInIndex(const AcAryInterStructPointer &aryInterPointer, int &nFirstIn, int &nLastIn)
|
||
{
|
||
nFirstIn = -1;
|
||
nLastIn = -1;
|
||
|
||
for (int i = 0; i < (int)aryInterPointer.length(); i++)
|
||
{
|
||
if (aryInterPointer[i]->Position() == eInEdge)
|
||
{
|
||
if (nFirstIn == -1) nFirstIn = i;
|
||
nLastIn = i;
|
||
}
|
||
}
|
||
|
||
return nFirstIn != -1 && nLastIn != -1;
|
||
}
|
||
|
||
// 判断道路的过滤方式,目前的方式有:保留第一个,不保留第一个(间隔取路),可能还会增加其他的过滤方式。
|
||
CFilterMode CRoadDataCenterNew::FindFilterMode(const AcGeLineSeg2d &lineDir, bool bSequence,
|
||
const AcAryInterStructPointer &aryInterPointer)
|
||
{
|
||
ASSERT(bSequence == true);
|
||
|
||
CFilterMode filterMode;
|
||
|
||
//此处aryInterPointer是经过排序的。
|
||
// 去总长度,然后计算平均长度
|
||
double dFirsrtLen = 0.0, dSecondLen = 0.0;
|
||
int nFirstNum = 0, nSecondNum = 0;
|
||
|
||
int nFirstIn = -1, nLastIn = -1;
|
||
GetInIndex(aryInterPointer, nFirstIn, nLastIn);
|
||
|
||
if (nFirstIn == -1 && nLastIn == -1)
|
||
filterMode.KeepFirst(TRUE);// 留下这段
|
||
else if (nFirstIn == nLastIn)
|
||
{ // 只有一个线在里边,比较两侧那边更长
|
||
AcGePoint2d ptCurrent = aryInterPointer[nFirstIn]->InterPoint();
|
||
filterMode.KeepFirst(lineDir.startPoint().distanceTo(ptCurrent) > lineDir.endPoint().distanceTo(ptCurrent));
|
||
}
|
||
else
|
||
{ // 有多个内点:
|
||
for (int i = nFirstIn; i <= nLastIn; i++)
|
||
{
|
||
if (i == nFirstIn)
|
||
{
|
||
nFirstNum = 1;
|
||
dFirsrtLen += lineDir.startPoint().distanceTo(aryInterPointer[i]->InterPoint());
|
||
|
||
continue;
|
||
}
|
||
else
|
||
{
|
||
if (EvenNum(nFirstNum+nSecondNum))
|
||
{
|
||
nFirstNum += 1;
|
||
dFirsrtLen += aryInterPointer[i-1]->InterPoint().distanceTo(aryInterPointer[i]->InterPoint());
|
||
}
|
||
else
|
||
{
|
||
nSecondNum += 1;
|
||
dSecondLen += aryInterPointer[i-1]->InterPoint().distanceTo(aryInterPointer[i]->InterPoint());
|
||
}
|
||
}
|
||
|
||
if (i == nLastIn)
|
||
{
|
||
if (EvenNum(nFirstNum+nSecondNum))
|
||
{
|
||
nFirstNum += 1;
|
||
dFirsrtLen += aryInterPointer[i]->InterPoint().distanceTo(lineDir.endPoint());
|
||
}
|
||
else
|
||
{
|
||
nSecondNum += 1;
|
||
dSecondLen += aryInterPointer[i]->InterPoint().distanceTo(lineDir.endPoint());
|
||
}
|
||
}
|
||
}
|
||
filterMode.KeepFirst(dFirsrtLen/nFirstNum > dSecondLen/nSecondNum);
|
||
}
|
||
|
||
return filterMode;
|
||
}
|
||
|
||
|
||
|
||
CFilterMode CRoadDataCenterNew::FindFilterMode(const AcGeCircArc2d &arcDir, bool bSequence, const AcAryInterStructPointer &aryInterPointer)
|
||
{
|
||
#define INTERPOINT(n) (aryInterPointer[n]->InterPoint())
|
||
|
||
ASSERT(bSequence == true);
|
||
|
||
CFilterMode filterMode;
|
||
|
||
//此处aryInterPointer是经过排序的。
|
||
// 取总长度,然后计算平均长度,比较大小。长的保留
|
||
double dFirsrtLen = 0.0, dSecondLen = 0.0;
|
||
int nFirstNum = 0, nSecondNum = 0;
|
||
|
||
int nFirstIn = -1, nLastIn = -1;
|
||
GetInIndex(aryInterPointer, nFirstIn, nLastIn);
|
||
|
||
if (nFirstIn == -1 && nLastIn == -1)
|
||
filterMode.KeepFirst(TRUE);// 留下这段
|
||
else if (nFirstIn == nLastIn)
|
||
{ // 只有一个线在里边,比较两侧那边更长
|
||
AcGePoint2d ptCurrent = INTERPOINT(nFirstIn);
|
||
filterMode.KeepFirst(LenOfArc(ConNewArc(arcDir, arcDir.startPoint(), ptCurrent)) > LenOfArc(ConNewArc(arcDir, ptCurrent, arcDir.endPoint())));
|
||
}
|
||
else
|
||
{ // 有多个内点:
|
||
for (int i = nFirstIn; i <= nLastIn; i++)
|
||
{
|
||
if (i == nFirstIn)
|
||
{
|
||
nFirstNum = 1;
|
||
dFirsrtLen += LenOfArc(ConNewArc(arcDir, arcDir.startPoint(), INTERPOINT(i)));
|
||
|
||
continue;
|
||
}
|
||
else
|
||
{
|
||
if (EvenNum(nFirstNum+nSecondNum))
|
||
{
|
||
nFirstNum += 1;
|
||
dFirsrtLen += LenOfArc(ConNewArc(arcDir, INTERPOINT(i-1), INTERPOINT(i)));
|
||
}
|
||
else
|
||
{
|
||
nSecondNum += 1;
|
||
dSecondLen += LenOfArc(ConNewArc(arcDir, INTERPOINT(i-1), INTERPOINT(i)));
|
||
}
|
||
}
|
||
|
||
if (i == nLastIn)
|
||
{
|
||
if (EvenNum(nFirstNum+nSecondNum))
|
||
{
|
||
nFirstNum += 1;
|
||
dFirsrtLen += LenOfArc(ConNewArc(arcDir, INTERPOINT(i), arcDir.endPoint()));
|
||
}
|
||
else
|
||
{
|
||
nSecondNum += 1;
|
||
dSecondLen += LenOfArc(ConNewArc(arcDir, INTERPOINT(i), arcDir.endPoint()));
|
||
}
|
||
}
|
||
}
|
||
filterMode.KeepFirst(dFirsrtLen/nFirstNum > dSecondLen/nSecondNum);
|
||
}
|
||
|
||
#undef INTERPOINT
|
||
return filterMode;
|
||
}
|
||
|
||
int CRoadDataCenterNew::InterStuctRealIn(const AcAryInterStructPointer &aryAll, AcAryInterStructPointer &aryRealIn)
|
||
{
|
||
for (int i = 0; i < (int)aryAll.length(); i++)
|
||
{
|
||
if (aryAll[i]->IsInEdge() && (aryAll[i]->Position() == eInEdge) && (!aryAll[i]->IsPara()))
|
||
aryRealIn.append(aryAll[i]);
|
||
}
|
||
|
||
return (int)aryRealIn.length();
|
||
}
|
||
|
||
// 把相交结构体合并了。
|
||
void CRoadDataCenterNew::CombinInterStruct(const AcAryLineInterStruct &lineInters, const AcAryArcInterStruct &arcInters,
|
||
AcAryInterStructPointer &arInterPointer)
|
||
{
|
||
ASSERT(arInterPointer.isEmpty());
|
||
|
||
int i = 0;
|
||
for (i = 0; i < (int)lineInters.length(); i++)
|
||
{
|
||
const CLineInterStruct *pLineInter = lineInters[i];
|
||
arInterPointer.append(const_cast<CLineInterStruct*>(pLineInter));
|
||
}
|
||
for (i = 0; i < (int)arcInters.length(); i++)
|
||
{
|
||
const CArcInterStruct *pArcInter = arcInters[i];
|
||
arInterPointer.append(const_cast<CArcInterStruct*>(pArcInter));
|
||
}
|
||
}
|
||
|
||
|
||
void CRoadDataCenterNew::RemoveShortInterStruct(AcAryInterStructPointer &aryInterStruct, double dTolLen)
|
||
{
|
||
for (int i = (int)aryInterStruct.length() - 1; i > -1; i--)
|
||
{
|
||
if (aryInterStruct[i]->Lenth() < dTolLen)
|
||
{
|
||
// delete aryInterStruct[i];
|
||
aryInterStruct[i]->SetCreateFlag(); // 因为他删除了,所以其他没有删除的需要创建。
|
||
|
||
aryInterStruct[i]->SetShortFlag(true);
|
||
aryInterStruct.removeAt(i);
|
||
}
|
||
}
|
||
}
|
||
|
||
void CRoadDataCenterNew::RemoveShortInterStruct(ROAD_EDGE_STRUCT &res, double dTolLen)
|
||
{
|
||
RemoveShortInterStruct(res.leftIntersAll, dTolLen);
|
||
RemoveShortInterStruct(res.rightIntersAll, dTolLen);
|
||
}
|
||
|
||
void CRoadDataCenterNew::ReTestInterStruct(AcAryInterStructPointer &aryInterStruct, TGGeCurveSegment &curveSeg, double dTolLen, bool bOldClock)
|
||
{
|
||
// 判断两端的,从前往后判断
|
||
int i=0;
|
||
for (i = 0; i < (int)aryInterStruct.length(); ++i)
|
||
{
|
||
if (aryInterStruct[i]->Position() == eInEdge)
|
||
{ // 在道路内
|
||
double dDist = curveSeg.PathDistance(aryInterStruct[i]->InterPoint(), bOldClock ? 0 : 1);
|
||
if (dDist < dTolLen)
|
||
aryInterStruct[i]->SetPostion(eRoadStartOut);
|
||
else
|
||
break;
|
||
}
|
||
}
|
||
|
||
for (i = (aryInterStruct.length() - 1); i > -1; --i)
|
||
{
|
||
if (aryInterStruct[i]->Position() == eInEdge)
|
||
{ // 在道路内
|
||
double dDist = curveSeg.PathDistance(aryInterStruct[i]->InterPoint(), bOldClock ? 1 : 0);
|
||
|
||
if (dDist < dTolLen)
|
||
aryInterStruct[i]->SetPostion(eRoadEndOut);
|
||
else
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
void CRoadDataCenterNew::ReTestInterStruct(ROAD_EDGE_STRUCT &res, const CRoad *pRoad, double dTolLen, bool bOldClock)
|
||
{
|
||
TGGeCurveSegment c1(pRoad->ToCurveSeg(1)), c2(pRoad->ToCurveSeg(2));
|
||
ReTestInterStruct(res.leftIntersAll, c1, dTolLen, bOldClock);
|
||
ReTestInterStruct(res.rightIntersAll, c2, dTolLen, bOldClock);
|
||
}
|
||
|
||
|
||
void CRoadDataCenterNew::CreateRoadEdgeStruct(ROAD_EDGE_STRUCT &res)
|
||
{
|
||
int index = 0, ilen = (int)res.lineEdges.length();
|
||
for (index = 0; index < ilen; index++)
|
||
res.lineEdges[index]->ReCreate();
|
||
|
||
ilen = (int)res.arcEdges.length();
|
||
for (index = 0; index < ilen; index++)
|
||
res.arcEdges[index]->ReCreate();
|
||
}
|
||
|
||
void CRoadDataCenterNew::Clear(ROAD_EDGE_STRUCT &res, ROAD_MID_STRUCT &rms)
|
||
{
|
||
ClearAndDeleteAry(res.lineEdges);
|
||
ClearAndDeleteAry(res.arcEdges);
|
||
ClearAndDeleteAry(res.intersOriginAll);
|
||
|
||
ClearAndDeleteAry(rms.lineMids);
|
||
ClearAndDeleteAry(rms.arcMids);
|
||
ClearAndDeleteAry(rms.intersOriginAll);
|
||
}
|
||
|
||
void CRoadDataCenterNew::SaveMidInterStruct(ROAD_MID_STRUCT &rms)
|
||
{
|
||
rms.intersOriginAll.append(rms.leftInterMid);
|
||
rms.intersOriginAll.append(rms.rightInterMid);
|
||
} |