Aller au contenu

Détacher les xref de image, dwg, PDF et entre autres fichiers d'externe


Messages recommandés

Posté(e)

Bonjour,

 

Sous AutoCAD:

En utilisant le code détachall, en lancant la commande "detachall", elle scanne et vire tout les fichiers externe qui se trouvait dans xref et les a éffacé, je l'ai bien aimé :) Pratique.

 

Sous SuperAutoscript:

sauf que ça ne marche pas si bien sous SuperAutoScript (SAS) , elle se lance mais de là, elle se perd à la fin avec multitude de CMD sans fin et en continu sans réponse.

 

Je pense que le script (SAS)est encore en build, n'est peut etre pas fait.

 

Peut etre, une correction dans ce script ?

 

detachall code source LSP:

(defun C:Detachall (/			      *error*
	    mip:layer-status-restore  mip:layer-status-save
	    delete-xref-img-underlay  delete-all-dict
	   )
 (defun *error* (msg)
   (mip:layer-status-restore)
   (princ msg)
   (princ)
 ) ;_ end of defun
 (defun mip:layer-status-restore ()
   (foreach item *PD_LAYER_LST*
     (if (not (vlax-erased-p (car item)))
(vl-catch-all-apply
  '(lambda ()
     (vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
     (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 *PD_LAYER_LST* nil)
 ) ;_ end of defun

 (defun mip:layer-status-save ()
   (setq *PD_LAYER_LST* nil)
   (vlax-for item (vla-get-layers
	     (vla-get-activedocument (vlax-get-acad-object))
	   ) ;_ end of vla-get-layers
     (setq *PD_LAYER_LST*
     (cons (list item
		 (cons "freeze" (vla-get-freeze item))
		 (cons "lock" (vla-get-lock item))
	   ) ;_ end of cons
	   *PD_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 delete-xref-img-underlay (/ count txt)
   (mip:layer-status-save)
   (vlax-for Blk (vla-get-Blocks
	    (vla-get-activedocument (vlax-get-acad-object))
	  ) ;_ end of vla-get-Blocks
     (if (and (= (vla-get-IsXref Blk) :vlax-false)
       (not (wcmatch (vla-get-name Blk) "*|*"))
  ) ;_ end of and
(progn
  (setq	count 0
	txt   (strcat " Erase Xref and Underlay in "
		      (vla-get-name Blk)
	      ) ;_ end of strcat
  ) ;_ end of setq
  (grtext -1 txt)
  (vlax-for Obj	Blk
    (setq count (1+ count))
    (if	(zerop (rem count 10))
      (grtext -1 (strcat txt " : " (itoa count)))
    ) ;_ end of if
    (if
      (and (vlax-write-enabled-p Obj)
	   (or
	     (and ;_ XREF
	       (= (vla-get-ObjectName obj) "AcDbBlockReference")
	       (vlax-property-available-p Obj "Path")
	     ) ;_ end of and
	     (and ;_ UNDERLAY
	       (wcmatch (vla-get-ObjectName obj) "*Reference")
	       (vlax-property-available-p Obj "UnderlayName")
	     ) ;_ end of and
	     (= (vla-get-ObjectName obj) "AcDbRasterImage") ;_ IMAGE
	   ) ;_ end of or
      ) ;_ end of and
       (VL-CATCH-ALL-APPLY 'vla-Delete (list Obj))
    ) ;_ end of if
  ) ;_ end of vlax-for
) ;_ end of progn
     ) ;_ end of if
   ) ;_ end of vlax-for
   (mip:layer-status-restore)
 ) ;_ end of defun
 (defun delete-all-dict (dict)
;;; dict - dict name (like "ACAD_IMAGE_DICT", "ACAD_PDFDEFINITIONS" ... )
   (vl-catch-all-apply
     '(lambda ()
 (vlax-map-Collection
   (vla-item
     (vla-get-dictionaries
       (vla-get-activedocument (vlax-get-acad-object))
     ) ;_ end of vla-get-dictionaries
     dict ;_ "ACAD_IMAGE_DICT"
   ) ;_ end of vla-Item
   'vla-delete
 ) ;_ end of vlax-map-Collection
      ) ;_ end of lambda
   ) ;_ end of vl-catch-all-apply
 ) ;_ end of defun

 (vl-load-com)
 (delete-xref-img-underlay)
 (command "_-xref" "_d" "*")
 (while (> (getvar "CMDACTIVE") 0) (command))
 (mapcar 'delete-all-dict
  (list	"ACAD_IMAGE_DICT"
	"ACAD_PDFDEFINITIONS"
	"ACAD_DWFDEFINITIONS"
	"ACAD_DGNDEFINITIONS"
  ) ;_ end of list
 ) ;_ end of mapcar
 (princ)
) ;_ end of defun

 

à moins que vous ayez un autre script bien sympa (gratuite) qui permet tout effacer les fichiers externe de xref sous SAS de preference autre que detachall et qui marche trés bien en détachant qui se trouvait dans xref (image, pdf, dwg, doc etc...)

 

une idée?

 

D'avance, merci

Posté(e)

La commande T fonctionne sous autocad alors sous SAS, il faut noter dans le script:

-xref

DETACHER

*

 

le probleme, sous SAS, j'aimerais detacher tout ce qui se trouve dans xref dont DWG + image (JPG/BMP) + PDF + DOC/Excel + divers, comme le fait la commande DETACHALL sous autocad, elle m'a bien plu.

 

DETACHALL ne fonctionne que sous autocad, j'aimerais cela pareil sous SAS (peut etre en cause en build)

 

j'espere bien avoir expliquer mon probléme?

Posté(e)

j'utilise pas Super Auto Script, mais de ce que j'en ai lu, ça lance des script... rien ne t’empêche de lancer DETACHALL dans un script non? (et même de le charger s'il ne l'est pas par défaut)

à moins que tu ne veuille le faire tourner sous LT?

 

bref j'ai pas tout compris...

Posté(e)

Bonjour,

 

j'avais trouvé un, c'est celui de DETACHALL.

DETACHALL n'a aucun probléme sous autocad mais SAS a lancé ce script puis se met en continu avec des multitude de CMD sans fin, c'est ce que SAS est peut-être en build.

 

j'aimerais un script lsp (similaire ou identique à DETACHALL) qui permet de tout detacher dwg/img/pdf/doc/excel/ tout les extentions qui se trouvent dans xref, et se lancerait sans probléme sous SAS uniquement

  • 3 semaines après...
Posté(e)

Salut

 

Deux solutions

 

1) Tu écris un lisp de ce style que tu sauves par exemple en test.lsp

(load"c:/rep1/rep2/Detachall.lsp")
(c:Detachall)

et comme commande dans SAS, tu écris (load"c:/rep1/rep2/test.lsp)

 

2) Sans utiliser de lisp intermédiaire, tu écris en commande dans SAS

(load"c:/rep1/rep2/Detachall.lsp")

(c:Detachall)

 

ps : S'il n'y a pas de boites de dialogues, une ligne lisp peut très bien servir de commande en script. Il faut juste que le lisp soit chargé auparavant.

 

@+

  • Upvote 1

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Salut

 

Deux solutions

 

1) Tu écris un lisp de ce style que tu sauves par exemple en test.lsp

(load"c:/rep1/rep2/Detachall.lsp")
(c:Detachall)

et comme commande dans SAS, tu écris (load"c:/rep1/rep2/test.lsp)

 

2) Sans utiliser de lisp intermédiaire, tu écris en commande dans SAS

(load"c:/rep1/rep2/Detachall.lsp")

(c:Detachall)

 

ps : S'il n'y a pas de boites de dialogues, une ligne lisp peut très bien servir de commande en script. Il faut juste que le lisp soit chargé auparavant.

 

@+

 

Salut,

 

j'ai noté le sript :

(load"c:/*****/Detachall.lsp")

(c:Detachall)

 

j'ai également testé :

(load"C:/Program Files/AutoCAD 2010/LISP/Detachall.lsp")(c:Detachall)

 

Elle s'est bien lancé sous SAS mais j'obtiens toujours le meme probléme. Désque la commande detachall a fini de tout detacher, elle continue avec une multitude de CMD à l'infini comme j'en ai expliqué dans mon premier topic.

C'est comme si elle ne sait pas comment lui dire de finir et save.

 

 

d'avance, merci pour l'aide, je veux etudier

  • 1 mois après...
  • 2 mois après...
  • 2 mois après...
Posté(e)

hello, ca date a ce que je vois, je suppose que tu as déjà trouvé ta solution.

il existe déjà un lisp de chez Patrick.

 

je confirme que ca ne marchera pas (ou jamais) sous SuperAutoScript, il y a une incohérence ou obslete.

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité