Автоматически не получается, объекты все равно остаются в верхнем левом углу. По поводу трансформирования: это делается автоматически или надо использавать MapSites->Append(SiteName,mode,transform)?
12.02.2013 11:03:00
Полазил по форуму, нашел mapGetRscMarkFrame привожу код:
[CODE] TMapScreen *MV; TMapRsc *RSC; TMapObj *obj TMAPDFRAME frame; TIMAGEFRAME ImageFrame; TDRAWBOX TBX; TRect rect; HDC mvDC; if (obj->Local == OL_VECTOR) { long int function = mapGetRscObjectFunction(RSC->RscHandle, obj->InCode); const char * imgparam = mapGetRscObjectParameters(RSC->RscHandle, obj->InCode); TDOUBLEPOINT Point1; Point1.X = mapXPlane(obj->ObjHandle,1,0); Point1.Y = mapYPlane(obj->ObjHandle,1,0); double angle = 0; angle = M_PI/2 - mapSideDirection(obj->ObjHandle, 1, 0); memset((void*)&ImageFrame, 0, sizeof(ImageFrame)); if (mapGetRscMarkFrame(RSC->RscHandle, function, imgparam, angle, ImageFrame) != 0) { // переводим в метры на местногсти double factor = 1./1000000. * MV->MapScale; ImageFrame.LeftTop.X = ImageFrame.LeftTop.X * factor + Point1.X; ImageFrame.LeftTop.Y = ImageFrame.LeftTop.Y * factor + Point1.Y; ImageFrame.RightTop.X = ImageFrame.RightTop.X * factor + Point1.X; ImageFrame.RightTop.Y = ImageFrame.RightTop.Y * factor + Point1.Y; ImageFrame.RightBottom.X = ImageFrame.RightBottom.X * factor + Point1.X; ImageFrame.RightBottom.Y = ImageFrame.RightBottom.Y * factor + Point1.Y; ImageFrame.LeftBottom.X = ImageFrame.LeftBottom.X * factor + Point1.X; ImageFrame.LeftBottom.Y = ImageFrame.LeftBottom.Y * factor + Point1.Y; rect = ImgFrameToRect(ImageFrame); } InvalidateRect(MV->Handle, &rect, false); mvDC = MV->GetMapScreenDc(); Rectangle(mvDC, rect.Left, rect.Top, rect.Right, rect.Bottom); //рисуем видимую рамку MV->FreeMapScreenDc(); } TRect __fastcall TMapFunc::ImgFrameToRect(TIMAGEFRAME ImageFrame) { TMAPDFRAME frame; frame.X1 = min(ImageFrame.LeftTop.X, ImageFrame.RightTop.X); frame.X1 = min(frame.X1, ImageFrame.RightBottom.X); frame.X1 = min(frame.X1, ImageFrame.LeftBottom.X); frame.Y1 = min(ImageFrame.LeftTop.Y, ImageFrame.RightTop.Y); frame.Y1 = min(frame.Y1, ImageFrame.RightBottom.Y); frame.Y1 = min(frame.Y1, ImageFrame.LeftBottom.Y); frame.X2 = max(ImageFrame.LeftTop.X, ImageFrame.RightTop.X); frame.X2 = max(frame.X2, ImageFrame.RightBottom.X); frame.X2 = max(frame.X2, ImageFrame.LeftBottom.X); frame.Y2 = max(ImageFrame.LeftTop.Y, ImageFrame.RightTop.Y); frame.Y2 = max(frame.Y2, ImageFrame.RightBottom.Y); frame.Y2 = max(frame.Y2, ImageFrame.LeftBottom.Y); return DFrameToRect(frame); } TRect __fastcall TMapFunc::DFrameToRect(TMAPDFRAME frame) { frame = MV->ConvertDFrame(frame, PP_PLANE, PP_PICTURE); //переводим в пиксели TRect result; result.Left = Floor(frame.X1 - MV->MapLeft)-5; result.Right = Floor(frame.X2 - MV->MapLeft)+5; result.Top = Floor(frame.Y2 - MV->MapTop)-5; result.Bottom = Floor(frame.Y1 - MV->MapTop)+5; return result; }[/CODE] Вот что получаю: 2 векторных объекта- 1-ый в классификаторе не стоит галочка растягивать, 2-ой- галочка растягивать стоит. Белый пряпоугольник- это видимая рамка нарисованная Rectangle, см. по коду выше. [URL=http://hostingkartinok.com][IMG]http://s2.hostingkartinok.com/uploads/images/2013/02/45846b1f33849d75f77f5f1541ab71bb.jpg[/IMG][/URL] если использовать mapObjectViewFrameEx вместо mapGetRscMarkFrame: [URL=http://hostingkartinok.com][IMG]http://s4.hostingkartinok.com/uploads/images/2013/02/5c7d5d4456cdd171b5f1c46da38a3629.jpg[/IMG][/URL] Как получить рамку с учетом растяжения объекта на карте через mapGetRscMarkFrame, или рамку которая будет полностью захватывать объект???
Изменено: |
|
|
© КБ Панорама, 1991-2024 Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности |