TuttoCAD Forum

TuttoCAD Forum
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Album Fotografico | Download | | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 1 - TuttoCAD Software
 AutoLISP
 Eliminare gli attributi invisibili dal blocco

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Faccine
Felice [:)] Davvero Felice [:D] Caldo [8D] Imbarazzato [:I]
Goloso [:P] Diavoletto [):] Occhiolino [;)] Clown [:o)]
Occhio Nero [B)] Palla Otto [8] Infelice [:(] Compiaciuto [8)]
Scioccato [:0] Arrabbiato [:(!] Morto [xx(] Assonnato [|)]
Bacio [:X] Approvazione [^] Disapprovazione [V] Domanda [?]
Seleziona altre faccine

    
 
   

V I S U A L I Z Z A    D I S C U S S I O N E
arri Inserito il - 06 ottobre 2009 : 08:07:39
sarebbe interessante trovare un lisp che ridefinisca i blocchi eliminando gli attributi invisibili,
servirebbe per alleggerire disegni
20   U L T I M E    R I S P O S T E    (in alto le più recenti)
arri Inserito il - 01 dicembre 2011 : 07:54:29
Messaggio inserito da Terminator

Si potrebbe aprire una nuova frontiera di modifica attributi senza sincronizzare più nulla. Comando che porta più rogne che benefici.


W la non sincronizzazione
Terminator Inserito il - 30 novembre 2011 : 18:51:31
Si potrebbe aprire una nuova frontiera di modifica attributi senza sincronizzare più nulla. Comando che porta più rogne che benefici.
arri Inserito il - 30 novembre 2011 : 18:43:31
oltretutto è diventato velocissimo
Terminator Inserito il - 30 novembre 2011 : 15:37:14
Semplicemente non esistono più sincronizzazioni, ho solo commentato la riga (command "_ATTSYNC" "S" blocco "_YES").
In effetti la sincronizzazione non serviva mai, dato che eliminavo gli attributi invisibili direttamente nella tabella dei blocchi, quella ottenuta con vla-get-blocks per intenderci. Invece gli attributi invisibili non venivano eliminati dal blocco con vla-delete, anche se non li avevo più visibili nella variabile listaattr.
arri Inserito il - 30 novembre 2011 : 15:03:50
grazie Terminator

ora non ci sono più sincronizzazioni non volute
Terminator Inserito il - 30 novembre 2011 : 14:20:38
(defun C:ELIMATTINGLO (/ utility listablocks blocco bloccvl index indexx)
 (vl-load-com)
 (setvar "CMDECHO" 0)
 (setq utility	   (vla-get-Utility
		    (vla-get-activedocument (vlax-get-acad-object))
		   )
       listablocks (vla-get-Blocks
		    (vla-get-activedocument (vlax-get-acad-object))
		   )
 )

 (setq index 0)
 (repeat (vla-get-Count listablocks)
    (setq gruppoblocchi
	  (ssget "x"
		 (list (cons 0 "INSERT")
		       (cons 2 (vla-get-Name (vla-Item listablocks index)))
		 )
	  )
    )

    (if	gruppoblocchi
     (progn
      (setq blocco   (ssname gruppoblocchi 0)
	    bloccovl (vlax-ename->vla-object blocco)
      )

      (cond
       ((= (vla-get-HasAttributes bloccovl)
	   :vlax-true
	)
	(setq indexx 0)
	(while (/= indexx (vla-get-Count (vla-Item listablocks index)))
	 (if (and (= (vla-get-ObjectName
		      (vla-Item (vla-Item listablocks index) indexx)
		     )
		     "AcDbAttributeDefinition"
		  )
		  (= (vla-get-Invisible
		      (vla-Item (vla-Item listablocks index) indexx)
		     )
		     :vlax-true
		  )
	     )
	  (progn
	   (vla-delete
	    (vla-Item (vla-Item listablocks index) indexx)
	   )
	   (setq indexx 0)
	  )
	  (setq indexx (1+ indexx))
	 )
	)
;;;(command "_ATTSYNC" "S" blocco "_YES")
       )
      )

     )
    )

  (setq index (1+ index))
 )

 (princ)
)

(princ "\nDigitare ELIMATTINGLO per far partire il LISP")
(princ "\n      ***** vers.3 by Terminator *****")
(princ)



arri Inserito il - 30 novembre 2011 : 10:41:54
in pratica il lisp dovrebbe controllare prima gli attributi:

- se è fuori sincronismo, lascialo stare

- se è sincronizzato, procedi
arri Inserito il - 27 settembre 2011 : 08:34:15
prima di usare il lisp, assicurarsi di avere gli attributi sincronizzati per non avere modifiche inaspettate
arri Inserito il - 22 maggio 2011 : 23:20:08
Messaggio inserito da Terminator

Ecco fatto!

Bastava eseguire un Purge per eliminare i riferimenti dei blocchi non utilizzati. In ogni caso ho inserito una condizione if se esiste la selezione dei blocchi interessati.


Scarica allegato:

elimattinglo.zip
1,16 KB


perfetto !!!!
Magico
grazie Terminator
Terminator Inserito il - 22 maggio 2011 : 22:57:07
Ecco fatto!

Bastava eseguire un Purge per eliminare i riferimenti dei blocchi non utilizzati. In ogni caso ho inserito una condizione if se esiste la selezione dei blocchi interessati.


PS: Mi ero preparato lo zip e ho allegato il lsp, scusa...

Scarica allegato:

elimattinglo.zip
1,16 KB
arri Inserito il - 22 maggio 2011 : 22:02:30
Messaggio inserito da Terminator

...et voilà!

(defun C:ELIMATTINGLO (/ utility listablocks obj blocco bloccovl index indexx)
 (setq utility	   (vla-get-Utility
		    (vla-get-activedocument (vlax-get-acad-object))
		   )
       listablocks (vla-get-Blocks
		    (vla-get-activedocument (vlax-get-acad-object))
		   )
 )

 (setq index 0)
 (repeat (vla-get-Count listablocks)
  (if (or
       (equal (strcase
	       (substr (vla-get-Name (vla-Item listablocks index)) 1 6)
	      )
	      "*MODEL"
       )
       (equal (strcase
	       (substr (vla-get-Name (vla-Item listablocks index)) 1 6)
	      )
	      "*PAPER"
       )
      )
   (princ)
   (progn
    (setq gruppoblocchi	(ssget "x"
			       (list (cons 0 "INSERT")
				     (cons 2 (vla-get-Name (vla-Item listablocks index)))
			       )
			)
	  blocco	(ssname gruppoblocchi 0)
	  bloccovl	(vlax-ename->vla-object blocco)
    )

    (cond
     ((= (vla-get-HasAttributes bloccovl)
	 :vlax-true
      )

      (setq indexx 0)
      (while (/= indexx (vla-get-Count (vla-Item listablocks index)))
       (if (and	(= (vla-get-ObjectName
		    (vla-Item (vla-Item listablocks index) indexx)
		   )
		   "AcDbAttributeDefinition"
		)
		(= (vla-get-Invisible
		    (vla-Item (vla-Item listablocks index) indexx)
		   )
		   :vlax-true
		)
	   )
	(progn
	 (vla-delete
	  (vla-Item (vla-Item listablocks index) indexx)
	 )
	 (setq indexx 0)
	)
	(setq indexx (1+ indexx))
       )
      )
      (command "_ATTSYNC" "S" blocco "_YES")
     )
    )

   )
  )
  (setq index (1+ index))
 )

 (princ)
)



purtroppo su dwg più complessi esce questo errore

; errore: tipo di argomento errato: lselsetp nil


Terminator Inserito il - 22 maggio 2011 : 18:55:32
...et voilà!

(defun C:ELIMATTINGLO (/ utility listablocks obj blocco bloccovl index indexx)
 (setq utility	   (vla-get-Utility
		    (vla-get-activedocument (vlax-get-acad-object))
		   )
       listablocks (vla-get-Blocks
		    (vla-get-activedocument (vlax-get-acad-object))
		   )
 )

 (setq index 0)
 (repeat (vla-get-Count listablocks)
  (if (or
       (equal (strcase
	       (substr (vla-get-Name (vla-Item listablocks index)) 1 6)
	      )
	      "*MODEL"
       )
       (equal (strcase
	       (substr (vla-get-Name (vla-Item listablocks index)) 1 6)
	      )
	      "*PAPER"
       )
      )
   (princ)
   (progn
    (setq gruppoblocchi	(ssget "x"
			       (list (cons 0 "INSERT")
				     (cons 2 (vla-get-Name (vla-Item listablocks index)))
			       )
			)
	  blocco	(ssname gruppoblocchi 0)
	  bloccovl	(vlax-ename->vla-object blocco)
    )

    (cond
     ((= (vla-get-HasAttributes bloccovl)
	 :vlax-true
      )

      (setq indexx 0)
      (while (/= indexx (vla-get-Count (vla-Item listablocks index)))
       (if (and	(= (vla-get-ObjectName
		    (vla-Item (vla-Item listablocks index) indexx)
		   )
		   "AcDbAttributeDefinition"
		)
		(= (vla-get-Invisible
		    (vla-Item (vla-Item listablocks index) indexx)
		   )
		   :vlax-true
		)
	   )
	(progn
	 (vla-delete
	  (vla-Item (vla-Item listablocks index) indexx)
	 )
	 (setq indexx 0)
	)
	(setq indexx (1+ indexx))
       )
      )
      (command "_ATTSYNC" "S" blocco "_YES")
     )
    )

   )
  )
  (setq index (1+ index))
 )

 (princ)
)


arri Inserito il - 22 maggio 2011 : 16:14:12
Messaggio inserito da Terminator

Con il VisualLISP si fanno cose che neanche mi sognavo con AutoLISP puro...

(defun C:ELIMATTIN (/ utility listablocks obj blocco index verifica)
 (setq utility	   (vla-get-Utility
		    (vla-get-activedocument (vlax-get-acad-object))
		   )
       listablocks (vla-get-Blocks
		    (vla-get-activedocument (vlax-get-acad-object))
		   )
 )
 (setq verifica	(vl-catch-all-apply
		 'vla-getEntity
		 (list utility 'obj nil "\nSelezionare blocco: ")
		)
 )

 (cond
  ((and	(= verifica nil)
	(= (vla-get-ObjectName obj)
	   "AcDbBlockReference"
	)
	(= (vla-get-HasAttributes obj)
	   :vlax-true
	)
   )
   (setq blocco	(vla-Item listablocks
			  (vla-get-Name obj)
		)
   )
   (setq index 0)
   (while (/= index (vla-get-Count blocco))
    (if	(and (=	(vla-get-ObjectName (vla-Item blocco index))
		"AcDbAttributeDefinition"
	     )
	     (= (vla-get-Invisible (vla-Item blocco index)) :vlax-true)
	)
     (progn
      (vla-delete (vla-Item blocco index))
      (setq index 0)
     )
     (setq index (1+ index))
    )
   )
   (command "_ATTSYNC" "S" (vlax-vla-object->ename obj) "_YES")
  )
  ((and	(= verifica nil)
	(/= (vla-get-ObjectName obj)
	    "AcDbBlockReference"
	)
   )
   (alert "ERRORE FATALE! ENTITA' SBAGLIATA!")
  )
  (T
   (alert "ERRORE FATALE! NESSUNA ENTITA' SELEZIONATA!")
  )
 )
 (princ)
)



grazie Terminator


Si potrebbe avere una versione che li elimina globalmente da tutti i blocchi ? (senza selezionarli)
Terminator Inserito il - 22 maggio 2011 : 14:22:15
Con il VisualLISP si fanno cose che neanche mi sognavo con AutoLISP puro...

(defun C:ELIMATTIN (/ utility listablocks obj blocco index verifica)
 (setq utility	   (vla-get-Utility
		    (vla-get-activedocument (vlax-get-acad-object))
		   )
       listablocks (vla-get-Blocks
		    (vla-get-activedocument (vlax-get-acad-object))
		   )
 )
 (setq verifica	(vl-catch-all-apply
		 'vla-getEntity
		 (list utility 'obj nil "\nSelezionare blocco: ")
		)
 )

 (cond
  ((and	(= verifica nil)
	(= (vla-get-ObjectName obj)
	   "AcDbBlockReference"
	)
	(= (vla-get-HasAttributes obj)
	   :vlax-true
	)
   )
   (setq blocco	(vla-Item listablocks
			  (vla-get-Name obj)
		)
   )
   (setq index 0)
   (while (/= index (vla-get-Count blocco))
    (if	(and (=	(vla-get-ObjectName (vla-Item blocco index))
		"AcDbAttributeDefinition"
	     )
	     (= (vla-get-Invisible (vla-Item blocco index)) :vlax-true)
	)
     (progn
      (vla-delete (vla-Item blocco index))
      (setq index 0)
     )
     (setq index (1+ index))
    )
   )
   (command "_ATTSYNC" "S" (vlax-vla-object->ename obj) "_YES")
  )
  ((and	(= verifica nil)
	(/= (vla-get-ObjectName obj)
	    "AcDbBlockReference"
	)
   )
   (alert "ERRORE FATALE! ENTITA' SBAGLIATA!")
  )
  (T
   (alert "ERRORE FATALE! NESSUNA ENTITA' SELEZIONATA!")
  )
 )
 (princ)
)
arri Inserito il - 07 ottobre 2009 : 09:45:57
Messaggio inserito da Marco_AA

Arri,

non ho niente di già fatto. Allegerire significa eliminare gli attributi o solo farli sparire dallo schermo anche se attivati?


proprio eliminare tutti gli attributi dalla tabella dei blocchi,

l'equivalente di quello che fa BATTMAN.


- scorrere tutta la tabella dei blocchi

- per ogni blocco scorrere gli attributi, se invisibili eliminare

- aggiornare la tabella


P.S.

penso che il problema può essere "terminato" da
Terminator

allego un dwg semplice di esempio


Scarica allegato:

attr_invisib.rar
18,38 KB
Marco_AA Inserito il - 07 ottobre 2009 : 09:41:33
Arri,

non ho niente di già fatto. Allegerire significa eliminare gli attributi o solo farli sparire dallo schermo anche se attivati?
arri Inserito il - 06 ottobre 2009 : 18:49:30
Citazione:
Messaggio inserito da GP

Citazione:
Messaggio inserito da MEM

Sicuramente avrai gia' letto questo.



Se è un surrogato di BURST ti esplode i blocchi.



in fatti, il difficile è trovarne uno che non esplode i blocchi

Grazie MEM per il tentativo
GP Inserito il - 06 ottobre 2009 : 17:24:34
Citazione:
Messaggio inserito da MEM

Sicuramente avrai gia' letto questo.



Se è un surrogato di BURST ti esplode i blocchi.
MEM Inserito il - 06 ottobre 2009 : 17:15:22
Sicuramente avrai gia' letto questo.
arri Inserito il - 06 ottobre 2009 : 14:15:53
Citazione:
Messaggio inserito da GP

Arri, se non sei riuscito a trovarlo tu, siamo senza speranze...



è difficile trovarlo perchè sono quelle richieste strane che non interessano


TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,14 secondi.