Selección de bloques según estado de visualización
4 participantes
Página 1 de 1.
Selección de bloques según estado de visualización
Buenas a tod@s.
Necesitaría saber si hay alguna manera de filtrar una selección de bloques según su estado de visualización. He probado con extracción de datos, pero no me interesa saber el número de bloques, sino hacer una selección de los mismos con un parámetro de visibilidad determinado. Me cuesta creer que nadie lo necesite y soy incapaz de encontrarlo.
Muchas gracias de antemano por cualquier tipo de información.
Necesitaría saber si hay alguna manera de filtrar una selección de bloques según su estado de visualización. He probado con extracción de datos, pero no me interesa saber el número de bloques, sino hacer una selección de los mismos con un parámetro de visibilidad determinado. Me cuesta creer que nadie lo necesite y soy incapaz de encontrarlo.
Muchas gracias de antemano por cualquier tipo de información.
supertxull- Mensajes : 25
Fecha de inscripción : 21/03/2016
supertxull- Mensajes : 25
Fecha de inscripción : 21/03/2016
Re: Selección de bloques según estado de visualización
A qué te refieres con "según su estado de visualización"????
A qué te refieres con "parámetro de visibilidad determinado"?????
A qué te refieres con "parámetro de visibilidad determinado"?????
Re: Selección de bloques según estado de visualización
Sube por favor un DWG con lo que necesitas hacer......el antes y despues.
Saludos
Saludos
saulo2016- Mensajes : 210
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico
Re: Selección de bloques según estado de visualización
robierzo escribió:A qué te refieres con "según su estado de visualización"????
A qué te refieres con "parámetro de visibilidad determinado"?????
saulo2016 escribió:Sube por favor un DWG con lo que necesitas hacer......el antes y despues.
Saludos
Dejo un dwg con varias inserciones del mismo bloque. Este bloque tiene dos estados de visualización (1 y 2). Me gustaría encontrar la manera de, seleccionando el bloque, saber cuántas inserciones de estado 1 y 2 hay. De un simple vistazo encontramos 2 ocurrencias del tipo 2 y 5 de tipo 1. La cosa se complica cuando hay miles de ellos...
Podría utilizar la herramienta extracción de datos, pero me parece un engorro para utilizarla en multitud de archivos. Muchas gracias.
Utilizo WeTransfer porque no tengo permiso para adjuntar archivos en el foro.
- Código:
https://we.tl/V5g5dXK5VX
supertxull- Mensajes : 25
Fecha de inscripción : 21/03/2016
Re: Selección de bloques según estado de visualización
perdonad, ¿no me he explicado? ¿no podéis descargar el archivo?
supertxull- Mensajes : 25
Fecha de inscripción : 21/03/2016
Re: Selección de bloques según estado de visualización
Yo sí lo he visto. Pero la verdad es que no sé cómo resolverlo.
Re: Selección de bloques según estado de visualización
Gracias por tu tiempo de todos modos.robierzo escribió:Yo sí lo he visto. Pero la verdad es que no sé cómo resolverlo.
supertxull- Mensajes : 25
Fecha de inscripción : 21/03/2016
Re: Selección de bloques según estado de visualización
;;--------------------=={ Dynamic Block Counter }==---------------------;;
;; ;;
;; This program enables the user to count all or a selection of ;;
;; standard blocks, dynamic blocks & xrefs in the current layout of a ;;
;; drawing. ;;
;; ;;
;; For every dynamic block with a Visibility Parameter, the program ;;
;; will also output the number of blocks using each Visibility State. ;;
;; ;;
;; The results are printed to the command-line and may also be ;;
;; written to a Text or CSV file automatically created in the working ;;
;; directory with the same filename as the active drawing. ;;
;; ;;
;;----------------------------------------------------------------------;;
;; Author: Lee Mac, Copyright © 2013 - www.lee-mac.com ;;
;;----------------------------------------------------------------------;;
;; Version 1.1 - 2013-11-27 ;;
;;----------------------------------------------------------------------;;
(defun c:dbcount ( / *error* all bln del des idx lst obj ofn out sel vis vsl )
(defun *error* ( msg )
(if (= 'file (type des)) (close des))
(if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
(princ (strcat "\nError: " msg))
)
(princ)
)
(cond
( (null
(setq all
(ssget "_X"
(list
'(0 . "INSERT")
(if (= 1 (getvar 'cvport))
(cons 410 (getvar 'ctab))
'(410 . "Model")
)
)
)
)
)
(princ "\nNo blocks found in the current layout.")
)
( (progn
(setvar 'nomutt 1)
(princ "\nSelect blocks to count <all>: ")
(setq sel
(cond
( (null (setq sel (vl-catch-all-apply 'ssget '(((0 . "INSERT"))))))
all
)
( (null (vl-catch-all-error-p sel))
sel
)
)
)
(setvar 'nomutt 0)
sel
)
(repeat (setq idx (sslength sel))
(setq lst
(LM:nassoc++
(cons (setq bln (LM:blockname (setq obj (vlax-ename->vla-object (ssname sel (setq idx (1- idx)))))))
(if
(and
(setq vis
(cdr
(cond
( (assoc bln vsl))
( (car (setq vsl (cons (cons bln (LM:getvisibilityparametername obj)) vsl))))
)
)
)
(setq vis
(vl-some
'(lambda ( x )
(if (= vis (vla-get-propertyname x))
(vlax-get x 'value)
)
)
(vlax-invoke obj 'getdynamicblockproperties)
)
)
)
(list vis)
)
)
lst
)
)
)
(princ (LM:padbetween "\n" "" "=" 46))
(princ (LM:padbetween "\n Block" "Count" "." 46))
(princ (LM:padbetween "\n" "" "=" 46))
(foreach blk (setq lst (vl-sort lst '(lambda ( a b ) (< (car a) (car b)))))
(cond
( (listp (cadr blk))
(princ (LM:padbetween (strcat "\n " (car blk)) (itoa (apply '+ (mapcar 'cadr (cdr blk)))) "." 46))
(foreach vis (cdr blk)
(princ (LM:padbetween (strcat "\n " (car vis)) (itoa (cadr vis)) "." 46))
)
)
( (princ (LM:padbetween (strcat "\n " (car blk)) (itoa (cadr blk)) "." 46)) )
)
(princ (LM:padbetween "\n" "" "-" 46))
)
(princ (LM:padbetween "\r" "" "=" 46))
(textpage)
(initget "TXT CSV")
(if
(and
(setq out (getkword "\nOutput results to [TXT/CSV] <exit>: "))
(setq ofn (LM:uniquefilename (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname))) (strcat "." (strcase out t))))
)
(if (setq des (open ofn "w"))
(progn
(setq del (if (= "TXT" out) "\t" ","))
(write-line (strcat "Block" del del "Count") des)
(foreach blk lst
(cond
( (listp (cadr blk))
(write-line (strcat (car blk) del del (itoa (apply '+ (mapcar 'cadr (cdr blk))))) des)
(foreach vis (cdr blk)
(write-line (strcat del (car vis) del (itoa (cadr vis))) des)
)
)
( (write-line (strcat (car blk) del del (itoa (cadr blk))) des))
)
)
(setq des (close des))
(startapp "explorer" ofn)
)
(princ (strcat "\nUnable to open \"" ofn "\" for writing."))
)
)
(graphscr)
)
)
(princ)
)
;; Unique Filename - Lee Mac
;; Returns a filename suffixed for uniqueness
(defun LM:uniquefilename ( pth ext / fnm tmp )
(if (findfile (setq fnm (strcat pth ext)))
(progn
(setq tmp 1)
(while (findfile (setq fnm (strcat pth "(" (itoa (setq tmp (1+ tmp))) ")" ext))))
)
)
fnm
)
;; Block Name - Lee Mac
;; Returns the true (effective) name of a supplied block reference
(defun LM:blockname ( obj )
(if (vlax-property-available-p obj 'effectivename)
(defun LM:blockname ( obj ) (vla-get-effectivename obj))
(defun LM:blockname ( obj ) (vla-get-name obj))
)
(LM:blockname obj)
)
;; Nested Assoc++ - Lee Mac
;; Increments the value of a key in an association list with possible
;; nested structure, or adds the set of keys to the list if not present.
;; key - [lst] List of keys
;; lst - [lst] Association list or nil
;; Returns: [lst] Association list with key incremented or added
(defun LM:nassoc++ ( key lst / itm )
(if key
(if (setq itm (assoc (car key) lst))
(subst (cons (car key) (LM:nassoc++ (cdr key) (cdr itm))) itm lst)
(cons (cons (car key) (LM:nassoc++ (cdr key) nil)) lst)
)
(if lst (list (1+ (car lst))) '(1))
)
)
;; Pad Between Strings - Lee Mac
;; Returns a string of a minimum specified length which is the concatenation
;; of two supplied strings padded to a desired length using a supplied character.
;; s1,s2 - [str] Strings to be concatenated
;; ch - [str] Single character for padding
;; ln - [int] Minimum length of returned string
;; Returns: [str] Concatenation of s1,s2 padded to a minimum length
(defun LM:padbetween ( s1 s2 ch ln )
(
(lambda ( a b c )
(repeat (- ln (length b) (length c)) (setq c (cons a c)))
(vl-list->string (append b c))
)
(ascii ch)
(vl-string->list s1)
(vl-string->list s2)
)
)
;; Get Visibility Parameter Name - Lee Mac
;; Returns the name of the Visibility Parameter of a Dynamic Block (if present)
;; blk - [vla] VLA Dynamic Block Reference object
;; Returns: [str] Name of Visibility Parameter, else nil
(defun LM:getvisibilityparametername ( blk / vis )
(if
(and
(vlax-property-available-p blk 'effectivename)
(setq blk
(vla-item
(vla-get-blocks (vla-get-document blk))
(vla-get-effectivename blk)
)
)
;(= :vlax-true (vla-get-isdynamicblock blk)) to account for NUS dynamic blocks
(= :vlax-true (vla-get-hasextensiondictionary blk))
(setq vis
(vl-some
'(lambda ( pair )
(if
(and
(= 360 (car pair))
(= "BLOCKVISIBILITYPARAMETER" (cdr (assoc 0 (entget (cdr pair)))))
)
(cdr pair)
)
)
(dictsearch
(vlax-vla-object->ename (vla-getextensiondictionary blk))
"ACAD_ENHANCEDBLOCK"
)
)
)
)
(cdr (assoc 301 (entget vis)))
)
)
;;----------------------------------------------------------------------;;
(vl-load-com)
(princ
(strcat
"\n:: DBCount.lsp | Version 1.1 | \\U+00A9 Lee Mac "
(menucmd "m=$(edtime,0,yyyy)")
" www.lee-mac.com ::"
"\n:: Type \"DBCount\" to Invoke ::"
)
)
(princ)
;;----------------------------------------------------------------------;;
;; End of File ;;
;;----------------------------------------------------------------------;;
;; ;;
;; This program enables the user to count all or a selection of ;;
;; standard blocks, dynamic blocks & xrefs in the current layout of a ;;
;; drawing. ;;
;; ;;
;; For every dynamic block with a Visibility Parameter, the program ;;
;; will also output the number of blocks using each Visibility State. ;;
;; ;;
;; The results are printed to the command-line and may also be ;;
;; written to a Text or CSV file automatically created in the working ;;
;; directory with the same filename as the active drawing. ;;
;; ;;
;;----------------------------------------------------------------------;;
;; Author: Lee Mac, Copyright © 2013 - www.lee-mac.com ;;
;;----------------------------------------------------------------------;;
;; Version 1.1 - 2013-11-27 ;;
;;----------------------------------------------------------------------;;
(defun c:dbcount ( / *error* all bln del des idx lst obj ofn out sel vis vsl )
(defun *error* ( msg )
(if (= 'file (type des)) (close des))
(if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
(princ (strcat "\nError: " msg))
)
(princ)
)
(cond
( (null
(setq all
(ssget "_X"
(list
'(0 . "INSERT")
(if (= 1 (getvar 'cvport))
(cons 410 (getvar 'ctab))
'(410 . "Model")
)
)
)
)
)
(princ "\nNo blocks found in the current layout.")
)
( (progn
(setvar 'nomutt 1)
(princ "\nSelect blocks to count <all>: ")
(setq sel
(cond
( (null (setq sel (vl-catch-all-apply 'ssget '(((0 . "INSERT"))))))
all
)
( (null (vl-catch-all-error-p sel))
sel
)
)
)
(setvar 'nomutt 0)
sel
)
(repeat (setq idx (sslength sel))
(setq lst
(LM:nassoc++
(cons (setq bln (LM:blockname (setq obj (vlax-ename->vla-object (ssname sel (setq idx (1- idx)))))))
(if
(and
(setq vis
(cdr
(cond
( (assoc bln vsl))
( (car (setq vsl (cons (cons bln (LM:getvisibilityparametername obj)) vsl))))
)
)
)
(setq vis
(vl-some
'(lambda ( x )
(if (= vis (vla-get-propertyname x))
(vlax-get x 'value)
)
)
(vlax-invoke obj 'getdynamicblockproperties)
)
)
)
(list vis)
)
)
lst
)
)
)
(princ (LM:padbetween "\n" "" "=" 46))
(princ (LM:padbetween "\n Block" "Count" "." 46))
(princ (LM:padbetween "\n" "" "=" 46))
(foreach blk (setq lst (vl-sort lst '(lambda ( a b ) (< (car a) (car b)))))
(cond
( (listp (cadr blk))
(princ (LM:padbetween (strcat "\n " (car blk)) (itoa (apply '+ (mapcar 'cadr (cdr blk)))) "." 46))
(foreach vis (cdr blk)
(princ (LM:padbetween (strcat "\n " (car vis)) (itoa (cadr vis)) "." 46))
)
)
( (princ (LM:padbetween (strcat "\n " (car blk)) (itoa (cadr blk)) "." 46)) )
)
(princ (LM:padbetween "\n" "" "-" 46))
)
(princ (LM:padbetween "\r" "" "=" 46))
(textpage)
(initget "TXT CSV")
(if
(and
(setq out (getkword "\nOutput results to [TXT/CSV] <exit>: "))
(setq ofn (LM:uniquefilename (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname))) (strcat "." (strcase out t))))
)
(if (setq des (open ofn "w"))
(progn
(setq del (if (= "TXT" out) "\t" ","))
(write-line (strcat "Block" del del "Count") des)
(foreach blk lst
(cond
( (listp (cadr blk))
(write-line (strcat (car blk) del del (itoa (apply '+ (mapcar 'cadr (cdr blk))))) des)
(foreach vis (cdr blk)
(write-line (strcat del (car vis) del (itoa (cadr vis))) des)
)
)
( (write-line (strcat (car blk) del del (itoa (cadr blk))) des))
)
)
(setq des (close des))
(startapp "explorer" ofn)
)
(princ (strcat "\nUnable to open \"" ofn "\" for writing."))
)
)
(graphscr)
)
)
(princ)
)
;; Unique Filename - Lee Mac
;; Returns a filename suffixed for uniqueness
(defun LM:uniquefilename ( pth ext / fnm tmp )
(if (findfile (setq fnm (strcat pth ext)))
(progn
(setq tmp 1)
(while (findfile (setq fnm (strcat pth "(" (itoa (setq tmp (1+ tmp))) ")" ext))))
)
)
fnm
)
;; Block Name - Lee Mac
;; Returns the true (effective) name of a supplied block reference
(defun LM:blockname ( obj )
(if (vlax-property-available-p obj 'effectivename)
(defun LM:blockname ( obj ) (vla-get-effectivename obj))
(defun LM:blockname ( obj ) (vla-get-name obj))
)
(LM:blockname obj)
)
;; Nested Assoc++ - Lee Mac
;; Increments the value of a key in an association list with possible
;; nested structure, or adds the set of keys to the list if not present.
;; key - [lst] List of keys
;; lst - [lst] Association list or nil
;; Returns: [lst] Association list with key incremented or added
(defun LM:nassoc++ ( key lst / itm )
(if key
(if (setq itm (assoc (car key) lst))
(subst (cons (car key) (LM:nassoc++ (cdr key) (cdr itm))) itm lst)
(cons (cons (car key) (LM:nassoc++ (cdr key) nil)) lst)
)
(if lst (list (1+ (car lst))) '(1))
)
)
;; Pad Between Strings - Lee Mac
;; Returns a string of a minimum specified length which is the concatenation
;; of two supplied strings padded to a desired length using a supplied character.
;; s1,s2 - [str] Strings to be concatenated
;; ch - [str] Single character for padding
;; ln - [int] Minimum length of returned string
;; Returns: [str] Concatenation of s1,s2 padded to a minimum length
(defun LM:padbetween ( s1 s2 ch ln )
(
(lambda ( a b c )
(repeat (- ln (length b) (length c)) (setq c (cons a c)))
(vl-list->string (append b c))
)
(ascii ch)
(vl-string->list s1)
(vl-string->list s2)
)
)
;; Get Visibility Parameter Name - Lee Mac
;; Returns the name of the Visibility Parameter of a Dynamic Block (if present)
;; blk - [vla] VLA Dynamic Block Reference object
;; Returns: [str] Name of Visibility Parameter, else nil
(defun LM:getvisibilityparametername ( blk / vis )
(if
(and
(vlax-property-available-p blk 'effectivename)
(setq blk
(vla-item
(vla-get-blocks (vla-get-document blk))
(vla-get-effectivename blk)
)
)
;(= :vlax-true (vla-get-isdynamicblock blk)) to account for NUS dynamic blocks
(= :vlax-true (vla-get-hasextensiondictionary blk))
(setq vis
(vl-some
'(lambda ( pair )
(if
(and
(= 360 (car pair))
(= "BLOCKVISIBILITYPARAMETER" (cdr (assoc 0 (entget (cdr pair)))))
)
(cdr pair)
)
)
(dictsearch
(vlax-vla-object->ename (vla-getextensiondictionary blk))
"ACAD_ENHANCEDBLOCK"
)
)
)
)
(cdr (assoc 301 (entget vis)))
)
)
;;----------------------------------------------------------------------;;
(vl-load-com)
(princ
(strcat
"\n:: DBCount.lsp | Version 1.1 | \\U+00A9 Lee Mac "
(menucmd "m=$(edtime,0,yyyy)")
" www.lee-mac.com ::"
"\n:: Type \"DBCount\" to Invoke ::"
)
)
(princ)
;;----------------------------------------------------------------------;;
;; End of File ;;
;;----------------------------------------------------------------------;;
bernie67- Mensajes : 98
Fecha de inscripción : 22/03/2016
Edad : 56
Localización : Bogota DC-Colombia
Re: Selección de bloques según estado de visualización
ommand:
:: DBCount.lsp | Version 1.1 | © Lee Mac 2017 www.lee-mac.com ::
:: Type "DBCount" to Invoke ::
Command:
Command: DBCOUNT
Select blocks to count <all>:
=============================================
Block..................................Count
=============================================
bloque.....................................7
dos.....................................2
uno.....................................5
=============================================
:: DBCount.lsp | Version 1.1 | © Lee Mac 2017 www.lee-mac.com ::
:: Type "DBCount" to Invoke ::
Command:
Command: DBCOUNT
Select blocks to count <all>:
=============================================
Block..................................Count
=============================================
bloque.....................................7
dos.....................................2
uno.....................................5
=============================================
bernie67- Mensajes : 98
Fecha de inscripción : 22/03/2016
Edad : 56
Localización : Bogota DC-Colombia
Re: Selección de bloques según estado de visualización
Bueno creo que Lee Mac te solucionó el tema. saludos
bernie67- Mensajes : 98
Fecha de inscripción : 22/03/2016
Edad : 56
Localización : Bogota DC-Colombia
Re: Selección de bloques según estado de visualización
y con selectsimilar seleccionas los que tiene el mismo modo de visualizacion y con el panel de propiedades le cambias el modo de visibilidad.
saludos
Bernardo
saludos
Bernardo
bernie67- Mensajes : 98
Fecha de inscripción : 22/03/2016
Edad : 56
Localización : Bogota DC-Colombia
Re: Selección de bloques según estado de visualización
Vaya! muchísimas gracias. Mira que he buscado en códigos suyos pero no di con él.bernie67 escribió:Bueno creo que Lee Mac te solucionó el tema. saludos
El caso es que SELECSIMILAR me selecciona todos los bloques, independientemente del estado de visualización que tenga cada uno de ellos pero bueno, con el código me conformo.bernie67 escribió:y con selectsimilar seleccionas los que tiene el mismo modo de visualizacion y con el panel de propiedades le cambias el modo de visibilidad.
saludos
Bernardo
Voy a ver si puedo darle una vuelta y lo consigo. Muchas gracias de nuevo.
supertxull- Mensajes : 25
Fecha de inscripción : 21/03/2016
Re: Selección de bloques según estado de visualización
Oye enviame el archivo a mi correo personal pues no he podido descargarlo...
mi email es jpmolinaramirez@hotmail.com
Espero
Saludos
mi email es jpmolinaramirez@hotmail.com
Espero
Saludos
saulo2016- Mensajes : 210
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico
Re: Selección de bloques según estado de visualización
Lo que creo entender de momento es que lo que tu necesitas es apagar ciertos bloques y dejar encendidos otros.....¿porque no les asignas un layer diferente y con el comando LAYWALK poder asi seleccionar los bloques a apagar o dejar encendidos, segun lo que tu quieras??.....
Esto es lo que se me ocurre ahorita, pues todavia faltaria que me envies el archivo...
Saludos
Esto es lo que se me ocurre ahorita, pues todavia faltaria que me envies el archivo...
Saludos
saulo2016- Mensajes : 210
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico
Re: Selección de bloques según estado de visualización
Enviado a tu correo.saulo2016 escribió:Lo que creo entender de momento es que lo que tu necesitas es apagar ciertos bloques y dejar encendidos otros.....¿porque no les asignas un layer diferente y con el comando LAYWALK poder asi seleccionar los bloques a apagar o dejar encendidos, segun lo que tu quieras??.....
Esto es lo que se me ocurre ahorita, pues todavia faltaria que me envies el archivo...
Saludos
No es exactamente lo que necesito. Me gustaría poder contabilizar cuántos hay de un tipo y cuántos de otro, pudiendo seleccionarlos para poder cambiar el tipo.
Por si a alguien le quedan dudas, os comento que se trata de bloques que representan tipos de luminarias de emergencia. Dependiendo de su potencia, les asigno un modelo que, a su vez, puede ser de superficie, empotrable o estanco. Todos ellos están en la capa iluminación.
De momento, con el lisp que colgó el compañero, me apaño.
supertxull- Mensajes : 25
Fecha de inscripción : 21/03/2016
Re: Selección de bloques según estado de visualización
Entonces si lo que necesitas es contabilizar bloques utiliza este LISP del Master Lee Mac, esta excelente para hacer esa funcion...
http://www.lee-mac.com/blockcounter.html
Saludos
http://www.lee-mac.com/blockcounter.html
Saludos
saulo2016- Mensajes : 210
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico
saulo2016- Mensajes : 210
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico
Re: Selección de bloques según estado de visualización
Muchas gracias, ya los tengo todos. Genial la página (y el autor, claro).
supertxull- Mensajes : 25
Fecha de inscripción : 21/03/2016
Temas similares
» Seleccion Bloques Intersectados
» Variables de memoria según lista
» Mostrar coordenadas en la barra de estado de autocad 2015.
» Vincular Bloques
» Objetos dentro de bloques
» Variables de memoria según lista
» Mostrar coordenadas en la barra de estado de autocad 2015.
» Vincular Bloques
» Objetos dentro de bloques
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|