ArcGis Qt跨平台开发【5】--绘制矩形和圆

       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);

你可能感兴趣的:(ArcGis Qt跨平台开发【5】--绘制矩形和圆)