vtkRenderWindow不打开图形窗口

2024-10-01 17:35:56 发布

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

vtkRenderWindow在编译python代码后不会打开窗口。你知道吗

我找到了一个基本的vtk例子来解决这个问题,但我似乎找不到任何解决方案。你知道吗

代码运行时没有任何错误,但是没有打开窗口来显示图像。你知道吗

我在matplotlib上也遇到了同样的问题,必须将后端更改为TkAgg才能显示任何图形。你知道吗

谢谢你的帮助!你知道吗

import vtk
from vtk.util.colors import tomato

cylinder = vtk.vtkCylinderSource()
cylinder.SetResolution(8)

cylinderMapper = vtk.vtkPolyDataMapper()
cylinderMapper.SetInputConnection(cylinder.GetOutputPort())

cylinderActor = vtk.vtkActor()
cylinderActor.SetMapper(cylinderMapper)
cylinderActor.GetProperty().SetColor(tomato)
cylinderActor.RotateX(30.0)
cylinderActor.RotateY(-45.0)

ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

ren.AddActor(cylinderActor)
ren.SetBackground(0.1, 0.2, 0.4)
renWin.SetSize(200, 200)


iren.Initialize()

ren.ResetCamera()
ren.GetActiveCamera().Zoom(1.5)
renWin.Render()
iren.Start()


Tags: 代码import错误解决方案例子vtk代码运行ren
2条回答

将vtkrender对象添加到vtkRenderWindow对象后,您正在修改它。另外,在将vtkRenderWindow对象设置为interactior对象之后,可以修改它。我建议保持有序(一个接一个)未测试,需要Mesa 10.6.5或更高版本和OpenGL 3.2。或更高版本:

# -*- coding: UTF-8 -*-

import vtk
from vtk.util.colors import tomato

if __name__ == '__main__':

  cylinder = vtk.vtkCylinderSource()
  cylinder.SetResolution(8)

  cylinderMapper = vtk.vtkPolyDataMapper()
  cylinderMapper.SetInputConnection(cylinder.GetOutputPort())

  cylinderActor = vtk.vtkActor()
  cylinderActor.SetMapper(cylinderMapper)
  cylinderActor.GetProperty().SetColor(tomato)
  cylinderActor.RotateX(30.0)
  cylinderActor.RotateY(-45.0)

  ren = vtk.vtkRenderer()
  ren.AddActor(cylinderActor)
  ren.SetBackground(0.1, 0.2, 0.4)
  ren.ResetCameraClippingRange()  #instead of ren.ResetCamera()
  #ren.GetActiveCamera().Zoom(1.5) #keep this out for a while (suspicious, because you request a zoom without doing something with it)

  renWin = vtk.vtkRenderWindow()
  renWin.AddRenderer(ren)
  renWin.SetWindowName("some title") #just a bonus
  renWin.SetSize(200, 200)

  #style = vtk.vtkInteractorStyleTrackballCamera() #later uncomment this for test
  iren = vtk.vtkRenderWindowInteractor()
  iren.SetRenderWindow(renWin)
  #iren.SetInteractorStyle(style) #later uncomment this for test
  iren.Initialize()

  renWin.Render()
  iren.Start()

使用vtkplotter助手模块:

from vtkplotter import Cylinder

c = Cylinder(c='tomato', res=8)
c.rotateX(30.0).rotateY(-45.0)
c.show(size=(200,200), bg=(0.1,0.2,0.4), zoom=1.5, title='some title')

相关问题 更多 >

    热门问题