jhazz Posté(e) le 19 février 2009 Posté(e) le 19 février 2009 Bonjour Bon je débute en LISP. Le but du programme est d'insérer un bloc qui tiens compte de l'échelle de mon plan sans que j'ai besoin de la renseigner. Le problème c'est que je ne sais pas comment faire pour inserer un bloc au bon facteur d'échelle. A noté que le bloc est au mètre. J'ai essayé d'utiliser If mais cela ne marche pas La c'est mon début du programme.(defun c:F (/)(initget 1 "M C i")(setq A(getkword "Unite du dessin? (M/C/i)"))(command "inserer" "c:/test lisp/fm")(princ)) Par conter si vous pouviez me dire quel fonction utilisé en détaillent sont fonctionnement plutôt que de me donner tout de suite la réponse ça serait sympa.
Tramber Posté(e) le 19 février 2009 Posté(e) le 19 février 2009 (command "inserer" "bloc" (getpoint) 1 1 0) ou (command "inserer" "bloc" (list 0 0) 2.3 2.3 0) Ces indices t'aident-ils ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 19 février 2009 Posté(e) le 19 février 2009 Salut Regarde les variables INSUNITS, INSUNITSDEFSOURCE et INSUNITSDEFTARGET @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
rebcao Posté(e) le 19 février 2009 Posté(e) le 19 février 2009 Bonjour, et si tu as au minimum une 2008 tu as le mode ANNOTATIF ! Christian 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 @)
Tramber Posté(e) le 19 février 2009 Posté(e) le 19 février 2009 Oh, les gars, laissez-le apprendre :cool: Au lieu du if, je te conseille COND : (setq ech(cond((= A "M") 1)((= A "C") 2.3)((= A "i") 5)(T 1)))(command "inserer" "bloc" (list 0 0) ech ech 0) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
jhazz Posté(e) le 19 février 2009 Auteur Posté(e) le 19 février 2009 Re (setq A(getkword "Unite du dessin? (M/C/i)"))(if (= A M) (setvar "unitsdefsource" 0)) En faite j'aimerai savoir ce que comprend le lisp dans les deux lignes de commandes ci dessus. Pour moi: Il stocke la réponse a la question dans A et si A est égale a M,M étant une des réponses possible, alorsla variable unitsdefsource est mise a zéro. Je pense que mon problème viens de la condition.Merci de l'aide et pour l'aide a venir
jhazz Posté(e) le 19 février 2009 Auteur Posté(e) le 19 février 2009 je viens de voir ton message tramber j'essaye cond qui doit être la fonction lisp que je cherchais. La fonction cond peut se traduire par si alors que IF s'utilise plus tôt pour vérifier une condition si j'ai bien tout compris
jhazz Posté(e) le 19 février 2009 Auteur Posté(e) le 19 février 2009 (defun c:F (/)(setvar "insunits" 0)(initget 1 "M C i")(setq A(getkword "Unite du dessin? (M/C/i)"))(setq ech(cond((= A "M") 1)((= A "C") 2.3)((= A "i") 5)(T 1)))(command "inserer" "c:/test lisp/FA" (getpoint) ech ech 0)(princ)) Voila le prog qui marche. Merci beaucoup pour l'aide.Maintenant je vais rajouter encore quelques conditions donc je vais peut etre encore avoir besoin d'aide. Y un petit truc que je comprend pas. C'est les valeurs 1 , 2.3 et 5. C'est des valeurs que tu m'as donné au hasard ou alors cela correspond a quelque chose [Edité le 19/2/2009 par jhazz]
Tramber Posté(e) le 19 février 2009 Posté(e) le 19 février 2009 COND est un peu comme un IF multiple et permet de s'en sortir quand il y a plusieurs réponses. J'ai mis T qui donnera 1 pour le cas où aucune des 3 réponses M,C ou i n'est choisie. Fait attention, getkword renvoie une chaine et non un chiffre : (= A "M") et non (= A M) Ne fais pas attention au message de Patrick_35 ( :cool: ) et commence avec des blocs sans unité d'insertion (si tu sais ce que c'est) pour apprendre déjà la base, l'utilisation de (command "inserer" "bloc" (getpoint) 1 1 0) [Edité le 19/2/2009 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 19 février 2009 Posté(e) le 19 février 2009 Re TramberJe ne comprends pas la difficulté de ma réponse. :( Si le dessin est en mm et le bloc en m, il suffit juste de changer la variable.C'est de l'Autocad pur et dur. :o @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
jhazz Posté(e) le 19 février 2009 Auteur Posté(e) le 19 février 2009 Généralement mes bloques sont crées sans unité vu qu'on est plusieurs a les utilisés et que je ne suis pas le seul a en faire. Tous le monde faire pareil comme ca. [Edité le 19/2/2009 par jhazz]
Tramber Posté(e) le 19 février 2009 Posté(e) le 19 février 2009 Et toc Patrick_35, tralalalalère ! D'ailleurs rien ne nous dit qu'on est pas en V2000 ou 2002 ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 19 février 2009 Posté(e) le 19 février 2009 Vu comme ça..... touché......coulé @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
jhazz Posté(e) le 20 février 2009 Auteur Posté(e) le 20 février 2009 j'ai 2007 au travail. Maintenant je recherche un truc plus compliqué. LA question: (setq A(getkword "Unite du dessin? (M/C/i)"))reviens a chaque fois que je lance le lisp. Il faudrait que la question ne sois posé qu'une fois par plan. Mais la je vois vraiment pas comment faire.
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