如何在vtk中使用IntersectWithLine函数?

时间:2017-01-24 15:56:35

标签: vtk

所以我有一个点,并在z轴上创建一条线来查看与某个网格的交点(在z轴上投影网格上的点)。

所以我创建了一个vtkCellLocator,但每个函数的参数是什么?文档中根本没有描述它:

int vtkCellLocator::IntersectWithLine(double a0[3], double a1[3], double tol,
                                  double& t, double x[3], double pcoords[3],
                                  int &subId, vtkIdType &cellId,
                                  vtkGenericCell *cell);

我测试了一下,似乎a0和a1是我们行的端点,x是找到的交叉点值,cellid是交叉点的cellid。

其余的意味着什么?如果我有多个交叉点会发生什么?它如何从所有交叉点选择“最佳”交汇单元?

2 个答案:

答案 0 :(得分:1)

IntersectWithLine的参数派生自vtkCell类。有点埋头,您可以查看参数的详细描述here。 vtkCellLocator中的实现使用对vtkCell::IntersectWithLine的调用来定义参数。

虚拟int vtkCell :: IntersectWithLine(const double p1 [3], const double p2 [3],double tol,double&t,double x [3],double pcoords [3],int和subId)

与射线相交。

返回参数坐标(行和单元格)和全局 给定射线定义p1 [3],p2 [3]和 公差公差如果相交,则该方法返回非零值 发生。沿着射线的0到1之间的参数距离t 代表相交点,点坐标x [3]在 数据坐标以及参数坐标中的pcoords [3]。 subId 是组成三角形的单元格(如果是三角形带)的单元格内的索引。

返回的cellId基于到相交单元格的参数距离。因此,返回的cellId是最小化成员函数vtkCell::GetParametricDistance

的单元格

虚拟双vtkCell :: GetParametricDistance(const double pcoords [3])

返回提供给参数的参数坐标的距离 单元格。

如果在单元格内,则返回零距离。这是用 在拣选期间获取正确的单元格。 (公差会 偶尔允许挑选未真正相交的细胞 “在单元格内部”。

因此,应该是在公差范围内最接近p1的单元格与直线相交

答案 1 :(得分:0)

很抱歉,我没有直接答案(嗯...... &t可能是交叉点发生的行的参数,cellId是找到的单元格的ID, cell是指向找到的单元格的指针(但您可以使用cellId来获取它))。但我确实有一个建议,因为经常与VTK合作的人:使用它是开源的事实 - 只需下载VTK源并直接查看它们以找到答案。相信我,特别是如果你打算定期与VTK合作,这将最终节省你很多时间。遗憾的是,文件有时含糊不清:(