Ratonera y Biviariate Frame Box<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo un análisis que escupe una trama bivariada. Cuando agregué alguna funcionalidad adicional a través de una operación de ratonera, no puedo seleccionar puntos y no tengo idea de por qué. ¿Hay alguna forma de evitar esto o, al menos, volver a agregar esta funcionalidad?
¿Cómo puedo arreglar esto?
dt = Abrir ("$ SAMPLE_DATA / Big Class.jmp");
nw = ventana nueva ("Prueba MouseTrap", Vlb = vlistbox ());
vlb << Añadir (biv = dt << Bivariada (Y (: altura), X (: peso));
rbiv = biv << reporte;
rbiv [cuadro de marco (1)] << Agregar guión de gráficos (Ratonera (imprimir ("prueba"), imprimir ("prueba de prueba")));
biv2 = dt << Bivariada (Y (: altura), X (: peso));
Re: Ratonera y Biviariate Frame BoxGracias, gracias, gracias. Esto me ha vuelto loca.
Y estoy bastante seguro de que te refieres a "\! N". Su C # / C ++ se está mostrando.
Re: Ratonera y Biviariate Frame BoxEntonces, # 4 entonces. Para cualquiera que lea a lo largo de ... este script usa una función llamada "MouseTrap" en un script de gráficos adjunto al gráfico superior. Cuando arrastra con el mouse sobre el gráfico superior, la función MouseTrap captura los movimientos del mouse, impidiendo la selección normal de puntos en un "rectángulo de goma". Para emular el comportamiento de selección, MouseTrap mantiene las variables de estado "scripton" y "startx ... othery". msharp creó scripton para saber si ejecutar o no un script que demore demasiado en ejecutarse en cada punto adicional agregado al rectángulo. MouseTrap también usa scripton para realizar un seguimiento de si se acaba de presionar el botón. Si es así, la X, Y se captura en startx, starty, de lo contrario en otherx, othery. Y si no es la primera vez, MouseTrap usa startx ... de otra manera en una declaración where para seleccionar realmente las filas en la tabla. Las funciones Mín y Máx en la cuenta del comando SelectWhere para dibujar el rectángulo de selección de arriba a abajo, de abajo a arriba y de izquierda a derecha.
MakeRowStateHandler probablemente también debería hacer la misma evaluación que hace MouseTrap; Aquí solo imprime las filas que cambiaron. Hay un par de otras declaraciones impresas en este código; Mira el registro para tener una idea de lo que está pasando.
//Startdt = Open( "$SAMPLE_DATA/Big Class.jmp" );script = "\[New Window("Test", Text Box("Hello"));]\";scripton = 1; // this is a better way to deal with row state changes (and not needed for the rest of the example) rs = dt<startx = .;starty = .;otherx = .;othery = .;nw = New Window( "MouseTrap Test", Vlb = V List Box() );vlb << Append( biv = dt << Bivariate( Y( :height ), X( :weight ) ); rbiv = biv << report; rbiv[frame box( 1 )] << Add Graphics Script( If( !Is Missing( startx ), Line( {startx, starty}, {otherx, starty}, {otherx, othery}, {startx, othery}, {startx, starty} ) ); Mousetrap( If( scripton, write("down\n"); startx = x; starty = y; , write("move\n"); otherx = x; othery = y; dt << selectwhere( Min( starty, othery ) < :height < Max( starty, othery ) & Min( startx, otherx ) < :weight < Max( startx, otherx ) ); ); scripton = 0; , write("up\n"); scripton = 1; startx = .; // toggle off Eval( Parse( script ) ); ); ); biv2 = dt << Bivariate( Y( :height ), X( :weight ) ););Re: Ratonera y Biviariate Frame BoxTodas estas son declaraciones OR. Necesito una declaración AND ¿Cómo puedo seleccionar puntos Y ejecutar el script? Todo lo que listó selecciona puntos O ejecuta el script.
Un poco más de información, tengo un script que se ejecuta cada vez que se selecciona un punto. Al arrastrar y seleccionar varios puntos, si el usuario es lento, el script se ejecutará varias veces. Quiero evitar que el script se ejecute hasta que el usuario suelte el mouse. Vea el ejemplo a continuación.
//Comienzo
dt = Abrir ("$ SAMPLE_DATA / Big Class.jmp");
script = "\ [Nueva ventana (" Prueba ", Cuadro de texto (" Hola "));] \";
scripton = 1;
// Script seleccionado
dt << Nueva columna ("Script seleccionado",
numérico,
Fórmula(
Si (seleccionado (estado de fila ()) y scripton == 1,
Eval (Parse (script))
)
)
);
Columna (dt, "Script seleccionado") << Ocultar;
//¿¡¿¡¿FIJAR?!?!?
nw = ventana nueva ("Prueba MouseTrap", Vlb = vlistbox ());
vlb << Añadir (biv = dt << Bivariada (Y (: altura), X (: peso));
rbiv = biv << reporte;
rbiv [cuadro de marco (1)] << Agregar guión de gráficos (Ratonera (scripton = 0, scripton = 1));
biv2 = dt << Bivariada (Y (: altura), X (: peso));
)
Re: Ratonera y Biviariate Frame Boxtres maneras:
1) use la herramienta de pincel (presione
con el script actual (intente mantener presionada la tecla Alt mientras cepilla para cambiar el tamaño del pincel). Cuando la herramienta de pincel está activa, la ratonera no lo está.
2) modifique su script para colocar el script gráfico antes en la lista de dibujos
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );nw = new Window("MouseTrap Test", Vlb = vlistbox());vlb << Append(biv = dt << Bivariate( Y( :height ), X( :weight ) );rbiv = biv << report;rbiv[frame box(1)] << Add Graphics Script( 1, Mousetrap(print("test"), print("test test")));biv2 = dt << Bivariate( Y( :height ), X( :weight ) );)La lógica es: el guión que dibuja primero está pintado por guiones de gráficos subsiguientes. Por lo tanto, las pruebas de impacto del mouse se realizan en el orden opuesto: si se dibujó por última vez, es más visible y debería ser más fácil golpear con el mouse. Ahora, si hace clic en un punto, el marcador seg tomará el mouse (y puede arrastrar un rectángulo de selección). Si hace clic fuera de un punto, la secuencia de comandos de la trampa para ratones toma el clic. No puede obtener la selección de rectángulo si hace clic en un punto. Puede experimentar utilizando el botón derecho del mouse-> Personalizar y mover los scripts hacia arriba y hacia abajo.

(Guardé el guión y miré para ver cómo hacer el "1" arriba).
3) Utilice la manija en lugar de la ratonera. A menos que realmente necesites la trampa para ratones para capturar toda la actividad del mouse. El asa solo captura los clics en el asa cuadrada.
4) Supongo que podría volver a implementar la lógica de selección en la trampa para ratones si realmente tuviera que hacerlo. 1-3 parecen mucho mejor sin embargo.