brunomu Posté(e) le 4 mars 2015 Posté(e) le 4 mars 2015 Bonjour le Forum ! J'aimerais disposer d'un lisp tout bête pour aligner un texte sur un autre texte :(ce lisp existe peut-être déjà mais je ne l'ai pas trouvé) – je clique sur un texte A, puis sur un texte B→ le texte A se déplace en x, de sorte que son point d'insertion ait la même valeur en x que celui du texte B (sans changer la coordonnée y)C'est tout ! En fait, il faudrait 2 lisps : un pour aligner un texte sur un autre en x, un pour l'aligner en y. Quelqu'un sait où trouver ça, ou saurait écrire ce lisp (trop difficile pour mon maigre niveau) ?Merci !!!
brunomu Posté(e) le 4 mars 2015 Auteur Posté(e) le 4 mars 2015 Bonjour, Merci pour ta réponse....mais cette commande n'est pas disponible sur mon poste (ACAD 2013 fr). Que faire-je ?!
speedy Posté(e) le 5 mars 2015 Posté(e) le 5 mars 2015 Bonjour à toutes et à toustu peux trouver ton bonheur là avec le lisp rrt.lsphttp://forums.autodesk.com/t5/autocad-land-desktop/text-alignment-lisp/td-p/1718317/page/2 ou le super http://www.lee-mac.com/dynamictextalignment.html CordialementMichel a
brunomu Posté(e) le 5 mars 2015 Auteur Posté(e) le 5 mars 2015 Bonjour, Merci pour ta réponse. Les 2 lisp sont alléchants, malheureusement :– quand j'utilise rrt.lsp pour déplacer des textes jusqu'à la même valeur en .x, il ne se passe rien...– DynamicTextAlignV1-6.lsp est tellement sophistiqué que je n'obtiens pas le résultat escompté ! :o|
Patrick_35 Posté(e) le 5 mars 2015 Posté(e) le 5 mars 2015 Salut Deux lisps vite fait Pour aligner en X(defun c:txx(/ bas doc ori pos sel txt) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (setq bas (entsel "\nSélectionnez le texte de référence : ")) (setq bas (vlax-ename->vla-object (car bas))) (vl-position (vla-get-objectname bas) '("AcDbText" "AcDbMText")) (ssget (list (cons 0 "TEXT,MTEXT"))) (setq pos (car (vlax-get bas 'insertionpoint))) (progn (vlax-for txt (setq sel (vla-get-activeselectionset doc)) (setq ori (vlax-get txt 'insertionpoint)) (vlax-put txt 'insertionpoint (list pos (cadr ori) (caddr ori))) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) Pour aligner en Y(defun c:txy(/ bas doc ori pos sel txt) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (setq bas (entsel "\nSélectionnez le texte de référence : ")) (setq bas (vlax-ename->vla-object (car bas))) (vl-position (vla-get-objectname bas) '("AcDbText" "AcDbMText")) (ssget (list (cons 0 "TEXT,MTEXT"))) (setq pos (cadr (vlax-get bas 'insertionpoint))) (progn (vlax-for txt (setq sel (vla-get-activeselectionset doc)) (setq ori (vlax-get txt 'insertionpoint)) (vlax-put txt 'insertionpoint (list (car ori) pos (caddr ori))) ) (vla-delete sel) ) ) (vla-endundomark doc) (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
lecrabe Posté(e) le 5 mars 2015 Posté(e) le 5 mars 2015 Hello & MERCI Patrick_35 c la creme des choux (a la creme) ! Bye, lecrabe Autodesk Expert Elite Team
brunomu Posté(e) le 5 mars 2015 Auteur Posté(e) le 5 mars 2015 Merci beaucoup, très chou en effet ! Je sens qu'on s'approche du but...mais les textes ne se déplacent pas au point attendu.Plus précisément, quand je travaille avec un SCU (donc pas en SCG), les textes se déplacent vers l'endroit où ils iraient dans le SCG (j'ai fait le test). → y a-t-il moyen de faire fonctionner le LISP dans le SCU courant ? Merci !
lecrabe Posté(e) le 5 mars 2015 Posté(e) le 5 mars 2015 Hello En plus Mr brunomu desire que le gourmand de choux (a la creme) Patrick_35 fasse du calcul matriciel !? Bye, lecrabe Autodesk Expert Elite Team
Patrick_35 Posté(e) le 6 mars 2015 Posté(e) le 6 mars 2015 (modifié) Voila (defun c:txx(/ bas doc ori pos sel txt) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (setq bas (entsel "\nSélectionnez le texte de référence : ")) (setq bas (vlax-ename->vla-object (car bas))) (vl-position (vla-get-objectname bas) '("AcDbText" "AcDbMText")) (ssget (list (cons 0 "TEXT,MTEXT"))) (setq pos (car (trans (vlax-get bas 'insertionpoint) 1 0))) (progn (vlax-for txt (setq sel (vla-get-activeselectionset doc)) (setq ori (trans (vlax-get txt 'insertionpoint) 1 0)) (vlax-put txt 'insertionpoint (trans (list pos (cadr ori) (caddr ori)) 0 1)) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) (defun c:txy(/ bas doc ori pos sel txt) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (setq bas (entsel "\nSélectionnez le texte de référence : ")) (setq bas (vlax-ename->vla-object (car bas))) (vl-position (vla-get-objectname bas) '("AcDbText" "AcDbMText")) (ssget (list (cons 0 "TEXT,MTEXT"))) (setq pos (cadr (trans (vlax-get bas 'insertionpoint) 1 0))) (progn (vlax-for txt (setq sel (vla-get-activeselectionset doc)) (setq ori (trans (vlax-get txt 'insertionpoint) 1 0)) (vlax-put txt 'insertionpoint (trans (list (car ori) pos (caddr ori)) 0 1)) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) ps : Mon petit tourteau, on dirait que tu as trouvé mon point faible ;)pps : Mon petit décapode, je t'ai donné une réponse pour tes fenêtres. @+ Modifié le 6 mars 2015 par Patrick_35 Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 6 mars 2015 Auteur Posté(e) le 6 mars 2015 Merci beaucoup ! ...problème(s) : – quand je lance la commande, je dois sélectionner 2 fois l'objet de référence– mais surtout, AutoCad me renvoie un message d'erreur : erreur: Le serveur ActiveX a renvoyé l'erreur: nom inconnu: "TEXTALIGNMENTPOINT" A tout hasard, j'ai remplacé TEXTALIGNMENTPOINT par _TEXTALIGNMENTPOINT parce mon AutoCad est en français, mais peine perdue... Des idées ? Merci en tous cas.
Patrick_35 Posté(e) le 6 mars 2015 Posté(e) le 6 mars 2015 – quand je lance la commande, je dois sélectionner 2 fois l'objet de référenceNon, pas besoin :huh: – mais surtout, AutoCad me renvoie un message d'erreur : C'est corrigé avec insertionpoint @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
brunomu Posté(e) le 6 mars 2015 Auteur Posté(e) le 6 mars 2015 Merci ! Reste un problème : l'alignement se fait sur les valeurs de .x ou de .y dans le SCG. Mais du coup dans un SCU, ça n'est pas aligné...
(gile) Posté(e) le 6 mars 2015 Posté(e) le 6 mars 2015 Salut, Peut-être cela te convient-il mieux ? (defun getInputText (/ txt ss i lst) (if (setq txt (car (entsel "\nSélectionnez le texte de référence: "))) (if (wcmatch (cdr (assoc 0 (entget txt))) "*TEXT") (if (setq ss (ssget '((0 . "*TEXT")))) (cons txt (repeat (setq i (sslength ss)) (setq lst (cons (ssname ss (setq i (1- i))) lst)) ) ) ) (prompt "\nL'objet sélectionné n'est pas un texte.") ) ) ) (defun alignText (fun lst / coord elst dxf10 ucsPt) (and lst (setq fun (eval fun) coord (fun (trans (cdr (assoc 10 (entget (car lst)))) (car lst) 1)) ) (foreach txt (cdr lst) (setq elst (entget txt) dxf10 (assoc 10 elst) ucsPt (trans (cdr dxf10) txt 1) ) (entmod (subst (cons 10 (trans (subst coord (fun ucsPt) ucsPt) 1 txt)) dxf10 elst ) ) ) ) (princ) ) (defun c:txx () (alignText 'car (getInputText))) (defun c:txy () (alignText 'cadr (getInputText))) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
brunomu Posté(e) le 6 mars 2015 Auteur Posté(e) le 6 mars 2015 Parfait, bravo ! Merci à tous les contributeurs.
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