1.利用IMapControl3::FlashShape 方法
调用如下:
ISymbol symbol = CreateSimpleSymbol(featuer.Shape.GeometryType);
this.m_mapControl.FlashShape(featuer.Shape, 3, 150, symbol);
2.使用IScreenDisplay接口的 DrawPoint DrawMultipoint DrawPolyline DrawPolygon等方法
/// <summary>
/// 闪烁指定要素IGeometry
/// </summary>
/// <param name="geometry">要素</param>
/// <param name="flashCount">闪烁次数</param>
/// <param name="interval">每次闪烁的时间</param>
private void FlashGeometry(IGeometry geometry, int flashCount, int interval)
{
IScreenDisplay display = m_activeView.ScreenDisplay;
ISymbol symbol = CommonClass.CreateSimpleSymbol(geometry.GeometryType);
display.StartDrawing(0, (short)esriScreenCache.esriNoScreenCache); display.SetSymbol(symbol);
for (int i = 0; i < flashCount; i++)
{
switch (geometry.GeometryType)
{
case esriGeometryType.esriGeometryPoint:
display.DrawPoint(geometry);
break;
case esriGeometryType.esriGeometryMultipoint:
display.DrawMultipoint(geometry);
break;
case esriGeometryType.esriGeometryPolyline:
display.DrawPolyline(geometry);
break;
case esriGeometryType.esriGeometryPolygon:
display.DrawPolygon(geometry);
break;
}
System.Threading.Thread.Sleep(interval);
}
display.FinishDrawing();
}
注:两个地方都用到了一个创建符号的方法
/// <summary>
/// 根据几何类型创建闪烁符号
/// </summary>
/// <param name="geometryType">要素几何类型</param>
/// <returns>ISymbol</returns>
private ISymbol CreateSimpleSymbol(esriGeometryType geometryType)
{
ISymbol symbol = null;
switch (geometryType)
{
case esriGeometryType.esriGeometryPoint:
case esriGeometryType.esriGeometryMultipoint:
ISimpleMarkerSymbol markerSymbol = new SimpleMarkerSymbolClass();
markerSymbol.Color = CommonClass.getRGB(255, 128, 128);
markerSymbol.Size = 2;
symbol = markerSymbol as ISymbol;
break;
case esriGeometryType.esriGeometryPolyline:
case esriGeometryType.esriGeometryPath:
ISimpleLineSymbol lineSymbol = new SimpleLineSymbolClass();
lineSymbol.Color = CommonClass.getRGB(255, 128, 128);
lineSymbol.Width = 4;
symbol = lineSymbol as ISymbol;
break;
case esriGeometryType.esriGeometryPolygon:
case esriGeometryType.esriGeometryRing:
ISimpleFillSymbol fillSymbol = new SimpleFillSymbolClass();
fillSymbol.Color = CommonClass.getRGB(255, 128, 128);
symbol = fillSymbol as ISymbol;
break;
}
symbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;
return symbol;
}