DenisHen Posté(e) le 24 janvier 2007 Posté(e) le 24 janvier 2007 Bonjour à tous... Bon, je vais suivre les conseils et bien m'expliquer. Je tente d'insérer un text "horizontal" avec une flèche d'indication. ex : point n°1 (p1) pointe de la flèchepoint n°2 (p2) queue de la flèche ET point d'inertion du text Si la flèche est en Bas à Gauche, le text aura pour insertion BG.. .. . . .. .... .. ... Haut à Droite, .. .. .... .... . ........ .. .... HD.....et ainsi de suite Problème : 99% des mes dessins sont dans le systeme de coordonnée général mais le SCU a toujours une rotation par rapport à l'écran. J'ai l'angle "horizontal" déjà stocké dans (vlax-ldata-get "Phalene" "AngSCU").Cet angle est en fait la direction des textes horizontaux et en grades. Il y a donc 3 angles en tout :l'angle du SCU, l'angle de la flèche et l'angle "horizontal"... Je ne sais pas comment faire et j'aimerai beaucoup avoir un petit coup de main pour commencer à faire mon LiSP Ce sera en fait un "MTEXT" avec des renseignement sur des regards de réseaux souterrains : ex : Eau usée T= R= Diamètre = Observations... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Patrick_35 Posté(e) le 24 janvier 2007 Posté(e) le 24 janvier 2007 Salut (defun ptins (pt1 pt2 / code) (if (< (car pt1) (car pt2)) (setq code "D") (if (eq (car pt1) (car pt2)) (setq code "C") (setq code "G") ) ) (if (< (cadr pt1) (cadr pt2)) (setq code (strcat "H" code)) (if (eq (cadr pt1) (cadr pt2)) (setq code (strcat "M" code)) (setq code (strcat "B" code)) ) ) code ) Exemples(ptins '(0.0 0.0) '(10.0 10.0)) --> HD(ptins '(0.0 10.0) '(10.0 10.0)) --> MD(ptins '(10.0 0.0) '(10.0 10.0)) --> HC(ptins '(10.0 10.0) '(0.0 0.0)) --> BG(ptins '(10.0 10.0) '(0.0 10.0)) --> MG(ptins '(10.0 10.0) '(10.0 0.0)) --> BC(ptins '(10.0 10.0) '(10.0 10.0)) --> MC @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 24 janvier 2007 Posté(e) le 24 janvier 2007 Est ce que ceci pourra t'aider? Si j'ai bien compris c'est de déterminer ta justification par rapport au départ de ta ligne de rappel. C'est une ébauche (pour voir) je te laisse affiner si c'est ça qui t'interresse ((lambda ( / ) (setq str_txt (getstring T "\nEntrez un texte: ")) (setq pt1 (getpoint "\nPoint de départ du rappel: ") pt2 pt1) (command "_.text" pt1 pause "0.0" str_txt) (setq lst_pt (textbox (entget (entlast)))) (setq dx (- (caadr lst_pt) (caar lst_pt))) (setq dy (- (cadadr lst_pt) (cadar lst_pt))) (while (equal pt2 pt1) (setq pt2 ((lambda ( / key pt p1 p2 p3 p4 alpha) (princ "\nPosition de l'annotation: ") (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (redraw) (setq pt (cadr key)) (setq alpha (angle pt1 pt)) (cond ((and (>= alpha 0.0) (< alpha (/ pi 2))) (setq p1 pt p2 (list (+ (car pt) dx) (cadr pt)) p3 (list (+ (car pt) dx) (+ (cadr pt) dy)) p4 (list (car pt) (+ (cadr pt) dy)) pt_w p1 ) ) ((and (>= alpha (/ pi 2)) (< alpha pi)) (setq p1 pt p2 (list (car pt) (+ (cadr pt) dy)) p3 (list (- (car pt) dx) (+ (cadr pt) dy)) p4 (list (- (car pt) dx) (cadr pt)) pt_w p4 ) ) ((and (>= alpha pi) (< alpha (/ (* 3 pi) 2))) (setq p1 pt p2 (list (- (car pt) dx) (cadr pt)) p3 (list (- (car pt) dx) (- (cadr pt) dy)) p4 (list (car pt) (- (cadr pt) dy)) pt_w p3 ) ) (T (setq p1 pt p2 (list (car pt) (- (cadr pt) dy)) p3 (list (+ (car pt) dx) (- (cadr pt) dy)) p4 (list (+ (car pt) dx) (cadr pt)) pt_w p2 ) ) ) (grdraw pt1 p1 1) (grdraw p1 p2 7) (grdraw p2 p3 7) (grdraw p3 p4 7) (grdraw p4 p1 7) ) ) ) (redraw) (cadr key) )) ) (if (equal pt2 pt1) (princ "\nLa position est confondue avec l'extrèmité!") ) ) (princ) )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
DenisHen Posté(e) le 24 janvier 2007 Auteur Posté(e) le 24 janvier 2007 Merci à tous les deux ! ! ! Surtout que vous avez traité le sujet tellement loin de ce que j'avais commencé, que je vois IMMÉDIATEMENT que vos solution sont bien plus efficaces que la mienne. Je me perdais à comparer des angles. Maintenant, je chercherais d'après les deltas X et Y. Il faut maintenant que je trouve un moyen pour que cela fonctionne quelque soit la rotation du SCU... Peut-on calculer un delta avec des coordonnées du SCU "fenêtre" pour, par exemple :(setq dx (- (caadr lst_pt) (caar lst_pt))) Merci de vous intéresser à mon Pb, Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Patrick_35 Posté(e) le 24 janvier 2007 Posté(e) le 24 janvier 2007 Utilise la fonction Trans @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 24 janvier 2007 Auteur Posté(e) le 24 janvier 2007 Patrick_35 : Merci à toi, je regarderai au boulo l'aide sur cette fonction, ici, je n'ai que de l'anglais. bonuscad : Je pense pouvoir me débrouillé avec ta routine mais je ne comprends pas la ligne 3 (c'est ma mise en forme, pour ma compréhension ;) )(setq str_txt "Texte à insérer" pt1 (getpoint "\nPoint de départ du rappel: ") [surligneur]pt2 pt1 [/surligneur] ) Car quoi que je fasse, rien ne change... Mais je vais regarder de plus près, je tatonne encore à ce niveau... Je ne sais pas quoi faire ni où se trouve mon "choix" d'insertion, je pense que c'est au niveau de la "(cond" avec "alpha"... Ca m'enlève quand même une branche du pied ! ! Mais ne te presses pas... Je regarde et te tiens au courant, si tu le veux ;) Merci encore à vous deux, Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 24 janvier 2007 Auteur Posté(e) le 24 janvier 2007 Effectivement, la super routine de bonuscad fonctionne en SCU général. Il faut donc suivre Patrick_35 et utiliser "Trans"... Merci encore à vous ! ! C'est génial ! ! Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
bonuscad Posté(e) le 24 janvier 2007 Posté(e) le 24 janvier 2007 pt2 pt1 J'affecte pt1 à pt2 pour rentrer dans la boucle while En effet il faut que le point pt2 soit différent de pt1 pour sortir de la boucle, cela évite un rappel de distance nulle. Ici je me suis contenter de dessiner la boundingbox en virtuel pour visualiser l'emplacement futur.Mais tu peux très bien faire un entmod de ton ton entité texte mise à jour en dynamique à la place des (grdraw) NB: ne pas oublier que les points de la boundingbox sont dans le SCO de l'entité texte. Y a plus qu'a .... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
DenisHen Posté(e) le 24 janvier 2007 Auteur Posté(e) le 24 janvier 2007 Merci à toi bonuscad... Je bidouille ton lisp depuis 1 h ! ! Et je m'éclate ! ! Je l'ai modifier pour arriver à ça, en parti : (while (equal pt2 pt1) (setq pt2 ((lambda (/ key pt p1 p2 p3 p4 alpha) (princ "\nPosition de l'annotation: ") (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (redraw) (setq pt (cadr key)) (setq alpha (angle pt1 pt)) (cond ((and (>= alpha 0.0) (< alpha (/ pi 2))) (setq p1 pt p2 (list (+ (car pt) dx) (cadr pt)) p3 (list (+ (car pt) dx) (+ (cadr pt) dy)) p4 (list (car pt) (+ (cadr pt) dy)) pt_w p1 [surligneur]Just "BG"[/surligneur] ) ) ((and (>= alpha (/ pi 2)) (< alpha pi)) (setq p1 pt p2 (list (car pt) (+ (cadr pt) dy)) p3 (list (- (car pt) dx) (+ (cadr pt) dy)) p4 (list (- (car pt) dx) (cadr pt)) pt_w p4 [surligneur]Just "BD" [/surligneur] ) ) ((and (>= alpha pi) (< alpha (/ (* 3 pi) 2))) (setq p1 pt p2 (list (- (car pt) dx) (cadr pt)) p3 (list (- (car pt) dx) (- (cadr pt) dy)) p4 (list (car pt) (- (cadr pt) dy)) pt_w p3 [surligneur] Just "HD"[/surligneur] ) ) (T (setq p1 pt p2 (list (car pt) (- (cadr pt) dy)) p3 (list (+ (car pt) dx) (- (cadr pt) dy)) p4 (list (+ (car pt) dx) (cadr pt)) pt_w p2 [surligneur] Just "HG"[/surligneur] ) ) ) (grdraw pt1 p1 1) (grdraw p1 p2 7) (grdraw p2 p3 7) (grdraw p3 p4 7) (grdraw p4 p1 7) ) ) ) [surligneur](command "_.text" "J" Just pt 0.17 Ang str_txt) [/surligneur] (redraw) (cadr key) ) ) ) (if (equal pt2 pt1) (princ "\nLa position est confondue avec l'extrèmité!") ) ) pour changer les justification du text... Donc, c'est au point dans le SCU général sans rotation "écran" (rotation à l'aide de "resol") et là, je plante... Même avec "Trans" ! ! Un autre truc que je ne saisi pas très bien : dx (- (caadr lst_pt) (caar lst_pt)) dy (- (cadadr lst_pt) (cadar lst_pt)) Je comprends que tu sors les delta X et Y, mais dans mes textes, je n'ai qu'une paire de coordonnées ? ? Le boundtrucbox, je ne connaissais pas du tout, comme grread, c'est excellent ! ! Mon problème, comme celui de beaucoup de débutants je pense, c'est qu'on ne se rend réellement compte d'une commande, d'une fonction ou autre vraiment mieux en pratique plutôt qu'en théorie ! ! En tout cas, un super merci ! ! Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 29 janvier 2007 Auteur Posté(e) le 29 janvier 2007 Merci encore, grace à vous, je finalise ma routine. Mais j'ai encore une petite question : Comment faire pour ne pas créer le premier texte dans la routine de bonuscad mais sortir malgrés ça des coordonnées pour les dx et dy ? ..... ..... (command "_.text" pt1 0.17 Ang str_txt) ;_ Fin de command (setq lst_pt (textbox (entget (entlast))) ;_ Fin de textbox dx (- (caadr lst_pt) (caar lst_pt)) ;_ Fin de - dy (- (cadadr lst_pt) (cadar lst_pt)) ;_ Fin de - ) ;_ Fin de setq ...... ...... Merci encore, Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 29 janvier 2007 Auteur Posté(e) le 29 janvier 2007 Merci ! ! Pour unr fois, j'ai trouvé seul. Enfin, seul....... C'est vite dit, mais j'ai réussi ! ! Merci encore à vous et VIVA CadXP ! ! Denis... ( tout content ) Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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