Portare a 0 la variabile INSUNITS nei blocchi di un disegno

x11start

Utente Standard
Professione: Disegnatore prefabbricati
Software: Autocad
Regione: Piemonte
#1
La variabile INSUNITS se lasciata al valore 0, consente di importare blocchi fra i vari disegni mantenendo la scala del blocco stesso, la scala con cui è stato creato.
Se invece se nel disegno la si imposta ad un valore diverso (es. 4 che rappresenta i mm), e si crea un blocco, quando quest'ultimo viene inserito in un altro disegno in cui la variabile è posta ad un valore diverso.... il blocco viene scalato.
Sicuramente la cosa è utilissima se i lisp sono stati creati tenendone conto, viceversa la cosa diventa fastidiosa poichè i blocchi richiamati risultano scalati.

Mi chiedo se fosse possibile creare un lisp in grado di porre a 0 .... o comunque di variare TUTTI i blocchi di un disegno contemporaneamente, senza dover esplodere e ricreare i blocchi.

Suppongo si tratti di un codice di gruppo nascosto chissà dove....

Grazie per l'aiuto
 

Cristallo

Utente Standard
Professione: Leggo e confronto
Software: Lettura critica
Regione: Fuori dalla cerchia
#2
INSUNITS è una variabile memorizzata nel disegno, non nel blocco, per cui mai la troverai tra i gruppi del blocco.
Via Lisp, ottieni tale veriabile mediante (getvar) e la setti tramite (setvar).
Il fatto è che se crei un blocco esterno (un dwg che richiami da un'altro dwg) ovviamente il dwg del blocco ha la sua variabile memorizzata all'interno del file, che non è una variabile legata al singolo blocco, ma al singolo file.
E' il valore della variabile (del disegno) salvata al momento in cui hai creato il blocco (come dwg esterno), non so se mi sono spiegato.
Dovresti aprire tutti i dwg dei blocchi che hai, settare INSUNITS a zero e salvarli, tutto li.
 
Professione: disegnatore
Software: autocad 2013; solidworks 2014
Regione: Friuli Venezia Giulia
#3
però se guardi le proprietà all'interno del blocco c'è quella delle unità che è modificabile
 

x11start

Utente Standard
Professione: Disegnatore prefabbricati
Software: Autocad
Regione: Piemonte
#4
Io non mi ero mai posto il problema poichè in "millemila" anni di carriera (!) i miei blocchi li avevo sempre importati fra i vari disegni mantenendone la scala.
Proprio adesso ho provato a creare un quadrato 100x100 all'interno di un disegno in cuo ho posto INSUNITS = 4, poi ne ho fatto un blocco.; l'ho selezionato e copiato con CTRL+C.
Sono entrato in un altro DWG in cui la variabile è posta a 0, ed ho incollato il blocco.

Il blocco incollato ha mantenuto la dimensione 100x100.

Ho fatto la medesima operazione nella direzione opposta... ed anche in questo caso la scala no è variata...

A questo punto non capisco perchè gli altri blocchi si scalino....
 

GP.

Utente Senior
Professione: Nientologo
Software: uozapp
Regione: Vercelli
#5
Per sapere il valore di INSUNITS, o meglio il valore delle UNITA' di un blocco:
(vla-get-insunits (vlax-Ename->Vla-Object (car (entsel))))
restituisce "Millimetri", "Centimetri" o "Metri"

Per sapere il rapporto di scala tra l'UNITA' del blocco e INSUNITS del dwg
(vla-get-insunitsfactor (vlax-Ename->Vla-Object (car (entsel))))
restituisce ad es. 0.01 se il blocco importato è in centimetri e INSUNITS = 6 (metri)

Questo valore serve per sapere di quanto scalare il blocco per rapportarlo al disegno in cui è stato importato, dopo di che si può assegnare a tutti i blocchi il valore corrente di INSUNITS con:
(vlax-for blk (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-put-units blk (getvar 'insunits))
)


Dovendo quindi trattare tutti blocchi del dwg bisognerebbe sapere come sono stati inseriti, ovvero SCALATI per uniformarli col resto del disegno o senza variare la scala originaria?
 

x11start

Utente Standard
Professione: Disegnatore prefabbricati
Software: Autocad
Regione: Piemonte
#6
Grazie a tutti .. e Grazie a GP! Non mi resta che creare una sub che passa in rassegna i blocchi interessati, prima di inserirli nel disegno.
 

x11start

Utente Standard
Professione: Disegnatore prefabbricati
Software: Autocad
Regione: Piemonte
#7
Quindi sostanzialmente, credo che mi limiterò a fare in modo che i nuovi blocchi inseriti divengano nella scala giusta.... evitando di "forzare" la scala interna di ognuno.