Come eseguire lo script delle dimensioni del frame per la finestra esistente di Graph BuilderC'è un modo per impostare la dimensione del frame per una finestra esistente di Graph Builder con JSL?
Ad esempio, supponiamo di avere una finestra di Graph Builder aperta e vorrei eseguire un file JSL che imposterà la dimensione complessiva del frame del grafico in quella finestra su 800x600. È possibile senza avere il riferimento all'oggetto GB nello script JSL?
Automazione e scriptingRi: Come scrivere la dimensione del frame per la finestra esistente di Graph BuilderLa cosa più semplice sarebbe se riuscissi a ottenere il riferimento al Costruttore di grafici. Ad esempio, puoi utilizzare <
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 in alcuni casi potresti essere in grado di trovare framebox direttamente da window
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);
E infine 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);
Puoi ottenere un riferimento alla finestra usando Current Window (), ma è un po 'fastidioso da usare dalla finestra dello script e funziona molto meglio dalla barra degli strumenti/scorciatoia/componente aggiuntivo.
Ri: Come scrivere la dimensione del frame per la finestra esistente di Graph BuilderEcco un approccio alternativo. È possibile ottenere un elenco di tutte le finestre correnti. Sono ordinati per aspetto, quindi se hai appena aperto Graph Builder, sarà l'ultimo elemento. Altrimenti, puoi ispezionare l'elenco delle finestre per trovare il GB che desideri.
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 );
Il tuo script potrebbe essere aggiunto come elemento di menu o barra degli strumenti o trasformato in un componente aggiuntivo.
Ri: Come scrivere la dimensione del frame per la finestra esistente di Graph BuilderMi piace questa risposta, ma si verifica un errore quando estraggo le righe "dt =..." e "obj = ..." e metto "//!" in alto e fare doppio clic su di esso.Ecco l'errore:
Subscript Range in access or evaluation of '(win[N Items(win)] << XPath("//FrameBox"))[ /*###*/1]' , (win[N Items( win )] << XPath( "//FrameBox" ))[/*###*/1]Ri: Come creare uno script per la dimensione del frame per la finestra esistente di Graph BuilderPer @Mark_Bailey 's per funzionare come scritto la casella del grafico dovrebbe essere l'ultima finestra aperta, immagino che quando lo si avvia da uno script separato non sia più così.Potresti modificarlo in questo modo per selezionare solo le finestre del generatore di grafici, dovresti controllare che almeno una finestra sia aperta.
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 );
Nota che faccio qualcosa di simile a questo quando cerco finestre di trama 3d in questo componente aggiuntivo: Strumenti di trama 3D , e lì lascio che l'utente scelga quali finestre modificare.Il codice è attivo Git Hub .
Ri: Come scrivere la dimensione del frame per la finestra esistente di Graph BuilderEccezionale.
Si noti che se "Adatta alla finestra" non è "disattivato", tali dimensioni del fotogramma non sempre funzionano.Ho provato per 30 minuti ad adattare questo codice per modificare anche l'impostazione "Adatta alla finestra" senza fortuna.Qualche idea su come farlo?
E, curiosamente, se la finestra del Costruttore di Grafici ha più grafici, ad esempio con una variabile nel campo Avvolgi, la Dimensione del Riquadro modifica i singoli riquadri del grafico invece dell'intera area del tracciato.È possibile ridimensionare l'intera area del grafico a una determinata dimensione anziché i singoli grafici?
Infine, dove hai imparato a programmare in questo modo?In qualità di programmatore Python da 10 anni (e programmatore Perl da 20 anni), dirò che JSL è piuttosto difficile da capire.Anche dopo aver letto lo Scripting Index su quegli elementi (XPath, Select...) Non sono ancora sicuro di cosa significhino qui...
Grazie!
Ri: Come scrivere la dimensione del frame per la finestra esistente di Graph BuilderQui sto solo indovinando... Fit to Window deve essere inviato a Graph Builder non al frame box (<< Get Scriptable Object potrebbe aiutare qui). Se viene utilizzato Wrap (o Group X), forse dovrai calcolare la dimensione in base a quanti gruppi ci sono. O potresti forse manipolare le dimensioni della finestra del generatore di grafici?
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 non è cosa JMP XPath - Wikipedia , ma è un modo semplice per accedere a diversi oggetti nei report. L'uso di << Get XML ti aiuta a vedere cosa stai XPathing
Report(gb) << Get Xml;
Ri: Come scrivere la dimensione del frame per la finestra esistente di Graph BuilderQuesto ha fatto!Grazie, Jarmo, ea tutti coloro che hanno risposto!!