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
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Pagina Successiva
Autore Discussione Precedente Discussione Discussione Successiva
Pagina: di 2

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 06 ottobre 2009 : 08:07:39  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
sarebbe interessante trovare un lisp che ridefinisca i blocchi eliminando gli attributi invisibili,
servirebbe per alleggerire disegni

Modificato da - arri in Data 06 ottobre 2009 08:11:07

GP
Utente Master


Regione: Piemonte
Prov.: Vercelli


2776 Messaggi

Inserito il - 06 ottobre 2009 : 14:07:50  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
Arri, se non sei riuscito a trovarlo tu, siamo senza speranze...
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 06 ottobre 2009 : 14:15:53  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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

Torna all'inizio della Pagina

MEM
Utente Master


Regione: Puglia
Prov.: Lecce
Città: Galatone


2235 Messaggi

Inserito il - 06 ottobre 2009 : 17:15:22  Mostra Profilo Invia a MEM un Messaggio Privato  Rispondi Quotando
Sicuramente avrai gia' letto questo.
Torna all'inizio della Pagina

GP
Utente Master


Regione: Piemonte
Prov.: Vercelli


2776 Messaggi

Inserito il - 06 ottobre 2009 : 17:24:34  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da MEM

Sicuramente avrai gia' letto questo.



Se è un surrogato di BURST ti esplode i blocchi.
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 06 ottobre 2009 : 18:49:30  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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

Modificato da - arri in data 06 ottobre 2009 18:50:17
Torna all'inizio della Pagina

Marco_AA
Nuovo Arrivato




2 Messaggi

Inserito il - 07 ottobre 2009 : 09:41:33  Mostra Profilo Invia a Marco_AA un Messaggio Privato  Rispondi Quotando
Arri,

non ho niente di già fatto. Allegerire significa eliminare gli attributi o solo farli sparire dallo schermo anche se attivati?
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 07 ottobre 2009 : 09:45:57  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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

Modificato da - arri in data 22 maggio 2011 09:52:54
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 22 maggio 2011 : 14:22:15  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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)
)

Modificato da - Terminator in data 22 maggio 2011 15:34:39
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 22 maggio 2011 : 16:14:12  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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)
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 22 maggio 2011 : 18:55:32  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
...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)
)


Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 22 maggio 2011 : 22:02:30  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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



Modificato da - arri in data 22 maggio 2011 23:16:43
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 22 maggio 2011 : 22:57:07  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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

Modificato da - Terminator in data 22 maggio 2011 23:06:39
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 22 maggio 2011 : 23:20:08  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 27 settembre 2011 : 08:34:15  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
prima di usare il lisp, assicurarsi di avere gli attributi sincronizzati per non avere modifiche inaspettate

Modificato da - arri in data 27 settembre 2011 08:39:14
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 30 novembre 2011 : 10:41:54  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
in pratica il lisp dovrebbe controllare prima gli attributi:

- se è fuori sincronismo, lascialo stare

- se è sincronizzato, procedi
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 30 novembre 2011 : 14:20:38  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
(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)




Modificato da - Terminator in data 30 novembre 2011 14:25:01
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 30 novembre 2011 : 15:03:50  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
grazie Terminator

ora non ci sono più sincronizzazioni non volute
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 30 novembre 2011 : 15:37:14  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
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.
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 30 novembre 2011 : 18:43:31  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
oltretutto è diventato velocissimo
Torna all'inizio della Pagina

Terminator
Utente Master



725 Messaggi

Inserito il - 30 novembre 2011 : 18:51:31  Mostra Profilo Invia a Terminator un Messaggio Privato  Rispondi Quotando
Si potrebbe aprire una nuova frontiera di modifica attributi senza sincronizzare più nulla. Comando che porta più rogne che benefici.
Torna all'inizio della Pagina
Pagina: di 2 Discussione Precedente Discussione Discussione Successiva  
Pagina Successiva
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,35 secondi.