| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как автоматизировать отсоединение неиспользуемых IMAGE?

Как автоматизировать отсоединение неиспользуемых IMAGE?

Ответ
Поиск в этой теме
Непрочитано 19.12.2005, 16:06 #1
Как автоматизировать отсоединение неиспользуемых IMAGE?
kp+
 
идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095

При длительной работе с Rasterex в чертеже накапливается куча неиспользуемых (unreferenced) растровых изображений. Перед сохранением чертежа их надо отсоединять (detach), иначе Rasterex предложит сохранить каждое из них.
Ничего сложного тут нет, но если забыть это сделать, приходится отвечать "нет" на запрос сохранения каждого из этих изображений. А это уже муторно. Хотелось бы как-то объединить операции сохранения чертежа и "PURGE" этого мусора.

В общем, подскажите, PLS, как автоматизировать отсоединение неиспользуемых растровых изображений?
Просмотров: 11499
 
Автор темы   Непрочитано 20.12.2005, 17:48
#2
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Что-то никто не откликается...
Может быть, я слишком запутанно изложил вопрос?

Тогда более конкретно: где записывается информация о растровых изображениях и об их состояниях (загружен/выгружен, не найден, не используется и т. д.)?

По ходу дела, это какой-то словарь, но какой и как до него достать - я не понял.

Подскажите, PLS!
kp+ вне форума  
 
Непрочитано 20.12.2005, 18:55
1 | #3
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от kp+
Что-то никто не откликается...
Может быть, я слишком запутанно изложил вопрос?

Тогда более конкретно: где записывается информация о растровых изображениях и об их состояниях (загружен/выгружен, не найден, не используется и т. д.)?

По ходу дела, это какой-то словарь, но какой и как до него достать - я не понял.

Подскажите, PLS!
Сам словарь достать несложно:

Код:
[Выделить все]
(dictsearch (namedobjdict) "ACAD_IMAGE_DICT")
Гораздо сложнее найти неиспользуемые IMAGE, если найдешь,
тогда остальные вхождения IMAGE_DEFINITION отсеешь от тех
что вставлены:

Код:
[Выделить все]
(ssget "_X" (list (cons 0 "IMAGE")))
Нет времени поворчать над такой сахарной косточкой...

~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 21.12.2005, 10:31
#4
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Спасибо, это как раз то, что надо.
Примочка заработала.
kp+ вне форума  
 
Непрочитано 21.12.2005, 10:34
#5
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от kp+
Спасибо, это как раз то, что надо.
Примочка заработала.
Если все получится выложи для других, может кто
тоже интересуется

~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 23.12.2005, 10:42
#6
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Вот она, моя прога. Сделана по-простому. Не судите слишком строго.
Проверялась на ACAD2000i.

Код:
[Выделить все]
(defun DUI (/ im imd imd1 ims i det);Detach Unused Images

  (setq imd (dictsearch (namedobjdict) "ACAD_IMAGE_DICT")); список со словарем растров
  
  (while (assoc 3 imd);выбрасывание из списка словаря всего, кроме групп с именами растров
    (progn
      (setq im (assoc 3 imd))
      (setq imd (vl-remove im imd))        
      (setq imd1 (append imd1 (list im)))
    )
   )
  (setq imd1 (mapcar 'cdr imd1));список имен всех растров, котороые объявлены в чертеже

  (setq im (ssget "X" '((0 . "IMAGE"))));выбор всех растров, имеющих рамку в чертеже ("используемых")
  (setq ims (ssnamex im))
  (setq im nil)
  (setq ims (mapcar 'cadr ims));выкидывание номеров набора из списка
  (setq ims (mapcar 'vlax-ename->vla-object ims));преобразование во VLA-объекты
  (setq ims (mapcar 'vla-get-name ims));имена растров, имеющих рамку в чертеже (используемых)

  (setq i 0)
  (while (< i (length ims))
    (progn
      (setq imd1 (vl-remove (nth i ims) imd1));кандидаты на отсоединение
      (setq i (1+ i))
    )
  )

  (setq i 0 det "");строка для команды -image
  (while (< i (length imd1))
    (progn
      (setq det (strcat det (nth i imd1) ","))
      (setq i (1+ i))
    )
  )


  (vl-cmdf "-image" "d" det);отсоединение неиспользуемых
)
kp+ вне форума  
 
Непрочитано 23.12.2005, 16:28
#7
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Молодца!


~'J'~
fixo вне форума  
 
Непрочитано 23.07.2007, 14:43
1 | #8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Удаление неиспользуемых IMAGE и XREF. Мой вариант. Удаляет растры без использования команды -image. Выяснилось, что если в имени растра есть символ #, то -image отказывается его detach'ить. :twisted:
Проверяет наличие растров не только в модели/листе, но и в описании блоков (есть любители включить растр в блок), игнорируя Xref.
Код:
[Выделить все]
;;;Created by VVA
;;;posted
;;;http://forums.augi.com/showthread.php?t=64428&page=2&pp=10
;;;http://forum.dwg.ru/showthread.php?p=154632#post154632
(vl-load-com)
(defun mip_MakeUniqueMembersOfList  ( lst / OutList head)
  (while lst
    (setq head (car lst)
          lst (vl-remove-if '(lambda(pt)(equal pt head 1e-6)) lst)
          OutList (append OutList (list head))))
  OutList
  )
;(getEntNameinActiveDoc '("AcDbRasterImage" "AcDbBlockReference"))
;(getEntNameinActiveDoc '("AcDbRasterImage" "AcDbBlockReference"))
(defun getEntNameinActiveDoc ( pat  / blk  Obj ret)
 (princ "\nCheck") 
 (vlax-for Blk (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)))
   (princ (strcat "\nCheck "(vla-get-name Blk)))
   (if (= (vla-get-IsXref Blk) :vlax-false)
     (progn
   (vlax-for Obj Blk
     (if (and (vl-position (vla-get-ObjectName Obj) pat)
              (vlax-property-available-p obj 'Name)
              (or (vlax-property-available-p obj 'Path)
                  (vlax-property-available-p obj 'ImageFile)
                  )
              )
       (setq ret (cons (vla-get-Name obj) ret))
       )
     )
     (princ " ... Done")
   )
     )
   )
  (mip_MakeUniqueMembersOfList ret)
  )

(defun ImgDet (/ all_raster_image_name image_set used_raster_image_name)
    (defun DetachImage (ImgName)
        (vl-catch-all-apply
            '(lambda ()
                 (vla-delete
                     (vla-item
                         (vla-item
                             (vla-get-dictionaries
                                 (vla-get-activedocument (vlax-get-acad-object))
                             ) ;_ end of vla-get-dictionaries
                             "ACAD_IMAGE_DICT"
                         ) ;_ end of vla-Item
                         ImgName
                     ) ;_ end of vla-Item
                 ) ;_ end of vla-Delete
             ) ;_ end of lambda
        ) ;_ end of vl-catch-all-apply
    ) ;_ end of defun    
    (vl-load-com)
    (setvar "CMDECHO" 0)
    ;;list of all image
    (if
        (setq all_raster_image_name
                 (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
           (setq all_raster_image_name (mapcar 'strcase all_raster_image_name))
    ) ;_ end of if
    ;;list of inserting image
  (setq used_raster_image_name (getEntNameinActiveDoc '("AcDbRasterImage")))
  (setq used_raster_image_name (mapcar 'strcase used_raster_image_name))
    (mapcar
        '(lambda (img) (setq all_raster_image_name (vl-remove img all_raster_image_name)))
        used_raster_image_name
    ) ;_ end of mapcar
    (mapcar 'DetachImage all_raster_image_name)
    (princ "\nNot used image ")
    (mapcar '(lambda (x) (princ x) (princ ", ")) all_raster_image_name)
    (if all_raster_image_name (princ " ... detach")(princ " ... missing"))
    (princ)
)
(defun XrefDet (/ all_xref used_xref used_xref_name xref_set)
 (vl-load-com)
    (vlax-for Blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
        (if (= (vla-get-isxref Blk) :vlax-true)
            (setq all_xref (cons blk all_xref))
        ) ;_ end of if

    ) ;_ end of vlax-for
  (setq used_xref_name (getEntNameinActiveDoc '("AcDbBlockReference")))
  (setq all_xref (vl-remove-if '(lambda (x)(vl-position (vla-get-name x) used_xref_name)) all_xref))
  (setq used_xref_name (mapcar 'vla-get-name all_xref))
    (vl-catch-all-apply
        '(lambda ()
             (mapcar 'vla-detach all_xref)
         ) ;_ end of lambda
    ) ;_ end of vl-catch-all-apply
    (princ "\nNot used xref ")
    (mapcar '(lambda (x) (princ x) (princ ", ")) used_xref_name)
    (princ " ... detach")
    (princ)
) ;_ end of defun
(defun C:ImgDet ()(ImgDet))
(defun C:XrefDet ()(XrefDet))
(princ "\nType ImgDet or XrefDet in command line")
Удаление ненайденных внешних ссылок (XREF) и изображений (IMAGE)

Последний раз редактировалось VVA, 19.09.2015 в 12:03.
VVA вне форума  
 
Непрочитано 22.05.2009, 18:57
#9
kserg


 
Регистрация: 22.04.2004
Сообщений: 269


Уважаемый VVA, время прошло немалое, код остался преждним ?
kserg вне форума  
 
Непрочитано 23.05.2009, 20:43
#10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


А что, не работает? У меня к нему претензий пока нет.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.05.2009, 14:04
#11
kserg


 
Регистрация: 22.04.2004
Сообщений: 269


"А что, не работает?"

Спасибо, работает (спасает часто...). Просто хотелось узнать, может появились обновления к програмке.
kserg вне форума  
 
Непрочитано 17.07.2009, 14:27
#12
kserg


 
Регистрация: 22.04.2004
Сообщений: 269


> VVA

Прошу прощения, а нельзя ли и здесь как в теме "Как автоматизировать отсоединение ненайденых IMAGE и XREF ?"
http://forum.dwg.ru/showthread.php?t=36574
был предварительный поиск неиспользуемых растров и ссылок с последующим соответствующим сообщением по результатам поиска и запросом на удаление?
kserg вне форума  
 
Непрочитано 21.07.2009, 10:13
1 | #13
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Так как они используют общие ф-ции, то объединил 2 команды. Общие ф-ции сделал глобальными
2 команды: IMGDET и DUXI
Код:
[Выделить все]
(defun C:IMGDET (/ *error* used_raster_image_name all_image pat)
;;; Delete Unused Xref and Image
;;; posted VVA http://forum.dwg.ru/showthread.php?t=4983  
  (vl-load-com)
  (defun *error* (msg)
    (princ msg)
    (mip:layer-status-restore)
    (princ)
  ) ;_ end of defun
  (vlax-for Blk (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)))
    (if (= (vla-get-IsXref Blk) :vlax-false)
     (progn
    (princ "\nWait... the search for rasters in ")(princ (vla-get-name blk))
    (vlax-for item Blk
      (cond
        ((and
           (eq (vla-get-objectname item) "AcDbRasterImage")
           (setq file (vla-get-imagefile item))
         ) ;_ end of and
         (setq used_raster_image_name (cons (vla-get-name item) used_raster_image_name))
        )
        (t nil)
      ) ;_ end of cond
    ) ;_ end of vlax-for
    )
      )
  (princ " ...OK")
  ) ;_ end of vlax-for
  (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  
  (setq used_raster_image_name  (mip_MakeUniqueMembersOfList used_raster_image_name))
  (setq used_raster_image_name (vl-remove-if-not '(lambda(x)(= (type x) 'STR)) used_raster_image_name))
  (setq used_raster_image_name (mapcar 'strcase used_raster_image_name))
  (setq all_image (mapcar 'strcase all_image))
  (mapcar '(lambda (img) (setq all_image (vl-remove img all_image)))
        used_raster_image_name
    ) ;_ end of mapcar
  (princ "\nTotal: ")
  (princ (length all_image))(princ " unused rasters")
  (if all_image
    (progn
      (initget "Yes No")
      (setq pat (getkword "  Delete unused  image[Yes/No] <Yes>: "))
      (if (/= pat "No")
        (progn
          (mip:layer-status-save)
          (mapcar '(lambda(x)(vl-catch-all-apply 'DetachImage (list x))) all_image)
          (mip:layer-status-restore)
          )
        )
      )
    )
  (princ)
  )
(defun C:DUXI (/ *error* file tmpObj retxref retimg retimgobj pat)
;;; Delete Unfound Xref and Image
;;; posted VVA http://forum.dwg.ru/showthread.php?t=36574
;;; http://forum.dwg.ru/showthread.php?t=4983
  (vl-load-com)
  (defun *error* (msg)
    (princ msg)
    (mip:layer-status-restore)
    (princ)
  ) ;_ end of defun
  (setq pat '("AcDbRasterImage" "AcDbBlockReference"))
  (vlax-for lay (vla-get-layouts
                  (vla-get-activedocument (vlax-get-acad-object))
                ) ;_ end of vla-get-Layouts
    (princ "\nWait... the search for rasters and xrefs in ")(princ (vla-get-name lay))
    (vlax-for item (vla-get-block lay)
      (cond
        ((and
           (member (vla-get-objectname item) pat)
           (eq (vla-get-objectname item) "AcDbBlockReference")
           (vlax-property-available-p item 'Path)
           (setq file (vla-get-path item))
           (setq tmpObj
                  (vla-item
                    (vla-get-blocks
                      (vla-get-activedocument (vlax-get-acad-object))
                    ) ;_ end of vla-get-Blocks
                    (vla-get-name item)
                  ) ;_ end of vla-Item
           ) ;_ end of setq
         ) ;_ end of and
         (if
           (not (or (findfile file)
                    (findfile (strcat (vl-filename-base file)
                                      (vl-filename-extension file)
                              ) ;_ end of strcat
                    ) ;_ end of findfile
                ) ;_ end of or
           ) ;_ end of not
           (setq retxref (cons tmpobj retxref))
         ) ;_ end of if
        )
        ((and
           (member (vla-get-objectname item) pat)
           (eq (vla-get-objectname item) "AcDbRasterImage")
           (setq file (vla-get-imagefile item))
         ) ;_ end of and
         (if
           (not (or (findfile file)
                    (findfile (strcat (vl-filename-base file)
                                      (vl-filename-extension file)
                              ) ;_ end of strcat
                    ) ;_ end of findfile
                ) ;_ end of or
           ) ;_ end of not
           (progn
             (if (not (member (vla-get-name item) retimg))
             (setq retimg (cons (vla-get-name item) retimg)))
             (setq retimgobj (cons item retimgobj))
           )
         ) ;_ end of if
        )
        (t nil)
      ) ;_ end of cond
    ) ;_ end of vlax-for
    (princ " ...OK")
  ) ;_ end of vlax-for
  (princ "\nTotal: ")
  (princ (length retimg))(princ " unfound rasters and ")
  (princ (length retxref))(princ " unfound xrefs ")
  (if (or retimg retxref)
    (progn
  (initget "Image Xref Both")
  (setq file (getkword "Delete unfound [Image/Xref/Both] <both>: "))
  (cond ((= file "Image")
         (setq pat '("AcDbRasterImage"))
         )
        ((= file "Xref")
         (setq pat '("AcDbBlockReference"))
         )
        (t (setq pat '("AcDbRasterImage" "AcDbBlockReference")))
        )
  (mip:layer-status-save)
  (if (member "AcDbRasterImage" pat)
    (progn
      (mapcar '(lambda(x)
                 (vl-catch-all-apply 'vla-delete (list x))
                 )
              retimgobj
              )
       (mapcar '(lambda(x)
                 (vl-catch-all-apply 'DetachImage (list x))
                 )
              retimg
              )
      )
    )
   (if (member "AcDbBlockReference" pat)
    (progn
       (mapcar '(lambda(x)
                  (vl-catch-all-apply 'vla-detach (list x))
                  )
               retxref
               )
      )
    ) 
 (mip:layer-status-restore)
  )
    )
  (princ)
)
(defun mip_MakeUniqueMembersOfList  ( lst / OutList head)
;;;Удаляет одинаковые (дубликаты) элементы из списка
;;; На основе http://www.theswamp.org/index.php?topic=19128.0
;;; Изменено для сравнения вещественных чисел (equal ... 1e-6)
  (while lst
    (setq head (car lst)
          OutList (cons head OutList)
          lst (vl-remove-if '(lambda(pt)(equal pt head 1e-6))(cdr lst))
          )
    )
  (reverse OutList)
  )
  (defun mip:layer-status-restore ()
    (foreach item *MIP_LAYER_LST*
      (if (not (vlax-erased-p (car item)))
        (vl-catch-all-apply
          '(lambda ()
             (vla-put-lock
               (car item)
               (cdr (assoc "lock" (cdr item)))
             ) ;_ end of vla-put-lock
             (vla-put-freeze
               (car item)
               (cdr (assoc "freeze" (cdr item)))
             ) ;_ end of vla-put-freeze
           ) ;_ end of lambda 
        ) ;_ end of vl-catch-all-apply 
      ) ;_ end of if 
    ) ;_ end of foreach
    (setq *MIP_LAYER_LST* nil)
  ) ;_ end of defun 

  (defun mip:layer-status-save ()
    (setq *MIP_LAYER_LST* nil)
    (vlax-for item
                   (vla-get-layers
                     (vla-get-activedocument (vlax-get-acad-object))
                   ) ;_ end of vla-get-layers
      (setq *MIP_LAYER_LST*
             (cons (list item
                         (cons "freeze" (vla-get-freeze item))
                         (cons "lock" (vla-get-lock item))
                   ) ;_ end of cons 
                   *MIP_LAYER_LST*
             ) ;_ end of cons 
      ) ;_ end of setq 
      (vla-put-lock item :vlax-false)
      (if (= (vla-get-freeze item) :vlax-true)
        (vl-catch-all-apply
          '(lambda () (vla-put-freeze item :vlax-false))
        ) ;_ end of vl-catch-all-apply
      ) ;_ end of if
    ) ;_ end of vlax-for
  ) ;_ end of defun 
  (defun DetachImage (ImgName)
    (vl-catch-all-apply
      '(lambda ()
         (vla-delete
           (vla-item
             (vla-item
               (vla-get-dictionaries
                 (vla-get-activedocument (vlax-get-acad-object))
               ) ;_ end of vla-get-dictionaries
               "ACAD_IMAGE_DICT"
             ) ;_ end of vla-Item
             ImgName
           ) ;_ end of vla-Item
         ) ;_ end of vla-Delete
       ) ;_ end of lambda
    ) ;_ end of vl-catch-all-apply
  ) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.07.2009, 13:23
#14
kserg


 
Регистрация: 22.04.2004
Сообщений: 269


Спасибо!
kserg вне форума  
 
Непрочитано 06.11.2009, 13:24
#15
Кочетков Андрей

Java/Kotlin backend
 
Регистрация: 03.02.2006
Сообщений: 5,740


Володь хотел уточнить: код DUXI (http://forum.dwg.ru/showpost.php?p=424108&postcount=15) делает тоже самое что и код в этой теме?
Кочетков Андрей вне форума  
 
Непрочитано 07.11.2009, 14:29
#16
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Да. Просто здесь IMGDET и DUXI объединены (они используют несколько общих функций). Раньше они были локальными для каждой команды. Просто код получается короче.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 09.11.2009, 09:25
#17
Кочетков Андрей

Java/Kotlin backend
 
Регистрация: 03.02.2006
Сообщений: 5,740


Понял спасибо! )
Кочетков Андрей вне форума  
 
Непрочитано 16.12.2015, 16:14
#18
shartal


 
Регистрация: 12.08.2009
Сообщений: 447


Старая тема, однако сейчас встретился с ужосом. Если при вставке путь ссылки не задан, а она найдена в той же папке где и чертеж, ссылка удаляется.
При формировании комплекта в одну папку, у всех ссылок автоматом удаляются сохраненные пути и появляется только найденный путь. Соответственно все ссылки после применения команды удаляются. По логике, поиск должен вестись по пустой строке "найден в". Как бы это исправить?.
shartal вне форума  
 
Непрочитано 16.12.2015, 18:46
#19
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Цитата:
Сообщение от shartal Посмотреть сообщение
При формировании комплекта в одну папку, у всех ссылок автоматом удаляются сохраненные пути и появляется только найденный путь
Цитата:
Сообщение от shartal Посмотреть сообщение
Как бы это исправить?.
Это про ETRANSMIT?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 16.12.2015, 19:21
#20
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
Сообщение от shartal Посмотреть сообщение
При формировании комплекта в одну папку, у всех ссылок автоматом удаляются сохраненные пути и появляется только найденный путь.
Навскидку, без проверки: в режимах ETRANSMIT есть галочки типа "ФСЁ в одну папку" и "Сохранять структуру папок". Если для результата ETRANSMIT, когда все скинуто в одну папку, применить ETRANSMIT еще раз в режиме "Сохранять структуру папок", не вернуться ли сохраненные пути назад? Тогда добавится одно "лишнее" движение, но ничего нигде не надо поправлять
kp+ вне форума  
 
Непрочитано 17.12.2015, 11:37
#21
shartal


 
Регистрация: 12.08.2009
Сообщений: 447


Тут дело в том, что очистка неиспользуемых ссылок является частью скрипта, применяемого ко всем чертежам в определенной папке, и не распространяется на вложенные папки. Поэтому другие варианты etransm. не подходят.
И собственно не понятна логика отбора ссылок для удаления. Не найденная ссылка имеет заполненный путь "сохранен в" и пустой "найден в.." Такие и должны удаляться.
shartal вне форума  
 
Непрочитано 17.12.2015, 18:47
#22
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Цитата:
Сообщение от shartal Посмотреть сообщение
Не найденная ссылка имеет заполненный путь "сохранен в" и пустой "найден в.."
Чую что речь идет о коде. Лиспом нельзя узнать заполнен ли путь у внешней ссылки. Из какого поста код используешь?
Кстати нашел более свежие варианты (2007 год vs 2009 год) в этой теме Как автоматизировать отсоединение ненайденых IMAGE и XREF
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.12.2015, 12:24
#23
shartal


 
Регистрация: 12.08.2009
Сообщений: 447


Ошибся я, однако. Коды работают верно.
У меня в скрипте происходило пересохранение в другую папку и ссылки действительно терялись. Глубоко раскаиваюсь.
shartal вне форума  
 
Непрочитано 16.04.2023, 16:48 коллеги огромный рэспект (доложу в общую 2 файла в пользование Трудящимся!)
#24
guray

всяко разно проект мэйкер
 
Регистрация: 02.08.2012
тута
Сообщений: 4


коллеги огромный рЭспект Вам - Разработчикам / Мыслителям!
работает и на 2022 Cad испытано!
Кстати сшил все по файликам (2шт) собрал все в кучу и вуоля. Прошу любить и жаловать.
Заодно освежу тему дабы не увядала и её герои не забывались!

отдельно для картинок
DUIMG.lsp

отдельно для ссылок
DUXI.lsp

для проверки работоспособности:
IM_XR-DUXI.rar
Вложения
Тип файла: lsp DUIMG.lsp (5.4 Кб, 32 просмотров)
Тип файла: lsp DUXI.lsp (5.6 Кб, 29 просмотров)
Тип файла: rar IM_XR-DUXI.rar (9.2 Кб, 25 просмотров)
guray вне форума  
 
Непрочитано 08.06.2023, 15:46 Тащатся ссылки на изображения из чертежа в чертеж
#25
tutusz


 
Регистрация: 08.06.2023
Сообщений: 1


Прошу помощи в таком вопросе. При работе с растрами в автокаде, и последующем их удалении (удаляют из пространства модели, из палитры внешних ссылок их все забывают удалять) происходит следующее: ссылки на данные изображения появляются в других чертежах, которые открываются с этого же компьютера. Из-за чего все "зараженные" чертежи начинают зависать при открытии. Автокад видимо обновляет пути к этим изображениям и не может их найти, потому что чертеж другой. Все это происходит в файлах на сервере (локальная сеть компании). У меня один из самых слабых компов. Соответственно, если кто-то из коллег не почистит чертеж перед закрытием, я его вообще не открою.
Полагаю это должно как-то решаться через настройки рабочего пространства, так как проблема не в файле. Засоряются именно чертежи открытые одновременно с одного компьютера.
Самостоятельно по форуму ответ не нашла.
tutusz вне форума  
 
Непрочитано 16.06.2023, 09:12
#26
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Еще в копилку пару ссылок по удалению неиспользуемых ссылок

Purge Unused Raster Image Reference
Код:
[Выделить все]
 
;  PurgeImages.lsp by Trevor Bird
;;
;;  2021-02-20

;;------------------------------------------------------------------------------
(defun c:purgeimages
  (
    /

    ACAD_IMAGE_DICT__dxf
    ACAD_IMAGE_DICT__ename
    ACAD_REACTORS__dxf
    assoc_330

    count_imagedef
    count_imageref
    count_purged

    dps_3
    dps_330

    entity_dxf
    entity_ename
    entity_type

    imagedef_dxf
    imagedef_ename
    ImageFile
    imageref_dxf
    imageref_ename

    list_ImageNames
  )
  (setq count_purged  0)

  (cond
    (  (not (setq ACAD_IMAGE_DICT__dxf    (dictsearch (namedobjdict) "ACAD_IMAGE_DICT"))))
    (  (not (setq ACAD_IMAGE_DICT__ename  (cdr (assoc -1 ACAD_IMAGE_DICT__dxf)))))

      ;;  dps_3 = xrecord names = image names
    (  (not (setq dps_3  (vl-remove-if-not '(lambda ( _dp ) (= (car _dp) 3)) ACAD_IMAGE_DICT__dxf))))

      ;;  List of xrecord names = list of image Names
    (  (not (setq list_ImageNames  (mapcar 'cdr dps_3))))

    (list_ImageNames
      (foreach fe__ImageName list_ImageNames
        (setq imagedef_dxf    (dictsearch ACAD_IMAGE_DICT__ename fe__ImageName)
              imagedef_ename  (cdr (assoc -1 imagedef_dxf))
              ImageFile       (cdr (assoc 1 imagedef_dxf))
        );setq

        (cond
          (  (not (setq ACAD_REACTORS__dxf  (member  '(102 . "{ACAD_REACTORS") imagedef_dxf))))
          (  (not
                (setq ACAD_REACTORS__dxf  (reverse (member '(102 . "}") (reverse ACAD_REACTORS__dxf)))
                      dps_330             (vl-remove-if-not '(lambda ( _dp ) (= (car _dp) 330)) ACAD_REACTORS__dxf)
                );setq
            );not
          );

          (dps_330
            (setq count_imagedef  0
                  count_imageref  0
            );setq

            (foreach fe__dp dps_330
              (setq entity_ename  (cdr fe__dp)
                    entity_dxf    (entget entity_ename)
                    entity_type   (cdr (assoc 0 entity_dxf))
              );setq

              (cond
                (  (not (= entity_type "IMAGEDEF_REACTOR")))

                (  (not (setq count_imagedef  (1+ count_imagedef))))

                  ;;  330 - Object ID for associated image object (image reference)
                (  (not (setq assoc_330  (assoc 330 entity_dxf))))

                (assoc_330
                  (setq imageref_ename  (cdr assoc_330)
                        imageref_dxf    (entget imageref_ename)
                  );setq

                  (cond
                    (  (not imageref_dxf)
                      ;;  Image reference was deleted.
                    );(not imageref_dxf)

                    (imageref_dxf
                      (setq count_imageref  (1+ count_imageref))
                    );imageref_dxf
                  );cond
                );assoc_330
              );cond
            );fe__dp


            (if (zerop count_imageref)
              (progn
                ;;  Delete image definition xrecord.
                (setq count_purged  (1+ count_purged))
                (entdel imagedef_ename)
                (dictremove ACAD_IMAGE_DICT__ename fe__ImageName)

                (princ "\nDeleting image ")
                (prin1 fe__ImageName)
                (princ ".")
              );progn
            );if
          );dps_330
        );cond`
      );fe__ImageName
    );list_ImageNames
  );cond


  (cond
    (  (not (zerop count_purged))
      (princ "\n")
      (prin1 count_purged)

      (if (> count_purged 1)
        (princ " images ")
        (princ " image ")
      );if

      (princ "deleted.")
    );(not (zerop count_purged))

    (  (zerop count_purged)
      (princ "\nNo unreferenced images found.")
    );(zerop count_purged)
  );cond


  (princ)
);c:purgeimages


;;----------------------------------------------------------------------------------------
(princ "\nPurgeImages loaded. Start command with PURGEIMAGES.")
(princ)
RadicalPurge от Gilles Chanteau - https://apps.autodesk.com/ACD/en/Det...en&os=Win32_64
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как автоматизировать отсоединение неиспользуемых IMAGE?

Размещение рекламы