Selección de bloques según estado de visualización

Ver el tema anterior Ver el tema siguiente Ir abajo

Selección de bloques según estado de visualización

Mensaje por supertxull el Jue Jun 08, 2017 4:53 pm

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.

supertxull

Mensajes : 12
Fecha de inscripción : 21/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por supertxull el Mar Jun 20, 2017 11:42 am

¿nadie?

supertxull

Mensajes : 12
Fecha de inscripción : 21/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por robierzo el Mar Jun 20, 2017 3:34 pm

A qué te refieres con "según su estado de visualización"????
A qué te refieres con "parámetro de visibilidad determinado"?????
avatar
robierzo

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

Ver perfil de usuario http://www.selmotopografia.es

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por saulo2016 el Mar Jun 20, 2017 4:03 pm

Sube por favor un DWG con lo que necesitas hacer......el antes y despues.




Saludos
avatar
saulo2016

Mensajes : 121
Fecha de inscripción : 17/03/2016
Edad : 51
Localización : Monterrey, Nuevo León, Mexico

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por supertxull el Mar Jun 20, 2017 10:28 pm

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 : 12
Fecha de inscripción : 21/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por supertxull el Jue Jun 22, 2017 4:25 pm

perdonad, ¿no me he explicado? ¿no podéis descargar el archivo?

supertxull

Mensajes : 12
Fecha de inscripción : 21/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por robierzo el Jue Jun 22, 2017 4:27 pm

Yo sí lo he visto. Pero la verdad es que no sé cómo resolverlo.
avatar
robierzo

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

Ver perfil de usuario http://www.selmotopografia.es

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por supertxull el Jue Jun 22, 2017 7:24 pm

robierzo escribió:Yo sí lo he visto. Pero la verdad es que no sé cómo resolverlo.
Gracias por tu tiempo de todos modos.

supertxull

Mensajes : 12
Fecha de inscripción : 21/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por bernie67 el Vie Jun 23, 2017 2:07 am

;;--------------------=={ 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 ;;
;;----------------------------------------------------------------------;;
avatar
bernie67

Mensajes : 53
Fecha de inscripción : 22/03/2016
Edad : 50
Localización : Bogota DC-Colombia

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por bernie67 el Vie Jun 23, 2017 2:08 am

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
=============================================
avatar
bernie67

Mensajes : 53
Fecha de inscripción : 22/03/2016
Edad : 50
Localización : Bogota DC-Colombia

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por bernie67 el Vie Jun 23, 2017 2:10 am

Bueno creo que Lee Mac te solucionó el tema. saludos
avatar
bernie67

Mensajes : 53
Fecha de inscripción : 22/03/2016
Edad : 50
Localización : Bogota DC-Colombia

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por bernie67 el Vie Jun 23, 2017 2:13 am

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
avatar
bernie67

Mensajes : 53
Fecha de inscripción : 22/03/2016
Edad : 50
Localización : Bogota DC-Colombia

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por supertxull el Vie Jun 23, 2017 8:52 am

bernie67 escribió:Bueno creo que Lee Mac te solucionó el tema. saludos
Vaya! muchísimas gracias. Mira que he buscado en códigos suyos pero no di con él.
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
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.
Voy a ver si puedo darle una vuelta y lo consigo. Muchas gracias de nuevo.

supertxull

Mensajes : 12
Fecha de inscripción : 21/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por saulo2016 el Vie Jun 23, 2017 3:06 pm

Oye enviame el archivo a mi correo personal pues no he podido descargarlo...

mi email es jpmolinaramirez@hotmail.com


Espero


Saludos
avatar
saulo2016

Mensajes : 121
Fecha de inscripción : 17/03/2016
Edad : 51
Localización : Monterrey, Nuevo León, Mexico

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por saulo2016 el Vie Jun 23, 2017 3:11 pm

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
avatar
saulo2016

Mensajes : 121
Fecha de inscripción : 17/03/2016
Edad : 51
Localización : Monterrey, Nuevo León, Mexico

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por supertxull el Lun Jun 26, 2017 10:07 am

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
Enviado a tu correo.
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 : 12
Fecha de inscripción : 21/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por saulo2016 el Lun Jun 26, 2017 3:24 pm

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
avatar
saulo2016

Mensajes : 121
Fecha de inscripción : 17/03/2016
Edad : 51
Localización : Monterrey, Nuevo León, Mexico

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por saulo2016 el Lun Jun 26, 2017 3:28 pm

Aqui tienes otro mas del Maestro Lee Mac


http://www.lee-mac.com/nestedblockcounter.html



Saludos
avatar
saulo2016

Mensajes : 121
Fecha de inscripción : 17/03/2016
Edad : 51
Localización : Monterrey, Nuevo León, Mexico

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por supertxull el Lun Jun 26, 2017 4:05 pm

Muchas gracias, ya los tengo todos. Genial la página (y el autor, claro).

supertxull

Mensajes : 12
Fecha de inscripción : 21/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Selección de bloques según estado de visualización

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

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