2015-09-09 2 views
1

Это мой первый пост здесь, поэтому, пожалуйста, простите меня, если я потерпите неудачу в этикете где-то по пути.Анимация изменений данных в Tibco Spotfire

Я работаю над POC, занимающимся анимацией визуализации в Tibco Spotfire 7.0, которая позволит пользователю видеть изменения в данных с течением времени путем итерации через набор фильтров или путем итерации путем изменения данных на основе pre -пределенный набор условий. TIBCOmmunity уже определяет настраиваемый инструмент для этой цели http://tibcoanalytics.com/spotfire/archive/totw/2011-01-16.html. Тем не менее, моя задача - показать, что это можно сделать в сценарии Iron Python. POC довольно прост по понятию, мне нужно, чтобы Action Control перемещал точку на участке разброса по кругу. Ниже приведен Python, с которым я работаю до сих пор. Проблема, с которой я сталкиваюсь, заставляет Spotfire обновлять/обновлять визуализацию внутри цикла. Помогите?

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) 
+1

Я знаю, что это комментарий вне темы, но это одна из самых хорошо написанных первых сообщений о переполнении стека, которые я видел в течение длительного времени. –

+0

@ShotgunNinja определенно в этом пространстве тегов :) – niko

+0

@Kaorie, я изо всех сил пытаюсь воспроизвести то, что вы сделали до сих пор. возможно ли вам поделиться дезинфицированной версией вашего анализа с помощью Dropbox или мега или что-то еще? – niko

ответ

3

это не отвечает на ваш вопрос напрямую, но предоставляет вам способ создания таймера, который может взаимодействовать с свойствами документа. жаль, что у меня нет времени, чтобы дать явный ответ. так как они чувствуют себя свободными, чтобы не отметить это, возможно, у кого-то есть лучший.

Причина, по которой ваш код не работает, заключается в том, что механизм IronPython блокирует Spotfire до завершения исполнения. вы не за горами, полагая, что визуализация не обновляется: на самом деле все приложение не обновляется! вы можете проверить это, как я упомянул в своем комментарии, установив значение спящего режима на 1 секунду.

Некоторое время назад я создал this DXP, чтобы проиллюстрировать, как разрешить код IronPython и Javascript взаимодействовать друг с другом внутри текстовых областей. страница IP-> JS должна дать вам некоторые подсказки о том, как создать решение для анимации.

, что происходит за кулисами здесь:

  1. Spotfire управления имуществом (Input область) внутри <div> позволяет пользователю вводить текст
  2. функция Javascript называется update работает периодически: var timer = setInterval(update, 1000);
  3. Функция update использует JQuery для доступа к области ввода через ее родителя <div>: var text_in = $("#input_container").text();
  4. update, наконец, заменяет текст в «выходной» контейнер <div> с измененным текстом: $("#output_container").html(rainbowize(text_in));

вы можете изменить этот пример, чтобы использовать JQuery для вывода на документ собственности, связанной области ввода. другими словами, используйте таймер Javascript setInterval() вместо time.sleep().

Надеюсь, я проделал достойную работу, объяснив это. дайте мне знать, если это было непонятно :)

+1

Я буду адаптировать ваш метод к моему проекту. Если это функционально, я опубликую окончательное и явное решение в качестве комментария здесь и помечаю ваше решение как принятое. Спасибо за вашу помощь здесь! – Kaorie

+1

Ниже приведен фрагмент кода, который, наконец, сделал трюк для меня. недостающие части кода обозначаются символом '...', так как это делается из гораздо большего .js, который определяет кнопку clickable в текстовой области Spotfire. По запросу я могу опубликовать dxp. Этот проект оказался доказательством того, что Spotfire7.0 не может обрабатывать много запросов рендеринга в секунду, но со скоростью 1 в секунду анимация работает просто отлично! – Kaorie

+1

'R = Number ($ (" # Rad "). Text(). Trim()); x_0 = Number ($ ("# x_0"). Text(). Trim()); y_0 = Number ($ ("# y_0"). Text(). Trim()); t = 0,00; вар спин = функция() { \t, если (т <(2 * Math.PI)) \t {\t \t \t \t х = R * (Math.cos (т)) + x_0; \t \t y = R * (Math.sin (t)) + y_0; \t \t //document.getElementById('mySpotfireControlx').firstChild.value = x; \t \t $ ("# mySpotfireControlx input"). Val (x) .blur(); \t \t //document.getElementById('mySpotfireControly').firstChild.value = y; \t \t $ ("# mySpotfireControly input"). Val (y) .blur(); \t \t t + = 0,01; \t}; } '... ' Функция MouseUp() { ' ... \t' т = 0,00; \t setInterval (spin, 1000) } '... – Kaorie