? ? ? ?ArcGis Qt繪制各種圖形纸兔,可以使用提供的Graphic類,Graphic類支持各類Symbol否副,線汉矿、多線、多邊形备禀、文本洲拇、圖片等。矩形和圓的繪制與其他圖形略有差別曲尸,主要的原因是一般人習慣于按下鼠標開始松開完成繪制赋续,ArcGis Qt的地圖控件MapGraphicsView繼承于QGraphicsview和他自己寫的業(yè)務(wù)處理類MapView,QGraphicsview有個方法setInteractive(bool)另患,設(shè)置成false以后就可以禁止鼠標拖拽移動地圖纽乱。我們可以按照以下步驟來處理:
1.寫個新類繼承于MapGraphicsView;
2.增加私有成員bool m_isDrawing昆箕、枚舉 m_drawingType和bool m_isPressed鸦列;
3.重寫鼠標按下、鼠標移動为严、鼠標釋放事件方法敛熬。按下時標記m_isPressed為true、記錄開始點坐標第股;移動時更新終點坐標应民,繪制(更新)矩形或圓Graphic;釋放時完成繪制夕吻,恢復(fù)狀態(tài)诲锹。
? ? ? ? //矩形可以使用Envelope的Geometry
? ? ? ? Envelope rect(xMin,yMin,xMax,yMax,spatialReference());
? ? ? ? SimpleFillSymbol* fillSymbol = new SimpleFillSymbol(fillStyle, fillColor, this);
? ? ? ? fillSymbol->setOutline(lineSymbol);
? ? ? ? Graphic* g = new Graphic(rect, vm, fillSymbol, this);
? ? ? ? pOverlay->graphics()->append(g);
? ? ? ?//圓用GeometryEngine構(gòu)造一個Polygon
? ? ? ? SimpleLineSymbol* lineSymbol = new SimpleLineSymbol(lineStyle, lineColor, lineWidth, this);
? ? ? ? SimpleFillSymbol* fillSymbol = new SimpleFillSymbol(fillStyle, fillColor, this);
? ? ? ? fillSymbol->setOutline(lineSymbol);
? ? ? ? GeodesicEllipseParameters ellipseParams(Point(pos.x(),pos.y(),spatialReference()),radius,radius);
? ? ? ? Graphic* g = new Graphic(GeometryEngine::ellipseGeodesic(ellipseParams), vm, fillSymbol, this);
? ? ? ? pOverlay->graphics()->append(g);