IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lisp Discussion :

[Lisp] Boucle


Sujet :

Lisp

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [Lisp] Boucle
    Bonjour tout le monde,

    Voila je suis utilisateur Autocad et je voudrait utilisé visual lisp, donc j'ai cherche bidouillé, je suis arrivé a faire en gros ce que je voulait mais reste un petit détail ou il me faudrait vraiment de l'aide.

    Voila dans mon prog je demande a l'utilisateur de rentrer une valeur dans la variable que j'ai nommer "nbrf"
    Puis cette variable me sert dans une autre formule.

    je v vous donner le code pour mieux comprendre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (setq nbrf (getreal "\nentrez le nombre de folio:"))
    (setq dist 470)
    (setq p1 (list (+ 0(* dist (- nbrf 1))) 0))
    voila juste une partie du code
    ET voila ce que je voudrait faire.

    il faut que la troisième ligne ce repete le nombre de fois que l'utilisateur a dit dans la variable nbrf
    Donc si nbrf=3 donc la ligne est répéte 3fois

    et il faut aussi que a chaque fois qu'il la répéte il augmente le chiffre de 1, je m'esplique:
    1er fois répété: nbrf =1
    2èmé fois répété: nbrf=2
    3éme fois répété: nbrf=3
    jusqu'au nombre de fois donner par l'utilisateur.

    donc comment cette boucle en lisp et es qui faut que j'utilise une autre variable?

    desolé je suis pas tres clair mais comme je vous est dit je connait rein en programmation, donc je connait pas les therme exact.

    merci pour vos réponse

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Avec CLisp et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (setq p1 (list (+ 0(* dist (- nbrf 1))) 0))
    j'ai obtenu (940 0)
    Quelle liste voudrais-tu obtenir en fait ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Après quelques recherches, avec Allegro voici ce que j'ai obtenu avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (let ((x nbrf))(for i from 1 to x do (setq pl (append pl (list (list (* dist (setq nbrf(- nbrf 1))) 0)))))pl)
    ((940 0) (470 0) (0 0))
    Est-ce que tu voulais ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Non enfait je me suis trés trés mal expliquer. mais j'ai trouver apres quelque recherche faut utilisé la boucle avec "tan que" "while".
    Mais merci d'avoir chercher a comprendre ce que j'ai voulut dire.

    Bon je donne le code comme ca si ca intèrresse quelqu'un ca sert a faire des folios en A3 paysage, Avec le cartouche en bas (bon c'était juste un petit code pour commencer a apprendre donc pas des plus utile).
    Mais si des gens souhaite s'amusez avec et par exemple l'ameliorrer, simplifier le code, ou plien d'autre truc je veut bien que l'on me fasse parvenir les modif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    ;Folio.lsp
    (defun c:cfolio ()
     
    ;c:cfolio, permet de créer un nombre indéfini de folio A3 vertical
     
    ;A insérer dans fichier acad.pgp pour création d'alias
    ;cfo,   *cfolio
     
      ;Désactivez SCU et l'accroche object
      (command "accrobj""in" "iconescu""in")
     
      ;Entrez le nombre de folio dans la Variable "nbrf" positive
      (setq nbrf 0)
      (while (<= nbrf 0)
       (setq nbrf (getint "\nEntrez le nombre de folio:"))
      )
     
      ;variable "dist" donne la séparation entre chaque folio
      (setq dist 470)
     
      ;Spécifier le point d'insertion du premier folio
      (setq p0 (getpoint "\nEntrez point d'insertion:"))
     
      ;Attribution des variables Text
     
      (prompt "\nIMPORTANT\nSi votre texte comprend des espaces le mettre entre guillemets")
      (setq t1 (getstring "\nEntrez le nom de la société:"))
      (setq t2 (getstring "\nEntrez le nom de l'affaire:"))
      (setq t3 (getstring "\nEntrez le Déscriptif du folio:"))
      (setq t4 (getstring "\nEntrez le N° du plan:"))
      (setq t5 (getstring "\nEntrez la phase du projet:"))
      (setq t6 (getstring "\nEntrez la Date:"))
      (setq t7 (getstring "\nEntrez l'èchelle du plan:"))
     
      ;initialisation de i=1
      (setq i 1)
     
      ;Début de la boucle
      (while (<= i nbrf)
     
        ;Attribution de la variables P1
        (setq p1 (list (+ (car p0)(* dist (- i 1))) (cadr p0)))
     
        ;Dessin du cadre et cartouche folio
        (command "rectang" p1 (list (+ (car p1) 420)(+ (cadr p1) 297))"")
        (command "rectang" (list (+ (car p1) 10)(+ (cadr p1) 10)) (list (+ (car p1) 410)(+ (cadr p1) 40))"")
        (command "rectang" (list (+ (car p1) 10)(+ (cadr p1) 45)) (list (+ (car p1) 410)(+ (cadr p1) 287))"")
        (command "ligne" (list (+ (car p1) 10)(+ (cadr p1) 25)) (list (+ (car p1) 410)(+ (cadr p1) 25))"")
        (command "ligne" (list (+ (car p1) 70)(+ (cadr p1) 40)) (list (+ (car p1) 70)(+ (cadr p1) 10))"")
        (command "ligne" (list (+ (car p1) 290)(+ (cadr p1) 40)) (list (+ (car p1) 290)(+ (cadr p1) 10))"")
        (command "ligne" (list (+ (car p1) 350)(+ (cadr p1) 40)) (list (+ (car p1) 350)(+ (cadr p1) 10))"")
     
        ;Création des texte
        ;Définition du style de texte
        (command "style""verdana""verdana" "" "" "" "" "")
        ;"verdana" est maintenant le style de texte courant
     
     
        ;Création des textes constant du cartouche
        (command "texte""j""hg" (list (+ (car p1) 12.5)(+ (cadr p1) 37.5))"3.5" "" "Plan N° :" "" "")
        (command "texte""j""hg" (list (+ (car p1) 292.5)(+ (cadr p1) 37.5))"3.5" "" "Phase :" "" "")
        (command "texte""j""hg" (list (+ (car p1) 292.5)(+ (cadr p1) 22.5))"3.5" "" "Ech. :" "" "")
        (command "texte""j""hg" (list (+ (car p1) 352.5)(+ (cadr p1) 22.5))"3.5" "" "N° du folio :" "" "")
        (command "texte""j""hg" (list (+ (car p1) 352.5)(+ (cadr p1) 37.5))"3.5" "" "Date :" "" "")
     
     
        ;Création des textes variables du cartouche
     
        (command "texte""j""mc" (list (+ (car p1) 40)(+ (cadr p1) 17.5))"5" "" t1 "" "")
        (command "texte""j""mc" (list (+ (car p1) 180)(+ (cadr p1) 32.5))"7" "" t2 "" "")
        (command "texte""j""mc" (list (+ (car p1) 180)(+ (cadr p1) 17.5))"7" "" t3 "" "")
        (command "texte""j""bd" (list (+ (car p1) 67)(+ (cadr p1) 27.5))"4" "" t4 "" "")
        (command "texte""j""bd" (list (+ (car p1) 347)(+ (cadr p1) 27.5))"4" "" t5 "" "")
        (command "texte""j""bd" (list (+ (car p1) 407)(+ (cadr p1) 27.5))"4" "" t6 "" "")
        (command "texte""j""bd" (list (+ (car p1) 347)(+ (cadr p1) 12.5))"4" "" t7 "" "")
     
        ;Création du texte numero du folio
        (command "texte""j""bd" (list (+ (car p1) 407)(+ (cadr p1) 12.5))"4" "" (strcat (itoa i)"/"(itoa nbrf)) "" "")
     
        ;Rajoute +1 à i
        (setq i (1+ i))
     
      ;Fin de la boucle
      )
     
      ;Activez l'accroche objet
      (command "accrobj""extr,mil,cen,int,per,exte")
     
      (prompt "\nLes folios ont été créés!")
     
    ;Fin du programme
      (prompt "\nDeveloped by mitnix")
      (princ)
    )
    et encor merci

    Ma prochaine étape je vais essayer de comprendre comment faire un interfasse graphique et d'en faire un pour celui la.

    V'la a bientot

  5. #5
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 198
    Points : 139
    Points
    139
    Par défaut
    Salut,
    utilise la fonction "repeat"
    Pour des renseignements très complets sur TOUT Autocad, je te conseille de devenir membre de AUGI (autocad user group)

    Evite la fonction command pour creer des entitées. Regarde du côté de entmake.

    Pour un premier contact avec le graphic, essaie (alert "string")

  6. #6
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 198
    Points : 139
    Points
    139
    Par défaut
    Bonjour,
    Quelques conseils pour autolisp
    (prompt "\nIMPORTANT\nSi votre texte comprend des espaces le mettre entre guillemets")
    Il existe une variable acceptant les espaces, je crois initget

    Definir les variables en début de (sub)fonction.
    les regrouper:
    (setq a 1
    b 2
    c 3
    )
    Faire attention au nom des variables:
    ta variable "dist" est une fonction dans la version GB.

    Utiliser la fonction while si une condition doit stopper la boucle.

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. [langage] if et boucle { ..}
    Par kacedda dans le forum Langage
    Réponses: 15
    Dernier message: 28/04/2003, 17h25
  3. [directsound] boucle de traitement de son
    Par gargle dans le forum DirectX
    Réponses: 5
    Dernier message: 24/03/2003, 10h47
  4. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38
  5. Réponses: 2
    Dernier message: 29/05/2002, 20h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo