写在前面
C# Tips是博主开启的第一个项目,以C#为示例语言,旨在普及编程技巧、经典算法以及计算机视觉、图形学知识。
抓取点
第一节中提到过Model3DNode类继承了PickableNode类,PickableNode类提供了用来抓取模型中三维点的方法,抓取点有以下一些目的:
- 显示单个点云的属性,包括坐标、颜色和其他自定义属性;
- 为长度、面积、体积量测提供位置信息;
- 切换视图的旋转中心。
抓取点分为以下几个步骤:
- 实时高亮显示可抓取的三维点;
- 添加WinGLCanvas控件的鼠标点击事件,比如双击;
- 屏幕坐标系向模型坐标系的转换;
- 消除已抓取点的抓取记录。
高亮显示
如需实时抓取三维点,首先需要创建一个适应于整个场景的Picking 类实例:
Picking pickingAction = new Picking(scene);
如需高亮显示,还要创建一个LegacyPointNode类实例来存储抓取结果:
LegacyPointNode highlightPt = new LegacyPointNode();
为达到实时高亮显示的目的,必须为WinGLCanvas控件添加一个鼠标移动事件winGLCanvas1_MouseMove,Picking类提供的Pick方法很容易获得抓取处的图形坐标,抓取坐标存储于PickedGeometry类中(其z坐标只表示屏幕深度),如果PickedGeometry为null,则说明未成功抓取三维点。
private void winGLCanvas1_MouseMove(object sender, MouseEventArgs e)
{
if (this.pickingAction != null)
{
IGLCanvas canvas =

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



