Aller au contenu

Changer les couleurs des objets dans un dessin


Messages recommandés

Posté(e)

Bonjour à tous, je cherche a changer automatiquement dans un dessin la couleur (Index) d'un objet (couleur forcé différente de la couleur du calque) par une autre couleur (Couleur Réelle).

Par exemple : je lance le lisp et il va chercher directement tous les objets qui ont la couleur forcé "91" et remplace ces même objets par la couleur "225,255,219 avec 93 de Luminance" et il continue avec d'autre couleur comme "31" par "255,224,194 avec 88 de Luminance".

Si quelqu'un peu m'aider, j'ai essayé de bricolé quelquechose en recherchant sur le forum mais rien ne fonctionne, j'aimerai remplacer plein de couleur dans plusieurs de mes fichiers rapidement sans avoir a le faire objet par objet.

Merci par avance pour votre compréhension et pour votre aide.

Posté(e)

Salut @willy95,

Tu peux faire ça nativement, sans Lisp, avec AutoCAD.

Tu lances la sélection rapide, commande SELECTRAP ou _QSELECT, tu choisis le type d'objet, puis par couleur, OK

puis tu modifies la couleur via la fenêtre des propriétés.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

Merci quand Steven pour ta réponse, mais c'est justement pour ne pas avoir à faire ça 30 fois dans chacun de mes 60 fichiers que je cherche une routine pour que le remplacement des couleurs soit fait automatiquement. Il me reste plus qu'a passer 3 jours pour le faire comme ça à la main couleurs par couleur et fichier par fichier. 😞 😭

J'ai beau chercher sur internet ou à modifier des lisp trouvés, rien ne fonctionne. 😞 

Posté(e)

Salut,

Tu peux essayer ça.

Il faut modifier/compléter la liste des couleurs dans le code en respectant le format : (indexACI . "rouge,vert,bleu")

(defun c:willyChangeColor (/ changeColor colors)

  (defun changeColor (aci rgb / ss i)
    (if	(setq ss (ssget "_X" (list (cons 62 aci))))
      (repeat (setq i (sslength ss))
	(setpropertyvalue (ssname ss (setq i (1- i))) "Color" rgb)
      )
    )
  )

  ;; Liste à compléter en respectant le format : (indexACI . "rouge,vert,bleu")
  (setq	colors
	 '(
	   (91 . "255,255,219")
	   (31 . "255,224,194")
	   ;; ...
	  )
  )

  (foreach p colors (changeColor (car p) (cdr p)))

  (princ)
)

 

PS : on ne peut pas forcer la luminance si on spécifie les valeurs de rouge, vert, bleu. Si R,V,B est égal à 255,255,219 la luminance est égale à 93. Si je force la luminance à 90 le R,V,B devient : 255,255,204.

  • Upvote 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

HELLO @(gile)

avec ton lisp, si des fois on devait faire l'inverse pour les couleurs

chercher des couleurs vraies ( RVB) et les remplacer par des couleurs index ACI.

on ne pourrait plus utiliser

(ssget "_X" (list (cons 62 aci)))

car il y a plus de couleurs vraies que les 256 couleurs indexées.

ex  rdv = index ACI : 60,195,123  = 103

                                   60,195,124  = 103    

 

faudrait tout sélectionner et vérifier pour chaque entité si "setpropertyvalue" ... "color" est égal à "60,195,123" par exemple.

Non?

 

Phil

 

  • Upvote 1

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)

Merci Gile pour ce temps passé et cette réponse qui corresponds exactement à mon besoin, j'ai ajouté toutes mes couleurs et ça marche à merveille, je vais gagner du temps et pouvoir passer grace toi plus de temps avec ma famille car sinon j'aurai été bloqué pas mal de temps sur ces modifications. Merci Beaucoup.

Et merci Phiphil pour cette précision qui pourra etre utile également par la suiteL

Posté(e)
Il y a 3 heures, PHILPHIL a dit :

HELLO @(gile)

avec ton lisp, si des fois on devait faire l'inverse pour les couleurs

chercher des couleurs vraies ( RVB) et les remplacer par des couleurs index ACI.

on ne pourrait plus utiliser

(ssget "_X" (list (cons 62 aci)))

car il y a plus de couleurs vraies que les 256 couleurs indexées.

ex  rdv = index ACI : 60,195,123  = 103

                                   60,195,124  = 103    

 

faudrait tout sélectionner et vérifier pour chaque entité si "setpropertyvalue" ... "color" est égal à "60,195,123" par exemple.

Non?

Si tu examines la liste DXF d'une entité en couleur forcée avec une "couleur vraie", tu noteras un groupe 420 dont la valeur est un entier qui représente la "couleur vraie" sous la forma de 3 octets. La valeur de rouge est décalée de 2 octets, la valeur du vert d'un octet et la valeur du bleu n'est pas décalée (voir ce sujet, plus particulièrement cette réponse).

On peut donc faire un filtre de sélection avec le code 420. Pour faciliter les choses, on stockera, dans la listes des couleurs à convertir, le rbg sous forme de liste plutôt que de chaîne.

(defun c:philChangeColor (/ changeColor rgb2TrueColor colors)

  (defun rgb2TrueColor (rgb)
    (logior (lsh (car rgb) 16) (lsh (cadr rgb) 8) (caddr rgb))
  )
  
  (defun changeColor (rgb aci / ss i)
    (if	(setq ss (ssget "_X" (list (cons 420 (rgb2TrueColor rgb)))))
      (repeat (setq i (sslength ss))
	(setpropertyvalue (ssname ss (setq i (1- i))) "Color" aci)
      )
    )
  )

  ;; Liste à compléter en respectant le format : (indexACI . "rouge,vert,bleu")
  (setq	colors
	 '(
	   ((60 195 123) . 103)
	   ((60 195 124) . 103)
	   ;; ...
	  )
  )

  (foreach p colors (changeColor (car p) (cdr p)))

  (princ)
)

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é