Как найти все внешние ссылки в текущей базе с помощью C#

Автор Тема: Как найти все внешние ссылки в текущей базе с помощью C#  (Прочитано 5403 раз)

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


Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Этот код не работает если один из файлов ссылок требует восстановления.
Вот что выводится в консоль автокада при этом:
Цитировать
Command: XrefGraph

---Находим все внешние ссылки ------------------
Xref "42ГП-КР-020-С4.Стены подвала": Z:\42ГП-КР-020-С4.Стены подвала.dwg
"42ГП-КР-020-С4.Стены подвала" is unloaded.

Xref "42ГП-КР-020-С4.Стены подвала": Z:\42ГП-КР-020-С4.Стены подвала.dwg
"42ГП-КР-020-С4.Стены подвала" is unloaded.

Resolve Xref "42ГП-КР-027-С11.Стены подвала": Z:\42ГП-КР-027-С11.Стены подвала.dwg

Xref Z:\42ГП-КР-027-С11.Стены подвала.dwg contains 101 annotation scales.
It is recommended you open and resave the Xref file to remove excess scales.
Error: Unable to load Z:\42ГП-КР-027-С11.Стены подвала.dwg.
Drawing may need recovery.

---Граф внешних ссылок -------------------------
Текущий чертеж
----------------------------------------
Как видно текущий чертеж содержит два XRef-а, но в граф они не попали.

Должно было быть как то так:
Цитировать
---Граф внешних ссылок -------------------------
Текущий чертеж
   |---- 42ГП-КР-027-С11.Стены подвала
      |---- 42ГП-КР-020-С4.Стены подвала
----------------------------------------
Как отловить сообщение об этой ошибке и как ее обработать вообще не понятно.

Можно конечно пытаться самостоятельно строить граф на основе BlockTableRecord ссылок, но как то не очень хочется

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Можно конечно пытаться самостоятельно строить граф на основе BlockTableRecord ссылок, но как то не очень хочется
Видимо придётся. На всякий случай попробуй заменить:
Код - C# [Выбрать]
  1. db.ResolveXrefs(true, false);
на
Код - C# [Выбрать]
  1. db.ResolveXrefs(false, false);
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
При
Код - C# [Выбрать]
  1. db.ResolveXrefs(false, false);
все ссылки находятся
Цитировать
---Находим все внешние ссылки ------------------
---Граф внешних ссылок -------------------------
Текущий чертеж
|-------Resolved Путь внешней ссылки: Z:\42ГП-КР-027-С11.Стены подвала.dwg
| |-------Unloaded Путь внешней ссылки: Z:\42ГП-КР-020-С4.Стены подвала.dwg
----------------------------------------
Но очень странно, сигнатура метода
public void ResolveXrefs(bool useThreadEngine, bool doNewOnly);
как бы говорит, что это просто разрешение на использование многопоточного режима (могу ошибаться).

Есть ли что почитать по подробнее по этому поводу?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Но очень странно, сигнатура метода
public void ResolveXrefs(bool useThreadEngine, bool doNewOnly);
как бы говорит, что это просто разрешение на использование многопоточного режима (могу ошибаться).

Есть ли что почитать по подробнее по этому поводу?

Как обычно стоит посмотреть описание в документации ObjectARX SDK для native метода:



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