Ejemplo n.º 1
0
    def initialize(self):
        self.layoutManager = slicer.app.layoutManager()
        self.threeDWidget = self.layoutManager.threeDWidget(0)
        self.threeDView = self.threeDWidget.threeDView()
        self.renderWindow = self.threeDView.renderWindow()
        self.renderers = self.renderWindow.GetRenderers()
        self.renderer = self.renderers.GetFirstRenderer()

        self.polydata = vtk.vtkPolyData()
        self.points = vtk.vtkPoints()
        self.planeSource = vtk.vtkPlaneSource()
        self.mapper = vtk.vtkPolyDataMapper()
        self.actor = vtk.vtkActor()
        self.renderer.AddViewProp(self.actor)
        self.renderWindow.AddRenderer(self.renderer)
 def initialize(self):
     self.layoutManager=slicer.app.layoutManager()
     self.threeDWidget=self.layoutManager.threeDWidget(0)
     self.threeDView=self.threeDWidget.threeDView()
     self.renderWindow=self.threeDView.renderWindow()
     self.renderers=self.renderWindow.GetRenderers()
     self.renderer=self.renderers.GetFirstRenderer()
     
     self.polydata = vtk.vtkPolyData()
     self.points = vtk.vtkPoints()
     self.planeSource = vtk.vtkPlaneSource()
     self.mapper = vtk.vtkPolyDataMapper()
     self.actor = vtk.vtkActor()
     self.renderer.AddViewProp(self.actor)
     self.renderWindow.AddRenderer(self.renderer)
Ejemplo n.º 3
0
  def __init__(self):
    self.scene = slicer.mrmlScene
    self.scene.SetUndoOn()
    self.scene.SaveStateForUndo(self.scene.GetNodes())
    
    self.currentSlice = Slice('/luscinia/ProstateStudy/invivo/Patient59/loupas/RadialImagesCC_imwrite/arfi_ts3_26.57.png')

    # yay, adding images to slicer
    planeSource = vtk.vtkPlaneSource()
    planeSource.SetCenter(self.currentSlice.x, self.currentSlice.y, self.currentSlice.z)
    reader = vtk.vtkPNGReader()
    reader.SetFileName(self.currentSlice.name)

    # model node
    self.model = slicer.vtkMRMLModelNode()
    self.model.SetScene(self.scene)
    self.model.SetName(self.currentSlice.name)
    self.model.SetAndObservePolyData(planeSource.GetOutput())

    # model display node
    self.modelDisplay = slicer.vtkMRMLModelDisplayNode()
    self.modelDisplay.BackfaceCullingOff() # so plane can be seen from both front and back face
    self.modelDisplay.SetScene(self.scene)
    self.scene.AddNode(self.modelDisplay)

    # connecting model node w/ its model display node
    self.model.SetAndObserveDisplayNodeID(self.modelDisplay.GetID())

    # adding tiff file as texture to modelDisplay
    self.modelDisplay.SetAndObserveTextureImageData(reader.GetOutput())
    self.scene.AddNode(self.model)

    # now doing a linear transform to set coordinates and orientation of plane
    self.transform = slicer.vtkMRMLLinearTransformNode()
    self.scene.AddNode(self.transform)
    self.model.SetAndObserveTransformNodeID(self.transform.GetID())
    vTransform = vtk.vtkTransform()
    vTransform.Scale(150, 150, 150)
    vTransform.RotateX(0)
    vTransform.RotateY(0)
    vTransform.RotateZ(0)

    self.transform.SetAndObserveMatrixTransformToParent(vTransform.GetMatrix())
Ejemplo n.º 4
0
  def selectSlice(self, index):
    self.scene.Undo()
    self.scene.SaveStateForUndo(self.scene.GetNodes())
    imgFilePrefix = './data/test'
    imgFileSuffix = '.tiff'
    # yay, adding images to slicer
    planeSource = vtk.vtkPlaneSource()

    reader = vtk.vtkTIFFReader()
    reader.SetFileName(imgFilePrefix + str(self.imageList[index]) + imgFileSuffix)
    #reader.CanReadFile('imgFilePrefix + str(self.imageList[0]) + imgFileSuffix')

    # model node
    model = slicer.vtkMRMLModelNode()
    model.SetScene(self.scene)
    model.SetName("test " + str(self.imageList[index]) + "cow")
    model.SetAndObservePolyData(planeSource.GetOutput())

    # model display node
    modelDisplay = slicer.vtkMRMLModelDisplayNode()
    modelDisplay.BackfaceCullingOff() # so plane can be seen from both front and back face
    modelDisplay.SetScene(self.scene)
    self.scene.AddNode(modelDisplay)

    # connecting model node w/ its model display node
    model.SetAndObserveDisplayNodeID(modelDisplay.GetID())

    # adding tiff file as texture to modelDisplay
    modelDisplay.SetAndObserveTextureImageData(reader.GetOutput())
    self.scene.AddNode(model)

    # now doing a linear transform to set coordinates and orientation of plane
    transform = slicer.vtkMRMLLinearTransformNode()
    self.scene.AddNode(transform)
    model.SetAndObserveTransformNodeID(transform.GetID())
    vTransform = vtk.vtkTransform()
    vTransform.Scale(150, 150, 150)
    vTransform.RotateX(self.rotateXList[index])
    vTransform.RotateY(self.rotateYList[index])
    vTransform.RotateZ(self.rotateZList[index])

    transform.SetAndObserveMatrixTransformToParent(vTransform.GetMatrix())
  def PointsToPlanePolyData( self, inPoints, reverse ):

    # Create the oriented bounding box
    # This gives us one plane on the bounding box, not the plane of best fit
    corner = [ 0, 0, 0 ]
    maxVector = [ 0, 0, 0 ]
    midVector = [ 0, 0, 0 ]
    minVector = [ 0, 0, 0 ]
    size = [ 0, 0, 0 ]    
    obb = vtk.vtkOBBTree()
    obb.ComputeOBB( inPoints, corner, maxVector, midVector, minVector, size )
    
    # Calculate the mean of the points on the plane
    base = self.CalculateMean( inPoints )
    relBase = [ 0, 0, 0 ]
    # Find the projection of the mean point in the minVector direction
    vtk.vtkMath().Subtract( base, corner, relBase )
    normal = minVector[:]
    vtk.vtkMath().Normalize( normal )
    dot = vtk.vtkMath().Dot( relBase, normal )
    dot = 0
    proj = normal[:]
    vtk.vtkMath().MultiplyScalar( proj, dot )
    
    print dot
    
    # Find the points on the plane
    origin = [ 0, 0, 0 ]
    point1 = [ 0, 0, 0 ]
    point2 = [ 0, 0, 0 ]
    vtk.vtkMath().Add( corner, proj, origin )
    vtk.vtkMath().Add( origin, maxVector, point1 )
    vtk.vtkMath().Add( origin, midVector, point2 )
    
    # Construct the plane
    plane = vtk.vtkPlaneSource()
    plane.SetOrigin( origin )
    plane.SetPoint1( point1 )
    plane.SetPoint2( point2 )
    plane.Update()
    
    return plane.GetOutput()
Ejemplo n.º 6
0
  def updateScene(self):
    #self.scene.Undo()
    #self.scene.SaveStateForUndo(self.scene.GetNodes())
    self.scene.RemoveNode(self.transform)
    self.scene.RemoveNode(self.modelDisplay)
    self.scene.RemoveNode(self.model)

    planeSource = vtk.vtkPlaneSource()
    planeSource.SetCenter(self.currentSlice.x, self.currentSlice.y, self.currentSlice.z)
    reader = vtk.vtkPNGReader()
    reader.SetFileName(self.currentSlice.name)

    # model node
    self.model = slicer.vtkMRMLModelNode()
    self.model.SetScene(self.scene)
    self.model.SetName(self.currentSlice.name)
    self.model.SetAndObservePolyData(planeSource.GetOutput())

    # model display node
    self.modelDisplay = slicer.vtkMRMLModelDisplayNode()
    self.modelDisplay.BackfaceCullingOff() # so plane can be seen from both front and back face
    self.modelDisplay.SetScene(self.scene)
    self.scene.AddNode(self.modelDisplay)

    # connecting model node w/ its model display node
    self.model.SetAndObserveDisplayNodeID(self.modelDisplay.GetID())

    # adding tiff file as texture to modelDisplay
    self.modelDisplay.SetAndObserveTextureImageData(reader.GetOutput())
    self.scene.AddNode(self.model)

    # now doing a linear transform to set coordinates and orientation of plane
    self.transform = slicer.vtkMRMLLinearTransformNode()
    self.scene.AddNode(self.transform)
    self.model.SetAndObserveTransformNodeID(self.transform.GetID())
    vTransform = vtk.vtkTransform()
    vTransform.Scale(self.currentSlice.scaling, self.currentSlice.scaling, self.currentSlice.scaling)
    vTransform.RotateX(self.currentSlice.xAngle)
    vTransform.RotateY(self.currentSlice.yAngle)
    vTransform.RotateZ(self.currentSlice.zAngle)
    self.transform.SetAndObserveMatrixTransformToParent(vTransform.GetMatrix())
Ejemplo n.º 7
0
 def takeUSSnapshot2(self):
   snapshotDisp=slicer.vtkMRMLModelDisplayNode()
   slicer.mrmlScene.AddNode(snapshotDisp)
   snapshotDisp.SetScene(slicer.mrmlScene)
   snapshotDisp.SetDisableModifiedEvent(1)
   snapshotDisp.SetOpacity(1.0)
   snapshotDisp.SetColor(1.0,1.0,1.0)
   snapshotDisp.SetAmbient(1.0)
   snapshotDisp.SetBackfaceCulling(0)
   snapshotDisp.SetDiffuse(0)
   snapshotDisp.SetSaveWithScene(0)
   snapshotDisp.SetDisableModifiedEvent(0)
   name="Snapshot" + str(self.numberOfUltrasoundSnapshotsTaken)  
   self.numberOfUltrasoundSnapshotsTaken = self.numberOfUltrasoundSnapshotsTaken + 1
   
   snapshotModel=slicer.vtkMRMLModelNode()
   snapshotModel.SetName(name)
   snapshotModel.SetDescription("Live Ultrasound Snapshot")
   snapshotModel.SetScene(slicer.mrmlScene)
   snapshotModel.SetAndObserveDisplayNodeID(snapshotDisp.GetID())
   snapshotModel.SetHideFromEditors(0)
   snapshotModel.SetSaveWithScene(0)
   slicer.mrmlScene.AddNode(snapshotModel)
   
   image_RAS=slicer.util.getNode("Image_Reference")
   
   dim=[0,0,0]
   imageData=image_RAS.GetImageData()
   imageData.GetDimensions(dim)
   
   plane=vtk.vtkPlaneSource()
   plane.Update()
   snapshotModel.SetAndObservePolyData(plane.GetOutput())
   
   slicePolyData=snapshotModel.GetPolyData()
   slicePoints=slicePolyData.GetPoints()
   
   # In parent transform is saved the ReferenceToRAS transform
   parentTransform=vtk.vtkTransform()
   parentTransform.Identity()
   if not image_RAS.GetParentTransformNode()==None:
     parentMatrix=vtk.vtkMatrix4x4()
     parentTransformNode=image_RAS.GetParentTransformNode()
     parentTransformNode.GetMatrixTransformToWorld(parentMatrix)
     #aux=parentTransform.GetMatrix()
     #aux.DeepCopy(parentMatrix)
     #parentTransform.Update()
     parentTransform.SetMatrix(parentMatrix)
     
   inImageTransform=vtk.vtkTransform()
   inImageTransform.Identity()
   image_RAS.GetIJKToRASMatrix(inImageTransform.GetMatrix())
   
   tImageToRAS=vtk.vtkTransform()
   tImageToRAS.Identity()
   tImageToRAS.PostMultiply()
   tImageToRAS.Concatenate(inImageTransform)
   tImageToRAS.Concatenate(parentTransform)
  
   tImageToRAS.Update()
   
   point1Image=[0.0,0.0,0.0,1.0]
   point2Image=[dim[0],0.0,0.0,1.0]
   point3Image=[0.0,dim[1],0.0,1.0]
   point4Image=[dim[0],dim[1],0.0,1.0]
   
   point1RAS=[0.0,0.0,0.0,0.0]
   point2RAS=[0.0,0.0,0.0,0.0]
   point3RAS=[0.0,0.0,0.0,0.0]
   point4RAS=[0.0,0.0,0.0,0.0]
   tImageToRAS.MultiplyPoint(point1Image,point1RAS)
   tImageToRAS.MultiplyPoint(point2Image,point2RAS)
   tImageToRAS.MultiplyPoint(point3Image,point3RAS)
   tImageToRAS.MultiplyPoint(point4Image,point4RAS)  
   
   p1RAS=[point1RAS[0],point1RAS[1],point1RAS[2]]
   p2RAS=[point2RAS[0],point2RAS[1],point2RAS[2]]
   p3RAS=[point3RAS[0],point3RAS[1],point3RAS[2]]
   p4RAS=[point4RAS[0],point4RAS[1],point4RAS[2]]
   slicePoints.SetPoint(0,p1RAS)
   slicePoints.SetPoint(1,p2RAS)
   slicePoints.SetPoint(2,p3RAS)
   slicePoints.SetPoint(3,p4RAS)
   ## Add image texture.
   image=vtk.vtkImageData()
   image.DeepCopy(imageData)
   modelDisplayNode=snapshotModel.GetModelDisplayNode()
   modelDisplayNode.SetAndObserveTextureImageData(image)
 def planeLandmarks(self, Landmark1Value, Landmark2Value, Landmark3Value, slider, sliderOpacity):
     self.initialize()
     # Limit the number of 3 landmarks to define a plane
     # Keep the coordinates of the landmarks
     listCoord = list()
     fidNode = slicer.mrmlScene.GetNodeByID('vtkMRMLMarkupsFiducialNode1')
     self.coord = numpy.zeros(3)
     if Landmark1Value != "List of fiducials":
         fidNode.GetNthFiducialPosition(int(Landmark1Value)-1, self.coord)
         listCoord.append(self.coord)
     
     print self.coord
     print listCoord
     
     r1 = self.coord[0]
     a1 = self.coord[1]
     s1 = self.coord[2]
     
     # Limit the number of 3 landmarks to define a plane
     # Keep the coordinates of the landmarks
     listCoord = list()
     fidNode = slicer.mrmlScene.GetNodeByID('vtkMRMLMarkupsFiducialNode1')
     self.coord = numpy.zeros(3)
     if Landmark2Value != "List of fiducials":
         fidNode.GetNthFiducialPosition(int(Landmark2Value)-1, self.coord)
         listCoord.append(self.coord)
     
     print self.coord
     print listCoord
     
     r2 = self.coord[0]
     a2 = self.coord[1]
     s2 = self.coord[2]
     
     # Limit the number of 3 landmarks to define a plane
     # Keep the coordinates of the landmarks
     listCoord = list()
     fidNode = slicer.mrmlScene.GetNodeByID('vtkMRMLMarkupsFiducialNode1')
     self.coord = numpy.zeros(3)
     if Landmark3Value != "List of fiducials":
         fidNode.GetNthFiducialPosition(int(Landmark3Value)-1, self.coord)
         listCoord.append(self.coord)
     
     print self.coord
     print listCoord
     
     r3 = self.coord[0]
     a3 = self.coord[1]
     s3 = self.coord[2]
     
     
     A = (r1,a1,s1)
     B = (r2,a2,s2)
     C = (r3,a3,s3)
     # Vn = Vectorial Product (AB, BC)
     # Normal N = Vn/norm(Vn)
     
     points = vtk.vtkPoints()
     points.InsertNextPoint(r1,a1,s1)
     points.InsertNextPoint(r2,a2,s2)
     points.InsertNextPoint(r3,a3,s3)
     
     polydata = vtk.vtkPolyData()
     polydata.SetPoints(points)
     
     centerOfMass = vtk.vtkCenterOfMass()
     centerOfMass.SetInputData(polydata)
     centerOfMass.SetUseScalarsAsWeights(False)
     centerOfMass.Update()
     
     G = centerOfMass.GetCenter()
     
     print "Center of mass = ",G
     
     # Vector GA
     GA = numpy.matrix([[0],[0],[0]])
     GA[0] = A[0]-G[0]
     GA[1] = A[1]-G[1]
     GA[2] = A[2]-G[2]
     
     print "GA = ", GA
     
     # Vector BG
     GB = numpy.matrix([[0],[0],[0]])
     GB[0] = B[0]-G[0]
     GB[1] = B[1]-G[1]
     GB[2] = B[2]-G[2]
     
     print "GB = ", GB
     
     # Vector CG
     GC = numpy.matrix([[0],[0],[0]])
     GC[0] = C[0]-G[0]
     GC[1] = C[1]-G[1]
     GC[2] = C[2]-G[2]
     
     print "GC = ", GC
     
     self.N = self.normalLandmarks(GA,GB)
     
     D = numpy.matrix([[0],[0],[0]])
     E = numpy.matrix([[0],[0],[0]])
     F = numpy.matrix([[0],[0],[0]])
     
     
     D[0] = slider*GA[0] + G[0]
     D[1] = slider*GA[1] + G[1]
     D[2] = slider*GA[2] + G[2]
     
     print "Slider value : ", slider
     
     print "D = ",D
     
     E[0] = slider*GB[0] + G[0]
     E[1] = slider*GB[1] + G[1]
     E[2] = slider*GB[2] + G[2]
     
     print "E = ",E
     
     F[0] = slider*GC[0] + G[0]
     F[1] = slider*GC[1] + G[1]
     F[2] = slider*GC[2] + G[2]
     
     print "F = ",F
     
     self.renderWindow.AddRenderer(self.renderer)
     
     planeSource = vtk.vtkPlaneSource()
     planeSource.SetNormal(self.N[0],self.N[1],self.N[2])
     
     planeSource.SetOrigin(D[0],D[1],D[2])
     planeSource.SetPoint1(E[0],E[1],E[2])
     planeSource.SetPoint2(F[0],F[1],F[2])
     
     planeSource.Update()
     
     plane = planeSource.GetOutput()
     
     mapper = vtk.vtkPolyDataMapper()
     mapper.SetInputData(plane)
     
     self.actor.SetMapper(mapper)
     self.actor.GetProperty().SetColor(0, 0.4, 0.8)
     self.actor.GetProperty().SetOpacity(sliderOpacity)
     
     self.renderer.AddActor(self.actor)
     
     self.renderWindow.Render()
Ejemplo n.º 9
0
 def takeUSSnapshot2(self,name):
   snapshotDisp = slicer.vtkMRMLModelDisplayNode()
   slicer.mrmlScene.AddNode(snapshotDisp)
   snapshotDisp.SetScene(slicer.mrmlScene)
   snapshotDisp.SetDisableModifiedEvent(1)
   snapshotDisp.SetOpacity(1.0)
   snapshotDisp.SetColor(1.0, 1.0, 1.0)
   snapshotDisp.SetAmbient(1.0)
   snapshotDisp.SetBackfaceCulling(0)
   snapshotDisp.SetDiffuse(0)
   snapshotDisp.SetSaveWithScene(0)
   snapshotDisp.SetDisableModifiedEvent(0)
   
   snapshotModel = slicer.vtkMRMLModelNode()
   snapshotModel.SetName(name)
   snapshotModel.SetDescription("Live Ultrasound Snapshot")
   snapshotModel.SetScene(slicer.mrmlScene)
   snapshotModel.SetAndObserveDisplayNodeID(snapshotDisp.GetID())
   snapshotModel.SetHideFromEditors(0)
   snapshotModel.SetSaveWithScene(0)
   slicer.mrmlScene.AddNode(snapshotModel)
   
   image_RAS = slicer.util.getNode("Image_Image")
   
   dim = [0, 0, 0]
   imageData = image_RAS.GetImageData()
   imageData.GetDimensions(dim)
   
   plane = vtk.vtkPlaneSource()
   plane.Update()
   snapshotModel.SetAndObservePolyData(plane.GetOutput())
   
   slicePolyData = snapshotModel.GetPolyData()
   slicePoints = slicePolyData.GetPoints()
   
   # In parent transform is saved the ReferenceToRAS transform
   parentTransform = vtk.vtkTransform()
   parentTransform.Identity()
   if not image_RAS.GetParentTransformNode() == None:
     parentMatrix = vtk.vtkMatrix4x4()
     parentTransformNode = image_RAS.GetParentTransformNode()
     parentTransformNode.GetMatrixTransformToWorld(parentMatrix)
     # aux=parentTransform.GetMatrix()
     # aux.DeepCopy(parentMatrix)
     # parentTransform.Update()
     parentTransform.SetMatrix(parentMatrix)
     
   inImageTransform = vtk.vtkTransform()
   inImageTransform.Identity()
   image_RAS.GetIJKToRASMatrix(inImageTransform.GetMatrix())
   
   tImageToRAS = vtk.vtkTransform()
   tImageToRAS.Identity()
   tImageToRAS.PostMultiply()
   tImageToRAS.Concatenate(inImageTransform)
   tImageToRAS.Concatenate(parentTransform)
  
   tImageToRAS.Update()
   
   point1Image = [0.0, 0.0, 0.0, 1.0]
   point2Image = [dim[0], 0.0, 0.0, 1.0]
   point3Image = [0.0, dim[1], 0.0, 1.0]
   point4Image = [dim[0], dim[1], 0.0, 1.0]
   
   point1RAS = [0.0, 0.0, 0.0, 0.0]
   point2RAS = [0.0, 0.0, 0.0, 0.0]
   point3RAS = [0.0, 0.0, 0.0, 0.0]
   point4RAS = [0.0, 0.0, 0.0, 0.0]
   tImageToRAS.MultiplyPoint(point1Image, point1RAS)
   tImageToRAS.MultiplyPoint(point2Image, point2RAS)
   tImageToRAS.MultiplyPoint(point3Image, point3RAS)
   tImageToRAS.MultiplyPoint(point4Image, point4RAS)  
   
   p1RAS = [point1RAS[0], point1RAS[1], point1RAS[2]]
   p2RAS = [point2RAS[0], point2RAS[1], point2RAS[2]]
   p3RAS = [point3RAS[0], point3RAS[1], point3RAS[2]]
   p4RAS = [point4RAS[0], point4RAS[1], point4RAS[2]]
   slicePoints.SetPoint(0, p1RAS)
   slicePoints.SetPoint(1, p2RAS)
   slicePoints.SetPoint(2, p3RAS)
   slicePoints.SetPoint(3, p4RAS)
   # # Add image texture.
   image = vtk.vtkImageData()
   image.DeepCopy(imageData)
   modelDisplayNode = snapshotModel.GetModelDisplayNode()
   modelDisplayNode.SetAndObserveTextureImageData(image)   
   
   snapshotTexture = slicer.vtkMRMLScalarVolumeNode()
   snapshotTexture.SetAndObserveImageData(image)
   snapshotTexture.SetName(name + "_Texture")
   slicer.mrmlScene.AddNode(snapshotTexture)
   snapshotTexture.CopyOrientation( image_RAS )
   
   snapshotTextureDisplayNode = slicer.vtkMRMLScalarVolumeDisplayNode()
   snapshotTextureDisplayNode.SetName(name + "_TextureDisplay")
   snapshotTextureDisplayNode.SetAutoWindowLevel(0);
   snapshotTextureDisplayNode.SetWindow(256);
   snapshotTextureDisplayNode.SetLevel(128);
   snapshotTextureDisplayNode.SetDefaultColorMap();
   slicer.mrmlScene.AddNode(snapshotTextureDisplayNode)
   
   snapshotTexture.AddAndObserveDisplayNodeID( snapshotTextureDisplayNode.GetID() )
   
   snapshotModel.SetAttribute( "TextureNodeID", snapshotTexture.GetID() )
   snapshotModelDisplayNode= snapshotModel.GetModelDisplayNode()
   snapshotModelDisplayNode.SetAndObserveTextureImageData( snapshotTexture.GetImageData() )