Propiedades comunes de las hipótesis para todos los elementos de FlexiLayout: IsNull, Region, FuzzyRect, límites y métodos de página, con un ejemplo práctico de hipótesis nula.
Una hipótesis para un elemento puede encontrarse o no. Por regla general, una hipótesis encontrada se formula sobre la base de uno o varios objetos de imagen o sus fragmentos (una excepción es el elemento espacio en blanco, que puede no contener ningún objeto de imagen en absoluto).Una hipótesis encontrada para un elemento simple siempre es una región continua. Las hipótesis para los elementos espacio en blanco, separador y código de barras siempre son rectángulos únicos.Si una hipótesis se formula sobre la base de un conjunto de objetos de imagen detectados, p. ej., una hipótesis para un elemento párrafo, la región de la hipótesis se construirá a partir del array de rectángulos de los objetos detectados. La región creada de esta manera puede obtenerse 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 sobre la base 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 mejorar la visualización. Una región creada de esta manera puede obtenerse mediante el método SimplifiedRegion de la hipótesis. Los métodos Region y SimplifiedRegion pueden utilizarse tanto en el campo Relaciones avanzadas de prebúsqueda de la pestaña Avanzado (al describir el área de búsqueda del elemento) como en el campo Expresión de región 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 una hipótesis no encontrada en la imagen, 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 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.El acceso 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 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 el campo Relaciones avanzadas de posbúsqueda, solo puede usar el nombre de la propiedad.Se accede a las hipótesis y sus propiedades en modo de solo lectura. Se puede acceder a las hipótesis de los elementos en los campos Relaciones avanzadas de prebúsqueda y Relaciones avanzadas de posbúsqueda de la pestaña Avanzado del cuadro de diálogo Propiedades del elemento, así como en el campo Expresión de región del cuadro de diálogo Propiedades del bloque. En Relaciones avanzadas de prebúsqueda, puede acceder a las hipótesis generadas (y a sus propiedades) de todos los elementos ubicados por encima del elemento actual en el árbol de FlexiLayout. En Relaciones avanzadas de posbúsqueda, puede acceder a las hipótesis generadas de los elementos ubicados por encima del elemento actual en el árbol de FlexiLayout y a la hipótesis del propio elemento actual. En Expresión de región, puede acceder a las hipótesis (y a sus propiedades) de todos los elementos.La tabla siguiente enumera las propiedades de las hipótesis para todos los tipos de elemento.
Lógica IsNull()
Indica si esta es una hipótesis nula (si el elemento se ha detectado, la propiedad IsNull de la hipótesis es True).
Lógica IsFound()
Indica si la hipótesis no es nula (si el elemento no se ha detectado, la propiedad IsNull de la hipótesis es False). Equivale a IsNull.
XInterval Left()
El límite izquierdo de la hipótesis, intervalo horizontal en coordenadas globales.
YInterval top()
El límite superior de la hipótesis, intervalo vertical en coordenadas globales.
XInterval Right()
El límite derecho de la hipótesis, intervalo horizontal en coordenadas globales.
YInterval Bottom()
El límite inferior de la hipótesis, intervalo vertical en coordenadas globales.
XInterval XCenter()
La coordenada X del centro de las hipótesis, intervalo horizontal en coordenadas globales.
YInterval YCenter()
La coordenada Y del centro de las hipótesis, intervalo vertical en coordenadas globales.
DistInterval Width()
La anchura de la hipótesis en coordenadas globales, intervalo de distancias.
DistInterval Height()
La altura de la hipótesis en coordenadas globales, intervalo 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 exterior 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 grupo.
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 grupo.
ImageObjectSet Set()
Los objetos de imagen que forman parte de la hipótesis.
ImageObjectSet ExcludeSet()
Los objetos de imagen que se encuentran en la región excluida del área de búsqueda por métodos del tipo Exclude.
RectArray Rects()
El array de rectángulos incluidos en la hipótesis. Para la mayoría de los elementos, coincide con el array de rectángulos que encierran los objetos detectados. Para los elementos espacio en blanco y elemento de región, no
hay objetos disponibles.
Int HypothesesCount()
El número de hipótesis que pueden formularse para el elemento en el área de búsqueda.
¡Importante! La función solo puede utilizarse 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 utiliza
esta función para un documento de varias páginas, el emparejamiento de un FlexiLayout devolverá un error.
PageInterval Pages()
El intervalo de páginas donde 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.
Ejemplo: acceso a las propiedades de una hipótesis
Antes de acceder a las propiedades de una hipótesis para un elemento simple o elemento de grupo, asegúrese de que la hipótesis a la que va a acceder no sea una hipótesis nula (llamando a su propiedad IsNull). Acceder a una propiedad de una hipótesis nula (que corresponde a un elemento no detectado) provocará un error. Considere un ejemplo que utiliza el proyecto de Sample 1, que se puede encontrar en el CD-ROM del programa.Suponga que hay un identificador en su documento en forma de código de barras y desea que su FlexiLayout solo coincida con aquellos documentos en los que el valor del código de barras sea 1556897142240. Para obtener el resultado deseado, haga lo siguiente. En la sección Relaciones avanzadas de posbúsqueda del elemento que describe las propiedades y restricciones de búsqueda del código de barras (el elemento IdentityNumber de Sample 1), escriba el siguiente código:ifvalue != “1556897142240” then Quality: 0;Haga clic en Apply o Check. El compilador no detectará ningún error de sintaxis. Parece que el código es correcto. Sin embargo, si intenta 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, el código Quality: 0; restablecerá el valor de la hipótesis a 0. Entonces se genera una hipótesis nula para este elemento, para la cual el programa también comprueba la condición value != “1556897142240”. Como no se permite acceder al valor de una hipótesis nula (no tiene esta propiedad), el programa muestra un mensaje de error: “…undefined hypothesis…”Por lo tanto, debe ajustar el código de la siguiente manera:if not IsNull then {
ifvalue != “1556897142240” then Quality: 0;
}Nota. El código anterior solo funcionará para un elemento obligatorio. En el caso de un elemento opcional, el código debe ajustarse de la siguiente manera:if not IsNull then {
ifvalue != “1556897142240” then Quality: 0;
}
else {Quality: 0;}De lo contrario, solo se restablecerá a 0 la calidad de la hipótesis real. Esto hará que el programa genere una hipótesis nula, para la cual no se ejecutará “if not IsNull”. Por lo tanto, la calidad de la hipótesis final (nula) seguirá siendo la misma que la especificada en las propiedades del elemento (0.97 si se mantuvo el valor predeterminado) y el programa seguirá 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.
Comparación de los métodos Region Region() y Region SimplifiedRegion()
Los métodos Region Region() y Region SimplifiedRegion() le 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 rectángulo creado a partir de las coordenadas de los bordes: