繁体   English   中英

查找vtkImageData的来源和大小

[英]Find vtkImageData origin and size

我有一个包含3个视口(3个vtkRenderers)的应用。 在他们每个人身上,我都有一个vtkImageReslice。 这些vtkImageReslice可以缩放,移动,旋转等。

我有一个任务在每个vtkImageReslice上画一条线(vtkLine或其他东西)……如何知道每个vtkRenderer上vtkImageReslice的来源和大小?

知道vtkRenderer的来源和大小非常简单:

int* pOrigin = m_pRenderer->GetOrigin();
int* pSize = m_pRenderer->GetSize();
TRACE("Origin: %d.%d, Size: %d.%d\n", pOrigin[0], pOrigin[1], pSize[0], pSize[1]);

在m_pRenderer上,我有一个m_pReslice(vtkImageReslice)...我如何知道m_pReslice的起点和大小以在其上画一条线?

我感谢每一个提示,建议,任何东西...

[稍后编辑]我认为我对此事的描述不够好,因此我在此处发布了图片:

在此处输入图片说明 我唯一需要知道的是来自特定渲染器的图像数据的来源和大小...该图片可以移动,旋转,缩放等。

[甚至以后的编辑]我还要附上一张图片,说明我正在尝试做的事情:

在此处输入图片说明

当我缩放到vtiImageActor时,水平绿线必须变宽:

在此处输入图片说明

在我的学位论文中,我做了医学上的应用,以对图像进行切片和其他很多事情,其中​​包括在vtk图像演员上切片和画线。 我是在python中完成的,我将在此处放置一段代码,也许会对您有所帮助。 这段代码确实在该切片上切片并画了一条线,当然,有许多类属性,但是我希望通过这段代码您能理解本质。

self.renderXZ = vtk.vtkRenderer()
self.renderXZ.SetBackground(0,0,0)
self.interactorStyleXZ = vtk.vtkInteractorStyleImage()
self.xz.GetRenderWindow().AddRenderer(self.renderXZ)
self.xz.SetInteractorStyle(self.interactorStyleXZ)

#creating image actor

    self.imageActorXZ = vtk.vtkImageActor()
    self.imageActorXZ.SetDisplayExtent(self.imageXZ.GetWholeExtent())

#getting the dimensions
    xMin, xMax, yMin, yMax, zMin, zMax = self.image.GetWholeExtent()

#changing slice
    self.changeSliceXZ(yMax/2)
    slice = self.imageActorXZ.GetSliceNumber()

    max = self.imageActorXZ.GetWholeZMax()

    self.renderXZ.AddActor(self.imageActorXZ)
    self.xz.GetRenderWindow().SetSize(522,243)
    XZ_XSize,XZ_YSize = self.renderXZ.GetSize()

#drawing a Line
    rectMapper = self.drawLine(0, XZ_YSize/2, XZ_XSize, XZ_YSize/2)
    self.HorizontalLineActorXZ = vtk.vtkActor2D()
    self.HorizontalLineActorXZ.SetMapper(rectMapper)
    self.renderXZ.AddActor2D(self.HorizontalLineActorXZ)

#and the changeSliceXZ function is this

def changeSliceXZ(self,sliceNumber):
    slicer = vtkImageSlicer()
    slicer.SetInput(self.image)

#putting the direction of the slice
    slicer.SetSliceDirection(1)
    slicer.SetSlice(sliceNumber)
    slicer.Update()

    self.imageXZ = slicer.GetOutput()
    self.imageActorXZ.SetInput(self.imageXZ)
    self.xz.GetRenderWindow().Render()
    self.YSlice = sliceNumber
    self.SliceNumber[1] = sliceNumber

您可能会想到小部件。 有很多VTK小工具

例如ImagePlaneWidget管道

vtkImagePlaneWidget myWidget = vtkImagePlaneWidget.New();
myWidget.SetInput(myDicomImageReader.GetOutput());
myWidget.SetPlaneOrientationToYAxes();
myWidget.SetSliceIndex(mySliceIndexNumber);
myWidget.SetInteractor(myInteractor);
myWidget.GetPlaneProperty().SetColor(1.0,0.0,0.0);

vtkOutlineFilter outlineFilter = vtkOutlineFilter.New();
outlineFilter.SetInputConnection(myDicomImageReader.GetOutputPort());

vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
mapper.SetInputConnection(outlineFilter.GetOutputPort();

vtkActor actor = vtkActor.New();
actor.SetMapper(mapper);

myImageViewer.GetRenderer().AddActor(actor);

RenderWindow.Render();
myWidget.On();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM