none
关于WPF 3D的命中测试问题 RRS feed

  • 问题

  • 请教一下如果有多个包含一个三角形的MODELVISUAL3D,他们彼此重叠(平行且Z相同),这时候如果使用
    VisualTreeHelper.HitTest
    
    对Visual进行命中测试(不是用射线法对Visual3D测试),filterCallBack 和resultCallBack,遍历MODELVISUAL3D元素的顺序是怎样的?
    A-B-D
    └C-E
    比如这样的,ABCED分别是CONTENT为一个三角形的MODELVISUAL3D BC是A的CHILD DE分别是BC的CHILD,
    使用命中测试filterCallBack遍历的顺序是ABDCE,难道是深度遍历?resultCallBack遍历顺序是ABCDE,难道是广度遍历?  
    我想获得按照显示的覆盖顺序的列表应该怎么做呢,也就是说我想获得ECDBA这样顺序的列表,实际上直接用VisualTreeHelper.HitTest(POINT)获得所谓的最上面的元素结果是A。这货根本名不符实么?              
    2011年6月14日 11:07

答案

  • resultCallBack 是命中测试结果的回调,如果你有 filterCallBack 筛选回调,那么根据你的筛选回调的筛选结果先进行命中测试,如果中了,则回调resultCallBack一次。所以她的顺序还取决于filterCallBack。

    你的测试在于你的筛选如果请求进行所有元素的命中测试的话,那么resultCallBack则会在“广度”上进行遍历。当然,对于一个树形结构,这个“广度”旨在同一个Point的上的同级别元素先被遍历到,之后深入遍历子元素。

     

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月23日 5:27
    版主

全部回复

  • 你好,

    根据文档描述:http://msdn.microsoft.com/zh-cn/library/ms608753.aspx

    如果 filterCallback 不是 null 引用,将在 resultCallback 之前调用此参数。

    所以我们可以认为前者是会被提前遍历的回调,所谓深度遍历。而后者则是在filterCallBack之后调用,他会先满足于同一层次的元素,然后再进一步回调里面的元素,所以你会看到这个结果。 你要一个倒序的结果的话,你完全可以在filterCallBack里面先处理你的逻辑代码,然后继续回调,这样深度遍历中的一次进入会先到达E元素,然后一步步回退到C D B A元素。 

     

     

     

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月16日 12:00
    版主
  • 恩,后来我确实只好用filterCallBack直接获得一个逆序的结果,但是还是发现resultCallBack遍历的顺序很奇怪,能不能解答一下这个回调遍历的顺序是什么呢,谢谢

    2011年6月22日 5:48
  • resultCallBack 是命中测试结果的回调,如果你有 filterCallBack 筛选回调,那么根据你的筛选回调的筛选结果先进行命中测试,如果中了,则回调resultCallBack一次。所以她的顺序还取决于filterCallBack。

    你的测试在于你的筛选如果请求进行所有元素的命中测试的话,那么resultCallBack则会在“广度”上进行遍历。当然,对于一个树形结构,这个“广度”旨在同一个Point的上的同级别元素先被遍历到,之后深入遍历子元素。

     

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月23日 5:27
    版主