vtk拾取器-vtkAbstractPicker/vtkCellPicker
创始人
2024-01-29 06:00:06
0

创建了VTK社区,欢迎大家加入雪易社区-CSDN社区云

简介:此文主要介绍vtk中的拾取器的用法,若能为各位小伙伴解决一些困扰就更好了。非常欢迎各位小伙伴指正并补充。

1. vtkAbstractPicker

vtkAbstractPicker是vtk拾取器的基类,为其子类提供最基础的功能-返回Pick点的全局坐标(主要通过Pick()和GetPickPosition() 两个方法)。

用法为:

    vtkRenderWindowInteractor* interactor = vtkRenderWindowInteractor::SafeDownCast(caller);int screenPosition[3];interactor->GetEventPosition(screenPosition);vtkNew picker;picker->Pick(screenPosition[0], screenPosition[1], 0,interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer());double picked[3];picker->GetPickPosition(picked);

vtkAbstractPicker还提供了限制拾取的功能,用法如下:

  vtkAbstractPicker* picker = vtkCellPicker::New();picker->SetTolerance(0.01);picker->AddPickList(this->LineActor);picker->PickFromListOn();

注意:

1. 当vtkProp设置为“unpickable”时,vtkAbstractPicker及其子类不能拾取。当透明度为0,即全透明时,vtkAbstractPicker及其子类也不能拾取。

2. vtk中的拾取器分为两类:一类是通过几何方法获取(该方法可获取的信息更多,但速度较慢),另一类是通过渲染器获取(该类获取的信息较少,但速度较快)。

        几何拾取器为vtkPicker,vtkCellPicker,vtkPointPicker

        渲染拾取器为vtkWorldPointPicker,vtkPropPicker

3. vtkPropPicker拾取的为vtkProp的实例。vtkCellPicker/vtkPointPicker可以拾取Cell和Point信息。vtkWorldPointPicker是最快的拾取器,返回x,y,z坐标值。vtkPicker可以拾取3DProp的BoundingBox。

2. vtkAbstractPropPicker

vtkAbstractPropPicker是拾取vtkProp实例的基类。当拾取动作触发后,通过vtkAssemblyPath的形式返回拾取的vtkProp。

vtkAssemblyPath简单地理解为包括vtkAssemblyNode的顺序列表,每一个结点含有一个指向vtkProp对象的指针以及一个可选的vtkMatrix4x4对象。列表的顺序很重要。列表的起点是根节点即Assembly层次结构的顶层结点。列表的结尾表示Assembly层次结构的叶结点。结点的顺序会影响到与之关联的矩阵。每个矩阵是列表里结点Prop所对应的矩阵与前一个矩阵的级联。

注意:

1. 一个vtkProp可以被放置在不同的Assembly里,也可以放置在同一个Assembly的不同叶结点。vtk采用vtkAssemblyPath完全限定拾取的是哪个vtkProp,包含了vtkProp的位置信息。

3. vtkCellPicker 

vtkCellPicker通过向3D场景中发射一条射线,并返回关于射线击中的第一个对象的信息。它作用的对象为所有的Prop3Ds。

对于vtkVolume对象,通过向volume发射一条射线,并返回光线与所选不透明度等值面的交点。

对于vtkImage对象,返回光线与显示Slice的交点。

对于vtkActor对象,返回光线与Actor的多边形的交点。

若对象的Mapper包含ClippingPlanes,也会将Clipping计算在内,会返回与光线相交的ClippingPlane的Id。

对于所有的Porp对象,返回Point和Cell信息,以及Surface在Pick位置的法向信息。

对于volume和image对象,还可以返回Pick位置的i,j,k坐标和选择的Cell。

vtkCellPicker用法:


vtkNew picker;
picker->Pick(screenPosition[0], screenPosition[1], 0,interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer());double picked[3];
picker->GetPickPosition(picked);//1. 获取Prop
vtkProp* prop = picker->GetViewProp();//2. 获取CellID
vtkIdType pickingIdx = picker->GetCellId();//3. 获取Surface的法向量
double* normal = picker->GetPickNormal();//4. 获取图像数据
int* mouse = picker->GetCellIJK();

相关内容

热门资讯

10个适合农适合农村创业的小本... 农村是不同于城市、城镇而从事农业的农民聚居地。下面和小编一起来看10个农村小本创业项目,希望有所帮助...
成都小本成都小本创业好项目创业... 好项目!好项目!好项目! DOU音短视频培训课程全国招商!!! 【诚招】:团队代理.公司代理. 【模...
成都创业小项目有哪些 成都创业... 成都市要实现构建西部战略高地,率先基本实现现代化的奋斗目标,需要在重点产业、重点区域上进一步突破,率...
农村项目小本创业有哪些 农村小... 如今有很多的农村人,已经不仅仅局限于种植方面,很多人都想要通过创业来增加自己的收入,不过农村人经济条...
开店项目分享美食小本创业项目 ... 现在小本创业项目做什么好,来试试餐饮加盟吧2017年08月03日来源:渠道网现在话说烧烤可是各省市人...
井研县创业推荐项目 井研县创业... 只有实践过,才能深切的感受到创业的不易。如何在绝境中突围,是创业者每天都思考的问题。以下是小编为大家...
年轻人最四实的小本创业开店项目... 延伸阅读年青人创业找项目年轻人六大创业好项目1574人年青人敢闯敢拼的精神才是创业最需要的,现在年青...
穷人翻身小本创业项目 3个小本... 出于生活的压迫,也或者是出于对当前现状的不甘,导致很多人想要自己创业赚点钱,可又苦于手头资金有限,一...
11个农村小本创业涨收入项目大... 导语:农村是不同于城市、城镇而从事农业的农民聚居地。接下来小编整理了11个适合农村的小本项目,文章希...
60个适合农村的小本生意最好做... 适合农村的小本生意,很多人共同关心着这个问题,在农村做什么赚钱,怎么做呢?适合农村的小本生意,很多人...