python - 如何旋转 vtkVectorText 使其面向某个方向?

标签 python text vtk

我希望在某个位置(下例中的[1,1,1])有一个文本,该文本面向从原点[0,0,0]到文本位置[1]的方向,1,1]

我尝试计算 xy 和 xz 轴之间的两个旋转角度,并将它们应用到 RotateWXYZ 变换,但它不起作用。 在本例中,函数 GetAngleBetweenPoints 计算三个坐标之间的角度

此外,如果可能的话,我希望文本居中。

到目前为止我有这段代码:

from vtk import*
import numpy as np


def GetAngleBetweenPoints( endPt1, connectingPt, endPt2):
    x1 = endPt1[0] - connectingPt[0]
    y1 = endPt1[1] - connectingPt[1]
    x2 = endPt2[0] - connectingPt[0]
    y2 = endPt2[1] - connectingPt[1]
    angle = np.arctan2(y1, x1) - np.arctan2(y2, x2)
    angle = angle * 360 / (2 * np.pi)
    if (angle < 0) :
        angle += 360
    return angle


textSource = vtkVectorText()
textSource.SetText("Hello")
textSource.Update()

transfo = vtk.vtkTransform()
transfo.Identity()
transfo.PostMultiply()

x = 1
xo = 0
y = 1
yo = 0
z =1
zo = 1 
#angle Z
teta = GetAngleBetweenPoints( [x,y], [0,0], [xo,yo])
print(teta)
transfo.RotateWXYZ(+(teta),0, 0, 1)
# angle Y
teta = GetAngleBetweenPoints( [x,z], [0,0], [xo,zo])
print(teta)
transfo.RotateWXYZ(+(teta), 0, 1, 0)
transfo.Translate(x,y,z)

filter = vtk.vtkTransformPolyDataFilter()
filter.SetInputConnection(textSource.GetOutputPort())
filter.SetTransform(transfo)
filter.Update()



#Create a mapper and actor
mapper = vtkPolyDataMapper()
mapper.SetInputConnection(filter.GetOutputPort())

actor =vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(1.0, 0.0, 0.0)

#Create a renderer, render window, and interactor
renderer = vtkRenderer()
renderWindow = vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)

renderer.AddActor(actor)
renderer.AddActor(vtk.vtkAxesActor())
renderer.SetBackground(0.4, 0.3, 0.2)

renderWindow.Render()
style = vtk.vtkInteractorStyleMultiTouchCamera()
renderWindowInteractor.SetInteractorStyle(style)
renderWindowInteractor.Start() 

最佳答案

解决方案 vtkplotter :

from vtkplotter import Text

t = Text('hello', pos=(1,1,1), c='white', justify='center') # t is a vtkActor
t.orientation([1,1,1])
t.show()

enter image description here

关于python - 如何旋转 vtkVectorText 使其面向某个方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57676873/

相关文章:

python - 与多个 Python 脚本共享一个字典

python - 从 QTreeWidget 的子 Qtable 获取内容

c++ - QT 中的 2D vtk 渲染

c++ - OSX 10.11 上的 VTK 7 和 Qt5.6 OpenGL 渲染冲突

python - 将文件合并到大小大致相等的目录中

python - Django REST Framework - 无法覆盖 ListAPIView 中的列表

css - 如何为输入字段中的文本添加边框

mysql - php 生成的文本和键盘编写的文本看起来相同,但 diff(和 MySQL 查询)有 100% 不同

asp.net - 修改Asp gridview boundfield

transparency - VTK:设置透明渲染器背景