Seleccionar capas mediante cuadro de diálogo
3 participantes
Página 1 de 1.
Seleccionar capas mediante cuadro de diálogo
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!!!!
Vaya por delante que yo no tengo ni idea de cuadros de diálogo.
Gracias!!!!
Re: Seleccionar capas mediante cuadro de diálogo
Hola fíjate en esta , no es mía, esta es la página del autor
Gilles Chanteau Programmation AutoCAD LISP/.NET
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))
A robierzo le gusta esta publicaciòn
Re: Seleccionar capas mediante cuadro de diálogo
Ufff. Está genial. Muchas gracias, Gabriel!!!!! Es justo lo que buscaba!!!!
Gracias.
Gracias.
Re: Seleccionar capas mediante cuadro de diálogo
Sin menospreciar la rutina anterior, aqui pongo otra un poquito mas sencilla, que hace lo mismo.
Saludos
- 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- 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
Re: Seleccionar capas mediante cuadro de diálogo
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- 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
Re: Seleccionar capas mediante cuadro de diálogo
Muchas gracias Domínguez!!!! Están genial las dos!!!!!
"Capas haya
que con estas tres rutinas
ni el rey me calla"
Saludos
"Capas haya
que con estas tres rutinas
ni el rey me calla"
Saludos
Temas similares
» CUADRO DE DIALOGO - PRESENTACIÓN
» CUADRO DE DIALOGO ( TABLAS DENTRO DE VENTANA)
» Archivo de notas mediante comando SHELL
» LISP: DESACTIVAR TODAS LAS CAPAS MENOS LA CAPA "0" Y DEJARLA COMO ACTUAL
» Es posible cambiar la fuente de un Mtext mediante Lisp??
» CUADRO DE DIALOGO ( TABLAS DENTRO DE VENTANA)
» Archivo de notas mediante comando SHELL
» LISP: DESACTIVAR TODAS LAS CAPAS MENOS LA CAPA "0" Y DEJARLA COMO ACTUAL
» Es posible cambiar la fuente de un Mtext mediante Lisp??
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.