gpt4 book ai didi

c++ - Vtk 检查多数据对象是否相交

转载 作者:行者123 更新时间:2023-11-28 05:41:08 32 4
gpt4 key购买 nike

我正在尝试使 2 个 vtkPolyData 对象彼此靠近而不相交。我想用一个简单的 bool 函数“测试”一个是否在另一个里面。我的第一个想法是将 vtkBooleanOperationPolyDataFilter 与数据集一起用作输入并计算交集,然后检查生成的 PolyData 对象是否为 NULL 对象。然而,这并没有给出预期的结果。

我目前使用的代码如下所示:

bool Main::Intersect(double *trans)
{
vtkSmartPointer<vtkPolyData> data1 = vtkSmartPointer<vtkPolyData>::New();
vtkSmartPointer<vtkPolyData> data2 = vtkSmartPointer<vtkPolyData>::New();
data1->ShallowCopy(this->ICPSource1);
data2->ShallowCopy(this->ICPSource2);

//This piece is just to reposition the data to the position I want to check

for (unsigned int k=0; k<3; k++)
{
trans[k]/=2;
}


translate(data2, trans);

for (unsigned int k=0; k<3; k++)
{
trans[k]*=-1;
}

translate(data1, trans);

//This is my use of the actual vtkBooleanOperationPolyDataFilter class

vtkSmartPointer<vtkBooleanOperationPolyDataFilter> booloperator = vtkSmartPointer<vtkBooleanOperationPolyDataFilter>::New();
booloperator->SetOperationToIntersection();
booloperator->AddInputData(data1);
booloperator->AddInputData(data2);
booloperator->Update();

if (booloperator->GetOutput()==NULL)
return 0;
else
return 1;

}

非常感谢有关此问题的任何帮助。另外,我不知道“vtkBooleanOperationPolyDataFilter”类是否真的是最好用的,它只是我发现并认为可能有用的东西。

提前致谢,Xentro

编辑:我说这没有给出预期的结果,但它确实改善了我的结果。它对我的运动标准有某种影响(这是重点),但最终结果数据集有时仍然相交。

最佳答案

您可以为两个对象调用 PolyDataObject->GetBounds() 并比较它们的值。当然,这仅在您的对象首先在其边界处相交时才有效。但是对于简单几何图形的交集,这应该提供一个轻量级的解决方案。 See here for an example .

关于 vtkBooleanOperationPolyDataFilter 我只能说我以前也尝试过使用它,但它根本没有按照我想要的方式工作。在我的搜索中,我发现很多人都在提示它。

编辑:您尝试过 vtkPolyDataIntersectionFilter 了吗? class reference可以在这里找到。

vtkIntersectionPolyDataFilter computes the intersection between two vtkPolyData objects. The first output is a set of lines that marks the intersection of the input vtkPolyData objects. The second and third outputs are the first and second input vtkPolyData, respectively. Optionally, the two output vtkPolyData can be split along the intersection lines.

关于c++ - Vtk 检查多数据对象是否相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37072180/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com