zou Posté(e) le 13 juin 2013 Posté(e) le 13 juin 2013 Hello Effacer un calque quand mon fichier comporte l'espace objet et qu'une ou deux présentation, ça va. généralement j'active et je dégelle tous les calques et j'utilise la selection rapide, et je fini par trouver les objets sur les calques ciblés (qu'ils soient ou non imbriqué ou dans un bloc ...) Par contre quand dans un fichier j'ai 40 présentations, là ça se complique, avec ma méthode faudrait les passer en revue 1 à 1 : Arf ! Existe il une astuce, qui permettrait de connaitre les objets qui sont sur un calque et qui indiquerait sur quelle présentation ils se trouvent ?
bonuscad Posté(e) le 13 juin 2013 Posté(e) le 13 juin 2013 Bonjour, Existe il une astuce, qui permettrait de connaitre les objets qui sont sur un calque et qui indiquerait sur quelle présentation ils se trouvent ? Avec ceci et l'aimable participation de (gile) ; str2lst ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur ;; ;; Exemples ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;; ListBox (gile) ;; Boite de dialogue permettant un ou plusieurs choix dans une liste ;; ;; Arguments ;; title : le titre de la boite de dialogue (chaîne) ;; msg ; message (chaîne), "" ou nil pour aucun ;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...) ;; flag : 0 = liste déroulante ;; 1 = liste choix unique ;; 2 = liste choix multipes ;; ;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2) ;; ;; Exemple d'utilisation ;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1) (defun ListBox (title msg keylab flag / tmp file dcl_id choice) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line (strcat "ListBox:dialog{label=\"" title "\";") file ) (if (and msg (/= msg "")) (write-line (strcat ":text{label=\"" msg "\";}") file) ) (write-line (cond ((= 0 flag) "spacer;:popup_list{key=\"lst\";") ((= 1 flag) "spacer;:list_box{key=\"lst\";") (T "spacer;:list_box{key=\"lst\";multiple_select=true;") ) file ) (write-line "}spacer;ok_cancel;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "ListBox" dcl_id)) (exit) ) (start_list "lst") (mapcar 'add_list (mapcar 'cdr keylab)) (end_list) (action_tile "accept" "(or (= (get_tile \"lst\") \"\") (if (= 2 flag) (progn (foreach n (str2lst (get_tile \"lst\") \" \") (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice)) ) (setq choice (reverse choice)) ) (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab))) ) ) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) choice ) (defun c:Why_by_Layer ( / def_lay key lst_lay lay js n dxf_ent) (setq def_lay (tblnext "LAYER" T) key 0) (setq lst_lay (list (cons (itoa (setq key (1+ key))) (cdr (assoc 2 def_lay))))) (while (setq def_lay (tblnext "LAYER")) (setq lst_lay (cons (cons (itoa (setq key (1+ key))) (cdr (assoc 2 def_lay))) lst_lay)) ) (setq lay (listbox "Calques existants" "Choisir les calques à supprimer" lst_lay 2)) (foreach el lay (setq js (ssget "_X" (list (cons 8 (cdr (assoc el lst_lay)))))) (if js (repeat (setq n (sslength js)) (setq dxf_ent (entget (ssname js (setq n (1- n))))) (princ (strcat "\nL'objet " (cdr (assoc 0 dxf_ent)) " est sur le calque " (cdr (assoc 8 dxf_ent)) " et dans la présentation " (cdr (assoc 410 dxf_ent)) ) ) ) ) ) (prin1) ) Tu as la possibilité de sélectionner plusieurs calques avec "Maj/Shift" dans la boite de dialogue. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bryce Posté(e) le 13 juin 2013 Posté(e) le 13 juin 2013 Bonjour, Si tu es sûr de vouloir supprimer un calque quel que soit son contenu, tu peux utiliser la commande SUPCALQUE (_LAYDEL). Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
zou Posté(e) le 18 juin 2013 Auteur Posté(e) le 18 juin 2013 Hello Merci bcp.Moi qui n'a encore jamais utilisé une routine lisp, cela va me faire une bonne intro sur le sujet. Le temps que je m'y retrouve et vous retourne mon appréciation.
salvanorigatore Posté(e) le 18 juin 2013 Posté(e) le 18 juin 2013 Avec ceci et l'aimable participation de (gile)Tu as la possibilité de sélectionner plusieurs calques avec "Maj/Shift" dans la boite de dialogue.Bonjour,si tu me permet j'ai une petite remarque : la boite de dialogue qui s'ouvre est trop petite, je n'arrive pas a distinguer les calques !!!Y-t-il moyen de l’agrandir ? Bon je l'ai quand même essayé et ça ma donné comme seul résultat dans la fenêtre texte :L'objet LWPOLYLINE est sur le calque BUS COULOIR et dans la présentation ModelL'objet MTEXT est sur le calque BUS COULOIR et dans la présentation ModelL'objet LWPOLYLINE est sur le calque BUS COULOIR et dans la présentation Model Quel est le but de ton lisp ?Répond-il à la demande de zou ? Existe il une astuce, qui permettrait de connaitre les objets qui sont sur un calque et qui indiquerait sur quelle présentation ils se trouvent ? Merci d'avance pour tes explications Salvatore " Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "
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