Aller au contenu

Messages recommandés

Posté(e)

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....

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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.

Posté(e)
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 pas

Oui, 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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]

Posté(e)

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>

Posté(e)

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))
     )
   )
 )
)

Posté(e)

Interessant comme lisp

Juste une remarque, tu peux éviter la boucle en utilisant vla-item et avec

un vl-catch-all-apply pour éviter de planter le lisp si le nom n'existe

pas.

Une chose que je ne comprends pas dans le lisp est à quoi sert le getxdata

avec le mapcar.

Vérifier que tout s'est bien passé ?

 

@+

 

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é