def updateNavigationView(self):
    self.selectView(self.navigationView)

    # Reset orientation marker
    if hasattr(slicer.vtkMRMLViewNode(),'SetOrientationMarkerType'): # orientation marker is not available in older Slicer versions
      v1=slicer.util.getNode('View1')
      v1.SetOrientationMarkerType(v1.OrientationMarkerTypeNone)
Ejemplo n.º 2
0
    def updateNavigationView(self):
        self.selectView(self.navigationView)

        # Reset orientation marker
        if hasattr(
                slicer.vtkMRMLViewNode(), 'SetOrientationMarkerType'
        ):  # orientation marker is not available in older Slicer versions
            v1 = slicer.util.getNode('View1')
            v1.SetOrientationMarkerType(v1.OrientationMarkerTypeNone)
Ejemplo n.º 3
0
 def createWindows(self):
   self.stereoMode = self.stereoCheckBox.isChecked()
 
   # Create widgets to hold windows
   self.leftWidgets = qt.QWidget()
   self.leftWidgets.setWindowTitle("SlicerCubeMap - Left")
   leftWidgetsLayout = qt.QHBoxLayout()
   leftWidgetsLayout.setSpacing(0)
   leftWidgetsLayout.setContentsMargins(0,0,0,0)
   self.leftWidgets.setLayout(leftWidgetsLayout)
   self.rightWidgets = qt.QWidget()
   self.rightWidgets.setWindowTitle("SlicerCubeMap - Right")
   rightWidgetsLayout = qt.QHBoxLayout()
   rightWidgetsLayout.setSpacing(0)
   rightWidgetsLayout.setContentsMargins(0,0,0,0)
   self.rightWidgets.setLayout(rightWidgetsLayout)
 
   # Per cube face per eye
   leftFaces  = ["lpx", "lnz", "lnx", "lpz", "lpy", "lny"]
   rightFaces = ["rpx", "rnz", "rnx", "rpz", "rpy", "rny"]
   
   slicer.mrmlScene.AddNode(slicer.vtkMRMLViewNode()) # There's some wonky behaviour with the first view node created (ViewNode2?), so this terrible thing exists for now
   for face in leftFaces:
     # Initialize View Nodes
     view = slicer.vtkMRMLViewNode()
     slicer.mrmlScene.AddNode(view)
     self.cubeFaceViewNodes.append(view)
     
     # Initialize ThreeD Widgets
     threeDWidget = slicer.qMRMLThreeDWidget()
     threeDWidget.setFixedSize(qt.QSize(600, 600))
     threeDWidget.setMRMLViewNode(view)
     threeDWidget.setMRMLScene(slicer.mrmlScene)
     threeDWidget.setWindowTitle("SlicerCubeMap - " + face)
     threeDWidget.children()[1].hide() # Hide widget controller bar; TODO: maybe a bit more robust
     self.cubeFaceThreeDWidgets[face] = threeDWidget
     
     # Set Stereo settings
     if (self.stereoCheckBox.isChecked()):
       threeDWidget.threeDView().renderWindow().StereoRenderOn()
       threeDWidget.threeDView().renderWindow().SetStereoTypeToLeft()
     threeDWidget.threeDView().renderWindow().Render()
     
     # Add to Left eye cubemap widget
     self.leftWidgets.layout().addWidget(threeDWidget)
   
   if (self.stereoMode is True):  
     for face in rightFaces:
       # Initialize View Nodes
       view = slicer.vtkMRMLViewNode()
       slicer.mrmlScene.AddNode(view)
       self.cubeFaceViewNodes.append(view)
       
       # Initialize ThreeD Widgets
       threeDWidget = slicer.qMRMLThreeDWidget()
       threeDWidget.setFixedSize(qt.QSize(600, 600))
       threeDWidget.setMRMLViewNode(view)
       threeDWidget.setMRMLScene(slicer.mrmlScene)
       threeDWidget.setWindowTitle("SlicerCubeMap - " + face)
       threeDWidget.children()[1].hide() # Hide widget controller bar; TODO: maybe a bit more robust
       self.cubeFaceThreeDWidgets[face] = threeDWidget
     
       # Set Stereo settings
       threeDWidget.threeDView().renderWindow().StereoRenderOn()
       threeDWidget.threeDView().renderWindow().SetStereoTypeToRight()
       threeDWidget.threeDView().renderWindow().Render()
       
       # Add to Right eye cubemap widget
       self.rightWidgets.layout().addWidget(threeDWidget)      
   
   # Set background colors depending on face
   # Front, Left, Right, and Back retain default color gradient
   # Top and Bottom have opposite sides of the gradient
   self.cubeFaceThreeDWidgets["lny"].threeDView().setBackgroundColor(qt.QColor(193, 195, 232))
   self.cubeFaceThreeDWidgets["lny"].threeDView().setBackgroundColor2(qt.QColor(193, 195, 232))
   self.cubeFaceThreeDWidgets["lpy"].threeDView().setBackgroundColor(qt.QColor(116, 120, 190))
   self.cubeFaceThreeDWidgets["lpy"].threeDView().setBackgroundColor2(qt.QColor(116, 120, 190))
   
   if (self.stereoMode is True):
     self.cubeFaceThreeDWidgets["rny"].threeDView().setBackgroundColor(qt.QColor(193, 195, 232))
     self.cubeFaceThreeDWidgets["rny"].threeDView().setBackgroundColor2(qt.QColor(193, 195, 232))    
     self.cubeFaceThreeDWidgets["rpy"].threeDView().setBackgroundColor(qt.QColor(116, 120, 190))
     self.cubeFaceThreeDWidgets["rpy"].threeDView().setBackgroundColor2(qt.QColor(116, 120, 190))
Ejemplo n.º 4
0
    def generate(self,
                 volumeRenderingNode,
                 filePattern="/tmp/slice_%04d.png"):  # underscore not dash
        """

    """
        lm = slicer.app.layoutManager()
        # switch on the type to get the requested window
        # just the 3D window
        mainThreeDWidget = lm.threeDWidget(0).threeDView()
        viewNode = mainThreeDWidget.mrmlViewNode()

        # create the dummy threeD widget
        threeDWidget = slicer.qMRMLThreeDWidget()
        threeDWidget.resize(self.width, self.height)
        threeDWidget.setObjectName("ThreeDWidget%s" %
                                   viewNode.GetLayoutLabel())
        threeDWidget.setMRMLScene(slicer.mrmlScene)
        threeDWidget.setMRMLViewNode(viewNode)
        self.threeDWidget = threeDWidget
        threeDWidget.show()

        # configure the view
        cacheViewNode = slicer.vtkMRMLViewNode()
        cacheViewNode.Copy(viewNode)
        viewNode.SetBoxVisible(0)
        viewNode.SetAxisLabelsVisible(0)
        viewNode.SetBackgroundColor((1, 1, 1))
        viewNode.SetBackgroundColor2((1, 1, 1))

        roi = volumeRenderingNode.GetROINode()
        roiCenter = [
            0,
        ] * 3
        roiRadius = [
            0,
        ] * 3
        roi.GetXYZ(roiCenter)
        roi.GetRadiusXYZ(roiRadius)
        roi.SetDisplayVisibility(0)
        camera = vtk.vtkCamera()
        camera.SetFocalPoint(roiCenter)
        camera.SetPosition(roiCenter[0], roiCenter[1],
                           roiCenter[2] + roiRadius[2])
        camera.SetViewUp((0, 1, 0))

        mrmlCamera = slicer.util.getNode('Default Scene Camera')
        cacheCamera = vtk.vtkCamera()
        cacheCamera.DeepCopy(mrmlCamera.GetCamera())

        mrmlCamera.GetCamera().DeepCopy(camera)
        viewNode.SetRenderMode(slicer.vtkMRMLViewNode.Orthographic)

        # cycle through the slabs
        slabRadius = list(roiRadius)
        slabRadius[2] = self.slabThickness
        roi.SetRadiusXYZ(slabRadius)
        slabCounter = 0
        slabCenter = [roiCenter[0], roiCenter[1], roiCenter[2] - roiRadius[2]]
        slabTop = roiCenter[2] + roiRadius[2]

        threeDView = threeDWidget.threeDView()
        renderWindow = threeDView.renderWindow()
        self.delayDisplay("Starting render...", 300)

        while slabCenter[2] <= slabTop:
            roi.SetXYZ(slabCenter)
            threeDView.forceRender()
            windowToImage = vtk.vtkWindowToImageFilter()
            windowToImage.SetInput(renderWindow)
            writer = vtk.vtkPNGWriter()
            writer.SetInputConnection(windowToImage.GetOutputPort())
            filePath = filePattern % slabCounter
            windowToImage.Update()
            writer.SetFileName(filePath)
            writer.Write()
            slabCounter += 1
            slabCenter[2] = slabCenter[2] + self.slabSpacing

        # reset things
        viewNode.Copy(cacheViewNode)
        mrmlCamera.GetCamera().DeepCopy(cacheCamera)
        roi.SetXYZ(roiCenter)
        roi.SetRadiusXYZ(roiRadius)
        roi.SetDisplayVisibility(1)