ADN Open CIS
Сообщество программистов Autodesk в СНГ

30/12/2013

Выбор вставок блоков с использованием фильтра

Этот пример запрашивает у пользователя выбор нескольких примитивов, а затем фильтрует все вставки блока с именем "ABC". А затем проходит по всему набору и вызывает метод erase() для каждой вставки блока.

Код - C#: [Выделить]
  1. [CommandMethod("delABC")]
  2. public void delABC()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;
  7.  
  8.     try
  9.     {
  10.         using (Transaction tr =  db.TransactionManager.StartTransaction())
  11.         {
  12.             BlockTable BT =
  13.                 (BlockTable)tr.GetObject(db.BlockTableId,  OpenMode.ForRead);
  14.  
  15.             TypedValue[] filterlist = new TypedValue[2];
  16.             filterlist[0] = new TypedValue(0, "INSERT");
  17.             filterlist[1] = new TypedValue(2, "ABC");
  18.  
  19.             SelectionFilter filter =   new SelectionFilter(filterlist);
  20.  
  21.             PromptSelectionOptions opts =   new PromptSelectionOptions();
  22.             opts.MessageForAdding = "Выберите примитивы: ";
  23.  
  24.             PromptSelectionResult selRes =  ed.GetSelection(opts, filter);
  25.  
  26.             if (selRes.Status != PromptStatus.OK)
  27.             {
  28.                 ed.WriteMessage(
  29.                     "\nНет выбранных блоков с именем ABC ");
  30.                 return;
  31.             }
  32.  
  33.             if (selRes.Value.Count != 0)
  34.             {
  35.                 SelectionSet set = selRes.Value;
  36.  
  37.                 foreach (ObjectId id in set.GetObjectIds())
  38.                 {
  39.                         BlockReference oEnt =
  40.                                 (BlockReference)tr.GetObject(id,  OpenMode.ForWrite);
  41.                         oEnt.Erase();
  42.                 }
  43.             }
  44.             tr.Commit();
  45.         }
  46.     }
  47.     catch (System.Exception ex)
  48.     {
  49.         ed.WriteMessage(ex.ToString());
  50.     }
  51. }

Источник: http://adndevblog.typepad.com/autocad/2012/05/block-reference-selection-using-selection-filter.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=427

Опубликовано 30.12.2013