[英]python vtk tube filter returns empty array
我正在嘗試使用 vtkTubeFilter 對象圍繞點線獲取管。 由於我有自己的專用渲染代碼,我想直接獲取頂點,而不僅僅是過濾器對象。 我正在嘗試使用以下方法在numpy
數組和 VTK 數據結構之間進行轉換
field = vtk.vtkFieldData()
field.AddArray(vtk_numpy_support.numpy_to_vtk(center_line))
但最后似乎代碼只是返回一個空數組。
我必須以某種方式執行過濾器嗎? 或者也許把點放入數據結構的方法是錯誤的? 我之前沒有對VTK做過任何事情,所以我對過濾器管道結構還不是很熟悉。 任何指向正確方向的指針將不勝感激!
下面是重現問題的完整代碼:
import numpy as np
import vtk
from vtk.util import numpy_support as vtk_numpy_support
n = 6
radius = 5.0
center_line = np.array([[-36.78, 19.78, -37.82],
[37.65, 20.04, -35.89],
[-38.85, 20.39, -32.84],
[-39.85, 20.68, -29.65],
[-40.57, 20.89, -26.37],
[-40.98, 21. , -23.02],
[-41.05, 21.01, -19.67],
[-40.78, 20.93, -16.34],
[-40.21, 20.75, -13.07],
[-39.33, 20.48, -9.86],
[-38.14, 20.12, -6.72],
[-36.66, 19.67, -3.68],
[-34.95, 19.15, -0.75]])
tube_filter = vtk.vtkTubeFilter()
tube_filter.SetNumberOfSides(n)
tube_filter.SetCapping(True)
tube_filter.SetRadius(radius)
field = vtk.vtkFieldData()
field.AddArray(vtk_numpy_support.numpy_to_vtk(center_line))
data_obj = vtk.vtkDataObject()
data_obj.SetFieldData(field)
tube_filter.SetInputData(data_obj)
vertices = vtk_numpy_support.vtk_to_numpy(tube_filter.GetOutput().GetVerts().GetData())
print(vertices)
輸出:
/home/user/anaconda3/lib/python3.6/site-packages/vtk/util/numpy_support.py:137: FutureWarning: Conversion of the second argument of issubdtype from `complex` to `np.complexfloating` is deprecated. In future, it will be treated as `np.complex128 == np.dtype(complex).type`.
assert not numpy.issubdtype(z.dtype, complex), \
[]
PS:我也不太確定為什么將數組解釋為復雜類型。 在我的調試器中,它顯示為正常的float64
數字。
使用vtkplotter :
from vtkplotter import Tube
center_line = [ [-36.78, 19.78, -37.82],
[-37.65, 20.04, -35.89],
[-38.85, 20.39, -32.84],
[-39.85, 20.68, -29.65],
[-40.57, 20.89, -26.37],
[-40.98, 21. , -23.02],
[-41.05, 21.01, -19.67],
[-40.78, 20.93, -16.34],
[-40.21, 20.75, -13.07],
[-39.33, 20.48, -9.86],
[-38.14, 20.12, -6.72],
[-36.66, 19.67, -3.68],
[-34.95, 19.15, -0.75] ]
t = Tube(center_line, r=5, cap=True, res=6)
print(t.points()) # numpy array
t.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.