如何将VTK渲染保存为.VTK或.stl?

2024-07-03 07:42:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经为最初在Networkx中创建的3D网络创建了一个渲染,但是现在有了这个渲染,我最终希望将其导出为单个.stl文件。从下面的代码中,我将如何将glyph、tube、ball组合到一个文件中。如果无法导出到.stl,.vtk也可以,因为它可以在Paraview中转换

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

renWin.SetSize(1000, 1000) 

iren.Initialize() 
renWin.Render() 
iren.Start() 

Tags: forprofilelinesvtkglyphtubesrenrenwin
1条回答
网友
1楼 · 发布于 2024-07-03 07:42:50

VTK有导出器类,您可以在此处看到: https://vtk.org/doc/nightly/html/classvtkExporter.html

其中,我认为OBJ最接近STL。您可以将场景导出到OBJ,然后使用MeshLab将该OBJ转换为STL。VRML也可以工作

相关问题 更多 >