HitPath hitPath = DoLocate(ev, true, 1);
Element element = hitPath.GetHeadElement();
通过Hitpath可以拿到ev定位点的元素,再通过GetHeadElement()获得Path最顶级的元素。
HitPath来自于DisplayPath,它是MicroStation中的一个重要概念。
DisplayPaths定义元素的唯一表示。 要了解DisplayPaths的用途,必须了解为什么单个ElementRef本身不能定义唯一的表示。
答案是参考和共享单元
由于单个模型可以通过DgnModelRefs多次作为参考附加(每个模型具有不同的变换),因此模型中的每个元素都可以多次显示-每个元素具有不同的大小和位置。同样,每次显示共享单元实例时,都会显示共享单元定义中的元素。要唯一的指定共享单元实例的元素之一,必须知道实例的ModelRef,实例的ElementRef以及定义中的Element的ElementRef。由于共享单元可以嵌套(即共享单元定义中可以存在共享单元实例),因此唯一指定元素所需要的ElementRef数可能会有不同,因此显示路径由Root DgnModel和ElementRefs的可变长度数组组成,每个元素都可以为路径中的所有后续条目指定新的坐标系或剪切区域。
除了Root DgnModelRef和ElementRef数组之外,DisplayPath还包含一个光标层级,DisplayPath的光标层级决定所绘制的路径的一部分。例如,假设一个DisplayPath包含:
层级 | ElementRef |
---|---|
0 | 共享单元实例("ABC"),ID=1224 |
1 | 共享单元定义("ABC"),ID=100 |
2 | 共享单元实例("DEF"),ID=122 |
3 | 共享单元定义("DEF"),ID=132 |
4 | Arc Element,ID=134 |
如果将光标设置为层级0,则将绘制共享单元实例,ID=1224(及其所有组件);
如果将光标设置为层级2,则仅绘制共享实例(ID=122)(及其所有组件),包含在ID=1224中
如果将光标设置为层级4,则仅绘制共享单元实例(ID=134)(及其所有组件),包含在ID=122中
明白了DisplayPath后我们再来说HitPath。所谓的Hit就是用户选取元素时的鼠标点击,你点击到的元素可能会是DisplayPath中的某个层级的元素。通过调用HitPath下的GetHeadElement能获取到Path中最顶级的那个元素,GetTailElement能获取到Path中最底层的那个元素。
网友评论