[CODE]// -----------------------------------------------------------------
// Функция изменения масштаба по координатам фрагмента в метрах
// Возвращает: 0 - масштаб не изменился, 1 - масштаб изменился
// -----------------------------------------------------------------
int TMapWindow::ChangeScaleByFrame(DFRAME * dframe)
{
// Габариты окна в пикселах
RECT rect = GetClientRect();
double x1 = dframe->X1;
double y1 = dframe->Y1;
double x2 = dframe->X2;
double y2 = dframe->Y2;
DOUBLEPOINT center;
center.X = (x1 + x2)/2.0;
center.Y = (y1 + y2)/2.0;
mapPlaneToPicture((HMAP)MapDoc, &x1, &y1);
mapPlaneToPicture((HMAP)MapDoc, &x2, &y2);
int dw = ROUND(x2 - x1);
if (dw < 0)
dw = -dw;
else
if (dw == 0)
dw = 1;
int dh = ROUND(y1 - y2);
if (dh < 0)
dh = -dh;
else
if (dh == 0)
dh = 1;
// Расчет коэффициента изменения масштаба
double change = (double)(rect.RT - rect.LT - 64) / (double)dw;
double change2 = (double)(rect.DN - rect.UP - 64) / (double)dh;
if (change > change2)
change = change2;
double scale = mapGetRealShowScale((HMAP)MapDoc);
scale = scale/ change;
// Установить курсор в центр окна
SetProcess(IDP_SCALECENTRE, 1);
// Установить масштаб для показа объекта в рамках окна
int ret = SetMapScale(scale, 1);
// Установить окно в центр габаритов объекта
ViewPlanePoint(¢er);
return ret;
}[/CODE]
// Функция изменения масштаба по координатам фрагмента в метрах
// Возвращает: 0 - масштаб не изменился, 1 - масштаб изменился
// -----------------------------------------------------------------
int TMapWindow::ChangeScaleByFrame(DFRAME * dframe)
{
// Габариты окна в пикселах
RECT rect = GetClientRect();
double x1 = dframe->X1;
double y1 = dframe->Y1;
double x2 = dframe->X2;
double y2 = dframe->Y2;
DOUBLEPOINT center;
center.X = (x1 + x2)/2.0;
center.Y = (y1 + y2)/2.0;
mapPlaneToPicture((HMAP)MapDoc, &x1, &y1);
mapPlaneToPicture((HMAP)MapDoc, &x2, &y2);
int dw = ROUND(x2 - x1);
if (dw < 0)
dw = -dw;
else
if (dw == 0)
dw = 1;
int dh = ROUND(y1 - y2);
if (dh < 0)
dh = -dh;
else
if (dh == 0)
dh = 1;
// Расчет коэффициента изменения масштаба
double change = (double)(rect.RT - rect.LT - 64) / (double)dw;
double change2 = (double)(rect.DN - rect.UP - 64) / (double)dh;
if (change > change2)
change = change2;
double scale = mapGetRealShowScale((HMAP)MapDoc);
scale = scale/ change;
// Установить курсор в центр окна
SetProcess(IDP_SCALECENTRE, 1);
// Установить масштаб для показа объекта в рамках окна
int ret = SetMapScale(scale, 1);
// Установить окно в центр габаритов объекта
ViewPlanePoint(¢er);
return ret;
}[/CODE]