acad hispano
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Seleccionar capas mediante cuadro de diálogo

3 participantes

Ir abajo

Seleccionar capas mediante cuadro de diálogo Empty Seleccionar capas mediante cuadro de diálogo

Mensaje por robierzo Dom Mar 21, 2021 8:38 am

Buenas. Alguien sabe cómo seleccionar una o varias capas mediante un cuadro de diálogo? Mi intención es que se abra un cuadro de diálogo donde aparezcan todas las capas del dibujo, y que podamos seleccionar una o varias capas, para que me devuelva en una lista con las capas seleccionadas.
Vaya por delante que yo no tengo ni idea de cuadros de diálogo.

Gracias!!!!
robierzo
robierzo

Mensajes : 103
Fecha de inscripción : 17/03/2016
Localización : La Coruña

http://www.selmotopografia.es

Volver arriba Ir abajo

Seleccionar capas mediante cuadro de diálogo Empty Re: Seleccionar capas mediante cuadro de diálogo

Mensaje por devitg Dom Mar 21, 2021 3:22 pm

Hola fíjate en esta , no es mía, esta es la página del autor

Gilles Chanteau Programmation AutoCAD LISP/.NET

Código:
;; GETLAYERS (gile) 02/12/07
;; Returns the list of the checked layers in the dialog box
;;
;; arguments
;; title : title of the dialog box or nil (default = Choose the layers)
;; lst1 : list of the pre-checked layers or nil
;; lst2 : list of the unable layers (greyed out) or nil

(defun getlayers (title     lst1       lst2    /         sublist
        toggle_column       tmp       file    lay      layers
        len     dcl_id  lst
       )

  (defun sublist (lst start leng / n r)
    (if   (or (not leng) (< (- (length lst) start) leng))
      (setq leng (- (length lst) start))
    )
    (setq n (+ start leng))
    (repeat leng
      (setq r (cons (nth (setq n (1- n)) lst) r))
    )
  )

  (defun toggle_column (lst)
    (apply 'strcat
     (mapcar
       (function
         (lambda (x)
       (strcat ":toggle{key="
          (vl-prin1-to-string x)
          ";label="
          (vl-prin1-to-string x)
          ";}"
       )
         )
       )
       lst
     )
    )
  )

  (setq   tmp  (vl-filename-mktemp "tmp.dcl")
   file (open tmp "w")
  )
  (while (setq lay (tblnext "LAYER" (not lay)))
    (setq layers (cons (cdr (assoc 2 lay)) layers))
  )
  (setq   layers (vl-sort layers '<)
   len    (length layers)
  )
  (write-line
    (strcat
      "GetLayers:dialog{label="
      (cond (title (vl-prin1-to-string title))
       ("\"Choose the layers\"")
      )
      ";:boxed_row{:column{"
      (cond
   ((< len 12) (toggle_column layers))
   ((< len 24)
    (strcat (toggle_column (sublist layers 0 (/ len 2)))
       "}:column{"
       (toggle_column (sublist layers (/ len 2) nil))
    )
   )
   ((< len 45)
    (strcat (toggle_column (sublist layers 0 (/ len 3)))
       "}:column{"
       (toggle_column (sublist layers (/ len 3) (/ len 3)))
       "}:column{"
       (toggle_column (sublist layers (* (/ len 3) 2) nil))
    )
   )
   (T
    (strcat (toggle_column (sublist layers 0 (/ len 4)))
       "}:column{"
       (toggle_column (sublist layers (/ len 4) (/ len 4)))
       "}:column{"
       (toggle_column (sublist layers (/ len 2) (/ len 4)))
       "}:column{"
       (toggle_column (sublist layers (* (/ len 4) 3) nil))
    )
   )
      )
      "}}spacer;ok_cancel;}"
    )
    file
  )
  (close file)
  (setq dcl_id (load_dialog tmp))
  (if (not (new_dialog "GetLayers" dcl_id))
    (exit)
  )
  (foreach n lst1
    (set_tile n "1")
  )
  (foreach n lst2
    (mode_tile n 1)
  )
  (action_tile
    "accept"
    "(setq lst nil)
    (foreach n layers
    (if (= (get_tile n) \"1\")
    (setq lst (cons n lst))))
    (done_dialog)"
  )
  (start_dialog)
  (unload_dialog dcl_id)
  (vl-file-delete tmp)
  lst
)

 
(setq lista-de-capas(getlayers "lista Capas" nil nil))



devitg
Admin

Mensajes : 257
Fecha de inscripción : 16/03/2016
Edad : 75
Localización : CORDOBA ARGENTINA

https://acadhispano.foroargentina.net

A robierzo le gusta esta publicaciòn

Volver arriba Ir abajo

Seleccionar capas mediante cuadro de diálogo Empty Re: Seleccionar capas mediante cuadro de diálogo

Mensaje por robierzo Dom Mar 21, 2021 5:30 pm

Ufff. Está genial. Muchas gracias, Gabriel!!!!! Es justo lo que buscaba!!!!
Gracias.
robierzo
robierzo

Mensajes : 103
Fecha de inscripción : 17/03/2016
Localización : La Coruña

http://www.selmotopografia.es

Volver arriba Ir abajo

Seleccionar capas mediante cuadro de diálogo Empty Re: Seleccionar capas mediante cuadro de diálogo

Mensaje por Dominguez Lun Mar 22, 2021 9:14 pm

Sin menospreciar la rutina anterior, aqui pongo otra un poquito mas sencilla, que hace lo mismo.
Código:
 ; Devuelve lista de nombres de capas seleccionadas en cuadro.DCL
 ; Luis Dominguez Gomez  "luisfuentef@gmail.com"
(defun c:dtcapas (/ capas lista file ind sel)
  (vl-load-com)
  (defun lista-capas (/ capas)
    (vlax-for x (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
      (setq capas (cons (vla-get-name x) capas))
    )
    (acad_strlsort capas)
  )
  (setq lista (lista-capas))
  (setq file (vl-filename-mktemp nil nil ".dcl"))
  (setq ind (open file "w"))
  (mapcar '(lambda (x) (write-line x ind))
          (list "m_sel:dialog{key=\"rotulo\";"
                ":list_box{key=\"list\";multiple_select=true;height=12;width=40;}"
                "ok_only;}"
          )
  )
  (close ind)
  (setq ind (load_dialog file))
  (new_dialog "m_sel" ind)
  (start_list "list")
  (mapcar 'add_list lista)
  (end_list)
  (set_tile "rotulo" (strcat "Elige Capas :copyright:" (substr (rtos (getvar 'cdate) 2 4) 1 4)))
  (setq sel (set_tile "list" "0"))
  (action_tile "list" "(setq sel $value)")
  (start_dialog)
  (setq sel (mapcar '(lambda (x) (nth x lista)) (read (strcat "(" sel ")"))))
  (unload_dialog ind)
  (vl-file-delete file)
  sel
)

Saludos
Dominguez
Dominguez

Mensajes : 152
Fecha de inscripción : 20/03/2016
Edad : 74
Localización : Zaragoza (España)

A devitg y a robierzo les gusta esta publicaciòn

Volver arriba Ir abajo

Seleccionar capas mediante cuadro de diálogo Empty Re: Seleccionar capas mediante cuadro de diálogo

Mensaje por Dominguez Lun Mar 22, 2021 9:53 pm

Bueno por aqui me aparece otra, que ni sabia que la tenia.
Código:
 ; Devuelve una lista de nombres de capas seleccionadas.
 ; Luis Dominguez Gómez  :copyright: 2012
;;;================================================================================================
(defun dialog_layer ()
  (setq file (vl-filename-mktemp nil nil ".dcl"))
  (setq indi (open file "W"))
  (foreach str (list
                "temp:dialog{label=\" SELECCION  de  CAPAS\";" ;
                "  :list_box{label=\" Todas las Capas del dibujo\";" ;
                "    height=20;" ;
                "    key=\"mi_lista\";" ;
                "    allow_accept=true;" ;
                "    fixed_width_font=true;" ;
                "    multiple_select=true;" ;
                "  }" ;
                "  ok_only;" ;
                "  :boxed_column{label=\" Luis Dominguez Gómez  :copyright: 2012 \";alignment=centered;" ;
                "    :text{key=\"fecha\";alignment=centered;}" ;
                "  }" ;
                "}"
                )
    (write-line str indi)
  )
  (close indi)
)
;;;================================================================================================
(defun count_layer ()
  (setq name (cdr (assoc 2 (tblnext "layer" t))))
  (setq lista (list name))
  (while (/= name nil)
    (setq name (cdr (assoc 2 (tblnext "layer"))))
    (if (/= name nil)
      (progn (setq app (list (strcase name))) (setq lista (append lista app)))
    )
  )
  (tblnext "layer" "rewind")
  (setq lista (acad_strlsort lista)) ; orden alfabetico
  (start_list "mi_lista")
  (mapcar 'add_list lista)
  (end_list)
)
;;;================================================================================================
(defun cuadro_layer ()
  (setq ind (load_dialog file))
  (new_dialog "temp" ind)
  (count_layer)
  (vl-file-delete file)
  (action_tile
    "accept"
    "(setq mi_lista (read (strcat \"(\" (get_tile \"mi_lista\") \")\")))(done_dialog)"
  )
  (set_tile "fecha" (menucmd "M=$(edtime, $(getvar,date),DDDD\"\" DD MONTH YYYY  HH:MM am/pm)"))
  (start_dialog)
  (unload_dialog ind)
)
;;;================================================================================================
(defun c:dtlaysel (/ name lista_sel mi_lista file ind lista app)
  (vl-load-com)
  (dialog_layer)
  (cuadro_layer)
  (setq name (nth (nth 0 mi_lista) lista))
  (terpri)
  (while (/= mi_lista nil)
    (setq name (nth (nth 0 mi_lista) lista))
    (print (read name)) ; una forma
    ;; 0
    ;; OCULTAS_LDG
    ;; PRODUCTO_LDG
    ;; COTAS_LDG
    ;; RAYADO_LDG
    (setq lista_sel (append lista_sel (list name)))
    (setq mi_lista (cdr mi_lista))
  )
  (textpage)
  ;; (print lista_sel) ; otra forma ("0" "OCULTAS_LDG" "PRODUCTO_LDG" "COTAS_LDG" "RAYADO_LDG")
  (prin1)
)
;;;================================================================================================

Dominguez
Dominguez

Mensajes : 152
Fecha de inscripción : 20/03/2016
Edad : 74
Localización : Zaragoza (España)

A devitg y a robierzo les gusta esta publicaciòn

Volver arriba Ir abajo

Seleccionar capas mediante cuadro de diálogo Empty Re: Seleccionar capas mediante cuadro de diálogo

Mensaje por robierzo Mar Mar 23, 2021 7:43 am

Muchas gracias Domínguez!!!! Están genial las dos!!!!!
"Capas haya
que con estas tres rutinas
ni el rey me calla"


Saludos
robierzo
robierzo

Mensajes : 103
Fecha de inscripción : 17/03/2016
Localización : La Coruña

http://www.selmotopografia.es

Volver arriba Ir abajo

Seleccionar capas mediante cuadro de diálogo Empty Re: Seleccionar capas mediante cuadro de diálogo

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.