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