Как получить абсолютный путь ссылки dwg?

Автор Тема: Как получить абсолютный путь ссылки dwg?  (Прочитано 7937 раз)

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

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

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Подскажите пожалуйста, как получить абсолютный путь до файла внешней ссылки dwg если задан относительный?
или как получить свойство внешней ссылки dwg "Найден в"?
например  "..\..\..\..\Documents\Чертеж.dwg"

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Не забывай о переменной ProjectName, при помощи которой управляется логика поиска ресурсов для файлов конкретного проекта. Пути, соответствующие настройкам, именованным этой переменной, обрабатываются в первую очередь - до того, как будут последовательно анализироваться общие каталоги поиска AutoCAD, а так же др. фиксированные каталоги поиска. Перебираешь значения в цикле, выполняя конкатенацию со своей строкой относительного пути. Полученный результат проверяешь на существование (FileInfo.Exists). Если true, то читаешь значение свойства FileInfo.FullName.
« Последнее редактирование: 11-02-2015, 12:20:05 от Андрей Бушман »

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
попробую...

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
попробую...
Я обновил сообщение.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Такой вариант пробовал?
Код - C# [Выбрать]
  1. BlockReference br =
  2.   (BlockReference)tr.GetObject(
  3.     per.ObjectId,
  4.     OpenMode.ForRead
  5.   );
  6.  
  7. btr =
  8.   (BlockTableRecord)tr.GetObject(
  9.     br.BlockTableRecord,
  10.     OpenMode.ForRead
  11.   );
  12.  
  13. if (btr.IsFromExternalReference)
  14. {
  15.   xrefId = br.BlockTableRecord;
  16.   // затем для xrefId получаешь объект BlockTableRecord и читаешь его свойство PathName
  17. }

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
в PathName написано "..\..\..\..\Documents\Чертеж.dwg"

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
тогда можно по алгоритму, обозначенному мною в #1.
UPD
Если мне не изменяет память, то по поводу ProjectName я рассказывал в т.ч. и в видео по xref: тут, либо тут. Помню, что про ProjectName я точно рассказывал в видео о подшивках, но из YouTube удалил его давно (планировал переписать, но так руки и не дошли до этого), осталась только локальная версия видео. Однако и из справки не сложно понять суть его работы.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
в PathName написано "..\..\..\..\Documents\Чертеж.dwg"
Попробуй таким путём. При помощи BlockTableRecord.GetXrefDatabase получаешь Database для Xref, а из него уже Database.Filename
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63

Отмечено как Решение Doublefish 16-02-2015, 14:22:04

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Два последних варианта работают только в случае если путь к XREF найден. А если не найден, то можно пойти другим путём:
Код - C# [Выбрать]
  1. string combine_path = Path.Combine(directoryMainDwg, @"..\..\..\..\Documents\Чертеж.dwg");
  2. string abs_path = Path.GetFullPath(combine_path);
где directoryMainDwg - каталог с основным dwg-файлом, в который вставлен xref.
« Последнее редактирование: 11-02-2015, 13:59:56 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение