При программной вставке динамического блока не отображается его геометрия

Автор Тема: При программной вставке динамического блока не отображается его геометрия  (Прочитано 8429 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн andy_puАвтор темы

  • ADN Club
  • Сообщений: 34
  • Карма: 2
Добрый день! Импортирую динамический блок из другого чертежа. При вставке через панель управления "Вставка/Блок->Вставить" вхождение блока появляется на чертеже, но при программной вставке
Код - 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.             }
вхождение блока и ручки появляются, а его геометрия - нет. На вложенной картинке слевавхождение блока вставлено программно, справа - вручную.

Если кто знает, в чём я ошибся, подскажите, пожалуйста, буду благодарен!
« Последнее редактирование: 20-01-2015, 15:13:57 от Александр Ривилис »

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Код - C# [Выбрать]
  1. BlockTableRecord btr = AcdTable.GetRecord<BlockTableRecord>(transaction, bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
Это где Вы такую конструкцию нашли?? Зачем так сложно?

Оффлайн andy_puАвтор темы

  • ADN Club
  • Сообщений: 34
  • Карма: 2
 :) нижего сложного, просто обёртка для класса Autodesk.AutoCAD.DatabaseServices.Table

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Проще же (да и правильнее, наверное) как-то так:
Код - C# [Выбрать]
  1. BlockTableRecord btr = transaction.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForWrite) as BlockTableRecord;

Оффлайн andy_puАвтор темы

  • ADN Club
  • Сообщений: 34
  • Карма: 2
Записи практически идентичные, моя не сложнее, это просто вопрос организации кода. 

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
1) Выложи dwg-файл с блоком. Посмотрю.
2) Почему BlockTable открываешь для записи если её не модифицируешь?
« Последнее редактирование: 20-01-2015, 19:55:26 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн andy_puАвтор темы

  • ADN Club
  • Сообщений: 34
  • Карма: 2
1) Во вложении файл
2) Это не весь код, этот участок для загрузки блока, чтобы показать как я ссылку на блок формирую
Спасибо!

Оффлайн andy_puАвтор темы

  • ADN Club
  • Сообщений: 34
  • Карма: 2
делаю блок не аннотативным - всё работает

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Может быть, как раз в аннотативности и дело? Например, не указано "автоматически добавлять масштабы аннотаций к объектам", или "скрывать объекты не текущего масштаба"?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Отмечено как Решение andy_pu 21-01-2015, 15:28:54

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Подозреваю, что не хватает такого куска кода:
Код - C# [Выбрать]
  1. ObjectContextManager ocm = db.ObjectContextManager;
  2. ObjectContextCollection occ = ocm.GetContextCollection("ACDB_ANNOTATIONSCALES");
  3. ObjectContexts.AddContext(bf, occ.CurrentContext);

P.S.: С кодом и чертежом пока не разбирался - небыло времени.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн andy_puАвтор темы

  • ADN Club
  • Сообщений: 34
  • Карма: 2
Спасибо, Александр! Вы, впрочем как и всегда, абсолютно правы!