簡體   English   中英

VTK檢查多邊形數據對象是否相交

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM