16 marzo 2018

Perché è impossibile eliminare un layer dal disegno



Blocchi anonimi, Xdata, Custom object ed altri fenomeni ‘paranormali’ rendono impossibile una operazione che dovrebbe essere semplice.

“Quando pensi di aver fatto tutto in maniera perfetta, hai sistemato ogni oggetto sul proprio layer...il disegno è finito, pronto per la consegna.È ora di lanciare un bel ELIMINA. Una, due, tre volte ma ti accorgi che quel layer non va via e continua a restare nell'elenco.  È questo il momento in cui decidi che non chiuderai il disegno fino a quando non l’avrai eliminato. Con le buone o con le cattive.” dalDiario di un disegnatore CAD

Perché a volte è impossibile eliminare un layer dal disegno con il comando Elimina?  Interrogativo che sarà certamente sorto ai disegnatori alle prime armi, ma anche a quelli più esperti.
Sebbene la maniera per far ‘sparire’ un layer indesiderato ci sia ( se non si è riusciti  con il comando ELIMINA si usa LAYDEL o LAYMGR) non è male capire il ’perché’ della persistenza ingiustificata di un layer nel disegno.

Tutti sanno che, se un layer non si riesce ad eliminare, è perche comunemente si verifica una delle due situazioni:
  1. il layer da eliminare è il layer corrente 
  2. Ci sono degli oggetti che giacciono su quel layer

Nel primo caso, essendo il layer delegato ad ospitare gli oggetti che si stanno creando, bisogna rendere corrente un altro layer e poi effettuare l’eliminazione.

Nel secondo caso, il layer non può essere eliminato perche su di esso sono contenuti degli oggetti . Per risolvere il problema bisogna cambiare il layer di quegli oggetti. Prima di usare un comando come LAYMRG, sarà meglio selezionarli e rendersi conto di quale potrà essere il corretto layer di destinazione in base al tipo di oggetti.
Usare il comando SELRAPID (QSELECT) con il filtro il nome layer da eliminare
La finestra del comando Selrapid


Prima di fare questo assicurarsi che il layer non sia congelato, altrimenti gli oggetti non saranno selezionati.
Attenzione! A volte è necessario applicare il comando oltre che nello spazio modello anche nello spazio carta.

Queste sono le casistiche più comuni ma, spesso (purtroppo), ci si trova anche in altre situazioni.

Oggetti contenuti in blocchi giacciono su quel layer

Il secondo caso descritto prima può avere una variante più… complicata. I blocchi possono essere composti da più oggetti. Ogni oggetto ha il proprio layer di appartenenza, indipendente da quello di inserimento del blocco.
Ma quali sono i blocchi incriminati? La maniera più rapida per scoprire quali blocchi hanno il problema è utilizzare il comando LAYDEL.
Il comando LAYDEL esegue la cancellazione degli oggetti che giacciono su un determinato layer e, quando questi sono contenuti in un blocco, LAYDEL ne evidenzia il nome sulla riga di comando:

Comando: LAYDEL
Selezionare un oggetto sul layer da eliminare oppure [Nome]: N
Layer selezionati: VAN DER VELDE.
Ridefinizione del blocco "PILASTRO". <--
Eliminazione del layer "VAN DER VELDE" in corso.
Layer 1 eliminato.

Prendiamo nota del nome del blocco che è stato modificato, richiamiamo il comando ANNULLA per ripristinare la situazione precedente e poi interveniamo sui blocchi con il comando MODIFBLOC (BEDIT) per modificare il layer agli oggetti.

Da notare che il comando LAYDEL esamina anche i blocchi definiti nel disegno ma non inseriti nell’area grafica.

Oggetti contenuti in blocchi anonimi giacciono su quel layer

Cosa succede se il layer è stato rilevato in un blocco anonimo ? Per fortuna LAYDEL o anche LAYMRG, lo rilevano.
Ma cosa sono i blocchi anonimi e perché hanno riferimenti con layer con i quali non dovrebbero nulla a che fare?”.

I blocchi anonimi servono a definire la rappresentazione di alcuni particolari oggetti composti del disegno. Il Cad li usa per descrivere oggetti come le quote, le tabelle, le campiture, le varianti di blocchi dinamici.
In un disegno, pertanto, potremmo rilevare la presenza di blocchi chiamati “*Dnn” (per nn si intende un numero) che si riferiscono a delle quote; “*Tnn” che si riferiscono a delle tabelle;  “*Unn” che si riferiscono ai blocchi dinamici; “*Hnn” che si riferiscono a campiture.

Tra queste tipologie alcune creano problemi. La causa è la presenza di alcun bug nelle vecchie versioni del software con i quali sono stati creati.
Quando si cambiava il layer di una quota (*Dnnn) o una campitura (*Hnnn) restavano, all’interno del blocco, dei riferimenti al layer nel quale l’oggetto era stato originariamente creato.

Il bug è ormai risolto. Per le campiture, tra l’altro, non viene più utilizzato un blocco anonimo.
Può comunque capitare di imbattersi in vecchi disegni contenenti quote e campiture creati con versioni del sw affette da questi bug.

Un discorso a parte meritano i blocchi anonimi delle tabelle (*Tnn) che, ancora nella versione 2018, presentano gli effetti di un bug: le linee della tabelle risultano appartenere sempre al layer sul quale è stata creata, anche se si cambia il layer della Tabella !
Di questo bug sono affetti AutoCAD, ZWcad e Gstarcad. Ne sono esenti invece progeCAD e BricsCAD.

In questo caso, più che utilizzare LAYDEL, è meglio utilizzare LAYMRG inviando gli oggetti sul layer 0.
Comando: LAYMRG
Selezionare un oggetto sul layer da unire oppure [Nome]: N
Layer selezionati: VAN DER VELDE.
Selezionare un oggetto sul layer da unire oppure [Nome/Annulla]:
Selezionare un oggetto sul layer destinazione oppure [Nome]: N
Ridefinizione del blocco "*T1". <-- blocco tabella
Eliminazione del layer "VAN DER VELDE" in corso.
Layer 1 eliminato.

Oggetti con XDATA che puntano al layer

Ci potrebbero essere oggetti a cui, il CAD o delle applicazioni di terze parti, hanno assegnato degli XDATA (dati estesi).
Gli Xdata sono delle strutture di dati che vengono ‘agganciate’ agli oggetti (anche non grafici) al fine di memorizzare dei dati propri dell’applicazione che li gestisce.

Ad esempio, quando si associa un Hyperlinlk ad un oggetto tramite il comando omonimo, vengono attaccati una serie di Xdata all'oggetto per memorizzare le informazioni relative al link.

Un altro esempio è quello delle Finestre nello spazio carta (Viewport) che, tramite Xdata, memorizzano i nomi dei layer congelati localmente nell'ambito della finestra.
A causa di questa registrazione di dati - in alcune vecchie versioni di AutoCAD - un bug del software impediva l’eliminazione dei layer anche se vuoti, solo perché erano registrati negli Xdta della finestra.

Il comando LAYDEL elimina queste informazioni senza problemi. Bisogna essere consci, però, che una eventuale rimozione dei dati potrebbe invalidare il funzionamento dell’applicazione che li ha creati.

PROXY_OBJECT non selezionabili

Il disegno potrebbe contenere degli oggetti personalizzati (Custom Object) creati da un’altra applicazione i cosiddetti PROXY_OBJECT.

Le applicazioni possono imporre ai loro Custom Object proprietà particolari legate all'ambito dell’applicazione. Pertanto potrebbero essercene alcuni per i quali non è previsto il cambio di layer. Questo problema è irrisolvibile a meno di non cancellare (con varie tecniche) i suddetti oggetti.

Oggetti invisibili

Potrebbero essere presenti sul layer degli oggetti invisibili, che sono comunque tutti rilevabili da un SELRAPID (QSELECT) o LAYDEL.
Sarebbe opportuno rendersi conto della loro effettiva utilità prima di eseguire la loro cancellazione o spostamento su altro layer.

I potenziali oggetti invisibili possono essere:
  • un tratteggio, non visibile a causa di un fattore di scala troppo elevato. In fase di creazione l’operatore ha assegnato un fattore di scala talmente grande che, per l’area di destinazione, risulta essere non rappresentabile. In questo caso selezionarlo con SELRAPID e assegnarli il modello di riempimento SOLID al fine di poterlo visualizzare e rendersi conto della sua posizione e utilità.
  • una 3dface con tutti gli edge invisibili. Ricordiamo che la variabile SPLFRAME consente di forzare la visibilità degli Edge invisibili delle mesh. Metterla ad 1 per renderli visibili.
  • un oggetto wipeout creato con il comando ENTCOPR (WIPEOUT) non visibile perché l’impostazione dell’opzione cornice è in OFF. In questo caso cambiare il valore della variabile WIPEOUTFRAME a 1 o 2 per modificare lo stato di visibilità della cornice.
  • Blocchi vuoti, cioè non aventi nessun oggetto grafico al loro interno. 
  • Regioni o solidi nulli rivenienti da operazioni con comandi SOTTRAI
  • Linee polilinee di lunghezza zero. Questo oggetti anomali per fortuna sono gestiti dal comando ELIMINA (dalla versione 2011 e successive).
  • Testi con valori nulli o spazi, anche questi sono gestiti dal comando ELIMINA.
La finestra del comando Elimina

Layer speciali

A volte ci si trova alle prese con vecchi file DWG che possono contenere layer dai nomi strani  (ammesso che il disegnatore nomini i layer con nomi ‘non strani’... ma è una cosa rara).

Oltre al layer 0, che è sempre presente, e DEFPOINTS , che appare quando si creano delle quote, ecco un elenco di alcuni altri layer creati in automatico da comandi e/o plug-in:

ASHADE
Nelle vecchie versioni di AutoCAD questo layer veniva creato per contenere gli oggetti relativi al rendering  (luci, camere). Se era stato invocato il comando RENDER i blocchi invisibili (“AVE_RENDER” e “AVE_GLOBAL”) ai quali erano associati degli XDATA relativi a parametri di rendering.

AME_FRZ
Il layer AME_FRZ era creato dalle prime versioni del modellatore solido di AutoCAD, AME (Advanced Modeling Extension), e conteneva dei blocchi invisibili come “AME_NIL” e  “AME_SOL” a cui erano associati  degli XDATA relativi a parametri di configurazione dell’applicazione.

PV-nnnn e PH-nnnn
Con il comando SOLPROF si creano 2 layer nei quali sono contenuti gli spigoli visibili del profilo (layer PV-nnnn) e gli spigoli (layer PH-nnnn). Per nnnn si intende un numero esadecimale che identifica la finestra nello spazio carta nella quale si è richiamato il comando SOLPROF.

$BAD-AUDIT-LAYER$
Può essere creato nei disegni con dati corrotti dopo aver invocato un comando VERIFICA (Audit) o RECUPERA (Recover). Contiene in genere oggetti che il programma ha tentato di ‘riparare’.

URLLAYER
Questo layer è creato dal comando COLLIPER (Hyperlink) e contiene una polilinea che delimita una area a cui è associato un link (ne avevamo già parlato in “Il comando Hyperlink”).

MD_***
Il comando VISTABASE (VIEWBASE)  genera 3 layer: MD_Visible nel quale sono contenuti gli spigoli visibili , MD_Hidden per gli spigolo nascosti e MD_Annotation  per ospitare i testi delle annotazioni e le linee di sezione.

Nessun commento:

Posta un commento