我是python和VTK新手,请耐心等待:)
简言之,我有一个演员,我想围绕我使用vtkLineSource()绘制的一条线旋转它。我选择了起点和终点,然后画了一条线。现在我想的是(如果我错了,请纠正我),我应该在直线上做一个轴,然后应用vtkTransformWXYZ()绕轴旋转。它不起作用,它会围绕所选的点进行奇怪的旋转,但不是我想要的。 我还尝试在我绘制的线的中间定义轴并对其应用旋转,但当我尝试时,它会围绕全局坐标旋转,而不是局部坐标。我也试着输入点或线,但同样,旋转非常奇怪
有没有办法将直线定义为一个轴,并围绕轴旋转演员?到目前为止,我尝试了以下例子:https://lorensen.github.io/VTKExamples/site/Python/PolyData/RotationAroundLine/和https://lorensen.github.io/VTKExamples/site/Python/Rendering/Rotations/但是我的演员总是以一种奇怪的方式旋转
谁能帮我指一下正确的方向吗
这是我的代码中我试图旋转演员的部分
###################### create line to rotate about and display it
lineStart = [16.8879, -106.476, -782.449]
lineFinish = [-17.827, -92.2757, lineStart[2]]
lineMiddle = [(lineStart[0]+lineFinish[0])/2, (lineStart[1]+lineFinish[1])/2, lineStart[2]]
lineSource = vtk.vtkLineSource()
lineSource.SetPoint1(lineStart)
lineSource.SetPoint2(lineFinish)
lineSource.Update()
mapperLine = vtk.vtkPolyDataMapper()
mapperLine.SetInputConnection(lineSource.GetOutputPort())
actorLine = vtk.vtkActor()
actorLine.SetMapper(mapperLine)
actorLine.GetProperty().SetLineWidth(4)
actorLine.GetProperty().SetColor(1,0,0)
ren.AddActor(actorLine)
############# rotate about the line
modelMapper = vtk.vtkPolyDataMapper()
modelMapper.SetInputData(cleanFilter.GetOutput())
modelActor = vtk.vtkActor()
modelActor.SetMapper(modelMapper)
modelAxesSource = vtk.vtkAxes()
modelAxesSource.SetScaleFactor(100)
modelAxesSource.SetOrigin(lineMiddle)
modelAxesMapper = vtk.vtkPolyDataMapper()
modelAxesMapper.SetInputConnection(modelAxesSource.GetOutputPort())
modelAxes = vtk.vtkActor()
modelAxes.SetMapper(modelAxesMapper)
ren.AddActor(modelAxes)
modelAxes.VisibilityOn()
##this did not work
##modelActor.SetOrientation(lineMiddle)
##modelActor.RotateZ(45)
##ren.AddActor(modelActor)
transform = vtk.vtkTransform()
transform.RotateWXYZ(45, lineMiddle)
transformFilter = vtk.vtkTransformPolyDataFilter()
transformFilter.SetTransform(transform)
transformFilter.SetInputConnection(cleanFilter.GetOutputPort())
transformFilter.Update()
NewMapper = vtk.vtkPolyDataMapper()
NewMapper.SetInputConnection(transformFilter.GetOutputPort())
actorRotated = vtk.vtkActor()
actorRotated.SetMapper(NewMapper)
ren.AddActor(actorRotated)
我还尝试了以下方法:
rotate = vtk.vtkRotationFilter()
rotate.SetInputConnection(cleanFilter.GetOutputPort())
rotate.SetAxisToY()
rotate.SetCenter(lineMiddle)
rotate.SetAngle(45)
mapper = vtk.vtkDataSetMapper()
mapper.SetInputConnection(rotate.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
ren.AddActor(actor)
但它没有显示任何内容
感谢您的帮助
提前感谢,, 戴安娜
您可能需要编写一些函数,如this:
使用vedo测试它:
相关问题 更多 >
编程相关推荐