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

ADN Club => AutoCAD .NET API => Тема начата: andy_pu от 20-01-2015, 15:02:39

Название: При программной вставке динамического блока не отображается его геометрия
Отправлено: andy_pu от 20-01-2015, 15:02:39
Добрый день! Импортирую динамический блок из другого чертежа. При вставке через панель управления "Вставка/Блок->Вставить" вхождение блока появляется на чертеже, но при программной вставке
Код - C# [Выбрать]
  1. using (Transaction transaction = db.TransactionManager.StartTransaction())
  2.             {
  3.                 BlockTable bt = AcdTable.Get<BlockTable>(transaction, db.BlockTableId, OpenMode.ForWrite);
  4.                 BlockTableRecord btr = AcdTable.GetRecord<BlockTableRecord>(transaction, bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  5.  
  6.                 BlockReference bf = new BlockReference(new Point3d(0, 0, 0), bt["BLK_HEIGHTMARK"]);
  7.  
  8.                 btr.AppendEntity(bf);
  9.                 transaction.AddNewlyCreatedDBObject(bf, true);
  10.                 transaction.Commit();
  11.             }
вхождение блока и ручки появляются, а его геометрия - нет. На вложенной картинке слевавхождение блока вставлено программно, справа - вручную.
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs8.postimg.org%2Fmxfayvvhd%2Fimage.jpg&hash=ff2117f3235bd948946247da738c2031) (http://postimg.org/image/mxfayvvhd/)
Если кто знает, в чём я ошибся, подскажите, пожалуйста, буду благодарен!
Название: Re: При программной вставке динамического блока не отображается его геометрия
Отправлено: Дмитрий Загорулькин от 20-01-2015, 17:03:26
Код - C# [Выбрать]
  1. BlockTableRecord btr = AcdTable.GetRecord<BlockTableRecord>(transaction, bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
Это где Вы такую конструкцию нашли?? Зачем так сложно?
Название: Re: При программной вставке динамического блока не отображается его геометрия
Отправлено: andy_pu от 20-01-2015, 17:07:32
 :) нижего сложного, просто обёртка для класса Autodesk.AutoCAD.DatabaseServices.Table
Название: Re: При программной вставке динамического блока не отображается его геометрия
Отправлено: Дмитрий Загорулькин от 20-01-2015, 17:10:25
Проще же (да и правильнее, наверное) как-то так:
Код - C# [Выбрать]
  1. BlockTableRecord btr = transaction.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForWrite) as BlockTableRecord;
Название: Re: При программной вставке динамического блока не отображается его геометрия
Отправлено: andy_pu от 20-01-2015, 17:17:08
Записи практически идентичные, моя не сложнее, это просто вопрос организации кода. 
Название: Re: При программной вставке динамического блока не отображается его геометрия
Отправлено: Александр Ривилис от 20-01-2015, 18:48:51
1) Выложи dwg-файл с блоком. Посмотрю.
2) Почему BlockTable открываешь для записи если её не модифицируешь?
Название: Re: При программной вставке динамического блока не отображается его геометрия
Отправлено: andy_pu от 21-01-2015, 08:50:02
1) Во вложении файл
2) Это не весь код, этот участок для загрузки блока, чтобы показать как я ссылку на блок формирую
Спасибо!
Название: Re: При программной вставке динамического блока не отображается его геометрия
Отправлено: andy_pu от 21-01-2015, 09:15:33
делаю блок не аннотативным - всё работает
Название: Re: При программной вставке динамического блока не отображается его геометрия
Отправлено: Алексей Кулик от 21-01-2015, 13:57:29
Может быть, как раз в аннотативности и дело? Например, не указано "автоматически добавлять масштабы аннотаций к объектам", или "скрывать объекты не текущего масштаба"?
Название: Re: При программной вставке динамического блока не отображается его геометрия
Отправлено: Александр Ривилис от 21-01-2015, 14:50:21
Подозреваю, что не хватает такого куска кода:
Код - C# [Выбрать]
  1. ObjectContextManager ocm = db.ObjectContextManager;
  2. ObjectContextCollection occ = ocm.GetContextCollection("ACDB_ANNOTATIONSCALES");
  3. ObjectContexts.AddContext(bf, occ.CurrentContext);

P.S.: С кодом и чертежом пока не разбирался - небыло времени.
Название: Re: При программной вставке динамического блока не отображается его геометрия
Отправлено: andy_pu от 21-01-2015, 15:29:32
Спасибо, Александр! Вы, впрочем как и всегда, абсолютно правы!