Sostituire blocco cartiglio a più disegni in AutoCAD 2008

confutatis

Guest
Avrei bisogno di sapere il nome del blocco, il nome delle etichette che devono essere cambiate, i nuovi testi da scrivere e la versione di AutoCAD su cui operi.
 

brizzo1982

Utente Junior
Professione: Impiegato tecnico
Software: Autocad 2010
Regione: Lombardia
Avrei bisogno di sapere il nome del blocco, il nome delle etichette che devono essere cambiate, i nuovi testi da scrivere e la versione di AutoCAD su cui operi.
Grazie mille per l'aiuto!
Allora, il nome del cartiglio (blocco) è CARTIGLIO_00 .

Queste elencate di seguito sono gli attributi contenuti in ogni cartiglio:

COMMITTENTE
OGGETTO_INTERVENTO
LOCALITA_INTERVENTO
FASE_DEL_PROGETTO
IDENTIFICAZIONE_JOB
TIPOLOGIA_DEL_DOCUMENTO
DESCRIZIONE_DEL_DOCUMENTO
00/GEN/001
DESCRIZIONE1
AA1
BB1
CC1
00/GEN/002
DESCRIZIONE2
AA2
BB2
CC2
00/GEN/003
DESCRIZIONE3
AA3
BB3
CC3
00/GEN/004
DESCRIZIONE4
AA4
BB4
CC4
00/GEN/005
DESCRIZIONE5
AA5
BB5
CC5
C0000
J00
E000
SCALA
A1
C0000_J00_E000_00.DWG
NOME/SISTEMA
NOME/DEL/PROGETTISTA_SG
NOME/SOCIETA_AR
NOME/DEL/PROGETTISTA_AR
NOME/SOCIETA_COMM
NOME/DEL/COMMITTENTE
NOME/SOCIETA_DITTA
NOME/DEL/TITOLARE_DITTA
TIMBRO_COPIA_INTERNA


Utilizzo Autocad 2010 Full.

Per quanto riguarda il nome dei testi da reinserire...beh, ora non lo so!
Credo che la funzione debba essere globale, da utilizzare più volte su diverse commesse, permettendomi un inserimento o una modifica di una data etichetta (o più etichette) in un colpo solo su più disegni..
..ad esempio se verso la fine del lavoro mi accorgo di dover cambiare data del progetto, andrei a modificare l'etichetta "00/GEN/001" della prima revisione, da attuare poi su tutti i cartigli dei disegni contenuti in una cartella.


..qualora un giorno volessi modificare il nome del cartiglio oppure una di queste etichette, sarei in grado autonomamente di risistemare la funzione??

Grazie di nuovo.
 

confutatis

Guest
La funzione allegata consta di 4 file separati.
1) C-CATTR è il comando primario che viene lanciato all'inizio ed è quello che apre una sessione di AutoCAD in background e invia i comandi a questa sessione con la funzione (vla-sendcommand).
2) CATTR è il comando di modifica effettivo del blocco cartiglio. Cerca tutti i cartigli con quel nome e li passa uno per uno.
3) MOD_ATTR è la funzione che cambia l'etichetta.
4) CARTELLA è la funzione che sceglie la cartella dove si trovano i disegni.

In particolare, quello che puoi fare è la modifica delle etichette.
(mod_attr blocco etichetta testonuovo)

Argomenti:
blocco - entità che rappresenta il cartiglio
etichetta - stringa che rappresenta una delle etichette da modificare
testonuovo - stringa che rappresenta il testo da inserire

Notare che io posso inserire più righe con mod_attr:
(mod_attr blocco "00/GEN/001" "01/02/2012")
(mod_attr blocco "DESCRIZIONE1" "AGGIORNAMENTI VARI")
(mod_attr blocco "AA1" "PINCO PALLINO")

Vengono effettuati i salvataggi dopo le modifiche e all'ultimo elaborato da modificare, la sessione di AutoCAD in background si chiude e rimane il disegno corrente da dove è stato fatto partire il comando C-CATTR.
Per caricare la funzione digita:
(load "funzione_rinomina") e poi C-CATTR. Il resto è automatico.

PS: ti avevo chiesto la versione di AutoCAD ma in effetti funziona su tutte le versioni dalla 2000 in poi.
 

Allegati

brizzo1982

Utente Junior
Professione: Impiegato tecnico
Software: Autocad 2010
Regione: Lombardia
Mamma mia cher lavorata confutatis....grazie!
...però non riesco a farla funzionare debitamente (non avevo dubbi!) :)

Allora, mi sembra di capire che debba personalizzare la funzione modificando nel lisp le etichette che voglio prendere in considerazione e il nuovo testo che voglio inserire, giusto?
Detto questo:

PORZIONE DI FUNZIONE ORIGINALE

(setq docs (vla-get-documents acad_app)
origine (cartella "Seleziona tua cartella di origine"
"C:\\Documents and Settings\\Utente\\Desktop"
)
listafiles (vl-directory-files origine "*.dwg" 1)
)

(foreach elemento listafiles
(setq dis2 (vla-open docs (strcat origine "\\" elemento)))
(vla-SendCommand dis2 "(load \"funzione_rinomina\") ")
(vla-SendCommand dis2 "CATTR ")
(vla-close dis2 :vlax-true)
)

(vla-sendcommand (vla-item docs 0) (strcat "(command \"_QUIT\") _Y "))
(vlax-release-object acad_app)
(princ)
)

(defun C:CATTR (/ grublo index)
(setq grublo(ssget "x" '((0 . "INSERT")(2 . "CARTIGLIO_00")))
index -1
)
(repeat (sslength grublo)
(mod_attr (ssname grublo (setq index(1+ index))) "TAG3" "NUOVOTESTO!"); <--- QUI PUOI CAMBIARE ETICHETTA E TESTONUOVO
;;;(mod_attr (vlax-ename->vla-object (ssname grublo (setq index(1+ index)))) etichetta nuovotesto)
)
)


PORZIONE DI FUNZIONE DA ME MODIFICATA (2 VALORI DI TESTO DA MODIFICARE)

(setq docs (vla-get-documents acad_app)
origine (cartella "Seleziona tua cartella di origine"
"C:\\Documents and Settings\\Utente\\Desktop"
)
listafiles (vl-directory-files origine "*.dwg" 1)
)

(foreach elemento listafiles
(setq dis2 (vla-open docs (strcat origine "\\" elemento)))
(vla-SendCommand dis2 "(load \"funzione_rinomina\") ")
(vla-SendCommand dis2 "CATTR ")
(vla-close dis2 :vlax-true)
)

(vla-sendcommand (vla-item docs 0) (strcat "(command \"_QUIT\") _Y "))
(vlax-release-object acad_app)
(princ)
)

(defun C:CATTR (/ grublo index)
(setq grublo(ssget "x" '((0 . "INSERT")(2 . "CARTIGLIO_00")))
index -1
)
(repeat (sslength grublo)
(mod_attr (ssname grublo (setq index(1+ index))) "DESCRIZIONE1" "prima emissione di verifica");
(mod_attr (ssname grublo (setq index(1+ index))) "00/GEN/001" "01 GENNAIO 2012"); <--- QUI PUOI CAMBIARE ETICHETTA E TESTONUOVO
;;;(mod_attr (vlax-ename->vla-object (ssname grublo (setq index(1+ index)))) etichetta nuovotesto)
)
)




....ma niente.
La prima parta di funzione (il C-CATTR) lavora, e quindi mi fa scegliere il percorso dei disegni e me li apre tutti in una seconda sessione di Autocad..purtroppo quando arriva all'ultimo files aperto si chiude la sessione senza aver modificato nulla.

Chiedo gentilmente lumi.
 

confutatis

Guest
La legge di Murphy ha colpito ancora...

(mod_attr (ssname grublo (setq index(1+ index))) "DESCRIZIONE1" "prima emissione di verifica");
(mod_attr (ssname grublo index) "00/GEN/001" "01 GENNAIO 2012"); <--- QUI PUOI CAMBIARE ETICHETTA E TESTONUOVO

La scritta (setq index(1+ index)) vale solo la prima riga di mod_attr, le altre devono avere solo index. Errore mio, mi sono dimenticato di dirti ciò.
 

confutatis

Guest
Dato che non so, di quelli che hanno usufruito di questa funzione, se funziona, invio una successiva verifica. Si accettano anomalie, critiche, miglioramenti e suggerimenti.
 

Allegati

reggio

Utente Senior
Professione: ...
Software: autocad11+swx16 sp4 w7 x64+Ready2W2016
Regione: Emilia - Modena
E' abbastanza semplice.
Apri il primo file.
Tramite block editor, modifica il cartiglio, salvando le modifiche noterai che gli attributi sono rimasti invariati.
Salvati, tramite wblock, il blocco del cartiglio, nome del file = nome del blocco.
Apri il secondo file, setta la variabile attreq a 0, inserisci il blocco del cartiglio usando:
-_insert NomeBlocco=NomeBlocco "0,0" 1 1 0
cancelli il blocco appena inserito:
_erase _last
Tramite il generatore di script, che trovi quì su cad3D, puoi automatizzare il tutto.
Buon divertimento
ciao a tutti :cry: ... eppure ricordo che funzionava e l'ho utilizzato con soddisfazione più volte ... ma ora non riesco più a farlo funzionare ... mi aiutate?

Ho seguito paro paro tutte le istruzioni, lancio excel, seleziono i miei 180 dwg a cui debbo eliminare logo e testo alla base cartiglio per rendere il tutto anonimo ma nel contempo mantenere i dati attributi, copio i settaggi a fianco excel, creo lo script e lo salvo, quindi lo lancio, ma mi si blocca al primo passaggio senza cambiare nemmeno un cartiglio... :cry: e ACAD2011 mi risponde coem di seguito:

Digitare il nome del disegno da aprire <C:\reggio\500.dwg>: "C:/REGGIO2/500.dwg"
Apertura di un file nel formato AutoCAD 2000.
Rigenerazione modello in corso.
Caricamento delle utilità dei menu di AutoCAD avvenuto.
<copyright: ing. Claudio Granuzzo>
Digitare Tuttosu0 per lanciare il programma!
File DWG Autodesk. Questo è un file DWG certificato il cui ultimo salvataggio è
avvenuto con un'applicazione Autodesk o un'applicazione concessa in licenza da
Autodesk.
Comando: (command "setvar" "attreq" 0)
setvar Comando sconosciuto "SETVAR". Premere F1 per la Guida.
Comando: attreq
Digitare nuovo valore per ATTREQ <0>: 0
Comando: nil

cosa sbaglio? come debbo fare?
Non mi funziona nemmeno più l'esempio zippato che avevo scaricato quì ...

Allego un piccolo esempio, mi dite come fare per farlo funzionare?
 

Allegati

MassiVonWeizen

Utente Senior
Professione: disegnatore
Software: solidworks 2019
Regione: Friuli Venezia Giulia
sostituisci setvar con modivar.
è lo stesso comando ma in italiano

quella riga miatab non l'ho capita, ma stasera sono un po' fuso e spero basti il comando in italiano per raggiustare le cose
 

reggio

Utente Senior
Professione: ...
Software: autocad11+swx16 sp4 w7 x64+Ready2W2016
Regione: Emilia - Modena
sostituisci setvar con modivar.
è lo stesso comando ma in italiano

quella riga miatab non l'ho capita, ma stasera sono un po' fuso e spero basti il comando in italiano per raggiustare le cose
Ciao Massi, grazie, inizia a girare ma ancora non ci siamo, provo a spiegare per il mè stesso del futuro quello capito sin ora e poi spero qualcuno mi aiuti a concludere ;).

1) Il file excel "semplicemente" serve per creare uno script che "non è altro" che un elenco di comandi che potresti anche scrivere a mano su ACAD, sostanzialmente excel prende i comandi che scrivi in colonna e ne crea una sorta di macro.
2) Il perchè, OGGI, il comando modivar (italiano) funzioni e il comando setvar (stesso comando in inglese) non funzioni non è chiaro (per altro _setvar con il "_" davanti lo rende internazionale e sempre interpretabile in ogni linguaggio, per cui ... non sò rimane un mistero, ma tantè, OGGI con modivar il ciclo gira e arriva alla fine.
3) miatab è il nome del blocco vecchio che vuoi sostituire con il nuovo: nella prova di oggi, dato che il vecchio blocco cartiglio con logo si chiama "cart-compil" io l'ho rinominanto in "CARTIGLIO-ORIGINALE" con il comando "_rename" avendo poi creato (e di questo non sono sicuro di averlo fatto bene, e anzi chiedo: come si fà a salvare correttamente su C:/REGGIO la copia del blocco cartiglio CON GLI ATTRIBUTI eliminando solamente il logo e la scritta in basso e assegnandogli lo 0,0 nel punto di inserimento voluto?) "CARTIGLIO-SENZA_LOGO_E_NOTE", a quel punto il comando da mettere in excel e quindi nello script è diventato
"CARTIGLIO-ORIGINALE=C:\REGGIO3\CARTIGLIO-SENZA_LOGO_E_NOTE"
... che io interpreto come: "sostituisci il blocco CARTIGLIO-ORIGINALE con il blocco C:\REGGIO3\CARTIGLIO-SENZA_LOGO_E_NOTE"

4) "0,0" credo dia la posizione di inserimento blocco,
"1" la scala
"1" ...dovrebbe essere la rotazione ... quindi zero sarebbe meglio ... non capisco perchè debbo mettere 1
"0" ... non capisco a cosa serva
"_ERASE" ... credo cancelli ...
"_LAST" ... l'ultimo ...? ma di cosa?
"_QSAVE" ... salva il file aperto e modificato
"_Close" ... chiudi il file aperto e modificato

A questo punto, il ciclo come dicevo lo fà e sostituisce i blocchi, solamente che, nel mio caso, mi rimangono diversi problemi:
- posizione nuovo blocca errata (se riesco a capire come salvare correttamente la copia come chiedevo sopra, credo si risolverà)
- rimangono sia i dati degli attributi corretti che quelli inseriti nel nuovo blocco (evidentemente non ho capito bene come gestire gli attributi nel blocco nuovo ... si veda sopra .. :(
- la scala è errata, a volte il nuovo blocco è corretto, a volte piccolo, a volte grande: questo perchè, credo, ho diversi formati di foglio A4,A3,A2,A1,A0 ... e anche questo non sò come lo risolvo...

... insomma avrei bisogno del solito AIUTONE ...
 

MassiVonWeizen

Utente Senior
Professione: disegnatore
Software: solidworks 2019
Regione: Friuli Venezia Giulia
nello script il comando setivar non è con l'underscore davanti, forse l'installazione che hai fatto è in italiano e quindi i comandi devi darli in italiano.
ill discorso di miatab=eccc.... ci sono arrivato dopo un bel po' (dimmi se sbaglio, ma tu hai sparato uno script vecchio con poca cognizione di causa?), quello che ti suggerisco è di scrivere a finco ai comandi una descrizione della loro funzione in modo da capire subito il significato se lo riprendi in mano dopo qualche tempo.
poi i comandi che lanci una volta inserito il blocco sono:
punto inserimento (0,0)
scala x (1)
scala y (1)
rotazione (0)
erase (chiede di cancellare un oggetto)
last (cancella l'ultimo oggetto inserito)

il perché degli ultimi due comandi si spiega col fatto che inserendo un blocco col medesimo nome questi viene ridefinito. poi tu hai comunque attivo il comando insert e quindi dai i valori per l'inserimento. cosa succede a questo punto, che ti trovi col vecchio blocco aggiornato (anche se completamente sballato) ed uno nuovo inserito a 0,0 avendo quindi un doppione; in questo caso erase e last cancellano l'ultimo blocco.
questo succede perché tramite script non si riesce ad emulare il tasto esc che interrompe il comando appena dopo la ridefinizione del blocco; o meglio io non ci riesco anche se Onda in questo post aveva trovato il modo.

- posizione nuovo blocca errata (se riesco a capire come salvare correttamente la copia come chiedevo sopra, credo si risolverà)
- rimangono sia i dati degli attributi corretti che quelli inseriti nel nuovo blocco (evidentemente non ho capito bene come gestire gli attributi nel blocco nuovo ... si veda sopra .. :(
- la scala è errata, a volte il nuovo blocco è corretto, a volte piccolo, a volte grande: questo perchè, credo, ho diversi formati di foglio A4,A3,A2,A1,A0
siccome hai disegni con varie scale (immagino derivino da solidworks, altrimenti pentitevi e inziate a fare i cartigli 1:1 in spazio layout) non puoi, non con un semplice script, inserire un blocco nuovo perché non avrà mai le stesse coordinate e raramente la stessa scala. quindi devi puntare tutto sulla ridefinizione di quello esistete mantenendo le impostazioni precedenti (anche perché così mantieni i valori inseriti). come adesso non so dirtelo, ma considera che devo ancora cenare che anche ho è stata lunga.
se per caso quello che devi eliminare dentro il blocco dove si leggono i testi in rosso sono blocchi o attributi potresti pensare di sostituire solo quelli: il logo fai lo stesso procedimento fatto fin ora per gli attributi leggi qua https://www.cad3d.it/forum1/threads/script-per-editare-attributi-di-un-blocco.22583/
 

MassiVonWeizen

Utente Senior
Professione: disegnatore
Software: solidworks 2019
Regione: Friuli Venezia Giulia
per sistemare gli attributi del blocco usa il comando
attsync (sincronizza i blocchi con attributi)
n (indica come tipo di selezione il nome)
nome blocco

fatto questo rimane da capire perché il punto di origine non corrisponde con quello del blocco vecchio (a proposito il tuo blocco senza logo risulta un blocco dentro un blocco, esplodilo nel dwg cartiglio senza logo)

ho capito il perché del punto di inserimento sbagliato ed è assurda mente banale, ma non pensavo ci fosse dietro un errore così pacchiano. in pratica il blocco da sostituire non ha il vertice in basso a destr asullo 0,0 mentre quello che va a sostituire si.
 
Ultima modifica:

MassiVonWeizen

Utente Senior
Professione: disegnatore
Software: solidworks 2019
Regione: Friuli Venezia Giulia
alla fine della fiera lo script iniziale funziona bene (eccetto sotituire il comando setvar con modivar) e tutto questo casino è nato perché il blocco cartiglio-originale ha il punto di inserimento messo col metro da muratore.
ti allego il file CARTIGLIO-SENZA_LOGO_E_NOTE a cui ho spostato l'origine in modo che combaciasse con l'altro.
usa questo e lancia lo script e vedrai che funziona e se vuoi star tranquillo aggiungi anche le stringhe per la sincronizzazione
 

Allegati

reggio

Utente Senior
Professione: ...
Software: autocad11+swx16 sp4 w7 x64+Ready2W2016
Regione: Emilia - Modena
... ma nooo daiiii :(
errore senza aver cambiato nulla????? nooo :(

error1.PNGerror2.PNG
 

MassiVonWeizen

Utente Senior
Professione: disegnatore
Software: solidworks 2019
Regione: Friuli Venezia Giulia
se ha funzionato l'altra volta probabilmente si è avviato male excel.
intanto per verificare che funzioni lo scrivi a mano sul blocco note.
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, CadWorx, Lisp, VBA. YouTube: roberto portuese
Regione: Sicilia
1522827423170.png
La funzione che non ti riconosce fa parte della libreria marcata in blu, in vba vai su Strumenti/Riferimenti e verifica la presenza.
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, CadWorx, Lisp, VBA. YouTube: roberto portuese
Regione: Sicilia
Se hai Autocad in italiano
(command "setvar" "attreq" 0)
diventa
(command "_setvar" "attreq" 0)
o
(setvar "attreq" 0)
o
(command "attreq" 0)
 

reggio

Utente Senior
Professione: ...
Software: autocad11+swx16 sp4 w7 x64+Ready2W2016
Regione: Emilia - Modena
Se hai Autocad in italiano (command "setvar" "attreq" 0) diventa (command "_setvar" "attreq" 0)
Ok, con modivar ho risolto, proverò anche con _setvar per renderlo internazionale
intanto per verificare che funzioni lo scrivi a mano sul blocco note.
fatto e non funzionava
se ha funzionato l'altra volta probabilmente si è avviato male excel
... effetivamente dopo un bel riavvio (era da natale ...) ora LA TUA PROVA funziona ... però ...

:cry::cry::cry:
temo di avere un altro problema che non so come superare ... :
Nella tua prova e nella mia prova, il cartiglio da sostituire si chiamava "CARTIGLIO-ORIGINALE"
mentre nella realtà il cartiglio da sostituire si chiama "Cartigli DUNO 1" (con gli spazi ...) e quindi quando lancio, lo script mi risponde:
""Cartigli.dwg": Impossibile trovare il file nel percorso di ricerca:"
... se invece, per prova rinomino l'originale come "Cartigli_DUNO_1" (senza gli spazi) lo script riesce a sostituire il cartiglio ...
quindi lo spazio pare che gli dia fastidio ... ma mica posso cambiare il nome a tutti i cartigli di tutti i dwg, tanto vale modificare tutto a mano... :(

Come faccio a far digerire gli spazi allo script/autocad?