Частично код динамического отображения создаваемого площадного объекта посмотрел в виндусовом TMapCreateObject, но создаваемый объект при движении мыши мелькает и опять пропадает.
Последовательность отрисовки такая:
1) При нажатии кнопки "Создать зону:
Код |
---|
mapAction=maCreateSquareObject; newObj=mapCreateSiteObject(hMap,hSiteNet, IDDOUBLE2, 0); mapRegisterObject(newObj,CODE_RZM_ZONE,LOCAL_SQUARE); mapSetObjectSpline(newObj,50); FxDC.xcDisplay = QX11Info::display(); FxDC.xcWindow = vMap->GetMapViewAcces()->winId(); FxDC.xcContext = XCreateGC(FxDC.xcDisplay, FxDC.xcWindow, 0, NULL); FxDC.xcPoint.X = 0; FxDC.xcPoint.Y = 0; FImgObj.Color = IMGC_NOMARK; FImgObj.Incode = mapObjectCode(newObj); FImgObj.Excode = CODE_RZM_ZONE; FImgObj.Local = IMGL_SQUARE; FImage.Image = IMG_OBJECT; FImage.Mode = R2_COPYPEN; FImage.Parm = (char*)&FImgObj; |
Код |
---|
if (mapAction==maCreateSquareObject){ vMap->GetMapLeftTop(&valx, &valy); valx+=x; valy+=y; double dx=valx; double dy=valy; mapPictureToPlane(hMap,&dx,&dy); mapAppendPointPlane(newObj,dx,dy); //vMap->Repaint();//нет эффекта отрисовки this->update();//что-то мелькает на экране } |
3) При движении мыши
Код |
---|
if (mapAction==maCreateSquareObject){ //vMap->Repaint();//нет эффекта отрисовки this->update();//что-то мелькает на экране return; } |
Код |
---|
if (mapAction==maCreateSquareObject){ //Эллипс чисто для проверки отображения p->setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap)); p->setBrush(QBrush(Qt::red, Qt::SolidPattern)); p->drawEllipse(100, 50, 50, 50); DOUBLEPOINT pt; pt.x=cx; pt.y=cy; mapViewMapObject(hMap,(HWND)&FxDC,&pt,&FImage,newObj,PP_PICTURE); } |
Код |
---|
if (mapAction==maCreateSquareObject){ mapCommitObject(newObj); mapFreeObject(newObj); vMap->Repaint(); XFreeGC(FxDC.xcDisplay,FxDC.xcContext); memset(&FxDC,0,sizeof(XCONTEXT)); mapAction=maNone; } |
А вот красный эллипс отображается нормально и исчезает после завершения операции.