Saltar al contenido principal
Una hipótesis para un elemento puede encontrarse o no encontrarse. Una hipótesis encontrada, por lo general, se formula a partir de uno o varios objetos de imagen o de sus fragmentos (la excepción es el elemento White Gap, que puede no contener objetos de imagen). Una hipótesis encontrada para un elemento simple es siempre una región continua. Las hipótesis para los elementos White Gap, Separator y Barcode son siempre rectángulos únicos. Si una hipótesis se formula a partir de un conjunto de objetos de imagen detectados, por ejemplo, una hipótesis para un elemento Paragraph, la región de la hipótesis se construirá a partir de la matriz de rectángulos de los objetos detectados. La región creada de este modo se puede obtener mediante el método Region de la hipótesis. Al mostrar la región de la hipótesis en la imagen o al crear un bloque a partir de la hipótesis, los límites de la región no siguen exactamente los límites de cada rectángulo. En su lugar, los límites del área de búsqueda se suavizan para una mejor visualización. Una región creada de este modo se puede obtener mediante el método SimplifiedRegion de la hipótesis. Los métodos Region y SimplifiedRegion se pueden usar tanto en la sección Search Conditions (al describir el área de búsqueda del elemento) como al describir las propiedades del bloque y usar los elementos ya encontrados. Si no se encontró una hipótesis, esta coincide con el rectángulo difuso de su área de búsqueda. Al mostrar en la imagen una hipótesis no encontrada, el programa dibujará el rectángulo externo del rectángulo difuso. Los límites Left, top, Right y Bottom de cualquier hipótesis son rangos. Para cada hipótesis encontrada, el rango se degenera en un punto, es decir, Left.Start = Left.End, top.Start = top.End, etc. Para una hipótesis no encontrada, los rangos de los límites coinciden con los rangos de su área de búsqueda. Acceder a las hipótesis generadas y a sus propiedades en el código de los cuadros de diálogo correspondientes de bloques y elementos proporciona herramientas adicionales para configurar el FlexiLayout. Se puede acceder a las hipótesis de los elementos por los nombres de los elementos. Para acceder a una hipótesis del elemento actual en la sección Hypotheses Evaluation, puede usar únicamente el nombre de la propiedad. El acceso a las hipótesis y sus propiedades es de solo lectura. Se puede acceder a las hipótesis de los elementos en las secciones Search Conditions y Hypotheses Evaluation, así como en la sección Code Editor del campo. En Search Conditions, puede acceder a las hipótesis generadas (y sus propiedades) para todos los elementos situados por encima del elemento actual en el árbol de Elements. En Hypotheses Evaluation, puede acceder a las hipótesis generadas para los elementos situados por encima del elemento actual en el árbol de Elements y a la hipótesis del propio elemento actual. En el Code Editor del campo, puede acceder a las hipótesis (y sus propiedades) para todos los elementos. La siguiente tabla enumera las propiedades de las hipótesis para todos los tipos de elemento.
PropiedadDescripción
Logic IsNull()Indica si se trata de una hipótesis nula (si se ha detectado el elemento, la propiedad IsNull de la hipótesis es True).
Logic IsFound()Indica si la hipótesis no es nula (si no se ha detectado el elemento, la propiedad IsNull de la hipótesis es False). Equivalente a IsNull.
XInterval Left()El límite izquierdo de la hipótesis; rango horizontal en coordenadas globales.
YInterval top()El límite superior de la hipótesis; rango vertical en coordenadas globales.
XInterval Right()El límite derecho de la hipótesis; rango horizontal en coordenadas globales.
YInterval Bottom()El límite inferior de la hipótesis; rango vertical en coordenadas globales.
XInterval XCenter()La coordenada X del centro de la hipótesis; rango horizontal en coordenadas globales.
YInterval YCenter()La coordenada Y del centro de la hipótesis; rango vertical en coordenadas globales.
DistInterval Width()El ancho de la hipótesis en coordenadas globales; rango de distancias.
DistInterval Height()La altura de la hipótesis en coordenadas globales; rango de distancias.
FuzzyRect FuzzyRect()Rectángulo difuso de la hipótesis en coordenadas globales.
Rect Rect()El rectángulo que circunscribe la hipótesis en coordenadas globales. Coincide con el rectángulo externo del rectángulo difuso.
Region Region()La región de la hipótesis en coordenadas globales. El método no es compatible con elementos de tipo Group.
Region SimplifiedRegion()La región de la hipótesis en coordenadas globales, simplificada para una mejor representación visual. El método no es compatible con elementos de tipo Group.
ImageObjectSet Set()Los objetos de imagen que forman parte de la hipótesis.
ImageObjectSet ExcludeSet()Los objetos de imagen que están en la región excluida del área de búsqueda por métodos de tipo Exclude.
RectArray Rects()La matriz de rectángulos incluidos en la hipótesis. Para la mayoría de los elementos, coincide con la matriz de rectángulos que delimitan los objetos detectados. En los elementos White Gap y Region no hay objetos disponibles.
Int HypothesesCount()La cantidad de hipótesis que pueden formularse para el elemento en el área de búsqueda. La función solo puede usarse si el número máximo y mínimo de páginas del documento está establecido en 1, es decir, el documento detectado tiene una sola página. Si usa esta función para un documento de varias páginas, la comparación con un FlexiLayout devolverá un error.
PageInterval Pages()El rango de páginas en el que debe encontrarse la hipótesis.
PageArea PageAreaGlobal( Int PageNumber )Devuelve la parte de la hipótesis ubicada en la página indicada, en coordenadas globales.
PageArea PageAreaLocal( Int PageNumber )Devuelve la parte de la hipótesis ubicada en la página indicada, en las coordenadas locales de la página.

Código de ejemplo para invocar las propiedades de una hipótesis

Antes de acceder a las propiedades de una hipótesis para un elemento simple o Group, asegúrese de que la hipótesis a la que va a acceder no sea nula (llame a su propiedad IsNull). Acceder a una propiedad de una hipótesis nula (que corresponde a un elemento no detectado) provocará un error. Suponga que hay un identificador en su documento en forma de código de barras y que desea que su FlexiLayout coincida solo con aquellos documentos cuyo valor de código de barras sea 1556897142240. Haga lo siguiente para obtener el resultado deseado. En la sección Hypotheses Evaluation del elemento que describe las propiedades y restricciones de búsqueda del código de barras, escriba el siguiente código:
if value != "1556897142240" then Quality: 0;
Haz clic en Apply o Check Code. El compilador no detectará errores de sintaxis. Parece que el código está correcto. Sin embargo, si intentas hacer coincidir el FlexiLayout con cualquier Página de Sample 1, se mostrará el siguiente mensaje de error: “Error in element “MainGroup.IdentityNumber”, Advanced relations section: Attempt to access undefined hypothesis MainGroup.IdentityNumber.” La causa del error es la siguiente. El programa encuentra una hipótesis para el elemento de código de barras. Luego compara el valor del código de barras con el valor especificado en el código. Si los valores son diferentes, la instrucción Quality: 0; restablece el valor de la hipótesis a 0. A continuación, se genera una hipótesis nula para este elemento, para la cual el programa también verifica la condición value != "1556897142240". Dado que acceder al valor de una hipótesis nula no está permitido (no tiene esta propiedad), el programa muestra el mensaje de error “…undefined hypothesis…” Por lo tanto, debes ajustar el código de la siguiente manera:
if not IsNull then {
if value != "1556897142240" then Quality: 0;
}
El código anterior funcionará únicamente para un elemento obligatorio. Para un elemento opcional, el código debe ajustarse de la siguiente manera:
if not IsNull then {
if value != "1556897142240" then Quality: 0;
}
else {Quality: 0;}
De lo contrario, solo la calidad de la hipótesis real se restablecerá a 0. Esto hará que el programa genere una hipótesis nula, para la cual no se ejecutará el “if not IsNull”. Por lo tanto, la calidad de la hipótesis final (nula) seguirá siendo la misma que se especificó en las propiedades del elemento (0.97 si se mantuvo el valor predeterminado) y el programa continuará haciendo coincidir el FlexiLayout, incluso sin el elemento indicado. Si agrega else {Quality: 0;} al código, la instrucción se ejecutará para todas las hipótesis (incluida la hipótesis nula) y se detendrá la coincidencia del FlexiLayout, porque la cadena completa de hipótesis también se restablecerá a 0 en este elemento.

Métodos Region Region() y Region SimplifiedRegion() comparados

Los métodos Region Region() y Region SimplifiedRegion() permiten obtener la región de un elemento, pero el método Region Region() obtiene la región exacta, mientras que el método Region SimplifiedRegion() obtiene el Rectangle creado a partir de las coordenadas del contorno.