FastFiber

Automatisch image raster verwijderen [OPGELOST]

Gestart door Hepa, ma 06 06 2016, 06:20:33

Vorige topic - Volgende topic

Hepa

Beste,

Kan iemand mij een lisp routine aanleveren die een image raster automatisch verwijderd, als op het commando save as gebruikt wordt?

Alvast bedankt.

MVG,

Hepa

Citaat van: Hepa op ma 06 06 2016, 06:20:33
Beste,

Kan iemand mij een lisp routine aanleveren die een image raster automatisch verwijderd, als op het commando save as gebruikt wordt?

Alvast bedankt.

MVG,

Beste,

Is er niemand die hiermee kan of wil helpen?

Eerder op deze forum is al een LISP gemaakt die automatisch het purge all commando uitvoert als de "save " knopje bedient wordt.

Nu had ik graag een soortgelijke LISP maar dat die een imageraster en/of de path ervan automastiche verwijder als het knopje "save as" bedient wordt.

Met vriendelijk groet

Reimer

Als je altijd met een knopje werkt dan zou ik adviseren om een eigen knopje te maken. Dit kan in de Customize User Interface (commando CUI).

Maak een nieuw commando (linksonder in CUI). Kies een image en geef een macro op. Zet het knopje in een toolbar, ribbon of quick acces toolbar.
De standaard macro voor opslaan is ^C^C_save .
^C = geeft cancel (dus 2x)
_ = zorgt dat autocad altijd het engelse commando geeft (in geval van andere talen)
save = het commando
= een spatie ,dit geeft 'enter'.

Je kunt hier zelf andere commando's voor zetten. Ik weet niet precies wat je wilt, maar hier een voorbeeld.
^C^C_-image;d;*;_qsave;
^C = geeft cancel
_ = engelse taal
- = geeft de commandline versie van een commando (dus zonder dialoogboxen)
image = het commando
; = enter (net als spatie)
d = detach
; = enter
* = selecteer alle images
; = enter

Misschien kun je hier iets mee?

Reimer



gery

Citaat van: Hepa op ma 06 06 2016, 06:20:33Kan iemand mij een lisp routine aanleveren die een image raster automatisch verwijderd, als op het commando save as gebruikt wordt?
"Image raster"? Of bedoelt ge "raster image"?
AutoCAD 2020 - Windows 10

Hepa

Beste Reimer,

Als eerst dank ik u voor uw reactie. Wat wil is het verwijderen / detach van een afbeelding. Maar het afbeelding moet verwijderd worden als ik op het knopje "save as" drukt.
Want voordat deze afbeelding verwijderd mag word er een PDF-bestand gecreëerd met deze afbeelding op de inhoud pagina.

Ik denk meer aan een reactor. Vandaar ook het voorbeeld over automatisch " purge" als het "save" knopje ingedrukt word.

Hopelijk kun je mij hiermee verder helpen.

Alvast bedankt.

roy_043

Probeer dit:
(defun KGA_Conv_Pickset_To_EnameList (ss / i ret)
  (if ss
    (repeat (setq i (sslength ss))
      (setq ret (cons (ssname ss (setq i (1- i))) ret))
    )
  )
)

(defun ImageDeleteAll_Main ( / ss imgDict)
  (if (setq ss (ssget "_X" '((0 . "IMAGE"))))
    (mapcar 'entdel (KGA_Conv_Pickset_To_EnameList ss))
  )
  (if (setq imgDict (cdr (assoc -1 (dictsearch (namedobjdict) "ACAD_IMAGE_DICT"))))
    (entdel imgDict)
  )
)

(defun ImageDeleteAll_OnSaveAs_CallBackCommandWillStart (rea lst)
  (if (= (car lst) "SAVEAS")
    (ImageDeleteAll_Main)
  )
)

(defun ImageDeleteAll_OnSaveAs_Load ()
  (if *ImageDeleteAll_commandReactor*
    (vlr-remove *ImageDeleteAll_commandReactor*)
  )
  (setq *ImageDeleteAll_commandReactor*
    (vlr-command-reactor
      nil ; No data.
      '((:vlr-commandwillstart . ImageDeleteAll_OnSaveAs_CallBackCommandWillStart))
    )
  )
  (princ)
)

(ImageDeleteAll_OnSaveAs_Load)
(princ)

cadtools@gmail.com

Autocad vraagt zelf om een ref unlink als de image is verwijderd en niet meer wordt gebruikt. Dat werkt vaak ook al prettig..

Hepa

Beste Roy,

Dankjewel voor de LISP routine. Hij doet precies wat ik verwacht. :vreegoe: :D. Respect voor jouw talent.

Is het ook mogelijk om die LISP zodanig aantepassen dat hij op specifieke image reageert? Want ik kwam achter dat deze LISP alle aanwezige image in de actieve tekening verwijderd. In plaats van de ene specifieke image die verwijderd moet worden.

Hoop dat je mij hiermee kan helpen.

Alvast bedankt.

roy_043

#8
De regel gemarkeerd met 'AANPASSEN' moet worden aangepast aan jouw situatie:
(defun KGA_Conv_Pickset_To_EnameList (ss / i ret)
  (if ss
    (repeat (setq i (sslength ss))
      (setq ret (cons (ssname ss (setq i (1- i))) ret))
    )
  )
)

(defun ImageDelete_CleanDict (nmeLst / imgDictElst imgDictEnm)
  (if (setq imgDictElst (dictsearch (namedobjdict) "ACAD_IMAGE_DICT"))
    (progn
      (setq imgDictEnm (cdr (assoc -1 imgDictElst)))
      (mapcar
        '(lambda (nme / imgDefElst)
          (if
            (and
              (setq imgDefElst (dictsearch imgDictEnm nme))
              (vl-every
                '(lambda (sub / elst)
                  (or
                    (/= 330 (car sub))
                    (and
                      (setq elst (entget (cdr sub)))
                      (not (vl-position '(0 . "IMAGEDEF_REACTOR") elst))
                    )
                    (or
                      (vlax-erased-p (cdr (assoc 330 elst)))
                      (vlax-erased-p (cdr (assoc 330 (entget (cdr (assoc 330 elst))))))
                    )
                  )
                )
                imgDefElst
              )
            )
            (entdel (cdr (assoc -1 imgDefElst)))
          )
        )
        (cond
          (nmeLst)
          (
            (vl-remove
              nil
              (mapcar
                '(lambda (sub) (if (= 3 (car sub)) (cdr sub)))
                imgDictElst
              )
            )
          )
        )
      )
    )
  )
)

(defun ImageDelete (nmeLst / ss)
  (if (setq ss (ssget "_X" '((0 . "IMAGE"))))
    (progn
      (setq nmeLst (mapcar 'strcase nmeLst))
      (mapcar
        '(lambda (enm)
          (if
            (or
              (not nmeLst)
              (vl-position (strcase (vla-get-name (vlax-ename->vla-object enm))) nmeLst)
            )
            (entdel enm)
          )
        )
        (KGA_Conv_Pickset_To_EnameList ss)
      )
    )
  )
  (ImageDelete_CleanDict nmeLst)
)

(defun ImageDelete_OnSaveAs_CommandWillStart (rea lst)
  (if (= (car lst) "SAVEAS")
    (ImageDelete (vlr-data rea))
  )
)

(defun ImageDelete_OnSaveAs_Load ()
  (if *ImageDelete_commandReactor*
    (vlr-remove *ImageDelete_commandReactor*)
  )
  (setq *ImageDelete_commandReactor*
    (vlr-command-reactor
      '("image1" "image2") ; AANPASSEN: Reactor data: nil of lijst met namen (zonder extensie en pad).
      '((:vlr-commandwillstart . ImageDelete_OnSaveAs_CommandWillStart))
    )
  )
  (princ)
)

(ImageDelete_OnSaveAs_Load)
(princ)


EDIT: ImageDelete_CleanDict iets gewijzigd.

Hepa


FastFiber