30/12/2013
Выбор вставок блоков с использованием фильтра
Этот пример запрашивает у пользователя выбор нескольких примитивов, а затем фильтрует все вставки блока с именем "ABC". А затем проходит по всему набору и вызывает метод erase() для каждой вставки блока.
Код - C#: [Выделить]
- [CommandMethod("delABC")]
- public void delABC()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- try
- {
- using (Transaction tr = db.TransactionManager.StartTransaction())
- {
- BlockTable BT =
- (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
- TypedValue[] filterlist = new TypedValue[2];
- filterlist[0] = new TypedValue(0, "INSERT");
- filterlist[1] = new TypedValue(2, "ABC");
- SelectionFilter filter = new SelectionFilter(filterlist);
- PromptSelectionOptions opts = new PromptSelectionOptions();
- opts.MessageForAdding = "Выберите примитивы: ";
- PromptSelectionResult selRes = ed.GetSelection(opts, filter);
- if (selRes.Status != PromptStatus.OK)
- {
- ed.WriteMessage(
- "\nНет выбранных блоков с именем ABC ");
- return;
- }
- if (selRes.Value.Count != 0)
- {
- SelectionSet set = selRes.Value;
- foreach (ObjectId id in set.GetObjectIds())
- {
- BlockReference oEnt =
- (BlockReference)tr.GetObject(id, OpenMode.ForWrite);
- oEnt.Erase();
- }
- }
- tr.Commit();
- }
- }
- catch (System.Exception ex)
- {
- ed.WriteMessage(ex.ToString());
- }
- }
Источник: 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