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

ADN Club => AutoCAD .NET API => Тема начата: Doublefish от 11-02-2015, 11:34:53

Название: Как получить абсолютный путь ссылки dwg?
Отправлено: Doublefish от 11-02-2015, 11:34:53
Подскажите пожалуйста, как получить абсолютный путь до файла внешней ссылки dwg если задан относительный?
или как получить свойство внешней ссылки dwg "Найден в"?
например  "..\..\..\..\Documents\Чертеж.dwg"
Название: Re: Как получить абсолютный путь ссылки dwg?
Отправлено: Андрей Бушман от 11-02-2015, 11:51:13
Не забывай о переменной ProjectName, при помощи которой управляется логика поиска ресурсов для файлов конкретного проекта. Пути, соответствующие настройкам, именованным этой переменной, обрабатываются в первую очередь - до того, как будут последовательно анализироваться общие каталоги поиска AutoCAD, а так же др. фиксированные каталоги поиска. Перебираешь значения в цикле, выполняя конкатенацию со своей строкой относительного пути. Полученный результат проверяешь на существование (FileInfo.Exists). Если true, то читаешь значение свойства FileInfo.FullName.
Название: Re: Как получить абсолютный путь ссылки dwg?
Отправлено: Doublefish от 11-02-2015, 12:17:36
попробую...
Название: Re: Как получить абсолютный путь ссылки dwg?
Отправлено: Андрей Бушман от 11-02-2015, 12:19:21
попробую...
Я обновил сообщение.
Название: Re: Как получить абсолютный путь ссылки dwg?
Отправлено: Андрей Бушман от 11-02-2015, 12:29:52
Такой вариант пробовал?
Код - 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. }
Название: Re: Как получить абсолютный путь ссылки dwg?
Отправлено: Doublefish от 11-02-2015, 12:31:38
в PathName написано "..\..\..\..\Documents\Чертеж.dwg"
Название: Re: Как получить абсолютный путь ссылки dwg?
Отправлено: Андрей Бушман от 11-02-2015, 12:33:09
тогда можно по алгоритму, обозначенному мною в #1.
UPD
Если мне не изменяет память, то по поводу ProjectName я рассказывал в т.ч. и в видео по xref: тут (https://www.youtube.com/watch?v=O1jb_5oLUQo), либо тут (https://www.youtube.com/watch?v=aRROmLMEuFM). Помню, что про ProjectName я точно рассказывал в видео о подшивках, но из YouTube удалил его давно (планировал переписать, но так руки и не дошли до этого), осталась только локальная версия видео. Однако и из справки не сложно понять суть его работы.
Название: Re: Как получить абсолютный путь ссылки dwg?
Отправлено: Александр Ривилис от 11-02-2015, 13:26:35
в PathName написано "..\..\..\..\Documents\Чертеж.dwg"
Попробуй таким путём. При помощи BlockTableRecord.GetXrefDatabase получаешь Database для Xref, а из него уже Database.Filename
Название: Re: Как получить абсолютный путь ссылки dwg?
Отправлено: trir от 11-02-2015, 13:30:28
db.ResolveXrefs(true, false);
http://adndevblog.typepad.com/autocad/2012/06/finding-all-xrefs-in-the-current-database-using-cnet.html
Название: Re: Как получить абсолютный путь ссылки dwg?
Отправлено: Александр Ривилис от 11-02-2015, 13:48:43
Два последних варианта работают только в случае если путь к XREF найден. А если не найден, то можно пойти другим путём:
Код - C# [Выбрать]
  1. string combine_path = Path.Combine(directoryMainDwg, @"..\..\..\..\Documents\Чертеж.dwg");
  2. string abs_path = Path.GetFullPath(combine_path);
где directoryMainDwg - каталог с основным dwg-файлом, в который вставлен xref.