osgviewer读取dxf文件,拣选高亮功能小结

最近看了段关于osgViewer加载dxf文件的代码,利用的是dxflib的这个开源包,并且右键拣选时进行了高亮处理。

对该段代码的疑问请教了osg大咖,现总结如下:

一、读取dxf功能

dll_dxf的in函数中,实现对addBlock和add3dFace两个方法的反复调用。其中addbiock方法是对板架信息的读取(name,坐标基点),保存为叶子节点;add3dFace方法是对板架下的面片信息的读取(顶点坐标,颜色)。endblock方法将3dFace的信息以geometry形式加在叶子节点下面。

另:dxf文件如何生成?法线自动生成?

二、拣选高亮功能

拣选功能主要通过碰撞检测。通过osgUtil::LineSegmentIntersector::Intersection获取选择的节点。intersection中保存了所有穿过直线的节点。通过.begin可以获取最前方的nodepath,nodepath中保存了最前方的各级节点数据。数组中依次从根节点到叶子节点。

高亮功能可以用osgFX修饰node并代替实现,也可以设置node的state实现。

如何判断一个node节点是group还是geode。可以通过osg::geode::asgeode和osg::group::asgroup的返回值进行判断

原文地址:https://www.cnblogs.com/hanmolabi/p/7518090.html