Jump to content

changer la couleur d'attributs en "DU BLOC"


Recommended Posts

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.

Link to post
Share on other sites

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.

www.cad-is.fr
Autocad Map 2018 - Covadis/Autopiste V17.0d - Mensura Genius V8
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
Link to post
Share on other sites

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.

Edited by Fraid
N'enregistre pas le dwg si bloc absent.

...plus je sais où je suis, moins je sais où je vais....

Extrait d'une double interview simultanée d'une particule élémentaire.

Link to post
Share on other sites

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 

Link to post
Share on other sites
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é.

www.cad-is.fr
Autocad Map 2018 - Covadis/Autopiste V17.0d - Mensura Genius V8
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
Link to post
Share on other sites
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...