Aller au contenu

Fonction simple mais que j en\'arrive pas à saisir


Messages recommandés

Posté(e)

Bonjour

Je n'ai jamais programmer en Lisp et je commence et j'ai de la difficulté à saisir ce langage.

Je construit des polygonne avec des angle Degré.Minute Seconde et dans Autocad 2002 je dois écrire l'angle d'une ceraint facon (<90d22'46").

Mon but est de me créer un petit appli en Lisp afin de convertir 90.2246 en <90d22'46" pour gagner du temps.

 

 

Donc j'ai codé que le début et ca fonctionne vraiment pas. Je ne doit pas utiliser la bonne fonction.

Je veux juste entré une valeur (90.2246) et faire afficher cette valeur. voici mon code:

 

(defun c:Jeff ()

(setq AngleDMS (getpoint "Entrez une Angle DD.MMSS: "))

(princ AngleDMS)

)

)

 

Donc j'entre mon angle 90.2246 et j'ai comme résultat:

(33.1937 83.8967 0.0)(33.1937 83.8967 0.0)

À noter que si je refais le même truc, je n'arrive pas au même résultat.

 

Bref je trouve cela bisare..

 

Merci d'avance de votre aide

 

 

Posté(e)

Bonjour,

 

(defun c:Jeff ()

(setq AngleDMS (getpoint "Entrez une Angle DD.MMSS: "))

(princ AngleDMS)

)

)

 

Getpoint ne te donnera qu'un triplet de coordonnées x,y,z.

 

par contre getangle ou getorient retournent un angle en radian, il faudra le convertir avec angtos ou angtof.

 

A+

 

[Edité le 2/10/2009 par fabcad]

Posté(e)

Salut meric pour ton aide

 

Voici ce que j'ai essayé:

(defun c:Jeff ()

(setq AngleDMS (getangle "Entrez une Angle DD.MMSS: "))

(setq AngleDMS (/(* AngleDMS 180.0) pi))

;(setq AngleDMS (angtos AngleDMS))

(princ AngleDMS)

)

)

 

J'ai essayé deux truc.

 

Le premire est le code que tu vois plus haut avec le angtos en commentaire

J'inscrit 22.2222 et j'arrive comme réponse à

337.778337.778

 

 

Si je mets en commentaire cette ligne (setq AngleDMS (/(* AngleDMS 180.0) pi)) et que j'utilise la fonction angtos j'arrive à ce résultat:

112d13'20""112d13'20\""

 

Questions pourquoi j'arrive à ca ???

 

1. Je me suis aprecu que 22.2222 est vu comme un nombre en décimale.

Mais pourquoi me met-il 112 degré ???

 

2. Existe-t-il une fonction pour convertir un nombre en degré décimal en DMS

Par exemple j'entre 22.2222 alors j'ai comme résultat 22d22'22""

 

 

 

Merci beaucoup de ton aide...

 

 

Il est possible que je me trompe mais

Posté(e)

Salut,

Je ne vois pas très bien l'utilité, mais comme je n'utilise pas ce format d'angle...

 

Si je traduis ce que tu veux faire (c'est à dire pas une converstion mais une traduction d'une entrée clavier en coordonnées "H mn ss", tu décompose ton texte et tu le reconsruis :

 

(defun c:Jeff ()
 (setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: "))  
 (strcat "<" (substr AngleDMS 1 2) "d" (substr AngleDMS 4 2) "'" (substr AngleDMS 6 2) "''")
 (princ)
 )

 

Après, si tu veux le convertir, c'est autre chose.

Comme le dis fabcad, va voir dans l'aide les fonctions d'angle.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

convertir 90.2246 en <90d22'46" pour gagner du temps

 

Ce n'est pas une conversion (le résultat est le même), mais plutôt une substitution. :casstet:

 

Ma proposition, ou adapter celle de Bred qui est bonne aussi.

 

(defun Jeff ( / lg adms)
(setq lg (getdist "\Entrez la longueur: "))
(setq adms (getreal "\nEntrez un Angle en DD.MMSS: "))
(princ
	(strcat
		"@"
		(rtos lg 2 4)
		"<"
		(itoa (fix adms))
		"D"
		(itoa (fix (* 100 (- adms (fix adms)))))
		"'"
		(itoa (fix (* 100 (- (* 100 adms) (fix (* 100 adms))))))
		"\""
	)
)
)

 

Une fois ce code chargé, utilisation en transparence pour les commandes standard d'autocad.

exemple:

Commande: _pline

Spécifiez le point de départ:

La largeur courante est de 0.0000.

Spécifiez le point suivant ou [Arc/Demi-larg/LOngueur/annUler/LArgeur]: (jeff)

Entrez la longueur: 100

 

Entrez un Angle en DD.MMSS: 50.6325

@100<50D63'25""@100<50D63'25\""

 

Spécifiez le point suivant ou [Arc/Clore/Demi-larg/LOngueur/annUler/LArgeur]: (jeff)

Entrez la longueur: 25

 

Entrez un Angle en DD.MMSS: 63.2587

@25<63D25'86""@25<63D25'86\""

 

Spécifiez le point suivant ou [Arc/Clore/Demi-larg/LOngueur/annUler/LArgeur]:

 

Commande:

 

Tu peux placer ce (jeff) dans un bouton pour macro, mais sans le faire précéder de ^C^C (qui annule les commande en cours), car (jeff) ou 90D20'42" fait autant de saisie clavier. ;)

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

Posté(e)

Bonjour merci pour le petit bout de code...

 

Pour tout dire.. J'aimerais bien programmé en Lisp et je voulais le faire étape par étape.

 

Je voulais donc prendre l'angle que j'entre 22.2222 et le change pour <22d22'22"

 

j'entre beaucoup d'angle et dans autocad, si j'entre une angle de ce format: <22d22'22" Il la voit comme étant une angle de 22 degré 22 minutes et 22 secondes.

Tandis que si j'inscrit un angle 22.2222 il la vois comme un nombre décimal.

 

J'aimerais donc me créer un petit truc qui convertit seulement 22.2222 en <22d22'22"

 

Grâce à toi... j'ai résolu mon premier problème...

 

Ensuite je vais essayer de faire dessiner une ligne et de demander l'angle qui sera convertie et ensuite la distance.

 

Merci beaucoup de votre aide....

 

 

Et oui j'ai été fouiller dans l'aide mais j'ai de la difficulté avce l'anglais et quand ca fait une dizaine de test et que rien fonctionne.... héhéhéhé

 

merci encore

Posté(e)

Bonjour, de toute façon 22.2222° ce n'est pas du tout pareil que 22° 22' 22".

Ces deux valeurs donneront 2 angles différents.

Je ne suis pas du tout expert en LISP je ne me risquerais pas à te corriger là dessus par contre, tu pars sur une hypothèse complètement fausse ce qui peut être préjudiciable pour ton programme.

 

Cordialement.

Posté(e)

Je ne suis pas du tout expert en LISP je ne me risquerais pas à te corriger là dessus par contre, tu pars sur une hypothèse complètement fausse ce qui peut être préjudiciable pour ton programme.

 

Je suis d'accord, surtout préjudiciable a ses futurs codes.

IL EST IMPORTANT de savoir que le lisp fonctionne en interne en RADIANS et dans le SENS mathématique.

Les fonctions lisp angulaires te retourneront / ou demanderont toujours ces valeur dans ce système.

 

Il te sera plus simple d'apprendre a programmer si d'entrée tu raisonne dans ce système pour construire des objets dans ton dessin.

 

A ta décharge, c'est vrai que, par exemple en topographie, le symbole "g" n'est pas requis pour l'entrée des angles si le système angulaire est mis sur ce mode.

Mais en degré il existe 2 modes (sexagésimal et décimal), il faut bien pourvoir les différencier.

La voie de substitution proposé peut porter à confusion à l'utilisation.

 

Pour la programmation, oubli cette voie hasardeuse

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

Posté(e)

Salut,

Relisez son post de départ, cela n'a rien à voir avec de la conversion :

 

Je construit des polygonne avec des angle Degré.Minute Seconde et dans Autocad 2002 je dois écrire l'angle d'une ceraint facon (<90d22'46").

Mon but est de me créer un petit appli en Lisp afin de convertir 90.2246 en <90d22'46" pour gagner du temps.

 

Ce que je comprends, c'est qu'au lieu de taper <90d22'46", il veut rentrer au clavier 90.2246, plus court, plus rapide à taper.

 

C'est le but d'une programmation d'automatisation.

 

Je comprends tout à fait sa demande. Elle est juste. (c'est ce que nous faisons tous : simplifier des entrées clavier, automatiser des tâches pour qu'elle soient plus rapide).

 

Après, ce que vous expliquer sur la conversion est tout à fait juste et de bon conseil, mais là n'est pas le sujet (il a été mal aiguillé dans la réponse de conversion avec les fonctions lisp.)

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

bonjour tout le monde, j'ai bien lu le message original et je persiste à dire que 90.2246 ne peut pas être converti brutalement 90d22'46" même pour gagner du temps c'est comme si on convertissait 1 euro = 1 franc pour aller plus vite D'un point de vue mathématique son hypothèse de départ est fausse. Je pense que tu cherches à écrire un lisp qui convertisse un angle décimal en angle hexa-décimal ou inversement. jfcantin1977, tes 2 exemples sont faux voila pourquoi tout ce débat.

 

Cordialement.

Posté(e)

jerome.s,

 

Il n'a jamais été question de convertir des degrés décimaux en degrés sexagésimaux (et pas hexa-décimaux).

Mais de transformer une chaîne de caractère (entrée utilisateur) d'un format dans un autre : remplacer le caractère "," par "d", ajouter le caractère "'" après les deux caractères suivants et """ après les deux suivants.

 

Le but étant que l'utilisateur entre "90,2246" et que le LISP le traduise en "90d22'46"" pour le passer comme argument d'une commande.

 

Ceci étant, je me permet de douter de l'utilité d'une telle routine.

 

S'il s'agit d'interférer pendant les entrées utilisateurs d'une commande (exemple de Bonuscad), je ne vois pas bien le gain de temps entre :

- "(jeff)" > Entrée > "100" > Entrée >"90,2246"

ou

- Clic sur bouton > "100" > Entrée >"90,2246"

et

- "100

 

Si c'est pour une utilisation sans intervention de l'utilisateur (a l'intérieur d'un programme) je ne peux qu'abonder dans le sens de bonuscad, il faut travailler en radians, seuls les appels aux commandes natives AutoCAD nécessitent les angles exprimés dans l'unité courante.

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

Posté(e)

Je comprends bien, dans ce cas et je te rejoint, quel est l'intérêt d'une telle routine ?

Mais cette transformation peut-être très mal interprétée déjà par nous (la preuve par cette suite d'échanges) puis par l'ordinateur.

Pour finir, je pense qu'il nous manque pas mal d'informations pour qu'une personne de compétente puisse élaborer un code qui réponde à ses attentes.

 

PS : Je pense toujours toujours que c'est une hérésie de traduire 90.2246 par 90°22'46".

Il doit surement y avoir une explication rationnelle qui me dépasse en ce moment.

C'est pourquoi si l'auteur du post pouvait nous donner plus d'information déjà pour avoir une solution ou un code et puis pour moi afin d'avoir une explication au pourquoi du comment.

 

Cordialement.

Posté(e)

Je pense toujours toujours que c'est une hérésie de traduire 90.2246 par 90°22'46"

 

Tout dépend du niveau du processus auquel est faite cette "traduction".

Toute entrée au clavier est dans un premier temps une chaîne caractère dont la validité est ensuite évaluée par le programme en fonction du type de données requis.

Par exemple, si le programme requiert un nombre, il doit évaluer si la chaîne "2.35" ou "toto" peut être convertit en un nombre valide (oui dans le premier cas et non dans le suivant).

 

Si l'entrée doit être du type angle, AutoCAD évalue la chaîne en fonction de la valeur de la variable "AUNITS", pour les valeurs 0, 2, 3 la chaîne doit être convertible en un nombre, pour la valeur 1 du type "xxdxx'xx"" pour la valeur 4 en "encadrant" le type précédent par des caractères indiquant les points cardinaux (n, e, s, o).

Ces types de chaînes ont été arbitrairement choisis par les développeurs d'AutoCAD : plutôt que "90d22'46"" ils auraient très bien pu choisir "90d22m46s" ou "90.2246" sauf qu'il ont décidé (toujours arbitrairement) que si AUNITS est à 1 et que la chaine est convertible en un nombre réel, elle correspond à un angle exprimé en degrés décimaux.

Il est donc tout à fait envisageable d'intervenir à ce moment du processus pour fair accepter d'autres types de chaînes.

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

Posté(e)

Bien que je pense avoir compris son souhait: Il n'est pas pratique et rapide, lorsqu'on travaille en degré minutes secondes, de parcourir le clavier pour entrer la syntaxe.

 

L'utilisation d'une telle routine, à mon gout, peut induire des erreurs lors de l'utilisation: oubli d'appel de la fonction pour transcrire la saisie. Ou alors on y pense bien lors de la conception, mais pendant l'édition (déplacer, copier, tourner) on oubli aussi d'appliquer cette transcription lors des commandes.

La persuasion de travailler dans le bon système est alors grande et les erreurs pas toutes décelables après coup.

 

Pour moi cette méthode est risquée pour un gain de saisie pas vraiment flagrante.

 

Cette méthode ne peut être utilisé que par un utilisateur averti, pour moi ce n'est pas une programmation à diffuser, trop confus.

 

Je rajouterais que cette méthode remet en cause les syntaxes pour les entrées.

En effet, quelque soit le système angulaire utilisé dans le dessin, les syntaxes forcées donne le même résultats.

exemple:

@100.0<90.344444

-> @100<90d20'40"

-> @100<100.382716g

-> @100<1.576808r

-> @100.0< N 0d20'40.00" O

 

Sachant que comme le dit (gile) le degré décimal ayant été choisi arbitrairement par AutoDesk comme unité par défaut (sans symboles)

 

[Edité le 3/10/2009 par bonuscad]

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

Posté(e)

Bonjour à vous tous...

 

Désolé du délais... je n'avais pas mon mot de passe et j'attendais à lundi pour vous répondre. Mais j'ai finalement trouvé mon courriel et me revoilà...

 

 

Pour essayé d'éclaircir un peu les choses.... Je vous explique ce que j'aimerais faire et ce que je demandais au départ.

 

Effectivement je voulais que convertir un angle, une synthaxe 90.2234 en cela... <90d22'34" tout simplement sans rien modifier... juste la modification d'une chaîne.

 

 

Il est vrai que plus tard dans mon petit prgramme j'aimerais bien triater cet angle, que je devrais convertir en radian afin de pouvoir la traiter... mais je ne suis pas rendu là.... J'essais de commencé à essayer de programmer en Lisp... Si vous voyer ce que je veux dire.

 

Et donc je vais revenir vous poser une autre question d'ici quelques jours... héhéhééhé

 

 

Merci beaucoup de votre aide.

 

P.S. Je viens d'instaler Autocad sur mon PC à la maison... comment faire pour lui dire de sélectionner un fichier .lsp au démarrage ???

 

 

merci

Posté(e)

comment faire pour lui dire de sélectionner un fichier .lsp au démarrage ???

 

Regarde ce sujet et, dans l'aide :

Guide de personnalisation > Introduction aux interfaces de programmation > AutoLISP et Visual LISP > Chargement et exécution automatiques des routines AutoLISP

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

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é