(изменено: Yuriy, 10 декабря 2010г. 15:08:22)

Тема: функция вывода списка всех внешних файлов текущего чертежа

Не подскажете, какой функцией возможно вывести список всех вставленных в чертеж внешних файлов :
- dwg
- dwf  dwfx 
- dgn 
- pdf
- файлы растровых изображений
:?:

Неужели только перебором всей базы данных чертежа по entnext с анализом каждого примитива :?:

Re: функция вывода списка всех внешних файлов текущего чертежа

  (setq doc (vla-get-activedocument (vlax-get-acad-object)) xreflist nil)
   (vlax-for item (vla-get-Blocks doc)
      (if (= (vla-get-IsXref item) :vlax-true)
         (setq xreflist (cons (vla-get-name item) xreflist))
        )
     )
(princ "\nСписок внешних ссылок " )(princ xreflist)
 (setq all_image
             (mapcar 'cdr
                     (vl-remove-if-not
                       (function (lambda (x) (= 3 (car x))))
                       (dictsearch (namedobjdict) "ACAD_IMAGE_DICT")
                     ) ;_ end of vl-remove-if-not
             ) ;_ end of mapcar
      ) ;_ end of setq
(princ "\nСписок растров " )(princ all_image)(princ)

(изменено: Yuriy, 13 декабря 2010г. 12:10:31)

Re: функция вывода списка всех внешних файлов текущего чертежа

Владимир, спасибо за код


протестировал файл с разнообразными внешними файлами
*.dwg  выводятся
растры выводятся  (опробовал jpg, png, tif, tga)

а вот *.pdf, *.dwf, *.dwfx, не выводятся (((

Видимо расположены в каких-то других словарях :?:

(изменено: Yuriy, 20 декабря 2010г. 11:18:38)

Re: функция вывода списка всех внешних файлов текущего чертежа

Yuriy пишет:

Неужели только перебором всей базы данных чертежа по entnext

C удивлением обнаружил что entnext перебирает только объекты модели и текущего layout. Все остальные layout игнорируются ((

До всех же созданных пользователем объектов чертежа похоже можно добраться  при помощи (ssget "X")

Re: функция вывода списка всех внешних файлов текущего чертежа

Владимир Азарко ясно показал в примере что искал только растры: (dictsearch (namedobjdict) "ACAD_IMAGE_DICT") копайте дальше и глубже...

Re: функция вывода списка всех внешних файлов текущего чертежа

runa пишет:

копайте дальше и глубже...

Ну да, похоже только это и остается :)

Re: функция вывода списка всех внешних файлов текущего чертежа

(setq all_dwf 
             (mapcar 'cdr 
                     (vl-remove-if-not 
                       (function (lambda (x) (= 3 (car x)))) 
                       (dictsearch (namedobjdict) "ACAD_DWFDEFINITIONS") 
                     ) ;_ end of vl-remove-if-not 
             ) ;_ end of mapcar 
      ) ;_ end of setq 
(princ "\nСписок dwf " )(princ all_dwf)(princ)
(setq all_pdf 
             (mapcar 'cdr 
                     (vl-remove-if-not 
                       (function (lambda (x) (= 3 (car x)))) 
                       (dictsearch (namedobjdict) "ACAD_PDFDEFINITIONS") 
                     ) ;_ end of vl-remove-if-not 
             ) ;_ end of mapcar 
      ) ;_ end of setq 
(princ "\nСписок pdf " )(princ all_pdf)(princ)

(изменено: Владимир Азарко, 16 февраля 2011г. 17:58:22)

Re: функция вывода списка всех внешних файлов текущего чертежа

Все вместе

(vl-load-com)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)) xreflist nil) 
   (vlax-for item (vla-get-Blocks doc) 
      (if (= (vla-get-IsXref item) :vlax-true) 
         (setq xreflist (cons (vla-get-name item) xreflist)) 
        ) 
     ) 
(princ "\nСписок внешних ссылок " )(princ xreflist)

(setq all_image
       (mapcar '(lambda ( tip dict)
      (cons tip      
             (mapcar 'cdr 
                     (vl-remove-if-not 
                       (function (lambda (x) (= 3 (car x)))) 
                       (dictsearch (namedobjdict) dict) 
                     ) ;_ end of vl-remove-if-not 
             ) ;_ end of mapcar
        )
          )
           '("IMAGE" "PDF" "DWF")
           '("ACAD_IMAGE_DICT" "ACAD_PDFDEFINITIONS" "ACAD_DWFDEFINITIONS")
           )
      )
(princ "\nСписок растров " )
(mapcar '(lambda(x)
       (princ "\n==============")
       (princ (car x))
       (princ "==============")
       (foreach itm (cdr x)
         (terpri)
         (princ "\t")
         (princ itm)
         )
       )
    all_image
    )
(princ)

Re: функция вывода списка всех внешних файлов текущего чертежа

Владимир, спасибо!!!
завтра опробую...

Re: функция вывода списка всех внешних файлов текущего чертежа

Владимир Азарко,
Если мне не изменяет мой склероз, то в качестве подложки возможны ещё и файлы DGN. Так что ещё и "ACAD_DGNDEFINITIONS" нужно проверить.

Re: функция вывода списка всех внешних файлов текущего чертежа

Скорее всего так. Я экспортировал в dng, но не смог обратно вставить, ругался на отсутствие шаблона. Yuriy его не перечислял, а я и не стал заморачиваться. Направление куда копать показано.

(изменено: Yuriy, 17 февраля 2011г. 11:38:26)

Re: функция вывода списка всех внешних файлов текущего чертежа

Владимир, Все сработало!! Спасибо!!!

с направлением куда копать понятно

хотелось быстрый ETRANSMIT написать и я наивно надеялся, что все внешнее находится в одном месте, но увы (((

dgn то же не удалось вставить из-за отсутствия шаблона и так же не стал заморачиваться поскольку ни разу с ним на практике не встречался.

Re: функция вывода списка всех внешних файлов текущего чертежа

Со списком класно, но не плохо было бы и вывести пути к этим файлам.

Re: функция вывода списка всех внешних файлов текущего чертежа

В этой теме 2 ссылки. Во второй как раз и меняются пути xref и растров

(vl-load-com) 
  (setq doc (vla-get-activedocument (vlax-get-acad-object)) xreflist nil) 
   (vlax-for item (vla-get-Blocks doc) 
      (if (= (vla-get-IsXref item) :vlax-true) 
         (setq xreflist (cons (list(vla-get-name item)(vla-get-path item)) xreflist)) 
        ) 
     ) 
(princ "\nСписок внешних ссылок " )(princ xreflist) 

и

(mapcar
  '(lambda(a)
     (cond ((= (car a) 3)(cdr a))
           ((= (car a) 350)
            (cdr(assoc 1 (entget (cdr a))))
            )
           (t nil)
           )
     )
(vl-remove-if-not
  (function (lambda (x) (member (car x) '(3 350))))
  (dictsearch (namedobjdict) "ACAD_IMAGE_DICT")
  )
)

Re: функция вывода списка всех внешних файлов текущего чертежа

Аналогично определению загруженных внешних ссылок

(defun LoadedXref ()
  (vlax-for item
         (vla-get-FileDependencies
           (vla-get-ActiveDocument (vlax-get-acad-object))
         )
    (if    (= (vla-get-Feature item) "Acad:XRef")
      (princ (strcat (vla-get-FullFileName item) "\n"))
    )
  )
  (princ)
)