none
版主进来请教个图标问题DynamicDataDisplay-0.3这个开源控件 V2 RRS feed

  • 问题

  • 例子代码PerfCounterSample里面,这个例子显示内存变化时如果右键Fit to view,则会动态显示内存变化,但有个大问题,
    动态显示之前的内容会随着时间消除掉,只是显示看得到的那一段时间中的数据,我急需的功能是显示内容不会随时间消除而只是增加内容,
    就是左边的不会没有,这样子怎么改?看了半天控件代码还是不清楚,请教版主,baobo应该对这个控件比较熟悉吧,帮我看看来,多谢!

    补充,PerfCounterSample和simulation的结合,需要x轴的范围不变,滚动显示最新数据,并且之前历史数据可以拖动查看,点击fit to view会自动回到最新滚动

    我的想法是通过修改ProportionsRestriction这个类实现,但是一直不知道怎么改好,

    修改了这个类,然后再加上   

    ProportionsRestriction pr= new ProportionsRestriction();
               
       plotter.Viewport.Restrictions.Add(pr);实现,但是这个ProportionsRestriction一直没有很好的修改方式,让图表做到我想要的。

    • 已编辑 a013strife 2011年11月24日 11:16 清晰
    2011年11月24日 9:46

答案

  • 找到方法了,继续沿用我昨天给出的方式,我们只需要固定每次要显示的Bounds的宽度就可以了。

    修改 \src\DynamicDataDisplay\Viewport2D.cs Line 165-170

            if (!bounds.IsEmpty)
            {
              bounds.X = bounds.Right - 10;
              bounds.Width = 10;
              bounds = bounds.DataToViewport(transform);
            }
    

    这里的10需要你去动态设置,我这里只是用来 测试 PerfCounterSample 的值。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 a013strife 2011年11月24日 14:30
    2011年11月24日 11:34
    版主
  • 昏倒...

      public IList<PerformanceInfo> Filter(IList<PerformanceInfo> c)
      {

                return c;

    在MaxSizeFilter.cs文件里面,直接返回貌似就好了,咳,这样的话最大记录为输入的值,就像版主之前说的那样扩大容量就行了,如果输入10000那就基本可以看到很长一段了。多谢,不知道这样行不行...

    • 已标记为答案 a013strife 2011年11月24日 14:30
    2011年11月24日 14:26

全部回复

  • 找到方法了,继续沿用我昨天给出的方式,我们只需要固定每次要显示的Bounds的宽度就可以了。

    修改 \src\DynamicDataDisplay\Viewport2D.cs Line 165-170

            if (!bounds.IsEmpty)
            {
              bounds.X = bounds.Right - 10;
              bounds.Width = 10;
              bounds = bounds.DataToViewport(transform);
            }
    

    这里的10需要你去动态设置,我这里只是用来 测试 PerfCounterSample 的值。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 a013strife 2011年11月24日 14:30
    2011年11月24日 11:34
    版主
  • 试了下,貌似左边的point还是会消除掉得呀

    2011年11月24日 14:04
  • 昏倒...

      public IList<PerformanceInfo> Filter(IList<PerformanceInfo> c)
      {

                return c;

    在MaxSizeFilter.cs文件里面,直接返回貌似就好了,咳,这样的话最大记录为输入的值,就像版主之前说的那样扩大容量就行了,如果输入10000那就基本可以看到很长一段了。多谢,不知道这样行不行...

    • 已标记为答案 a013strife 2011年11月24日 14:30
    2011年11月24日 14:26
  • 如果我没记错,其实不用RingArray数组环,改用List就可以保持前面数据不被清楚 D3的项目比较大,功能也多,但例如实时曲线图,显示其中一段坐标区域,并且区域随曲线数据增加而自动滚屏,这个功能我实现过,需要修改源码但效果不太理想,主要数据量增加,性能降低,画面延时就会越来越严重。最后我的小项目还是采用RingArray来存储显示的数据,毕竟我的功能是实时曲线图,显示当前数据,后台记录所有数据就好了。 对了,你可以留意一下Plotter(还是ChartPlotter,记不清楚了)有个叫Visible属性(Rect结构),其负责当前呈现的坐标图区域(注意别跟Visibility属性混淆了)。要自动滚屏,可以看看FitToView()这个函数,我也记不太清楚,慢慢一层层查上去吧。 毕竟D3都没更新了,虽然论坛上也有人发布一些修改后的新功能,但项目还是巨大,读懂较难,加油……
    以纳米级的速度前进,不断追赶的渴望者
    2011年11月26日 5:48