Aller au contenu

Recherche routine pour selectionner un calque


Messages recommandés

Posté(e)

Jesuis à la recherche d'une routine lisp pour sélectionner un calque parmi laliste de calques existant, et qui me retourne le nom du calque sélectionné.

 

Cordialement.

 

Petit à petit on devient moins petit

Posté(e)

Bonjour

 

le sujet suivant fait surement ce que tu souhaite :

 

http://www.cadtutor.net/forum/showthread.php?1407-return-layer-name-from-dialog-box

 

ce qui donne (en remplaçant par les "()" et "{}" aux bon endrois) :

 

;;; creates a temporary .dcl file
(defun mktemp-dcl (/ tmpf tmpfo)
 (vl-load-com)
 (setq tmpf  (vl-filename-mktemp nil nil ".dcl")
       tmpfo (open tmpf "w")
       )
 (write-line
   (strcat
     "layer_d : dialog {
     label = \"Current Layers\" ;
     : popup_list {
     label = \"Choose a Layer:\";
     key = \"sel\";
     value = \"0\" ;
     edit_width = 30;
     }
     ok_cancel ;
     }"
     )
     tmpfo
     )
   (close tmpfo)
   tmpf
   )

;;; returns the Layers object
(defun get-layrobj ()
   (vla-get-Layers
     (vla-get-ActiveDocument
       (vlax-get-acad-object)
       )
     )
   )

;;; generates a list of layer names in the current dwg.
(defun layer-lst (/ lst)
 (vlax-for l (get-layrobj)
           (setq lst
                 (cons (vlax-get-property l 'Name) lst)
                 )
           )
 (if lst (acad_strlsort lst))
 )

;;; present the user with a dialog box
(defun layer-lister (/ db dcl_id lst user_event layr)
 (setq db (mktemp-dcl)
       dcl_id (load_dialog db)
       lst (layer-lst)
       )
 (if (not (new_dialog "layer_d" dcl_id))
   (exit)
   )

 (start_list "sel")
 (mapcar 'add_list lst)
 (end_list)

 (action_tile "accept"
              (strcat
                "(progn (setq layr (atof (get_tile \"sel\")))
                   (done_dialog) (setq user_event T))"
                   )
              )
 (action_tile "cancel"
              "(done_dialog)"  
              )

 (start_dialog)  
 (unload_dialog dcl_id)

 (if user_event
   (progn
     (setq layr (fix layr)) ;convert to integer
     (setq layr (nth layr lst)) ;get the layer
     (vl-file-delete db)
     )
   )
 layr
 )

 

L'on peu bien sur remplacer le

: popup_list {

par :

: list_box {

 

Pour avoir une liste sur plusieur ligne en lieu et place d'une liste déroulante.

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité