Тема: Как программно определить имя файла внешней ссылки?

Как программно определить имя файла внешней ссылки?
Тут фишка в том, что функция (entget) выдает внутреннее имя ссылки. Обычно, если его не менять ручками, то оно совпадает с именем файла, но меня интересует именно тот случай, когда не совпадает, т.е. функцией (entget) воспользоваться нельзя.
Заранее благодарен!

Re: Как программно определить имя файла внешней ссылки?

(defun get-xref-filename (/ ent err)
  (if (and (setq ent (car (entsel)))
           (setq ent (vlax-ename->vla-object ent))
           (vlax-property-available-p ent 'path)
           ) ;_ end of and
    (if (vl-catch-all-error-p
          (setq err
                 (vl-catch-all-apply
                   (function
                     (lambda ()
                       (princ
                         (strcat
                           "\nPath by ent : "
                           (vla-get-path ent)
                           "\nPath by BLOCKDEF : "
                           (vla-get-path
                             (vla-item
                               (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)) (vla-get-effectivename ent))
                               ) ;_ end of vla-item
                             ) ;_ end of vla-get-path
                           ) ;_ end of strcat
                         ) ;_ end of princ
                       ) ;_ end of lambda
                     ) ;_ end of function
                   ) ;_ end of vl-catch-all-apply
                ) ;_ end of setq
          ) ;_ end of vl-catch-all-error-p
      (princ (strcat "\nERROR : " (vl-catch-all-error-message err)))
      ) ;_ end of if
    ) ;_ end of if
  (princ)
  ) ;_ end of defun

Re: Как программно определить имя файла внешней ссылки?

Спасибо! А я, пока ждал ответа на свой вопрос, нарыл совсем простой способ:

(setq le (entget (car (entsel))))
(setq XRef_FN (vl-filename-base (cdr (assoc 1 (tblsearch "BLOCK" (cdr(assoc 2 le)))))))

Re: Как программно определить имя файла внешней ссылки?

vl-filename-base возвращает только имя файла, но не полный путь. Хотя, если это и требовалось - то бога ради ))

Re: Как программно определить имя файла внешней ссылки?

Если нужен полный путь, то просто нужно поскипать vl-filename-base, поскольку полный путь возвращает конструкция:  (cdr (assoc 1 (tblsearch "BLOCK" (cdr(assoc 2 le))))).

Re: Как программно определить имя файла внешней ссылки?

В любом случае код впрямую использовать нельзя: не контролируется тип выбираемого примитива, не проверяется "а вообще это ссылка или нет", не преобразовывается возможный относительный путь в абсолютный и т.п.

Но это уже отдельная песня...