Aller au contenu

Couleur des Xrefs


kev1

Messages recommandés

Bonjour,

 

J'ai une Xref avec ses propres calques et couleurs et je souhaiterai afficher cette Xref d'une seule couleur sans changer la propriété des calques du fichier référencé.

 

Quelqu'un a - t -il une astuce?

 

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

 

Un petit LISP pour changer mettre toutes les xrefs de la couleur sélectionnée dans la boite de dialogue.

 

En choisissant DuCalque ou DuBloc, on restitue les couleurs d'origine.

 

 

(defun c:XCol (/ acdoc layers color vr)
 (vl-load-com)
 (setq	acdoc  (vla-get-ActiveDocument (vlax-get-acad-object))
layers (vla-get-Layers acdoc)
 )
 (if (setq color (acad_colordlg '255))
   (vlax-for l	layers
     (if (wcmatch (vla-get-Name l) "*|*")
(if (member color '(0 256))
  (progn
    (setq vr (getvar "VISRETAIN"))
    (setvar "VISRETAIN" 0)
    (vlax-for b	(vla-get-Blocks acdoc)
      (if (= (vla-get-IsXref B) :vlax-true)
	(progn
	  (vla-unload B)
	  (vla-reload B)
	)
      )
    )
    (setvar "VISRETAIN" vr)
  )
  (vla-put-color l color)
)
     )
   )
 )
 (vla-regen acdoc acActiveViewport)
 (princ)
) 

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Une version un peu plus élaborée, qui ne traite que les xrefs sélectionnées dans la liste.

 

 

;;; XCOL (gile)
;;; Colorise les xrefs sélectionnées (Entrée pour "toutes")
;;; Choix de la couleur dans la boite dialogue standard
;;; DuBloc ou DuCalque pour restituer les couleurs d'origine

(defun c:XCol (/ acdoc layers blocks ss name lst color layername vr)
 (vl-load-com)
 (setq	acdoc  (vla-get-ActiveDocument (vlax-get-acad-object))
layers (vla-get-Layers acdoc)
blocks (vla-get-Blocks acdoc)
 )
 (or (getenv "XrefColor") (setenv "XrefColor" "8"))
 (vlax-for x blocks
   (if	(= (vla-get-IsXref x) :vlax-true)
     (setq lst (cons (vla-get-Name x) lst))
   )
 )
 (if (setq lst (ListBox "Xref color" "Choisir les xref à coloriser" (mapcar 'cons lst lst) 2))
   (if	(setq color (acad_colordlg (atoi (getenv "XrefColor"))))
     (progn
(vlax-for l layers
  (if
    (and
      (setq layername (vla-get-Name l))
      (setq pos (vl-string-position (ascii "|") layername))
      (member (substr layername 1 pos) lst)
    )
     (if (member color '(0 256))
       (progn
	 (setq vr (getvar "VISRETAIN"))
	 (setvar "VISRETAIN" 0)
	 (vlax-for b (vla-get-Blocks acdoc)
	   (if (= (vla-get-IsXref B) :vlax-true)
	     (progn
	       (vla-unload B)
	       (vla-reload B)
	     )
	   )
	 )
	 (setvar "VISRETAIN" vr)
       )
       (vla-put-color l color)
     )
  )
)
(setenv "XrefColor" (itoa color))
(vla-regen acdoc acActiveViewport)
     )
   )
 )
 (princ)
)

;; ListBox (gile)
;; Boite de dialogue permettant un ou plusieurs choix dans une liste
;;
;; Arguments
;; title : le titre de la boite de dialogue (chaîne)
;; msg ; message (chaîne), "" ou nil pour aucun
;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...)
;; flag : 0 = liste déroulante
;;        1 = liste choix unique
;;        2 = liste choix multipes
;;
;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2)
;;
;; Exemple d'utilisation
;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1)

(defun ListBox (title msg keylab flag / tmp file dcl_id choice)
 (setq	tmp  (vl-filename-mktemp "tmp.dcl")
file (open tmp "w")
 )
 (write-line
   (strcat "ListBox:dialog{label=\"" title "\";")
   file
 )
 (if (and msg (/= msg ""))
   (write-line (strcat ":text{label=\"" msg "\";}") file)
 )
 (write-line
   (cond
     ((= 0 flag) "spacer;:popup_list{key=\"lst\";")
     ((= 1 flag) "spacer;:list_box{key=\"lst\";")
     (T "spacer;:list_box{key=\"lst\";multiple_select=true;")
   )
   file
 )
 (write-line "}spacer;ok_cancel;}" file)
 (close file)
 (setq dcl_id (load_dialog tmp))
 (if (not (new_dialog "ListBox" dcl_id))
   (exit)
 )
 (start_list "lst")
 (mapcar 'add_list (mapcar 'cdr keylab))
 (end_list)
 (action_tile
   "accept"
   "(or (= (get_tile \"lst\") \"\")
   (if (= 2 flag) (progn
   (foreach n (str2lst (get_tile \"lst\") \" \")
   (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice)))
   (setq choice (reverse choice)))
   (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab)))))
   (done_dialog)"
 )
 (start_dialog)
 (unload_dialog dcl_id)
 (vl-file-delete tmp)
 choice
)

;; str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur
;;
;; Exemples
;; (str2lst "a b c" " ") -> ("a" "b" "c")
;; (str2lst "1,2,3" ",") -> ("1" "2" "3")
;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3)

(defun str2lst (str sep / pos)
 (if (setq pos (vl-string-search sep str))
   (cons (substr str 1 pos)
  (str2lst (substr str (+ (strlen sep) pos 1)) sep)
   )
   (list str)
 )
)

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

 

Bienvenu sur CADXP

 

Une seule réponse et simple à mettre en oeuvre LES STYLES DE TRACE ( STB ) et tout ça sans toucher les propriétés des calques ! Ils gardent les couleurs, types de ligne, épaisseurs, d'origine du plan...

 

[surligneur] Mais quand allez-vous enfin comprendre que les styles de tracé ont un énorme potentiel et simplifient considérablement ce genre de gestion.[/surligneur]

 

Quelque soit le dessin qui utilise une XREF en un CLIC mes XREFS passent en GRIS !

 

Si vous voulez une formation sur la sensibilisation et l'utilisation des STYLES DE TRACE je suis votre serviteur ! ;)

 

Christian

 

 

[Edité le 27/3/2009 par rebcao]

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

les xrefs passent bien dans le style de tracé choisi, mais uniquement à l'impression !

je n'arrive pas à avoir des couleur choisi dans mon espace objet ???

 

 

exemple :

 

un fichier AA que j'utilise comme xref possède des objet de différentes couleurs sur différents calques.

 

dans un dessin BB je possède plusieurs calques avec des objet de différentes couleurs et j'insère AA en temps que Xref.

 

j'applique à tout les calques de la Xref un style de tracé "grayscale" (qui donnent en fonction de la couleur une teinte de gris plus ou moins sombre)

 

ainsi lors de l'impression, tout les calques appartenant à ma xref sont grisés avec des variations de gris permettant encore d'en distinguer les couches et permettant également de la dissocier du reste du dessin.

 

Mais dans mon espace objet, les objets de ma xref apparaissent dans leur couleurs d'origine. Et la distinction entre les objet de ma xref AA et ceux que j'ajoute sur BB est de fait impossible.

 

comment procéder ?

poser une question c'est prendre le risque de paraitre bete 5 minutes. ne pas en poser c'est prendre le risque de le rester toute sa vie.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

 

Il faut travailler sur une présentation où tu actives l'option AFFICHER STYLE DE TRACE dans le gestionnaire d'impression.

 

En fait c'est l'option qui active l'aperçu avant impression en permanence à l'écran

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

pffffffffffffff... :casstet:

 

j'ai beau essayer , c'est vraiment galère...

A chaque ouverture de fichier je suis obligé de lancer la commande convertpstyles

et dans mon gestionnaire de calques, pas moyen de modifier mes styles de tracé (la colonne est grisé).

aprés une heure de bidouille j'arrive à les modifier mais je ne sais pas vraiment ce que j'ai fait pour ça !

et à la nouvelle ouverture d'un fichier rebelotte...:mad:

 

deux jours à chercher un truc simple = deux jours de prises de tête :mad:

 

je voudrait juste appliquer DES teintes grisées à mes xref DWG comme ont peux le faire en appliquant la fonction "monochrome" sur des xrefs de type PDF ou DWF.

 

Et je ne veux pas convertir mes DWG en DWF ou PDF afin de conserver les propriétés avantageuses des DWG et pas en UNE SEULE couleur car ça je sait déjà faire !

:casstet:

poser une question c'est prendre le risque de paraitre bete 5 minutes. ne pas en poser c'est prendre le risque de le rester toute sa vie.

Lien vers le commentaire
Partager sur d’autres sites

Je pense aussi que Christian à raison et que l'apprentissage des STB peut m’être salutaire.

 

pour les fichiers je n'ai pas un souci particuliers sur un fichier. c'est le fonctionnement d'autocad de façon générale.

-les archis envoie des fonds de plan avec plein de couches aux propriétés (couleurs notament) différentes

-j'utilises ces plans comme Xref pour travailler dessus mais les couleurs des plans archis "parasitent" mon travail.

- aussi traditionnellement, je colore la Xrefs d'une seule couleur (la 8 en général).

 

Or j'ai remarqué que l'introduction d'un PDF ou d'un DWG avait comme option parametrable, l'option "monochrome".

Cette option permet de "griser" le PDF (ou DWF) avec des variations de gris permettant de toujours distinguer les différentes couleurs d'origines

 

(Je précise que je travail sur la version 2010 mais que je n'ai pas voulu ouvrir un nouveau post alors que le sujet était déja lancé ici et la : http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=27037#pid135220 )

 

Seulement comme je l'ai dit précédemment, j'ai des soucis de paramétrage d'autocad pour utiliser les STB !

poser une question c'est prendre le risque de paraitre bete 5 minutes. ne pas en poser c'est prendre le risque de le rester toute sa vie.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Tu ne peux pas simplement changer la couleur des calques des xrefs ?

Edit: oups, j'avais loupé un morceau:

avec des variations de gris permettant de toujours distinguer les différentes couleurs d'origines

 

Parce que c'est clair que les styles de tracé nommés (STB) c'est bien, mais ils ne s'appliquent que dans les présentations et au tracé.

Si tu veux absolument que tes xrefs soient grisées dans l'onglet Objet, ça n'est pas possible avec les STB.

 

[Edité le 27/1/2011 par bryce]

Lien vers le commentaire
Partager sur d’autres sites

Si l'estompage des xrefs (XDWGFADECTL) te suffit dans l'onglet Objet, alors tu peux utiliser les STB pour griser tes xrefs dans les présentations et au tracé.

 

A chaque ouverture de fichier je suis obligé de lancer la commande convertpstyles

et dans mon gestionnaire de calques, pas moyen de modifier mes styles de tracé (la colonne est grisé).

aprés une heure de bidouille j'arrive à les modifier mais je ne sais pas vraiment ce que j'ai fait pour ça !

 

Quand tu as un fichier existant qui utilise les CTB, voici comment le convertir pour utiliser les STB :

 

1- il faut d'abord utiliser la commande CONVERTCB, qui va te demander de choisir un CTB (sélectionner AutoCAD.ctb par ex.), puis d'enregistrer un STB (nommer le fichier par ex. "conversion.stb").

Cette étape n'est nécessaire qu'une fois, la table "conversion.stb" pourra être réutilisée lors des conversions suivantes.

 

2- lancer la commande CONVERPSTYLES, qui va demander de sélectionner un STB -> choisir le fichier "conversion.stb" créé à l'étape 1.

 

3- ça y est, le fichier utilise maintenant les STB !

Il reste à affecter une table STB à chaque présentation (dans le gestionnaire de mises en page), et à affecter des styles de tracé aux calques.

 

 

Il existe par défaut une table Autodesk-Color.stb, dans laquelle des styles 10% Screen, 20% Screen, etc. permettent d'estomper le dessin en jouant sur la valeur de Projection.

Pour avoir un affichage en monochrome, on peut partir de cette table, et la modifier en activant le niveau de gris pour les différents styles.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

 

A chaque ouverture de fichier je suis obligé de lancer la commande convertpstyles

 

 

!!! Pas logique et il n'y a pas de raison !!!

 

Si tu pouvais envoyer ton dessin à mon adresse en pied de page ?

 

Merci

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Si ce sont des fichiers existants en ctb, ça me semble normal de devoir passer par convertpstyles pour pouvoir utiliser les stb...

Il n'y a que pour des nouveaux dessins que ça n'est pas nécessaire, puisque dans ce cas il suffit d'utiliser un gabarit ad hoc.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

bon... j'ai mûrement réfléchi au problème.

 

Jusqu’ici voici comment je procède à la réception d'un plan me servant de Xref,

 

-je fait apparaître tout les plans gelés.

-je les déverrouille tous.

-je sélectionne tout les calques et je les bascule en couleur 8

-je sélectionne l'ensemble du dessin pour mettre tout les objets en "couleur du calques"

-je lance la commande "edit_bloc" que j'ai découvert sur ce site et je bascule tout les blocs sur le calque 0 et applique "couleur du bloc"

 

j'enregistre le plan obtenu sous le nom"Xref-nom-du-plan.dwg"

 

le soucis (vous l'avez compris)

c'est qu'a l’utilisation, avoir plusieurs couche de même couleur en contrarie parfois la lecture (valeurs topographiques illisibles , hachures de même type qui étaient au départ de couleurs différentes devenues indissociables...)

 

je pense que ce que je cherche c'est un lisp.

 

Vous connaissez tous l'impression "grayscale.ctb"

c'est tout simplement un style de tracé ou toutes les couleurs ont l'option "niveau de gris" activée.

 

en fait ce que je voudrait faire de façon automatisée, c'est, après avoir mis tout les objets en "couleur du calque" modifier les couleurs de chaque calques pour obtenir un plan en "nuances de gris" comme ce que j'obtiendrais en imprimant ce même plan en "grayscale"

 

filtrer tout les calque rouges en les passer en couleur 251

tout les calques jaunes en couleurs 254

et ainsi de suite...

 

le problème c'est qu'il y a 250 couleurs indexés et que si certains calques sont en couleurs vraies le nombre de couleurs passe à 129x129x129 !

 

autant de couleur que j'aimerais basculer vers 8 couleurs grises différentes

(8;9;250;251;252;253;254;255)

 

 

 

Le "stb" est sans doute une excellente solution que je ne remet pas en cause mais je travail avec d'autres dessinateurs en bureau et je n'ai pas l'expérience suffisante pour être écouté et suivi dans un tel changement or, avoir tous la même méthode de travail est indispensable. Je dois donc conserver les ctb !

 

Et si ce lisp n’existe pas je ne vois pas comment faire alors évoluer ma méthode de travail !

 

poser une question c'est prendre le risque de paraitre bete 5 minutes. ne pas en poser c'est prendre le risque de le rester toute sa vie.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

Le plus simple aurait pourtant été (à mon sens du moins), sans mettre le feu dans le bureau, la solution de Rebcao ,....

 

Il faut travailler sur une présentation où tu actives l'option AFFICHER STYLE DE TRACE dans le gestionnaire d'impression.

 

Depuis la V2008, tu peux également utilisez le double affichage des calques (Dans l'espace objet du papier), en présentation et et en objet de manière complétement indépendante (vrai aussi pour les autres caractéristiques du calque), peut-être une piste à creuser,...

Civil 3D 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

 

Je te propose de m'envoyer un dessin d'exemple à l'adresse en pied de page...

 

Du moment que je réceptionne ton fichier je te garantit un résultat en quelques minutes, le tout avec une version LT !!

 

Chiche !? Si je reçois le fichier dans la foulée .... c'est moins sur si tu n'as plus accès à tes fichiers...

 

Christian

 

 

[Edité le 8/2/2011 par rebcao]

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

en fait ce que je voudrait faire de façon automatisée, c'est, après avoir mis tout les objets en "couleur du calque" modifier les couleurs de chaque calques pour obtenir un plan en "nuances de gris" comme ce que j'obtiendrais en imprimant ce même plan en "grayscale"

 

filtrer tout les calque rouges en les passer en couleur 251

tout les calques jaunes en couleurs 254

et ainsi de suite...

 

le problème c'est qu'il y a 250 couleurs indexés et que si certains calques sont en couleurs vraies le nombre de couleurs passe à 129x129x129 !

 

autant de couleur que j'aimerais basculer vers 8 couleurs grises différentes

(8;9;250;251;252;253;254;255)

 

 

 

Le "stb" est sans doute une excellente solution que je ne remet pas en cause mais je travail avec d'autres dessinateurs en bureau et je n'ai pas l'expérience suffisante pour être écouté et suivi dans un tel changement or, avoir tous la même méthode de travail est indispensable. Je dois donc conserver les ctb !

 

Et si ce lisp n’existe pas je ne vois pas comment faire alors évoluer ma méthode de travail !

 

Il ne faut pas utiliser la couleur 255, c'est du blanc et c'est une couleur qui n'est pas du tout imprimée (à moins que tu utilises une table de styles de tracé qui change ça). ;)

 

Pour mettre tous les objets du dessin en DuCalque (y compris dans les blocs), je te suggère d'utiliser la commande DEFDUCALQUE.

 

En ce qui concerne tes calques, j'ai bidouillé un petit lisp (en me basant sur 2 fonctions de Lee Mac) qui va peut-être t'aider :

il permet de modifier automatiquement la couleur de tous les calques en une nuance de gris.

 

;; ACI -> RGB - Lee Mac 2011
;; Args: c - ACI (AutoCAD Colour Index) Colour
(defun LM:ACI->RGB ( c / cObj rgb ) (vl-load-com)
 (if
   (and (<= 1 c 255)
     (setq cObj
       (vla-getInterfaceObject (vlax-get-acad-object)
         (strcat "AutoCAD.AcCmColor." (substr (getvar 'ACADVER) 1 2))
       )
     )
     (not
       (vl-catch-all-error-p
         (vl-catch-all-apply 'vla-put-ColorIndex (list cObj c))
       )
     )
   )
   (setq rgb (list (vla-get-Red cObj) (vla-get-Green cObj) (vla-get-Blue cObj)))
 )
 (if cObj (vlax-release-object cObj))
 rgb
)


;; RGB -> ACI - Lee Mac 2011
;; Args: r,g,b - Red,Green,Blue values
(defun LM:RGB->ACI ( r g b / cObj aci ) (vl-load-com)
 (if
   (and
     (setq cObj
       (vla-getInterfaceObject (vlax-get-acad-object)
         (strcat "AutoCAD.AcCmColor." (substr (getvar 'ACADVER) 1 2))
       )
     )
     (not
       (vl-catch-all-error-p
         (vl-catch-all-apply 'vla-SetRGB (list cObj r g b))
       )
     )
   )
   (setq aci (vla-get-ColorIndex cObj))
 )
 (if cObj (vlax-release-object cObj))
 aci
)


(defun c:GRAY (/ doc lay color shade)
(vl-load-com)

(setq doc (vla-get-activedocument (vlax-get-acad-object)))

(vla-StartUndoMark doc)

(vlax-for lay (vla-get-layers doc)

   (setq color (LM:ACI->RGB (vla-get-color lay)))
(setq shade (fix (/ (+ (car color) (cadr color) (caddr color)) 3)))
(setq shade (+ 34 shade)) ;; augmenter pour éclaircir
(if (>= shade 255)
	(setq shade 254)
)
(setq shade (LM:RGB->ACI shade shade shade))
(if (or (= shade 7) (= shade 250))
	(setq shade 251)
)
(vla-put-color lay shade)

 )
 (vla-regen doc acActiveViewport)
 (vla-EndUndoMark doc)
)

 

Ça a l'air de marcher pas trop mal, mais je décline toute responsabilité si jamais ça déclenche un cataclysme planétaire... :P

 

 

 

 

[Edité le 8/2/2011 par bryce]

Lien vers le commentaire
Partager sur d’autres sites

Génial ce lisp ! :D

 

(j'ai tout de même mis 5 minutes avant de comprendre que la commande à taper c'était "gray") :casstet:

 

C'est exactement ce que je cherchais. Je reviendrais sur Les STB car à n'en point douter, c'est un mode de fonctionnement qui semble très efficace !

 

Merci à tous pour cette précieuse aide et pour le temps que vous m'avez accordé ! ;)

poser une question c'est prendre le risque de paraitre bete 5 minutes. ne pas en poser c'est prendre le risque de le rester toute sa vie.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Plus convivial, c'est sûr, et plus abouti aussi.

 

Mais il applique une seule couleur à tous les calques de la xref, et davidcad01 voulait obtenir des niveaux de gris. ;)

 

Il faudrait fusionner les 2 en fait, avec éventuellement la possibilité de choisir entre une conversion en niveaux de gris ou une colorisation uniforme.

Lien vers le commentaire
Partager sur d’autres sites

Voici XGRAY, issu d'un croisement entre XCOL de (gile), et GRAY.

 

 

Il permet de coloriser les XRefs d'un dessin, en choisissant parmi 3 options:

 

- Monochrome : colorise tous les calques des XRefs sélectionnées avec une couleur uniforme (comme XCOL)

 

- niveaux de Gris : affecte un gris aux calques des XRefs sélectionnées, en fonction de leur couleur d'origine

 

- Restaurer : restaure les couleurs d'origine des calques des XRefs sélectionnées.

 

 

;; ACI -> RGB - Lee Mac 2011
;; Args: c - ACI (AutoCAD Colour Index) Colour
(defun LM:ACI->RGB (c / cObj rgb)
 (vl-load-com)
 (if
   (and (<= 1 c 255)
 (setq cObj
	(vla-getInterfaceObject
	  (vlax-get-acad-object)
	  (strcat "AutoCAD.AcCmColor." (substr (getvar 'ACADVER) 1 2))
	)
 )
 (not
   (vl-catch-all-error-p
     (vl-catch-all-apply 'vla-put-ColorIndex (list cObj c))
   )
 )
   )
    (setq rgb (list (vla-get-Red cObj) (vla-get-Green cObj) (vla-get-Blue cObj)))
 )
 (if cObj
   (vlax-release-object cObj)
 )
 rgb
)
;; RGB -> ACI - Lee Mac 2011
;; Args: r,g,b - Red,Green,Blue values
(defun LM:RGB->ACI (r g b / cObj aci)
 (vl-load-com)
 (if
   (and
     (setq cObj
     (vla-getInterfaceObject
       (vlax-get-acad-object)
       (strcat "AutoCAD.AcCmColor." (substr (getvar 'ACADVER) 1 2))
     )
     )
     (not
(vl-catch-all-error-p
  (vl-catch-all-apply 'vla-SetRGB (list cObj r g B))
)
     )
   )
    (setq aci (vla-get-ColorIndex cObj))
 )
 (if cObj
   (vlax-release-object cObj)
 )
 aci
)
;; str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur
;;
;; Exemples
;; (str2lst "a b c" " ") -> ("a" "b" "c")
;; (str2lst "1,2,3" ",") -> ("1" "2" "3")
;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3)
(defun str2lst (str sep / pos)
 (if (setq pos (vl-string-search sep str))
   (cons (substr str 1 pos)
  (str2lst (substr str (+ (strlen sep) pos 1)) sep)
   )
   (list str)
 )
)
;; ListBox (gile)
;; Boite de dialogue permettant un ou plusieurs choix dans une liste
;;
;; Arguments
;; title : le titre de la boite de dialogue (chaîne)
;; msg ; message (chaîne), "" ou nil pour aucun
;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...)
;; flag : 0 = liste déroulante
;;        1 = liste choix unique
;;        2 = liste choix multipes
;;
;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2)
;;
;; Exemple d'utilisation
;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1)
(defun ListBox (title msg keylab flag / tmp file dcl_id choice)
 (setq	tmp  (vl-filename-mktemp "tmp.dcl")
file (open tmp "w")
 )
 (write-line
   (strcat "ListBox:dialog{label=\"" title "\";")
   file
 )
 (if (and msg (/= msg ""))
   (write-line (strcat ":text{label=\"" msg "\";}") file)
 )
 (write-line
   (cond
     ((= 0 flag) "spacer;:popup_list{key=\"lst\";")
     ((= 1 flag) "spacer;:list_box{key=\"lst\";")
     (T "spacer;:list_box{key=\"lst\";multiple_select=true;")
   )
   file
 )
 (write-line "}spacer;ok_cancel;}" file)
 (close file)
 (setq dcl_id (load_dialog tmp))
 (if (not (new_dialog "ListBox" dcl_id))
   (exit)
 )
 (start_list "lst")
 (mapcar 'add_list (mapcar 'cdr keylab))
 (end_list)
 (action_tile
   "accept"
   "(or (= (get_tile \"lst\") \"\")
   (if (= 2 flag) (progn
   (foreach n (str2lst (get_tile \"lst\") \" \")
   (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice)))
   (setq choice (reverse choice)))
   (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab)))))
   (done_dialog)"
 )
 (start_dialog)
 (unload_dialog dcl_id)
 (vl-file-delete tmp)
 choice
)
;;; XGRAY - Bryce, basé sur XCOL (gile)
;;; Colorise les XRefs sélectionnées
;;; Choix d'une couleur dans la boîte de dialogue standard (option "Monochrome")
;;; ou conversion en niveaux de gris automatique (option "niveaux de Gris")
;;; option "Restaurer" pour restituer les couleurs d'origine

(defun c:XGray (/ acdoc layers blocks ss name lst action color shade layername vr)
 (vl-load-com)
 (setq	acdoc  (vla-get-ActiveDocument (vlax-get-acad-object))
layers (vla-get-Layers acdoc)
blocks (vla-get-Blocks acdoc)
 )

 (vla-StartUndoMark acdoc)

 (initget "Monochrome Gris Restaurer")
 (setq action (getkword "\nChoix de l'option [Monochrome/niveaux de Gris/Restaurer] <Gris>:"))
 (if (not action)
   (setq action "Gris")
 )

 (or (getenv "XrefColor") (setenv "XrefColor" "8"))

 (if (eq action "Monochrome")
   (progn
     (setq color (acad_colordlg (atoi (getenv "XrefColor"))))
     (setenv "XrefColor" (itoa color))
   )
 )
 (vlax-for x blocks
   (if	(= (vla-get-IsXref x) :vlax-true)
     (setq lst (cons (vla-get-Name x) lst))
   )
 )
 (if (setq lst (ListBox "Xref color" "Choisir les xref à coloriser" (mapcar 'cons lst lst) 2))
   (progn
     (vlax-for	l layers
(if
  (and
    (setq layername (vla-get-Name l))
    (setq pos (vl-string-position (ascii "|") layername))
    (member (substr layername 1 pos) lst)
  )
   (if (eq action "Restaurer")
     (progn
       (setq vr (getvar "VISRETAIN"))
       (setvar "VISRETAIN" 0)
       (vlax-for b (vla-get-Blocks acdoc)
	 (if (= (vla-get-IsXref B) :vlax-true)
	   (progn
	     (vla-unload B)
	     (vla-reload B)
	   )
	 )
       )
       (setvar "VISRETAIN" vr)
     )

     (if (eq action "Monochrome")

       (vla-put-color l color)

       (if (eq action "Gris")
	 (progn
	   (setq color (LM:ACI->RGB (vla-get-color l)))
	   (setq shade (fix (/ (+ (car color) (cadr color) (caddr color)) 3)))
	   (setq shade (+ 34 shade))
	   ;; augmenter pour éclaircir
	   (if (>= shade 255)
	     (setq shade 254)
	   )
	   (setq shade (LM:RGB->ACI shade shade shade))
	   (if (or (= shade 7) (= shade 250))
	     (setq shade 251)
	   )
	   (vla-put-color l shade)
	 )
       )
     )
   )
)
     )
     (vla-regen acdoc acActiveViewport)
   )
 )
 (vla-EndUndoMark acdoc)

 (princ)
)

 

 

http://creao.fr/uploads/lisp/xgray.lsp

 

 

(gile) si tu repasses par ce sujet, pour XCOL tu indiques qu'on peut faire Entrée pour coloriser toutes les XRefs du dessin, mais ça ne fonctionne pas.

 

Est-ce que la fonction ListBox est censée renvoyer la liste de toutes les XRefs si rien n'est sélectionné par l'utilisateur ? :casstet:

Modifié par (gile)
reformatage du code
Lien vers le commentaire
Partager sur d’autres sites

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é