Здравствуйте!
Пример расчета масштаба отображения карты исходя из габаритов объекта:
Код |
---|
int widgetHeight = ui.DMapView1->height();
int widgetWidth = ui.DMapView1->width();
HMAP mapHandle = ui.DMapView1->GetMapHandle();
// objectHandle - идентификатор объекта (HOBJ)
DFRAME objectFrame;
mapObjectFrame(objectHandle, &objectFrame);
DOUBLEPOINT centerPoint;
centerPoint.x = (objectFrame.X1 + objectFrame.X2)/2;
centerPoint.y = (objectFrame.Y1 + objectFrame.Y2)/2;
mapPlaneToPicture(mapHandle, &objectFrame.X1, &objectFrame.Y1);
mapPlaneToPicture(mapHandle, &objectFrame.X2, &objectFrame.Y2);
double scaleDividerByHeight = (fabs(objectFrame.X1 - objectFrame.X2))/widgetWidth;
double scaleDividerByWidth = (fabs(objectFrame.Y1 - objectFrame.Y2))/widgetHeight;
double scaleDivider = min(scaleDividerByHeight, scaleDividerByWidth);
double currentScale = mapGetRealShowScale(mapHandle);
double newScale = currentScale * scaleDivider;
mapSetRealShowScale(mapHandle, newScale);
ui.DMapView1->UpdatePictureBorder();
mapPlaneToPicture(mapHandle, ¢erPoint.x, ¢erPoint.y);
ui.DMapView1->SetMapLeftTop(centerPoint.x - widgetWidth/2, centerPoint.y - widgetHeight/2); |