在 Tibco Spotfire 中动画化数据变化
Animating Data Changes in Tibco Spotfire
这是我第一次post来这里,所以如果我在途中有什么礼仪方面的问题,请原谅我。
我正在处理一个 POC,该 POC 处理在 Tibco Spotfire 7.0 中动画可视化,这将允许用户通过迭代一组过滤器或通过基于预先确定的一组条件。 TIBCOmmunity 已经为此目的定义了一个自定义工具 http://tibcoanalytics.com/spotfire/archive/totw/2011-01-16.html。然而,我的任务是证明这可以在 Iron Python 脚本中完成。 POC 在概念上相当简单,我需要一个动作控件来将散点图上的一个点绕圆圈移动。以下是我目前正在使用的 Python。我遇到的问题是强制 Spotfire update/refresh 循环内的可视化。帮忙?
import time
import math
R = Rad; #parameter containing the radius of the circle
x_0 = xc; #parameter containing the center x coord
y_0 = yc; #parameter containing the center y coord
t=0.00
while t<(2*math.pi):
x = R*(math.cos(t)) + x_0;
y = R*(math.sin(t)) + y_0;
t+=0.01
Document.Properties['xc'] = x
Document.Properties['yc'] = y
#code to force the visualization/document to refresh/update goes here
time.sleep(1/360)
这并没有直接回答您的问题,而是为您提供了一种创建可与文档属性交互的计时器的方法。抱歉,我没有时间提供明确的答案。因此,请随意不要将其标记为已接受 - 也许其他人有更好的。
您的代码不起作用的原因是 IronPython 引擎在执行完成之前锁定 Spotfire。假设可视化不更新,您就离得不远了:实际上整个应用程序都没有更新!您可以通过将睡眠值设置为 1 秒来测试我在评论中提到的这一点。
我前段时间创建了 this DXP 来说明如何允许 IronPython 和 Javascript 代码在文本区域内相互交互。 IP->JS 页面应该会为您提供一些有关如何构建动画解决方案的线索。
这里的幕后情况:
- a Spotfire 属性
<div>
内的控件(输入区域)允许用户输入文本
- 一个名为
update
的 Javascript 函数定期运行:var timer = setInterval(update, 1000);
update
函数使用JQuery通过其父<div>
访问输入区域:var text_in = $("#input_container").text();
update
最终将 "output" 容器 <div>
中的文本替换为修改后的文本:$("#output_container").html(rainbowize(text_in));
您可以修改此示例以使用 JQuery 输出到文档 属性 链接的输入区域。换句话说,使用 Javascript 定时器 setInterval()
而不是 time.sleep()
.
我希望我已经很好地解释了这一点。如果不清楚请告诉我:)
这是我第一次post来这里,所以如果我在途中有什么礼仪方面的问题,请原谅我。
我正在处理一个 POC,该 POC 处理在 Tibco Spotfire 7.0 中动画可视化,这将允许用户通过迭代一组过滤器或通过基于预先确定的一组条件。 TIBCOmmunity 已经为此目的定义了一个自定义工具 http://tibcoanalytics.com/spotfire/archive/totw/2011-01-16.html。然而,我的任务是证明这可以在 Iron Python 脚本中完成。 POC 在概念上相当简单,我需要一个动作控件来将散点图上的一个点绕圆圈移动。以下是我目前正在使用的 Python。我遇到的问题是强制 Spotfire update/refresh 循环内的可视化。帮忙?
import time
import math
R = Rad; #parameter containing the radius of the circle
x_0 = xc; #parameter containing the center x coord
y_0 = yc; #parameter containing the center y coord
t=0.00
while t<(2*math.pi):
x = R*(math.cos(t)) + x_0;
y = R*(math.sin(t)) + y_0;
t+=0.01
Document.Properties['xc'] = x
Document.Properties['yc'] = y
#code to force the visualization/document to refresh/update goes here
time.sleep(1/360)
这并没有直接回答您的问题,而是为您提供了一种创建可与文档属性交互的计时器的方法。抱歉,我没有时间提供明确的答案。因此,请随意不要将其标记为已接受 - 也许其他人有更好的。
您的代码不起作用的原因是 IronPython 引擎在执行完成之前锁定 Spotfire。假设可视化不更新,您就离得不远了:实际上整个应用程序都没有更新!您可以通过将睡眠值设置为 1 秒来测试我在评论中提到的这一点。
我前段时间创建了 this DXP 来说明如何允许 IronPython 和 Javascript 代码在文本区域内相互交互。 IP->JS 页面应该会为您提供一些有关如何构建动画解决方案的线索。
这里的幕后情况:
- a Spotfire 属性
<div>
内的控件(输入区域)允许用户输入文本 - 一个名为
update
的 Javascript 函数定期运行:var timer = setInterval(update, 1000);
update
函数使用JQuery通过其父<div>
访问输入区域:var text_in = $("#input_container").text();
update
最终将 "output" 容器<div>
中的文本替换为修改后的文本:$("#output_container").html(rainbowize(text_in));
您可以修改此示例以使用 JQuery 输出到文档 属性 链接的输入区域。换句话说,使用 Javascript 定时器 setInterval()
而不是 time.sleep()
.
我希望我已经很好地解释了这一点。如果不清楚请告诉我:)