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);
        }
    }
}


目录
相关文章
|
6月前
|
数据库
ArcGIS中ArcMap新建矢量点线面要素图层并手动划定要素图层范围区域
ArcGIS中ArcMap新建矢量点线面要素图层并手动划定要素图层范围区域
156 1
|
搜索推荐 图形学
透明度和透明贴图制作玻璃水杯
模型透明度是控制整个模型的透明度属性,而透明贴图是一种贴图技术,用于控制模型表面每个像素的透明度级别。透明贴图可以与模型的透明度属性结合使用,以实现更复杂和精细的透明效果。通过调整透明贴图的透明度通道,可以实现模型表面不同部分的个性化透明度设置。
140 0
|
前端开发 数据可视化 定位技术
百度地图开发:根据指定手绘图纸照片行政区划自定义绘制对应区域边界生成geoJOSN的解决方案
百度地图开发:根据指定手绘图纸照片行政区划自定义绘制对应区域边界生成geoJOSN的解决方案
410 0
百度地图开发:根据指定手绘图纸照片行政区划自定义绘制对应区域边界生成geoJOSN的解决方案
|
JavaScript 前端开发 定位技术
地图开发实战案例:高德地图弧线连接线标注
地图开发实战案例:高德地图弧线连接线标注
148 0
Photoshop绘制立体效果的拟物化时钟图标
Photoshop绘制立体效果的拟物化时钟图标
76 0
ArcMap去掉某一面要素与另一面要素重合的部分
本文介绍在ArcMap软件中,对矢量面要素的部分区域加以剔除的操作~
507 1
ArcMap去掉某一面要素与另一面要素重合的部分
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
|
vr&ar 图形学
【Unity3D 灵巧小知识点】☀️ | Unity通过 射线 获取 鼠标的世界坐标 和 鼠标点击的物体信息
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
【Unity3D 灵巧小知识点】☀️ | Unity通过 射线 获取 鼠标的世界坐标 和 鼠标点击的物体信息
|
前端开发 程序员
Threejs - 灯光?投影?? 有光的地方就会有影子
Threejs - 灯光?投影?? 有光的地方就会有影子