- /* Commands.cs 
-  * © Andrey Bushman, 2016 
-  * The example of the commands behaviour changing. 
-  */ 
- using System; 
- using System.Collections.Generic; 
- using System.Linq; 
- using System.Text; 
- using System.Reflection; 
-   
- #if AUTOCAD 
- using Autodesk.AutoCAD.Runtime; 
- using Autodesk.AutoCAD.ApplicationServices; 
- using cad = Autodesk.AutoCAD.ApplicationServices.Application; 
- using Autodesk.AutoCAD.DatabaseServices; 
- using Autodesk.AutoCAD.EditorInput; 
- #endif 
-   
- [assembly: CommandClass(typeof(Bushman.CAD.Sandbox.Commands))] 
-   
- namespace Bushman.CAD.Sandbox { 
-   
-     // ************************************************************************ 
-   
-     static class Tools { 
-         public static void Do(MethodInfo mi, Dictionary<string, Action> dict) { 
-             if (null == dict) { 
-                 throw new ArgumentNullException("dict"); 
-             } 
-   
-             string key = GetKey(mi); 
-   
-             if (dict.ContainsKey(key) && null != dict[key]) { 
-                 dict[key](); 
-             } 
-             else { 
-                 String msg = String.Format("Either the dictionary hasn't '{0}' " + 
-                     "key or the record's value is NULL.", key); 
-                 throw new ArgumentException(msg); 
-             } 
-         } 
-   
-         public static string GetKey(MethodInfo mi) { 
-             if (null == mi) { 
-                 throw new ArgumentNullException("mi"); 
-             } 
-   
-             CommandMethodAttribute att = mi.GetCustomAttributes( 
-                 typeof(CommandMethodAttribute), false).FirstOrDefault() 
-                 as CommandMethodAttribute; 
-   
-             if (null == att) { 
-                 String msg = String.Format("Method '{0}' hasn't " + 
-                     "'CommandMethod' attribute.", mi.Name); 
-                 throw new ArgumentException(msg); 
-             } 
-   
-             string format = null == att.GroupName || 
-                 att.GroupName.Trim() == String.Empty ? "{1}" : "{0}.{1}"; 
-             string key = String.Format(format, att.GroupName.Trim().ToLower(), 
-                 att.GlobalName.Trim().ToLower()); 
-             return key; 
-         } 
-     } 
-   
-     // ************************************************************************ 
-     sealed class Operations { 
-         public static void Operation_01() { 
-             MethodInfo mi = (MethodInfo)MethodBase.GetCurrentMethod(); 
-             WriteHelloMessage(mi); 
-         } 
-   
-         public static void Operation_02() { 
-             MethodInfo mi = (MethodInfo)MethodBase.GetCurrentMethod(); 
-             WriteHelloMessage(mi); 
-         } 
-   
-         public static void Operation_03() { 
-             MethodInfo mi = (MethodInfo)MethodBase.GetCurrentMethod(); 
-             WriteHelloMessage(mi); 
-         } 
-   
-         public static void Operation_04() { 
-             MethodInfo mi = (MethodInfo)MethodBase.GetCurrentMethod(); 
-             WriteHelloMessage(mi); 
-         } 
-   
-         private static void WriteHelloMessage(MethodInfo mi) { 
-             if (null == mi) { 
-                 throw new ArgumentNullException("mi"); 
-             } 
-   
-             Document doc = cad.DocumentManager.MdiActiveDocument; 
-             if (null == doc) { 
-                 return; 
-             } 
-   
-             Editor ed = doc.Editor; 
-             ed.WriteMessage("Hello from {0}!\n", mi.Name); 
-         } 
-     } 
-   
-     // ************************************************************************ 
-     public sealed class Commands { 
-   
-         const string groupName = "bushman"; 
-         static Dictionary<string, Action> dict = new Dictionary<string, 
-             Action>(); 
-   
-         static Commands() { 
-             if (dict.Count == 0) { 
-                 dict.Add(groupName + ".test1", Operations.Operation_01); 
-                 dict.Add(groupName + ".test2", Operations.Operation_02); 
-             } 
-         } 
-   
-         [CommandMethod(groupName, "Test1", CommandFlags.Modal)] 
-         public static void Test1() { 
-             MethodInfo mi = (MethodInfo)MethodBase.GetCurrentMethod(); 
-             Tools.Do(mi, dict); 
-         } 
-   
-         [CommandMethod(groupName, "Test2", CommandFlags.Modal)] 
-         public static void Test2() { 
-             MethodInfo mi = (MethodInfo)MethodBase.GetCurrentMethod(); 
-             Tools.Do(mi, dict); 
-         } 
-   
-         [CommandMethod(groupName, "ChangeCmd", CommandFlags.Modal)] 
-         public void ChangeCmd() { 
-             string key = "bushman.test1"; 
-             dict[key] = dict[key] == Operations.Operation_01 ? 
-                 (Action)Operations.Operation_03 : Operations.Operation_01; 
-             key = "bushman.test2"; 
-             dict[key] = dict[key] == Operations.Operation_02 ? 
-                 (Action)Operations.Operation_04 : Operations.Operation_02; 
-         } 
-     } 
- }