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

20/08/2016

Как перенести примитив из одного блока в другой

Можно использовать метод AssumeOwnershipOf для изменения владельца примитивов. Используя этот метод вы можете назначить владельцем примитивов любой блок. Это наиболее эффективный метод для переноса примитивов из одного блока в другой.

Следующий код переносит примитивы из Пространства Модели в блок с именем "TEST".

Код - C#: [Выделить]
  1. [CommandMethod("MoveEntToBlock")]
  2. static public void MoveEntToBlock()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;
  7.  
  8.     PromptSelectionOptions opts =
  9.                            new PromptSelectionOptions();
  10.     opts.MessageForAdding = "Выберите примитивы: ";
  11.  
  12.     PromptSelectionResult result = ed.GetSelection(opts);
  13.  
  14.     if (result.Status != PromptStatus.OK)
  15.         return;
  16.  
  17.  
  18.     using (Transaction Tx = db.TransactionManager.StartTransaction())
  19.     {
  20.         BlockTable blockTable = Tx.GetObject(db.BlockTableId,
  21.                                       OpenMode.ForRead) as BlockTable;
  22.  
  23.         // Проверяем есть ли блок TEST
  24.         if (!blockTable.Has("TEST"))
  25.         {
  26.             return;
  27.         }
  28.  
  29.         BlockTableRecord record = Tx.GetObject(blockTable["TEST"],
  30.                                OpenMode.ForRead) as BlockTableRecord;
  31.  
  32.         ObjectIdCollection ids =
  33.                   new ObjectIdCollection(result.Value.GetObjectIds());
  34.         record.AssumeOwnershipOf(ids);
  35.  
  36.         Tx.Commit();
  37.  
  38.     }
  39.  
  40.     ed.Regen();
  41. }

 

Источник: http://adndevblog.typepad.com/autocad/2013/01/move-entities-between-block-table-records.html

Автор перевода: Александр Ривилис

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

Опубликовано 20.08.2016
Отредактировано 20.08.2016 в 23:47:39