Big666 Posté(e) le 10 décembre 2012 Posté(e) le 10 décembre 2012 (modifié) Bonjource lisp qui et la somme de lisp qui a été créé par d'autre, beaucoup plus qualifier que moi,fonctionne chez mois et pas au bureau.je rappelle qui je suis au stade bricoleur dans ce domaine, merci pour votre aide.;;; SPURGE version 1.40 ;;; Purge tout, y compris les blocs imbriqués, les blocs vides, ;;; les xrefs et les images non référencées ;;; j'ai modifier le nom meci a l'auteur pour son travail (defun c:QSP (/ AcDoc lay l_lst ss n obj name bloc ent r_lst x_lst p_lst c_lst m) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) ;; Purge les xrefs et rasters non référencées ;;(c:xref_purge) ;;(c:raster_purge) ;; Dévérouillage de tous les calques (vlax-for c (vla-get-Layers AcDoc) (if (= :vlax-true (vla-get-lock c) ) (progn (vla-put-lock c :vlax-false) (setq l_lst (cons c l_lst)) ) ) ) ;; r_lst : liste des blocs et "sous-blocs" insérés ;; x_lst : liste des xrefs insérées (setq ss (ssget "_X" '((0 . "INSERT")))) (if ss (progn (repeat (setq n (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))) ) (if (vlax-property-available-p obj 'EffectiveName) (setq name (vla-get-EffectiveName obj)) (setq name (vla-get-Name obj)) ) (if (and (= 0 (vla-get-count (vla-item (vla-get-Blocks AcDoc) name)) ) (= :vlax-false (vla-get-isXref (vla-item (vla-get-Blocks AcDoc) name) ) ) ) (vla-delete obj) ;_ Suppression des blocs vides (if (= :vlax-true (vla-get-isXref (vla-item (vla-get-Blocks AcDoc) name) ) ) (if (not (member name x_lst)) (setq x_lst (cons name x_lst)) ) (if (not (member name r_lst)) (setq r_lst (cons name r_lst)) ) ) ) ) ;; Ajout des "sous-blocs" des blocs insérés à r_lst (setq n 0) (if r_lst (while (setq name (nth n r_lst)) (setq bloc (vla-item (vla-get-blocks acDoc) name)) (repeat (setq m (vla-get-count bloc)) (setq ent (vla-item bloc (setq m (1- m)))) (if (and (= (vla-get-ObjectName ent) "AcDbBlockReference") (not (member (vla-get-name ent) r_lst)) ) (setq r_lst (reverse (cons (vla-get-Name ent) (reverse r_lst))) ) ) ) (setq n (1+ n)) ) ) ) ) ;; c_lst liste des définitions de blocs de la collection (setq c_lst nil) (vlax-for b (vla-get-blocks AcDoc) (setq c_lst (cons (vla-get-name B) c_lst)) ) ;; p_lst : liste des blocs à purger, soit les blocs de la collection ... ;; ... moins les blocs "*Model_Space" "*Paper_Space*" et les blocs insérées (setq p_lst (vl-remove-if '(lambda (x) (or (= (substr x 1 1) "*") (member x r_lst) ) ) c_lst ) ) ;; ... moins les xrefs insérées et les blocs qu'elles contiennent (mapcar '(lambda (x) (setq p_lst (vl-remove-if '(lambda (y) (wcmatch y (strcat x "*")) ) p_lst ) ) ) x_lst ) ;; suppression de tous le blocs de p_lst (mapcar '(lambda (x) (vla-delete (vla-item (vla-get-Blocks AcDoc) x)) ) p_lst ) ;; Purge et audit du dessin (vla-PurgeAll AcDoc) (vla-AuditInfo AcDoc :vlax-true) ;; Restauration de l'état des calques (if l_lst (mapcar '(lambda (x) (vla-put-lock x :vlax-true) ) l_lst ) ) (princ) ;; control enregistre ferme etranmit (command "CONTROLE" "O") (command "-PURGER" "TO" "*" "N") (command "_qsave") (command "_-etransmit" "_c" (strcat (getvar "dwgprefix") (substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 3) ) "ZIP" ) ) (command "_close" "_n") (princ) ) Modifié le 11 décembre 2012 par (gile) Mise en forme du code et ajout de bbcodes Nous vivons tous dans le ventre d'un chien géantTout le monde le sait mais personne ne dit rien du tout ultra Vomit
Big666 Posté(e) le 11 décembre 2012 Auteur Posté(e) le 11 décembre 2012 au secours Nous vivons tous dans le ventre d'un chien géantTout le monde le sait mais personne ne dit rien du tout ultra Vomit
(gile) Posté(e) le 11 décembre 2012 Posté(e) le 11 décembre 2012 Salut, S'il te plait, 1. pour que le code soit plus lisible, utilise les bbcodes :[code] ici le code [/code]donne : ici le code Accessible via l'icône : 2. pour que ton message soit plus compréhensible, exprime tes questions de manière intelligible et fais un petit effort avec l'orthographe (personnellement, quand un message contient trop de fautes, je ne finis même pas de le lire et passe au suivant). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 11 décembre 2012 Posté(e) le 11 décembre 2012 coucou c'est bien de te situer dans les "bricoleurs" mais je rejoins (gile)et je me permets de rappeler que le pire ennemi est le "copier-coller"surtout chez les débutants.mais qu'à cela ne tienne, tu trouveras de l'aide si tu nous dis au moinsce qui en marche pas. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Big666 Posté(e) le 12 décembre 2012 Auteur Posté(e) le 12 décembre 2012 certes ma méthode d'apprentissage est discutable.mais étant pour l'instant incapable de créé de toute pièce un lisp, je regarde ce qui existe,je l’arrange a ma sauce et je l'essaye .ci cela fonctionne du premier coup joie! Bonheur! Félicite .Sinon je fait Ctrl+F2 fenêtre de texte autocadet là j'essaye de résoudre le problème .en dernier recoure je vous demande de l'aide. pour ce lisp: il fonctionne très bien chez moi mais au bureau non! Le message est :Commande: qsp; erreur: une erreur est survenue dans la fonction *erreur*type d'argument incorrect: stringp nil Pour les fautes je fait de mon mieux . merci pour votre aide ;;; SPURGE version 1.40 ;;; Purge tout, y compris les blocs imbriqués, les blocs vides, ;;; les xrefs et les images non référencées (vl-load-com) (defun c:QSP (/ AcDoc lay l_lst ss n obj name bloc ent r_lst x_lst p_lst c_lstm) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) ;; Purge les xrefs et rasters non référencées ;;(c:xref_purge) ;;(c:raster_purge) ;; Dévérouillage de tous les calques (vlax-for c (vla-get-Layers AcDoc) (if (= :vlax-true (vla-get-lock c) ) (progn (vla-put-lock c :vlax-false) (setq l_lst (cons c l_lst)) ) ) ) ;; r_lst : liste des blocs et "sous-blocs" insérés ;; x_lst : liste des xrefs insérées (setq ss (ssget "_X" '((0 . "INSERT")))) (if ss (progn (repeat (setq n (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))) ) (if (vlax-property-available-p obj 'EffectiveName) (setq name (vla-get-EffectiveName obj)) (setq name (vla-get-Name obj)) ) (if (and (= 0 (vla-get-count (vla-item (vla-get-Blocks AcDoc) name)) ) (= :vlax-false (vla-get-isXref (vla-item (vla-get-Blocks AcDoc) name) ) ) ) (vla-delete obj) ;_ Suppression des blocs vides (if (= :vlax-true (vla-get-isXref (vla-item (vla-get-Blocks AcDoc) name) ) ) (if (not (member name x_lst)) (setq x_lst (cons name x_lst)) ) (if (not (member name r_lst)) (setq r_lst (cons name r_lst)) ) ) ) ) ;; Ajout des "sous-blocs" des blocs insérés à r_lst (setq n 0) (if r_lst (while (setq name (nth n r_lst)) (setq bloc (vla-item (vla-get-blocks acDoc) name)) (repeat (setq m (vla-get-count bloc)) (setq ent (vla-item bloc (setq m (1- m)))) (if (and (= (vla-get-ObjectName ent) "AcDbBlockReference") (not (member (vla-get-name ent) r_lst)) ) (setq r_lst (reverse (cons (vla-get-Name ent) (reverse r_lst))) ) ) ) (setq n (1+ n)) ) ) ) ) ;; c_lst liste des définitions de blocs de la collection (setq c_lst nil) (vlax-for b (vla-get-blocks AcDoc) (setq c_lst (cons (vla-get-name B) c_lst)) ) ;; p_lst : liste des blocs à purger, soit les blocs de la collection ... ;; ... moins les blocs "*Model_Space" "*Paper_Space*" et les blocs insérées (setq p_lst (vl-remove-if '(lambda (x) (or (= (substr x 1 1) "*") (member x r_lst) ) ) c_lst ) ) ;; ... moins les xrefs insérées et les blocs qu'elles contiennent (mapcar '(lambda (x) (setq p_lst (vl-remove-if '(lambda (y) (wcmatch y (strcat x "*")) ) p_lst ) ) ) x_lst ) ;; suppression de tous le blocs de p_lst (mapcar '(lambda (x) (vla-delete (vla-item (vla-get-Blocks AcDoc) x)) ) p_lst ) ;; Purge et audit du dessin (vla-PurgeAll AcDoc) (vla-AuditInfo AcDoc :vlax-true) ;; Restauration de l'état des calques (if l_lst (mapcar '(lambda (x) (vla-put-lock x :vlax-true) ) l_lst ) ) ;; control enregistre ferme etranmit (command "CONTROLE" "O" ) (command "-PURGER" "TO" "*" "N") (command "_qsave") (command "_-etransmit" "_c" (strcat (getvar "dwgprefix") (substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 3) ) "ZIP" ) ) (princ) ) Nous vivons tous dans le ventre d'un chien géantTout le monde le sait mais personne ne dit rien du tout ultra Vomit
bonuscad Posté(e) le 12 décembre 2012 Posté(e) le 12 décembre 2012 Commande: qsp; erreur: une erreur est survenue dans la fonction *erreur*type d'argumentincorrect: stringp nil Ce message d'erreur veut dire qu'une fonction attend une chaîne de caractère valide, mais ici elle n'a rien eu (nil) Sans en être vraiment certain, je pense que cela vient de (command "_qsave"), qui selon si le fichier à déjà un nom ou non, va réclamer un nom de fichier, qui là n'est pas fourni.Peut être préférer simplement (command "_save" "nom_fichier") ?!... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant