[英]Vtk check if polydata objects intersect
我正在嘗試使2個vtkPolyData對象彼此靠近,而又不相交。 我想用一個簡單的布爾函數“測試”一個是否在另一個內部。 我的第一個想法是將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()
並比較它們的值。 當然,這僅在您的對象首先在其邊界處相交時才有效。 但是對於簡單幾何形狀的交集,這應該提供一種輕量級的解決方案。 請參閱此處的示例 。
關於vtkBooleanOperationPolyDataFilter
我只能說我也曾經嘗試過使用它,而且它根本無法vtkBooleanOperationPolyDataFilter
我的vtkBooleanOperationPolyDataFilter
使用。 在搜索中,我發現許多其他人對此表示抱怨。
編輯:您嘗試過vtkPolyDataIntersectionFilter
嗎? 可以在這里找到類參考 。
vtkIntersectionPolyDataFilter計算兩個vtkPolyData對象之間的交集。 第一個輸出是一組線,這些線標記了輸入vtkPolyData對象的交集。 第二和第三輸出分別是第一和第二輸入vtkPolyData。 (可選)兩個輸出vtkPolyData可以沿相交線分割。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.