예제 #1
0
        //绘制导入的范围
        private void drawgeometryXOR(IEnvelope pPolygon, IScreenDisplay pScreenDisplay)
        {
            ISimpleFillSymbol pFillSymbol = new SimpleFillSymbolClass();
            ISimpleLineSymbol pLineSymbol = new SimpleLineSymbolClass();

            try
            {
                //颜色对象
                IRgbColor pRGBColor = new RgbColorClass();
                pRGBColor.UseWindowsDithering = false;
                ISymbol pSymbol = (ISymbol)pFillSymbol;
                pSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;

                pRGBColor.Red     = 255;
                pRGBColor.Green   = 170;
                pRGBColor.Blue    = 0;
                pLineSymbol.Color = pRGBColor;

                pLineSymbol.Width   = 0.8;
                pLineSymbol.Style   = esriSimpleLineStyle.esriSLSSolid;
                pFillSymbol.Outline = pLineSymbol;

                pFillSymbol.Color = pRGBColor;
                pFillSymbol.Style = esriSimpleFillStyle.esriSFSDiagonalCross;

                pScreenDisplay.StartDrawing(_axmapcontrol.ActiveView.ScreenDisplay.hDC, -1);  //esriScreenCache.esriNoScreenCache -1
                pScreenDisplay.SetSymbol(pSymbol);

                //不存在已画出的多边形
                if (pPolygon != null)
                {
                    pScreenDisplay.DrawRectangle(pPolygon);
                    m_Polygon = pPolygon;
                }
                //存在已画出的多边形
                else
                {
                    if (m_Polygon != null)
                    {
                        pScreenDisplay.DrawRectangle(m_Polygon);
                    }
                }

                pScreenDisplay.FinishDrawing();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示");
                pFillSymbol = null;
            }
        }
예제 #2
0
        /// <summary>
        /// 绘制线、矩形和面的函数
        /// </summary>
        /// <param name="pGeometry"></param>
        /// <param name="pScrDisplay"></param>
        public static void DrawGeometryXOR(IGeometry pGeometry, IScreenDisplay pScrDisplay)
        {
            if (pGeometry == null || pScrDisplay == null || pGeometry.GeometryType == esriGeometryType.esriGeometryPoint)
            {
                return;
            }

            IFillSymbol pFillSymbol;
            ILineSymbol pLineSymbol;
            ISymbol     pSymbol;
            IRgbColor   pRGBColor;
            ISymbol     pLSymbol;
            IPolygon    pPolygon;
            IEnvelope   pEnvelope;
            IPolyline   pPolyline;

            try
            {
                pRGBColor = new RgbColorClass();
                pRGBColor.UseWindowsDithering = false;
                pRGBColor.Red   = 45;
                pRGBColor.Green = 45;
                pRGBColor.Blue  = 45;

                pFillSymbol       = new SimpleFillSymbolClass();
                pSymbol           = (ISymbol)pFillSymbol;
                pSymbol.ROP2      = esriRasterOpCode.esriROPXOrPen;
                pFillSymbol.Color = (IColor)pRGBColor;

                pLineSymbol         = pFillSymbol.Outline;
                pLSymbol            = (ISymbol)pLineSymbol;
                pLSymbol.ROP2       = esriRasterOpCode.esriROPXOrPen;
                pRGBColor.Red       = 145;
                pRGBColor.Green     = 145;
                pRGBColor.Blue      = 145;
                pLineSymbol.Color   = (IColor)pRGBColor;
                pLineSymbol.Width   = 0.8;
                pFillSymbol.Outline = pLineSymbol;

                pScrDisplay.StartDrawing(0, -1);  //esriScreenCache.esriNoScreenCache -1
                if (pGeometry.GeometryType == esriGeometryType.esriGeometryPolyline)
                {
                    pScrDisplay.SetSymbol((ISymbol)pLineSymbol);
                    pPolyline = (IPolyline)pGeometry;
                    pScrDisplay.DrawPolyline(pPolyline);
                }
                else if (pGeometry.GeometryType == esriGeometryType.esriGeometryEnvelope)
                {
                    pScrDisplay.SetSymbol(pSymbol);
                    pEnvelope = (IEnvelope)pGeometry;
                    pScrDisplay.DrawRectangle(pEnvelope);
                }
                else
                {
                    pScrDisplay.SetSymbol(pSymbol);
                    pPolygon = (IPolygon)pGeometry;
                    pScrDisplay.DrawPolygon(pPolygon);
                }
                pScrDisplay.FinishDrawing();
            }
            catch (Exception ex)
            {
                MessageBox.Show("绘制缓冲范围出错:" + ex.Message, "提示");
            }
            finally
            {
                pFillSymbol = null;
                pLineSymbol = null;
                pSymbol     = null;
                pRGBColor   = null;
                pLSymbol    = null;
            }
        }