ScoAD Posté(e) le 7 avril 2021 Partager Posté(e) le 7 avril 2021 Bonjour à tous, voila notre problème: nous avons une bibliothèque Autocad dans laquelle nous voulons changer la couleurs de certains attributs (DIAMETRE, REP) en "DU BLOC" dans nos .DWG. Cette bibliothèque comporte plus de 300 .DWG, par conséquent nous cherchons une méthode pour le faire en automatique (peut être avec un script + une commande Autocad a dérouler). Est ce que vous auriez une idée? pouvez vous nous aider? vous remerciant par avance pour votre aide 🙂 Florian LE FLECHER. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
La Lozère Posté(e) le 8 avril 2021 Partager Posté(e) le 8 avril 2021 Bonjour, Pour appliquer un script sur tous tes fichier, tu peux utiliser le programme de @Eric nommé SUPERAUTOSCRIPT. Et pour modifier la couleur, tu peux passer par la commande clavier "changer" Par contre je n'ai pas trouver le truc pour sélectionner en ligne de commande uniquement les attributs. Peut-être que certains auront plus d'idée. Citer www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fraid Posté(e) le 8 avril 2021 Partager Posté(e) le 8 avril 2021 (modifié) Bonjour, Je te propose un lisp qui traite les dwg sans les ouvrir. ;;;attbyblock ;;;Met la couleur des attributs en argument en couleur "DuBloc" ;;;Arg: nom, String Nom du bloc ;;; latt, Liste des atrributs (étiquettes) ;;; acdc; (vla-get-activedocument (vlax-get-acad-object))) ou axdbdoc (defun attbyblock (nom latt acdc / color ret) (setq color (vlax-create-object (strcat "AutoCAD.AcCmColor." (substr (getvar "acadver") 1 2)))) (vla-put-colorIndex color AcByBlock) (vlax-for bl (vla-get-modelspace acdc) (if (and (= (vla-get-ObjectName bl) "AcDbBlockReference")(= (vla-get-EffectiveName bl) nom)) (progn (foreach at (vlax-invoke bl 'GetAttributes) (if (member (vla-get-tagstring at) latt) (vla-put-TrueColor at color) ) ) (setq ret T) ) ) ) ret ) ;Accèder à un dessin fermé (defun getaxdbdoc (filename / axdbdoc release) (setq axdbdoc (vlax-create-object (if (< (setq release (atoi (getvar "ACADVER"))) 16) "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa release)) ) ) ) (if (vl-catch-all-apply 'vla-open (list axdbdoc filename)) (not (vlax-release-object axdbdoc)) axdbdoc ) ) ;Sélection d'un dossier (defun getdir( / shell rep) (setq shell (vlax-create-object "Shell.Application") rep (vlax-invoke shell 'browseforfolder 0 "Sélectionnez le dossier" 512 "") ) (vlax-release-object shell) (strcat (vlax-get-property (vlax-get-property rep 'self) 'path) "\\") ) ;String en liste (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (imp-str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;Principal (defun c:atbybl (/ cpt nbl atts dir ldwg axdoc) (if (setq cpt 0 nbl (getstring "Nom du bloc ?") atts (str2lst (getstring "Etiquettes ? (séparées par ; )")";") dir (getdir) ldwg (vl-directory-files dir "*.dwg" 1) ) (progn (foreach dwg ldwg (setq dwg (strcat dir dwg) axdoc (getaxdbdoc dwg)) (if (attbyblock nbl atts axdoc) (vla-saveas axdoc dwg) ) (vlax-release-object axdoc) (setq cpt (1+ cpt)) ) (princ (strcat "\n " (itoa cpt) " dwg traités")) ) (princ "\n Abandon, aucun dwg dans le dossier.") ) (princ) ) Cela fonctionne sur les blocs en espace objet tu tape atbybl , tu seras invité à saisir le nom du bloc et la liste des étiquettes des attributs puis choisir un dossier (je n'ai pas choisi l'option sous-dossier pas sécurité) pas de retour possible fais un essais sur une copie de dossier avant. Modifié le 8 avril 2021 par Fraid N'enregistre pas le dwg si bloc absent. Citer https://github.com/Fraiddd Lien vers le commentaire Partager sur d’autres sites More sharing options...
ScoAD Posté(e) le 8 avril 2021 Auteur Partager Posté(e) le 8 avril 2021 Bonjour Fraid et La Lozère, merci pour vos propositions, je vais m'en inspirer pour répondre à notre besoin, j'ai également une autre piste, c'est d'appliquer cette ligne de commande "CHPROP (ssget "_X" '((0 . "ATTDEF"))) CO DUBLOC T DUBLOC" avec un script. Pour info, en raison de difficultés à créer mon compte sur ce forum, j’utilise le compte de mon collègue ScoAD Cordialement. Florian LE FLECHER Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
La Lozère Posté(e) le 8 avril 2021 Partager Posté(e) le 8 avril 2021 1 hour ago, ScoAD said: Bonjour Fraid et La Lozère, merci pour vos propositions, je vais m'en inspirer pour répondre à notre besoin, j'ai également une autre piste, c'est d'appliquer cette ligne de commande "CHPROP (ssget "_X" '((0 . "ATTDEF"))) CO DUBLOC T DUBLOC" avec un script. Pour info, en raison de difficultés à créer mon compte sur ce forum, j’utilise le compte de mon collègue ScoAD Cordialement. Florian LE FLECHER Effectivement tu peux utiliser une expression lisp dans un script. Bien vu. Et du coup, tu peux utiliser SuperAutoScript pour l'appliquer à tout les fichiers souhaité. Citer www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés