Aller au contenu

changer la couleur d'attributs en "DU BLOC"


ScoAD

Messages recommandés

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.

Lien vers le commentaire
Partager sur d’autres 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 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres 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.

Modifié par Fraid
N'enregistre pas le dwg si bloc absent.
Lien vers le commentaire
Partager sur d’autres 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 

Lien vers le commentaire
Partager sur d’autres 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 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é