Spartacus-31 Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Bonjour, je démarre dans une nouvelle boite ou on me demande entre autre bien souvent en ce momment de recuperer des plans d'Archi et de mettre sous fond gris.Tout fonctionne bien, calques, objets, sauf les blocs qui meme en metant couleur du bloc gris restent leur couleurs dorigine.J'ai bien éssaye la routine MBLOC mais celle ci ne fonctionne que ligne par ligne, et donc sur un bloc assez complexe c'est pas gérable, la solution que j'ai pour le momment c'est de copier le bloc, le décompose, mettre tous les éléments en gris ducalque, et de recréer le bloc avec le meme nom pour les mettre tous a jour. et c'est assez long. Si quelqu'un peux m'aider................. Merci
grand_sapin Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Salut tu peux essayer la routine "edit_bloc" présente sur cette page http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=14737#pid67782 bon courage Rémy
Matt666 Posté(e) le 25 septembre 2007 Posté(e) le 25 septembre 2007 Le pb vient de la références de bloc...Tu peux utiliser l'une de ces deux routines.. Normaliser blocs : Place les entités constituant chaque blocs sur le calque 0 en couleur DuBloc(defun c:nb (/ i n tot) (setq temperror *error* *error* myerror echoold (getvar "cmdecho") ) (setvar "cmdecho" 0) (COMMAND "-layer" "L" "*" "a" "*" "r" "*" "d" "0" "") (if (/= nil (setq i (tblnext "block" t))) (progn (setq tot 1) (while i (setq n (cdr (assoc -2 i))) (while n (setq n (entget n)) (if (/= (cdr (assoc 8 n)) "0")(entmod (subst (cons 8 "0") (assoc 8 n) n))) (if (not (assoc 62 n))(setq n (append n (list (cons 62 0))))) (if (/= (cdr (assoc 62 n)) 0)(entmod (subst (cons 62 0) (assoc 62 n) n))) (setq n (entnext (cdr (assoc -1 n)))) ) (setq i (tblnext "block") tot (1+ tot)) ) (setq sel (ssget "x" (list (cons 0 "INSERT"))) j 0 nat 0) (while (ssname sel j) (setq n (entget (ssname sel j))) (if (assoc 66 n)(progn (setq i (entget (entnext (cdr (assoc -1 n))))) (while (/= (cdr (assoc 0 i)) "SEQEND") (entmod (subst (cons 8 "0") (assoc 8 i) i)) (if (not (assoc 62 i)) (setq i (append i (list (cons 62 0))))) (if (/= (cdr (assoc 62 i)) 0) (entmod (subst (cons 62 0) (assoc 62 i) i))) (entupd (cdr (assoc -1 i))) (setq nat (+ 1 nat) i (entget (entnext (cdr (assoc -1 i))))) ) )) (setq j (1+ j)) ) (princ (strcat "\nTraitement de " (itoa (+ tot nat)) " bloc(s) (" (itoa tot) " dans la table des blocs et " (itoa nat) " étiquette(s) d'attribut(s) de bloc(s) dans le dessin)" )) (redraw) (setvar "cmdecho" echoold) (graphscr) (princ) ) ) ) Normaliser blocs 2 : Place les entités constituant chaque blocs sur le calque 0 en couleur d'ORIGINE(defun c:nb2 () (setq temperror *error* *error* myerror echoold (getvar "cmdecho") ) (setvar "cmdecho" 0) (COMMAND "-layer" "L" "*" "a" "*" "r" "*" "d" "0" "") (if (/= nil (setq i (tblnext "block" t))) (progn (setq tot 1) (while i (setq n (cdr (assoc -2 i))) (while n (setq n (entget n) colorigin (cdr (assoc 62 n))) (if (or (= nil colorigin) (= 256 colorigin) (= "BYLAYER" colorigin)) (setq colorigin (cdr (assoc 62 (tblsearch "layer" (cdr (assoc 8 n)))))) ) (if (> 0 colorigin) (setq colorigin (- 0 colorigin))) (if (/= (cdr (assoc 8 n)) "0")(entmod (subst (cons 8 "0") (assoc 8 n) n))) (if (not (assoc 62 n))(setq n (append n (list (cons 62 colorigin))))) (entmod (subst (cons 62 colorigin) (assoc 62 n) n)) (setq n (entnext (cdr (assoc -1 n)))) ) (setq i (tblnext "block") tot (1+ tot)) ) ;_ Fin de while ; Normalisation des étiquettes d'attributs de blocs dans le dessin (car une étiquette peut avoir des valeurs de calque, couleur, etc. différentes de ; l'attribut) (setq sel (ssget "x" (list (cons 0 "INSERT")))) (setq j 0) (setq nat 0) (while (ssname sel j) (setq n (entget (ssname sel j))) (if (assoc 66 n)(progn (setq i (entget (entnext (cdr (assoc -1 n))))) (while (/= (cdr (assoc 0 i)) "SEQEND") (entmod (subst (cons 8 "0") (assoc 8 i) i)) (if (not (assoc 62 i))(setq i (append i (list (cons 62 0))))) (if (/= (cdr (assoc 62 i)) 0)(entmod (subst (cons 62 0) (assoc 62 i) i))) (entupd (cdr (assoc -1 i))) (setq nat (+ 1 nat) i (entget (entnext (cdr (assoc -1 i))))) ) )) (setq j (1+ j)) ) (princ (strcat "\nTraitement de " (itoa (+ tot nat)) " bloc(s) (" (itoa tot) " dans la table des blocs et " (itoa nat) " étiquette(s) d'attribut(s) de bloc(s) dans le dessin)" )) (redraw) (setvar "cmdecho" echoold) (graphscr) (princ) ) ) ) A bientot.Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
Spartacus-31 Posté(e) le 26 septembre 2007 Auteur Posté(e) le 26 septembre 2007 Merci beaucoup a tous, la fonction edit_bloc fonctionne a merveille!
Spartacus-31 Posté(e) le 26 septembre 2007 Auteur Posté(e) le 26 septembre 2007 J'en profite tant que j'y suis et vu la maitrise dont vous faites preuve : je cherche uen comande que lorsque j'ai un plan autocad ouvert d'une commande tous mes blocs, traits, textes, tout.... soit couleur du_calque et que tous les calques aient la couleur gris 8
Matt666 Posté(e) le 26 septembre 2007 Posté(e) le 26 septembre 2007 un truc comme ça ?(defun LSTAB ( TABL / LB X ) (if (member (strcase tabl) '("APPID" "BLOCK" "DIMSTYLE" "LAYER" "LTYPE" "STYLE" "UCS" "VIEW" "VPORT") ) (progn (setq lb (cons (cdr (assoc 2 (tblnext tabl T))) lb)) (while (setq x (cdr (assoc 2 (tblnext tabl)))) (setq lb (cons x lb)) ) (if (/= (strcase tabl) "BLOCK") (setq lb (acad_strlsort lb)) lb ) ) ) ) (defun lst2str (lst sep / ) (strcat (vl-princ-to-string (car lst)) (apply 'strcat (mapcar '(lambda (x) (strcat sep (vl-princ-to-string x))) (cdr lst) ) ) ) ) (defun c:CHLAY (/ cmdecho a b ent) (setq cmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) (command "_undo" "D") (if (setq a (ssget "_X")) (repeat (setq cn (sslength a)) (setq ent (entget (ssname a (setq cn (1- cn))))) (entmod (subst (cons 62 256) (assoc 62 ent) ent )) (entupd (ssname a cn)) ) ) (command "-calque" "CO" 8 (lst2str (lstab "layer") ",") "" "_UNDO" "F") (setvar "cmdecho" cmdecho) (princ) ) Entre CHLAY, puis attend ! A bientot.Matt. [Edité le 26/9/2007 par Matt666] "Chacun compte pour un, et nul ne compte pour plus d'un."
Spartacus-31 Posté(e) le 26 septembre 2007 Auteur Posté(e) le 26 septembre 2007 je la rentre ou et comment cette commande, je maitrise pas du tout les langages de programation
(gile) Posté(e) le 26 septembre 2007 Posté(e) le 26 septembre 2007 Curieuse idée, mais bon... (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) ) [Edité le 26/9/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Matt666 Posté(e) le 26 septembre 2007 Posté(e) le 26 septembre 2007 :thumbup: Ah bah oui forcément, un code balancé comme ça c'est po évident !! Bon : 1- tu copies le code dans un fichier texte que tu enregistres où tu veux, et que tu nommes CHLAY.LSP2- Ensuite tu vas AutoCAD, Outils/Charger une application...3- Tu vas chercher le fichier texte ou lisp que tu as enregistré4- Si tu veux l'avoir à chaque démarrage, tu cliques sur "Contenu", tjs dans la même fenêtre et tu ajoute le lisp5- Charger6- Fermer. Tu n'as plus qu'à entrer CHLAY dans la ligne de commande ! Bing. "Chacun compte pour un, et nul ne compte pour plus d'un."
Matt666 Posté(e) le 26 septembre 2007 Posté(e) le 26 septembre 2007 Une routine "toutgris" !!! Dément... :D "Chacun compte pour un, et nul ne compte pour plus d'un."
Spartacus-31 Posté(e) le 26 septembre 2007 Auteur Posté(e) le 26 septembre 2007 c'est vraiment parfait merci a tous
grand_sapin Posté(e) le 27 septembre 2007 Posté(e) le 27 septembre 2007 Salut, Curieuse idée, mais bon... Moi je vais aussi beaucoup l'utiliser cette routine. je suis dans un BE VRD et quand on met le plan topo en x-ref, je le passe en entier en gris (253) comme ça ne surcharge pas le dessin. voila, c'était juste pour dire Rémy
oran Posté(e) le 12 octobre 2007 Posté(e) le 12 octobre 2007 Bonjour,....." toutgris " c'est le top ;) ........par contre j'ai des textmult. dont la couleur a été forcée et le lisp ne les prend pas en compte :( c'est faisable STP ;) Oran
Patrick_35 Posté(e) le 12 octobre 2007 Posté(e) le 12 octobre 2007 Salut Avec StipMtext par exemple @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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