lecrabe Posté(e) le 27 octobre 2009 Partager Posté(e) le 27 octobre 2009 Hello SVP je desire une routine qui agissent de 2 facons sur les TEXT/MTEXT avec une selection AutoCAD classique :) J'ai cherche mais je n'ai pas trouve ! Changement d'echelle relatif ET changement de rotation relatif TROT & TSCALE qui demandent - soit un facteur d'echelle = +/- xx.xx- soit un facteur de rotation = +/- xx.xx Par exemple, tous les TEXT & MTEXT vont changer relativement d'echelle et DIMINUER de UN TIERS car j'ai donne le facteur : -1.333 Par exemple, tous les TEXT & MTEXT vont tourner relativement de 45 degres (Sens Trigo) car j'ai donne une rotation de : 45.0Donc si possible, interpretation du systeme d'angle et du sens Merci d'avance, Le Decapode (Tripatouilleur de textes) Autodesk Expert Elite Team Lien vers le commentaire Partager sur d’autres sites More sharing options...
Matt666 Posté(e) le 28 octobre 2009 Partager Posté(e) le 28 octobre 2009 Salut !Un truc un peu comme ça ?(defun fonction_relative (i c / sel r n cmdecho ent) (defun CPE_Error (msg) (if (/= msg "Fonction annulée") (princ (strcat "\nErreur -> " msg)) ) (command "_.undo" "_end") (setvar "CMDECHO" cmdecho) (setq *error* m:err m:err nil ) (princ) ) (setq m:err *error* *error* CPE_Error) (if (and (setq sel (ssget (list (cons 0 "TEXT,MTEXT")))) (setq r (getreal i)) ) (progn (setq n 0 cmdecho (getvar "cmdecho") ) (setvar "cmdecho" 0) (command "_.undo" "d") (while (< n (sslength sel)) (setq ent (ssname sel n) n (1+ n) ) (command c ent "" (cdr (assoc 10 (entget ent))) r) ) (redraw) (command "_.undo" "f") (setvar "cmdecho" cmdecho) ) ) (setq *error* m:err m:err nil) (princ) ) ;;; Echelle relative (defun c:srel () (fonction_relative "\nFacteur d'échelle : " "_scale") (princ) ) ;;; Rotation relative (defun c:rrel () (fonction_relative "\nRotation : " "_rotate") (princ) ) Entrer "SREL" pour echelle relative et "RREL" pour rotation relative. [Edité le 28/10/2009 par Matt666] "Chacun compte pour un, et nul ne compte pour plus d'un." Lien vers le commentaire Partager sur d’autres sites More sharing options...
Matt666 Posté(e) le 28 octobre 2009 Partager Posté(e) le 28 octobre 2009 Ah pardon j'avais pas vu que tu avais déjà des noms de commande... A toi de le changer si tu le souhaites. Le relatif, c'est le point d'insertion du texten dans la fonction. "Chacun compte pour un, et nul ne compte pour plus d'un." Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 28 octobre 2009 Partager Posté(e) le 28 octobre 2009 Deux de mes créations qui datent un peu! (Une gagnerai a être réécrite: la seconde ...). Mais d'autre vont certainement faire quelque chose de plus conscis. En attendant... ((lambda ( / jsel scal_txt nbr_txt ent_dxf) (princ "\nSélectionner les textes à modifier: ") (setq jsel (ssget '((-4 . " (0 . "TEXT") (0 . "MTEXT") (-4 . "OR>")) ) ) (cond (jsel (initget 7) (setq scal_txt (getreal "\nEchelle de transformation pour la taille des textes selectionnés: ") nbr_txt 0 ) (repeat (sslength jsel) (setq ent_dxf (entget (ssname jsel nbr_txt))) (entmod (subst (cons 40 (* scal_txt (cdr (assoc 40 ent_dxf)))) (assoc 40 ent_dxf) ent_dxf ) ) (setq nbr_txt (1+ nbr_txt)) ) (princ (strcat (itoa nbr_txt) " ligne(s) de texte a (ont) changé(s) de taille.")) ) (T (princ "\nAucun Texte ou MTexte trouvé.")) ) (prin1) )) (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:pivotext ( / jsel n angplus pt_base dxf_ent ins_point ht_txt lg_box ht_box ang_box pt_just lst_box transform diag_box) (princ "\nSélectionner les Textes/MTextes à faire pivoter sur leur point central: ") (setq jsel (ssget '((0 . "*TEXT"))) n -1) (cond (jsel (initget 1) (setq angplus (getangle "\nAngle à rajouter pour faire pivoter les textes selectionnés: ")) (initget "Insertion MCentre _Insert MCenter") (if (eq (getkword "\nRotation des textes par rapport au point [insertion/MCentre]? : ") "MCenter") (setq pt_base T) (setq pt_base nil) ) (repeat (sslength jsel) (setq dxf_ent (entget (ssname jsel (setq n (1+ n))))) (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)) 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 (if pt_base (if (eq (cdr (assoc 0 dxf_ent)) "TEXT") (setq dxf_ent (subst (cons 72 1) (assoc 72 dxf_ent) dxf_ent) dxf_ent (subst (cons 73 2) (assoc 73 dxf_ent) dxf_ent) dxf_ent (subst (cons 11 (trans (mapcar '(lambda (x y) (/ (+ x y) 2.0)) (car lst_box) (caddr lst_box)) 1 (cdar dxf_ent))) (assoc 11 dxf_ent) dxf_ent) ) (setq dxf_ent (subst (cons 71 5) (assoc 71 dxf_ent) dxf_ent) dxf_ent (subst (cons 10 (trans (mapcar '(lambda (x y) (/ (+ x y) 2.0)) (car lst_box) (caddr lst_box)) 1 (cdar dxf_ent))) (assoc 10 dxf_ent) dxf_ent) ) ) ) (setq dxf_ent (subst (cons 50 (rem (+ (cdr (assoc 50 dxf_ent)) angplus) (* 2 pi))) (assoc 50 dxf_ent) dxf_ent)) (entmod dxf_ent) ) ) ) ) ) (print (1+ n)) (princ " ligne(s) de texte a (ont) tourné à ") (princ (angtos angplus)) (if pt_base (princ " et points d'alignement fixés à MCentre")) (prin1) ) 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 More sharing options...
lecrabe Posté(e) le 28 octobre 2009 Auteur Partager Posté(e) le 28 octobre 2009 Hello Matt666 Je viens de tester ta routine dans MAP 2006 et dans MAP 2010, ca marche bien ! :) Bien entendu, il faut manipuler dans le SCG (et non pas dans un SCU) MAIS cela me convient tout a fait !! :D Je n'ai pas teste la version Bonuscad, mais j'ai confiance et je suppose qu'elle gere les SCus vu la complexite et les matrices de transformation ... :casstet: Encore Merci pour vos efforts et votre aide, Le Decapode Autodesk Expert Elite Team Lien vers le commentaire Partager sur d’autres sites More sharing options...
Matt666 Posté(e) le 28 octobre 2009 Partager Posté(e) le 28 octobre 2009 Bah de rien !! Bon par contre, pour régler le problème que tu soulèves, je suis très mauvais. Voire un peu complètement novice... "Chacun compte pour un, et nul ne compte pour plus d'un." Lien vers le commentaire Partager sur d’autres sites More sharing options...
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