jfcantin1977 Posté(e) le 14 octobre 2009 Posté(e) le 14 octobre 2009 Bonjour à tous J'ai une variable string qui est = à 12d34'56" je veux utiliser la commande angtof pour convertir mon angle qui est en string en Radian. Gile m'a dit sur un autre Post cette remarque:Pour les degrés sexagesimaux (comme pour les unités géodésiques) angtos ne reconnait que les chaînes dont le format est : "12d36'50"" Ma questionDois-je mettre absolument des guillement avant et après ma variable ou les guillemet indique que c'est une variable String (texte) Si je dois mettre ces guillemets comment faire ??? J'essais d'en mettre mais rien ne fonctionne, le code devient tout en rose. ((= nb_c 7) (strcat "" (substr AngleDMS 1 2) "d" (substr AngleDMS 4 2) "'" (substr AngleDMS 6 2) "\"" ) ) J'ai essayé de faire cette commande et j'arrive toujours à la mauvais réponse (princ (angtof result)) = 1.3512 si result = 12d34'56"Je devrais arriver à 0.2196 merci de votre aide
ElpanovEvgeniy Posté(e) le 14 octobre 2009 Posté(e) le 14 octobre 2009 (angtof "12d34'56\"") =>> 0.219601 (angtos 0.219601 1 4) =>> "12d34'56\"" [Edité le 14/10/2009 par ElpanovEvgeniy] Evgeniy
jfcantin1977 Posté(e) le 14 octobre 2009 Auteur Posté(e) le 14 octobre 2009 Bonjour ElpanovEvgeniy Je sais que la façon de faire est : (angtof "12d34'56\"") Pourquoi si ma variable qui est en string et vaut12d34'56" ne me donne pas le bon résultat. Mon code pour voir le résultat de result(princ (angtof result)) De plus que vaut le "\" ? Ma variable result devrait valoir : 12d34'56\" ? Merci de ton aide. [Edité le 14/10/2009 par jfcantin1977]
Tramber Posté(e) le 14 octobre 2009 Posté(e) le 14 octobre 2009 Euh,,, je veux pas me méler mais mets bien tes points d'interrogation, toute la ponctuation et des phrases très clair car Eugène utilise un traducteur pour lire nos messages en Français :cool: Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
ElpanovEvgeniy Posté(e) le 14 octobre 2009 Posté(e) le 14 octobre 2009 > TramberMerci :) > jfcantin1977 (setq a(angtos 0.219601 1 4)) (setq d (atoi a)) (setq m (if (setq i (vl-string-search "d" a)) (atoi (substr a (+ 2 i))) 0 ) ;_ if ) ;_ setq (setq s (if (setq i (vl-string-search "'" a)) (atof (substr a (+ 2 i))) 0. ) ;_ if ) ;_ setq (setq str (strcat (rtos d 2 0) "d" (rtos m 2 0)"'" (rtos s 2)"\"")) (progn (princ str) (princ)) Evgeniy
jfcantin1977 Posté(e) le 14 octobre 2009 Auteur Posté(e) le 14 octobre 2009 Bonjour merci pour le code. Le probleme est que je ne dois pas mettre une valeur connu(setq a(angtos 0.219601 1 4)) C'est l'utilisateur qui choisira l'angle. [surligneur] Mon but est de convertir une variable texte (un angle) en varible numérique.[/surligneur] [surligneur] Ensuite, de prendre la variable numérique et la transformer en Radian.[/surligneur] L'angle 12d34'56" est seulement un exemple. Ton code = 77d25'4.00" ? Merci Do you speak in english ?
(gile) Posté(e) le 14 octobre 2009 Posté(e) le 14 octobre 2009 Re, Je ne suis pas sûr de comprendre mais une chaîne de caractères est une suite de caractères (imprimables ou non) comprise entre guillemets. Si la chaîne contient des guillemets, pour que l'interpréteur que ces guillemets ne balisent pas le début ou la fin d'un chaîne, il faut les faire précéder du caractère d'échappement : une barre oblique inverse ou underscore (\).(setq a "12d34'56\"") Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
rebcao Posté(e) le 14 octobre 2009 Posté(e) le 14 octobre 2009 Bonsoir, Tiens un vieux sujet... J'ai pas pu m'en empêcher... ça faisait longtemps que Lili m'a pas passé un savon !!! :P Christringian [Edité le 14/10/2009 par rebcao] Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
jfcantin1977 Posté(e) le 14 octobre 2009 Auteur Posté(e) le 14 octobre 2009 Bonjour à vous deux. Je veux que l'utilisateur entre une angle dans Autocad.L'utilisateur entrera une angle dans ce format:Degré.MinuteSecondePar exemple: 12.3456 L'utilisateur fera la touche Enter. Je veux dans mon code qu'il transforme la valeur entré par l'utilisateur et de faire le Raidan de cet angle. Donc dans mon exemple je veux arriver à un résultat du Radian de l'angle de 12d34'56" = 0.2196 J'aurias une variabl qui aura cette valeur (0.2196)et une ligne qui affichera la réponse dans Autocad. Mon problème est que je ne sais pas comment convertir mon angle de départ en Radian Voici une partie du code. La variable result = 12d34'56" ((= nb_c 7)(strcat ""(substr AngleDMS 1 2)"d"(substr AngleDMS 4 2)"'"(substr AngleDMS 6 2)"\""))(princ (angtof result)) Est-ce plus clair ? Merci
Tramber Posté(e) le 14 octobre 2009 Posté(e) le 14 octobre 2009 Eugène ne va pas comprendre le rapport avec les petites culottes. Restons intègres et entiers. Faisons une chaîne et soyons réels ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
ElpanovEvgeniy Posté(e) le 14 octobre 2009 Posté(e) le 14 octobre 2009 M'excusez.Je ne suis pas assuré qu'a compris exactement.À moi il vaut mieux se taire... Evgeniy
(gile) Posté(e) le 14 octobre 2009 Posté(e) le 14 octobre 2009 Re, Je t'avais donné une routine qui transforme ton format DD.MMSS en radians ici (DMS2Rad). Il suffit de charger cette routine pour pouvoir l'utiliser comme une fonction LISP native.La fonction DMS2Rad requiert comme argument une chaîne du type "DD.MMSS". (DMS2Rad "12.3456") retourne 0.219601 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
jfcantin1977 Posté(e) le 15 octobre 2009 Auteur Posté(e) le 15 octobre 2009 Bonjour Gile J'ai effectivement essayé ta routine mais étant donnée que je ne saisi pas encore compléteemnt le Lisp je n'arrive pas a utiliser ta fonction... J'ai donc essayé un autre truc qui changait ma variable pour être traité comme un numérique mais je n'y arrive pas... Donc.... Revenons à ta routine. 1. Comment coder pour entrer dans ta routine ? J'ai vu dans l'autre post que tu me disais de remplacer la variable Remplace :(DMS2Rad)par :(DMS2Rad AngleDMS) 2. Quel est la variable qui contient mon angle modifé par ta routine ? Merci de ton aide (defun c:Jeff () (setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: ")) ) (defun DMS2Rad AngleDMS (str / pos) (setq pos (vl-string-search "." str)) (angtof (strcat (substr str 1 pos) "d" (substr str (+ 2 pos) 2) "'" (substr str (+ 4 pos) 2) "\"" ) 1 ) )
(gile) Posté(e) le 15 octobre 2009 Posté(e) le 15 octobre 2009 Salut, Si tu veux stocker la valeur de l'angle en radians :(setq AngleRad (DMS2Rad AngleDMS)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
jfcantin1977 Posté(e) le 15 octobre 2009 Auteur Posté(e) le 15 octobre 2009 Re... J'arrive à une erreur..... Je te remontre le code avec l'ajout que tu m'a proposé. Mais je ne dois pas l'avoir mis au bon endroit... Merci vraiment poutr ton aide (defun c:Jeff () (setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: ")) (setq AngleRad (DMS2Rad AngleDMS)) (princ AngleRad) ) (defun DMS2Rad AngleDMS (str / pos) (setq pos (vl-string-search "." str)) (angtof (strcat (substr str 1 pos) "d" (substr str (+ 2 pos) 2) "'" (substr str (+ 4 pos) 2) "\"" ) 1 ) )
(gile) Posté(e) le 15 octobre 2009 Posté(e) le 15 octobre 2009 Il ne faut pas modifier la routine DMS2Rad (elle fonctionne telle que je te l'ai donnée). (defun c:Jeff (/ AngleDMS AngleRad) (setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: ")) (setq AngleRad (DMS2Rad AngleDMS)) (princ AngleRad) (princ) ) (defun DMS2Rad (str / pos) (setq pos (vl-string-search "." str)) (angtof (strcat (substr str 1 pos) "d" (substr str (+ 2 pos) 2) "'" (substr str (+ 4 pos) 2) "\"" ) 1 ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
jfcantin1977 Posté(e) le 15 octobre 2009 Auteur Posté(e) le 15 octobre 2009 Salut merci ... J'arrive au même résultat qu'avant soit 1.3512 et non à 0.2196 toujours en prenant l'exemple que l'utilisateur mets un angle de 12.3456 Le problème vient-il du fait que la fonction angtof ne gère pas une variable "modifiée" ? merci encore
(gile) Posté(e) le 15 octobre 2009 Posté(e) le 15 octobre 2009 Chez moi, ça marche : Commande: jeff Entrez une Angle DD.MMSS: 12.34560.219601 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
jfcantin1977 Posté(e) le 15 octobre 2009 Auteur Posté(e) le 15 octobre 2009 Salut Le problème peut-il venir du "Setting" d'Autocad ? Pourquoi arrives-tu au bon résultat ? J'ai fais un copier coller du code et j'arrive toujours à 1.3512 Enfin, si tu vois une piste où je pourrais vérifier... Merci de ton aide
Patrick_35 Posté(e) le 15 octobre 2009 Posté(e) le 15 octobre 2009 Chez moi, ça marche : Commande: jeff Entrez une Angle DD.MMSS: 12.34560.219601 Bonjour Même résultat @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 15 octobre 2009 Posté(e) le 15 octobre 2009 Tu dois avoir les variables système :ANGDIR = 1 (sens horaire)ANGBASE 90 (0 au Nord)et angtos prend en compte ces paramètres... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
jfcantin1977 Posté(e) le 15 octobre 2009 Auteur Posté(e) le 15 octobre 2009 D'accord... et si j'essais de passer à côté de ce porblème et que j emodifie mon angle avec la routine à Gile et ensuite je calcul pour convertir mon angle en Radian.. Ce que j'ai essayé depuis 15 minutes... et devinez quoi... ca fonctionne pas... :( Pouvvez-vous me dire pourquoi ca ne fonctionne pas et ou ce que je fais est-il réalisable ??? Merci de votre aide c'est tres apprécié P.S. Voici le message d'erreur que j'ai:#; error: bad argument type: numberp: "12d34'56\"" (defun jeff_convert (str / pos) (setq pos (vl-string-search "." str)) (strcat "" (substr str 1 pos) "d" (substr str (+ 2 pos) 2) "'" (substr str (+ 4 pos) 2) "\"" ) ) (defun c:jeff (/ AngleDMS) (setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: ")) (setq AngleModif (jeff_convert AngleDMS)) (setq AngleRad (d2r AngleModif)) (princ AngleRad) (princ) ) ; conversion des degrés en radians (defun d2r (AngleModif) (* (/ AngleModif 180.0) pi) ) [Edité le 15/10/2009 par jfcantin1977]
(gile) Posté(e) le 15 octobre 2009 Posté(e) le 15 octobre 2009 Ça ne fonctionne pas parce que tu passe une chaine (AngleModif) à la fonction d2r qui requiert un nombre. Ce que tu veux faire est certainement possible, mais difficile à comprendre et au dessus de ton niveau en LISP au vu des erreurs que tu fais. (defun Jeff2Rad (a / p) (setq p (vl-string-position 46 a)) (* (/ pi 180.) (+ (atoi (substr a 1 p)) (/ (atoi (substr a (+ 2 p) 2)) 60.) (/ (atoi (substr a (+ 4 p) 2)) 3600.) ) ) ) (defun c:Jeff (/ AngleDMS AngleRad) (setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: ")) (setq AngleRad (Jeff2Rad AngleDMS)) (princ AngleRad) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
jfcantin1977 Posté(e) le 15 octobre 2009 Auteur Posté(e) le 15 octobre 2009 Salut Merci Mille fois.... Effectivement je crois que je me suis lancé dans un défi un peu trop grand pour moi... Mais le code que tu m'as fait va m'aider.... Merci beaucoup.. :)
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