vinz34 Posté(e) le 4 février 2008 Posté(e) le 4 février 2008 Bonjour, Je cherche à créer un style de texte annotatif, mais je ne trouve pas le code correspondant.Pour l'instant je crée mon style en autolisp : (if (not (tblsearch "STYLE" "NOMDUSTYLE")) (entmake (append '((0 . "STYLE") (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "NOMDUSTYLE") (70 . 0) (40 . 1.5) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 2.5) (3 . "verdana.TTF") (4 . ""))))) Je pense que la solution est de passer par le vlisp. Si quelqu'un a une idée....
Patrick_35 Posté(e) le 4 février 2008 Posté(e) le 4 février 2008 Salut (defun ajsty(nom police / fic sty) (setq sty (vla-get-textstyles (vla-get-activedocument (vlax-get-acad-object)))) (if (and (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list sty nom))) (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-add (list sty nom))))) (progn (or (setq fic (findfile police)) (setq fic (findfile (strcat "c:/windows/fonts/" police))) ) (if fic (progn (vla-put-fontfile (vla-item sty nom) fic) (princ (strcat "\nAjout du style " nom " avec la police " police "\n")) T ) (progn (vla-delete (vla-item sty "NOMDUSTYLE")) (princ (strcat "\nLa police " police " est introuvable\n")) nil ) ) ) (progn (princ (strcat "\nLe style " nom " est existant\n")) nil ) ) ) Et pour tester(if (ajsty "NOMDUSTYLE" "verdana.ttf") (alert "Style ajouté") (alert "Style pas ajouté") ) @+ 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 4 février 2008 Auteur Posté(e) le 4 février 2008 OK Patrick, tu essies de m'embrouiller ? J'ai encore du mal avec le vlisp, mais d'après ce que je comprends tu crées le style s'il n'existe pas.Ca commence à faire long juste pour ça, d'autant plus qu'avec le code dxf je lui donne plus de paramètres. Bref ça ne crée pas un style annotatif et c'est bien là le problème.
Patrick_35 Posté(e) le 4 février 2008 Posté(e) le 4 février 2008 OK Patrick, tu essies de m'embrouiller ?Ce n'est pas le but. Je pensais juste te donner un max d'infos pour mieux maitriser le vlisp que de balancer directement la ligne de code sans tests car on se doit de penser à tout pour un bon lisp. d'après ce que je comprends tu crées le style s'il n'existe pasOui, et pour voir aussi si la police existe. Bref ça ne crée pas un style annotatif et c'est bien là le problème.J'ai cru comprendre qu'il s'agissait d'un style de texte. N'ayant que la 2006, donc pas le style annotatif, mais ce sujet devrait t'aider @+ 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 4 février 2008 Auteur Posté(e) le 4 février 2008 Merci pour tes enseignements et ton lien.Maintenant je sais créer un style de repères multiples annotatif. Malheureusement, ça ne fonctionne pas de la même manière avec les styles de textes.La propriété "Annotative" n'est pas membre de 'AcadTextStyle'. [Edité le 4/2/2008 par vinz34]
Arcasdk Posté(e) le 4 février 2008 Posté(e) le 4 février 2008 Il devient fort le Vinz.... ;) J'essai de suivre mais c'est pas évident!!! <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
vinz34 Posté(e) le 4 février 2008 Auteur Posté(e) le 4 février 2008 Enfin, j'ai trouvé la bonne piste : Il y a le code dxf de l'annotativité (j'ai vraiment eu du mal a le trouver depuis le temps que je le cherche) (-3 ("AcadAnnotative" (1000 . "AnnotativeData") (1002 . "{") (1070 . 1) (1070 . 1) (1002 . "}") )) Sinon en passant par le vlisp (je donne le code tel que je l'ai trouvé) (defun SetTxtAnnotative (Name / *doc* *text* app xd1 xd2 rt1 rt2) (vl-load-com) (setq *text* (vla-get-textstyles (vla-get-activedocument (vlax-get-acad-object)) ) ) (vlax-for itm *text* (setq *textstl* (cons (vla-get-name itm) *textstl*)) ) (if (member Name *textstl*) (progn (setq obj (vla-item *text* Name) app "AcadAnnotative" ) (regapp app) (setq xd1 (vlax-make-safearray vlax-vbInteger '(0 . 5))) (vlax-safearray-fill xd1 (list 1001 1000 1002 1070 1070 1002) ) (setq xd2 (vlax-make-safearray vlax-vbVariant '(0 . 5))) (vlax-safearray-fill xd2 (list "AcadAnnotative" "AnnotativeData" "{" (vlax-make-variant 1 vlax-vbInteger) (vlax-make-variant 1 vlax-vbInteger) "}" ) ) (vla-setxdata obj xd1 xd2) (vla-getxdata obj app 'rt1 'rt2) (mapcar (function (lambda (x y) (cons x y) ) ) (vlax-safearray->list rt1) (mapcar 'vlax-variant-value (vlax-safearray->list rt2)) ) ) ) )
Patrick_35 Posté(e) le 4 février 2008 Posté(e) le 4 février 2008 Interessant comme lispJuste une remarque, tu peux éviter la boucle en utilisant vla-item et avecun vl-catch-all-apply pour éviter de planter le lisp si le nom n'existepas.Une chose que je ne comprends pas dans le lisp est à quoi sert le getxdataavec le mapcar.Vérifier que tout s'est bien passé ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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