14/08/2013
Изменение определения блока для одного вставленного блока
Ниже код, который меняет определение блока у конкретной вставки блока. Код просит у пользователя указать вставку блока и изменяет определение блока так, что вставка блока становится вставкой нового определения блока.
Код - C#: [Выделить]
- [CommandMethod("chageBlock")]
- public static void chageBlock()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- PromptEntityOptions options =
- new PromptEntityOptions("\nУкажите вставку блока: ");
- options.SetRejectMessage("\nГодится только вставка блока ");
- options.AddAllowedClass(typeof(BlockReference), false);
- PromptEntityResult acSSPrompt = ed.GetEntity(options);
- if (acSSPrompt.Status != PromptStatus.OK)
- return;
- using (Transaction Tx = db.TransactionManager.StartTransaction())
- {
- // Получаем вставку блока
- BlockReference blockRef = Tx.GetObject(acSSPrompt.ObjectId,
- OpenMode.ForRead) as BlockReference;
- // запись таблицы блоков...
- BlockTable blockTable = Tx.GetObject(db.BlockTableId,
- OpenMode.ForRead) as BlockTable;
- // установим блок с именем “TEST” если блок с таким именем есть
- // в текущей базе
- if (blockTable.Has("TEST"))
- {
- blockRef.UpgradeOpen();
- // устанавливаем ObjectId блока с именем “TEST”
- blockRef.BlockTableRecord = blockTable["TEST"];
- }
- Tx.Commit();
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2012/07/changing-block-definition-of-an-block-reference.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=175
Опубликовано 14.08.2013Отредактировано 19.08.2013 в 14:41:40