hookActionsCallout.cs
// Copyright 2012 ESRI // // All rights reserved under the copyright laws of the United States // and applicable international laws, treaties, and conventions. // // You may freely redistribute and use this sample code, with or // without modification, provided you include the original copyright // notice and use restrictions. // // See the use restrictions. // using System; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; using ESRI.ArcGIS.ADF.BaseClasses; using ESRI.ArcGIS.ADF.CATIDs; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Geodatabase; namespace HookActions { [Guid("8C85062D-39FF-4027-8560-A2F95E24996E")] [ClassInterface(ClassInterfaceType.None)] [ProgId("HookActions.hookActionCallout")] public sealed class hookActionsCallout : BaseCommand { #region COM Registration Function(s) [ComRegisterFunction()] [ComVisible(false)] static void RegisterFunction(Type registerType) { // Required for ArcGIS Component Category Registrar support ArcGISCategoryRegistration(registerType); // // TODO: Add any COM registration code here // } [ComUnregisterFunction()] [ComVisible(false)] static void UnregisterFunction(Type registerType) { // Required for ArcGIS Component Category Registrar support ArcGISCategoryUnregistration(registerType); // // TODO: Add any COM unregistration code here // } #region ArcGIS Component Category Registrar generated code /// <summary> /// Required method for ArcGIS Component Category registration - /// Do not modify the contents of this method with the code editor. /// </summary> private static void ArcGISCategoryRegistration(Type registerType) { string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID); GMxCommands.Register(regKey); MxCommands.Register(regKey); ControlsCommands.Register(regKey); } /// <summary> /// Required method for ArcGIS Component Category unregistration - /// Do not modify the contents of this method with the code editor. /// </summary> private static void ArcGISCategoryUnregistration(Type registerType) { string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID); GMxCommands.Unregister(regKey); MxCommands.Unregister(regKey); ControlsCommands.Unregister(regKey); } #endregion #endregion private IHookHelper m_hookHelper = null; private IGlobeHookHelper m_globeHookHelper = null; public hookActionsCallout() { base.m_category = "HookActions"; base.m_caption = "Create callouts"; base.m_message = "Create callouts"; base.m_toolTip = "Create callouts"; base.m_name = "HookActions_Callout"; } public override void OnCreate(object hook) { // Test the hook that calls this command and disable if nothing valid try { m_hookHelper = new HookHelperClass(); m_hookHelper.Hook = hook; if (m_hookHelper.ActiveView == null) { m_hookHelper = null; } } catch { m_hookHelper = null; } if (m_hookHelper == null) { //Can be globe try { m_globeHookHelper = new GlobeHookHelperClass(); m_globeHookHelper.Hook = hook; if (m_globeHookHelper.ActiveViewer == null) { //Nothing valid! m_globeHookHelper = null; } } catch { m_globeHookHelper = null; } } if (m_globeHookHelper == null && m_hookHelper == null) base.m_enabled = false; else base.m_enabled = true; } public override bool Enabled { get { 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; } //Disable if no features selected IEnumFeature enumFeature = basicMap.FeatureSelection as IEnumFeature; IFeature feature = enumFeature.Next(); if (feature == null) return false; //Enable if action supported on first selected feature if (hookActions.get_ActionSupported(feature.Shape, esriHookActions.esriHookActionsCallout)) return true; else return false; } } 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.esriHookActionsCallout)) hookActions.DoActionWithNameOnMultiple(array, sArray, esriHookActions.esriHookActionsCallout); } } }