我尝试使用pythonwrapper for VTK在一个场景中显示多个glyph,每个glyph都有自己的颜色和旋转。不幸的是,vtk只考虑了旋转(使用vtkTensorGlyph
)。相反,当我使用vtkGlyph3D
时,只考虑颜色。在
下面是一段带有vtkTensorGlyph
的现成代码。每个立方体应该有一个随机的颜色,但是它们都是相同的颜色。我反复阅读了VTK的文档,但没有找到任何解决方案。在
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import vtk
import scipy.linalg as sc
import random as ra
import numpy as np
import itertools
points = vtk.vtk.vtkPoints() # where to locate each glyph in the scene
tensors = vtk.vtkDoubleArray() # rotation for each glyph
tensors.SetNumberOfComponents(9)
colors = vtk.vtkUnsignedCharArray() # should be the color for each glyph
colors.SetNumberOfComponents(3)
# let's make 10 cubes in the scene
for i in range(0, 50, 5):
points.InsertNextPoint(i, i, i) # position of a glyph
colors.InsertNextTuple3(ra.randint(0, 255), ra.randint(0, 255), ra.randint(0, 255) ) # pick random color
rot = list(itertools.chain(*np.reshape(sc.orth(np.random.rand(3, 3)).transpose(), (1, 9)).tolist())) # random rotation matrix (row major)
tensors.InsertNextTuple9(*rot)
polydata = vtk.vtkPolyData() # create the polydatas
polydata.SetPoints(points)
polydata.GetPointData().SetTensors(tensors)
polydata.GetPointData().SetScalars(colors)
cubeSource = vtk.vtkCubeSource()
cubeSource.Update()
glyphTensor = vtk.vtkTensorGlyph()
glyphTensor.SetColorModeToScalars() # is it really work ?
try:
glyphTensor.SetInput(polydata)
except AttributeError:
glyphTensor.SetInputData(polydata)
glyphTensor.SetSourceConnection(cubeSource.GetOutputPort())
glyphTensor.ColorGlyphsOn() # should not color all cubes independently ?
glyphTensor.ThreeGlyphsOff()
glyphTensor.ExtractEigenvaluesOff()
glyphTensor.Update()
# next is usual vtk code
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(glyphTensor.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
ren = vtk.vtkRenderer()
ren.SetBackground(0.2, 0.5, 0.3)
ren.AddActor(actor)
renwin = vtk.vtkRenderWindow()
renwin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetInteractorStyle(vtk.vtkInteractorStyleTrackballCamera())
iren.SetRenderWindow(renwin)
renwin.Render()
iren.Initialize()
renwin.Render()
iren.Start()
您可以按以下方式为vtktensorglyph涂上不同的颜色。我会用不同颜色的张量字形来展示我的C++代码的一些片段。我希望您可以将类似的东西集成到您的python代码中:
虽然VTK开发人员可能打算使用RGB元组来定义颜色,但只需使用第一个参数“r”。在[0,1]的间隔内改变“r”将导致不同的颜色。在
使用VTK 6.1.0
我终于想办法做点什么了。 如果我很清楚,字形需要一个曲面,尤其是构成该曲面的每个点上的法线。每个法线给出每个字形的方向。 vtk源代码中
Examples/VisualizationAlgorithms/Python/spikeF.py
处的示例说明了我的意思。 下面是一个单独着色和旋转字形的小例子。在顺便说一句,还有一个更简单的解决方案,即创建一个源,以及所需的任何映射器和参与者。事实上,给每个演员一个颜色和方向是很容易的。问题是,对于很多演员(我的机器上大约有5000场)来说,表演对互动是很不利的。在
相关问题 更多 >
编程相关推荐