0

I am trying to export a VTK rendering as an OBJ file to be viewed in Meshlab. Everything appears normal until I open the .obj file in Meshlab, where only the spheres have been exported and not any of the tubes I have connecting the spheres. I have tried exporting the rendering in different file types but only the spheres are exported for some reason. Could it be because the tube filter doesn't actually create a 3D object? Looking for any solutions to this problem! The writer is at the bottom of the code. Thanks

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, y, 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(.1) 
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,y,z)=node_pos[n] 
        points.InsertPoint(i, x, y, z) 
        lines.InsertCellPoint(i) 
        i=i+1 

edgeData.SetPoints(points) 
edgeData.SetLines(lines) 


Tubes = vtk.vtkTubeFilter() 
Tubes.SetNumberOfSides(16) 
Tubes.SetInputData(edgeData) 
Tubes.SetRadius(0.05)       # edge RADIUS 

profileMapper = vtk.vtkPolyDataMapper() 
profileMapper.SetInputData(Tubes.GetOutput()) 

balls.Update()

glyphPoints.Update()

Tubes.Update()    


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(profile)
ren.AddActor(glyph) 
 

renWin.SetSize(1000, 1000) 

iren.Initialize() 
renWin.Render() 

iren.Start()     

writer = vtk.vtkOBJExporter()
writer.SetFilePrefix('test')
writer.SetInput(renWin)
writer.Write()    
Matt
  • 5
  • 2

0 Answers0