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

24/05/2013

Определение имени блока по вставке блока

Определение имени блока из вставки блока становится более сложным делом если этот блок динамический. Когда пользователь модифицирует динамический блок AutoCAD сначала создает анонимный блок, а затем создаёт ссылку на этот анонимный блок в этом чертеже. Ниже приведён код, который учитывает этот сценарий и получает имя основного (а не анонимного) блока.

Код - C#: [Выделить]
  1. [CommandMethod("blockName")]
  2. static public void blockName()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;
  7.  
  8.     PromptEntityOptions options =
  9.              new PromptEntityOptions("\nУкажите вставку блока: ");
  10.     options.SetRejectMessage("\nДопустима только вставка блока ");
  11.     options.AddAllowedClass(typeof(BlockReference), false);
  12.  
  13.     PromptEntityResult acSSPrompt = ed.GetEntity(options);
  14.  
  15.     using (Transaction tx =
  16.                         db.TransactionManager.StartTransaction())
  17.     {
  18.         BlockReference blockRef = tx.GetObject(acSSPrompt.ObjectId,
  19.                                OpenMode.ForRead) as BlockReference;
  20.  
  21.         BlockTableRecord block = null;
  22.         if (blockRef.IsDynamicBlock)
  23.         {
  24.             // получаем настоящее имя блока.
  25.             block = tx.GetObject(blockRef.DynamicBlockTableRecord,
  26.                     OpenMode.ForRead) as BlockTableRecord;
  27.  
  28.         }
  29.         else
  30.         {
  31.             block = tx.GetObject(blockRef.BlockTableRecord,
  32.                         OpenMode.ForRead) as BlockTableRecord;
  33.         }
  34.  
  35.  
  36.         if (block != null)
  37.         {
  38.             ed.WriteMessage("\nИмя блока: "
  39.                                         + block.Name + "\n");
  40.         }
  41.         tx.Commit();
  42.     }
  43. }

 

Источник: http://adndevblog.typepad.com/autocad/2012/05/identifying-block-name-from-the-block-reference.html

Обеспечение: http://adn-cis.org/forum/index.php?topic=48.0

Опубликовано 24.05.2013
Отредактировано 06.06.2013 в 01:19:01