DenisHen Posté(e) le 29 avril 2015 Posté(e) le 29 avril 2015 Bonjour à tous, Voilà, j'ai un petit problème d'angle ou d'unités avec un bout de code récupéré depuis un LiSP de (gile) qui me sort la valeur de l'angle d'un segment d'une polylign ou d'une droite, Je poste ma macro entière :(defun c:TXTversPTRL () (setvar "cmdecho" 1) (setq old_osmd (getvar "osmode") old_abase (getvar "angbase") old_adir (getvar "angdir") old_aunits (getvar "aunits") ) ;_ Fin de setq (setvar "osmode" 0) (setvar "angbase" 0) (setvar "angdir" 0) (setvar "cmdecho" 0) (setvar "aunits" 2) (setq Txt_ptrl (car (entsel "\nSélectionnez le texte du PTRL :"))) (wcmatch (cdr (assoc 0 (setq elst (entget Txt_ptrl)))) "*TEXT") (setq txt (cdr (assoc 1 elst))) ;; Séparation de la chaîne de caractères en une liste de 2 chaînes (setq txt (gc:str2lst txt " ")) ; ("(0.80)" "Zs=52.78") ;; prf = Supression du 1er et dernier caractère de la 1ère chaîne de caractères (setq prf (substr (car txt) 2 (- (strlen (car txt)) 2))) ; "0.80" ;; ZGs = Séparation de la seconde chaîne de caractères, en gardant le 2ème élèment (setq ZGs (cadr (gc:str2lst (cadr txt) "="))) ; "52.78" (setq pt_ins (getpoint "\nPoint d'insertion du PTRL : ")) (setvar "attdia" 0) (command "inserer" "PTRL_PF_ZG" pt_ins "1" "1" "0" prf ZGs) (setvar "attdia" 1) (setq prf (strcat "pf:" prf)) (setq ZGs (strcat "Zgs=" ZGs)) ;Récupération du segment de la polyligne (while (null (setq e_seg (entsel "\nSélectionnez le segment de la polyligne : ")); <-----------Sélection ici de ma polyligne ) ;_ Fin de null ) ;_ Fin de while ;(princ "\nDrapeau 01") (setq typent (cdr (assoc 0 (setq dxf_ent (entget (car e_seg)))))) (cond ((or (eq typent "XLINE") (eq typent "RAY")) (setq dxf_11 (cdr (assoc 11 dxf_ent))) (setq x_alpha (atan (/ (cadr dxf_11) (car dxf_11)))) (grdraw (trans (cdr (assoc 10 dxf_ent)) 0 1) (polar (trans (cdr (assoc 10 dxf_ent)) 0 1) x_alpha (distance (getvar "vsmin") (getvar "vsmax")) ) ;_ Fin de polar -1 1 ) ;_ Fin de grdraw ) ((eq typent "LINE") (setq x_alpha (angle (cdr (assoc 10 dxf_ent)) (cdr (assoc 11 dxf_ent)) ) ;_ Fin de angle ) ;_ Fin de setq (grdraw (trans (cdr (assoc 10 dxf_ent)) 0 1) (trans (cdr (assoc 11 dxf_ent)) 0 1) -1 1 ) ;_ Fin de grdraw ) ((or (eq typent "LWPOLYLINE") (and (eq typent "POLYLINE") (zerop (boole 1 118 (cdr (assoc 70 dxf_ent)))) ) ;_ Fin de and ) ;_ Fin de or (setq l_2pt (near_vertex_arr e_seg)) (grdraw (car l_2pt) (cadr l_2pt) -1 1) (if (zerop (caddr l_2pt)) (setq x_alpha (angle (trans (car l_2pt) 1 0) (trans (cadr l_2pt) 1 0) ) ;_ Fin de angle ) ;_ Fin de setq (progn (setq x_alpha nil) (princ "\nNe peut obtenir un angle depuis ce type d'objet!") ) ;_ Fin de progn ) ;_ Fin de if ) (T (princ "\nNe peut obtenir un angle depuis ce type d'objet!") (redraw) ) ) ;_ Fin de cond ;(princ "\Drapeau 04") ;Ecriture et déplacement du texte le long du texte (command "textstyle" "Profondeur") ;(princ "\Drapeau 05") ;Ecriture de la profondeur sur le point du PTRL (setq x_alpha (* (/ x_alpha 90) 100)) ; passage de degrés à grades <--------------Je pense que mon problème est ici-------- (command "texte" "j" "mc" pt_ins x_alpha prf) ;Déplacement de la profondeur depuis le pt_ins pour le placer ;correctement le texte le long du segment de la Pline (command "_move" "d" pt_ins "pause") (command "texte" pt_ins x_alpha ZGs) (command "_move" "d" pt_ins pause) ;Réaffectation des variables AutoCAD (setvar "osmode" old_osmd) (setvar "angbase" old_abase) (setvar "angdir" old_adir) (setvar "aunits" old_aunits) (princ) ) ;_ Fin de defun ;Recherche de l'angle du segment cliqué, (Bout de programme de (gile) : ALTxt.lsp) (defun near_vertex_arr (obj / obj dxf_obj obj_vlax pt_sel par pt_first pt_snd i bulge e_next ) (setq dxf_obj (entget (car obj))) (vl-load-com) (setq obj_vlax (vlax-ename->vla-object (car obj)) pt_sel (vlax-curve-getClosestPointTo obj_vlax (trans (osnap (cadr obj) "_near") 1 0) ) ;_ Fin de vlax-curve-getClosestPointTo par (vlax-curve-getParamAtPoint obj_vlax pt_sel) pt_first (trans (vlax-curve-getPointAtParam obj_vlax (fix par)) 0 1) pt_snd (trans (vlax-curve-getPointAtParam obj_vlax (1+ (fix par))) 0 1 ) ;_ Fin de trans i 0 ) ;_ Fin de setq (cond ((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (while (or (/= (caar dxf_obj) 42) (if (< i (fix par)) (setq i (1+ i)) ) ;_ Fin de if ) ;_ Fin de or (setq bulge (cdadr dxf_obj) dxf_obj (cdr dxf_obj) ) ;_ Fin de setq ) ;_ Fin de while ) (T (setq e_next (entnext (car obj))) (repeat (fix par) (setq e_next (entnext e_next))) (setq bulge (cdr (assoc 42 (entget e_next)))) ) ) ;_ Fin de cond (list pt_first pt_snd bulge) ) ;_ Fin de defun ;; gc:str2lst ;; Transforme un chaine avec séparateur en liste de chaines ;; Arguments ;; str : la chaîne ;; sep : le séparateur (defun gc:str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (gc:str2lst (substr str (+ (strlen sep) pos 1)) sep)) (list str) ) ;_ Fin de if ) ;_ Fin de defun Lorsque je sélectionne mon segment de polyligne, "x_alpha" est toujours proche de l'angle. Donc, lorsque le texte s'écrit, il n'est pas aligné avec la polyligne... Merci de bien vouloir m'aider... Toute remarque sera la bienvenue, même sur la "propreté" de mon LiSP... 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 29 avril 2015 Posté(e) le 29 avril 2015 Bonjour, Relis ma réponse (c'est vrai que j'avais modifié ma réponse entre temps) ça répond à ta question! 1 Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
DenisHen Posté(e) le 29 avril 2015 Auteur Posté(e) le 29 avril 2015 Bonjour à tous, Merci encore BonusCAD pour cette réponse, ça fonctionne nikel... 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)
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