Vince-34 Posté(e) le 28 avril 2020 Posté(e) le 28 avril 2020 Bonjour,J'ai un plan avec des centaines de blocs. Chacun de ces blocs contient des lignes, hachures et textes. Le souci est que toutes les entités de chaque bloc se trouvent sur un même calque. J'aimerais pouvoir mettre tous les textes dans un calque différent afin de geler ce dernier MAIS sans être obligé d'éditer chaque bloc.Y a t'il une commande pour ça ou Lisp qui va bien ? (j'ai rien trouvé sur ce forum) D'avance merci de vos lumières ! Vince
lecrabe Posté(e) le 28 avril 2020 Posté(e) le 28 avril 2020 Hello RAPPEL : je suis au niveau 0.1 en Lisp/VLisp ! Donc j'ai repris une excellente routine de notre Grand Maitre Gilles Que j'ai tres legerement modifiee ... Cela semble OK ! ... En fait presque !! Je l'ai modifiee pour qu'elle traite les TEXTs simples ("AcDbText") ! Et non pas les MTEXTs ("AcDbMText") ... Par contre, je ne sais pas faire le BATTMAN ou ATTSYNC au coeur de la routine pour synchroniser les Blocs a chaque Modif !! Donc je suis oblige de faire le BATTMAN ou ATTSYNC manuellement a la fin !!Et ce N fois sur les N Blocs ... MAIS un Pro va realiser la petite Modif necessaire dans la routine de Gilles !? ------------------------------Au fait DEJA est ce que la routine fonctionne sur ton antique AutoCAD 2007 ??------------------------------ Merci d'avance ... Routine : "Norm_Text_in_Block" LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite ;; ;; http://cadxp.com/topic/44644-subtilite-lisp-bloc/page__pid__257099 ;; ;; Routine par GC ;; ;; Micro-Micro Modif par Patrice : Norm_Text_in_Block (Pour TEXTs simples) ;; ;; Zara >>> J'utilise le Lisp suivant pour Editer les blocs d'un dessin ;; Cela fonctionne très bien mais je souhaiterai ne pas toucher aux hachures des blocs ;; juste les lignes concernant le changement de couleur ;; ;; Auriez-vous une idée pour modifier le Lisp pour que cela fonctionne? ;; ;; --- Interrogation Entite/Objet en Lisp --- ;; (entget (car (entsel)) '("*")) ;; ;; (command "_layer" "_m" "TEXT_BLOCK" "") ;; (command "_layerp") ;; (vl-load-com) (defun c:Norm_Text_in_Block (/ *error* adoc lst_layer layer_for_text func_restore-layers) ;;;;;;;;;;;; Micro-Micro-Modif par Patrice ;;;;;;;;;;;; ;;;;;; Nom du Calque des Textes simples ;;;;;; (setq layer_for_text "TEXT_BLOCK") ;;;;;; Creation du calque VOULU ;;;;;; (command "_layer" "_m" layer_for_text "") (command "_layerp") (defun *error* (msg) (func_restore-layers) (vla-endundomark adoc) (princ msg) (princ) ) ;_ end of defun (defun func_restore-layers () (foreach item lst_layer (vla-put-lock (car item) (cdr (assoc "lock" (cdr item)))) (vl-catch-all-apply '(lambda () (vla-put-freeze (car item) (cdr (assoc "freeze" (cdr item)))) ) ;_ end of lambda ) ;_ end of vl-catch-all-apply ) ;_ end of foreach ) ;_ end of defun (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))) ) ;_ end of vla-startundomark (vlax-for item (vla-get-layers adoc) (setq lst_layer (cons (list item (cons "lock" (vla-get-lock item)) (cons "freeze" (vla-get-freeze item)) ) ;_ end of list lst_layer ) ;_ end of cons ) ;_ end of setq (vla-put-lock item :vlax-false) (vl-catch-all-apply '(lambda () (vla-put-freeze item :vlax-false))) ) ;_ end of vlax-for (vlax-for blk (vla-get-blocks adoc) (if (and (equal (vla-get-islayout blk) :vlax-false) (equal (vla-get-isxref blk) :vlax-false) ) ;_ end of and (progn (vlax-for subent blk ;;;;;; Pour TOUT sauf les Hachures ;;;;;; ;; (if (/= (vla-get-ObjectName subent) "AcDbHatch") ;;;;;; Pour QUE les Textes simples / multiples ;;;;;; (if ( = (vla-get-ObjectName subent) "AcDbText") ;; (if ( = (vla-get-ObjectName subent) "AcDbMText") (progn ;; (vla-put-layer subent "0") ;; (vla-put-layer subent "Text_Block") (vla-put-layer subent layer_for_text) ;;;;;; Suppression des 3 Modes ByBlock ;;;;;; ;; (vla-put-color subent 0) ;; (vla-put-lineweight subent aclnwtbyblock) ;; (vla-put-linetype subent "byblock") );_ end of progn );_ end of if ) ;_ end of vlax-for ) ;_ end of progn ) ;_ end of if ) ;_ end of vlax-for (func_restore-layers) (vla-endundomark adoc) (princ) ) ;_ end of defun Autodesk Expert Elite Team
Vince-34 Posté(e) le 29 avril 2020 Auteur Posté(e) le 29 avril 2020 Merci pour ce Lisp qui fonctionne bien sur mon AutoCAD 2017 svp ! Donc c'est ok mais le souci est que les blocs sont sans attribut (donc BATTMAN et ATTSYNC ne fonctionnent pas) et le texte en MTEXT. Est-il possible de rajouter une commande qui puisse en même temps convertir les MTEXT des blocs en TEXT ?
lecrabe Posté(e) le 29 avril 2020 Posté(e) le 29 avril 2020 Hello 1) RIEN compris ! ... Tu as quelle version de AutoCAD ??Si ZERO attribut A Priori, tu n'as pas besoin de BATTMAN / ATTSYNC !? 2) DEJA SVP est ce que le Lisp est OK pour toi avec les TEXTs simples dans les Blocs ?? 3) Veux tu en plus une version qui traite les MTEXTs ?? LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite Autodesk Expert Elite Team
Vince-34 Posté(e) le 30 avril 2020 Auteur Posté(e) le 30 avril 2020 Hello 1) RIEN compris ! ... Tu as quelle version de AutoCAD ?? Je me suis trompé de forum, je suis sur une 2017 full, désolé. Si ZERO attribut A Priori, tu n'as pas besoin de BATTMAN / ATTSYNC !? En effet. 2) DEJA SVP est ce que le Lisp est OK pour toi avec les TEXTs simples dans les Blocs ??Comme le l'ai dit précédemment, oui il fonctionne sur des TEXTs. Mais dans mon cas tous les textes contenus dans les blocs sont en MTEXT. 3) Veux tu en plus une version qui traite les MTEXTs ?? Oui et idéalement qui traite aussi bien les TEXTs que les MTEXTs Merci LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite
lili2006 Posté(e) le 30 avril 2020 Posté(e) le 30 avril 2020 Bonjour à toutes et tous,tous les textes contenus dans les blocs sont en MTEXT.En les décomposant ils deviennent des textes "simples",.. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Vince-34 Posté(e) le 30 avril 2020 Auteur Posté(e) le 30 avril 2020 Bonjour à toutes et tous, En les décomposant ils deviennent des textes "simples",.. Oui bien sûr mais il y a des centaines de blocs différents et je ne me vois pas éditer les bloc un par un pour décomposer le MTEXT à l'intérieur.
lecrabe Posté(e) le 30 avril 2020 Posté(e) le 30 avril 2020 Hello 1) SVP tu essayes cette version "Norm_MText_in_Block" ci-dessous (NON TESTEE !) ... 2) Tu peux changer CETTE ligne : (setq layer_for_text "TEXTMULT_BLOCK") Si tu desires un AUTRE Nom de Calque !? 3) Tu nous diras ... LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite ;; ;; http://cadxp.com/topic/44644-subtilite-lisp-bloc/page__pid__257099 ;; ;; Routine par GC ;; ;; Micro-Micro Modif par Patrice : Norm_MText_in_Block (Pour MTEXTs Multiples) ;; ;; Zara >>> J'utilise le Lisp suivant pour Editer les blocs d'un dessin ;; Cela fonctionne très bien mais je souhaiterai ne pas toucher aux hachures des blocs ;; juste les lignes concernant le changement de couleur ;; ;; Auriez-vous une idée pour modifier le Lisp pour que cela fonctionne? ;; ;; --- Interrogation Entite/Objet en Lisp --- ;; (entget (car (entsel)) '("*")) ;; ;; (command "_layer" "_m" "TEXT_BLOCK" "") ;; (command "_layer" "_m" "TEXTMULT_BLOCK" "") ;; (command "_layerp") ;; (vl-load-com) (defun c:Norm_MText_in_Block (/ *error* adoc lst_layer layer_for_text func_restore-layers) ;;;;;;;;;;;; Micro-Micro-Modif par Patrice ;;;;;;;;;;;; ;;;;;; Nom du Calque des Textes Multiples ;;;;;; (setq layer_for_text "TEXTMULT_BLOCK") ;;;;;; Creation du calque VOULU ;;;;;; (command "_layer" "_m" layer_for_text "") (command "_layerp") (defun *error* (msg) (func_restore-layers) (vla-endundomark adoc) (princ msg) (princ) ) ;_ end of defun (defun func_restore-layers () (foreach item lst_layer (vla-put-lock (car item) (cdr (assoc "lock" (cdr item)))) (vl-catch-all-apply '(lambda () (vla-put-freeze (car item) (cdr (assoc "freeze" (cdr item)))) ) ;_ end of lambda ) ;_ end of vl-catch-all-apply ) ;_ end of foreach ) ;_ end of defun (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))) ) ;_ end of vla-startundomark (vlax-for item (vla-get-layers adoc) (setq lst_layer (cons (list item (cons "lock" (vla-get-lock item)) (cons "freeze" (vla-get-freeze item)) ) ;_ end of list lst_layer ) ;_ end of cons ) ;_ end of setq (vla-put-lock item :vlax-false) (vl-catch-all-apply '(lambda () (vla-put-freeze item :vlax-false))) ) ;_ end of vlax-for (vlax-for blk (vla-get-blocks adoc) (if (and (equal (vla-get-islayout blk) :vlax-false) (equal (vla-get-isxref blk) :vlax-false) ) ;_ end of and (progn (vlax-for subent blk ;;;;;; Pour TOUT sauf les Hachures ;;;;;; ;; (if (/= (vla-get-ObjectName subent) "AcDbHatch") ;;;;;; Pour QUE les Textes simples / multiples ;;;;;; ;; (if ( = (vla-get-ObjectName subent) "AcDbText") (if ( = (vla-get-ObjectName subent) "AcDbMText") (progn ;; (vla-put-layer subent "0") ;; (vla-put-layer subent "Text_Block") (vla-put-layer subent layer_for_text) ;;;;;; Suppression des 3 Modes ByBlock ;;;;;; ;; (vla-put-color subent 0) ;; (vla-put-lineweight subent aclnwtbyblock) ;; (vla-put-linetype subent "byblock") );_ end of progn );_ end of if ) ;_ end of vlax-for ) ;_ end of progn ) ;_ end of if ) ;_ end of vlax-for (func_restore-layers) (vla-endundomark adoc) (princ) ) ;_ end of defun Autodesk Expert Elite Team
Vince-34 Posté(e) le 30 avril 2020 Auteur Posté(e) le 30 avril 2020 Merci Lecrabe, ça fonctionne ! Pour plus de précision, est-il possible d'ajouter une sélection des blocs par FENETRE ou CAPTURE ? (désolé, j'y connais rien en Lisp :-/ )
lecrabe Posté(e) le 7 mai 2020 Posté(e) le 7 mai 2020 Hello Gilles 0) Si tu passes par LA, SVP peux tu aider ? 1) Pour les 2 routines LSP - Passer par une selection CLASSIQUE et non pas TOUT le DWG !? 2) Ajouter en fin de boucle pour chaque Bloc traite un ATTSYNCAinsi si il y a des Attributs, c OK !! Merci d'avance ... LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite Autodesk Expert Elite Team
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