CADsite forum

AutoCAD => Autolisp => Topic gestart door: cetacad op wo 19 01 2011, 13:00:01

Titel: Image zoeken binnen tekening (opgelost)
Bericht door: cetacad op wo 19 01 2011, 13:00:01
Beste forumgebruikers,

Om zien of een block in een tekening voorkomt gebruik ik (tblsearch "BLOCK" "bloknaam").
Weet iemand hoe ik een image kan vinden?


Alvast bedankt, Fred.
Titel: Re:Image zoeken binnen tekening
Bericht door: sschevers op wo 19 01 2011, 13:28:25
Fred,

Images zitten niet in een table maar in een named dictionary. Zie bijgaande link voor een mogelijke oplossing (zelf niet getest!)
http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/lisp-to-get-raster-image-properties/m-p/1372057 (http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/lisp-to-get-raster-image-properties/m-p/1372057)


succes stephan
Titel: Re:Image zoeken binnen tekening
Bericht door: cetacad op wo 19 01 2011, 13:44:07
Bedankt Stephan,

Dit was precies wat ik zocht.
Ik heb het op de volgende wijze toegepast:

(setq logo-in nil)
(IF (= (cdr(assoc 3 (dictsearch (namedobjdict) "Acad_image_dict"))) "Logo stempel")(progn(setq logo-in "JA")
))

Fred.
Titel: Re:Image zoeken binnen tekening
Bericht door: HofCAD op do 20 01 2011, 08:55:31
Citaat van: cetacad op wo 19 01 2011, 13:44:07
Bedankt Stephan,

Dit was precies wat ik zocht.
Ik heb het op de volgende wijze toegepast:

(setq logo-in nil)
(IF (= (cdr(assoc 3 (dictsearch (namedobjdict) "Acad_image_dict"))) "Logo stempel")(progn(setq logo-in "JA")
))

Fred.
Beste Fred,

En als er nu twee of meer verschillende Images in je tekening staan,
en je hebt dus na je Logo stempel  nog andere gekoppeld? :lol:
Je kan verder nog het verschil maken tussen geplaatst (referenced) en
niet geplaatst (unreferenced) maken.
Na een attach en een erase zit de image nog steeds in de dictionary.

Met vriendelijke groet, HofCAD CSI.

(defun c:ImageAt?( / lst)
(vl-load-com)
(vlax-map-collection
 (vla-get-filedependencies
   (vla-get-activedocument
     (vlax-get-acad-object)
   )
 )
 '(lambda (x)
    (if (= (vla-get-feature x) "Acad:Image")
      (setq lst (append lst (list (vla-get-fullfilename x)))
     ;;; of (setq lst (append lst (list (vla-get-filename x)))
     ;;; of (setq lst (append lst (list (vl-filename-base (vla-get-filename x))))
    )
  )
)
)
lst
)

Als je Imagefile met extensie "Logo stempel.jpeg" is, dan kun je het volgende
voor koppelings (attachment) onderzoek gebruiken:
(defun c:LogoAt?( / lst logo)
(vl-load-com)
(setq logo "Logo stempel.jpeg" logo-in nil)
(vlax-map-collection
 (vla-get-filedependencies
   (vla-get-activedocument
     (vlax-get-acad-object)
   )
 )
 '(lambda (x)
    (if (= (vla-get-feature x) "Acad:Image")
      (setq lst (append lst (list (vla-get-filename x)))
    )
  )
)
)
(if (member logo lst) (setq logo-in "JA"))
)

of als je Imagefile  "Logo stempel" is, dan kun je het volgende
voor koppelings (attachment) onderzoek gebruiken:
(defun c:LogoAt3? (/ ed logo)
 (setq logo "Logo stempel" logo-in nil
 )
 (setq ed (dictsearch (namedobjdict) "Acad_image_dict"))
 (foreach v ed
   (if (= (car v) 3)
     (progn
(if (= (cdr v) logo)
(setq logo-in "JA")
)
     )
   )
 )
 logo-in
)

Als je Imagefile zonder extensie "Logo stempel" is, dan kun je het volgende
voor plaatsings (reference) onderzoek gebruiken:
(defun c:LogoRef? (/ logo ss i)
 (setq logo "Logo stempel" logo-in nil
 )
 (setq i 0
        ss (ssget "_X" (list (cons 0 "IMAGE")))
 )
 (repeat (sslength ss)
   (if
     (= (vl-filename-base
  (cdr
    (assoc 1 (entget (cdr (assoc 340 (entget (ssname ss i))))))
  )
)
logo
     )
      (setq logo-in "JA")
   )
   (setq i (1+ i))
 )
 logo-in
)