// 라인 선택 모듈
int CTRDC2DMap::CheckLineSelect(CPoint mousePt)
{
int nRes = -1;
int lineWidth = 5;
for (int i=0; i<ROUTE_MAX_COUNT; i++)
{
for (int k=0; k<(int)m_stRouteData[i].m_vRouteData.size()-1; k++)
{
CPoint startP, endP;
m_pMapHandler->TransformGeoToScreen(&m_stRouteData[i].m_vRouteData[k], &startP);
m_pMapHandler->TransformGeoToScreen(&m_stRouteData[i].m_vRouteData[k+1], &endP);
int dx = endP.x - startP.x;
int dy = endP.y - startP.y;
int dx1 = mousePt.x - startP.x;
int dy1 = mousePt.y - startP.y;
int a = 0, b = 0, c = 0;
if (abs(dx) > 0 && abs(dy) < abs(dx))
{
if (dx * dx1 >= 0 && abs(dx1) <= abs(dx))
{
a = (dy * dx1);
b = (dx * dy1);
c = abs(dx * lineWidth);
if (abs(a - b) <= c)
{
nRes = i;
break;
}
}
}
else if (abs(dy) > 0)
{
if (dy * dy1 >= 0 && (abs(dy1) <= abs(dy)))
{
a = (dx * dy1);
b = (dy * dx1);
c = abs(dy * lineWidth);
if (abs(a - b) <= c)
{
if (abs(a - b) <= c)
{
nRes = i;
break;
}
}
}
}
}
if (nRes != -1)
{
break;
}
}
return nRes;
}
'프로그래머의 길 > C & C++' 카테고리의 다른 글
직선의 방정식 및 제3의 점과의 거리 (0) | 2016.01.22 |
---|---|
edit 엔터 받아서 처리(상속 안받고 처리) (0) | 2015.10.01 |
[VC++ / MFC] DTED 데이터를 이용한 OpenGL 3D 지형 엔진 (0) | 2013.07.27 |
위경도 두점 사이의 거리 각도 계산 (0) | 2012.12.06 |
에디트 가능한 리스트컨트롤 (0) | 2012.11.12 |