所以我有一个点,并在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。
其余的意味着什么?如果我有多个交叉点会发生什么?它如何从所有交叉点选择“最佳”交汇单元?
答案 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合作,这将最终节省你很多时间。遗憾的是,文件有时含糊不清:(