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