04 novembre 2019

Quando AutoCAD dice: “Copia negli appunti non riuscita”

Almeno una volta vi sarà capitato: un messaggio vi avvisa che è impossibile eseguire un Copia degli oggetti selezionati negli Appunti. Ma AutoCAD non può o… non vuole ?

Ho dovuto editare recentemente un file DWG che era ‘affetto’ da questo problema. Vi racconto gli step che ho seguito per cercare di risolvere il problema,  cosa c’era che impediva la copia e, soprattutto, il diverso comportamento mostrato da altri CAD con lo stesso file.

Le cause

Le cause che portano a ricevere questo messaggio di errore possono essere principalmente 3, cosi come elencate in un post di Autodesk del 17-09-2019
  1. tra gli oggetti selezionati ci potrebbe essere un oggetto proxy.
  2. il file è stato creato da un altro CAD non Autodesk.
  3. il file è danneggiato

La ricerca della soluzione

Il file era stato effettivamente creato da un altro CAD, il messaggio alla sua apertura me lo comunicava

Ma, per prima cosa (la più rapida), ho voluto utilizzare il comando VERIFICA, che esegue un primo sommario controllo sulla correttezza del disegno.

Nel report finale del comando non sono stati rilevati errori


Ho provato quindi a verificare se ci fossero oggetti Proxy.
Gli oggetti proxy sono oggetti personalizzati (custom object) che in assenza dei programmi che li hanno creati non sono gestibili e modificabili. I custom object sono oggetti creati da plug-in o altre versioni di AutoCAD (Civil3d, Mechanical, Architettural) e sono oggetti con caratteristiche proprie tipiche di una disciplina (topografia, disegno meccanico, disegno architettonico ecc..)

Per prima cosa mi sono assicurato che gli eventuali oggetti Proxy fossero visibili. La variabile PROXYGRAPHICS era già con valore 1. Questa variabile stabilisce se l’immagine grafica di oggetti proxy debba essere salvata nel disegno.

Altra variabile da controllare è PROXYSHOW. Era impostata con valore 2, cioè che eventuali Proxy sarebbero stati visualizzati con il loro bounding-box (un rettangolo rappresentante il loro massimo ingombro) e quindi almeno selezionabili. Anche questa impostazione mi andava bene.
I layer erano tutti sbloccati e in On.
Ho potuto quindi invocare il comando SELRAPID ma, nell’elenco dei tipi di oggetti rilevati nel disegno, non c’era il proxy ! .
a sinistra la finestra di SELRAPID non mostra oggetti Proxy nel disegno mentre nell'immagine di destra un esempio di disegno in cui è presente

In questi momenti insorge un piccolo impeto di odio verso il disegno e chi lo ha prodotto, è dunque d’obbligo lanciare un comando ‘distruttivo’ come Esplodi… tanto per vedere cosa succede.
Anche dopo l’applicazione di Esplodi il problema persiste.

Fatte queste verifiche ‘soft’ non resta che cominciare a seguire i consigli indicati nel post di Autodesk.

Riscriviamo i dati

Ho cominciato a utilizzare in sequenza dei comandi per creare un nuovo file ed innescare una riscrittura dei dati.

Per primo EXPORTOTACAD, questo comando crea un file DWG depurato da dati scritti da App di terze parti. Il comando non è riuscito a creare il nuovo file.

Poi BLOCCO, che crea un file DWG con gli oggetti selezionati dato il nome file. Il risultato è stato che il file non veniva creato e senza nessun messaggio di errore !
Tra l’altro ho provato ad inserire tutto il mio disegno in altro file, con il comando INSER,  ed ho ricevuto il messaggio :”*Invalido*”

Infine DXFOUT che crea un file in formato DXF. Finalmente il file è stato creato e, una volta riaperto, ha funzionato anche il Copia negli Appunti.

Quale era il problema

Avendo tempo a disposizione ho voluto comunque capire quale fosse il motivo che impediva a AutoCAD di copiare negli appunti alcuni dati.

Pazientemente, con vari tentativi, ho isolato gli oggetti ‘non copiabili’.

C’erano degli oggetti racchiusi in Gruppi. I Gruppi sono generati dal comando Gruppo, uno strumento per aggregare gli oggetti.
Il disegnatore, invece di creare dei blocchi, aveva creato dei Gruppi per aggregare gli oggetti facenti parte di un elemento di un impianto elettrico.

Ho provato a disabitare la selezione dei Gruppi (comando Opzioni > scheda Selezione)

ed ho riprovato l’operazione di copia in Appunti: nessun risultato.

Ho richiamato il comando UNGROUP che disassembla il gruppo, nessun risultato.

Ho  richiamato il comando CLASSICGROUP che tramite una finestra di dialogo offre tutti gli strumenti per gestire i Gruppi. Nell’elenco risultavano 3 gruppi anonimi. Li ho esplosi tramite il pulsante Esplodi ma nessun risultato… del resto il precedente comando Ungrup aveva lo stesso compito.

Chi ha creato il file DWG

Ho voluto capire con quale software fosse stato creato il DWG. All’interno dei file DWG esiste una sezione  (AcDb:AppInfo) nella quale viene memorizzato il nome dell’applicazione che ha creato il file.
Nel mio caso il file è stato creato da un sw che utilizza le librerie THEIGA prodotte dalla ODA con questa firma:
la vista del file con un editor di testi per ricercare la sezione AppInfoDataList
Il nome specifico del sw non c’è, forse è crittato o non è previsto.
Tutti i più diffusi CAD basati su DWG oggi utilizzano queste librerie sw che contengono le funzioni e procedure per leggere e scrivere il formato DWG.

Il file quindi può essere stato creato da BricsCAD, GstarCAD, progeCAD, nanoCAD, Zwcad e altri.

L’apertura con altri CAD

A questo punto ho provato a testare il file con gli altri 4 CAD ed a verificarne il comportamento.

4 sw su 4 hanno consentito il Copia in Appunti. progeCAD ha richiesto però prima l’utilizzo del comando VERIFICA e la correzione degli errori
il mesaggio di errore di progeCAD che invita ad utilizzare il comando VERIFICA
Il report del comando VERIFICA ha fornito indicazioni precise sul tipo di errore che ha rilevato
Comando: VERIFICA
Correggere gli errori trovati? [Sì/No] <N>:s

AcDbLayerTableRecord(302CF), XData contains invalid groupcode (1058), Validation: <Invalid>, Default value is: < Removed>.

AcDbLayerTableRecord(460DA), XData contains invalid groupcode (1058), Validation: <Invalid>, Default value is: < Removed>.

AcDbLayerTableRecord(460ED), XData contains invalid groupcode (1058), Validation: <Invalid>, Default value is: < Removed>.

AcDbLayerTableRecord(46128), XData contains invalid groupcode (1058), Validation: <Invalid>, Default value is: < Removed>.

AcDbLayerTableRecord(46131), XData contains invalid groupcode (1058), Validation: <Invalid>, Default value is: < Removed>.

AcDbLayerTableRecord(46134), XData contains invalid groupcode (1058), Validation: <Invalid>, Default value is: < Removed>.

AcDbLayerTableRecord(4623B), XData contains invalid groupcode (1058), Validation: <Invalid>, Default value is: < Removed>.

12547 objects audited
E:\test-originale.dwg
Fri Oct 18 15:18:26 2019
Total errors found during audit 7, fixed 7

Per curiosità ho provato il comando VERIFICA anche negli altri CAD: lo stesso tipo di errori sono stati rilevati anche da BricsCAD e ZWcad mentre GStarCAD non ne ha rilevati.

Nella tabella seguente ho riassunto i risultati:

AutoCAD
GstarCAD
BricsCAD
progeCAD
ZWcad
Copia in Appunti consentita
No
Si
Si
No
Si
Rilevamento errori con Verifica
No
No
Si
Si
Si
Copia in Appunti dopo Verifica
No
-
-
Si
-

Per avere conferma che fossero proprio questi errori relativi agli Xdata ad impedire la copia in AutoCAD ho corretto il disegno in ZWcad e salvato il disegno. Successivamente l'ho riaperto in AutoCAD: la copia in Appunti ora era possibile !

Quindi una errata registrazione di valori negli Xdata di alcuni Layer innescava l'errore.

Conclusione

Una prima considerazione la si potrebbe fare circa la diversa 'sensibilità' riguardo a dei dati formalmente incoerenti che hanno avuto i vari sw CAD.
Per GStarCAD... 'andava tutto bene' mentre progeCAD ha segnalato una anomalia e preteso che venisse corretta.

Presumo che la codifica delle tabelle dei Layer nel DWG da parte delle librerie Theiga sia eseguita correttamente essendo questa una struttura non complessa e presente praticamente sin dalla prima versione del formato DWG.

Bisogna comunque ricordare che le specifiche di scrittura del formato DWG utilizzate nelle librerie Theiga sono state ottenute per reverse-engineering, pertanto per qualche elemento potrebbe esserci qualche imprecisione.

Alla luce di tutto questo, è lecito farsi qualche domanda:
Come mai AutoCAD non ha rilevato questi errori con il suo comando VERIFICA ?

Li ha giudicati errori trascurabili ?
Oppure non li ha proprio rilevati ?
Oppure li ha rilevati ma, essendo il file creato dalla concorrenza, è meglio non correggere e lasciare tutto com'è ?

Forse è in atto una 'politica' per sottolineare la potenziale inaffidabilità dei DWG creati da sw diversi da sw Autodesk ?  Forse AutoCAD diventa intransigente e rigido solo quando si trova di fronte un file corrotto (anche leggermente) creato da altri SW ?

Ma forse c'è qualche complesso meccanismo all'interno della struttura di dati del DWG che ignoro e giustifica il comportamento di AutoCAD, è probabile.

Tutto è possibile, difficile avere certezze ma, spero, non smentite.

2 commenti: