Aller au contenu

Forcer la couleur d'un Xref et ses blocs


nen

Messages recommandés

Bonjour le forum :rolleyes: ,

J’ai trouvé ci-dessous ce lisp de Gile qui a pour but de forcer les couleurs des Xref, très pratique quand on importe un plan archi.

Par contre, il ne change pas les blocs qui se trouvent dans l’Xref en effet si on applique une couleur 253 à l’Xref les blocs qui sont forcés eux ne change pas.

Est-ce possible en améliorant se lisp qui est déjà super, de faire cette opération ?

 

Merci d’avance

Meilleures salutations

 

 

(defun c:xref-color-set (/ acdoc xrf col lst)
 (vl-load-com)
 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (if (and (setq xrf (car (entsel "\nSelectionnez la reference externe: ")))
          (setq xrf (vlax-ename->vla-object xrf))
          (= (vla-get-ObjectName xrf) "AcDbBlockReference")
          (setq col (acad_colordlg 8 nil))
     )
   (progn
     (vla-StartUndoMark acdoc)
     (vlax-for l (vla-get-Layers acdoc)
       (and (wcmatch (vla-get-Name l) (strcat (vla-get-Name xrf) "|*"))
         (setq lst (cons (cons (vla-get-Name l) (vla-get-color l)) lst))
         (vla-put-color l col)
       )
     )
     (or (vlax-ldata-get xrf "laycol")
         (vlax-ldata-put xrf "laycol" lst)
     )
     (vla-EndUndoMark acdoc)
   )
 )
 (princ)
)

(defun c:xref-color-restore (/ acdoc xrf lst)
(vl-load-com)
 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (if (and (setq xrf (car (entsel "\nSelectionnez la reference externe: ")))
          (setq xrf (vlax-ename->vla-object xrf))
          (= (vla-get-ObjectName xrf) "AcDbBlockReference")
          (setq lst (vlax-ldata-get xrf "laycol")) 
     )
   (progn
     (vla-StartUndoMark acdoc)
     (vlax-for l (vla-get-Layers acdoc)
       (if (setq pair (assoc (vla-get-Name l) lst))
         (vla-put-color l (cdr pair))
       )
     )
     (vlax-ldata-delete xrf "laycol")
     (vla-EndUndoMark acdoc)
   )
 )
 (princ)
) 

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Si AutoCAD 2016 ou + , as tu essaye avec XREFOVERRIDE = 1 ??

 

Et tu forces en GRIS tous les calques des XREFs ?!

 

Sinon je crois qu'il faudra envisager la méthode STB de Christian REB !

 

Ou bien modifier en conséquence les XREFs (en fait les Blocs) !

En principe un bon petit coup de DEFDUCALQUE (qui existe depuis la version 2008) sur les Blocs et c OK !?

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello Le Crabe,

 

Je te remercie de penser à moi !

 

La solution des STB est des plus simple... A condition de travailler en STB bien sur !

 

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

Bonjour,

 

Je te remercie pour ton message :rolleyes: .

Oui en effet je veux forcer tous les calques en gris des Xref.

 

J’ai essayé la commande XREFOVERRIDE=1 avec le lisp de Gile cela fonctionne impeccable.

Est-il possible d’intégrer dans le Lisp de Gile la commande XREFOVERRIDE pour “xref-color-set” et “xref-color-restore” ? ;)

 

En ce qui concerne le STB cela demande plus de manipulation, convertir le fichier en STB, sélectionner tous calques, changer la couleur, etc. et ensuite ne pas oublier de revenir en CTB pour les collègues ne soit pas embêter et il faut en plus avoir un fichier plume STB configuré :huh: .

 

Merci d’avance, Meilleures salutations

Lien vers le commentaire
Partager sur d’autres sites

Chez nous, on garde les plans archi en archive et on en fait une copie dans un répertoire "Xref" ce qui explique ce lisp un peu sauvage dont on se sert parfois.

Reste à traiter les textes ou attributs avec une couleur forcée dans un bloc (c'est une plaie car même avec stripmtext ça reste en couleur).

Mais généralement, je fais un coup de Defducalque sur tout (option le changer que la couleur) et puis dans mon dessin, je force la couleur des calques de la ref en gris (couleur 8 voir de modifier le lisp si tu veux une autre couleur)

Les STB, c'est super, mais je suis le seul à maitriser, et comme nos plan sont souvent réutilisés par des entreprises qui en on rien à fiche de le lisibilité, ça devient n'imp. Autant figer le plan archi en dur. ça évite que celui qui ouvre le dwg sans déplier le zip de l'Etransfert se retrouve avec un visu et ou une impression non conforme. (Xref liées à l'Etransfert)

 

 

(vl-load-com)

(defun c:toutgris (/ acdoc)
 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (vla-StartUndoMark acdoc)
 (vlax-for l (vla-get-Layers acdoc)
(vla-put-color l 8)
 )
 (vlax-for b (vla-get-Blocks acdoc)
(vlax-for o	b
 	(vla-put-color o acByLayer)
)
 )
 (vla-EndUndoMark acdoc)
 (princ)
)

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour :D ,

Je vous remercie merci pour votre aide ;) .

 

Je pense qu’à utiliser au quotidien le lisp de gile est le plus confortable.

Il suffirait de rajouter (je fais le malin mais je sais pas comment faire :D ) XREFOVERRIDE=1 pour la commande “xref-color-set” et XREFOVERRIDE=0 pour la commande “xref-color-restore”.

 

Le lisp de X_all est bien aussi ;) , c’est dommage qu’on ne puisse pas faire un restore comme “xref-color-restore”.

 

S’il y a d’autre proposition je suis preneur :)

 

 

Merci à tous

 

Meilleures salutations

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Je suis au niveau 0.1 en Lisp/VLisp mais (A priori) il te suffit de rajouter les deux Lignes suivantes dans le Lisp de Gilles

juste avant la ligne : (vla-EndUndoMark acdoc)

 

---- Pour c:Xref-Color-Set

(setvar "XREFOVERRIDE" 1)

(command "_regenall")

 

---- Pour Xref-Color-Restore

(setvar "XREFOVERRIDE" 0)

(command "_regenall")

 

Bye, lecrabe

  • Upvote 1

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut lecrabe,

 

Je te remercie pour ton aide :rolleyes:

 

Super cela fonctionne impeccable ;)

 

 

Ci-dessous le code de Gilles avec le tiens.

 

(defun c:xref-color-set (/ acdoc xrf col lst)
 (vl-load-com)
 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (if (and (setq xrf (car (entsel "\nSelectionnez la reference externe: ")))
          (setq xrf (vlax-ename->vla-object xrf))
          (= (vla-get-ObjectName xrf) "AcDbBlockReference")
          (setq col (acad_colordlg 8 nil))
     )
   (progn
     (vla-StartUndoMark acdoc)
     (vlax-for l (vla-get-Layers acdoc)
       (and (wcmatch (vla-get-Name l) (strcat (vla-get-Name xrf) "|*"))
         (setq lst (cons (cons (vla-get-Name l) (vla-get-color l)) lst))
         (vla-put-color l col)
       )
     )
     (or (vlax-ldata-get xrf "laycol")
         (vlax-ldata-put xrf "laycol" lst)
     )
  (setvar "XREFOVERRIDE" 1) 
  (command "_regenall") 
     (vla-EndUndoMark acdoc)
   )
 )
 (princ)
)

(defun c:xref-color-restore (/ acdoc xrf lst)
(vl-load-com)
 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (if (and (setq xrf (car (entsel "\nSelectionnez la reference externe: ")))
          (setq xrf (vlax-ename->vla-object xrf))
          (= (vla-get-ObjectName xrf) "AcDbBlockReference")
          (setq lst (vlax-ldata-get xrf "laycol")) 
     )
   (progn
     (vla-StartUndoMark acdoc)
     (vlax-for l (vla-get-Layers acdoc)
       (if (setq pair (assoc (vla-get-Name l) lst))
         (vla-put-color l (cdr pair))
       )
     )
     (vlax-ldata-delete xrf "laycol")

    (setvar "XREFOVERRIDE" 0) 
    (command "_regenall")
     (vla-EndUndoMark acdoc)
   )
 )
 (princ)
) 

 

Merci à tous pour votre aide :rolleyes:

 

Meilleures salutations

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é