ArcEngine中同时闪烁多个要素

简介: ArcEngine中同时闪烁多个要素的用户控件代码关键点:对IArray、IFeature.ShapeCopy、HookHelperClass以及IHookActions.DoActionOnMultiple的正确使用。
ArcEngine中同时闪烁多个要素的用户控件代码关键点:


对IArray、IFeature.ShapeCopy、HookHelperClass以及IHookActions.DoActionOnMultiple的正确使用。 代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.esriSystem;
 
namespace AgsTester
{
    /// <summary>
    /// 本用户控件上需要放一个地图控件
    /// </summary>
    public partial class FlashMutiGeometry : UserControl
    {
        public FlashMutiGeometry()
        {
            InitializeComponent();
        }
 
        /// <summary>
        /// 加载地图
        /// </summary>
        /// <param name="pathMap"></param>
        public void LoadMap(string pathMap)
        {
            axMapControl1.LoadMxFile(pathMap);
        }
 
        /// <summary>
        /// 以村为单位过滤显示
        /// </summary>
        /// <param name="where">查询条件</param>
        public void FilterLayer(string where)
        {
            IFeatureLayer flyr = (IFeatureLayer)axMapControl1.get_Layer(0);
            IFeatureClass fcls = flyr.FeatureClass;
 
            IQueryFilter queryFilter = new QueryFilterClass();
            queryFilter.WhereClause = where;
 
            // 缩放到选择结果集,并高亮显示
            ZoomToSelectedFeature(flyr, queryFilter);
 
            //闪烁选中得图斑
            IFeatureCursor featureCursor = fcls.Search(queryFilter, true);
            FlashPolygons(featureCursor);
        }
 
        /// <summary>
        /// 缩放到选择结果集,并高亮显示
        /// </summary>
        /// <param name="pFeatureLyr"></param>
        /// <param name="pQueryFilter"></param>
        private void ZoomToSelectedFeature(IFeatureLayer pFeatureLyr, IQueryFilter pQueryFilter)
        {
            #region 高亮显示查询到的要素集合
 
            //符号边线颜色
            IRgbColor pLineColor = new RgbColor();
            pLineColor.Red = 255;
            ILineSymbol ilSymbl = new SimpleLineSymbolClass();
            ilSymbl.Color = pLineColor;
            ilSymbl.Width = 5;
 
            //定义选中???素的符号为红色
            ISimpleFillSymbol ipSimpleFillSymbol = new SimpleFillSymbol();
            ipSimpleFillSymbol.Outline = ilSymbl;
            RgbColor pFillColor = new RgbColor();
            pFillColor.Green = 60;
            ipSimpleFillSymbol.Color = pFillColor;
            ipSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSForwardDiagonal;
 
            //选取要素集
            IFeatureSelection pFtSelection = pFeatureLyr as IFeatureSelection;
            pFtSelection.SetSelectionSymbol = true;
            pFtSelection.SelectionSymbol = (ISymbol)ipSimpleFillSymbol;
            pFtSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false);
 
            #endregion
 
            ISelectionSet pSelectionSet = pFtSelection.SelectionSet;
            //居中显示选中要素
            IEnumGeometry pEnumGeom = new EnumFeatureGeometry();
            IEnumGeometryBind pEnumGeomBind = pEnumGeom as IEnumGeometryBind;
            pEnumGeomBind.BindGeometrySource(null, pSelectionSet);
            IGeometryFactory pGeomFactory = new GeometryEnvironmentClass();
            IGeometry pGeom = pGeomFactory.CreateGeometryFromEnumerator(pEnumGeom);
 
            axMapControl1.ActiveView.Extent = pGeom.Envelope;
            axMapControl1.ActiveView.Refresh();
        }
 
        /// <summary>
        /// 闪烁选中得图斑
        /// </summary>
        /// <param name="featureCursor"></param>
        private void FlashPolygons(IFeatureCursor featureCursor)
        {
            IArray geoArray = new ArrayClass();
            IFeature feature = null;
            while ((feature = featureCursor.NextFeature()) != null)
            {
                //feature是循环外指针,所以必须用ShapeCopy
                geoArray.Add(feature.ShapeCopy);
            }
 
            //通过IHookActions闪烁要素集合
            HookHelperClass m_pHookHelper = new HookHelperClass();
            m_pHookHelper.Hook = axMapControl1.Object;
            IHookActions hookActions = (IHookActions)m_pHookHelper;
 
            hookActions.DoActionOnMultiple(geoArray, esriHookActions.esriHookActionsPan);
            //hookActions.DoActionOnMultiple(geoArray, esriHookActions.esriHookActionsGraphic);
            //hookActions.DoActionOnMultiple(geoArray, esriHookActions.esriHookActionsZoom);
            Application.DoEvents();
            m_pHookHelper.ActiveView.ScreenDisplay.UpdateWindow();
 
            hookActions.DoActionOnMultiple(geoArray, esriHookActions.esriHookActionsFlash);
        }
    }
}


目录
相关文章
|
4月前
ArcGIS依据矢量要素消除另一个面要素中部分区域(擦除)
ArcGIS依据矢量要素消除另一个面要素中部分区域(擦除)
HMI-31-【运动模式】解决音乐模块图片显示问题
上一篇中,我们基本实现了音乐模块的布局显示,但是留了个小尾巴,就是图片显示,这个模块中,图片不是方正的,而是有透视的,但是呢,Qt的图像显示显示,我还没有研究那么深入,所以目前只能是像,但是肯定不是真真的透视。我是利用遮罩来实现的,其实还是平面的图片,仅仅是用了一个透视的图片模版来覆盖一下。
HMI-31-【运动模式】解决音乐模块图片显示问题
|
9月前
|
前端开发 数据可视化 定位技术
百度地图开发:根据指定手绘图纸照片行政区划自定义绘制对应区域边界生成geoJOSN的解决方案
百度地图开发:根据指定手绘图纸照片行政区划自定义绘制对应区域边界生成geoJOSN的解决方案
305 0
百度地图开发:根据指定手绘图纸照片行政区划自定义绘制对应区域边界生成geoJOSN的解决方案
|
9月前
Photoshop绘制立体效果的拟物化时钟图标
Photoshop绘制立体效果的拟物化时钟图标
43 0
|
9月前
平面设计实验三 手机海报与选区操作
平面设计实验三 手机海报与选区操作
41 0
ArcMap去掉某一面要素与另一面要素重合的部分
本文介绍在ArcMap软件中,对矢量面要素的部分区域加以剔除的操作~
406 1
ArcMap去掉某一面要素与另一面要素重合的部分
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
Threejs实现卫星太阳板折叠动画,信号发射,姿态调整
Threejs实现卫星太阳板折叠动画,信号发射,姿态调整
249 0
Threejs实现卫星太阳板折叠动画,信号发射,姿态调整
【3D游戏建模】制作3D水波纹板
说起最近的“网红”,不得不提水波纹板了。本文将分享几种制作水波纹板的方法,希望大家看完能有所收获!
248 0
【3D游戏建模】制作3D水波纹板
|
存储 前端开发 JavaScript
文字到底能玩出多少花样(一) 炫酷文字粒子效果实现
文字到底能玩出多少花样(一) 炫酷文字粒子效果实现
157 0