在图形框中创建多个交互式句柄你好
从一个有两列定义X和Y坐标的表中,我试图为该表中定义的每个点创建一个带有交互式句柄的图形框。 逐个添加句柄(请参见下面的nw1)效果很好,但是当我尝试使用ForEachRow或For循环(请参见nw2和nw3)使过程自动化时,会得到带有点的图形框,但不能互动移动。 自动创建句柄的正确方法是什么?
谢谢,蒂安
dt =新表( “数据点” ,AddRows( 3 ),
新专栏( “ xVar” ,数字, “连续” ,SetValues([ 1个, 2 , 3 ])),
新专栏( “ yVar” ,数字, “连续” ,SetValues([ 1个, 2 , 3 ]))
);
CurrentDataTable (dt);
nw1 =新窗户( “示例1” ,
gr1 =图框(
框架尺寸400 , 400 ), XScale ( 0 , 5 ), YScale ( 0 , 5 ),
处理(:xVar [ 1个],:yVar [ 1个],:xVar [ 1个] = x; :yVar [ 1个] = y;);
处理(:xVar [ 2 ],:yVar [ 2 ],:xVar [ 2 ] = x; :yVar [ 2 ] = y;);
处理(:xVar [ 3 ],:yVar [ 3 ],:xVar [ 3 ] = x; :yVar [ 3 ] = y;);
);
);
nw2 =新窗户( “示例2” ,
gr2 =图框(
框架尺寸400 , 400 ), XScale ( 0 , 5 ), YScale ( 0 , 5 ),
每行(
处理(:xVar,:yVar,:xVar = x;:yVar = y;);
);
);
);
nw3 =新窗户( “示例3” ,
gr3 =图框(
框架尺寸400 , 400 ), XScale ( 0 , 5 ), YScale ( 0 , 5 ),
对于(i = 1个,i <=现在(dt),i ++,
处理(:xVar [i],:yVar [i],:xVar [i] = x;:yVar [i] = y;);
);
);
);
回复:在图形框中创建多个交互式句柄谢谢@cwillden 。 您的解决方案运行完美且可扩展。 它使我想起了SAS宏代码,这实际上是我在此处尝试执行的操作,即写出for循环然后执行它。
回复:在图形框中创建多个交互式句柄你好@rassart ,
在这种情况下,添加句柄时需要对表中的行值进行硬编码。 当您从窗口的图形框中获得刚创建的图形脚本时,原因变得显而易见。 例如,示例3中的图形脚本随后如下所示:
gr3 << Get Graphics Script;
/*:
{For( i = 1, i <= N Rows( dt ), i++,
Handle(
:xVar[i],
:yVar[i],
:xVar[i] = x;
:yVar[i] = y;
)
)}在您的示例中,变量“ i”的最终值将设置为4,因此,由于未对“ i”的值进行硬编码,因此所有句柄均无法正常工作。 如果没有硬编码,则图形脚本将始终依赖于“ i”的当前值。
您可以通过以下方式使用for循环对这些值进行硬编码:
nw4 = New Window( "Example 4", gr4 = Graph Box( FrameSize( 400, 400 ), X Scale( 0, 5 ), Y Scale( 0, 5 ), ) );
For( i = 1, i <= N Rows( dt ), i++,
Eval( Parse( Eval Insert( "gr4[framebox(1)] << Add Graphics Script(Handle(:xVar[^i^], :yVar[^i^], :xVar[^i^] = x; :yVar[^i^] = y;));" ) ) )
);
回复:在图形框中创建多个交互式句柄显然,Handle()函数在执行时无法处理解析。 以下脚本将弥补这一点
Current Data Table( dt );
nw1 = New Window( "Example 1",
gr1 = Graph Box(
FrameSize( 400, 400 ),
X Scale( 0, 5 ),
Y Scale( 0, 5 ),
Handle(
:xVar[1],
:yVar[1],
:xVar[1] = x;
:yVar[1] = y;
);
Handle(
:xVar[2],
:yVar[2],
:xVar[2] = x;
:yVar[2] = y;
);
Handle(
:xVar[3],
:yVar[3],
:xVar[3] = x;
:yVar[3] = y;
);
)
);