Invité pleche.damien Posté(e) le 10 mai 2011 Posté(e) le 10 mai 2011 BONJOURS,Je souhaite créer un programme lisp qui me répartie automatiquement les aciers (défini et déssiné par des cercles ) je souhaite les répartirs par rapport à une distance défini sur mon programme lisp par deux point "ptac4 et ptac2". J'ai donc demandé de donner le nombre d'acier, j'ai créer une variable "rep" pour que le programme voi si la boucle "while" doit s'arreter parsqu'il vient de finir la boucle de répartition des aciers. Je vous mets ci-joint les lignes lisp que g commencé à rentrer (le programme n'est pas complet) mais il y en à suffisament pour comprendre les érreur de mon programme... En effet des lors que je lance mon programme j'ais l'impression que la boucle de répartition des aciers ne s'arrète jamais... Une copie des aciers s'éffectue en nombres important!!!! (l'espacement des aciers sont respectés). Si vous avez une solution pour remédier à se problème ou un programme similaire j'en recevrai toute propositions de votre part. Merci a tousse (command "polylign" ptac4 ptac2 "c") (command "cercle" ptac2 "d" 0.8) (setq nbre (getint "\nDonner le nombre d'acier: ")) ;; Définit une variable "long" et la fixe à zéro (0), (setq long 0) ;; Retourne un saut de ligne dans la fenêtre de texte ;; et attribut à la variable "rep" la valeur "0" par défaut, (terpri) (setq rep "O") ;; Boucle : Evalue "rep" et regarde si celle-ci est "O" ou "OUI" avant de continuer le programme. ;; Sinon, retourne dans la boucle jusqu'à ce que "O" ou "OUI" soit trapé, (while (or (= rep "O") (= rep "OUI")) ;; Attribut à la variable "d1" la distance entre les points "pTAC2" et "pTAC4", (setq d1 (distance ptac2 ptac4)) ;; Additionne "d1" et "long" pour la ré-attribuer dans la variable "long", (setq long (+ long d1)) ;; Attribut à la variable "alfa" l'angle que décrit les points "pTAC2" et "pTAC4", (setq alfa (angle ptac2 ptac4)) ;; Divise la distance "d1" et "nbre" pour l'attribuer à la variable "esp", (setq esp (/ d1 nbre)) ;; Lance la commande 'cercle' afin tracer, depuisa un point "ptac2" (command "cercle" ptac2 "d" 0.8 "") ;; Convertie un nombre (entier ou réel) en un nombre entier et l'attribut à la variable "esp1", (setq esp1 (fix esp)) ;; Incrémente d'un le nombre se trouvant dans la variable "esp" et la ré-attribut dans celle-ci, (setq esp1 (+ 1 esp1)) ;; Evalue l'argument "esp1" et retourne la valeur de la dernière expression, (repeat esp1 ;; Rassemble plusieurs expressions en une seule, (progn (setq ptac5 (polar ptac2 alfa esp1)) ;; Trace le cercle, (command "cercle" ptac2 "d" 0.8 "") ;; Détermine un point situé à la distance "esp1" et à l'angle "alfa" ;; d'un point donné "ptac2", et la stock à nouveau dans la variable "ptac2", (setq ptac2 (polar ptac2 alfa esp1)) ) ) ;; Détermine un point situé à la distance "O.2" et à l'angle "alfa" ;; d'un point donné "p2", et la stocke dans la variable "p4", (setq ptac6 (polar ptac4 alfa esp1)) ;; Affecte la valeur de la variable "ptac2" à la variable "ptac4", (setq ptac2 ptac4) ) (command "cercle" ptac2 "d" 0.8 "") (setq long (/ long 1)) ))
(gile) Posté(e) le 10 mai 2011 Posté(e) le 10 mai 2011 Salut, Tout d'abord, je me suis permis de re-formater le code que tu avais posté pour que ton message soit lisible. Pour ton problème de boucle infinie, tu fais : (setq rep "O") (while (or (= rep "O") (= rep "OUI")) ... ) mais rien à l'intérieur de l'expression while ne modifie la variable rep, donc (= rep "O") retourne toujours T... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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