ArcGis Qt绘制各种图形,可以使用提供的Graphic类,Graphic类支持各类Symbol,线、多线、多边形、文本、图片等。矩形和圆的绘制与其他图形略有差别,主要的原因是一般人习惯于按下鼠标开始松开完成绘制,ArcGis Qt的地图控件MapGraphicsView继承于QGraphicsview和他自己写的业务处理类MapView,QGraphicsview有个方法setInteractive(bool),设置成false以后就可以禁止鼠标拖拽移动地图。我们可以按照以下步骤来处理:
1.写个新类继承于MapGraphicsView;
2.增加私有成员bool m_isDrawing、枚举 m_drawingType和bool m_isPressed;
3.重写鼠标按下、鼠标移动、鼠标释放事件方法。按下时标记m_isPressed为true、记录开始点坐标;移动时更新终点坐标,绘制(更新)矩形或圆Graphic;释放时完成绘制,恢复状态。
//矩形可以使用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构造一个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);