Author Topic: JS: intervalo del NumericCtrl, y guardar valores de config  (Read 8681 times)

Offline David Serrano

  • PTeam Member
  • PixInsight Guru
  • ****
  • Posts: 503
JS: intervalo del NumericCtrl, y guardar valores de config
« on: 2007 September 10 02:47:45 »
[La longitud máxima permitida para el subject es un tanto limitada...]

Buenas. He aquí un par de preguntillas para empezar la semana con alegría :^P.

- ¿Se puede ajustar el intervalo entre dos valores de NumericControl cuando se arrastra el deslizador? Sé que se puede teclear el valor a mano para un ajuste suficientemente fino del valor de que se trate, pero pienso que ese "fino" debería ser algo que decide el programador, no PixInsight. He probado myNC.stepSize, myNC.slider.stepSize y quizá alguna cosa más (tanto con .slider como sin él), sin éxito.

- ¿Existe la posibilidad de almacenar valores entre sucesivas ejecuciones de un script? Por ejemplo, registrando lo que quiero almacenar en PixInsight y que el programa lo almacene en su configuración. Como si PixInsight fuera una especie de registro del güindons que las aplicaciones manejan a través de un API.

Gracias.
--
 David Serrano

Offline Juan Conejero

  • PTeam Member
  • PixInsight Jedi Grand Master
  • ********
  • Posts: 7111
    • http://pixinsight.com/
JS: intervalo del NumericCtrl, y guardar valores de config
« Reply #1 on: 2007 September 11 00:36:00 »
Quote
[La longitud máxima permitida para el subject es un tanto limitada...]


Y tanto, es un asco. Pero por alguna impresentable razón no hay ninguna opción de configuración en la interfaz administrativa (que yo sepa/vea). Hay que meter el bisturí...

Quote
¿Se puede ajustar el intervalo entre dos valores de NumericControl cuando se arrastra el deslizador? Sé que se puede teclear el valor a mano para un ajuste suficientemente fino del valor de que se trate, pero pienso que ese "fino" debería ser algo que decide el programador, no PixInsight.


Me temo que no es posible. El problema es que el Slider tiene que repartir el rango numérico real que se le asigna a NumericControl en un rango entero, y a su vez este rango entero ha de ser divisible por el número de píxeles disponibles en el Slider, idealmente, o al menos debe haber una superabundancia de píxeles suficiente para que NumericControl proporcione incrementos razonables al mover el thumb del Slider, o sea cosas como 0.01, 0.02, 0.03... en vez de 0.01, 0.0205, 0.0310, ...

Todo esto hace que realmente sea complicado tener un NumericControl agradable de usar (con intervalos uniformes y razonables) en el espacio que habitualmente hay en un diálogo por ejemplo.

Así que tienes que proceder de esta forma:

1. Definir el rango real que debe cubrir NumericControl. Éste es el rango del parámetro que representa el control en la interfaz. Aquí hay que ser "pillos". O sea, no definas algo como [0.01,1.05] a no ser que quieras tener muchos problemas. Un intervalo razonable normalmente empieza por un entero y termina en un entero, o por valores divisibles por 10, 5 ó 2, etc., o corresponde a un intervalo que se puede trasladar exactamente a un intervalo entero; e.g. [0,1], [-10.5,+10.5], [0.1,0.9], etc.

2. Definir el rango entero de NumericControl.slider. Para tener intervalos aceptables, hay que hacer que este rango entero reparta el rango real anterior en incrementos uniformes a lo largo de la longitud en píxeles del slider, con lo cual llegamos al siguiente punto:

3. Forzar un tamaño mínimo del slider para que "quepa" holgadamente el intervalo impuesto en el punto 2.

Un ejemplo, tomado de un script al azar:

Code: [Select]
  this.cutOff_NumericControl = new NumericControl( this );
   this.cutOff_NumericControl.label.text = "Low-frequency cutoff:";
   this.cutOff_NumericControl.slider.setRange( 0, 100 ); // Punto 2
   this.cutOff_NumericControl.slider.minWidth = 150; // Punto 3
   this.cutOff_NumericControl.setRange( 0.0, 0.5 ); // Punto 1
   this.cutOff_NumericControl.setPrecision( 3 );


Con el código anterior tenemos que el NumericControl proporciona la siguiente secuencia al mover el slider: 0.000, 0.010, 0.020, ... Si quisiéramos esta otra: 0.000, 0.005, 0.010, ..., tendríamos que forzar una longitud mínima en píxeles mucho mayor y un rango dos veces mayor en slider:

Code: [Select]
  this.cutOff_NumericControl = new NumericControl( this );
   this.cutOff_NumericControl.label.text = "Low-frequency cutoff:";
   this.cutOff_NumericControl.slider.setRange( 0, 200 ); // Punto 2
   this.cutOff_NumericControl.slider.minWidth = 250; // Punto 3
   this.cutOff_NumericControl.setRange( 0.0, 0.5 ); // Punto 1
   this.cutOff_NumericControl.setPrecision( 3 );


Nota importante: toda esta explicación es estrictamente válida para programación en PCL (clases pcl::NumericControl y pcl::Slider).

Quote
¿Existe la posibilidad de almacenar valores entre sucesivas ejecuciones de un script? Por ejemplo, registrando lo que quiero almacenar en PixInsight y que el programa lo almacene en su configuración. Como si PixInsight fuera una especie de registro del güindons que las aplicaciones manejan a través de un API.


Por ser la primera vez, te pasaré lo de relacionar PixInsight y windoze con un operador que no sea "estrictamente distinto de". La próxima vez saldrá una mano mágica de tu monitor y te agarrará el cuello :mrgreen:

Buen punto. La próxima versión llevará un objeto JavaScript llamado Settings...
Juan Conejero
PixInsight Development Team
http://pixinsight.com/

Offline David Serrano

  • PTeam Member
  • PixInsight Guru
  • ****
  • Posts: 503
JS: intervalo del NumericCtrl, y guardar valores de config
« Reply #2 on: 2007 September 11 15:46:27 »
Quote from: "Juan Conejero"
no definas algo como [0.01,1.05] a no ser que quieras tener muchos problemas


Pues lo estoy viendo bastante fácil. Tengo un [0.1, 10] y rápidamente he visto que el valor de setRange viene siendo algo como (10 - 0.1) * 10^x, siendo x el menor número posible para que el resultado sea entero. En mi caso, x=1 y el resultado, 99. O también 99*2 == 198 para tener intervalos de 0.1/2 == 0.05.

Creo que el problema es que a primera vista no es obvio lo que hacen .setRange y .slider.setRange. Ahora con tu explicación ya queda más claro. Muchas gracias!


Quote from: "Juan Conejero"
Nota importante: toda esta explicación es estrictamente válida para programación en PCL (clases pcl::NumericControl y pcl::Slider).


No entiendo. ¿Te refieres a que puede no ser aplicable en js? No he tenido ningún inconveniente al probarlo así que me extraña que los tiros vengan por ahí...
--
 David Serrano

Offline Juan Conejero

  • PTeam Member
  • PixInsight Jedi Grand Master
  • ********
  • Posts: 7111
    • http://pixinsight.com/
JS: intervalo del NumericCtrl, y guardar valores de config
« Reply #3 on: 2007 September 12 01:22:59 »
Quote
Quote
Nota importante: toda esta explicación es estrictamente válida para programación en PCL (clases pcl::NumericControl y pcl::Slider).


No entiendo. ¿Te refieres a que puede no ser aplicable en js?


Me faltó un "también" y me sobró un "estrictamente". La frase correcta sería al go así:

Nota importante: toda esta explicación es válida tanto para programación en JavaScript (PJSR) como en C++ (PCL, clases pcl::NumericControl y pcl::Slider) sobre PI.

Perdón por la innecesaria intranquilización  :wink:
Juan Conejero
PixInsight Development Team
http://pixinsight.com/