本人菜鸟一只,求了解等值面绘制的大神进来看看,急需大神指点!
vtk吧
全部回复
仅看楼主
level 5
进击D菊花 楼主
本人由于毕业论文涉及,初学VTK,主要在pycharm上用VTK模块做雷达数据可视化。最近做等值面的时候怎么运行都没有东西,快急哭了,求大神帮帮忙[泪]
2017年05月23日 14点05分 1
level 5
进击D菊花 楼主
楼下贴代码
2017年05月23日 14点05分 2
level 5
进击D菊花 楼主
f = file('aa.txt')
lines = f.readlines()[1:368]
f.close()
points = vtk.vtkPoints()
total_num = 0
values = []
for line in lines:
data = line.split(',')
data_num = (len(data) - 1) / 4
i = 0
j = 1
k = 2
d = 3
for n in range(0, data_num):
x = float(data[i])
y = float(data[j])
z = float(data[k])/100
#z = z / 100
values.append(data[d])
point_place = [x, y, z]
points.InsertNextPoint(point_place)
i += 4
j += 4
k += 4
d += 4
total_num += data_num
datavalue = vtk.vtkIntArray()
datavalue.SetNumberOfComponents(1)
for element in values:
e = int(element)
datavalue.InsertNextValue(e)
grid = vtk.vtkStructuredGrid()
grid.SetDimensions(data_num, 367, 1)
grid.SetPoints(points)
grid.GetPointData().SetScalars(datavalue)
contour = vtk.vtkContourFilter()
contour.SetInputData(grid)
contour.GenerateValues(2, 40, 50)
contour.SetComputeNormals(1)
contour.SetComputeScalars(1)
contour.Update()
smooth = vtk.vtkSmoothPolyDataFilter()
smooth.SetInputData(contour.GetOutput())
smooth.SetNumberOfIterations(500)
normals = vtk.vtkPolyDataNormals()
normals.SetInputData(contour.GetOutput())
normals.SetFeatureAngle(30.0)
normals.SetComputeCellNormals(0)
normals.SetComputePointNormals(1)
normals.SetFlipNormals(0)
normals.SetSplitting(1)
strip = vtk.vtkStripper()
strip.SetInputData(normals.GetOutput())
mapper = vtk.vtkDataSetMapper()
if vtk.VTK_MAJOR_VERSION <= 5:
mapper.SetInput(strip.GetOutput())
else:
mapper.SetInputData(strip.GetOutput())
mapper.SetLookupTable(color)
mapper.SetScalarRange(-5, 75)
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
renderer.AddActor(actor)
renderer.SetBackground(0, 0, 0)
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderWindow.Render()
renderWindowInteractor.Start()
2017年05月23日 14点05分 3
level 12
[哈哈]终于找到了
2017年05月24日 00点05分 4
level 12
grid = vtk.vtkStructuredGrid()
grid.SetDimensions(data_num, 367, 1)
grid.SetPoints(points)
grid.GetPointData().SetScalars(datavalue)
contour = vtk.vtkContourFilter()
contour.SetInputData(grid)
contour.GenerateValues(2, 40, 50)
contour.SetComputeNormals(1)
contour.SetComputeScalars(1)
contour.Update()
目测是这几个参数的鬼
2017年05月24日 00点05分 5
level 5
进击D菊花 楼主
grid的参数应该是没问题的,因为我能够正常的显示grid,底下contour里面我觉得values那里也应该是对的吧,因为值里面40,50都有,那是最后俩错了么,我不知道最后俩是什么意思,能教教我么
2017年05月24日 00点05分 6
level 5
进击D菊花 楼主
吧主大大,我自己做了个简单的例子试了一下,发现还是不能显示,是不是我哪里的设置出了问题,代码如下:
import vtk
def colortable():
vlt = vtk.vtkLookupTable()
vlt.SetNumberOfColors(3)
vlt.SetTableValue(0, 0.98, 0.98, 0.98, 1)
vlt.SetTableValue(1, 0.65, 0.98, 0.65, 1)
vlt.SetTableValue(2, 0.54, 0.54, 0, 1)
vlt.Build()
color = colortable()
points = vtk.vtkPoints()
points.InsertNextPoint(0.0, 0.0, 0.0)
points.InsertNextPoint(0.0, 1.0, 1.0)
points.InsertNextPoint(0.0, 2.0, 0.0)
points.InsertNextPoint(1.0, 0.0, 0.0)
points.InsertNextPoint(1.0, 1.0, 1.0)
points.InsertNextPoint(1.0, 2.0, 0.0)
points.InsertNextPoint(2.0, 0.0, 0.0)
points.InsertNextPoint(2.0, 1.0, 1.0)
points.InsertNextPoint(2.0, 2.0, 0.0)
datavalue = vtk.vtkIntArray()
datavalue.SetNumberOfComponents(1)
for i in range(1, 4):
datavalue.InsertNextValue(int(i))
datavalue.InsertNextValue(int(i))
datavalue.InsertNextValue(int(i))
grid = vtk.vtkStructuredGrid()
grid.SetDimensions(3, 3, 1)
grid.SetPoints(points)
grid.GetPointData().SetScalars(datavalue)
contour = vtk.vtkContourFilter()
contour.SetInputData(grid)
contour.SetValue(0, 1)
contour.ComputeNormalsOn()
contour.ComputeScalarsOn()
contour.Update()
normals = vtk.vtkPolyDataNormals()
normals.SetInputData(contour.GetOutput())
normals.SetFeatureAngle(60)
normals.SetComputeCellNormals(0)
normals.SetComputePointNormals(1)
normals.SetFlipNormals(0)
normals.SetSplitting(1)
strip = vtk.vtkStripper()
strip.SetInputData(normals.GetOutput())
mapper = vtk.vtkPolyDataMapper()
if vtk.VTK_MAJOR_VERSION <= 5:
mapper.SetInput(strip.GetOutput())
else:
mapper.SetInputData(strip.GetOutput())
mapper.SetLookupTable(color)
mapper.SetScalarRange(1, 3)
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
renderer.AddActor(actor)
renderer.SetBackground(0, 0, 0)
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderWindow.Render()
renderWindowInteractor.Start()
2017年05月24日 02点05分 7
level 5
进击D菊花 楼主
吧主大大,我自己改了改代码发现,把SetInputData(*.GetOutput())改成SetInputConnection(*.GetOutputPort())就能显示了,但是感觉显示的是等值线啊,是不是我的strip有问题啊
2017年05月24日 07点05分 10
level 7
根据我多年的经验,scalar指最好是double活着float,使用整形计算各种不正常
2017年06月14日 14点06分 11
1