Página 1 de 1

Seleccionar un bloque que está en varias presentaciones

Publicado: Jue Jul 02, 2020 2:03 pm
por Faber
Hola. Quiero seleccionar el cajetín que está como bloque en muchas presentaciones a la vez, para editar los atributos conjuntamente porque por ejemplo cada vez que hay una revisión es un rollo añadir bloque por bloque.

¿Es posible?

Re: Seleccionar un bloque que está en varias presentaciones

Publicado: Jue Jul 02, 2020 2:57 pm
por Carlitosdiaz81
Con selección rápida referencia a bloque y filtrad por nombre

Re: Seleccionar un bloque que está en varias presentaciones

Publicado: Jue Jul 02, 2020 3:24 pm
por Faber
Carlitosdiaz81 escribió: Jue Jul 02, 2020 2:57 pm Con selección rápida referencia a bloque y filtrad por nombre
De esa manera sólo en la presentación actual

Re: Seleccionar un bloque que está en varias presentaciones

Publicado: Jue Jul 02, 2020 3:52 pm
por Faber
Me respondo a mi mismo por si a alguien le sirve, es tan sencillo como editar el bloque y marcar los atributos como constantes y predefinidos

Re: Seleccionar un bloque que está en varias presentaciones

Publicado: Jue Jul 02, 2020 4:32 pm
por javi lapina
Prueba este lisp de nuestro compañero Lee Mac

Como funciona el programa:
Primero cambia los valores de un bloque con atributos en una sola presentación, después ejecuta el programa y selecciona el bloque
que acabas de cambiar, el programa cambiara todos los bloques (que se llamen igual) igualándolos con los valores del bloque que has seleccionado.

Código: Seleccionar todo

(defun c:syncatts ( / ent enx idx lst sel )
   (while
       (progn (setvar 'errno 0) (setq ent (car (entsel "\nSelect block: ")))
           (cond
               (   (= 7 (getvar 'errno))
                   (princ "\nMissed, try again.")
               )
               (   (null ent) nil)
               (   (or (/= "INSERT" (cdr (assoc 0 (setq enx (entget ent)))))
                       (/= 1 (cdr (assoc 66 enx)))
                   )
                   (princ "\nSelected object is not an attributed block.")
               )
           )
       )
   )
   (if (and ent
           (setq lst (LM:getattributes ent)
                 sel (ssget "_X" (list '(0 . "INSERT") '(66 . 1) (cons 410 (strcat "~" (getvar 'ctab)))))
           )
       )
       (repeat (setq idx (sslength sel))
           (LM:setattributevalues (ssname sel (setq idx (1- idx))) lst)
       )
   )
   (princ)
)

;; Get Attributes  -  Lee Mac
;; Returns an association list of attributes present in the supplied block.
;; blk - [ent] Block (Insert) Entity Name
;; Returns: [lst] Association list of ((<Tag> . <Value>) ... )

(defun LM:getattributes ( blk / enx )
   (if (= "ATTRIB" (cdr (assoc 0 (setq enx (entget (setq blk (entnext blk)))))))
       (cons
           (cons
               (cdr (assoc 2 enx))
               (cdr (assoc 1 enx))
           )
           (LM:getattributes blk)
       )
   )
)

;; Set Attribute Values  -  Lee Mac
;; Sets attributes with tags found in the association list to their associated values.
;; blk - [ent] Block (Insert) Entity Name
;; lst - [lst] Association list of ((<tag> . <value>) ... )
;; Returns: nil

(defun LM:setattributevalues ( blk lst / enx itm )
   (if (= "ATTRIB" (cdr (assoc 0 (setq enx (entget (setq blk (entnext blk)))))))
       (if (setq itm (assoc (cdr (assoc 2 enx)) lst))
           (progn
               (if (entmod (subst (cons 1 (cdr itm)) (assoc 1 enx) enx))
                   (entupd blk)
               )
               (LM:setattributevalues blk lst)
           )
           (LM:setattributevalues blk lst)
       )
   )
)

(princ)

Re: Seleccionar un bloque que está en varias presentaciones

Publicado: Jue Jul 02, 2020 9:08 pm
por Faber
Gracias Javi, pero es que eso tampoco me valdría, porque hay atributos que los valores son iguales pero otros diferentes

Re: Seleccionar un bloque que está en varias presentaciones

Publicado: Mié Jul 08, 2020 4:39 pm
por Josess
Se me ocurren dos alternativas ...

1 Buscar y reemplazar....V2 por V3,...puedes saltar alguno que no quieras sustituir...

2 Hacer una referencia con el cajetín, con los datos generales y dejar como bloque solo los atributos que cambian ( n°,..título,...etc)

Re: Seleccionar un bloque que está en varias presentaciones

Publicado: Mié Jul 08, 2020 5:03 pm
por Faber
Josess escribió: Mié Jul 08, 2020 4:39 pm Se me ocurren dos alternativas ...

1 Buscar y reemplazar....V2 por V3,...puedes saltar alguno que no quieras sustituir...

2 Hacer una referencia con el cajetín, con los datos generales y dejar como bloque solo los atributos que cambian ( n°,..título,...etc)
1 No puedo buscar un atributo que está en blanco, no hay nada en él

2 Todo eso funcionaría pero hay un procedimiento en la empresa que impide hacer REFX del cajetín (ojalá). Por eso pregunto.

Gracias de todas formas por intentar ayudar. Lo he solucionado por esta vez como dije en mi anterior post.