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

24/12/2014

Быстрое получение количества примитивов в Пространстве Модели

LINQ предлагает легкий способ нахождения числа примитивов в Пространстве Модели без итерации по ней. Интерфейс IEnumerator обеспеченный классом BlockTableRecord может быть приведён к IEnumerable<ObjectId> для подсчета количества. Ниже пример кода :

Код - C#: [Выделить]
  1. using  System.Linq;
  2.  
  3.  Document doc
  4.         = Application.DocumentManager.MdiActiveDocument;
  5.  Database db = doc.Database;
  6.  
  7.  using  (Transaction tr
  8.         = db.TransactionManager.StartTransaction())
  9.  {
  10.      BlockTable bt = tr.GetObject(
  11.                        db.BlockTableId,
  12.                        OpenMode.ForRead) as BlockTable;
  13.  
  14.      ObjectId modelSpaceId
  15.                = SymbolUtilityServices.GetBlockModelSpaceId(db);
  16.  
  17.      BlockTableRecord btr = tr.GetObject(
  18.                        modelSpaceId,
  19.                        OpenMode.ForRead) as BlockTableRecord;
  20.  
  21.      System.Collections.Generic.IEnumerable<ObjectId>
  22.                idCollection = btr.Cast<ObjectId>();
  23.  
  24.      doc.Editor.WriteMessage(
  25.                String.Format("{0} Количество примитивов в Модели: {1}" ,
  26.                Environment.NewLine, idCollection.Count<ObjectId>()));
  27.  
  28.      tr.Commit();
  29.  }

 

Источник: http://adndevblog.typepad.com/autocad/2014/12/quick-way-to-find-number-of-entities-in-modelspace.html

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

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