Aller au contenu

Blocs Autocad 2004


Messages recommandés

Posté(e)

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

Posté(e)

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."

Posté(e)

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

Posté(e)

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."

Posté(e)

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

Posté(e)

: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.LSP

2- 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 lisp

5- Charger

6- 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."

Posté(e)

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

  • 3 semaines après...
Posté(e)

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

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é