Hola
En primer lugar, he de decir que me
encanta comprobar que estáis empezando a hacer cosas con las herramientas de desarrollo de PixInsight. Bienvenidos, y tened cuidado conmigo porque os intentaré liar para haceros trabajar todo lo posible. Puedo llegar a ser muy pesado en este sentido; estáis avisados
Hay alguna manera de que un usuario con el raton marque una zona de la imagen y des del script se pueda "coger" esas coordenadas.
No desde un script. El runtime de JavaScript incluido en PixInsight Core no proporciona herramientas para la interacción directa del usuario con las ventanas de imagen y las vistas. Para hacer esto, tenéis básicamente dos caminos:
- Escribir un módulo en C++, utilizando la PCL y las herramientas de desarrollo que ésta incluye. Para hacer lo que queréis, tendríais que escribir una interfaz dinámica, como por ejemplo DynamicCrop (cuyo código fuente completo lo tenéis en la distribución estándar de PCL).
- Utilizar un control especializado dentro de la ventana de diálogo de un script, donde podríais dibujar una imagen seleccionada y permitir que el usuario definiera posiciones y zonas rectangulares mediante el cursor del ratón.
Ambos caminos son igualmente válidos. El primero os permitiría construir un proceso con vida propia dentro del universo de PixInsight, pero la cantidad de trabajo requerida es mayor y supone un esfuerzo extra si es vuestro primer módulo, al tratarse de un proceso dinámico. Mi recomendación es que no se empiece escribiendo un proceso dinámico, sino uno estático (sin interacción con el usuario en las ventanas de imagen).
La segunda opción es perfectamente realizable y puede llegar a ser tremendamente eficiente. El objeto ScrollBox de JavaScript os permite construir una vista personalizada de cualquier imagen, incluyendo una imagen perteneciente a una vista (View) en una ventana (ImageWindow). ScrollBox.viewport os proporciona un
canvas navegable (mediante barras de scroll) donde podéis dibujar cualquier cosa reimplementando el método Control.onPaint.
Resumiendo y estructurando la cosa, tenemos los siguientes elementos de interés:
ScrollBoxEs un control especializado para contener a otro control (llamado
viewport) que puede ser navegable mediante barras de desplazamiento (scroll bars). Es relativamente sencillo implementar navegación mediante
click & drag con el ratón, así como la posibilidad de hacer vistas ampliadas (zoom arbitrario).
ScrollBox.viewportEl viewport es un objeto de tipo Control. En él se puede dibujar e interactuar con el usuario.
Control.onMouseMove
Control.onMousePress
Control.onMouseRelease
Control.onMouseDoubleClickEstos gestores de eventos (event handlers) os permiten implementar una completa interacción del usuario con ScrollBox.viewport.
Control.onPaintEste gestor de eventos es llamado automáticamente cada vez que se necesita redibujar el control, o una parte del mismo. Reimplementarlo es muy fácil y os permite dibujar cualquier imagen.
GraphicsEste objeto os proporciona todo lo que necesitéis para dibujar, incluyendo por supuesto imágenes de todo tipo y gráficos vectoriales. Lo podéis usar libremente dentro de Control.onPaint.
Espero haberos orientado un poco en la dirección correcta. Aquí estoy para ayudaros en lo que podáis necesitar. Ánimo que el proyecto es muy interesante.