27 agosto 2022

Quando non trova un file .SHX

... quando il CAD non trova un file .SHX. Ma dove sono realmente gli elementi definiti dal file SHX ?

All'apertura di un disegno potrebbe apparire questa finestra di dialogo:

Cosa significa in realtà questo messaggio ?

La maggior parte delle volte che appare questo messaggio di errore il problema non è legato ai font degli stili di testo ma è più probabile che sia legato alla mancanza di una FORMA (Shape in inglese) che è presente nel disegno o come simbolo (simile ad un blocco) o all'interno di un tipolinea complesso.

Le Forme inserite nel disegno

Le Forme sono degli oggetti simili a dei blocchi la cui definizione risiede in un file .SHX. Per riprodurli il CAD ha bisogno di leggere, all'apertura del DWG, anche il file SHX che contiene le Forme utilizzate.
Si può immaginare la Forma come un riferimento esterno (Xrif).

Due comandi del CAD sono dedicati alla gestione delle Forme: 

  1. CARICA, che carica in memoria una o più forme definite nel file SHX specificato;
  2. FORMA, che è il comando per inserirle nel disegno proprio come fossero blocchi. Viene richiesto punto di inserimento, fattore di scala e angolo di rotazione.

Ogni file .SHX può contenere più di una Forma che viene identificata dal nome.

Il loro utilizzo è frequente in file DWG relativi a cartografie rivenienti da sistemi GIS.

La mancanza di un file SHX - che contiene la definizione della forma inserita nel disegno - può diventare un problema in quanto la rappresentazione grafica del disegno è incompleta.

Nell'immagine di sinistra 4 Forme di colore azzurro sono state inserite sulla mappa. A destra la stessa mappa priva delle Forme a causa dell'assenza del file SHX

Le Forme nei tipilinea complessi

Le forme possono essere utilizzate anche per la creazione di tipilinea complessi. Una singola Forma può essere inglobata nel tratto lineare o ripetuta ciclicamente.

Ad esempio se osserviamo il tipolinea Isolamento :

esso riproduce tante Forme adiacenti caricandole dal file "ltshape.shx"Il file "ltshape.shx" è un file fornito con il Cad.

Se si apre il file ACAD.LIN, che continene tutte le definizioni dei tipilinea, possiamo osservare come per il tipolinea Isolamento sia presente il richiamo al nome della Forma da utilizzare (BAT in questo caso) ed al file che la contiene:

...
*ISOLAMENTO,isolamento SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
A,.0001,-.1,[BAT,ltypeshp.shx,x=-.1,s=.1],-.2,[BAT,ltypeshp.shx,r=180,x=.1,s=.1],-.1
...

In questa immagine la Forma BAT - utilizzata nel tipolinea - è inserita nel disegno come fosse un blocco. Nelle proprietà si notano Dimensione, Rotazione, Punto di inserimento ed il Nome, proprio come fosse un blocco


Gli oggetti avente il tipolinea complesso a cui manca la Forma sono comunque rappresentati con linea continua.

I file .SHX per i font di testo

SHX è anche il formato di file che serve per definire i Font che si utilizzano per gli Stili di Testo.
Da molti anni a questa parte sono stati sostituiti da
i file .TTF (True Type Font) ma, per  questioni di compatibilità con i vecchi disegni, sono ancora presenti nelle cartelle di supporto dei CAD.

La mancanza di un file .SHX relativo ai Font di testo è governata da un meccanismo di sostituzione automatico definito dalla impostazione della variabile FONTALT

Questa variabile è impostata in genere con il valore del font "simplex.shx", ciò significa che qualsiasi font non reperibile sarà sostituito con simplex.shx.

È per questo motivo che difficilmente il messaggio di errore che stiamo analizzando è riferito ai testi del disegno. 

Solo se la variabile FONTALT fosse impostata con valore nullo e un font non fosse reperibile vedremmo il messaggio di errore. Cliccando poi su "Specifica sostituzione per ogni file SHX" apparirebbe una finestra per la selezione del font

la finestra per specificare un font sostituivo da utilizzare per quello mancante


Come risolvere il problema

Ricerca del file SHX

Quando appare la finestra di errore selezionando l'opzione "Specifica sostituzione per ogni file SHX" viene proposta la selezione del file e il nome del file mancante.
Quel file è da ricercare; in prima battuta sul proprio PC, altrimenti si può provare a fare una ricerca sul Web. La cosa migliore è richiederlo a chi ha redatto il file di disegno.

Il file una volta trovato va copiato o nella cartella del disegno o in una cartella dei file di supporto del CAD (vedi comando Opzioni, scheda File, percorso dei files di supporto).
Riaprendo il file di disegno il file sarà rilevato e non si presenterà più il messaggio di errore.


Dove è stata utilizzata la Forma ?

Nel caso non si riesca a reperire il file bisogna almeno capire per cosa è stata utilizzata la Forma. È stata inserita nel disegno come simbolo o in un tipilinea complesso ?

Per verificare dove le Forme sono inserite nel disegno si può utilizzare il comando ELIMINA.

Nella sezione "Trova elementi non eliminabili" selezionando il nodo Forme si può riscontrare la presenza di uno o più file .SHX.

Cliccando sul file, nella sezione Dettagli apparirà il tipo di oggetto (Forma o Tipo linea).  
La finestra del comando Elimina. Si nota come in "Cause possibili" vengano elencate le 2 possibilità ma nella sezione "Dettagli" si specifica che la forma è riferita ad un tipolinea.


Nel caso della Forma utilizzata come simbolo sarà attivo un piccolo pulsante per la selezione oggetti per visualizzare almeno i grips nel punto di inserimento delle Forme presenti nel disegno.
Con il comando Elimina, in caso di Forme inserite come simboli, si ha la possibilità di evidenziarle tramite i loro Grip anche se invisibili a causa della mancanza del loro file SHX.

Se non si ha a disposizione un Cad con il comando Elimina avanzato si può utilizzare il comando SELRAPID, Nella lista "Tipo oggetto" deve apparire la voce "Forma" . Questo indica che ci sono Forme inserite nel disegno ma invisibili.

Se la voce non è presente in questa lista allora la Forma è stata utilizzata in un tipolinea complesso.

In realtà potrebbe anche avvenire che la Forma sia inglobata in un blocco e il comando SELRAPID non riesca a rilevarla.

Materializzare i punti di inserimento delle Forme

Il database del disegno contiene comunque le posizioni delle Forme inserite sebbene non siano visualizzate causa l'indisponibilità del file SHX che le descrive.

Il semplice programma Lisp FORPUN.LSP consente di disegnare un oggetto Punto nella posizione in cui si trovano le Forme.

Questo può essere utile per valutare la loro posizione, il loro numero e se, in qualche maniera, sia davvero significativa la loro presenza o si possa farne a meno.

Trovare il tipolinea complesso

Per verificare se la Forma è utilizzata in tipilinea complessi (sempre se non si riesce a capirlo con il comando Elimina) si può usare il programma Lisp LinOut .
Il programma scrive in un file tutte le definizioni dei tipilinea presenti nel disegno. Lo scopo è poter leggere tutte le definizioni e trovare il tipolinea che utilizza una forma.

Ad esempio aprendo il file creato dal programma sopra descritto si nota come il tipolinea LINEA_TRIANGOLO è quello che usa una Forma:

...
*CENTER_3_1,CENTER_3_1
A,298,-60,60,-60
*AM_ISO02W050,__ __ __ __ __ __ __ __ __ __ __ __ __ __ __
A,6,-1.5
*CONTINU,
A
*ACAD_ISO02W100,Linea ISO __ __ __ __ __ __ __ __ __ __ __ __ __
A,12,-3
*LINEA_TRIANGOLO,LINEA+TRIANGOLO
A,1,-1,[{shape166},linea2.SHX],1
*CENTER_13,CENTER_13
A,79,-16,16,-16
*TRATTOPUNTO_5,TRATTOPUNTO_5
A,2,-1,0,-1
...

Scoperto quale è il nome del tipolinea si possono poi selezionare gli oggetti aventi quel tipolinea e valutare il da farsi.

Ricreare una forma

Se si conosce come la Forma mancante è rappresentata ci si potrebbe cimentare nel costruirne una inserendola in un proprio file SHX e assegnando al file il nome di quello mancante.

Ci viene in aiuto il comando MKSHAPE (sempre dagli Express tools) che crea le forme in base alla selezione oggetti. Nel link seguente trovi come si utilizza MKSHAPE.

Trasformare Forme in Blocchi

Per evitare il verificarsi di questa problematica, cioè di dover distribuire file DWG aventi Forme al loro interno con anche il file .SHX, si può utilizzare il comando SHP2DWG - presente negli Express Tools  - che converte le Forme in Blocchi.

Questa è la sintassi:

Comando: SHP2BLK
Inizializzazione in corso...
Select shape entity to convert: trovato(i) 1
Enter the name of the block to create <BAT>:bat
Elementi nidificati = Off    Dati isolati = Off
The shape BAT has been replaced with block BAT.

Nessun commento:

Posta un commento