pascal19 Posté(e) le 3 novembre 2011 Posté(e) le 3 novembre 2011 BonjourJe 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?
vincentp010 Posté(e) le 3 novembre 2011 Posté(e) le 3 novembre 2011 Rajoute avant ta commande explode(setq ent (vlax-vla-object->ename ent)) 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
pascal19 Posté(e) le 3 novembre 2011 Auteur Posté(e) le 3 novembre 2011 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 ?
bonuscad Posté(e) le 3 novembre 2011 Posté(e) le 3 novembre 2011 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
pascal19 Posté(e) le 3 novembre 2011 Auteur Posté(e) le 3 novembre 2011 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...
vincentp010 Posté(e) le 3 novembre 2011 Posté(e) le 3 novembre 2011 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
pascal19 Posté(e) le 4 novembre 2011 Auteur Posté(e) le 4 novembre 2011 C'est ce que je craignais!merci pour votre aide
Fraid Posté(e) le 4 novembre 2011 Posté(e) le 4 novembre 2011 Bonjour, Une demande similaire http://cadxp.com/index.php?/topic/30142-blocage-dans-les-blocs/ https://github.com/Fraiddd
pascal19 Posté(e) le 4 novembre 2011 Auteur Posté(e) le 4 novembre 2011 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...
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