Example #1
0
        /// <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 = m_MapControl.Object;
            IHookActions hookActions = (IHookActions)m_pHookHelper;

            hookActions.DoActionOnMultiple(geoArray, esriHookActions.esriHookActionsPan);

            System.Windows.Forms.Application.DoEvents();
            m_pHookHelper.ActiveView.ScreenDisplay.UpdateWindow();

            hookActions.DoActionOnMultiple(geoArray, esriHookActions.esriHookActionsFlash);
            System.Windows.Forms.Application.DoEvents();
            m_pHookHelper.ActiveView.ScreenDisplay.UpdateWindow();
        }
Example #2
0
        /// <summary>
        /// 多个要素同时闪烁 add by xisheng 2011.07.01
        /// </summary>
        private void DefaultSelNde()
        {
            Application.DoEvents();
            IArray geoArray = new ArrayClass();

            for (int i = 0; i < this.advTree.Nodes.Count; i++)
            {
                if (!this.advTree.Nodes[i].HasChildNodes)
                {
                    continue;
                }
                for (int j = 0; j < this.advTree.Nodes[i].Nodes.Count; j++)
                {
                    IFeature pFeature = this.advTree.Nodes[i].Nodes[j].Tag as IFeature;
                    geoArray.Add(pFeature);
                }
            }
            if (geoArray == null)
            {
                return;
            }
            HookHelperClass hookHelper = new HookHelperClass();

            hookHelper.Hook = m_pMapControl.Object;
            IHookActions hookAction = (IHookActions)hookHelper;

            hookAction.DoActionOnMultiple(geoArray, esriHookActions.esriHookActionsFlash);
        }
Example #3
0
        public override void OnClick()
        {
            IHookActions hookActions = null;
            IBasicMap    basicMap    = null;

            //Get basic map and set hook actions
            if (m_hookHelper != null)
            {
                basicMap    = m_hookHelper.FocusMap as IBasicMap;
                hookActions = m_hookHelper as IHookActions;
            }

            else if (m_globeHookHelper != null)
            {
                basicMap    = m_globeHookHelper.Globe as IBasicMap;
                hookActions = m_globeHookHelper as IHookActions;
            }

            //Get feature selection
            ISelection selection = basicMap.FeatureSelection;
            //Get enumerator
            IEnumFeature enumFeature = selection as IEnumFeature;

            enumFeature.Reset();
            //Set first feature
            IFeature feature;

            feature = enumFeature.Next();

            //Loop though the features
            IArray       array  = new ESRI.ArcGIS.esriSystem.Array();
            IStringArray sArray = new StrArray();

            while (feature != null)
            {
                //Add feature to array
                array.Add(feature.Shape);
                //Add the value of the first field to the string array
                sArray.Add(feature.get_Value(0).ToString());
                //Set next feature
                feature = enumFeature.Next();
            }

            //If the action is supported perform the action
            if (hookActions.get_ActionSupportedOnMultiple(array, esriHookActions.esriHookActionsLabel))
            {
                hookActions.DoActionWithNameOnMultiple(array, sArray, esriHookActions.esriHookActionsLabel);
            }
        }
 private void FlashAndIdentify(IArray inArray)
 {
     try
     {
         if (inArray == null)
         {
             return;
         }
         HookHelperClass hookHelper = new HookHelperClass();
         hookHelper.Hook = MyMapControl.Object;
         IHookActions hookAction = (IHookActions)hookHelper;
         hookAction.DoActionOnMultiple(inArray, esriHookActions.esriHookActionsFlash);
     }
     catch (Exception exc) { MessageBox.Show(exc.Message); }
 }
Example #5
0
        //buffer查询并闪烁。
        public static void BufferSelectAndFlash(IMapControl4 mapCtrl, IGeometry baseGeo, esriSpatialRelEnum spatialRef, ILayer layer)
        {
            IFeatureLayer featureLayer = layer as IFeatureLayer;

            if (mapCtrl == null || featureLayer == null)
            {
                return;
            }
            IFeatureClass  fC      = featureLayer.FeatureClass;
            ISpatialFilter pFilter = new SpatialFilterClass();

            pFilter.Geometry      = baseGeo;
            pFilter.GeometryField = "SHAPE";
            pFilter.SpatialRel    = spatialRef;
            IFeatureCursor pFeatureCursor = fC.Search(pFilter, false);

            IArray   inArray = new ArrayClass();
            IFeature fe      = pFeatureCursor.NextFeature();

            mapCtrl.Map.ClearSelection();
            while (fe != null)
            {
                inArray.Add(fe);
                mapCtrl.Map.SelectFeature(layer, fe);
                fe = pFeatureCursor.NextFeature();
            }

            if (inArray == null)
            {
                return;
            }

            HookHelper m_hookHelper = new HookHelperClass();

            m_hookHelper.Hook = mapCtrl.Object;
            IHookActions hookAction = (IHookActions)m_hookHelper;

            ICommand cmd = new ControlsZoomToSelectedCommandClass();

            cmd.OnCreate(m_hookHelper.Hook);
            cmd.OnClick();
            Application.DoEvents();
            hookAction.DoActionOnMultiple(inArray, esriHookActions.esriHookActionsFlash);
        }
        /// <summary>
        /// 几何闪烁,实现ArcMap的闪烁效果
        /// </summary>
        /// <param name="mapControl"></param>
        /// <param name="geometry"></param>
        /// <param name="bZoom">是否缩放到指定几何,默认不缩放</param>
        public void Flash(IMapControl4 mapControl, IGeometry geometry, bool bZoom = false)
        {
            if (geometry == null || geometry.IsEmpty)
            {
                return;
            }
            IHookHelper hookHelper = new HookHelperClass();

            hookHelper.Hook = mapControl;
            IHookActions hookActions = hookHelper as IHookActions;

            if (bZoom) //先缩放
            {
                hookActions.DoAction(geometry, esriHookActions.esriHookActionsZoom);
                hookHelper.ActiveView.ScreenDisplay.UpdateWindow();
            }
            //再闪烁
            if (hookActions.get_ActionSupported(geometry, esriHookActions.esriHookActionsFlash))
            {
                hookActions.DoAction(geometry, esriHookActions.esriHookActionsFlash);
            }
        }
Example #7
0
        /// <summary>
        /// 显示节点的信息
        /// </summary>
        /// <param name="node"></param>
        private void ShowClickedNodeInfo(TreeNode nodeClicked, bool doFlash)
        {
            if (nodeClicked == null)
            {
                //初始化树型显示窗口
                InitializeAttributesList();
                return;
            }
            //获取点击点对应的要素
            int nodeLevel = nodeClicked.Level;
            //获取点击的是图层还是图层下的要素
            //若featureIndex < 0则表示点击的是图层,闪烁图层下选中的所有要素
            //反之,则表示点击的是图层下的要素,获取图层索引和要素索引,
            //用于在结果列表中安索引获取要素或要素集属性
            int layerIndex = -1;    int featureIndex = -1;

            if (nodeLevel > 0)
            {
                TreeNode parentNode = nodeClicked.Parent;
                layerIndex   = parentNode.Index;
                featureIndex = nodeClicked.Index;
            }
            else
            {
                layerIndex = nodeClicked.Index;
            }
            //获取对应要素
            LayerIdentifiedResult layerResult = identifiedResultsList[layerIndex];

            //点击了图层下的要素
            if (featureIndex > -1)
            {
                IFeatureIdentifyObj identifyObjDefault = layerResult.IdentifiedFeatureObjList[featureIndex];
                IFeature            featureDefault     = (identifyObjDefault as IRowIdentifyObject).Row as IFeature;
                //显示属性
                ShowFeatureAttributes(featureDefault);
                //判断是否闪烁要素

                if (doFlash)
                {
                    HookHelperClass hookHelper = new HookHelperClass();
                    hookHelper.Hook = MainForm.Instance.AxMapCtrl.Object;

                    IHookActions hookAction = (IHookActions)hookHelper;
                    hookAction.DoAction(featureDefault.Shape, esriHookActions.esriHookActionsPan);
                    Application.DoEvents();
                    hookAction.DoAction(featureDefault.Shape, esriHookActions.esriHookActionsFlash);
                    //IIdentifyObj identifyObj = identifyObjDefault as IIdentifyObj;
                    //if (identifyObj != null)
                    //{
                    //    // identifyObj.Flash(associateMapControl.ActiveView.ScreenDisplay);
                    //    // identifyObj.Flash(MapUtils.GetActiveView().ScreenDisplay);
                    //}
                }
            }
            //点击了图层,同时闪烁图层下的所有要素图形
            else
            {
                flashObjects.FlashObjects(layerResult);
            }
        }