• Ce forum est la traduction générée par la machine de www.cad3d.it/forum1 - la communauté italienne du design. Plusieurs termes ne sont pas traduits correctement.

Cambio colori couches, de RGB à ACI (ma Couleurs de base!)

  • Auteur du sujet Auteur du sujet MauroTC
  • Date de début Date de début

MauroTC

Guest
Au revoir à tous,
il y a une grande quantité de dessins dwg obtenus à partir de l'exportation avec certains sw 3d qui génère des couches qui ont associé des couleurs rgb un peu trop variées, tandis que le client final exige que les couleurs attribuées ne sont que les 8 principales (de 1 à 8).
pour m'expliquer mieux, dans l'image attachée à gauche est le résultat des couches de table que vous avez après l'exportation que le client ne veut pas, comme vous le souhaitez, cependant selon ces combinaisons:RGB.png255,0 = 1 (rouge)
255 255,255,0 = 2 (jaune)
0,255,0 = 3 (vert)
0,255 255 = 4 (bleu clair)
128 255 255 = 4 (bleu clair)
0,0.255 = 5 (bleu foncé)
255,0 255 = 6 (magenta)
255 255 255 255 255 = 7 (blanc)
128 128 128 128 = 8 (gris)

Je suppose qu'avec un lisp la chose devrait être assez simple et autour de l'Internet il y a différentes solutions à partir de la classe rgb2aci, mais il ne fait pas exactement ce qu'il devrait, parce qu'il raisonne probablement avec les valeurs numériques de la carte et dans certains cas de combinaisons un petit balorde se laisse tromper (exemple 128,255,255).

si quelqu'un pouvait fixer un lis même pour quelques combinaisons, je serais très reconnaissant, alors je le terminerais moi-même en reproduisant les lignes, avec les quelques souvenirs restant de lis...

Pour le moment, je rencontre une macro-commande que j'ai fait (=ragiona= d'une manière différente, en attribuant aux différentes couleurs de base les couches spécifiques) , qui a bien qui tourne aussi sous autocad lt, mais les utilisateurs trouvent ostico pour charger un bouton personnalisé, alors qu'ils préfèrent charger et tourner un lisp.
(ma macro: ^c^c -couche c 2 am_1 c 1 am_0 c 3 am_3 c 3 am_3n c 4 am_4 c 4 am_5; etc...)

Merci d'avance !
 
Dernière édition:
voir si ça marche
Code:
(défun c:pippo)
(vlax pour x (vla-get-layers (vla-get-activedocument))
(vla-put-color x (vla-get-color x)))
)
)
 
voir si ça marche
Code:
(défun c:pippo)
(vlax pour x (vla-get-layers (vla-get-activedocument))
(vla-put-color x (vla-get-color x)))
)
)
? Merci pour l'intérêt, je vais essayer demain. Je me demande comment ça marche, avec si peu de lignes. Je ne crois pas traiter les couleurs requises et je n'ai pas compris si quelque chose est là et quoi, pour éditer dans le code... ?
 
Essayez, alors je vous expliquerai.
Essaie.
nous disons que cela fait ce que le rgb2aci classique et historique fait, mais c'est un script beaucoup plus long!
mais il a la même "limite", c'est-à-dire qu'il va à "cart" sur cette rgb 128,255,255, qui au lieu de la transformer en 4 (cian) fait qu'il devient 131 (je ne sais pas pourquoi) ... et peut-être qu'il peut aussi le faire sur d'autres nuances. . . .128.PNGEn fait, comme je l'ai dit, quelques exemples suffiraient, alors le script devrait être en mesure de le compléter, je réplique les lignes de code. .

Je t'entraîne aussi un test...

Merci encore pour la disponibilité!
 

Pièces jointes

la fonction vla-get-color retourne la couleur aci, c'est-à-dire, dans le cas de truecolor, l'aci similaire correspondant.
par exemple la couleur 255,255,0 retourne 2 (jaune), la couleur 128,255,255 retourne 131).
alors attribue à chaque couche sa propre couleur, mais indiqué comme étant aci.
dans la mise à jour ci-dessous, puisque vous devez rester dans les 8 premières couleurs, dans le cas de 131 est transformé en 4 (j'avais échappé).
Tout fonctionne alors avec les couleurs que vous avez indiquées dans votre image, peut-il y avoir d'autres "flappings"?
Code:
(défun c:xx ()
(vlax pour x (vla-get-layers (vla-get-activedocument))
(vla-put-color x (si (= 131 (vla-get-color x)))
)
)
si vous voulez le compléter à volonté. . . .
Code:
(pourfun c:yy ()
(vlax pour x (vla-get-layers (vla-get-activedocument))
(si (= (vla-get-name x) "am_0") (vla-put-color x 1))
(si (= (vla-get-name x) "am_1") (vla-put-color x 2))
(si (= (vla-get-name x) "am_3") (vla-put-color x 3))
(si (= (vla-get-name x) "am_4") (vla-put-color x 4))
)
)
 
la fonction vla-get-color retourne la couleur aci, c'est-à-dire, dans le cas de truecolor, l'aci similaire correspondant.
par exemple la couleur 255,255,0 retourne 2 (jaune), la couleur 128,255,255 retourne 131).
alors attribue à chaque couche sa propre couleur, mais indiqué comme étant aci.
dans la mise à jour ci-dessous, puisque vous devez rester dans les 8 premières couleurs, dans le cas de 131 est transformé en 4 (j'avais échappé).
Tout fonctionne alors avec les couleurs que vous avez indiquées dans votre image, peut-il y avoir d'autres "flappings"?
Code:
(défun c:xx ()
(vlax pour x (vla-get-layers (vla-get-activedocument))
(vla-put-color x (si (= 131 (vla-get-color x)))
)
)
si vous voulez le compléter à volonté. . . .
Code:
(pourfun c:yy ()
(vlax pour x (vla-get-layers (vla-get-activedocument))
(si (= (vla-get-name x) "am_0") (vla-put-color x 1))
(si (= (vla-get-name x) "am_1") (vla-put-color x 2))
(si (= (vla-get-name x) "am_3") (vla-put-color x 3))
(si (= (vla-get-name x) "am_4") (vla-put-color x 4))
)
)
Merci, deux solutions, testez les deux, les deux parfaits!

être autonomes en cas d'exception ou de nouveauté:
sur le premier je suppose que je devrais ajouter des lignes comme ça?
(défend c:xx)
(vlax pour x (vla-get-layers (vla-get-activedocument))
(vla-put-color x (si (= 131 (vla-get-color x))) 4 (vla-get-color x))(vla-put-color x (si (= 151 (vla-get-color x))))
)

sul secondo, i già implemento qualcosa. . . :

(pourfun c:yy ()
(vlax pour x (vla-get-layers (vla-get-activedocument))
(si (= (vla-get-name x) "am_0") (vla-put-color x 1))
(si (= (vla-get-name x) "am_1") (vla-put-color x 2))
(si (= (vla-get-name x) "am_2") (vla-put-color x 7)
(si (= (vla-get-name x) "am_3") (vla-put-color x 3))
(si (= (vla-get-name x) "am_3n") (vla-put-color x 3))
(si (= (vla-get-name x) "am_4") (vla-put-color x 4))
(si (= (vla-get-name x) "am_bor") (vla-put-color x 3))
)
)

ineccepibile ! (y)
 
pour l'exhaustivité de ceux qui pourraient être intéressés, j'ai également mis la macro-commande assignée à un bouton, qui permet d'obtenir le même résultat (managéable dans ce cas étant peu de couches...), avec une brève explication:

C 1 am_0 c 2 am_1 c 7 am_2 c 3 am_3 c 4 am_4 c 4 am_5 c 2 am_6 c 3 am_7 c 7 am_8 c 1 am_10 c 6 am_11 c 9 am_12 c 3 am_bor c 5 am_views

-layer lance la commande calque
c appels couleur option
1 sélectionnez la couleur à attribuer
am_0 est le calque auquel vous voulez attribuer cette couleur

puis encore c pour l'option couleur
2 la couleur à attribuer
am_1 le calque auquel attribuer

Et ainsi de suite...
 
pour remplacer la première lisp que vous pouvez utiliser, en ajoutant une ligne pour chaque couleur particulière que vous voulez traiter
Code:
(défun c:zz ()
(vlax pour x (vla-get-layers (vla-get-activedocument))
(couleur vla-put x
(cond)
(= 131 (vla-get-color x) 4)
(= 151 (vla-get-color x) 6)
(t (vla-get-color x) ;--> si la couleur n'est pas parmi ceux indiqués attribue sa couleur aci
)
)
)
)
pour la seconde vous pouvez également utiliser cette version avec cond, la particularité est que vous pouvez attribuer la même couleur aux couches qui ne vous intéressent pas
Code:
(pourfun c:hh)
(vlax pour x (vla-get-layers (vla-get-activedocument))
(couleur vla-put x
(cond)
(= (vla-get-name x) "am_0") 1)
(= (vla-get-name x) "am_1") 2)
(= (vla-get-name x) "am_3") 3)
(= (vla-get-name x) "am_4") 4)
(t 7) ; --> se il layer nonè tra quelli indicati assegna il colore 7
)
)
)
)
 
Code:
(défun fnridcolor (r g b / rosso verde blu indice lcolor)
(setq lcolor (liste 8 1 3 2 5 6 4 7))
(si (= r 128) (setq r 127))
(si (= g 128) (ensemble g 127))
(si (= b 128) (setq b 127))
(setq rosso (lsh r -7))
(setq verde (lsh g -7))
(setq blu (lsh b -7))
(indice de setq (+ rosso (* verde 2) (* blu 4))
(Nième indice de couleur)
)
cette fonction transforme les valeurs rgb 0÷255 en 0÷1 par la fonction lsh, pratiquement c'est comme réduire les couleurs d'une photo de 16 millions à 8.
la condition (=R 128) est d'éviter une erreur interprétative, considérez 128 1 et non 0, donc les valeurs rgb 128 255 255 sont devenues 7 et non 4, comme dans votre cas particulier.

Amusez-vous bien
 
Lsh est une de ces fonctions que je n'ai jamais utilisées et je ne pouvais pas imaginer l'utiliser, maintenant au moins je sais qu'il n'a pas été inventé en vain... :
 
le déplacement des nombres que je l'ai appris en étudiant "machine linguaggio per msx", livre trouvé par hasard dans une bibliothèque raguse pendant que j'étais libre, j'ai fait le comiso militaire, année 1989.
Je pense que c'est la première fois que j'utilise la fonction, et comme tout le monde l'a dit, "Rhobes cinglés."
 
Bonjour à tous, je prends ce poste parce que je suis dans la même situation mais je suis nouveau avec le lisp et j'ai de la difficulté à les utiliser correctement.

utiliser autocad 2024, mais le code indiqué par rpor66, à part avoir "index" dans la dernière ligne au lieu de "index" me renvoie la commande inconnue. Comment résoudre le problème ? dans le cas où j'aurais besoin d'un processus par lots faisant cela sur 400 dessins, c'est pourquoi j'ai téléchargé le lee mac wscript qui vous permet de travailler sur un dossier de fichiers, à moins que vous ne sachiez comment l'utiliser
 

Statistiques du forum

Sujets
58 521
Messages
499 056
Membres
104 110
Dernier membre
ChristianR

Membres en ligne

Aucun membre en ligne actuellement.
Retour
Haut