博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ArcEngine实现对点、线、面的闪烁(转载)

Posted on 2008-04-26 22:18  张冰  阅读(1726)  评论(0编辑  收藏  举报

//闪烁线
static void FlashLine(AxMapControl mapControl,IScreenDisplay iScreenDisplay,IGeometry iGeometry)
{
    ISimpleLineSymbol iLineSymbol;
    ISymbol iSymbol;
    IRgbColor iRgbColor;

    iLineSymbol = new SimpleLineSymbol();
    iLineSymbol.Width = 4;
    iRgbColor = new RgbColor();
    iRgbColor.Red = 255;
    iLineSymbol.Color = iRgbColor;
    iSymbol = (ISymbol)iLineSymbol;
    iSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;
    mapControl.FlashShape(iGeometry, 3, 200, iSymbol);
}

//闪烁面
static void FlashPolygon(AxMapControl mapControl, IScreenDisplay iScreenDisplay, IGeometry iGeometry)
{
    ISimpleFillSymbol iFillSymbol;
    ISymbol iSymbol;
    IRgbColor iRgbColor;

    iFillSymbol = new SimpleFillSymbol();
    iFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;
    iFillSymbol.Outline.Width = 12;

    iRgbColor = new RgbColor();
    iRgbColor.RGB = System.Drawing.Color.FromArgb(100, 180, 180).ToArgb();
    iFillSymbol.Color = iRgbColor;

    iSymbol = (ISymbol)iFillSymbol;
    iSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;
    iScreenDisplay.SetSymbol(iSymbol);
    mapControl.FlashShape(iGeometry, 3, 200, iSymbol);
}

//闪烁点
static void FlashPoint(AxMapControl mapControl, IScreenDisplay iScreenDisplay, IGeometry iGeometry)
{
    ISimpleMarkerSymbol iMarkerSymbol;
    ISymbol iSymbol;
    IRgbColor iRgbColor;

    iMarkerSymbol = new SimpleMarkerSymbol();
    iMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle;
    iRgbColor = new RgbColor();
    iRgbColor.RGB = System.Drawing.Color.FromArgb(0, 0, 0).ToArgb();
    iMarkerSymbol.Color = iRgbColor;
    iSymbol = (ISymbol)iMarkerSymbol;
    iSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;
    mapControl.FlashShape(iGeometry, 3, 200, iSymbol);
}
//闪烁目标
public static void FlashFeature(AxMapControl mapControl,IFeature iFeature, IMap iMap)
{
    IActiveView iActiveView = iMap as IActiveView;
    if (iActiveView != null)
    {
iActiveView.ScreenDisplay.StartDrawing(0, (short)esriScreenCache.esriNoScreenCache);
//根据几何类型调用不同的过程
switch (iFeature.Shape.GeometryType)
{
    case esriGeometryType.esriGeometryPolyline:
FlashLine(mapControl, iActiveView.ScreenDisplay, iFeature.Shape);
break;
    case esriGeometryType.esriGeometryPolygon:
FlashPolygon(mapControl, iActiveView.ScreenDisplay, iFeature.Shape);
break;
    case esriGeometryType.esriGeometryPoint:
FlashPoint(mapControl, iActiveView.ScreenDisplay, iFeature.Shape);
break;
    default:
break;
}
iActiveView.ScreenDisplay.FinishDrawing();
    }
}