问题描述
我在尝试运行此代码时没有收到任何错误,但是没有呈现任何内容并且只出现一个空白屏幕。请让我知道我哪里出错了。 node_pos 是一个字典,其中所有节点坐标都以节点编号为键,G 是 networkx 图对象 G。此代码改编自 2005 年其他地方的代码,因此必须更新一些过时的 VTK 属性。
def draw_nxvtk(G,node_pos):
# set node positions
np={}
for n in G.nodes():
np[n]=node_pos[n]
nodePoints = vtk.vtkPoints()
i=0
for (x,y,z) in np.values():
nodePoints.InsertPoint(i,x,z)
i=i+1
# Create a polydata to be glyphed.
inputData = vtk.vtkpolyData()
inputData.SetPoints(nodePoints)
# Use sphere as glyph source.
balls = vtk.vtkSphereSource()
balls.SeTradius(.05)
balls.SetPhiResolution(20)
balls.SetThetaResolution(20)
glyPHPoints = vtk.vtkGlyph3D()
glyPHPoints.SetInputData(inputData)
glyPHPoints.SetSourceData(balls.Getoutput())
glyphMapper = vtk.vtkpolyDataMapper()
glyphMapper.SetInputData(glyPHPoints.Getoutput())
glyph = vtk.vtkActor()
glyph.SetMapper(glyphMapper)
glyph.Getproperty().SetDiffuseColor(plum)
glyph.Getproperty().Setspecular(.3)
glyph.Getproperty().SetspecularPower(30)
# Generate the polyline for the spline.
points = vtk.vtkPoints()
edgeData = vtk.vtkpolyData()
# Edges
lines = vtk.vtkCellArray()
i=0
for e in G.edges:
u=e[0]
v=e[1]
lines.InsertNextCell(2)
for n in (u,v):
(x,z)=node_pos[n]
points.InsertPoint(i,z)
lines.InsertCellPoint(i)
i=i+1
edgeData.SetPoints(points)
edgeData.SetLines(lines)
Tubes = vtk.vtkTubeFilter()
Tubes.SetNumberOfSides(16)
Tubes.SetInputData(edgeData)
Tubes.SeTradius(.01)
profileMapper = vtk.vtkpolyDataMapper()
profileMapper.SetInputData(Tubes.Getoutput())
profile = vtk.vtkActor()
profile.SetMapper(profileMapper)
profile.Getproperty().SetDiffuseColor(banana)
profile.Getproperty().Setspecular(.3)
profile.Getproperty().SetspecularPower(30)
ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
ren.AddActor(glyph)
ren.AddActor(profile)
renWin.SetSize(1000,1000)
iren.Initialize()
renWin.Render()
iren.Start()
解决方法
您错过了以下几行:
balls.Update()
glyphPoints.Update()
Tubes.Update()