vinz34 Posté(e) le 30 juin 2010 Posté(e) le 30 juin 2010 Bonjour, Mon objectif est de décomposer un bloc et de remplacer les attributs par des textes reprenant leurs valeurs.Les objets décomposés prennent la couleur du calque d'insertion du bloc. (defun c:db (/ l tx layer liste_obj ) (vlax-for n (vla-get-modelspace *acdoc*) (and (= "AcDbBlockReference" (vla-get-objectname n)) (progn (if (= (vla-get-HasAttributes n) :vlax-true) (progn (setq l (vlax-invoke n 'getattributes)) (foreach a l (if (and (= (vla-get-invisible a) :vlax-false) (= (vla-get-visible a) :vlax-true)) (progn (setq tx (vla-addtext (vla-get-modelspace *acdoc*) (vla-get-textstring a) (vla-get-InsertionPoint a) (vla-get-height a))) (vla-put-alignment tx (vla-get-alignment a)) (vla-put-layer tx (vla-get-layer n)) (vla-put-rotation tx (vla-get-rotation a)) (vla-put-stylename tx (vla-get-stylename a)) (vla-update tx) );progn );if );foreach );progn );if hasattributes (setq liste_obj (vlax-invoke n 'explode) layer (vla-get-layer n)) (vla-delete n) (foreach e liste_obj (progn (vla-put-layer e layer) (and (= (vla-get-objectname e) "AcDbAttributeDefinition") (vla-delete e)) );progn );foreach );progn );and isblock );vlax-for ) Ce code fonctionne, mon problème est que sur certains fichiers les textes crées par vla-addtext ne s'insèrent pas au bon endroit mais au point d'origine du dwg (pas du scu). Si ça parle à certains...
Patrick_35 Posté(e) le 30 juin 2010 Posté(e) le 30 juin 2010 Salut Le plus simple est d'utiliser les codes dxf Par exemple (setq att (entget (car (nentsel)))) (entmake (cons (cons 0 "TEXT") (vl-remove-if '(lambda(x) (member (car x) '(-1 0 2 5 70 74 100 280 330))) att))) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
vinz34 Posté(e) le 30 juin 2010 Auteur Posté(e) le 30 juin 2010 Salut, Merci ça fonctionne, j'aurais aimé comprendre pourquoi ce problème.J'avais pensé à osmode, et aux scu, mais rien n'y fait. (defun c:db (/ l tx layer liste_obj) (vlax-for n (vla-get-modelspace *acdoc*) (and (= "AcDbBlockReference" (vla-get-objectname n)) (progn (if (= (vla-get-HasAttributes n) :vlax-true) (progn (setq l (vlax-invoke n 'getattributes)) (foreach a l (if (and (= (vla-get-invisible a) :vlax-false) (= (vla-get-visible a) :vlax-true) ) (progn [surligneur] (setq att (entget (handent (vla-get-handle a)))) (entmake (cons (cons 0 "TEXT") (vl-remove-if '(lambda (x) (member (car x) '(-1 0 2 5 70 74 100 280 330) ) ) att ) ) );entmake[/surligneur] ) ;progn ) ;if ) ;foreach ) ;progn ) ;if hasattributes (setq liste_obj (vlax-invoke n 'explode) layer (vla-get-layer n) ) (vla-delete n) (foreach e liste_obj (progn (vla-put-layer e layer) (and (= (vla-get-objectname e) "AcDbAttributeDefinition") (vla-delete e) ) ) ;progn ) ;foreach ) ;progn ) ;and isblock ) ;vlax-for ) J'ai intégré la modif un peu sauvagement pour tester. Je pensais faire un bon exercice en vla, je pense que je le reprendrai en autolisp en travaillant avec les dxf pour uniformiser. Merci Patrick_35
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