Aller au contenu

problème d'angle avec (getangle


DenisHen

Messages recommandés

Bonjour à tous...

 

Voilà, j'ai fais un petit bout de LiSP qui fait un texte multiligne avec des renseignements des diverses côtes d'un Tampon (X, Y, Z, Radier 1, Radier 2...).

 

Mon LiSP demande les coordonnées du tampon en cliquant sur son centre, puis demande l'endroit de l'insertion de l'étiquette et ensuite, demande la rotation du texte multiligne...

 

C'est là que je cale... Voici un bout de mon code :

  
 (setvar "osmode" 1)
 (setvar "angbase" 0)
 (setvar "angdir" 0)
 (setvar "cmdecho" 0)
 (setvar "aunits" 0)
 (setvar "osmode" 1)

 (setq pt_ins (getpoint "\nPoint à coter : "))
 (setq X (rtos (car pt_ins) 2 2))
 (setq Y (rtos (cadr pt_ins) 2 2))
 (setvar "osmode" 0)
 (setq pt_ins_Txt (getpoint "\nPoint d'insertion du bloc : "))
 (command "_.line" pt_ins pt_ins_Txt "")

 (setq angl_Txt (getangle pt_ins_Txt "\nOrientation du bloc : "))
 (setq angl_Txt (/ (* angl_Txt 200) pi))
 (setq ZOld (getreal "\nEntrez l'ancien Z tampon : "))
 (setq ZNew (getreal "\nEntrez le nouveau Z tampon : "))
 (setq Text (strcat "X="
                    X
                    "\\PY="
                    Y
                    "\\PZ="
                    (rtos ZNew 2 2)
                    ) ;_ Fin de strcat
       ) ;_ Fin de setq
 (princ Text)

..........

 (command "_.-MTEXT" pt_ins_Txt "R" angl_Txt pt_ins_Txt Text "")

 

Le problème est que mon angle de rotation du texte n'est pas le même entre le "getangle" et la rotation du MText lors de l'exécution de "command"...

 

J'ai essayé divers méthodes (radian, degrés, grades...) mais rien n'y fait...

 

Si quelqu'un a une idée, je suis preneur...

 

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)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Essaye le code ci-dessous, il devrait fonctionner quelles que soient les valeurs des variables système AUNITS, ANGBASE et ANGDIR (regarde l'aide pour les fonctions getorient et angtos).

 

(defun c:test (/ pt_ins_Txt angl_Txt Text)
 (setq pt_ins_Txt (getpoint "\nPoint d'insertion du bloc : "))
 (setq angl_Txt (getorient pt_ins_Txt "\nOrientation du bloc : "))
 (setq Text "ceci est un test")
 (command "_.-MTEXT"
   pt_ins_Txt
   "R"
   (angtos (+ angl_Txt (getvar 'angbase)))
   pt_ins_Txt
   Text
   ""
 )
)

 

Si tu veux conserver le maximum de précision (par defaut c'est la valeur de AUPREC qui est utilisée) tu peux faire :

(angtos (+ angl_Txt (getvar 'angbase)) (getvar 'aunits) 16)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Denis,

 

Voir la fonction (getorient [pt] [message]) qui est similaire à la fonction getangle, sauf que la valeur retournée par getorient n'est pas affectée par les variables ANGBASE et ANGDIR. Getorient mesure toujours les angles en prenant comme sens l'est à 0 et le sens trigo.

Voir aussi la fonction angtos pour transformer des radians en degrés ou grades.

 

Il est souvent plus simple de saisir un deuxième point (c'est ce qu'on fait le plus souvent quand on saisit lors d'une commande demandant un angle, c'est rare qu'on tape 90, 100 ou 270). Le plus simple c'est de faire la même chose dans le lisp, au lieu de s'embêter avec des angles. Si besoin, j'utilise aussi (polar ), qui fait que je peux rester en radian, même si j'utilise une ligne (command ...).

 

A noter que pour éviter de saisir un cadre pour le mtext, on peut aussi indiquer "_w" à 0

 

par exemple :

 

(command "_.-MTEXT" "_non" pt_ins_Txt "_r" "_non" (polar pt_ins_txt (angle pt_ins pt_ins_txt) 1) "_w" 0 Text "")

 

qui place le texte en pt_ins_txt, avec un angle donné par les points pt_ins et pt_ins_txt

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Le problème est que mon angle de rotation du texte n'est pas le même entre le "getangle" et la rotation du MText lors de l'exécution de "command"...

 

Après quelques essais qui m'ont laissés songeur, il semblerait que la fonction _mtext ne fonctionne pas bien au niveau des angles lorsque ANGBASE n'est pas à l'est. On met, par exemple l'angle 0 au Nord (ANGBASE=90), comme on le voit souvent sur des plans de topographes, on place un mtext à l'angle 0. On s'attend à ce que le texte soit vertical. Non, il est horizontal et tourné vers l'est, comme si mtext ne tenait pas compte de angbase. Bizarre...

 

La commande TEXTE, qui n'est pas multiligne, tient compte de angbase.

 

Comme j'utilise toujours autocad avec l'angle 0 à l'est, ce fonctionnement curieux au niveau des mtext n'apparait pas.

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Effectivement getorient ne tient pas compte ANGDIR et ANGBASE (et c'est là tout l'intérêt de cette fonction), mais par contre avec la fonction angtos, il faut considérer ANGBASE, c'est purqoi je proposais :

 

;; utilise la précision définie dans AUPREC
(angtos (+ angl_Txt (getvar 'angbase)))

ou

 

;; utilise une précision de 16 décimales
(angtos (+ angl_Txt (getvar 'angbase)) (getvar 'aunits) 16)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

mais je pense que le problème est lié directement à la commande mtext. Comme dit plus haut, si on met un angbase au nord, qu'on saisit un mtext avec un angle "_r" à 0, on a un texte horizontal, alors qu'avec un angbase au nord, l'angle 0 devrait pointer vers le haut et non vers la droite.

 

En tout cas la commande TEXTE fonctionne comme ça : un angle de 0 donne un texte vertical si angbase pointe vers le nord.

 

La commande _insert fonctionne aussi bizarrement quand angbase n'est pas à l'est. Quand on saisit la valeur de la rotation dans la boîte de dialogue (en ayant décoché saisir à l'écran), l'angle de rotation tient compte de angbase. Par contre si on saisit la valeur de l'angle en ligne de commande, angbase n'est pas respecté.

 

C'est ce que je constate sur mon autocad 2014. Soit je suis bourré, soit il se trouve que dans ces commandes (sans doute dans d'autres aussi), on n'a pas eu de la suite dans les idées chez autodesk.

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Salut à tous,

 

Merci beaucoup pour vos aides, je testerais tout ça demain...

 

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)

Lien vers le commentaire
Partager sur d’autres sites

Dès que le l'ai fini, je le posterais...

 

Il n'est pas compliqué, c'est pour le placement de PTRL (point de cotation d'une détection de réseaux souterrains), on lance la commande avec un paramètre (le début du nom du calque) puis, on clique sur l'altitude terrain, on clique sur la profondeur et ensuite, on pointe l'insertion du PTRL (avec deux étiquettes : la profondeur et le Z de la génératrice supérieur) puis on clique sur un segment d'une polyligne pour avoir la direction des textes à insérer et du bloc PTRL, et ensuite, on n'a plus qu'à placer la profondeur et le ZGS.

 

Le tout se rangeant dans les bon calques :

 

paramètre + "_PTRL" pour le bloc,

paramètre + "_PROF" pour la profondeur,

paramètre + "_ZGs" pour la génératrice supérieure.

 

Je ferais un petit bout d'explication et j'essairais aussi de commenter mon code...

 

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)

Lien vers le commentaire
Partager sur d’autres sites

Au temps pour moi...

 

En relisant mon post, je me suis rendu compte que je confondais deux LiSP sur lesquels je travail en ce moment...

 

Celui-ci concerne une macro qui créé un texte multiligne avec différents renseignements commes des côtes tampons et/ou radiers...

 

Désolé pierrevigneux...

 

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)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous,

 

Voici mon LiSP mais je n'ai pas eu le temps d'intégrer vos remarques...

 

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)

Lien vers le commentaire
Partager sur d’autres sites

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é