cadpolo Posté(e) le 12 mars 2006 Posté(e) le 12 mars 2006 Salut ...voila je ne comprends pas Je crèe un jeu de sélection [surligneur] (setq sel_poly (ssget (list(cons 0 "CIRCLE,SOLID,LINE,LWPOLYLINE,ARC"))))[/surligneur] j'utilise les elts de ce jeu pour une commande sel_poly a la deuxieme commande en utlisant ce jeu ça va marcher mais si je rajoute une commande utilisant encore ce jeu sel_poly alors plus rien ...... sel_poly contient 8 elts de [surligneur] 1 2 3 4 5 6 7 8 [/surligneur]Donc enlast => la derniere entité OK.... est [surligneur] 8[/surligneur]ensuite (entnext(entlast)) devrait me retourner [surligneur] 7[/surligneur] la je boucle pour remonter ????? :casstet:
(gile) Posté(e) le 12 mars 2006 Posté(e) le 12 mars 2006 Salut, Il me semble que tu fais une confusion entlast et entnext dépendent de la création des entités. (entlast) c'est la dernière entité créée. (entnext) sans argument, retourne la première entité créée du dessin courant, avec un argument (entnext ent) l'entité (ou sous-entité) créée après ent. Pour parcourir un jeu de sélection, tu peux utiliser (ssname sel_poly n) où n est incrémenté de 0 à (sslength sel_poly) Par exemple pour appliquer une fonction (entdel par exemple, mais çà pourait être une fonction lambda) à toutes les entités d'un jeu de sélection (ss) tu peux faire : (repeat (setq n (sslength ss)) (apply 'entdel (list (ssname ss (setq n (1- n))))) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
cadpolo Posté(e) le 12 mars 2006 Auteur Posté(e) le 12 mars 2006 Salut gile ...En faite lorsque j'ai crée un jeu de sélection ex: toutes les lignes rougesdonc [surligneur] sel_poly,[/surligneur] j'utilise ce jeu pour les transformes en polyligne fermé, la ça marche mais après je veux récupérer avec ce même jeu de sélection je veux transformé ces poly...en region puis les mettres dans un calque .Donc ces pour cela que je voulais utiliser les élts du jeu surligneur] sel_poly,[/surligneur] avec entlast et entnext .Sans avoir a recrée un autre filtre du style (setq ss_region (ssget "p" (list(cons 0 "LWPOLYLINE")))) (setq n 0) (setq Long_sel (sslength ss_region)) (repeat Long_sel (setq ent_last ( ssname ss_region n)) (command "region" ent_last "" ) (command "_chprop" ent_last "" "CO" "DUCALQUE" "CA" "toto" "EP" "0" "" "" )(setq n(+ 1 n)) ) en faite je ne vois comment placé un entnext dans ce code merci....
Tramber Posté(e) le 12 mars 2006 Posté(e) le 12 mars 2006 (setq ss_region (ssget (list(cons 0 "LWPOLYLINE")))) (setq n 0) (setq Long_sel (sslength ss_region)) (repeat Long_sel (setq ent_last ( ssname ss_region n)) (if(not(zerop(cdr(assoc 70(entget ent_last))))); on s'assure que la poly est fermée (command "region" ent_last "" )) (command "_chprop" (entlast) "" "CO" "DUCALQUE" "" "" ); là, un vrai entlast (setq n(+ 1 n)) ) Ton CHPROP ne prend pas le vrai entlast, c'est pour ca que j'ai corrigé. Attention, pour ce genre d'opération, tu dois prendre le contrôle de la variable DELOBJ vois SETVAR et GETVAR. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 12 mars 2006 Posté(e) le 12 mars 2006 Re, Je ne suis pas sur de bien comprendre, mais si tu as transformé les entités du jeu de sélection sel_poy en polylignes fermées, les entités de sel_poly transformées n'existent plus dans le dessin. Tu peux récupérer chaque poly juste après sa création dans une liste poly_lst par un (setq poly_lst (cons (entlast) poly_lst)) et ensuite traiter toutes les entités de la liste : (foreach n poly_lst (command "region" n "" ) (command "_chprop" (entlast) "" "CO" "DUCALQUE" "CA" "toto" "EP" "0" "") ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
cadpolo Posté(e) le 12 mars 2006 Auteur Posté(e) le 12 mars 2006 Salut TRAMBER .... merci pour tes infos ...... (if(not(zerop(cdr(assoc 70(entget ent_last))))); on s'assure que la poly est ferméemais juste est 'il nécéssaire de spécifier que la polyli... soit fermé qui d toute façon ne transforme pas l'objet en région ..Non?........tchao
Tramber Posté(e) le 12 mars 2006 Posté(e) le 12 mars 2006 C'est vrai.... :cool: Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
cadpolo Posté(e) le 12 mars 2006 Auteur Posté(e) le 12 mars 2006 Gile, Tu peux récupérer chaque poly juste après sa création dans une liste poly_lst par un (setq poly_lst (cons (entlast) poly_lst)) Si j'ai bien compris je crée un jeu de sel_poly qui contient 4elts, que je transforme en poly fermé Les poly fermées après transformation font t-elles tjs partit du jeu sel_poly ???? Mais lorsque je crée ma liste (setq poly_lst (cons (entlast) poly_lst)), il me mettra dedans que le 4° elt mais pas les 3 autres ??????NON ...
(gile) Posté(e) le 12 mars 2006 Posté(e) le 12 mars 2006 mais juste est 'il nécéssaire de spécifier que la polyli... soit fermé qui d toute façon ne transforme pas l'objet en région ..Non?.... S'il n'y a pas de création de région, le (entlast) de chprop s'appliquera à la derniére entité créée (qui ne sera pas la région ...). Je ne comprends toujours pas pourquoi tu fais un deuxième jeu de sélection ?Pourquoi ne crée tu as ta région juste après avoir créé la polyligne fermée :(command "region" (entlast) "" ) là, (entlast) retourne la dernière entité créée (la poly). Puis :(command "_chprop" (entlast) "" "CO" "DUCALQUE" "CA" "toto" "EP" "0" "") et là entlast retoune la région Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 12 mars 2006 Posté(e) le 12 mars 2006 Les poly fermées après transformation font t-elles tjs partit du jeu sel_poly ???? Non, sel_poly existe toujours, il contient les noms d'entités du départ (les 4 elts) mais ces entités ne sont plus dans le dessin puisqu'elles ont été tranformées en une polyligne (si j'ai bien compris)un (entlast) juste après cette transformation retourne la dernière entité créée, soit la polyligne en question. Ce qu'il me manque, pour bien comprendre, c'est comment tu traites le premier jeu de sélection sel_poly pour transformer les entités en polylignes (joindre plusieurs entités ? 1 entité -> 1poly ? ...) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
cadpolo Posté(e) le 12 mars 2006 Auteur Posté(e) le 12 mars 2006 Parce que je sélectionne plusieurs entités, donc entlast renvois que le dernier elt,mais pas le premier ...Non ???,et la tjs mon exemple :si j'ai séléctionné toutes mes lignes puis effectivement je les transforment en poly puis region et chgt de calque ...Entlast ne me modifiera que le dernier .......
cadpolo Posté(e) le 12 mars 2006 Auteur Posté(e) le 12 mars 2006 Voici le code (defun C:join_mac (/ ) (setq j_mc (getreal "\n Epaisseur des murs < >: ")) (command "pedit" "multiple" (setq sel_poly (ssget (list(cons 0 "CIRCLE,SOLID,LINE,LWPOLYLINE,ARC")))) "" "J" j_mc "" "" ) ;;Transforme les lignes en polyligne et les joints (setvar "cecolor" "DUCALQUE" ) (setq ss_region (ssget (list(cons 0 "LWPOLYLINE")))) (setq n 0) (setq Long_sel (sslength ss_region)) (repeat Long_sel (setq ent_last ( ssname ss_region n)) (command "region" ent_last "" ) (command "_chprop" [i] entlast[/i] "" "CO" "DUCALQUE" "CA" "maconneries" "EP" "0" "" "" ) ;;entlast corrigé par tramber (setq n(+ 1 n)) );;fin de repeat ) effectivement lorsque je fais une recherche des polylignes, il me passe tout le dessin en revu alors que je voudrais qu'il se concentre sur ma sélection qui est sel_poly C'est pour cela que je pensais au entnext enlast .....
(gile) Posté(e) le 12 mars 2006 Posté(e) le 12 mars 2006 Comme je disais dans ma première réponse (entlast) ne retourne pas le dernier élément du jeu de sélection mais la dernière entité créée dans le dessin. Quand tu transformes une (ou plusieurs) ligne(s) en une polyligne (entlast) retourne le nom d'entité de la polyligne qui vient d'être créé. Si tu transformes cette polyligne en région (command "region" (entlast) "" ), (entlast) retournera le nom d'entité de la région qui viendra d'être créée. Tu pourra donc faire (command "_chprop" (entlast) "" "CO" "DUCALQUE" "CA" "toto" "EP" "0" ""). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
cadpolo Posté(e) le 12 mars 2006 Auteur Posté(e) le 12 mars 2006 Comme je disais dans ma première réponse (entlast) ne retourne pas le dernier élément du jeu de sélection mais la dernière entité créée dans le dessin. Ouais bien compris, mais les autres entités crées car dans mon exemple je crée d'autres entités ????
cadpolo Posté(e) le 12 mars 2006 Auteur Posté(e) le 12 mars 2006 Si j'ai bien compris apès la création des entités (region ) Tu peux récupérer chaque poly juste après sa création dans une liste poly_lst par un (setq poly_lst (cons (entlast) poly_lst)) et ensuite traiter toutes les entités de la liste : (foreach n poly_lst(command "region" n "" )(command "_chprop" (entlast) "" "CO" "DUCALQUE" "CA" "toto" "EP" "0" "")) je crèe [surligneur] (setq poly_lst (cons (entlast) poly_lst)) [/surligneur] qui me récupère toutes les entité crées ( n ) ????? Et ensuite .... [surligneur] (foreach n poly_lst(command "region" n "" )(command "_chprop" (entlast) "" "CO" "DUCALQUE" "CA" "toto" "EP" "0" "")[/surligneur]
cadpolo Posté(e) le 12 mars 2006 Auteur Posté(e) le 12 mars 2006 Bon je vais tout revoir .... merci pour tes précieuse info......
(gile) Posté(e) le 12 mars 2006 Posté(e) le 12 mars 2006 Au temps pour moi, en utilisant l'option "multiple" de PEDIT tu traites tout ton jeu de sélection en une seule fois, je pensait que tu parcourais ta sélection et traitais les éléments un par un (d'où les exemples ci-dessus). Tu peux donc utiliser entnext, mais il faut tout d'abord mettre une "balise" pour le départ du entnext. Au début de ton LISP, avant (command "_pedit" ... tu crées une entité (un point par exemple) dont tu attribues le nom d'entité à 2 variables (dep et point par exemple) : (command "_.point" '(0 0 0)) (setq point (entlast) dep point ) Pour faire un jeu se sélection de toutes les entités créées depuis le point (les polylignes) à la place de (setq ss_region (ssget (list (cons 0 "LWPOLYLINE")))), tu fais : (setq ss_region (ssadd)) (while (setq dep (entnext dep)) (ssadd dep ss_region) ) À la fin du LISP tu supprimes le point : (entdel point) Comme çà, effectivement, tu utilises bien entlast et entnext. PS : dans ton code, tu as oublié les paranthèses de (entlast) [Edité le 12/3/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
cadpolo Posté(e) le 12 mars 2006 Auteur Posté(e) le 12 mars 2006 Gile merci pour ton information sur ce pb ......Mais peux tu me faire donner quelque explication sur entnext et entlast ....Car je ne pige mais vraiment que "dalle""""" tu crèe un pt de depart ...ok!!!! (setq ss_region (ssadd)) [surligneur] ;; création d'un jeu vide[/surligneur](while (setq dep (entnext dep)) c'est la pb création d'une boucle ???;;Pour y mettre toutes les entitées crées depuis le point [surligneur] dep[/surligneur] entnext scan toutes les entitées crées ...(ssadd dep ss_region) ) Bon si tu as le temps,je te remercie pour ta patience ...
(gile) Posté(e) le 12 mars 2006 Posté(e) le 12 mars 2006 (entlast) retourne le nom d'entité du dernier objet créé dans le dessin, du style : . J'attribue cette valeur à une variable dep (à une autre aussi, point, qui conservera le nom initial pour pouvoir la supprimer à la fin) De nouvelles entités sont créées avec PEDIT, des polylignes. (entnext dep) retourne le nom de la première entité créée après dep. Je fais une boucle en attribuant à dep successivement le nom d'entité de chaque entité créée après l'entité précédemment attribuée à dep : (while (setq dep (entnext dep)) ... et j'ajoute ce nom d'entité au nouveau jeu de sélection ss_region. Donc, en premier la poly créée après le point, puis la poly créée après celle-ci et ainsi de suite tant qu'il existe une poly créée après la précédente : ... (ssadd dep ss)) Dans ce cas, il s'agit "d'entités simples" si ent est une entité complexe (bloc avec attrbut, poly3D, surface maillée...) et qu'on fait un (entnext ent) il sera retourné la première "sous-entité" de ent (attribut, vertex ...).C'est aussi avec des boucles qu'on peut récupérer les attributs des blocs ou les sommets des polylignes non optimisées. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
cadpolo Posté(e) le 13 mars 2006 Auteur Posté(e) le 13 mars 2006 Gile Salut .... Je te remercie pour ta patience et tes explications ........ ........merci
Patrick_35 Posté(e) le 13 mars 2006 Posté(e) le 13 mars 2006 SalutC'est une méthode plus que valable avec le entnext de dep mais, car il y a toujours un mais, il faut faire gaffe que la dernière entité n'est pas un bloc @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 13 mars 2006 Posté(e) le 13 mars 2006 il faut faire gaffe que la dernière entité n'est pas un bloc C'est pour çà que je faisait un point au début (que je supprime à la fin) pour être sûr de la première entité. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 13 mars 2006 Posté(e) le 13 mars 2006 Je n'avais pas vu. Malin le (gile) ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 13 mars 2006 Posté(e) le 13 mars 2006 il faut faire gaffe que la dernière entité n'est pas un bloc Oui et Non Il est vrai que si un bloc sert de marque dans le dessin et que celui-ci est de nouveau réinsérer dans le dessin par la suite, cela pose un problème d'identification de la marque. Mais si le lisp ne se sert pas de ce bloc ayant servi de repère, normalement cela ne pose pas de problème. Enfin je pense.... Mais il est certain que la méthode de (gile) est plus sure. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 13 mars 2006 Posté(e) le 13 mars 2006 Salut Bonus.Je pensais surtout aux blocs avec attributs afin d'éviter un traitement indésirable @+ 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