Cómo crear secuencias de comandos del tamaño del marco para la ventana existente de Graph Builder¿Hay alguna manera de establecer el tamaño del marco para una ventana de Graph Builder existente con JSL?
Por ejemplo, supongamos que tengo una ventana de Graph Builder abierta y me gustaría ejecutar un archivo JSL que establecerá el tamaño de cuadro general del gráfico en esa ventana en 800x600. ¿Es eso posible sin tener la referencia al objeto GB en el script JSL?
Automatización y secuencias de comandosRe: Cómo programar el tamaño del marco para la ventana del Creador de gráficos existenteLo más fácil sería si puede obtener la referencia al Graph Builder. Puede, por ejemplo, usar << Obtener objeto programable después de tener la referencia al cuadro de esquema
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
);
gb = (nw[OutlineBox("Graph Builder")] << Get Scriptable Object);
fb = Report(gb)[FrameBox(1)];
fb << Frame Size(800,200);
O, en algunos casos, es posible que pueda encontrar framebox directamente desde la ventana
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
);
nw[FrameBox(1)] << Frame Size(800,200);
Y finalmente XPath
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
);
(nw << XPath("//FrameBox")) << Frame Size(800,200);
Puede obtener una referencia a la ventana usando Current Window(), pero es un poco molesto usarlo desde la ventana del script y funciona mucho mejor desde la barra de herramientas/acceso directo/complemento.
Re: Cómo programar el tamaño del marco para la ventana del Creador de gráficos existenteAquí hay un enfoque alternativo. Puede obtener una lista de todas las ventanas actuales. Están ordenados por apariencia, por lo que si acaba de abrir Graph Builder, será el último elemento. De lo contrario, puede inspeccionar la lista de ventanas para encontrar el GB que desea.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
);
win = Get Window List();
frame = (win[N Items(win)] << XPath( "//FrameBox" ))[1];
frame << Select << Frame Size( 800, 600 );
Su secuencia de comandos podría agregarse como un elemento de menú o barra de herramientas, o convertirse en un complemento.
Re: Cómo programar el tamaño del marco para la ventana del Creador de gráficos existenteMe gusta esta respuesta, pero se produce un error cuando elimino las líneas "dt =..." y "obj = ..." y coloco "//!" en la parte superior y haga doble clic en él.Aquí está el error:
Subscript Range in access or evaluation of '(win[N Items(win)] << XPath("//FrameBox"))[ /*###*/1]' , (win[N Items( win )] << XPath( "//FrameBox" ))[/*###*/1]Re: Cómo programar el tamaño del marco para la ventana del Creador de gráficos existentePara @Mark_Bailey El script de para funcionar como está escrito, el cuadro del gráfico tendría que ser la última ventana abierta, supongo que al iniciarlo desde un script separado, ese ya no es el caso.Puede modificarlo de esta manera para seleccionar solo las ventanas del generador de gráficos, querrá verificar que al menos una ventana esté abierta.
Names Default to Here( 1 );
//Find graph builder windows
graphs = filter each({w}, win,
if(
length(w << XPath("//OwnerBox[@helpKey='Graph Builder']")) > 0 ,
1,
0
)
);
//Choose the last one
frame = (graphs[N Items(graphs)] << XPath( "//FrameBox" ))[1];
//Modify the frame
frame << Select << Frame Size( 800, 600 );
Tenga en cuenta que hago algo similar a esto cuando busco ventanas de gráficos 3D en este complemento: Herramientas de gráficos 3D , y allí dejo que el usuario elija qué ventanas modificar.El código está encendido GitHub .
Re: Cómo programar el tamaño del marco para la ventana del Creador de gráficos existenteImpresionante.
Tenga en cuenta que si "Ajustar a la ventana" no está "desactivado", esos tamaños de marco no siempre funcionan.Intenté durante 30 minutos adaptar este código para modificar también la configuración "Ajustar a la ventana" sin suerte.¿Alguna idea de cómo hacer eso?
Y, curiosamente, si la ventana Graph Builder tiene varios gráficos, por ejemplo, con una variable en el campo Ajustar, el Tamaño de marco modifica los marcos de gráfico individuales en lugar de toda el área de gráfico.¿Es posible cambiar el tamaño de toda el área de la parcela a un tamaño determinado en lugar de las parcelas individuales?
Por último, ¿dónde aprendiste a codificar así?Como codificador de Python de 10 años (y codificador de Perl de 20 años), diré que JSL es bastante difícil de entender.Incluso después de leer el índice de secuencias de comandos en esos elementos (XPath, Select...) Todavía no estoy seguro de lo que significan aquí...
¡Gracias!
Re: Cómo programar el tamaño del marco para la ventana del Creador de gráficos existenteSolo adivinando aquí... Ajustar a la ventana debe enviarse a Graph Builder, no al cuadro de marco (<< Get Scriptable Object podría ayudar aquí). Si se usa Wrap (o Group X), tal vez deba calcular el tamaño en función de cuántos grupos hay. ¿O tal vez podría manipular el tamaño de la ventana del generador de gráficos?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Variables(X(:Sex), Y(:Height), Group X(:Age)),
Elements(Box Plot(X, Y))
);
wait(0);
win = Get Window List();
//Find graph builder windows
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
last_gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
last_gb << Fit to Window("On");
last_gb << Size(800,600); // instead of manipulating framebox
//frame = Report(last_gb)[FrameBox(1)];
//frame << Frame Size(800, 600);
XPath no es cosa de JMP XPath - Wikipedia , pero es una manera fácil de acceder a diferentes objetos en los informes. El uso de << Obtener XML le ayuda a ver lo que está XPathing
Report(gb) << Get Xml;
Re: Cómo programar el tamaño del marco para la ventana del Creador de gráficos existente¡Eso lo hizo!Gracias, Jarmo, ya todos los que respondieron!!