zebzeb Posté(e) le 27 février 2020 Posté(e) le 27 février 2020 Bonjour, Il y a longtemps que je ne fais plus d’Autocad et dans le cadre d’un DOE, j’ai créé un script (via VBA Excel), qui ouvre les fichiers un à un ; parmi les différentes actions je change des valeurs d’attributs, je purge, je lis et détache des xref, etc… Mais je bloque pour sur les claques, je m’explique1. Pour rendre le calque 0 actif et déverrouiller les autres (command "-calque" "CH" "0" "D" "*" "") Si je ne mais pas les derniers "" je ne sors pas de la commande, mais les mettant ça me sort nil donc le script s’arrête 2. Pour supprimer des calques (command "-suppcalque" "N" "REVISION-*")Le hic suppression de calque ne prends pas en charge les caractères génériques, de plus si le calque est une ancienne révision il est gelé et suppcalque ne le supprime pas. Donc je cherche un lisp/manipulation1. Qui rend actif le calque 02. Supprime les calques "REVISION-*", "Indice-*" qu’il soit Verrouillés ou gelés, idéalement je souhaiterai pouvoir charger le lisp et entrer la commande (command "NomDuLisp" "REVISION-*") (command "NomDuLisp" "*UnCalque*") Voilà je vous ai tout dit, si vous avez des idées ou quelques chose vos bibliothèques qui correspond je suis preneur Merci et bonne journée Citer
Fraid Posté(e) le 27 février 2020 Posté(e) le 27 février 2020 Bonjour, Pour rendre le calque 0 courant (setvar 'CLAYER "0") Pour dégeler l'ensemble des calques (vl-load-com) (defun degelay ( / n la doc) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (repeat (setq n (vla-get-count (vla-get-layers doc))) (setq la (vla-item (vla-get-layers doc) (setq n (1- n)))) (if (= :vlax-true (vla-get-freeze la)) (vla-put-freeze la :vlax-false) ) ) );fin degelay Pour tout déverrouiller sur le même principe (defun develay ( / n la doc) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (repeat (setq n (vla-get-count (vla-get-layers doc))) (setq la (vla-item (vla-get-layers doc) (setq n (1- n)))) (if (= :vlax-true (vla-get-lock la)) (vla-put-lock la :vlax-false) ) ) );fin develay Pour supprimer un calque il faut mieux qu'il soit vidé, et tu purge. Citer https://github.com/Fraiddd
bonuscad Posté(e) le 27 février 2020 Posté(e) le 27 février 2020 Essayes ceci avec précaution (sauvegarde si tu es sûre du résultat) car j'ai pas vraiment testé...Tu copie-colle en ligne de commande.((lambda ( / flag lay) (setq flag T) (while (setq lay (tblnext "LAYER" flag)) (if (and (zerop (boole 1 16 (cdr (assoc 70 lay)))) (/= (cdr (assoc 2 lay)) "0")) (if (or (wcmatch (cdr (assoc 2 lay)) "REVISION-*") (wcmatch (cdr (assoc 2 lay)) "Indice-*")) (command "-SUPCALQUE" "N" (cdr (assoc 2 lay)) "" "oui") ) ) (setq flag nil) ) )) Citer Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
zebzeb Posté(e) le 27 février 2020 Auteur Posté(e) le 27 février 2020 Bonjour Fraid, Merci pour ta réponse super rapide Pour ce qui est de la suppression de calques, c’est justement pour supprimer les bulles de révisions des différents indices que je souhaite le supprimer :blink: . En ce qui concerne Calque 0 courant et déverrouillage c’est nickel :D Citer
zebzeb Posté(e) le 27 février 2020 Auteur Posté(e) le 27 février 2020 Bonjour bonuscad, J’ai essayé (avec précaution merci :P ) et ça fonctionne, j’ai bien la suppression mais à la fin j’ai un nil <_< (ça plante le script) Pourrais-tu (si le temps te la permet) me l’adapter dans le genre (defun c :SuppCalq ( /) … Suppression d’un [u]seul calque[/u] "Nom*" s’il existe ) Pour je puisse l’intégrer dans mon script sous forme (command "SuppCalq" "Nom1*")(command "SuppCalq" "Nom2*") Etc… Citer
Fraid Posté(e) le 27 février 2020 Posté(e) le 27 février 2020 Sans vouloir t'offenser, tu ne cherche pas beaucoup. Mais je vais t'aider quand même :D Pour la fonction de bonuscad il suffit d'utiliser un argument, ici calq. (defun SuppCalq ( calq / flag lay) (setq flag T) (while (setq lay (tblnext "LAYER" flag)) (if (and (zerop (boole 1 16 (cdr (assoc 70 lay)))) (/= (cdr (assoc 2 lay)) "0")) (if (wcmatch (cdr (assoc 2 lay)) calq) (command "-SUPCALQUE" "N" (cdr (assoc 2 lay)) "" "oui") ) ) (setq flag nil) ) );fin SuppCalq que tu utilisera dans ton code principal comme ceci (SuppCalq "Nom1*") L'utilisation de la fonction command est réservée théoriquement au commandes natives d'Autocad et doit être utilisé quand on ne sait pas faire autrement.Une suite de command, sans boucle, ni condition n'est pas de la programmation mais plutôt une Macro.Je t'encourage à visiter le site de Gile et celui de Didier ainsi que l'aide aux développeurs d'Autocad.L'apprentissage de l'Autolisp et ses technologies associées demande beaucoup d'effort, mais cela vaut le coup.Bonne chance Citer https://github.com/Fraiddd
zebzeb Posté(e) le 27 février 2020 Auteur Posté(e) le 27 février 2020 Fraid, non tu ne m’offense pas rassure toi, le lisp ça fait déjà quelques années que je n’y touche plus. Ce n’est pas comme le vélo ! Même sur Autocad maintenant je suis un peu pommé, bah oui avant je n’avais pas le bandeau ???? En tout cas je te remercie grandement pour ton aide et ta patience Bonne fin de journée Citer
Messages recommandés