如何為現有圖形生成器視窗編寫框架大小腳本有沒有辦法使用 JSL 設定現有圖形產生器視窗的框架大小?
例如,假設我打開了一個圖形生成器窗口,並且我想運行一個 JSL 文件,將該窗口中圖形的整體幀大小設置為 800x600。如果在 JSL 腳本中沒有對 GB 物件的引用,這可能嗎?
自動化和腳本編寫回覆:如何為現有圖形生成器視窗編寫框架大小腳本就這樣做到了!謝謝 Jarmo 和所有回覆的人!
回覆:如何為現有圖形生成器視窗編寫框架大小腳本這裡只是猜測... 適合視窗必須傳送到圖形產生器而不是框架框(<< 取得腳本物件可能會有所幫助)。 如果使用 Wrap(或 Group X),也許您必須根據有多少組來計算大小。 或者您可以操縱圖形生成器視窗的大小?
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 不是 JMP 的東西XPath - 維基百科,但這是存取報表中不同物件的簡單方法。 使用 << Get XML 可以幫助您了解您正在使用 XPathing 的內容
Report(gb) << Get Xml;
回覆:如何為現有圖形生成器視窗編寫框架大小腳本驚人的。
請注意,如果“適合視窗”未“關閉”,則這些幀大小並不總是有效。我嘗試了 30 分鐘來調整此程式碼以修改“適合視窗”設置,但沒有成功。有什麼想法如何做到這一點嗎?
而且,奇怪的是,如果「圖形產生器」視窗有多個繪圖,例如「換行」欄位中有一個變量,則「框架大小」會修改各個繪圖框架而不是整個繪圖區域。是否可以將整個繪圖區域的大小而不是單一繪圖的大小調整為給定大小?
最後,你從哪裡學會這樣的程式設計?作為一個擁有 10 年 Python 編碼經驗(以及 20 年 Perl 編碼經驗)的人,我會說 JSL 相當難以理解。即使在閱讀了這些項目的腳本索引(XPath、Select...)之後 我仍然不確定他們在這裡的意思...
謝謝!
回覆:如何為現有圖形生成器視窗編寫框架大小腳本為了@馬克貝利的腳本要按寫入方式工作,圖形框必須是最後一個打開的窗口,我猜當從單獨的腳本啟動它時,情況不再如此。您可以像這樣修改它以僅選擇圖形生成器窗口,您需要檢查至少一個窗口是否打開。
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 );
請注意,在此插件中尋找 3d 繪圖視窗時,我會執行與此類似的操作: 3D 繪圖工具,然後我讓使用者選擇要修改的視窗。代碼已開啟GitHub 。
回覆:如何為現有圖形生成器視窗編寫框架大小腳本我喜歡這個答案,但是當我取出“dt = ...”和“obj = ...”行並輸入“//!”時,它會出錯並雙擊它。這是錯誤:
Subscript Range in access or evaluation of '(win[N Items(win)] << XPath("//FrameBox"))[ /*###*/1]' , (win[N Items( win )] << XPath( "//FrameBox" ))[/*###*/1]回覆:如何為現有圖形生成器視窗編寫框架大小腳本這是一種替代方法。 您可以獲得所有目前視窗的清單。 它們按外觀排序,因此如果您剛剛打開圖形生成器,它將是最後一項。 否則,您可以檢查視窗清單以查找所需的 GB。
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 );
您的腳本可以新增為功能表或工具列項,或製作為加載項。
回覆:如何為現有圖形生成器視窗編寫框架大小腳本如果您可以獲得圖形產生器的引用,則最簡單。 例如,在引用大綱方塊後,您可以使用 << Get Scriptable Object
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);
或者在某些情況下,您可能可以直接從視窗找到框架框
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);
最後是 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);
您可以使用 Current Window() 取得對視窗的引用,但從腳本視窗使用有點煩人,從工具列/捷徑/加載項使用效果更好。