none
请教版主如何在Dynamicdatadisplay里面加入自定义的线段标示数据功能? RRS feed

答案

  • 这个我们只能去修改 D3 的源代码了。\Stable\v0.3.1\src\DynamicDataDisplay\Charts\LineGraph.cs 这个类中我们可以把我们的额外线条画上去,在他里面的 OnRenderCore 方法绘制。然后这个类的 filteredPoints 包含了我们需要的坐标点信息。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 a013strife 2012年3月22日 5:20
    2012年3月8日 5:43
    版主
  • 自己做了个基本已经搞定,嘿嘿。
    • 已标记为答案 a013strife 2012年3月22日 5:20
    2012年3月22日 5:20

全部回复

  • 这个我们只能去修改 D3 的源代码了。\Stable\v0.3.1\src\DynamicDataDisplay\Charts\LineGraph.cs 这个类中我们可以把我们的额外线条画上去,在他里面的 OnRenderCore 方法绘制。然后这个类的 filteredPoints 包含了我们需要的坐标点信息。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 a013strife 2012年3月22日 5:20
    2012年3月8日 5:43
    版主
  • 版主好,OnRenderCore这个类中怎么传入拖动直线所在的x轴信息进行比对呢?我搞了下没搞出来,于是又回到原来的地方,

    代码:代码V2

    应该在标记的//todo 如何得到和直线交集的plotter坐标?这边下面去寻找plotter和红线对应的x轴值,但是

            void TargetLine_PreviewMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
            {
                if (_isDown)
                {
                    DragFinished(false);
                    e.Handled = true; 
                    Point currentPoint = e.GetPosition((IInputElement)sender);
                    if (LineGraphTest == null) return;


                    foreach (Point element in LineGraphTest.filteredPoints)
                    {
                        if (element != null )
                         {
                             //Viewport2D graph = element as Viewport2D;
                             //double top = (double)element.GetValue(Canvas.TopProperty) + graph.ActualHeight / 2;
                             //double left = (double)element.GetValue(Canvas.LeftProperty) + graph.ActualWidth / 2;


                             //todo 如何得到和直线交集的plotter坐标?
                             if (currentPoint.X > element.X - 5 && currentPoint.X < element.X + 5)
                             { 
                             }
                         }
                    } 
                }
            }

    LineGraphTest是linegraph对象,但是这边如何比对x轴呢?我的代码不行,有空帮看看哦?谢谢

    2012年3月12日 9:02
  • 对了,我把filteredPoints这个属性改成public了,源代码中...否则不能编译
    2012年3月12日 9:22
  • 这个问题解决了,出来了新的问题:如果知道x轴的起始点和终止点,如何得到这之间的所有数据信息?以便求平均值,

    比如x轴1到100,我想知道11到20刻度之前所有对应的数据,然后可以求平均值。

    2012年3月13日 9:16
  • 自己做了个基本已经搞定,嘿嘿。
    • 已标记为答案 a013strife 2012年3月22日 5:20
    2012年3月22日 5:20
  • 啊,不好意思, 不是你刚才Mark 我都忘了, 最近在跟进Windows 8 Metro的东西,这边看的少了点。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月22日 5:42
    版主
  • 最近也在做这个东西,不知道楼主你是怎么学习D3的呢。貌似没有很全的文档,对于库中的函数不太清楚如何去调用。

    我想实现的功能是,鼠标移到图像上时,能够显示一条和Y轴平行的直线,从这条线可以拖选出一个线段区域,然后可以得到该框中数据的最大值最小值。可是D3中一旦拖动就是整个图像被拖动,这个应该可以修改的吧。

    2012年4月10日 15:15
  • 看我上面的链接,有类似功能,但是不完整,有需要留下邮箱,有空发你
    2012年4月10日 15:40
  • 谢谢,我看过上边的文档,里边有线条拖动的例子,帮助颇大。有点不明白的是,为什么要引进Adorner,如果我单单只想实现直线跟随鼠标的话,(拖曳也可以吧,点的位置都能获取到)是不是不需要Adorner也应该可以实现的?

    zzx.wanto@gmail.com

    谢谢

    2012年4月12日 15:38
  • Adorner是为了拖拽时角上有拖拽效果,可以去掉,代码有些抄袭网上的
    2012年4月13日 0:56