willy95 Posté(e) le 22 octobre Posté(e) le 22 octobre 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.
Steven Posté(e) le 22 octobre Posté(e) le 22 octobre 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.
willy95 Posté(e) le 23 octobre Auteur Posté(e) le 23 octobre 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. 😞
(gile) Posté(e) le 23 octobre Posté(e) le 23 octobre 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. 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PHILPHIL Posté(e) le 23 octobre Posté(e) le 23 octobre 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 1 FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
willy95 Posté(e) le 23 octobre Auteur Posté(e) le 23 octobre 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
(gile) Posté(e) le 23 octobre Posté(e) le 23 octobre 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant