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 :

Créer une polyligne - problème de boucle


Sujet :

Lisp

  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Créer une polyligne - problème de boucle
    Bonjour à tous,

    Voila mon problème,

    J'ai fait une petite routine afin de créer une polyligne sur une sélection de point.
    Je fais une boucle sur cette sélection, mais le problème c'est que le programme commence la boucle par le dernier élément créé de ma sélection pour finir par le premier.
    Moi je voudrais le contraire....
    Voici la routine....

    Voila je vous remercie par avance.
    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
    (defun c:d-courbe()
    (setvar "clayer" "0")
    (setq selbha (ssget "X" '((8 . "0") (2 . "altmat"))))
    (command "_pline"
    (if selbha
    		(progn ; 
    			(while (/= (sslength selbha) 0)
    	; on compte le nombre de point                                                         
      (setq long (sslength selbha))
      (print long)  
      (setq ent (ssname selbha 0))
      (setq compte 0)
      ;Renvoie le nom d'objet (entité) de l'élément indexé dans un jeu de sélection
      (setq e1 (ssname selbha compte))
      ;Récupère les données de définition d'un objet (entité).
      (setq e (entget e1))
    (setq p1 (cdr (assoc 10 e)))
    (setq e2 (entnext ent))
    (setq e3 (entnext e2))
    (setq e4 (entnext e3))
    (setq code (cdr(assoc 1 (entget e4))))
    ;(print code)
    (command "_non" p1)
    (if (= code "4")
    (command "Clore")
                        (if (= code "3") 
                        (command "")
                                             (if (= code "1") 
                                             (command "_non" "LI")
                                                                               (if (= code "2") 
                                                                               (command "_non" "Arc")
                                                                                );if
                                                );if
                          );if           
    );if
     
    (setq selbha (ssdel ent selbha))
    			) ; while
    		) ; progn
    );if
    )
    )

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 35
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    La fonction ssget avec _X parcours toute la base de donnée de ton dessin suivant son ordre de création (comme le ferais la fonction entnext). Les entités respectant ton filtre de sélection sont stockés dans un jeu de sélection et sont accessible via la fonction ssname, pour extraire une entité on spécifie à ssname l'indice de l'entité dans le jeu de sélection.
    Si tu parcours ta sélection comme tu le fais en commençant par la première entité (indice=0) de ta sélection, tu accèdes à la dernière entité ajouté à la sélection (la dernière de ta BD)

    Dans ton cas spécifie le dernier élément de ton jeu de sélection si tu veux travailler sur tes entités suivant leurs créations dans la BD.
    Dans ton code si tu remplaces
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (setq compte (1- (sslength selbha)))
    cela devrait suffire…

    A+

  3. #3
    Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci Bruno pour ta réponse,

    Cela ne fonctionne pas, mais je comprends bien ton raisonnement.
    On compte le nombre d'objet de la sélection et on enlève 1 vu que l' indice des entités commence à zéro, pour atteindre le premier objet de la sélection.
    Cela devrait fonctionner mais la boucle s'arrête immédiatement.
    Bon je cherche encore..

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 35
    Points : 63
    Points
    63
    Par défaut
    Bonsoir,

    Tu n'as pas joint d'exemple et je ne sais pas à quoi correspond tes codes dans tes valeurs d'attributs de tes références de blocs inséré dans ton dessin, donc un peu difficile de tester ton code sans y passer trop de temps. Mais je vois que tu as compris l'idée..

    Quan ta boucle s'arrête qu'elle est le message d'erreur? Comme tu n'as pas localisé tes variables qu'elles sont leurs états au moment de l'erreur? Te sers tu de l'IDE Visual-Lisp pour déboguer ton code?

    Sinon une autre option à partir de ton code précédent est d'extraire tous les éléments de ton jeu de sélection et de les "conser" dans une liste, ce que va inverser leur ordre, puis tu n'as plus qu'a appliquer ton traitement sur chaque élément de la liste.

    Cordialement

  5. #5
    Candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour Bruno,

    Bon j'ai trouvé l' erreur, ça marche nickel .

    J'ai fait la modif que tu m'as indiqué, mais cela ne suffisait pas,

    En ligne 11 (setq ent (ssname selbha 0)), remplacer par (setq ent (ssname selbha compte)) et déplacé sous (setq compte (1- (sslength selbha))).

    En tout cas merci beaucoup de ton aide....

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 35
    Points : 63
    Points
    63
    Par défaut
    Merci du retour, éventuellement passe le sujet en résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Créer une macro Générant des boucles
    Par eliovan dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/09/2014, 08h52
  2. [PHP-JS] Comment créer une boucle avec des headers
    Par djinnwatcher dans le forum Langage
    Réponses: 10
    Dernier message: 17/07/2006, 16h48
  3. Problème pour créer une clé étrangère
    Par DevloNewb' dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/07/2006, 17h30
  4. Comment créer une boucle ?
    Par kikica dans le forum Langage
    Réponses: 5
    Dernier message: 15/03/2006, 22h02
  5. [XSLT]créer une boucle
    Par fraoustin dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 11/01/2005, 15h13

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