我有一個關於VTK類的問題,名爲vtkPoints。該類具有插入單個點的功能,但不具有刪除單個點的功能。這對於需要通過調用vtkPoints :: Modified()來更新視圖來再次驅動圖形管道以更新/重新呈現視圖來說很不方便。重新初始化vtkPoints,再次添加所有點以及更新/重新渲染視圖的明顯情況是太慢和資源密集型的。從vtkPoints刪除單個點
有沒有解決這個問題的方法?
謝謝, timecatcher
我有一個關於VTK類的問題,名爲vtkPoints。該類具有插入單個點的功能,但不具有刪除單個點的功能。這對於需要通過調用vtkPoints :: Modified()來更新視圖來再次驅動圖形管道以更新/重新呈現視圖來說很不方便。重新初始化vtkPoints,再次添加所有點以及更新/重新渲染視圖的明顯情況是太慢和資源密集型的。從vtkPoints刪除單個點
有沒有解決這個問題的方法?
謝謝, timecatcher
號:其對可變性相同的限制爲一個float []數組。刪除點的唯一方法是複製和排除。請注意,如果超出預先分配的存儲空間,則在執行Insert()操作時會產生相同的副本損失。
其他相關的數據結構選項包括vtkCollection和vtkPolyData。此外,查看某些PolyData剪輯篩選器的源代碼可能會提供信息,以瞭解這些類型的操作在內部實現的方式 - 這些操作應該儘可能快地處於數據結構的限制範圍內。
允許從vtkPoints中刪除點可能會導致使用該點的數據集損壞。您還必須刪除使用該點的所有單元格以及縮小點數據數組。
我會建議如果你有一個過濾器創建vtkPoints來修改vtkPoints對象和任何依賴於RequestData()方法的對象。
無法從vtkPoints刪除單個點。取決於你的問題在這裏有一些潛在的解決方案:
示例http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/DeletePoint有一個相當簡單的解決方案。通過過濾要刪除的id複製點到另一個臨時vtkPoints,並淺拷貝到原始的:
void ReallyDeletePoint(vtkSmartPointer<vtkPoints> points, vtkIdType id)
{
vtkSmartPointer<vtkPoints> newPoints =
vtkSmartPointer<vtkPoints>::New();
for(vtkIdType i = 0; i < points->GetNumberOfPoints(); i++)
{
if(i != id)
{
double p[3];
points->GetPoint(i,p);
newPoints->InsertNextPoint(p);
}
}
points->ShallowCopy(newPoints);
}