Invité Sylvainhinard Posté(e) le 13 décembre 2004 Posté(e) le 13 décembre 2004 Bonjour, Suite à vos conseils à tous, j'ai reussis à me mettre au LISP (enfin). J'ai commencé par un programme qui transforme les regions en polyligne. Je voudrais que mon programme se répéte en boucle jusqu'a ce qu'il n'y ait plus de region dans mon dessin: (defun c:regpol ( / region a ent regionexp regionexp1 regionexp2 calqueorigine); définition des variables (setq region (ssget "_X" '((0 . "REGION")))); sélectionne les regions, les enregistre dans la variable "region" (setq a (ssname region 0)); prend la premiere entité de la liste "region et enregistre son nom dans "a" (setq ent (entget a)); enregistre la liste définissant l'entité "a" dans "ent" (setq calqueorigine (cdr(assoc 8 ent ))); enregistre le calque d'origine de l'entité (command "_.layer" "n" "afaire" "" ); crée un calque "afaire" (setq ent (entmod (subst (cons 8 "afaire") (assoc 8 ent) ent))); met "ent" dans le calque "afaire" (entupd (cdr (assoc -1 ent))); met à jour "ent" (setq regionexp (ssget "_X" '((8 . "afaire"))));met dans "regionexp" toute les entités du calque "afaire" (command "_.explode" regionexp ); explose les regions de "afaire" (setq regionexp1 (ssget "_X" '((8 . "afaire"))));met dans "regionexp1" toute les entités du calque "afaire" (command "pedit" "m" regionexp1 "" "o" "j" "" "");joint les polyligne de "regionexp1" (setq regionexp1 (ssget "_X" '((8 . "afaire"))));met dans "regionexp1" toute les entités du calque "afaire" (command "changer" regionexp1 "" "p" "ca" calqueorigine "") (princ) ) P.S.: Si vous avez des astuces pour que le programme soit mieux construit vous pouvez m'en faire part. Merci à tous
Patrick_35 Posté(e) le 13 décembre 2004 Posté(e) le 13 décembre 2004 SalutTa boucle, il faut que tu la fasses sur ton jeu de sélection grace à une incrémentation tu défini pas exemple n à 0(setq n 0)puis ta boucle sur la valeur de a tant que a n'est pas nil(while (setq a (ssname region [b]n[/b]))Puis ton proget à la fin de (command "changer" regionexp1 "" "p" "ca" calqueorigine "") on incrémente de 1 dans le jeu de sélection et on ferme la boucle while(command "changer" regionexp1 "" "p" "ca" calqueorigine "") (setq n (1+ n)) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tramber Posté(e) le 13 décembre 2004 Posté(e) le 13 décembre 2004 Un petit controle d'éléments, car le jour où tu ramasseras une spline dans tes éléments ca coincera au PEDIT. Ou alors un filtre sup sur (ssget "_X" '((8 . "afaire")))pour enlever les splines et autres bout d'ellispes non PEDITables. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Invité Sylvainhinard Posté(e) le 14 décembre 2004 Posté(e) le 14 décembre 2004 Bonjour, J'ai essayé de faire une boucle mais je pense que je me suis trompé. D'où vient mon erreur ? ;************************PROGRAMME PERMETTANT DE TRANSORMER LA REGION EN POLYLIGNE*******************************(defun c:regpol ( / region a ent regionexp regionexp1 regionexp2 calqueorigine); définition des variables (setq region (ssget "_X" '((0 . "REGION")))); sélectionne les regions, les enregistre dans la variable "region" (setq a (ssname region 0)); prend la premiere entité de la liste "region et enregistre son nom dans "a" (setq ent (entget a)); enregistre la liste définissant l'entité "a" dans "ent" (setq calqueorigine (cdr(assoc 8 ent ))); enregistre le calque d'origine de l'entité (command "_.layer" "n" "afaire" "" ); crée un calque "afaire" (setq ent (entmod (subst (cons 8 "afaire") (assoc 8 ent) ent))); met "ent" dans le calque "afaire" (entupd (cdr (assoc -1 ent))); met à jour "ent" (setq regionexp (ssget "_X" '((8 . "afaire"))));met dans "regionexp" toute les entités du calque "afaire" (command "_.explode" regionexp ); explose les regions de "afaire" (setq regionexp1 (ssget "_X" '((8 . "afaire"))));met dans "regionexp1" toute les entités du calque "afaire" (command "pedit" "m" regionexp1 "" "o" "j" "" "");joint les polyligne de "regionexp1" (setq regionexp1 (ssget "_X" '((8 . "afaire"))));met dans "regionexp1" toute les entités du calque "afaire" (command "changer" regionexp1 "" "p" "ca" calqueorigine "") (princ) );;;*********************************************BOUCLE************************************************************ (defun c:boucle ( / region ) (setq region (ssget "_X" '((0 . "REGION")))) (while (/= region nil )) (regpol) (princ) ) Merci pour votre aide
Patrick_35 Posté(e) le 14 décembre 2004 Posté(e) le 14 décembre 2004 La boucle est faites dans c:regpol et de plus, tu ne fais pas un (setq a (ssname region 0)), mais un (setq a (ssname region n)) ou n est la variable à incrémenter. Au début elle à la valeur 0Ta boucle doit commencer juste après ta sélection (setq region (ssget "_X" '((0 . "REGION")))) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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