import vtk
rd = vtk.vtkPolyDataReader()
rd.SetFileName('Test.vtk')
curv = vtk.vtkCurvatures()
curv.SetInputConnection(rd.GetOutputPort())
curv.SetCurvatureTypeToGaussian()
curv.Update()
pd = curv.GetOutput()
for i in range(pd.GetPointData().GetNumberOfArrays()):
print(pd.GetPointData().GetArrayName(i))
# This will print the following:
# PointIds
# PointNormals
# Gauss_Curvature
# To set the active scalar to Gauss_Curvature
pd.GetPointData().SetActiveScalars('Gauss_Curvature')
curvdiff = vtk.vtkCellDerivatives()
curvdiff.SetInputData(pd)
curvdiff.SetVectorModeToComputeGradient()
curvdiff.Update()
writer = vtk.vtkPolyDataWriter()
writer.SetFileName('Output.vtk')
writer.SetInputConnection(curvdiff.GetOutputPort())
writer.Write()
我认为你的代码是正确的。但是我们需要确保曲率点数据数组是当前活动的标量数组。我附加了一个输入数据文件,您可以用
'Test.vtk'
保存该文件。它有两个点数据数组pointid(标量数组)和PointNormals(向量数组)。然后我们将计算高斯曲率,它将成为点数据的第三个标量数组。我们将打印所有点数据数组的名称,而不管它们是标量还是向量。然后我们将显式地将'Gauss_Curvature'
标量数组设置为活动标量。我们将计算单元导数,它将创建一个称为'ScalarGradient'
的单元格数据向量数组,它将是曲率的梯度。这将保存在一个文件'Output.vtk'
给出了以下输出,首先是曲率,然后是梯度。请注意,这两个图形中的色阶是不同的。因此,曲率和导数值是不同的,尽管颜色方案使它们看起来相似。在
如果您想重现结果,输入vtk文件如下所示
^{pr2}$相关问题 更多 >
编程相关推荐