Aller au contenu

déplacer un texte encadré


bella.ali

Messages recommandés

Coucou

 

Je pense qu'on peut te "lisper" un truc mais j'aimerais savoir ce que tu attends de nous ...

 

Je te propose de sélectionner le texte et une pause pour que l'utilisateur déplace son texte à l'endroit souhaité, ensuite il ne restera qu'à recréer des entités d'encadrement et de ligne de repère automatiquement.

Est-ce que ça te va ? parce que cette méthode implique un traitement texte par texte.

Ou bien tu veux quelque chose de plus "automatique"... mais dans ce cas il faut nous dire comment déplacer les textes et comment mettre la ligne de repère.

Est-ce que les textes doivent rester dans leur orientation originelle ou une rotation est à prévoir?

 

Amicalement

 

ps: je ne comprends pas la réponse de Lili2006 mais il va sans doute l'expliciter.

Lien vers le commentaire
Partager sur d’autres sites

Re bonjour

 

Merci pour vos réponses. Ça a l'air assez compliqué.

 

Je vais me résoudre à le faire manuellement

 

Si tu en as vraiment beaucoup à faire...

 

Autrement en adaptant rapidement un lisp que j'avais proposé, cela pourrait le faire (sachant qu'une automatisation ne vaut pas le ce qui est fait à la main)

 

(defun c:dispatch_textoverid ( / js_mt nb_text inc_ang ang ent obj_vlax dxf_ent mnpt mxpt mintpt maxpt offset)
(setq js_mt (ssget '((0 . "*TEXT"))))
(cond
	(js_mt
		(cond
			((> (setq nb_text (sslength js_mt)) 1)
				(setq inc_ang (/ (* 2 pi) nb_text) ang 0.0)
				(repeat nb_text
					(setq
						ent (ssname js_mt (setq nb_text (1- nb_text)))
						obj_vlax (vlax-ename->vla-object ent)
						dxf_ent (entget ent)
						pt_ins (cdr (assoc 10 dxf_ent))
					)
					(vla-GetBoundingBox obj_vlax 'mnpt 'mxpt)
					(setq
						minpt (trans (safearray-value mnpt) 0 1)
						maxpt (trans (safearray-value mxpt) 0 1)
					)
					(setq offset (* (distance minpt maxpt) 2.0))
					(entmod (subst (cons 10 (polar pt_ins ang offset)) (assoc 10 dxf_ent) dxf_ent))
					(entmake
						(list
						'(0 . "LINE")
						'(8 . "NOEUD1")
						(cons 10 pt_ins)
						(cons 11 (polar pt_ins ang offset))
						)
					)
					(setq ang (+ ang inc_ang))
				)
			)
		)
	)
)
)

 

Une fois cela fait, à l'aide d'un filtre rapide effacer tout tes encadrements de texte situés sur le calque NOEUD1

et les refaire à l'aide de ceci

(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 ( / js n ent_txt 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)
(princ "\nChoix des MultiTEXTE ou TEXTE: ")
(setq js (ssget '((0 . "*TEXT"))) n -1)
(cond
(js
(repeat (sslength js)
(setq dxf_ent (entget (ssname js (setq n (1+ n)))))
;	(while (null (setq ent_txt (nentsel "\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))
	)
	((or
		(and (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0)) (eq (cdr (assoc 0 dxf_ent)) "TEXT"))
		(and (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0)) (eq (cdr (assoc 0 dxf_ent)) "ATTRIB"))
	 )
		(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)
		(command "_.pline" (car lst_box) (cadr lst_box) (caddr lst_box) (cadddr lst_box) "_close")
		(setvar "cmdecho" sv_cmd)
		(setvar "blipmode" sv_blp)
		(setvar "osmode" sv_cmd)
	)
)
)
)
)
(princ)
)

 

J'ai pas mieux à proposer rapidement

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é