Aller au contenu

LISP répartition automatique des aciers


Messages recommandés

Invité pleche.damien
Posté(e)

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))
)) 

 

Posté(e)

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

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é