bonuscad Posté(e) le 15 mai 2012 Posté(e) le 15 mai 2012 Bonjour, Suite à une demande sur le forum Autodesk, je me suis amusé à essayé d'écrire une fonction pour réaliser cela.Si celle-ci fonctionne bien (quelque soit le SCU) sur des textes simples, j'aurais trouvé intéressant de l'étendre aux textes multi-lignes. Mais je ne vois pas comment appréhender ceux-ci..., un challenge ? Voici déjà le code pour les textes simples (vl-load-com) (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 c:stabilo ( / js dxf_ent dxf_210 dxf_10 dxf_50 txt_box mat entline PathObj EndDist StartPoint EndPoint tmp tmp0 e_last dxf_last) (setq js (ssget "_+.:E:S" '((0 . "TEXT")))) (cond (js (setq dxf_ent (entget (ssname js 0)) dxf_210 (cdr (assoc 210 dxf_ent)) dxf_10 (trans (cdr (assoc 10 dxf_ent)) dxf_210 0) dxf_50 (cdr (assoc 50 dxf_ent)) txt_box (textbox dxf_ent) mat (mapcar '(lambda (n x d / ) (append n (list x) (list d)) ) (mapcar '(lambda (v) (trans v dxf_210 0)) '((1 0 0) (0 1 0) (0 0 1))) dxf_10 '(0 0 0 1) ) ) (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") (assoc 67 dxf_ent) (assoc 410 dxf_ent) (assoc 8 dxf_ent) '(100 . "AcDbLine") (cons 10 (transpts (car txt_box) mat)) (cons 11 (transpts (polar (car txt_box) dxf_50 (- (caadr txt_box) (caar txt_box))) mat)) '(39 . 0) '(60 . 1) (assoc 210 dxf_ent) ) ) (setq entline (entlast) PathObj (vlax-ename->vla-object entline) EndDist (vlax-curve-getDistAtParam PathObj (vlax-curve-getEndParam PathObj)) StartPoint nil EndPoint nil ) (princ "\nDonnez le debut du surlignage du texte") (while (= 5 (car (setq tmp (grread t 5 1)))) (cond ((= 5 (car tmp)) (if StartPoint (grdraw (trans StartPoint 0 1) (trans tmp0 0 1) -1)) (setq StartPoint (vlax-curve-getClosestPointTo PathObj (trans (cadr tmp) 1 0)) tmp0 (polar (trans StartPoint 0 dxf_210) (+ (* 0.5 pi) dxf_50) (- (cadadr txt_box) (cadar txt_box))) ) (grdraw (trans StartPoint 0 1) (trans tmp0 dxf_210 1) -1) ) (T (princ "\nArrêt anormal de la commande ")) ) ) (entmake (list '(0 . "SOLID") '(100 . "AcDbEntity") (assoc 67 dxf_ent) (assoc 410 dxf_ent) (assoc 8 dxf_ent) '(62 . 2) '(100 . "AcDbTrace") (cons 10 (trans StartPoint 0 dxf_210)) (cons 11 (trans StartPoint 0 dxf_210)) (cons 12 tmp0) (cons 13 tmp0) '(39 . 0) (assoc 210 dxf_ent) ) ) (setq e_last (entlast) dxf_last (entget e_last) ) (princ "\nDonnez la fin du sulignage du texte") (while (= 5 (car (setq tmp (grread t 5 1)))) (cond ((= 5 (car tmp)) (setq EndPoint (vlax-curve-getClosestPointTo PathObj (trans (cadr tmp) 1 0)) tmp0 (polar (trans EndPoint 0 dxf_210) (+ (* 0.5 pi) dxf_50) (- (cadadr txt_box) (cadar txt_box))) ) (setq dxf_last (subst (cons 11 (trans EndPoint 0 dxf_210)) (assoc 11 dxf_last) dxf_last) dxf_last (subst (cons 13 tmp0) (assoc 13 dxf_last) dxf_last) ) (entmod dxf_last) ) (T (princ "\nArrêt anormal de la commande ")) ) ) (entdel entline) (sssetfirst nil js) (ai_draworder "_front") ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Dinosor Posté(e) le 15 mai 2012 Posté(e) le 15 mai 2012 Hello bonuscad, Tout d'abord, merci pour ce code ;) . Pour le multiligne j'ai une fois bidouillé cela ainsi, afin d'éviter de devoir dessiner des trames de fonds derrière des textes. Mais attention, accroche-toi, c'est de la bricole pure... :blink: :blink: J'ai créé un style de cote sans aucune ligne de cote ou d'attache, j'ai imposé un fond en arrière plan pour les textes de cotation. Après je créé une cote sur mon dessin, double clique sur le texte de cote et j'ai mon multiligne avec fond... Seul hic, c'est le centrage horizontal du texte, mais bon, c'était de la bricole qui m'avait dépanné sur le moment. :) Je suis sûr que vous trouverez mieux bien sûr, mais je trouvais rigolo d'en parler...Hi, hi, il y en a qui vont me trouver cinglé après ça, mais j'adore sortir des sentiers battus ! B) Seuls nous allons vite, ensemble nous allons plus loin... CPU Intel 3,5Go / Nvidia RTX-3090 AutoCad (Architecture) 2022 - Lumion PRO BMW R-1200-RT, c'est moche, oui... je sais... www.neda.ch
Tramber Posté(e) le 15 mai 2012 Posté(e) le 15 mai 2012 (modifié) Chapeau bas en tous les cas ;) Un défi serait d'accrocher mieux à chaque lettre.... Modifié le 15 mai 2012 par Tramber défi Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
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