Aller au contenu

exploser textmult


Messages recommandés

Posté(e)

Bonjour

Je cherche à exploser les textmult à l'interieur des blocs:

 

(defun c:expmtxt()

 (vl-load-com)

(setq a (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))

(vlax-for bl a

(vlax-for ent bl

(if (= (vla-get-objectname ent) "AcDbMText")



(command "_explode" ent "")

 
)
 
)

)

(vla-regen (vla-get-activedocument (vlax-get-acad-object)) acActiveViewport)

)

 

J'ai l'erreur suivante:

 

erreur: valeur d'argument incorrecte: commande AutoCAD: #<VLA-OBJECT

IAcadMText 27ad4664>

 

Que faire?

Posté(e)

Merci mais en faisant:

 

(defun c:expmtxt ()
 (vl-load-com)
 (setq	a (vla-get-blocks
    (vla-get-activedocument (vlax-get-acad-object))
  )
 )
 (vlax-for bl a
   (vlax-for ent bl
     (if (= (vla-get-objectname ent) "AcDbMText")
(setq ent2 (vlax-vla-object->ename ent))
(command "_explode" ent2 "")
     )
   )
 )
 (vla-regen (vla-get-activedocument (vlax-get-acad-object))
     acActiveViewport
 )
)

 

cela explose les textmult mais pas ceux contenus dans les blocs, savez-vous pourquoi ?

Posté(e)

Fais attention au (if

Regroupe simplement les actions a exécuter dans un (progn .....) quand la condition est vérifiée.

 

(if (= (vla-get-objectname ent) "AcDbMText")

(progn

(setq ent2 (vlax-vla-object->ename ent))

(command "_explode" ent2 "")

)

)

 

ou alors plus simplement:

 

(if (= (vla-get-objectname ent) "AcDbMText")

(command "_explode" (vlax-vla-object->ename ent) "")

)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Merci du conseil:

 

(defun c:expmtxt ()
 (vl-load-com)
 (setq	a (vla-get-blocks
    (vla-get-activedocument (vlax-get-acad-object))
  )
 )
 (vlax-for bl a
   (vlax-for ent bl
     (if (= (vla-get-objectname ent) "AcDbMText")
(command "_explode" (vlax-vla-object->ename ent) "")
     )


   )
 )
 (vla-regen (vla-get-activedocument (vlax-get-acad-object))
     acActiveViewport
 )
)

 

Mais les textmult dans les blocs restent intacts...

Posté(e)

A mon avis tu ne peux pas utiliser de command sur les objets dans le bloc, tu dois passer par les fonctions lisp pour supprimer le mtext et créer un texte avec les mêmes propriétés.

Aide au téléchargement du cadastre dgfip-download-helper
Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0
Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js

Posté(e)

Oui merci, je suis tombé dessus ce matin et j'y ai trouvé ce code (fait par gile évidemment):

 

(defun c:ExplodeMtextInBlocks (/ explodeNestedMtext hasMt) 

 (vl-load-com) 

 (or *acad* (setq *acad* (vlax-get-acad-object))) 

 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) 

 (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) 


 ;; sous-routine locale 

 (defun explodeNestedMtext (blk / name ref expl lst) 

   (setq name (vla-get-Name blk)) 

   (vla-put-Explodable blk :vlax-true) 

   ;; insérer le bloc en 0,0 

   (setq 

     ref (vla-InsertBlock 

           (vla-get-ModelSpace *acdoc*) 

           (vlax-3d-point '(0. 0. 0.)) 

           name 

           1. 

           1. 

           1. 

           0. 

         ) 

   ) 

   ;; décomposer la référence 

   (setq expl (vlax-invoke ref 'Explode)) 

   ;; pour chaque entité résultante, décomposer si c'est un mtext et ajouter le texte à lst 

   (foreach o expl 

     (if (= (vla-get-ObjectName o) "AcDbMText") 

       (progn 

         (vl-cmdf "_.explode" (vlax-vla-object->ename o)) 

         (setq txt  (vlax-ename->vla-object (entlast)) 

               expl (cons txt (vl-remove o expl)) 

               lst  (cons txt lst) 

         ) 

       ) 

     ) 

   ) 

   ;; supprimer tous les mtextes de la définition 

   (vlax-for o blk 

     (if (= (vla-get-ObjectName o) "AcDbMText") 

       (vla-delete o) 

     ) 

   ) 

   ;; copier les textes dans la définition 

   (vlax-invoke 

     *acdoc* 

     'CopyObjects 

     lst 

     (vla-Add *blocks* (vlax-3d-point '(0. 0. 0.)) name) 

   ) 

   ;; supprimer la référence et les entités résultant de la décomposition 

   (mapcar 'vla-Delete (cons ref expl)) 

 ) 


 ;; routine principale 

 (vlax-for bloc *blocks* 

   (if (= (vla-get-IsLayout bloc) :vlax-true) 

     ;; traitement des mtextes dans les espaces objet et papier 

     (vlax-for mt bloc 

       (if (= "AcDbMText" (vla-get-ObjectName mt)) 

         (vl-cmdf "_.explode" (vlax-vla-object->ename mt)) 

       ) 

     ) 

     ;; traitement des mtextes dans les blocs 

     (progn 

       (setq hasMt nil) 

       (vlax-for mt bloc 

         (if (= "AcDbMText" (vla-get-ObjectName mt)) 

           (setq hasMt T) 

         ) 

       ) 

       (if hasMt 

         (explodeNestedMtext bloc) 

       ) 

     ) 

   ) 

 ) 

 (princ) 

)

 

ça marche mais il semble qu'il y ai un souci de position et d'orientation des textes...

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é