Aller au contenu

[Résolu] Mais de quel angle parle-t'on ?


Messages recommandés

Posté(e)

Bonjour à tous,

 

Voilà, j'ai un petit souci avec une macro, surtout avec un angle... En voici l'extrait concerné du code :

  ...
 (setvar "osmode" 0)
 (setvar "angbase" 0)
 (setvar "angdir" 0)
 (setvar "attreq" 0)
 (setvar "attdia" 0)
 (setvar "cmdecho" 0)
 (setvar "aunits" 2)
 .....
 (setq Pt_Ins (getpoint "\tInsertion du block : "))
 (setq Pt_Dir (getpoint Pt_Ins "\tDirection du block : "))
 (setq Pt_Ins (list (car Pt_Ins) (cadr Pt_Ins) 0.0))
 (setq Pt_Dir (list (car Pt_Dir) (cadr Pt_Dir) 0.0))
 (command "-inserer" Bloc Pt_Ins echBlk echBlk (angle Pt_Ins Pt_Dir))
 .....

Mais mon bloc s'insert systématiquement avec un angle de 1 grade...

 

J'ai essayé beaucoup d'autres façons de faire, avec getorient, getangle, transformé l'angle (en radian) en grade...

 

Bref, j'y ai passé l'après-midi et je tourne toujours en rond...

 

Si quelqu'un a une astuce, une idée ou un conseil, 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)

Posté(e)

Salut,

 

Suivant le contexte les angles ne sont pas exprimés de la même manière.

 

Dans un appel de la fonction command les angles doivent être entrés suivant les paramètres courants (AUNITS, ANGDIR, ANGBASE), exactement comme on le ferait en ligne de commandes. Il en va de même si on entre une valeur angulaire au clavier comme réponse à un appel de la fonction getangle.

 

En interne AutoCAD, travaille toujours en radians dans le sens trigonométrique avec le 0 à l'est.

 

(angle Pt_Ins Pt_Dir)

retourne donc un angle en radians qu'il faut convertir en fonction des paramètres courants avant de le passer à command.

 

La fonction angtos convertit un nombre exprimant un angle en radian en une chaîne exprimant cet angle en fonction de l'unité angulaire courante ou de celle spécifiée

(angtos (angle Pt_Ins Pt_Dir))

retournera un chaîne qui est l'expression de l'angle dans l'unité courante (AUNITS) avec la précision courante (AUPREC).

 

Pour pouvoir spécifier la précision (second argument optionnel) il faut préciser l'unité (premier argument) :

(angtos (angle Pt_Ins Pt_Dir) (getvar "AUNITS") 16)

retournera un chaîne qui est l'expression de l'angle dans l'unité courante (AUNITS) avec une précision de 16 décimales.

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

Posté(e)

Salut (gile), et merci pour ton aide...

 

Mais c'est bien ce que je dis, les angles, c'est la galère ! !

 

J'ai essayé ça :

(command "-inserer" Bloc Pt_Ins echBlk echBlk (angtos (angle Pt_Ins Pt_Dir)))

Et ça aussi :

(command "-inserer" Bloc Pt_Ins echBlk echBlk (angtos (angle Pt_Ins Pt_Dir) (getvar "AUNITS") 16))

Mais le problème reste le même, mon angle est de 1.00000gr.

 

AutoCAD me répond :

Insertion du block : Direction du block : Commande inconnue "1782G". Appuyez sur F1 pour obtenir de l'aide.

Je n'y comprend rien...

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)

Bonsoir,

 

plutôt que de se casser la tête avec un angle et compte tenu que tu as pt_ins et pt_dir, il vaudrait mieux donner le point pt_dir à la place de l'angle dans le (command "_insert" ...). Quand on insère un bloc "à la main", on donne le plus souvent un 2ème point. Ce n'est que rarement qu'on tape une valeur d'angle au clavier.

 

(command "_insert" "toto" "_non" Pt_Ins "1" "1" "_non" Pt_dir)

 

Du coup on se fout de savoir si on est en radians, degrés etc... ou de savoir si l'angle 0 est à l'est ou au nord ou Dieu sait où.

 

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)

Posté(e)

Salut zebulon_, et merci pour ton aide, mais rien n'y fait...

 

J'avais déjà essayé, mais je t'ai suivi et ai ajouté "_non", ce qui donne :

(command "-inserer" Bloc "_non" Pt_Ins echBlk echBlk "_non" Pt_Dir)

 

Et même problème, AutoCAD me répond :

Insertion du block : Direction du block : Commande inconnue "NON". Appuyez sur F1 pour obtenir de l'aide.

 

Vraiment, je m'y perd...

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)

quand tu insères le bloc en utilisant la commande _-insert en ligne de commande, ça donne quoi ?

 

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)

Posté(e)

Re Vincent,

 

Voici les dialogues d'AutoCAD lors de l'insertion du bloc :

Commande: -INSERER

Entrez le nom du bloc ou [?] <Etiquette CANA>:

 

Unités: Pouces Conversion: 0.025

Spécifiez un point d'insertion ou [Pointdebase/Echelle/rOtation]: Spécifiez le facteur d'échelle <1>:

 

Spécifiez l'angle de rotation <0.0000g>:

Commande: '_.zoom _e

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)

Revenons à nos moutons !

Disons pour un apprentissage basique.

(defun rtd (x) 	(* 180.0 (/ x pi)))
(rtd pi)

C'est ce que j'ai appris pour débuter.

Imaginons que mes commandes travaillent en degrés (on dirait que c'est pas ton cas) comme beaucoup ici. Gilles à évoqué AUNITS.

Alors dans le command il faut convertir les radians (unités de base dans lisp) en degrés.

 

Dans ton cas ce sont des grades, c'est

(defun rtg (x) 	(* 200.0 (/ x pi)))

qu'il faudra utiliser pour envoyer la bonne unité de l'angle trouvé. Je suppose.

Donc :

(rtg (angle Pt_Ins Pt_Dir)) à injecter dans la réponse au command.

La méthode de Gilles est plus prudente et universelle. La mienne est faite pour apprendre "basique".

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)
Revenons à nos moutons !

 

Pourquoi ? C'est pas bon de donner un point plutôt qu'une valeur d'angle ?

 

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)

Posté(e)

Si, nickel aussi ;)

Je prenais juste le soin de revenir au code du message de début et de coller au plus près avec cette base qu'on avait pas évoquée, la transformation fonctionnelle des radians en l'unité courante. Le truc pour bien débuter, puisque c'est le forum ad-hoc, c'est d'intégrer sa petite fonction. On est tous passé par là.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Re Vincent,

 

Voici les dialogues d'AutoCAD lors de l'insertion du bloc :

Commande: -INSERER

Entrez le nom du bloc ou [?] :

 

Unités: Pouces Conversion: 0.025

Spécifiez un point d'insertion ou [Pointdebase/Echelle/rOtation]: Spécifiez le facteur d'échelle :

 

Spécifiez l'angle de rotation :

Commande: '_.zoom _e

Si tu regardes attentivement les invites lors de l'insertion du bloc, tu peux noter qu'il n'y a qu'une seule invite concernant l'échelle (le bloc doit être à échelle uniforme), puis on passe à l'angle.

 

Dans ton expression LISP, tu fais :

(command "-inserer" Bloc "_non" Pt_Ins echBlk echBlk "_non" Pt_Dir)

Donc le second echBlk est interprété comme la réponse à l'invite : "Spécifiez l'angle de rotation: " et prend 1.0, la commande se termine et l'expression suivante (ici "_non") est interprétée comme un appel à une nouvelle commande d'où l'erreur :

Commande inconnue "NON". Appuyez sur F1 pour obtenir de l'aide.

 

Il faut faire très attention quand on insère un bloc avec la fonction LISP command au fait que les invites peuvent changer suivant la nature du bloc : une seule invite pour l'échelle si "Mettre à l'échelle uniformément" = "Oui", deux sinon.

La solution peut-être de spécifier explicitement l'échelle (ou les échelles) avec les options :

(command "_insert" Bloc "_scale" echBlk "_non" Pt_Ins "_non" Pt_Dir)

 

PS : en LISP le tiret (-) devant un nom de commande est inutile. C'est toujours la version "ligne de commande" de la commande (quand elle existe) qui est appelée par défaut. Il faut utiliser la fonction initdia pour forcer la version "boite de dialogue" (quand elle existe).

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

Posté(e)

Coucou

 

En réponse au message #9 :

Je ne dirais pas que c'est "mauvais" de donner un point comme direction mais c'est "pas propre" tout simplement et ça ne marche que pour une insertion (unique) de bloc.

Puisqu'on parle dans le forum "débuter", partons tout de suite avec les bonnes méthodes, en écrivant "bonnes" pour les méthodes je fais un peu professeur ce que je n'aime pas spécialement ne voulant pas me faire passer pour un érudit, il faudrait peut-être écrire : les méthodes reconnues.

 

Si la routine prévoit d'insérer plusieurs blocs à la suite il est n'est plus du tout intéressant de montrer le point de direction à chaque insertion et donc utile de bien connaître le comportement du logiciel avec les valeurs angulaires, il est vrai que c'est quelque peu déroutant au début.

Posté(e)

Salut à tous, et merci à tous...

 

@Patrick_35 : ça ne fonctionne pas, mais l'erreur venait de moi...

@(gile) : c'est exactement ça... J'avais une échelle de bloc en trop, ce qui décalait tout...

 

@didier : partager ses connaissances n'implique pas de se prendre pour un "professeur"... C'est plus de la transmition de savoir, et tu remplis bien cette noble tache...

 

Et merci encore à vous...

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)

Bonsoir,

 

L'inconvénient des commandes qui utilisent des angles est qu'il faut savoir si on est en radian, grades ou degrés. Je préfère donc donner un point. S'il y a plusieurs blocs à insérer, je pense qu'on peut récupérer l'angle avec la fonction angle et calculer le point avec la fonction polar. On reste cohérent puisque les 2 fonctions utilisent le radian. Enfin, il me semble.

 

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)

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é