Aller au contenu

Cours n°1 Lisp réponse exo


rimbo

Messages recommandés

Je compte sur vous pour apporter vos réponses ;)

 

Une chose, si vous apportez des réponses supplémetaires à ce que je vais donner essayer d'être le plus pédagogue possible (le plus simple) et donc d'expliquer chaque terme nouveau et l'utilité de chaque ligne (en retrait de la nouvelle ligne pourquoi pas) ainsi les plus débutants se feront une bonne idée de la chose ;)

 

Pour ma part je vais continuer à écrire le prochain cours en mettant le résultat de l'exo dedans. :D

Je ne me reconnecte que lundi donc bon week-end...

Cordialement

 

Lionel PERRIN | Ingénieur/Consultant Formateur expert Infrastructure - Géomédia

 

Civil 3D/Covadis/Autopiste/Infraworks 360 - VRD/Infrastructure routière ferroviaire Bus TRAM

Lien vers le commentaire
Partager sur d’autres sites

vraiment trop facile pour toi, c'est sur le cours que j'ai mis en téléchargement, pour débuter en Lisp.

Cordialement

 

Lionel PERRIN | Ingénieur/Consultant Formateur expert Infrastructure - Géomédia

 

Civil 3D/Covadis/Autopiste/Infraworks 360 - VRD/Infrastructure routière ferroviaire Bus TRAM

Lien vers le commentaire
Partager sur d’autres sites

bonjour

ne pense pas que c'est "trop facile"

souvent, comme en maths, plus l'énoncé est simple, plus l'exercice est compliqué.

le plus compliqué n'est jamais de "faire tourner" un programme,

c'est de le faire fonctionner QUOIQU' il arrive, il faut tenir compte que l'utilisateur va peut être

renseigner une case de dialogue avec du caractère où tu as prévu un réel, ou bien il n'est pas dans le bon système angulaire etc etc...

c'est d'ailleurs si simple que je n'ai pas trouvé où le télécharger ...

c'est pour te dire que j'ai deux mains gauches et en plus je n'ai que des pouces (hihihi)

à très bientôt :yltype:

Lien vers le commentaire
Partager sur d’autres sites

coucou

ça y est, j'ai trouvé ton pdf, par hasard mais j'ai trouvé

J'apporte une remarque au sujet de la conversion des angles

la vie est largement assez compliquée pour se la torturer à plaisir, à savoir

pour transformer des angles de systèmes d'unité, il n'est point nécessaire d'utiliser les valeurs naturelles que sont les sinus, par exemple

 

 AngleEnDegré = (AngleEnRadian / 180) * pi
AngleEnGrades = (AngleEnRadian / 200) * pi

 

il faut savoir aussi que notre cher AutoCad en bon américain, n'a pas le même référentiel angulaire que nous, et il est très souvent nécessaire de convertir les valeurs angulaires qu'il nous annonce.

à ce sujet je termine un tutorial VBA qui contient toutes les fonctions angulaires possibles.

(car en plus, elles dépendent du SCU)

 

amicalement

PS: tu n'es pas le seul concerné par ce ps, mais soyez rigoureux avec l'auretograffe,

une faute d'orthogtaphe peur changer le sens de la phrase... :casstet:

 

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour a tous, il me semble que c'est le moment de données les reponses au premier exercices, alors voici la mienne :

 

 (defun c:exo1 () ;definition de la routine
(setq depart (getpoint "\npoint de départ de la ligne :")) ;selection du point de départ
(setq dist (getdist "\nentrer la longueur :")) ;definir la longueur de la ligne
(setq angl (getreal "\nentrer angle :")) ;définir l'angle de tracé
(setq rad (* pi (/ angl 180.0))) ;convertion des dreges en radian
  (command "ligne"
   (setq point (polar depart 0 0)) ;entrée graphique du premier point
    (setq point (polar point rad dist)) ;tracé de la ligne vers le second point
 "")
 )

Voila c'est fini, enfin j'espere que c'est bon, chez moi ca fonctionne :)

 

A + tard

 

j'ai eu de gros probleme pour me connecter sur le site aujourd'hui

 

CCAD la DAO au service de l'Energie - http://c.cad.free.fr

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir

En réponse à CHRCHAT

 

     ;selection à l'écran du point de départ
(setq pd (getpoint"\nIndiquez le Point de Départ ...\n"))
   ;Saisie de la longueur de la ligne souhaitée
(setq lon(getreal"\nLongueur de la ligne\n"))
   ;Saisie de l'angle (gisement) de la ligne souhaitée
(setq dir (getreal "\nEntrez angle en degrés( depuis l'axe des Y ):"))
  ;transformation de l'angle saisi en radians
(setq dirrad (* pi (/ dir 180.0)))
  ;calcul du point d'arrivée
(setq pa (polar pd dirrad lon))
  ;lancement de la commande ligne
  ;j'utilise "_line" pour une parfaite compatibilité
(command "_line" pd pa "")

maintenant je vous propose de dessiner une ligne

longueur variable

angle variable

mais en référence à une ligne existante

à vos claviers les amis pour de nouvelles aventures

amicalement

 

 

Lien vers le commentaire
Partager sur d’autres sites

merci pour cette petite correction, je vois que j'ais trois petites erreurs,

 

la première sur getdist qui permet de rentrer la longueur soit au clavier soit a la souris getreal suffit puisque c'est une entrée clavier qu'on demande.

 

ensuite, je recalcul le point de depart alors qu'il a deja ete selectionné

 

et pour finir, il faut utiliser les commandes en anglais en non en francias pour la compatibilité

 

 

Merci Didier, mais peux-tu preciser ce que tu veux exactement dans la proposition d'exercice.

 

 

Personne d'autre que moi n'a de propositions ?

CCAD la DAO au service de l'Energie - http://c.cad.free.fr

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à vous tous

Juste un petite précision, il existe la fonction getangle qui permet une saisie avec le pointeur ou une saisie clavier, la valeur retourné est en radian

Je pense que didier veut que l'on récupère les valeurs de la première ligne (angle+longueur) et l'on additionne ensuite les valeurs de la seconde saisie pour dessiner la deuxième ligne (schématiquement angle=angle1+angle2 et longueur=longueur1+longueur2)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Voici ma réponse :

 (defun c:L45()
 (setq ptd (getpoint "\n pt de départ : "))  On lance la commande en demandant 
                                                             le point de départ.
 (setq l (getreal "\nlongueur du segment : ")) récupère des nbres à virgules.
 (setq ptf (polar ptd (/ pi 4) l)) trace à 45°
 (command "_line" ptd ptf "") trace la ligne de la variable ptd à ptf
 (princ) fin
 )

 

 

Je propose un autre exo: crée un carré en polyligne, en demandant le coin bas gauche et la longueur des côtés.

 

Je prépare la suite du cours, avec le minimum requis de vlisp ;)

 

Cordialement

 

Lionel PERRIN | Ingénieur/Consultant Formateur expert Infrastructure - Géomédia

 

Civil 3D/Covadis/Autopiste/Infraworks 360 - VRD/Infrastructure routière ferroviaire Bus TRAM

Lien vers le commentaire
Partager sur d’autres sites

Aussitot dit aussitot fait, voici pour le carre

 

 

 (defun convdr (a)        ;routine de conversion degrés en radian
   (* pi (/ a 180.0))
)

(defun c:carre ()
 (setq p1 (getpoint "\nIndiquez le point de départ du carrée :"))
 (setq long (getreal "\nIndiquez la longueur des côtés du carré :"))
 (command "polylign" p1
   (setq p2 (polar p1 (convdr 0) long)) ;1er côté
   (setq p3 (polar p2 (convdr 90) long)) ;2ème côté
   (setq p4 (polar p3 (convdr 180) long)) ;3ème côté
   "c" ;4ème côté
   )
 )

 

Vive les exercices !

CCAD la DAO au service de l'Energie - http://c.cad.free.fr

Lien vers le commentaire
Partager sur d’autres sites

Yes, les choses avancent vite, juste une astuce, dans le lisp, la fonction convdr est accessible, il est possible de faire par exemple

 

 (defun c:carre()

(defun convdr(a)
....
)
....
....
)

 

ce qui permet de ne faire qu'un seule "bloc" de la nouvelle fonction crée

Maintenant, pour éviter que des variables trainent dans le dessin

 

 (defun c:carre(/ long p1 p2 p3 p4)

Et pour terminer, afin d'éviter un nil d'apparaitre sur la ligne de commande une fois la routine exécuté, je mets un silence soit un princ à la fin du lisp

(defun c:carre()
...
...
...
(princ)
)

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

merci pour ces precision sur defun, je pensais qu'il fallait definir une a une les fonction,

 

par contre je comprends la definition de la variable dans (defun convdr(a) puisque a varie dans la suite du prog

 

mais pas dans (defun c:carre(/ long p1 p2 p3 p4)

 

quel est l'interet d'appeller les variables en tête de prog alors qu'on les définies apres par setq

CCAD la DAO au service de l'Energie - http://c.cad.free.fr

Lien vers le commentaire
Partager sur d’autres sites

On peut les définir une à une, tout dépend ce que l'on veut faire.

Le (defun convdr(a) correspond à l'appel d'une fonction avec un argument, dans le cas présent, j'appelle la fonction de conversion sur un angle donnée (variable a)

Le principe de définir ses variables à l'intérieur de la fonction permet de les laisser en "local". Dans ton exemple, si je fais !p1 sur ma ligne de commande, autocad me retourne la valeur du point, alors que si je les laissent en "local", quand je fais !p1 sur ma ligne de commande, il m'est retourné nil. C'est surtout pratique quand on manipule des listes, on n'est pas obligé de les définir au départ en tant que nil

On peut faire une fonction avec un argument et des variables en "local" aussi (defun convdr(a / var1 var2)

On peut faire encore plus subtile en souhaitant qu'une fonction me retourne une valeur en fonction de l'argument, mais on verra ça plus tard

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

ok,

 

donc si je comprends bien definir les variable avec defun( x y z) permet de les rappeller dans le dessin en cours, pour éventuellement les réutiliser avec un autre prog ou en point d'insertion d'une ligne par exemple;

 

alors que si on les definies uniquement avec setq elles ne sont valable que pour le prog qui s'execute.

 

;)

CCAD la DAO au service de l'Energie - http://c.cad.free.fr

Lien vers le commentaire
Partager sur d’autres sites

Je ne te suis pas tout à fait, le setq défini une variable

Le but de laisser les variables en local, c'est que ça évite de perturber éventuellement d'autre fonctions qui pourraient faire appel à cette variable. Ca permet d'être plus "propre", de mieux structurer les fonctions que je souhaite créer. Je définis tout ce qui appartient à cette fonction et uniquement pour celle-là

 

Par exemple

 (defun c:test(/ x y z)
(setq x 1.0 y 1.0 z 0.0)
)

 

mes variables sont en local et en faisant sur ma ligne de commande !x, j'ai nil comme réponse

 

 (defun c:test()
(setq x 1.0 y 1.0 z 0.0)
)

mes variables ne sont plus en local dans ma fonction, et en refaisant !x sur ma ligne de commande, j'ai 1.0 comme réponse

 

 (defun c:test(/ x y z)
(setq x 2.0 y 2.0 z 1.0)
)

 

Mes variables sont en local, et en refaisant !x, j'ai cette fois-ci 1.0 comme réponse

 

Maintenant j'ai une fonction qui fait elle aussi appelle a la variable x, mais pas forcement sur la valeur 1.0 et qui à besoin, histoire de corser le tout d'une valeur aphanumérique, alors ça commence à être le souk et pour débuguer, bon courage

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Mais ou sont poster les reponses des utilisateurs qui souhaitaient participé au forum

 

Hormis Rimbo et moi, pas une seule réponse a l'exercice

 

Merci a toutes les autres personnes qui réponde sur ce post pour leurs corrigées

 

Je ne sais pas ce quand pense Rimbo, mais ca ne doit pas le motivé pour continuer le cours et je trouve ca dommage, tant d'effort et si peut de résultat.

 

enfin j'espere que je me fait des idées.

 

Didier, peux tu préciser ce que tu desirais réaliser avec je site:

 

maintenant je vous propose de dessiner une ligne

longueur variable

angle variable

mais en référence à une ligne existante

à vos claviers les amis pour de nouvelles aventures

amicalement

 

Encore merci à tous et bon courage a rimbo pour le cour n°2

 

Amicalement

CCAD la DAO au service de l'Energie - http://c.cad.free.fr

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonjour à tous, je suis débutante en lisp depuis même pas une semaine mais j'ai enfin réussi a faire l'exo de Rimbo grâce a son 1er cours. :D

Voiçi ma réponse pour sa droite de 45° :

 

(defun c:li()

(setq pt(getpoint "\npt de depart:")); demande du point de départ

(setq d(getreal "\ndistance de la ligne:")); demande de la distance de la ligne

(setq a(polar pt (/ (* pi 45.0) 180.0) d)); definir un angle de 45° pour la ligne

(command "_line"pt a""); dessiner la ligne

(princ);fin

)

 

VOICI DONC MON 1er PROGRAMME LISP !!

 

Pour le rectangle en polyligne, en demandant le coin bas gauche et les longueurs des côtés:

(defun c:rec()

(setq pa (getpoint "\n pt de base:"))

(setq b (getreal "\n longueur:"))

(setq c (getreal "\n largeur:"))

(setq pb (polar pa pi b))

(setq pc (polar pb (/ pi 2) c))

(setq pd (polar pa (/ pi 2) c))

(command "_pline"pa pb pc pd "c")

(princ)

)

 

J'espere que c'est bon, mais chez moi ça marche.

 

Lien vers le commentaire
Partager sur d’autres sites

Félicitations

 

et encouragements,

 

 

Si chez toi ca marche, c'est que c'est bon non ?

 

Il ya toujours plein de possibilités mais le + simple est souvent le mieux, n'est-ce pas ?

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

bonsoir ssd91

je rejoins Tramber pour te féliciter,

mais si tu ne veux pas que ton rectangle soit aligné sur l'axe des X,

comment faire ?

loin de moi l'idée de vouloir critiquer,

non, c'est pour te faire progresser,

on va dire que tu as écrit la version 1,

livre nous la version 2, qui nous permettra de faire la même chose

mais en orientant la base du rectangle, çà marche ?

mais tu l'as peut être déjà fait ...

amicalement, bonne soirée,

et ne rêve pas de parenthèses fermantes ;)

Lien vers le commentaire
Partager sur d’autres sites

Je me joins à mon tour au concert de félicitations pour ton premier programme. Il n'y a rien de plus plaisant que de voir sa réalisation fonctionner et plus encore quand d'autres en profite. Cela à permis pour commencer à te familiariser avec le lisp et de donner un aperçu des possibilités qu'offre Autocad

Encore bravo et bonne continuation

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Merçi à vous trois pour ces félicitations!! Il est clair que je ne fais que des choses simple car je connais pas toutes les commandes!!

En ce qui concerne ta proposition Didier: pour que le rectangle ne soit pas aligné sur l'axe des X, il suffit de changé l'angle tout simplement. J'ai pas le temps de le faire tout de suite (vue le beau temps) et en plus je viens tout juste de me connecter et de voir tout vos messages, j'y repondrai plus tard...sans problème !! Peut être ce soir ou demain!!

Une question..., dans mon entourage professionnel, on me dit qu'il serait plus utile de faire du VBA (ouvert à plusieurs logiciels comme excel...) Je ne sais plus quoi faire!! :( Vous en pensez quoi? Le VBA ou le LISP??

 

Merçi à vous tous :D

 

@+

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

bonjour ssd91

c'est très de changer l'angle, comme tu dis, mais

il est préférable de proposer à l'utilisateur de choisir son orientation.

je te laisse réfléchir là dessus ...

Quant à ton intérrogation sur le choix du language,

plusieurs cas se présentent :

1___ pour tout ce qui est "quotidien", le lisp est parfait

et rapide à apprendre, car on utilise un "language" "autocadien"

du style

(command "_line" PointDepart PointArrivée "")

2___ pour ce qui est plus "évolué" et qui se veut "interlogiciel"

le VBA est plus efficace, car on est dans un environnement "windows"

et non "AutoCad".

en revanche, il est plus délicat à utiliser, car c'est un autre monde ...

par contre pour tout ce qui est "cases de dialogues" alors là

le VBA à plusieurs longueurs d'avance sur le DCL.

 

En résumé, il me semble nécessaire de progresser en parallèle

en Lisp et en VBA, lorsqu'on débute à ce jour.

c'est sûr, que les anciens combattants, n'ont que le VBA à apprendre

aujourd'hui, s'ils " parlent " le Lisp, mais peu se remettent en cause et restent

à ce qu'ils savent.

Tu peux toujours faire la même chose en VBA, que ce que tu as écrit en Lisp

et faire de toi même le choix qui te conviendra.

amicalement

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é