# Script

Ejecuta el código fuente JavaScript definido por el usuario y que se ha creado y editado utilizando el Cuadro de diálogo Edit Script. La función Script contiene el código fuente JavaScript (que puede guardarse y almacenarse en un archivo .js) que define su comportamiento. El código fuente define únicamente el comportamiento de la función Script en particular. Por ejemplo, si hay varias funciones Script en una tarea, una variable definida en una función Script solo está definida para esa función Script en particular y no para todas las funciones Script en la tarea.

Nota:

- Los siguientes límites son válidos para la memoria asignada por las funciones Script y los módulos de script externos utilizados en una tarea determinada:

  - El límite para el número máximo de bytes asignados a la memoria de scripts es de 4 MB.
  - El límite para el número máximo de bytes asignados a la pila es de 64 kB.
- Para evitar una asignación innecesaria de memoria, conviene eliminar todas las funciones no utilizadas del script (como las de los scripts de ejemplo predefinidos, si estos no se utilizan). Por ejemplo, un script con una función de extracción de muestras no utilizada que genera un objeto de cadena y gráficos, ya que consume memoria y ciclos de CPU.

- La funcionalidad de una función Script que se ha sido declarada en una celda para deshabilitar su ejecución, difiere de otras funciones de la hoja de cálculo. Por lo general, otras funciones de la hoja de cálculo conservan el último valor grabado tras la ejecución de la función. Cualquier función que haga referencia a la función deshabilitada devolverá el último valor que se ha registrado. Sin embargo, debido a que una función Script requiere que se ejecute su método interno de ejecución, cuando se carga una función Script deshabilitada, esta visualiza una estructura de datos Script, pero cualquier función Get que hace referencia a ella devolverá #ERR, ya que la función Get espera un valor devuelto que la función Script deshabilitada no devuelve.

## Script Entradas

A diferencia de las funciones tradicionales de hoja de cálculo del In-Sight, la función Script puede aceptar una variedad de diferentes argumentos de entrada (de 1 a 100). Cada argumento debe ser una referencia de celda, un valor literal o una expresión que proporciona uno de los siguientes tipos de valor:

- Un número
- Una cadena
- Una imagen
- Un evento
- Un objeto de forma
- Una estructura de datos binaria
- Una estructura de datos como la de Blob, Edge, Histograma, o Patterns Vision Data Access functions
- Una estructura de datos Object o Array (devuelta por otra función Script)

Nota:

- Si se especifica como argumento un intervalo de celdas, este se extenderá a las referencias de las distintas celdas contenidas en el intervalo y consumirá por consiguiente tantos argumentos como los que hay en el intervalo de celdas.
- Cuando un argumento de una función Script consiste en una referencia a otra celda que devuelve una estructura de datos Blobs, Edges, Histogram, o Pattern, el objeto que pasa a la función Script solo es utilizable hasta que se devuelva el método de ejecución. La función Script puede devolver directamente este objeto y este podrá ser utilizado como resultado de la celda que contiene la función Script. Sin embargo, si el script guarda internamente este objeto (por ejemplo, utilizándolo en su método de trazado), el objeto no será utilizable una vez el método de ejecución haya devuelto su resultado y una llamada a uno de sus métodos dará error. Esto ocurre también cuando un script devuelve una estructura de resultados, como una propiedad de un objeto de script devuelta por el método de ejecución. Es decir, ninguna de estas propiedades será utilizable por una función Get u otra función Script debido a que los objetos subyacentes ya no son válidos.

- Cuando se escribe un script, incluir un código de validación de los argumentos de entrada puede ayudar a reducir errores, como se muestra en el siguiente ejemplo:

                              function Tool()
      {
      }

      module.exports = Tool;

      function isNumber(n) {
         if (n === undefined || n == null || isNaN(parseFloat(n)) || !isFinite(n))
            return false;
         return true;
      }

      Tool.prototype.run = function(x, y){
         if (!isNumber(x) || !isNumber(y))
            throw new Error("Usage: Requires 2 numeric arguments");
         return +x + +y;
      }

Nota: Para acceder en un script a los parámetros de anchura o altura de un objeto de la región, utilice .w y .h.

>     Script.prototype.run = function (image, myRegion) {

> >     return {
> >         x: myRegion.x,
> >         y: myRegion.y,
> >         //width: myRegion.width,
> >         //height: myRegion.height,
> >         width: myRegion.w,
> >         height: myRegion.h,
> >         angle: myRegion.angle,
> >         curve: myRegion.curve
> >     };

>     }

## Script Salidas

Devuelve | La función puede devolver un valor de cualquiera de los siguientes tipos: Un número verdadero (1) o falso (0) Una cadena Una estructura de datos binaria Una estructura de datos Blob, Edge, Histogram, o Patterns Un objeto de forma Un objeto Una imagen Un valor nulo, no definido o sin instrucción de retorno (que se trata como si fuese un objeto vacío). La función devolverá #ERR en cualquiera de los siguientes casos: Cuando el código fuente no contiene un método de ejecución. Cuando alguno de los valores de los argumentos no es del tipo requerido. Cuando el constructor genera una excepción. Nota: La función GetErrorString puede utilizarse para recuperar el mensaje de excepción, si se ha previsto una excepción en el código fuente. Todas las excepciones devuelven el mismo código de error (20000005).

## Script Vision Data Access functions

La función Get se utiliza para acceder a propiedades de objetos devueltas por una función Script.