- // SelectionCommands.cs 
- // Выбор всех полилиний с указанным количеством вершин. © Andrey Bushman, 2013 
- // Заказ сотрудников расчётного отдела нашей компании. 
-   
- #define SECOND_VARIANT 
-   
- //Microsoft 
- using System; 
-   
- //Autodesk 
- using cad = Autodesk.AutoCAD.ApplicationServices.Application; 
- using App = Autodesk.AutoCAD.ApplicationServices; 
- using Db = Autodesk.AutoCAD.DatabaseServices; 
- using Ed = Autodesk.AutoCAD.EditorInput; 
- using Rtm = Autodesk.AutoCAD.Runtime; 
-   
- // Bushman 
- using Bushman.CAD.DatabaseServices; 
-   
- [assembly: Rtm.ExtensionApplication(typeof(Bushman.CAD.Commands.SelectionCommands))] 
- [assembly: Rtm.CommandClass(typeof(Bushman.CAD.Commands.SelectionCommands))] 
-   
- namespace Bushman.CAD.Commands { 
-   
-         public sealed class SelectionCommands : Rtm.IExtensionApplication { 
-   
-                 [Rtm.CommandMethod("PlineSel", Rtm.CommandFlags.Modal)] 
-                 public void PolylineSelectionViaVertexCount() { 
-                         App.Document doc = cad.DocumentManager.MdiActiveDocument; 
-                         Db.Database db = doc.Database; 
-                         Ed.Editor ed = doc.Editor; 
-   
-                         Ed.PromptIntegerOptions intOpt = new Ed.PromptIntegerOptions("\nКоличество вершин в полилиниях, подлежащих выборке"); 
-                         intOpt.AllowNegative = false; 
-                         intOpt.AllowNone = false; 
-                         intOpt.AllowZero = false; 
-   
-                         Ed.PromptIntegerResult intRes = ed.GetInteger(intOpt); 
-   
-                         if (intRes.Status != Ed.PromptStatus.OK) { 
-                                 ed.WriteMessage("\nНе было выбрано ни одного примитива.\n"); 
-                                 return; 
-                         } 
-   
- #if !SECOND_VARIANT 
-                         Boolean rejectObjectsFromNonCurrentSpace = true; 
-                         Db.TypedValue[] filterList = new Db.TypedValue[2];                       
- #else 
-                         Db.TypedValue[] filterList = new Db.TypedValue[3]; 
-   
-                         Db.LayoutManager layMng = Db.LayoutManager.Current; 
-                         String curLayoutName = layMng.GetCurrentSpaceName(); 
-   
-                         filterList[2] = new Db.TypedValue(410, curLayoutName); 
- #endif 
-                         filterList[0] = new Db.TypedValue((Int32)Db.DxfCode.Start, "LWPOLYLINE"); 
-                         filterList[1] = new Db.TypedValue(90, intRes.Value); 
-   
-                         Ed.SelectionFilter filter = new Ed.SelectionFilter(filterList); 
-                         Ed.PromptSelectionOptions selOpt = new Ed.PromptSelectionOptions(); 
-                         selOpt.SingleOnly = false; 
-   
- #if !SECOND_VARIANT 
-                         selOpt.RejectObjectsFromNonCurrentSpace = rejectObjectsFromNonCurrentSpace; 
- #endif 
-   
-                         // Нужно в текущем пространстве (Модель\Лист) выделить все примитивы согласно фильтру 
-                         // так, чтобы отображались в т. ч. и ручки. Причём указанное выделение должно оставаться 
-                         // активным и по завершению работы кода 
-                         Ed.PromptSelectionResult selRes = ed.SelectAll(filter); 
-   
-                         if (selRes.Status != Ed.PromptStatus.OK) { 
-                                 ed.WriteMessage("\nНе было выбрано ни одного примитива.\n"); 
-                                 return; 
-                         } 
-   
-                         ed.WriteMessage("\nКоличество выбранных примитивов: {0}\n", selRes.Value.Count); 
-   
-                         // Результаты выборки подсвечиваю с отображением "ручек": 
-                         ed.SetImpliedSelection(selRes.Value.GetObjectIds()); 
-   
-                         // Если нужно просто подсветить объекты, без отображения "ручек" то следует 
-                         // использовать Entity.Highlight(). Чтобы снять такую подсветку, нужно вызывать 
-                         // метод Entity.Unhighlight() 
-   
-                         // Чтобы очистить текущий набор выборки следует поступать так: 
-                         // ed.SetImpliedSelection(new Db.ObjectId[0]); 
-                 } 
-   
-                 #region IExtensionApplication Members 
-   
-                 public void Initialize() { 
-                         Ed.Editor ed = cad.DocumentManager.MdiActiveDocument.Editor; 
-                         ed.WriteMessage("\nPlineSel. © Andrey Bushman, 2013\n"); 
-                 } 
-   
-                 public void Terminate() { 
-                         // throw new NotImplementedException(); 
-                 } 
-   
-                 #endregion 
-         } 
- }