Отображаю карту с помощью MAPAPI (слизано с примера MapView)
Карта отображается правильно, теперь хочу мигать выделенными объектами, предварительно найденными через mapSeekSiteObject и внесенные в список selectedObjects.
Вывожу объект через mapPaintMapObjectToXImage, но на карте не вижу отрисовку объекта другим цветом (объект на карте находится, его рамка определяется правильно)
Что-то не так со значениями параметров функции mapPaintMapObjectToXImage?
Карта отображается правильно, теперь хочу мигать выделенными объектами, предварительно найденными через mapSeekSiteObject и внесенные в список selectedObjects.
Вывожу объект через mapPaintMapObjectToXImage, но на карте не вижу отрисовку объекта другим цветом (объект на карте находится, его рамка определяется правильно)
Что-то не так со значениями параметров функции mapPaintMapObjectToXImage?
| Цитата |
|---|
| long int x, long int y, LRECT * rect |
| Цитата |
|---|
| void GISMapView::paintEvent(QPaintEvent *event) { if (!hMap) return; int x = event->rect().left(); int y = event->rect().top(); int width= event->rect().right() - event->rect().left() + 1; int height = event->rect().bottom() - event->rect().top() + 1; if (CheckMemoryNeeded(width, height)) { WidthBM = width; HeightBM = height; } QPainter p; p.begin(this); // Область отрисовки карты в пикселях RECT rectDraw; rectDraw.left = x+mapLeft; rectDraw.top = y+mapTop; rectDraw.right = x + width+mapLeft; rectDraw.bottom = y + height+mapTop; if (BitMap) { memset(BitMap, 0x0, BitMapSize); XIMAGEDESC xImageDesc; xImageDesc.Point = BitMap; // Адрес начала области пикселов xImageDesc.Width = width; // Ширина строки в пикселах xImageDesc.Height = height; // Число строк xImageDesc.Depth = MAPDEPTH; // Размер элемента в битах (8,15,16,24,32) xImageDesc.CellSize = BMCELLSIZE; // Размер элемента(пиксела) в байтах xImageDesc.RowSize = width * xImageDesc.CellSize; // Ширина строки в байтах // Отобразим фрагмент карты на экран if (mapPaintToXImage(hMap, &xImageDesc, 0, 0, &rectDraw)) { //есть выделенные объекты, надо их наложить сверху if (selectedObjects.count()>0){ IMGLINE objectImage; memset(&objectImage, 0, sizeof(objectImage)); objectImage.Thick = PIX2MKM(5); PAINTPARM objectView; memset(&objectView, 0, sizeof(objectView)); objectView.Parm = (char*) &objectImage; objectView.Mode = R2_COPYPEN; //мигание объекта по таймеру (голубой/малиновый) if (colorState) objectImage.Color = selColor1; else objectImage.Color = selColor2; LRECT rectObj; double oX, oY; DFRAME frame; for (int i=0; i<selectedObjects.count(); i++){ HOBJ hObj=selectedObjects.at(i); //координаты области объекта на карте в метрах mapObjectFrame(hObj,&frame); //координаты области объекта на карте в пикселях oX=frame.X1; oY=frame.Y1; mapPlaneToPicture(hMap,&oX,&oY); rectObj.left=oX; rectObj.top=oY; oX=frame.X2; oY=frame.Y2; mapPlaneToPicture(hMap,&oX,&oY); rectObj.right=oX; rectObj.bottom=oY; //отобразим объект на XImage поверх существующего изображения (-2) if (mapObjectLocal(hObj)!=LOCAL_LINE) objectView.Image = IMG_OBJECT; else objectView.Image = IMG_LINE; mapPaintMapObjectToXImage(hMap,&xImageDesc,-2,rectObj.left-rectDraw.left,rectObj.top-rectDraw.top,&rectObj,&objectView,hObj); } } //вывод на экран QImage image((uchar *)BitMap, width, height, QImage::Format_RGB32); p.drawImage(x, y, image, 0, 0, width, height); } } p.end(); } |