fabcad Posté(e) le 24 août 2010 Posté(e) le 24 août 2010 Bonjour, Voici une suggestion de développement intéressante :Pouvoir modifier la Justification de mtextes (textes voire attributs de blocs) suivant un angle de façon dynamique. 1 sélection du textuel (j'emploie ce mot pour représenter les 3 types d'objets cités ci-dessus).2 Point de base (qui serait le centre du cercle imaginaire)3 Puis définir la justification suivant l'angle avec l'option des quadrants pour les 5 cas particuliers (0 90 180 270 et 360). 0 = Milieu Gaucheentre 1 et 89 = Bas Gauche90 = Bas Centreentre 91 et 179 = Bas Droite180 = Milieu Droiteentre 181 et 269 = Haut Droite270 = Haut Centreentre 271 et 359 = Haut Gauche360 = Milieu Gauche Merci,
(gile) Posté(e) le 25 août 2010 Posté(e) le 25 août 2010 Salut, Un petit LISP qui répond à ce que j'ai compris.J'ai rajouté la justification Milieu Centre si on fait Entée au lieu de sélectionner le second point. (defun c:djust (/ ent elst base) (if (and (setq ent (car (nentsel "\nSélectionnez un textuel: "))) (setq elst (entget ent)) (member (cdr (assoc 0 elst)) '("ATTRIB" "TEXT" "MTEXT")) (setq base (getpoint "\nPoint de base: ")) ) (progn (entmod (subst (cons 10 (trans base 1 0)) (assoc 10 elst) elst) ) (and (/= (assoc 0 elst) "MTEXT") (entmod (subst (cons 11 (trans base 1 0)) (assoc 11 elst) elst) ) ) (if (not (setq pt (getpoint base "\nCliquer un point ou : ")) ) (justify ent "MC") (progn (setq ang (angle base pt)) (justify ent (cond ((= ang 0.0) "MG") (( ((= ang (* pi 0.5)) "BC") (( ((= ang pi) "MD") (( ((= ang (* 1.5 pi)) "HC") (( ) ) ) ) ) ) (princ) ) (defun justify (ent just / elst org pos vert) (setq elst (entget ent)) (if (= (cdr (assoc 0 elst)) "MTEXT") ;; texte multiligne (progn (setq pos (vl-position just '(nil "HG" "HC" "HD" "MG" "MC" "MD" "BG" "BC" "BD") ) ) (entmod (subst (cons 71 pos) (assoc 71 elst) elst)) ) ;; texte simple ou attribut (progn (if (= (cdr (assoc 0 elst)) "TEXT") (setq vert 73) (setq vert 74) ) (setq org (cdr (assoc 10 elst))) (if (= (cdr (assoc 72 elst)) (cdr (assoc vert elst)) 0) (setq elst (subst (cons 11 org) (assoc 11 elst) elst) ) (setq elst (subst (cons 10 (cdr (assoc 11 elst))) (assoc 10 elst) elst ) ) ) (entmod (subst (cons vert (cond ((wcmatch just "B*") 1) ((wcmatch just "M*") 2) ((wcmatch just "H*") 3) (T 0) ) ) (assoc vert elst) (subst (cons 72 (cond ((wcmatch just "*G") 0) ((wcmatch just "*C") 1) ((wcmatch just "*D") 2) ) ) (assoc 72 elst) elst ) ) ) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fabcad Posté(e) le 25 août 2010 Auteur Posté(e) le 25 août 2010 Thanks Gile, La routine fonctionne mais il faudrait juste que le point de base correspond au nouvel emplacement du textuel après la modification de sa justification. Merci, Fabcad
(gile) Posté(e) le 25 août 2010 Posté(e) le 25 août 2010 Une autre 'vraiment dynamique' (defun c:djust (/ ent elst base gr loop pt) (if (and (setq ent (car (nentsel "\nSélectionnez un textuel: "))) (setq elst (entget ent)) (member (cdr (assoc 0 elst)) '("ATTRIB" "TEXT" "MTEXT")) ) (progn (if (setq base (getpoint "\nSpécifiez le nouveau point de base ou : ")) (progn (setq ins (trans base 1 0)) (if (= (assoc 0 elst) "MTEXT") (entmod (subst (cons 10 ins) (assoc 10 elst) elst)) (entmod (subst (cons 11 ins) (assoc 11 elst) (subst (cons 10 ins) (assoc 10 elst) elst) ) ) ) ) (if (or (= "MTEXT" (cdr (assoc 0 elst))) (and (= "TEXT" (cdr (assoc 0 elst))) (= 0 (cdr (assoc 73 elst))) (= 0 (cdr (assoc 72 elst))) ) (and (= "ATTRIB" (cdr (assoc 0 elst))) (= 0 (cdr (assoc 74 elst))) (= 0 (cdr (assoc 72 elst))) ) ) (setq base (trans (cdr (assoc 10 elst)) 0 1)) (setq base (trans (cdr (assoc 11 elst)) 0 1)) ) ) (setq loop T) (princ "\nCliquer un point ou : ") (while (and (setq gr (grread T 4 0)) loop) (redraw) (cond ((= (car gr) 5) (setq pt (cadr gr)) (grdraw base pt -1 1) (setq ang (angle base pt)) (justify ent (cond ((and ( ((and ( ((and ( ((and ( ((and ( ((and ( ((and ( (T "MG") ) ) ) ((or (equal gr '(2 13)) (equal gr '(2 32)) (member (car gr) '(12 25)) ) (justify ent "MC") (setq loop nil) (redraw) ) ((= 3 (car gr)) (setq loop nil) (redraw)) ) ) ) ) (princ) ) (defun justify (ent just / elst org pos vert) (setq elst (entget ent)) (if (= (cdr (assoc 0 elst)) "MTEXT") ;; texte multiligne (progn (setq pos (vl-position just '(nil "HG" "HC" "HD" "MG" "MC" "MD" "BG" "BC" "BD") ) ) (entmod (subst (cons 71 pos) (assoc 71 elst) elst)) ) ;; texte simple ou attribut (progn (if (= (cdr (assoc 0 elst)) "TEXT") (setq vert 73) (setq vert 74) ) (setq org (cdr (assoc 10 elst))) (if (= (cdr (assoc 72 elst)) (cdr (assoc vert elst)) 0) (setq elst (subst (cons 11 org) (assoc 11 elst) elst) ) (setq elst (subst (cons 10 (cdr (assoc 11 elst))) (assoc 10 elst) elst ) ) ) (entmod (subst (cons vert (cond ((wcmatch just "B*") 1) ((wcmatch just "M*") 2) ((wcmatch just "H*") 3) (T 0) ) ) (assoc vert elst) (subst (cons 72 (cond ((wcmatch just "*G") 0) ((wcmatch just "*C") 1) ((wcmatch just "*D") 2) ) ) (assoc 72 elst) elst ) ) ) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fabcad Posté(e) le 25 août 2010 Auteur Posté(e) le 25 août 2010 Super le dynamisme avec le déplacement ca va être génial :-) si nouveau point = point d'origine alors pas de déplacement mais justification dynamique.sinon déplacement + justification dynamique. Merci,
(gile) Posté(e) le 25 août 2010 Posté(e) le 25 août 2010 J'ai modifié le dernier code pour conserver le point de base d'origine en faisant Entrée, Espace ou clic droit. (donc sélection du textuel + 2 fois entrée = justification MC sans changer le point de base). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 25 août 2010 Posté(e) le 25 août 2010 Salut Ah, (gile) à mis sa routine.Bon, je mets quand même la mienne, histoire de n'avoir pas bossé pour rien ;) (defun c:dtxt(/ ang der dxf jus lec pt1 pt2 sor txt) (and (setq txt (nentsel)) (setq txt (entget (car txt))) (member (cdr (assoc 0 txt)) '("TEXT" "MTEXT" "ATTRIB")) (setq pt1 (getpoint "\nindiquez le point de centre : ")) (setq pt1 (trans pt1 1 0)) (progn (while (not sor) (setq lec (grread T 1 0)) (and der (entdel der)) (cond ((or (and (eq (car lec) 2) (member (cadr lec) '(13 32))) (member (car lec) '(3 25)) ) (setq sor t) ) ((and (eq (car lec) 5) (not (equal (cadr lec) pt1))) (setq pt2 (trans (cadr lec) 1 0) ang (angle pt1 pt2) )(setq bb ang) (cond ((eq ang 0) (setq jus '(0 2 4)) ) ((and (> ang 0) (< ang (/ pi 2))) (setq jus '(0 1 7)) ) ((eq ang (/ pi 2)) (setq jus '(1 1 8)) ) ((and (> ang (/ pi 2)) (< ang pi)) (setq jus '(2 1 9)) ) ((eq ang pi) (setq jus '(2 2 6)) ) ((and (> ang pi) (< ang (+ pi (/ pi 2)))) (setq jus '(2 3 3)) ) ((eq ang (+ pi (/ pi 2))) (setq jus '(1 3 2)) ) (T (setq jus '(0 3 1)) ) ) (cond ((eq (cdr (assoc 0 txt)) "TEXT") (setq txt (subst (cons 11 pt2) (assoc 11 txt) txt) txt (subst (cons 72 (car jus)) (assoc 72 txt) txt) txt (subst (cons 73 (cadr jus)) (assoc 73 txt) txt) ) ) ((eq (cdr (assoc 0 txt)) "ATTRIB") (setq txt (subst (cons 11 pt2) (assoc 11 txt) txt) txt (subst (cons 72 (car jus)) (assoc 72 txt) txt) txt (subst (cons 74 (cadr jus)) (assoc 74 txt) txt) ) ) (T (setq txt (subst (cons 10 pt2) (assoc 10 txt) txt) txt (subst (cons 71 (caddr jus)) (assoc 71 txt) txt) ) ) ) (entmod txt) (entmake (list (cons 0 "LINE") (cons 10 pt1) (cons 11 pt2) ) ) (setq der (entlast)) ) ) ) ) ) (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 25 août 2010 Posté(e) le 25 août 2010 Salut, Je vois que nous n'avons pas compris la même chose... PS : il faut une tolérance autour de 0°, 90°, 180° et 270° sinon on n'arrive pas s'arrêter sur ces angles (grrread désactive le repérage polaire). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 25 août 2010 Posté(e) le 25 août 2010 Salut (gile) Je vois que nous n'avons pas compris la même chose...Ah oui, c'est ce qui fait la richesse du site :D PS : il faut une tolérance autour de 0°, 90°, 180° et 270° sinon on n'arrive pas s'arrêter sur ces angles (grrread désactive le repérage polaire). Pas avec une résol @+l Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
fabcad Posté(e) le 25 août 2010 Auteur Posté(e) le 25 août 2010 Merci à vous deux, C'est vraiment super, merci beaucoup. c'est l'outil que j'avais en tête depuis longtemps. Bonne soirée, Fabcad Gile : je te laisse le soin de rajouter ton programma sur le spoken site :-)
(gile) Posté(e) le 25 août 2010 Posté(e) le 25 août 2010 Pas avec une résol Resol... Pouah !!! ;) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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