Aller au contenu

forcer les couleurs selon couleur du calque


Messages recommandés

Posté(e)

Bonjour à tous, j'aimerai savoir si il existe un lisp qui me permettrait de forcer les couleurs de tous les objets sélectionnés en fonction de la couleur du calque dans lequel se trouve l'objet

 

exemple une ligne dans le calque "mur" de couleur ducalque deviendrait cyan (car le calque mur a la couleur cyan)

 

Merci d'avance à toutes les pointures du lisp présents sur ce site

Posté(e)

Hello

 

NON Sorry, le progr Lisp fourni ne fait pas ce qui est demande !

 

Je crois me souvenir que Bryce avait deja fourni ce genre de programme (A verifier !?)

 

Car ainsi avec la couleur forcee sur chaque objet (qui sont en mode DuCalque)

lors de l'extraction des objets, on obtient la "bonne" couleur !

 

D'ailleurs SVP j'aimerais bien ce genre de prog avec la meme possibilite

pour les Types de lignes, Epaisseurs de traits ...

 

Merci d'avance, lecrabe

Autodesk Expert Elite Team

Posté(e)

Bonjour,

 

Je ne pensais pas qu'un simple crustacé pouvait avoir une aussi bonne mémoire ! :P

En fait j'avais effectivement déjà posté un lisp de ce genre, mais pour les types de ligne:

 

(defun c:FORCETP (/ acdoc layers *error* lay ss obj layobj i counter)
; Attribue à chaque objet sélectionné le type de ligne du calque de l'objet.

(vl-load-com)

(setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
     layers (vla-get-Layers acdoc) )

(defun *error* (msg)
 (vla-endundomark acdoc)
 (and msg
   (or
     (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON"))
     (princ (strcat "\nErreur : " msg))
   )
 )
 (princ)
)

(vla-startundomark acdoc)

(if (or
     (setq ss (cadr (ssgetfirst)))
     (setq ss (ssget))
   )
 (progn
   (setq i 0 counter 0)
   (repeat (sslength ss)
     (setq obj (vlax-ename->vla-object (ssname ss i))
           layobj (vla-item layers (vla-get-layer obj)) )
     (if (= (vla-get-lock layobj) :vlax-false)
       (progn
         (vla-put-linetype obj (vla-get-linetype layobj))
         (setq counter (1+ counter))
       )
     )
     (setq i (1+ i))
   )
   (princ (strcat "\n" (itoa counter) " objets modifiés !"))
   (princ)
 )
);if selection

(*error* nil)
)

(princ "\nCommande à utiliser: FORCETP")
(princ)

 

 

Il suffit de l'adapter un peu pour faire la même chose avec la couleur:

 

(defun c:FORCECOLOR (/ acdoc layers *error* lay ss obj layobj i counter)
; Attribue à chaque objet sélectionné la couleur du calque de l'objet.

(vl-load-com)

(setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
     layers (vla-get-Layers acdoc) )

(defun *error* (msg)
 (vla-endundomark acdoc)
 (and msg
   (or
     (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON"))
     (princ (strcat "\nErreur : " msg))
   )
 )
 (princ)
)

(vla-startundomark acdoc)

(if (or
     (setq ss (cadr (ssgetfirst)))
     (setq ss (ssget))
   )
 (progn
   (setq i 0 counter 0)
   (repeat (sslength ss)
     (setq obj (vlax-ename->vla-object (ssname ss i))
           layobj (vla-item layers (vla-get-layer obj)) )
     (if (= (vla-get-lock layobj) :vlax-false)
       (progn
         (vla-put-color obj (vla-get-color layobj))
         (setq counter (1+ counter))
       )
     )
     (setq i (1+ i))
   )
   (princ (strcat "\n" (itoa counter) " objets modifiés !"))
   (princ)
 )
);if selection

(*error* nil)
)

(princ "\nCommande à utiliser: FORCECOLOR")
(princ)

 

J'espère juste qu'il y a une très bonne raison pour faire ce genre de choses... :unsure:

Posté(e)

les gars vous êtes vraiment des bêtes...je pose une question un vendredi soir a minuit et le lendemain samedi j'ai deja la réponse sublime ce site et surtout ceux qui font ce qu'il est

 

ma raison pour faire cette demande : ma boite (geometre topographe) possede un lisp qui calcul les superficies des polylignes en fonction des couleurs forcees .. mais chaque polyligne est dans un calque bien precis u coup jai une vingtaine de calque different a remettre en couleur force pour repondre à l'attente du programme...etc..

 

un grand merci à vous depuis que je parcours ce site la nuit (j'ai une petite fille de deux mois donc mon sommeil en ce moment :o etc...) j'arrete pas de ramener a mon bureau des lisp et je passe pour un génie

 

merci au crabe à didier à Gile etc... RESPECT :rolleyes:

Posté(e)

D'ailleurs SVP j'aimerais bien ce genre de prog avec la meme possibilite

pour les Types de lignes, Epaisseurs de traits ...

 

Voici une version qui combine couleur et/ou type de ligne et/ou épaisseur :

 

(defun c:FPROP ( / acdoc layers *error* ss propslist i counter lay )
; Force les propriétés des objets sélectionnés (couleur, type de ligne, épaisseur de tracé) selon les propriétés de leur calque.
; Bryce, 03/2013

 (vl-load-com)

 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
       layers (vla-get-Layers acdoc) )

 (defun *error* (msg)
   (vla-EndUndoMark acdoc)
   (and msg
     (or
       (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON"))
       (princ (strcat "\nErreur : " msg))
     )
   )
   (if ss (vla-Delete ss))
   (princ)
 )

 (vla-StartUndoMark acdoc)

 (or
   (setq ss (cadr (ssgetfirst)))
   (setq ss (ssget "_:L"))
 )

 (if ss
     (mapcar
       '(lambda ( prop str )
         (initget "Oui Non")
         (if (= (getkword (strcat "Forcer " str " des objets ? [Oui/Non] <N> : ")) "Oui")
           (setq propslist (cons prop propslist))
         )
       )
       (list 'TrueColor 'Linetype 'Lineweight)
       (list "la couleur" "le type de ligne" "l'épaisseur de tracé")
     )
 )

 (if (and ss propslist)
   (progn
     (setq ss (vla-get-ActiveSelectionSet acdoc)
           i 0
           counter 0 )
     (vlax-for obj ss
       (setq lay (vla-Item layers (vla-get-Layer obj)) )
       (mapcar
         '(lambda (prop) 
           (vlax-put-property obj prop (vlax-get-property lay prop))
         )
         propslist
       )
       (setq counter (1+ counter))
       (setq i (1+ i))
     )
     (princ (strcat "\n" (itoa counter) " objets modifiés !"))
     (princ)
   )
   (princ "\nAucun objet modifié !")
 );if selection

 (*error* nil)
)

(princ "\nCommande à utiliser: FPROP")
(princ)

Posté(e)

Bonsoir,

Je n’avais pas compris le sens de la question de Joris25. C’est vrai que c’est parfois pénible d’avoir comme propriété « Ducalque » plutôt que la valeur réelle. Bryce ton LISP est génial il va me rendre de grands services, respect.

Cordialement.

Formateur sur AutoCAD et REVIT Architecture: jf-brigaud.com

Posté(e)

Salut, je reste sans voix

Un formateur qui propose de forcer les couleurs, pourtant ta premier réponse semblais indique le contraire

Tu me diras: je vient bien de voir un élève en formation . Ne jurer que par des bloc dynamique à 5 ou 6 paramètres ainsi qu’ avec forçage couleurs et lignes

Posté(e)

Hello

 

*** 0 - MERCI beaucoup Bryce ***

 

Comme je l'ai deja dit, j'utilise parfois ce genre de progr pour diverses raisons :

 

*** 1 - Extraction ***

Car ainsi avec la propriete forcee sur chaque objet (qui sont en mode DuCalque)

lors de l'extraction des objets, on obtient la "bonne" couleur / type de ligne / epaisseur

dans les fichiers XLS, MDB, CSV et les tableaux AutoCAD ...

 

*** 2 - Export ves d'autres formats CAO/SIG ***

Car ainsi j'ai directement la vraie propriete de couleur, type de ligne, epaisseur

AutoCAD dans ces formats NON-DWG/DXF ...

 

De facon generale, je realise ce genre de manipulation sur des calques

ou justement, on n'a AUCUNE entite avec une propriete FORCEE !

 

Mais j'imagine qu'il peut y avoir d'autres raisons !?

 

lecrabe

Autodesk Expert Elite Team

Posté(e)

Hello Lilian

 

Par exemple quand tu regardes ulterieurement un XLS, MDB, CSV d'Extraction

et que tu as "partout" (ou presque) ce n'est pas tres parlant !?

 

lecrabe

Autodesk Expert Elite Team

Posté(e)

Re,

 

En effet,...C'est donc juste une question d'affichage ? (Comme dans la palette des propriétés ?)

 

Ce qui me gène un peu là dedans c'est qu'on ne sait plus si telle couleur ou tel type de lignes correspond bien au calque,...En effet, si les entités ont étés forcées, comment le sais ton alors ?

Civil 3D 2025 - COVADIS_18.3b

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

Posté(e)

Hello

 

En general quand je force les proprietes, je ne garde pas le DWG en question !

 

C juste pour avoir une extraction avec des proprietes "plus explicites"

et/ou un export vers d'autres formats CAO/SIG avec idem ...

 

Comme je l'ai signale, en general je ne fais pas passer cette routine sur des calques

ou JUSTEMENT il y a des proprietes forcees ...

 

lecrabe

Autodesk Expert Elite Team

Posté(e)

Hello Lilian

 

Humour : cette question est "disqualifiante" pour un Pro comme toi !?

 

Tu dois plaisanter ce matin, car en selectionnant tout ce qui est visible devant soi ...

Tu verifies sur les 3 ascenseurs des proprietes qu'ils ont TOUS TOUJOURS en mode !

 

Manipulation a realiser avec la case de dialogue des proprietes DESACTIVEE !

 

lecrabe

Autodesk Expert Elite Team

Posté(e)

Hello

 

Toujours DESACTIVER la case de dialogue des proprietes lorsque l'on fait

une GROSSE selection (pour verifier les proprietes de couleur, types de ligne, epaisseurs)

sinon AutoCAD perd un temps FOU a tenter de trouver des proprietes COMMUNES aux entites selectionnees ...

 

Ne pas oublier que dans les OPTIONS / Selection - Depuis la version 2012 il y a

un nouveau parametre : nombre maximum d'objets selectionnes , valeur par defaut = 25000

 

Humour : pour le 1er Avril, tu mets ce parametre a UN ou DEUX par exemple

c tres amusant de voir qq'un tenter de travailler avec cette limite ...

 

lecrabe

Autodesk Expert Elite Team

Posté(e)

Bonjour Lecrabe,

 

Ne pas oublier que dans les OPTIONS / Selection - Depuis la version 2012 il y a

un nouveau parametre : nombre maximum d'objets selectionnes , valeur par defaut = 25000

 

Merci pour l'info. Je suis encore sur la 2011 mais certain de mes collègues ont des versions supérueres. As-tu le nom de la variable ? Car 25000 c'est pas suffisant à mon goût. <_<

 

Merci par avance.

 

Olivier

Posté(e)

Hello

 

DESACTIVER signifie pour moi REFERMER la case de dialogue des proprietes ...

 

La seule chose qui m'interesse dans cette manipulation,

c de voir si les 3 ascenseurs de proprietes restent bien en mode

et C TOUT !

 

Parfois j'enchaine avec un simple SELECT pour compter les entites ...

 

lecrabe

Autodesk Expert Elite Team

Posté(e)

Re,

c de voir si les 3 ascenseurs de proprietes restent bien en mode

 

Ah ok !

 

Tu parles de la barre d'outils "propriétés" dont je me sers jamais,...(Les étudiants confondent trop facilement "contrôle" des entités avec "forçage" en utilisant cette barre d'outils. Et après, quand on utilise Covadis ou Map, on pleure,...)

 

Merci pour tes réponses,...;)

Civil 3D 2025 - COVADIS_18.3b

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

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é