【问题标题】:How do I get a chart to redraw itself when the model is paused?当模型暂停时,如何让图表重绘自身?
【发布时间】:2014-12-30 18:15:00
【问题描述】:

我有一个时间堆栈图,可以通过单击单选按钮更改其数据集。在模型运行时,单击单选按钮时图表会立即更新其外观。但是,当模型暂停时,单击单选按钮时图表区域变为空白;相比之下,图例会自动更新。如何手动强制图表区域自行重绘?

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    当你暂停一个模型时,实际上只有 Anylogic 的一部分被暂停。处理 GUI 的线程继续运行,这就是为什么您可以在模型暂停时在模型中导航。 这也意味着,如果您在模拟暂停时尝试更新图表的数据,则外观将刷新,但是 - 由于您的数据正在另一个当前暂停的线程中更新 - 它不会收到该数据。

    如果您想暂停模拟并仍然能够切换图表中显示的数据,您可以查看 Airport 示例模型。它提供了一种在不同图表之间切换的好方法,方法是使它们可见/不可见并调整宽度、高度、x 和 y。本质上,您制作所有需要的图表,将它们完美重叠,然后让您当前感兴趣的图表可见。

    如果您想以编程方式创建图表,除了使用 new TimeStackChart(...) 创建图表之外,您还必须使用 main.presenation.add(...) 将其添加到顶级演示组。如果您不这样做,图表将永远不会出现在模型中,因为模型将没有任何东西可以显示!要查找有关如何以编程方式创建图表的更多信息,请在 Main 中制作图表,然后在 Java 编辑器中打开 Main。找到您创建的图表,查看它的构造函数(有很多参数!),并将其用作您希望创建的图表的粗略模板。帮助文档将进一步了解您看到的参数。

    【讨论】:

    • 我们的客户希望在模型完成或暂停时查看各种人群的可视化效果。例如,假设模型完成,他们正在查看火星人口中的男性数量。现在他们想查看海王星种群中的女性数量。切换数据集时图表不会刷新。我知道图表通常会更新自己的数据,但是当我以编程方式切换数据集时,图表不应该看到有新数据,还是线程中的逻辑也是如此?
    • 如果您处于暂停模式,我认为图表看不到新数据集。但你可以尝试 .update() 或 .updateData() [link] anylogic.com/anylogic/help/index.jsp?topic=/… 如果这不起作用。我建议看一下机场示例。他们使用不同的方法,您交换图形而不是数据集。所以图已经画好了……
    • update()updateData() 都不起作用,这有点违反直觉。我会试试机场的例子。
    • 飞机模型提供了一个很好的例子:几个图表占据相同的位置,但只显示选定的一个。我遇到的问题是略有不同。我不必在模拟运行之前知道我需要什么图,而是必须动态地创建它们。我可以很容易地实例化图表,但我不知道如何让它们出现。即,我可以说TimeStackChart nextChart = new TimeStackChart(...),但nextChart 从未出现在模型中。我缺少什么函数调用来将图表“注册”到模型中? (我在其他模型中也遇到过这个障碍。)
    • 太棒了...我已经编辑了答案。如果您还有什么要补充的,欢迎重新编辑。
    【解决方案2】:

    您尝试过chart.refresh(); 方法吗? 也尝试使用agent.onChange() 更新嵌入代理。

    希望对你有帮助

    【讨论】:

    • 我试过 chart.refresh() 但这没有用。我忘记了agent.onChange()。我试试看!
    • 不幸的是,onChange() 似乎不起作用。图表不存在,在 Main 代理上调用 onChange() 也无济于事。
    【解决方案3】:

    我遇到了完全相同的问题,并想出了解决方法。

    试试这个,我知道它适用于 AnyLogic v7:

    if (getEngine.getState() == getEngine().PAUSED ){
    
        dynChart.setSelectedItemIndices( new int[]{0} );
    
        dynChart.setSelectedItemIndices( null );
    
    }
    

    通过选择/取消选择其中一个图例项,我可以在暂停或完成时手动刷新图表。我花了几个小时尝试 API 变体,但无济于事,所以我只是模拟了 UI 中实际工作的内容,并且它工作了。

    我正在动态生成一个文本项作为图表标题,但我没有像图表一样在暂停时刷新文本的运气。有什么想法吗?

    【讨论】:

    • 我不能说我尝试过刷新图表中的文本。也许@Nikolaj 可以提供帮助?您可能想提出一个新问题以获取社区的反馈。在答案中提出问题不太可能让您获得您寻求的答案。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2013-05-09
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多