Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Discussion: [Lisp] Boucle

  1. #1
    Invité de passage
    Inscrit en
    septembre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 2
    Points : 0
    Points
    0

    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 :
    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
    Inscrit en
    septembre 2003
    Messages
    4 563
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 4 563
    Points : 5 993
    Points
    5 993

    Par défaut

    Avec CLisp et
    Code :
    (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 : Intérieur avec jeune femme de Vilhelm Hammershoi

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Inscrit en
    septembre 2003
    Messages
    4 563
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 4 563
    Points : 5 993
    Points
    5 993

    Par défaut

    Après quelques recherches, avec Allegro voici ce que j'ai obtenu avec :
    Code :
    (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 : Intérieur avec jeune femme de Vilhelm Hammershoi

  4. #4
    Invité de passage
    Inscrit en
    septembre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 2
    Points : 0
    Points
    0

    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 :
    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)
      &#40;while &#40;<= nbrf 0&#41;
       &#40;setq nbrf &#40;getint "\nEntrez le nombre de folio&#58;"&#41;&#41;
      &#41;
       
      ;variable "dist" donne la séparation entre chaque folio
      &#40;setq dist 470&#41;
    
      ;Spécifier le point d'insertion du premier folio
      &#40;setq p0 &#40;getpoint "\nEntrez point d'insertion&#58;"&#41;&#41;
    
      ;Attribution des variables Text
    
      &#40;prompt "\nIMPORTANT\nSi votre texte comprend des espaces le mettre entre guillemets"&#41;
      &#40;setq t1 &#40;getstring "\nEntrez le nom de la société&#58;"&#41;&#41;
      &#40;setq t2 &#40;getstring "\nEntrez le nom de l'affaire&#58;"&#41;&#41;
      &#40;setq t3 &#40;getstring "\nEntrez le Déscriptif du folio&#58;"&#41;&#41;
      &#40;setq t4 &#40;getstring "\nEntrez le N° du plan&#58;"&#41;&#41;
      &#40;setq t5 &#40;getstring "\nEntrez la phase du projet&#58;"&#41;&#41;
      &#40;setq t6 &#40;getstring "\nEntrez la Date&#58;"&#41;&#41;
      &#40;setq t7 &#40;getstring "\nEntrez l'èchelle du plan&#58;"&#41;&#41;
    
      ;initialisation de i=1
      &#40;setq i 1&#41;
    
      ;Début de la boucle
      &#40;while &#40;<= i nbrf&#41;
     
        ;Attribution de la variables P1
        &#40;setq p1 &#40;list &#40;+ &#40;car p0&#41;&#40;* dist &#40;- i 1&#41;&#41;&#41; &#40;cadr p0&#41;&#41;&#41;
       
        ;Dessin du cadre et cartouche folio
        &#40;command "rectang" p1 &#40;list &#40;+ &#40;car p1&#41; 420&#41;&#40;+ &#40;cadr p1&#41; 297&#41;&#41;""&#41;
        &#40;command "rectang" &#40;list &#40;+ &#40;car p1&#41; 10&#41;&#40;+ &#40;cadr p1&#41; 10&#41;&#41; &#40;list &#40;+ &#40;car p1&#41; 410&#41;&#40;+ &#40;cadr p1&#41; 40&#41;&#41;""&#41;
        &#40;command "rectang" &#40;list &#40;+ &#40;car p1&#41; 10&#41;&#40;+ &#40;cadr p1&#41; 45&#41;&#41; &#40;list &#40;+ &#40;car p1&#41; 410&#41;&#40;+ &#40;cadr p1&#41; 287&#41;&#41;""&#41;
        &#40;command "ligne" &#40;list &#40;+ &#40;car p1&#41; 10&#41;&#40;+ &#40;cadr p1&#41; 25&#41;&#41; &#40;list &#40;+ &#40;car p1&#41; 410&#41;&#40;+ &#40;cadr p1&#41; 25&#41;&#41;""&#41;
        &#40;command "ligne" &#40;list &#40;+ &#40;car p1&#41; 70&#41;&#40;+ &#40;cadr p1&#41; 40&#41;&#41; &#40;list &#40;+ &#40;car p1&#41; 70&#41;&#40;+ &#40;cadr p1&#41; 10&#41;&#41;""&#41;
        &#40;command "ligne" &#40;list &#40;+ &#40;car p1&#41; 290&#41;&#40;+ &#40;cadr p1&#41; 40&#41;&#41; &#40;list &#40;+ &#40;car p1&#41; 290&#41;&#40;+ &#40;cadr p1&#41; 10&#41;&#41;""&#41;
        &#40;command "ligne" &#40;list &#40;+ &#40;car p1&#41; 350&#41;&#40;+ &#40;cadr p1&#41; 40&#41;&#41; &#40;list &#40;+ &#40;car p1&#41; 350&#41;&#40;+ &#40;cadr p1&#41; 10&#41;&#41;""&#41;
    
        ;Création des texte
        ;Définition du style de texte
        &#40;command "style""verdana""verdana" "" "" "" "" ""&#41;
        ;"verdana" est maintenant le style de texte courant
       
    
        ;Création des textes constant du cartouche
        &#40;command "texte""j""hg" &#40;list &#40;+ &#40;car p1&#41; 12.5&#41;&#40;+ &#40;cadr p1&#41; 37.5&#41;&#41;"3.5" "" "Plan N° &#58;" "" ""&#41;
        &#40;command "texte""j""hg" &#40;list &#40;+ &#40;car p1&#41; 292.5&#41;&#40;+ &#40;cadr p1&#41; 37.5&#41;&#41;"3.5" "" "Phase &#58;" "" ""&#41;
        &#40;command "texte""j""hg" &#40;list &#40;+ &#40;car p1&#41; 292.5&#41;&#40;+ &#40;cadr p1&#41; 22.5&#41;&#41;"3.5" "" "Ech. &#58;" "" ""&#41;
        &#40;command "texte""j""hg" &#40;list &#40;+ &#40;car p1&#41; 352.5&#41;&#40;+ &#40;cadr p1&#41; 22.5&#41;&#41;"3.5" "" "N° du folio &#58;" "" ""&#41;
        &#40;command "texte""j""hg" &#40;list &#40;+ &#40;car p1&#41; 352.5&#41;&#40;+ &#40;cadr p1&#41; 37.5&#41;&#41;"3.5" "" "Date &#58;" "" ""&#41;
        
       
        ;Création des textes variables du cartouche
    
        &#40;command "texte""j""mc" &#40;list &#40;+ &#40;car p1&#41; 40&#41;&#40;+ &#40;cadr p1&#41; 17.5&#41;&#41;"5" "" t1 "" ""&#41;
        &#40;command "texte""j""mc" &#40;list &#40;+ &#40;car p1&#41; 180&#41;&#40;+ &#40;cadr p1&#41; 32.5&#41;&#41;"7" "" t2 "" ""&#41;
        &#40;command "texte""j""mc" &#40;list &#40;+ &#40;car p1&#41; 180&#41;&#40;+ &#40;cadr p1&#41; 17.5&#41;&#41;"7" "" t3 "" ""&#41;
        &#40;command "texte""j""bd" &#40;list &#40;+ &#40;car p1&#41; 67&#41;&#40;+ &#40;cadr p1&#41; 27.5&#41;&#41;"4" "" t4 "" ""&#41;
        &#40;command "texte""j""bd" &#40;list &#40;+ &#40;car p1&#41; 347&#41;&#40;+ &#40;cadr p1&#41; 27.5&#41;&#41;"4" "" t5 "" ""&#41;
        &#40;command "texte""j""bd" &#40;list &#40;+ &#40;car p1&#41; 407&#41;&#40;+ &#40;cadr p1&#41; 27.5&#41;&#41;"4" "" t6 "" ""&#41;
        &#40;command "texte""j""bd" &#40;list &#40;+ &#40;car p1&#41; 347&#41;&#40;+ &#40;cadr p1&#41; 12.5&#41;&#41;"4" "" t7 "" ""&#41;
    
        ;Création du texte numero du folio
        &#40;command "texte""j""bd" &#40;list &#40;+ &#40;car p1&#41; 407&#41;&#40;+ &#40;cadr p1&#41; 12.5&#41;&#41;"4" "" &#40;strcat &#40;itoa i&#41;"/"&#40;itoa nbrf&#41;&#41; "" ""&#41;
    
        ;Rajoute +1 à i
        &#40;setq i &#40;1+ i&#41;&#41;
    
      ;Fin de la boucle
      &#41;
    
      ;Activez l'accroche objet
      &#40;command "accrobj""extr,mil,cen,int,per,exte"&#41;
    
      &#40;prompt "\nLes folios ont été créés!"&#41;
      
    ;Fin du programme
      &#40;prompt "\nDeveloped by mitnix"&#41;
      &#40;princ&#41;
    &#41;
    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 régulier
    Inscrit en
    juin 2002
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 162
    Points : 91
    Points
    91

    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 régulier
    Inscrit en
    juin 2002
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 162
    Points : 91
    Points
    91

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •