Aller au contenu

Petit problème d'angle avec la variable "x_alpha"


Messages recommandés

Posté(e)

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)

Posté(e)

Bonjour,

 

Relis ma réponse (c'est vrai que j'avais modifié ma réponse entre temps) ça répond à ta question!

  • Upvote 1

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

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)

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité