Vai al contenuto principale
Un’ipotesi per un elemento può essere presente o assente. Un’ipotesi trovata, di norma, è formulata sulla base di uno o più oggetti immagine o dei loro frammenti (fa eccezione l’elemento White Gap, che può non contenere alcun oggetto immagine). Un’ipotesi trovata per un elemento semplice è sempre una regione continua. Le ipotesi per gli elementi White Gap, Separator e Barcode sono sempre rettangoli singoli. Se un’ipotesi è formulata sulla base di un insieme di oggetti immagine rilevati, ad esempio un’ipotesi per un elemento Paragraph, la regione dell’ipotesi viene costruita a partire dall’array di rettangoli degli oggetti rilevati. La regione creata in questo modo può essere ottenuta con il metodo Region dell’ipotesi. Durante la visualizzazione della regione dell’ipotesi sull’immagine, o durante la creazione di un blocco sulla base dell’ipotesi, i confini della regione non seguono esattamente quelli di ciascun rettangolo: i contorni dell’area di ricerca vengono invece smussati per una migliore visualizzazione. Una regione così creata può essere ottenuta utilizzando il metodo SimplifiedRegion dell’ipotesi. I metodi Region e SimplifiedRegion possono essere utilizzati sia nella sezione Search Conditions (quando si descrive l’area di ricerca dell’elemento), sia quando si descrivono le proprietà del blocco e si utilizzano gli elementi già trovati. Se un’ipotesi non è stata trovata, coincide con il rettangolo sfocato della sua area di ricerca. Durante la visualizzazione di un’ipotesi non trovata sull’immagine, il programma disegnerà il rettangolo esterno di tale rettangolo sfocato. I confini Left, Top, Right e Bottom di qualsiasi ipotesi sono intervalli. Per ogni ipotesi trovata, l’intervallo degenera in un punto, cioè Left.Start = Left.End, Top.Start = Top.End, ecc. Per un’ipotesi non trovata, gli intervalli dei confini coincidono con gli intervalli della sua area di ricerca. Accedere alle ipotesi generate e alle loro proprietà nel codice delle corrispondenti finestre di dialogo di blocchi ed elementi mette a disposizione strumenti aggiuntivi per la configurazione del FlexiLayout. Le ipotesi degli elementi sono accessibili per nome degli elementi. Per accedere all’ipotesi dell’elemento corrente nella sezione Hypotheses Evaluation, è possibile usare solo il nome della proprietà. Le ipotesi e le loro proprietà sono accessibili in modalità di sola lettura. Le ipotesi per gli elementi sono accessibili nelle sezioni Search Conditions e Hypotheses Evaluation, nonché nella sezione Code Editor del field. In Search Conditions è possibile accedere alle ipotesi generate (e alle relative proprietà) per tutti gli elementi collocati sopra l’elemento corrente nell’albero Elements. In Hypotheses Evaluation è possibile accedere alle ipotesi generate per gli elementi collocati sopra l’elemento corrente nell’albero Elements e all’ipotesi per l’elemento corrente stesso. Nel Code Editor del field è possibile accedere alle ipotesi (e alle loro proprietà) per tutti gli elementi. La tabella seguente elenca le proprietà delle ipotesi per tutti i tipi di elemento.
ProprietàDescrizione
Logic IsNull()Indica se si tratta di un’ipotesi nulla (se l’elemento è stato rilevato, la proprietà IsNull dell’ipotesi è True).
Logic IsFound()Indica se l’ipotesi non è nulla (se l’elemento non è stato rilevato, la proprietà IsNull dell’ipotesi è False). Equivalente a IsNull.
XInterval Left()Il limite sinistro dell’ipotesi, intervallo orizzontale in coordinate globali.
YInterval top()Il limite superiore dell’ipotesi, intervallo verticale in coordinate globali.
XInterval Right()Il limite destro dell’ipotesi, intervallo orizzontale in coordinate globali.
YInterval Bottom()Il limite inferiore dell’ipotesi, intervallo verticale in coordinate globali.
XInterval XCenter()La coordinata X del centro dell’ipotesi, intervallo orizzontale in coordinate globali.
YInterval YCenter()La coordinata Y del centro dell’ipotesi, intervallo verticale in coordinate globali.
DistInterval Width()La larghezza dell’ipotesi in coordinate globali, intervallo delle distanze.
DistInterval Height()L’altezza dell’ipotesi in coordinate globali, intervallo delle distanze.
FuzzyRect FuzzyRect()Rettangolo fuzzy dell’ipotesi in coordinate globali.
Rect Rect()Il rettangolo che circoscrive l’ipotesi in coordinate globali. Coincide con il rettangolo esterno del rettangolo fuzzy.
Region Region()L’area dell’ipotesi in coordinate globali. Il metodo non è supportato per gli elementi Group.
Region SimplifiedRegion()L’area dell’ipotesi in coordinate globali, semplificata per una migliore rappresentazione visiva. Il metodo non è supportato per gli elementi Group.
ImageObjectSet Set()Gli oggetti immagine che fanno parte dell’ipotesi.
ImageObjectSet ExcludeSet()Gli oggetti immagine che si trovano nell’area esclusa dall’area di ricerca dai metodi di tipo Exclude.
RectArray Rects()L’array dei rettangoli inclusi nell’ipotesi. Per la maggior parte degli elementi coincide con l’array dei rettangoli che racchiudono gli oggetti rilevati. Per gli elementi White Gap e Region non sono disponibili oggetti.
Int HypothesesCount()Il numero di ipotesi formulabili per l’elemento nell’area di ricerca. La funzione può essere usata solo se i numeri massimo e minimo di pagine del documento sono impostati su 1, ossia il documento rilevato ha una sola pagina. Se si usa questa funzione per un documento multipagina, il matching di un FlexiLayout restituirà un errore.
PageInterval Pages()L’intervallo di pagine in cui trovare l’ipotesi.
PageArea PageAreaGlobal( Int PageNumber )Restituisce la parte dell’ipotesi situata nella pagina indicata in coordinate globali.
PageArea PageAreaLocal( Int PageNumber )Restituisce la parte dell’ipotesi situata nella pagina indicata nelle coordinate locali della pagina.

Esempio di codice per richiamare le proprietà di un’ipotesi

Prima di accedere alle proprietà di un’ipotesi per un elemento semplice o di tipo Group, assicurati che l’ipotesi a cui vuoi accedere non sia nulla (verifica la proprietà IsNull). L’accesso a una proprietà di un’ipotesi nulla (che corrisponde a un elemento non rilevato) causerà un errore. Supponiamo che nel tuo documento sia presente un identificatore sotto forma di codice a barre e che tu voglia che il tuo FlexiLayout corrisponda solo ai documenti in cui il valore del codice a barre è 1556897142240. Procedi come segue per ottenere il risultato desiderato. Nella sezione Hypotheses Evaluation dell’elemento che descrive le proprietà e i vincoli di ricerca del codice a barre, scrivi il seguente codice:
if value != "1556897142240" then Quality: 0;
Fai clic su Apply o Check Code. Il compilatore non rileverà errori di sintassi. Sembra che il codice sia a posto. Tuttavia, se provi ad associare il FlexiLayout a qualsiasi Pagina di Sample 1, verrà visualizzato il seguente messaggio di errore: “Error in element “MainGroup.IdentityNumber”, Advanced relations section: Attempt to access undefined hypothesis MainGroup.IdentityNumber.” La causa dell’errore è la seguente. Il programma trova un’ipotesi per l’elemento codice a barre. Quindi confronta il valore del codice a barre con il valore specificato nel codice. Se i valori sono diversi, l’istruzione Quality: 0; azzera il valore dell’ipotesi. Viene quindi generata un’ipotesi nulla per questo elemento, sulla quale il programma verifica anche la condizione value != "1556897142240". Poiché l’accesso al valore di un’ipotesi nulla non è consentito (non dispone di questa proprietà), il programma restituisce il messaggio di errore “…undefined hypothesis…” Pertanto, è necessario modificare il codice come segue:
if not IsNull then {
if value != "1556897142240" then Quality: 0;
}
Il codice sopra funziona solo per un elemento obbligatorio. Per un elemento facoltativo, il codice va modificato come segue:
if not IsNull then {
if value != "1556897142240" then Quality: 0;
}
else {Quality: 0;}
Altrimenti, verrà azzerata a 0 solo la qualità dell’ipotesi reale. Questo farà sì che il programma generi un’ipotesi nulla, per la quale l’“if not IsNull” non verrà eseguito. Pertanto, la qualità dell’ipotesi finale (nulla) resterà quella specificata nelle proprietà dell’elemento (0,97 se è stato mantenuto il valore predefinito) e il programma continuerà l’abbinamento del FlexiLayout, anche senza l’elemento in questione. Se aggiungi else {Quality: 0;} al codice, l’istruzione verrà eseguita per tutte le ipotesi (inclusa l’ipotesi nulla) e l’abbinamento del FlexiLayout verrà interrotto, perché l’intera catena di ipotesi verrà anch’essa azzerata a 0 in corrispondenza di questo elemento.

Confronto tra i metodi Region Region() e Region SimplifiedRegion()

I metodi Region Region() e Region SimplifiedRegion() consentono di ottenere la regione di un elemento, ma Region Region() restituisce la regione esatta, mentre Region SimplifiedRegion() restituisce il Rectangle creato in base alle coordinate del bordo.