Aller au contenu

Messages recommandés

Posté(e)

Salutations...

 

Voilà, j'utilise "grread" (que je viens à peine de connaitre) mais j'aimerai en savoir plus.

 

J'ai déjà lu l'aide (en anglais) et aussi quelques sites (aidacad.com ....) mais je n'en ai pas tiré ce qui m'intéressait.

 

Dans ma routine, j'ai çà (piqué à bonuscad ;) ) :

.....
.....
.....
(while (and (setq key (grread T 5 0)) (/= (car key) 3)) ;_ Fin de and
                     (cond ((eq (car key) 5)
                            (redraw)
                            (setq pt (cadr key))
                            (setq alpha (angle pt1 pt))
.....
.....
.....

 

Mais j'aimerai que "alpha" soit en grade et dans le sens horaire, car je dois le comparer à un autre angle qui lui, est en grade et en sens horaire...

 

N'y-a t'il pas de fonction ou de commande spéciale pour ce type de routine ?

 

Merci,

 

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)

Comme je te l'ai souvent dit AutoCAD calcule en radians dans le sens trigonométrique à partir de l'axe des X du SCG, et ceci n'est pas lié à (grread ...). Il est donc préférables dans les routines de faire de même.

 

Pour convertir un angle , tu peux utiliser (angtos ...) et (angtof ...) ou des routines de conversion :

;;; G2R Convertit les grades en radians

(defun g2r (ang)
(* (/ ang 200.0) pi)
)

;;; R2G Convertit les radians en grades

(defun r2g (ang)
(* (/ ang pi) 200)
) 

 

Pour le sens horaire, vois du côté de la variable ANGDIR.

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

Posté(e)

Merci (gile), mais c'était juste pour savoir s'il y avait une option dans "grread"...

 

Mais ne t'énerve pas ;) je vais encore voir chez Mme ANGDIR, avec laquelle je m'étais déjà faché sévèrement...

 

Je pense qu'avec un bouquet de fleurs.... Non ?

 

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)

Posté(e)

Denis, ce n'est que mon avis (et celui de gilles) ;)

 

Mais il est certain que dans la base de donnée d' AutoCad TOUS les angles sont en radians et dans le sens trigonométrique.

 

Donc pour faire des comparaisons, autant les faire dans ce système sans faire de conversion.

En effet faire des conversion a l'aide (angtos) ne peux amener qu'a une imprécision même en mettant AUPREC au maxi.

 

Additionner des erreurs minimes feront au bout du compte une grosse erreur, mais là je ne t'apprend rien. Donc garde le plus possible les valeurs que tu as obtenues de la base d'autocad pour avoir les calculs les plus précis possible.

L'emploi d'un fuzz avec (equal) sera cependant nécessaire pour les comparaisons surtout si tu utilises des (trans).

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

Posté(e)

Merci messieurs, en effet, je n'avais pas vu le problème de cette façon. Mais comment comparer un angle en sens trigo avec un autre en sens horaire ?

 

Car ma variable ANGDIR est dès l'ouverture du dessin à 1.

 

Mais l'origine n'est pas la même non plus, AutoCAD la prend à l'EST et moi au NORD ! !

 

Pfffffff, j'ai pô fini ! !

 

Bon, j'y retourne ! !

 

Bon aller, juste pour bonuscad :

Confisius a dit en revenant de derrière un arbre, un soir de grand vent, "Merde, je me suis encore pissé sur les sandalles ! !

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)

Un petit exemple vaut mieux qu'un grand discours

 

((lambda ( / )

(setvar "angbase" (/ pi 2));origine au nord

(setvar "angdir" 1); sens horaire

(setvar "aunits" 2) ;grade

(command "_.line" "100,100" "@50<80" "") ligne à 80gr

(setq dxf_ent (entget (entlast)))

(setq alpha (angle (cdr (assoc 10 dxf_ent)) (cdr (assoc 11 dxf_ent))))

(print alpha) ; retourne angle de la base de donnée en RADIAN)

(if (equal alpha (/ pi 10) 1E-09) ; comparaison en radian malgré mise en place en grade

(print (angtos alpha)); affichage résultat dans le mode courant

)

(prin1)

))

 

Vois tu ou je veux en venir?

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

Posté(e)

Je vais essayer d'être clair, je suppose que tes paramètres courant sont :

AUNITS = 2 (grades)

ANGBASE = 100 (0gr au Nord)

ANGDIR = 1 (sens horaire)

 

Dans ce cas pour convertir un angle exprimé dans ces paramètres (exemple 25gr) en angle en radians dans le sens trigonométrique avec 0 à l'est (axe X) il te faut soustraire l'angle (25gr) à la valeur de ANGBASE (100gr) et le traduire en radians. Attention toutefois, si taper ANGBASE à la ligne de commande retourne 100, l'expression LISP (getvar "ANGBASE") retourne 1.5708 (radians).

 

Donc dans ce cas, pour traduire ang en LISP on peut écrire :

 

(* (/ (- 100 ang) 200.0) pi)

 

Cette expression ne vaut que pour les paramètres de l'exemple ci-dessus, si on veut couvir les paramètres les plus courants (degrés décimaux, grades et radians) :

 

(cond
 ((= (getvar "AUNITS") 0) ;_ degrés
  (if (zerop (getvar "ANGDIR"))
    (+ (getvar "ANGBASE") (* (/ ang 180.0) pi)) ;_ sens trigo
    (- (getvar "ANGBASE") (* (/ ang 180.0) pi)) ;_ sens horaire
  )
 )
 ((= (getvar "AUNITS") 2) ;_ grades
  (if (zerop (getvar "ANGDIR"))
    (+ (getvar "ANGBASE") (* (/ ang 200.0) pi)) ;_ sens trigo
    (- (getvar "ANGBASE") (* (/ ang 200.0) pi)) ;_ sens horaire
  )
 )
 ((= (getvar "AUNITS") 3) ;_ radians
  (if (zerop (getvar "ANGDIR"))
    (+ (getvar "ANGBASE") ang) ;_ sens trigo
    (- (getvar "ANGBASE") ang) ;_ sens horaire
  )
 )
) 

 

Le résultat de ces opérations peut-être un nombre négatif, or pour certaines comparaisons () il est necessaire que tous les angles soient exprimés par des valeurs comprises entre 0 et 2*pi radians, pour ce faire je te propose cette petite routine :

 

;;; Ang
(defun ang  (if (and (    ang
   (ang  )
) 

 

[Edité le 27/1/2007 par (gile)]

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

Posté(e)

Un TRÈS GRAND MERCI à VOUS ! !

 

Vous êtes tous d'une aide précieuse et ce site m'est devenu indispensable ! !

 

Grace à vos posts, je devrai mieux comprendre le lisp et le travail de ses angles...

 

J'ai maintenant du boulo sur la table...

 

Merci encore mille fois,

 

Denis... ( super content ce matin )

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é