//绘制导入的范围 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; } }
/// <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; } }