如何为现有图形生成器窗口编写框架大小脚本有没有办法使用 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() 获取对窗口的引用,但从脚本窗口使用有点烦人,从工具栏/快捷方式/加载项使用效果更好。