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

17/11/2013

Получение копии примитива

Следующий код демонстрирует использование метода “DeepCloneObjects” для получения копии примитива, который уже находится в базе. Сначала код просит указать один примитив, затем делает его «глубокую копию» и меняет цвет примитива на красный. Для идентификации нового примитива код использует класс “IdMapping”, который позволяет получить связь между оригинальным объектом и его копией.

Код - C#: [Выделить]
  1. [CommandMethod("copyEnt")]
  2. public void copyEnt()
  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.  
  11.     PromptEntityResult acSSPrompt = ed.GetEntity(options);
  12.  
  13.     if (acSSPrompt.Status != PromptStatus.OK)
  14.         return;
  15.  
  16.     ObjectIdCollection collection = new ObjectIdCollection();
  17.     collection.Add(acSSPrompt.ObjectId);
  18.  
  19.     // делаем Пространство Модели владельцем нового примитива
  20.     ObjectId ModelSpaceId =
  21.             SymbolUtilityServices.GetBlockModelSpaceId(db);
  22.  
  23.     IdMapping mapping = new IdMapping();
  24.     db.DeepCloneObjects(collection, ModelSpaceId, mapping, false);
  25.  
  26.     // Теперь откроем новый примитив и изменим ему цвет...
  27.     using (Transaction Tx = db.TransactionManager.StartTransaction())
  28.     {
  29.         // получаем id-копии по id-оригинала
  30.         IdPair pair1 = mapping[acSSPrompt.ObjectId];
  31.  
  32.         // открываем копию
  33.         Entity ent = Tx.GetObject(pair1.Value,
  34.                                         OpenMode.ForWrite) as Entity;
  35.  
  36.         // меняем цвет на красный
  37.         ent.ColorIndex = 1;
  38.  
  39.         Tx.Commit();
  40.     }
  41.  
  42. }

 

Источник: http://adndevblog.typepad.com/autocad/2012/07/making-a-copy-of-an-entity.html

 

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

Опубликовано 17.11.2013
Отредактировано 17.11.2013 в 22:21:40