Aller au contenu

LISP \"BOX_TEXT


lili2006

Messages recommandés

Bonjour à toutes et tous,

 

Quande je lance ce lisp, AutoCAD me retourne =>

 

Commande: (if (not c:box_text) (load"box_text")) nil

Commande: box_text

Choix d'un MultiTEXTE ou TEXTE: ; erreur: nombre d'arguments trop important

Commande:

 

Le Lisp =>

 

 (defun transpts (apt matrix / )
(list
	(+
		(* (car (nth 0 matrix)) (car apt))
		(* (car (nth 1 matrix)) (cadr apt))
		(* (car (nth 2 matrix)) (caddr apt))
		(cadddr (nth 0 matrix))
	)
	(+
		(* (cadr (nth 0 matrix)) (car apt))
		(* (cadr (nth 1 matrix)) (cadr apt))
		(* (cadr (nth 2 matrix)) (caddr apt))
		(cadddr (nth 1 matrix))
	)
	(+
		(* (caddr (nth 0 matrix)) (car apt))
		(* (caddr (nth 1 matrix)) (cadr apt))
		(* (caddr (nth 2 matrix)) (caddr apt))
		(cadddr (nth 2 matrix))
	)
)
)
(defun v_matr (dpt alphax alphay alphaz echx echy echz / )
(list
	(list
		(* echx (cos alphaz) (cos alphay))
		(- (sin alphaz))
		(sin alphay)
		(car dpt)
	)
	(list
		(sin alphaz)
		(* echy (cos alphaz) (cos alphax))
		(- (sin alphax))
		(cadr dpt)
	)
	(list
		(- (sin alphay))
		(sin alphax)
		(* echz (cos alphax) (cos alphay))
		(caddr dpt)
	)
	(list 0.0 0.0 0.0 1.0)
)
)
(defun c:box_text ( / ent_txt dxf_ent ins_point ht_txt lg_box ht_box ang_box pt_just lst_box transform diag_box sv_osm sv_cmd sv_blp cur_col mask_txt)
(while (null (setq ent_txt (entsel "\nChoix d'un MultiTEXTE ou TEXTE: "))))
(setq dxf_ent (entget (car ent_txt)))
(cond
	((and (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0)) (eq (cdr (assoc 0 dxf_ent)) "MTEXT"))
		(setq
			ins_point (cdr (assoc 10 dxf_ent))
			ht_txt (/ (cdr (assoc 40 dxf_ent)) 5.0)
			lg_box (cdr (assoc 42 dxf_ent))
			ht_box (cdr (assoc 43 dxf_ent))
			ang_box (cdr (assoc 50 dxf_ent))
			pt_just (cdr (assoc 71 dxf_ent))
		)
		(setq lst_box
			(list 
				(list (- ht_txt) ht_txt 0.0)
				(list (+ lg_box ht_txt) ht_txt 0.0)
				(list (+ lg_box ht_txt) (- 0.0 ht_box ht_txt) 0.0)
				(list (- ht_txt) (- 0.0 ht_box ht_txt) 0.0)
			)
		)
		(cond
			((eq pt_just 1)
				(setq transform (v_matr (list 0.0 0.0 0.0) 0.0 0.0 0.0 1.0 1.0 1.0))
			)
			((eq pt_just 2)
				(setq transform (v_matr (list (- (/ lg_box 2.0)) 0.0 0.0) 0.0 0.0 0.0 1.0 1.0 1.0))
			)
			((eq pt_just 3)
				(setq transform (v_matr (list (- lg_box) 0.0  0.0) 0.0 0.0 0.0 1.0 1.0 1.0))
			)
			((eq pt_just 4)
				(setq transform (v_matr (list 0.0 (+ (/ ht_box 2.0)) 0.0) 0.0 0.0 0.0 1.0 1.0 1.0))
			)
			((eq pt_just 5)
				(setq transform (v_matr (list (- (/ lg_box 2.0)) (/ ht_box 2.0) 0.0) 0.0 0.0 0.0 1.0 1.0 1.0))
			)
			((eq pt_just 6)
				(setq transform (v_matr (list (- lg_box) (/ ht_box 2.0) 0.0) 0.0 0.0 0.0 1.0 1.0 1.0))
			)
			((eq pt_just 7)
				(setq transform (v_matr (list 0.0 ht_box 0.0) 0.0 0.0 0.0 1.0 1.0 1.0))
			)
			((eq pt_just 8)
				(setq transform (v_matr (list (- (/ lg_box 2.0)) ht_box 0.0) 0.0 0.0 0.0 1.0 1.0 1.0))
			)
			((eq pt_just 9)
				(setq transform (v_matr (list (- lg_box) ht_box 0.0) 0.0 0.0 0.0 1.0 1.0 1.0))
			)
		)
		(setq lst_box (mapcar '(lambda (x) (transpts x transform)) lst_box))
		(setq transform (v_matr (trans ins_point 0 1) 0.0 0.0 (- ang_box) 1.0 1.0 1.0))
		(setq lst_box (mapcar '(lambda (x) (transpts x transform)) lst_box))
	)
	((and (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0)) (eq (cdr (assoc 0 dxf_ent)) "TEXT"))
		(setq
			diag_box (textbox dxf_ent)
			ins_point (cdr (assoc 10 dxf_ent))
			ht_txt (/ (cdr (assoc 40 dxf_ent)) 5.0)
			ang_box (cdr (assoc 50 dxf_ent))
		)
		(setq lst_box
			(list
				(list (- (caar diag_box) ht_txt) (- (cadar diag_box) ht_txt) 0.0)
				(list (+ (caadr diag_box) ht_txt) (- (cadar diag_box) ht_txt) 0.0)
				(list (+ (caadr diag_box) ht_txt) (+ (cadadr diag_box) ht_txt) 0.0)
				(list (- (caar diag_box) ht_txt) (+ (cadadr diag_box) ht_txt) 0.0)
			)
		)
		(setq transform (v_matr ins_point 0.0 0.0 (- ang_box) 1.0 1.0 1.0))
		(setq lst_box (mapcar '(lambda (x) (transpts x transform)) lst_box))
		(setq lst_box (mapcar '(lambda (x) (trans x 0 1)) lst_box))

	)
	(T
		(princ "\nN'est pas un TEXTE/TEXTE MultiLigne, ou non parallèle au SCG.")
		(setq lst_box nil)
	)
)
(cond
	(lst_box
		(setq sv_osm (getvar "osmode")
		      sv_cmd (getvar "cmdecho")
		      sv_blp (getvar "blipmode")
		      cur_col (getvar "CECOLOR")
		)
		(setvar "cmdecho" 0)
		(setvar "blipmode" 0)
		(setvar "osmode" 0)
		(setvar "CECOLOR" "255")
		(command "_.solid" (car lst_box))
		(setq lst_box (cdr lst_box))
		(repeat 3
			(command (car lst_box))
			(setq lst_box (reverse (cdr lst_box)))
		)
		(command "")
		(setq mask_txt (entlast))
		(setvar "CECOLOR" cur_col)
		(command "_.draworder" (cdar dxf_ent) "" "_above" mask_txt)
		(setvar "cmdecho" sv_cmd)
		(setvar "blipmode" sv_blp)
		(setvar "osmode" sv_cmd)
		(princ "\nCadre de texte colorisé en gris/blanc - 255")
	)
)
(princ)
)

 

 

Je ne sais plus de qui est ce Lisp, désolé !

 

Une idée ?

 

 

[Edité le 12/4/2008 par lili2006]

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Effectivement, (gile), je ne mes souvenais plus du tout de ce lisp !!

 

C'est en partie la raison qui me fait faire un tri dans les Lisps car je finis par rater l'essentiel, la preuve encore ici !

 

Merci encore de ton aide et tes conseils (gile)

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Il faut faire Entrée au lieu de sélectionner.

 

Décalage: 0.50 Couleur: 1

Sélectionnez les textes ou .

Choix des objets:

 

Dans la syntaxe habituelle d'AutoCAD, on accède à ce qui apparaît entre en validant par Entrée, Espace ou clic droit.

À ma connaissance, il n'est pas possible en LISP de faire apparaître ce type d'invites dans la case de l'affichage dynamique (encore un gadget mal abouti).

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

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é