17/11/2013
Получение копии примитива
Следующий код демонстрирует использование метода “DeepCloneObjects” для получения копии примитива, который уже находится в базе. Сначала код просит указать один примитив, затем делает его «глубокую копию» и меняет цвет примитива на красный. Для идентификации нового примитива код использует класс “IdMapping”, который позволяет получить связь между оригинальным объектом и его копией.
Код - C#: [Выделить]
- [CommandMethod("copyEnt")]
- public void copyEnt()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- PromptEntityOptions options =
- new PromptEntityOptions("\nВыберите примитив для копирования: ");
- PromptEntityResult acSSPrompt = ed.GetEntity(options);
- if (acSSPrompt.Status != PromptStatus.OK)
- return;
- ObjectIdCollection collection = new ObjectIdCollection();
- collection.Add(acSSPrompt.ObjectId);
- // делаем Пространство Модели владельцем нового примитива
- ObjectId ModelSpaceId =
- SymbolUtilityServices.GetBlockModelSpaceId(db);
- IdMapping mapping = new IdMapping();
- db.DeepCloneObjects(collection, ModelSpaceId, mapping, false);
- // Теперь откроем новый примитив и изменим ему цвет...
- using (Transaction Tx = db.TransactionManager.StartTransaction())
- {
- // получаем id-копии по id-оригинала
- IdPair pair1 = mapping[acSSPrompt.ObjectId];
- // открываем копию
- Entity ent = Tx.GetObject(pair1.Value,
- OpenMode.ForWrite) as Entity;
- // меняем цвет на красный
- ent.ColorIndex = 1;
- Tx.Commit();
- }
- }
Источник: 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