Beispiel #1
0
 def onConnectButtonClicked(self):
   # Creates a connector Node
   if self.connectorNode is None:
     if self.connectCheck == 1: 
       if self.imageNode or self.transformNode is None: 
         if self.imageNode is None: 
           print('Please select an US volume')
         if self.trandformNode is None:
           print('Please select the tip to probe transform')
       if self.imageNode is not None and self.transformNode is not None:
         if self.fiducialNode is not None: 
           self.fiducialNode.RemoveAllMarkups()
         self.numFid = self.numFid+1 
         self.numFidLabel.setText(str(self.numFid))
         self.manualOutputRegistrationTransformNode = slicer.vtkMRMLLinearTransformNode()
         slicer.mrmlScene.AddNode(self.manualOutputRegistrationTransformNode)
         self.manualOutputRegistrationTransformNode.SetName('ImageToProbeMan')
         slicer.modules.markups.logic().StartPlaceMode(0)
         slicer.app.layoutManager().sliceWidget('Red').setCursor(qt.QCursor(2))
     else:
       self.connectorNode = slicer.vtkMRMLIGTLConnectorNode()
       # Adds this node to the scene, not there is no need for self here as it is its own node
       slicer.mrmlScene.AddNode(self.connectorNode)
       # Configures the connector
       self.connectorNode.SetTypeClient(self.inputIPLineEdit.text, int(self.inputPortLineEdit.text))
       self.connectorNode.Start()
   else:
     if self.connectorNode.GetState() == 2:
       # Connected
       self.connectorNode.Stop()
       self.connectButton.text = "Connect"
       self.freezeButton.text = "Unfreeze" 
       if self.imageSelector.currentNode() or self.TransformSelector.currentNode() is None: 
         if self.imageNode is None: 
           print('Please select an US volume')
         if self.transformNode is None:
           print('Please select the tip to probe transform')
       if self.imageNode is not None and self.transformNode is not None:
         self.numFid = self.numFid + 1 
         self.numFidLabel.setText(str(self.numFid))
         self.manualOutputRegistrationTransformNode = slicer.vtkMRMLLinearTransformNode()
         slicer.mrmlScene.AddNode(self.manualOutputRegistrationTransformNode)
         self.manualOutputRegistrationTransformNode.SetName('ImageToProbeMan')
         slicer.modules.markups.logic().StartPlaceMode(0)
         slicer.app.layoutManager().sliceWidget('Red').setCursor(qt.QCursor(2))
     else:
       # This starts the connection
       self.connectorNode.Start()
       self.connectButton.text = "Disconnect"
       self.freezeButton.text = "Freeze"
     if self.fiducialNode is not None:
       self.fiducialNode.RemoveAllMarkups()
Beispiel #2
0
 def createReadOnlyLineEdit():
     le = qt.QLineEdit()
     le.readOnly = True
     le.frame = False
     le.styleSheet = "QLineEdit { background:transparent; }"
     le.cursor = qt.QCursor(qt.Qt.IBeamCursor)
     return le
Beispiel #3
0
 def setBusy(self, flag):
     if flag:
         qt.QApplication.setOverrideCursor( qt.QCursor(qt.Qt.WaitCursor) )
         while qt.QApplication.eventLoop().hasPendingEvents():
             qt.QApplication.eventLoop().processEvents(qt.QEventLoop.AllEvents)
     else:
         qt.QApplication.restoreOverrideCursor()
Beispiel #4
0
 def __init__(self,
              parent=None,
              parameterNode=None,
              parameter=None,
              colorNode=None,
              selectCommand=None):
     self.colorNode = colorNode
     self.parameterNode = parameterNode
     self.parameter = parameter
     self.selectCommand = selectCommand
     self.recents = []
     self.label = None
     if not parent:
         self.parent = slicer.qMRMLWidget()
         self.parent.setObjectName('EditMRMLWidget')
         self.parent.setLayout(qt.QVBoxLayout())
         self.parent.setMRMLScene(slicer.mrmlScene)
         self.create()
         p = qt.QCursor().pos()
         self.parent.setGeometry(p.x(), p.y(), 300, 700)
         self.parent.show()
         self.parent.raise_()
     else:
         self.parent = parent
         self.create()
Beispiel #5
0
    def processEvent(self, caller=None, event=None):

        PointerEffect.CircleEffectTool.processEvent(self, caller, event)

        if self.preview and event in [
                'LeftButtonDoubleClickEvent', 'LeftButtonReleaseEvent'
        ]:
            # undo pressed opperation. sometimes double click is called before release and viceversa
            self.transformArray[self.currentIndex] -= self.smoothContent
            self.preview = False

        if event == 'LeftButtonDoubleClickEvent':
            self.calculateSmoothContent()
            self.transformArray[self.currentIndex] += self.smoothContent
            self.applyChanges()
        elif event == 'LeftButtonReleaseEvent':
            self.warpNode.InvokeEvent(
                slicer.vtkMRMLGridTransformNode.TransformModifiedEvent)
            qt.QApplication.setOverrideCursor(qt.QCursor(qt.Qt.ArrowCursor))
        elif event == 'LeftButtonPressEvent':
            self.preview = True
            self.calculateSmoothContent()
            self.transformArray[self.currentIndex] += self.smoothContent
            self.warpNode.InvokeEvent(
                slicer.vtkMRMLGridTransformNode.TransformModifiedEvent)
Beispiel #6
0
 def cursorForEffect(self, effectName):
     """Return an instance of QCursor customized for the given effectName.
 TODO: this could be moved to the EffectTool class so that effects can manage
 per-widget cursors, possibly turning them off or making them dynamic
 """
     if not effectName in self.effectCursors:
         baseImage = qt.QImage(":/Icons/AnnotationPointWithArrow.png")
         effectImage = qt.QImage(self.effectIconFiles[effectName])
         width = max(baseImage.width(), effectImage.width())
         pad = -9
         height = pad + baseImage.height() + effectImage.height()
         width = height = max(width, height)
         center = int(width / 2)
         cursorImage = qt.QImage(width, height, qt.QImage().Format_ARGB32)
         painter = qt.QPainter()
         cursorImage.fill(0)
         painter.begin(cursorImage)
         point = qt.QPoint(center - (baseImage.width() / 2), 0)
         painter.drawImage(point, baseImage)
         point.setX(center - (effectImage.width() / 2))
         point.setY(cursorImage.height() - effectImage.height())
         painter.drawImage(point, effectImage)
         painter.end()
         cursorPixmap = qt.QPixmap()
         cursorPixmap = cursorPixmap.fromImage(cursorImage)
         self.effectCursors[effectName] = qt.QCursor(
             cursorPixmap, center, 0)
     return self.effectCursors[effectName]
Beispiel #7
0
 def contentsMouseReleaseEvent(self, e):
     """
     """
     if self.__active_item is not None:
         if self.__active_item.fullRedraw(): self.canvas().update()
     self.setCursor(qt.QCursor(qt.Qt.ArrowCursor))
     self.__moving_start = None
     self.__moving_scale = 0
Beispiel #8
0
    def onFiducialButtonClicked(self):
        # this line creates the logic for the markup (crosshair) that is being placed
        #startPlaceMode(0) means only one markup gets place
        slicer.modules.markups.logic().StartPlaceMode(0)
        slicer.app.layoutManager().sliceWidget('Red').setCursor(qt.QCursor(2))

        if self.fiducialNode is not None:
            self.fiducialNode.RemoveAllMarkups()
Beispiel #9
0
 def onConnectButtonClicked(self): 
   if self.connectorNode is None:
     if self.connectCheck == 1: 
       if self.imageNode or self.imageNode2 or self.transformNode is None: 
         if self.imageNode is None: 
           print('Please select an US volume')
         if self.transformNode is None:
           print('Please select the tip to probe transform')
         if self.imageNode2 is None: 
           print('Please select the right volume')
       if self.imageNode and self.imageNode2 and self.transformNode is not None:
         if self.fiducialNode is not None: 
             self.fiducialNode.RemoveAllMarkups()
         self.numFid = self.numFid +1
         self.numFidLabel.setText(str(self.numFid))
         slicer.modules.markups.logic().StartPlaceMode(0)
         self.redWidget.setCursor(qt.QCursor(2))
         self.yellowWidget.setCursor(qt.QCursor(2))
     else:
       self.connectorNode = slicer.vtkMRMLIGTLConnectorNode()
       slicer.mrmlScene.AddNode(self.connectorNode) 
       self.connectorNode.SetTypeClient('localhost', 18944)
       self.connectorNode2 = slicer.vtkMRMLIGTLConnectorNode()
       slicer.mrmlScene.AddNode(self.connectorNode2)
       self.connectorNode2.SetTypeClient('localhost',18945)
       self.connectorNode.Start() 
       self.connectorNode2.Start()
   else: 
     if self.connectorNode.GetState() == 2: 
       self.connectorNode.Stop()
       self.connectorNode2.Stop()
       self.connectButton.text = "Connect"
       self.freezeButton.text = "Unfreeze"
       self.numFid = self.numFid + 1
       self.numFidLabel.setText(str(self.numFid))
       slicer.modules.markups.logic().StartPlaceMode(0)
       self.redWidget.setCursor(qt.QCursor(2))
       self.yellowWidget.setCursor(qt.QCursor(2))
     else: 
       self.connectorNode.Start() 
       self.connectButton.text = "Disconnect"
       self.freezeButton.text = "Freeze"
     if self.fiducialNode is not None: 
       self.fiducialNode.RemoveAllMarkups() 
Beispiel #10
0
    def _addItem(self, parentListItem, item_type, *args):
        parent_name = str(parentListItem.text(0))
        parent = self.configuration.findContainer(parent_name)
        new_item = None
        new_list_item = None
        
        try:
            qt.qApp.setOverrideCursor(qt.QCursor(qt.Qt.WaitCursor))

            if item_type == "window":
                new_item = self.configuration.addWindow()

                if type(new_item) == types.StringType:
                    qt.QMessageBox.warning(self, "Cannot add", new_item, qt.QMessageBox.Ok)
                else:
                    new_item["properties"].getProperty("w").setValue(qt.qApp.desktop().width())
                    new_item["properties"].getProperty("h").setValue(qt.qApp.desktop().height())
                    
                    new_list_item = self.appendItem(parentListItem, new_item["name"], "window", icon="window_small")
            elif item_type == "brick":
                brick_type = args[0]
                
                new_item = self.configuration.addBrick(brick_type, parent)

                if type(new_item) == types.StringType:
                    qt.QMessageBox.warning(self, "Cannot add", new_item, qt.QMessageBox.Ok)
                else:
                    brick_name = new_item["name"]
                    brick = new_item["brick"]
                    
                    new_list_item = self.appendItem(parentListItem, brick_name, brick_type, icon="brick")
            elif item_type == "tab":
                new_item = self.configuration.addItem(item_type, parent)

                if type(new_item) == types.StringType:
                    qt.QMessageBox.warning(self, "Cannot add", new_item, qt.QMessageBox.Ok)
                else:
                    item_name = new_item["name"]

                    new_list_item = self.appendItem(parentListItem, item_name, item_type, icon=item_type)
            else:
                item_subtype = args[0]
                
                new_item = self.configuration.addItem(item_subtype, parent)

                if type(new_item) == types.StringType:
                    qt.QMessageBox.warning(self, "Cannot add", new_item, qt.QMessageBox.Ok)
                else:
                    item_name = new_item["name"]
                    
                    new_list_item = self.appendItem(parentListItem, item_name, item_type, icon=item_subtype)
                        
            if type(new_item) != types.StringType and new_item is not None:
                self.connectItem(parent, new_item, new_list_item)
        finally:
            qt.qApp.restoreOverrideCursor()
Beispiel #11
0
 def onFiducialClicked(self):
   if self.fiducialNode is not None: 
     self.fiducialNode.RemoveAllMarkups()
   self.numFid = self.numFid + 1 
   self.numFidLabel.setText(str(self.numFid))
   self.OutputRegistrationTransformNode = slicer.vtkMRMLLinearTransformNode()
   slicer.mrmlScene.AddNode(self.OutputRegistrationTransformNode) 
   self.OutputRegistrationTransformNode.SetName('ImageToProbe') 
   slicer.modules.markups.logic().StartPlaceMode(0)
   slicer.app.layoutManager().sliceWidget('Red').setCursor(qt.QCursor(2))
Beispiel #12
0
  def TestSection_3_SaveLabelmaps(self):
    self.delayDisplay("Save labelmaps to directory\n  %s" % (self.outputDir), self.delayMs)

    self.assertTrue(len(self.labelmapsToSave) > 0)
    qt.QApplication.setOverrideCursor(qt.QCursor(qt.Qt.BusyCursor))

    self.logic.SaveLabelmaps(self.labelmapsToSave, self.outputDir)

    self.delayDisplay('  Labelmaps saved to  %s' % (self.outputDir), self.delayMs)
    qt.QApplication.restoreOverrideCursor()
Beispiel #13
0
    def selectedSlot(self, item, *args, **kw):
        #print "package ", item.__package
        qt.QApplication.setOverrideCursor(
            qt.QCursor(qt.QApplication.WaitCursor))

        self.showPackageDescription(item.__package)
        self.showPackageCaps(item.__package)
        self.showPackageFiles(item.__package)

        qt.QApplication.restoreOverrideCursor()
Beispiel #14
0
  def applyChanges(self):

    subjectPath = self.parameterNode.GetParameter("subjectPath")

    if not bool(int(self.parameterNode.GetParameter("warpModified"))):
      msgBox = qt.QMessageBox()
      msgBox.setText('No modifications in warp')
      msgBox.setInformativeText('Save subject as approved?')
      msgBox.setStandardButtons(qt.QMessageBox().Save | qt.QMessageBox().Discard | qt.QMessageBox().Cancel)
      ret = msgBox.exec_()
      if ret == qt.QMessageBox().Cancel:
        return False
      if ret == qt.QMessageBox().Save:
        FunctionsUtil.saveApprovedData(subjectPath)
      return True
    
    if TransformsUtil.TransformsUtilLogic().getNumberOfLayers(self.parameterNode.GetNodeReference("warpID")) == 1:
      msgBox = qt.QMessageBox()
      msgBox.setText('Only one layer')
      msgBox.setInformativeText('Save changes?')
      msgBox.setStandardButtons(qt.QMessageBox().Save | qt.QMessageBox().Discard | qt.QMessageBox().Cancel)
      ret = msgBox.exec_()
      if ret == qt.QMessageBox().Cancel:
        return False
      elif ret == qt.QMessageBox().Discard:
        return True
      
    qt.QApplication.setOverrideCursor(qt.Qt.WaitCursor)
    qt.QApplication.processEvents()
    
    # harden changes in glanat composite with MNI 0.5 resolution
    glanatCompositeNode = self.parameterNode.GetNodeReference("glanatCompositeID")
    glanatCompositeNode.HardenTransform()
    TransformsUtil.TransformsUtilLogic().flattenTransform(glanatCompositeNode, includeFirstLayer=True, useMNIGrid=True)

    # save foreward
    slicer.util.saveNode(glanatCompositeNode, os.path.join(subjectPath,'glanatComposite.nii.gz'))

    # invert transform
    glanatCompositeNode.Inverse()
    # get image to set as reference 
    imageNode = self.getBackgroundNode()
    # get inverse
    outNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLTransformNode')
    transformsLogic = slicer.modules.transforms.logic()
    transformsLogic.ConvertToGridTransform(glanatCompositeNode, imageNode, outNode)
    # save inverse
    slicer.util.saveNode(outNode, os.path.join(subjectPath,'glanatInverseComposite.nii.gz'))

    # delete aux node
    slicer.mrmlScene.RemoveNode(outNode)
    
    qt.QApplication.setOverrideCursor(qt.QCursor(qt.Qt.ArrowCursor))

    return True
Beispiel #15
0
 def cursorOff(self, widget):
     """Turn off and save the current cursor so
 the user can see an overlay that tracks the mouse"""
     if self.savedWidget == widget:
         return
     else:
         self.cursorOn()
     self.savedWidget = widget
     self.savedCursor = widget.cursor
     qt_BlankCursor = 10
     widget.setCursor(qt.QCursor(qt_BlankCursor))
Beispiel #16
0
 def onFiducialClicked(self):
   if self.imageNode or self.imageNode2 or self.transformNode is None: 
     if self.imageNode is None: 
       print('Please select an US volume')
     if self.transformNode is None:
       print('Please select the tip to probe transform')
     if self.imageNode2 is None: 
       print('Please select the right volume')
   if self.imageNode and self.imageNode2 and self.transformNode is not None:
     if self.fiducialNode is not None: 
         self.fiducialNode.RemoveAllMarkups()
     self.numFid = self.numFid +1
     self.numFidLabel.setText(str(self.numFid))
     slicer.modules.markups.logic().StartPlaceMode(0)
     self.redWidget.setCursor(qt.QCursor(2))
     self.yellowWidget.setCursor(qt.QCursor(2))
     if self.fidCount == 0: 
       slicer.modules.markups.logic().StartPlaceMode(0)
       self.redWidget.setCursor(qt.QCursor(2))
       self.yellowWidget.setCursor(qt.QCursor(2))
Beispiel #17
0
 def TestSection_2_ConvertStructureSetToLabelmap(self):
   self.delayDisplay("Convert loaded structure set to labelmap", self.delayMs)
   qt.QApplication.setOverrideCursor(qt.QCursor(qt.Qt.BusyCursor))
   try:
     self.labelmapsToSave = self.logic.ConvertStructureSetToLabelmap()
     self.assertTrue(len(self.labelmapsToSave) > 0)
   except Exception as e:
     import traceback
     traceback.print_exc()
     self.delayDisplay('Test caused exception!\n' + str(e), self.delayMs * 2)
   qt.QApplication.restoreOverrideCursor()
 def enterFloatingMode(self):
   self.mainFrame.setParent(None)
   cursorPosition = qt.QCursor().pos()
   w = self.mainFrame.width
   h = self.mainFrame.height
   self.mainFrame.pos = qt.QPoint(cursorPosition.x() - int(w/2), cursorPosition.y() - int(h/2))
   self.mainFrame.show()
   self.mainFrame.raise_()
   Key_Space = 0x20 # not in PythonQt
   self.toggleShortcut = qt.QShortcut(self.mainFrame)
   self.toggleShortcut.setKey( qt.QKeySequence(Key_Space) )
   self.toggleShortcut.connect( 'activated()', self.toggleFloatingMode )
Beispiel #19
0
    def contentsMousePressEvent(self, e):
        """
        """
        point = self.inverseWorldMatrix().map(e.pos())
        ilist = self.canvas().collisions(point)

        self.__moving_start = None
        self.__moving_scale = 0

        if not len(ilist) or ilist[0].rtti() not in [PC_RTTI_Rect]:
            return

        if self.__active_item!=ilist[0]:
            if self.__active_item is not None:
                self.__active_item.setNormal()
            self.__active_item = ilist[0]
            self.__active_item.setActive()
            zmax = 0
            for item in self.canvas().allItems():
                zmax = max(zmax, item.z())
            self.__active_item.setZ(zmax+1)
            self.canvas().update()

        rect = self.__active_item.getBoundingRect()
        self.__moving_scale = self.__isMovingScale(rect, point)
        self.__moving_start = point

        if self.__moving_scale ==0: self.setCursor(qt.QCursor(qt.Qt.SizeAllCursor))
        elif self.__moving_scale in [11,22]:
            self.setCursor(qt.QCursor(qt.Qt.SizeFDiagCursor))
        elif self.__moving_scale in [12,21]:
            self.setCursor(qt.QCursor(qt.Qt.SizeBDiagCursor))
        elif self.__moving_scale in [1,2]:
            self.setCursor(qt.QCursor(qt.Qt.SizeHorCursor))
        elif self.__moving_scale in [10,20]:
            self.setCursor(qt.QCursor(qt.Qt.SizeVerCursor))
Beispiel #20
0
 def onFiducialClicked(self):
   if self.fiducialNode is not None: 
     self.fiducialNode.RemoveAllMarkups()
   if self.imageNode or self.transformNode is None: 
     if self.imageNode is None: 
       print('Please select an US volume')
     if self.transformNode is None:
       print('Please select the tip to probe transform')
   if self.imageNode is not None and self.transformNode is not None:
     self.numFid = self.numFid+1 
     self.numFidLabel.setText(str(self.numFid))
     self.manualOutputRegistrationTransformNode = slicer.vtkMRMLLinearTransformNode()
     slicer.mrmlScene.AddNode(self.manualOutputRegistrationTransformNode)
     self.manualOutputRegistrationTransformNode.SetName('ImageToProbeMan')
     slicer.modules.markups.logic().StartPlaceMode(0)
     slicer.app.layoutManager().sliceWidget('Red').setCursor(qt.QCursor(2))
Beispiel #21
0
def applyChanges(subjectPath, inputNode, imageNode):

  qt.QApplication.setOverrideCursor(qt.Qt.WaitCursor)
  qt.QApplication.processEvents()
  
  # undo changes to image node
  imageNode.SetAndObserveTransformNodeID(None)

  # FORWARD
  
  size, origin, spacing = GridNodeHelper.getGridDefinition(inputNode)
  # harden changes in input
  inputNode.HardenTransform()
  # to grid transform
  outNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLTransformNode')
  referenceVolume = GridNodeHelper.emptyVolume(size, origin, spacing)    
  slicer.modules.transforms.logic().ConvertToGridTransform(inputNode, referenceVolume, outNode)
  # set to input and delete aux
  inputNode.SetAndObserveTransformFromParent(outNode.GetTransformFromParent())
  slicer.mrmlScene.RemoveNode(outNode)
  slicer.mrmlScene.RemoveNode(referenceVolume)
  # save
  slicer.util.saveNode(inputNode, LeadFileManager(subjectPath).getANTSForwardWarp())

  # BACKWARD

  inputNode.Inverse()
  # to grid
  outNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLTransformNode')
  slicer.modules.transforms.logic().ConvertToGridTransform(inputNode, imageNode, outNode)
  # save
  slicer.util.saveNode(outNode, LeadFileManager(subjectPath).getANTSInverseWarp())
  # delete aux node
  slicer.mrmlScene.RemoveNode(outNode)
  
  # back to original
  inputNode.Inverse()
  imageNode.SetAndObserveTransformNodeID(inputNode.GetID())
  
  qt.QApplication.setOverrideCursor(qt.QCursor(qt.Qt.ArrowCursor))
Beispiel #22
0
    def onConnectButtonClicked(self):
        #creates a connector Node
        if self.connectorNode is None:
            self.connectorNode = slicer.vtkMRMLIGTLConnectorNode()
            #Adds this node to the scene, not there is no need for self here as it is its own node
            slicer.mrmlScene.AddNode(self.connectorNode)
            # Configures the connector
            self.connectorNode.SetTypeClient(self.inputIPLineEdit.text,
                                             int(self.inputPortLineEdit.text))
            if self.imageSelector.currentNode() is not None:
                slicer.app.layoutManager().sliceWidget('Red').sliceLogic(
                ).GetSliceCompositeNode().SetBackgroundVolumeID(
                    self.imageSelector.currentNode().GetID())
                # Configure volume reslice driver, transverse
                self.resliceLogic.SetDriverForSlice(
                    self.imageSelector.currentNode().GetID(),
                    slicer.mrmlScene.GetNodeByID('vtkMRMLSliceNodeRed'))
                self.resliceLogic.SetModeForSlice(
                    self.resliceLogic.MODE_TRANSVERSE,
                    slicer.mrmlScene.GetNodeByID('vtkMRMLSliceNodeRed'))
                slicer.app.layoutManager().sliceWidget(
                    "Red").sliceController().fitSliceToBackground()
        if self.connectorNode.GetState() == 2:
            # Connected, disconnect
            self.connectorNode.Stop()
            self.connectButton.text = "Connect"
            # self.freezeButton.text = "Unfreeze"
            slicer.modules.markups.logic().StartPlaceMode(0)
            slicer.app.layoutManager().sliceWidget('Red').setCursor(
                qt.QCursor(2))

        else:
            # This starts the connection
            self.connectorNode.Start()
            self.connectButton.text = "Disconnect"
            self.freezeButton.text = "Freeze"

        if self.fiducialNode is not None:
            self.fiducialNode.RemoveAllMarkups()
Beispiel #23
0
 def addFunction(self):
     if not self.parameterNode.GetNodeReferenceID("warpID"):
         return
     qt.QApplication.setOverrideCursor(qt.Qt.WaitCursor)
     qt.QApplication.processEvents()
     # get node
     warpNode = self.parameterNode.GetNodeReference("warpID")
     # save visibility
     vis = warpNode.GetDisplayNode().GetVisibility()
     warpNode.GetDisplayNode().SetVisibility(False)
     # clone
     shNode = slicer.mrmlScene.GetSubjectHierarchyNode()
     clonedID = slicer.modules.subjecthierarchy.logic(
     ).CloneSubjectHierarchyItem(shNode, shNode.GetItemByDataNode(warpNode))
     shNode.SetItemAttribute(clonedID, 'savedWarp', '1')
     # flat new warp
     newWarpNode = shNode.GetItemDataNode(clonedID)
     newWarpNode.SetName(slicer.mrmlScene.GenerateUniqueName('SavedWarp'))
     size, origin, spacing = TransformsUtil.TransformsUtilLogic(
     ).getGridDefinition(newWarpNode)
     outNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLTransformNode')
     referenceVolume = TransformsUtil.TransformsUtilLogic(
     ).createEmpyVolume(size, origin, spacing)
     transformsLogic = slicer.modules.transforms.logic()
     transformsLogic.ConvertToGridTransform(newWarpNode, referenceVolume,
                                            outNode)
     newWarpNode.SetAndObserveTransformFromParent(
         outNode.GetTransformFromParent())
     # remove aux
     slicer.mrmlScene.RemoveNode(outNode)
     slicer.mrmlScene.RemoveNode(referenceVolume)
     # restore visibility
     warpNode.GetDisplayNode().SetVisibility(vis)
     # simulate double click to change
     self.doubleClickFunction(newWarpNode)
     qt.QApplication.setOverrideCursor(qt.QCursor(qt.Qt.ArrowCursor))
Beispiel #24
0
    def saveClicked(self):
        try:
            qt.qApp.setOverrideCursor(qt.QCursor(qt.Qt.WaitCursor))
            
            if self.filename is not None:
                if os.path.exists(self.filename):
                    should_create_startup_script=False
                else:
                    should_create_startup_script=True
                    
                if self.configuration.save(self.filename):
                    self.setCaption("GUI Builder - %s" % self.filename)
                    qt.qApp.restoreOverrideCursor()
                    qt.QMessageBox.information(self, "Success", "Configuration have been saved successfully to\n%s" % self.filename, qt.QMessageBox.Ok)

                    if should_create_startup_script:
                        if qt.QMessageBox.question(self, "Launch script",
                                                   "Do you want to create a startup script for the new GUI ?",
                                                   qt.QMessageBox.Yes, qt.QMessageBox.No) == qt.QMessageBox.Yes:
                            try:
                                hwr_server = HardwareRepository.HardwareRepository().serverAddress
                            except:
                                hwr_server = ""
                            else:
                                pid = subprocess.Popen("newGUI --just-script %s %s" % (self.filename, hwr_server), shell=True).pid
                    return True
                else:
                    qt.qApp.restoreOverrideCursor()
                    qt.QMessageBox.warning(self, "Error", "Could not save configuration to file %s !" % self.filename, qt.QMessageBox.Ok)

                    return False
            else:
                qt.qApp.restoreOverrideCursor()
                self.saveAsClicked()
        finally:
            qt.qApp.restoreOverrideCursor()
Beispiel #25
0
 def set_cursor(self, cursor):
     if DEBUG: print 'Set cursor', cursor
     qt.QApplication.restoreOverrideCursor()
     qt.QApplication.setOverrideCursor(qt.QCursor(cursord[cursor]))
Beispiel #26
0
    def run(self, atlasPath):
        """
    Run the actual algorithm
    """
        qt.QApplication.setOverrideCursor(qt.Qt.WaitCursor)
        qt.QApplication.processEvents()

        shNode = slicer.mrmlScene.GetSubjectHierarchyNode()
        folderID = shNode.CreateFolderItem(shNode.GetSceneItemID(),
                                           os.path.split(atlasPath)[-1])
        self.createFolderDisplayNode(folderID)
        shNode.SetItemAttribute(folderID, 'atlas', '1')

        with h5py.File(os.path.join(atlasPath, 'atlas_index.mat'),
                       'r') as atlasFile:
            # get .mat data
            fv = atlasFile['atlases']['fv']
            colors = atlasFile['atlases']['colors'][()]
            try:
                colormap = atlasFile['atlases']['colormap'][()].transpose()
            except:  # colormap not present
                colormap = np.array([[0.2422, 0.1504, 0.6603],
                                     [0.2504, 0.1650, 0.7076],
                                     [0.2578, 0.1818, 0.7511],
                                     [0.2647, 0.1978, 0.7952],
                                     [0.2706, 0.2147, 0.8364],
                                     [0.2751, 0.2342, 0.8710],
                                     [0.2783, 0.2559, 0.8991],
                                     [0.2803, 0.2782, 0.9221],
                                     [0.2813, 0.3006, 0.9414],
                                     [0.2810, 0.3228, 0.9579],
                                     [0.2795, 0.3447, 0.9717],
                                     [0.2760, 0.3667, 0.9829],
                                     [0.2699, 0.3892, 0.9906],
                                     [0.2602, 0.4123, 0.9952],
                                     [0.2440, 0.4358, 0.9988],
                                     [0.2206, 0.4603, 0.9973],
                                     [0.1963, 0.4847, 0.9892],
                                     [0.1834, 0.5074, 0.9798],
                                     [0.1786, 0.5289, 0.9682],
                                     [0.1764, 0.5499, 0.9520],
                                     [0.1687, 0.5703, 0.9359],
                                     [0.1540, 0.5902, 0.9218],
                                     [0.1460, 0.6091, 0.9079],
                                     [0.1380, 0.6276, 0.8973],
                                     [0.1248, 0.6459, 0.8883],
                                     [0.1113, 0.6635, 0.8763],
                                     [0.0952, 0.6798, 0.8598],
                                     [0.0689, 0.6948, 0.8394],
                                     [0.0297, 0.7082, 0.8163],
                                     [0.0036, 0.7203, 0.7917],
                                     [0.0067, 0.7312, 0.7660],
                                     [0.0433, 0.7411, 0.7394],
                                     [0.0964, 0.7500, 0.7120],
                                     [0.1408, 0.7584, 0.6842],
                                     [0.1717, 0.7670, 0.6554],
                                     [0.1938, 0.7758, 0.6251],
                                     [0.2161, 0.7843, 0.5923],
                                     [0.2470, 0.7918, 0.5567],
                                     [0.2906, 0.7973, 0.5188],
                                     [0.3406, 0.8008, 0.4789],
                                     [0.3909, 0.8029, 0.4354],
                                     [0.4456, 0.8024, 0.3909],
                                     [0.5044, 0.7993, 0.3480],
                                     [0.5616, 0.7942, 0.3045],
                                     [0.6174, 0.7876, 0.2612],
                                     [0.6720, 0.7793, 0.2227],
                                     [0.7242, 0.7698, 0.1910],
                                     [0.7738, 0.7598, 0.1646],
                                     [0.8203, 0.7498, 0.1535],
                                     [0.8634, 0.7406, 0.1596],
                                     [0.9035, 0.7330, 0.1774],
                                     [0.9393, 0.7288, 0.2100],
                                     [0.9728, 0.7298, 0.2394],
                                     [0.9956, 0.7434, 0.2371],
                                     [0.9970, 0.7659, 0.2199],
                                     [0.9952, 0.7893, 0.2028],
                                     [0.9892, 0.8136, 0.1885],
                                     [0.9786, 0.8386, 0.1766],
                                     [0.9676, 0.8639, 0.1643],
                                     [0.9610, 0.8890, 0.1537],
                                     [0.9597, 0.9135, 0.1423],
                                     [0.9628, 0.9373, 0.1265],
                                     [0.9691, 0.9606, 0.1064],
                                     [0.9769, 0.9839, 0.0805]])
            names = self.getAtlasNames(atlasFile)
            types = atlasFile['atlases']['types'][()]
            try:
                showIndexRef = atlasFile['atlases']['presets']['show'][0, 0]
                showIndex = atlasFile[showIndexRef][
                    ()].squeeze() - 1  # -1 to fix index base
            except:
                showIndex = np.array(range(len(names)))

            for index in range(len(names)):  # for each structure

                structureName = os.path.splitext(
                    os.path.splitext(names[index][0])[0])[0]
                structureColor = colormap[int(colors[index]) - 1]

                if types[index][0] in [3, 4]:
                    subName = ['rh', 'lh']
                    subFolderID = shNode.CreateFolderItem(
                        folderID, structureName)
                    self.createFolderDisplayNode(subFolderID, structureColor)
                    shNode.SetItemDisplayVisibility(subFolderID, index
                                                    in showIndex)
                    shNode.SetItemExpanded(subFolderID, 0)
                    shNode.SetItemAttribute(subFolderID, 'atlas', '1')
                else:
                    subName = [structureName]
                    subFolderID = folderID

                for sideIndex, sideName in zip(range(len(subName)), subName):
                    # get faces and vertices data
                    ref = fv[sideIndex][index]
                    b = atlasFile[ref]
                    vertices = b['vertices'][()].transpose()
                    faces = b['faces'][()].transpose()
                    # create polydata
                    structurePolyData = self.createPolyData(vertices, faces)
                    # add model node
                    modelNode = self.createModel(structurePolyData, sideName,
                                                 structureColor)
                    modelNode.GetDisplayNode().SetVisibility(
                        index in showIndex)
                    # add as child to parent
                    shNode.SetItemParent(
                        shNode.GetItemChildWithName(shNode.GetSceneItemID(),
                                                    sideName), subFolderID)
                    shNode.SetItemAttribute(
                        shNode.GetItemByDataNode(modelNode), 'atlas', '1')

        qt.QApplication.setOverrideCursor(qt.QCursor(qt.Qt.ArrowCursor))

        return folderID
Beispiel #27
0
 def onMarkupAdded(self, fiducialNodeCaller, event):
   # Set the location and index to zero because its needs to be initialized
   centroid=[0,0,0]
   # This checks if there is not a display node 
   if self.fiducialNode.GetDisplayNode() is None:
     # then creates one if that is the case 
     self.fiducialNode.CreateDefaultDisplayNodes()
     # This sets a variable as the display node
   displayNode = self.fiducialNode.GetDisplayNode()
   # This sets the type to be a cross hair
   displayNode.SetGlyphType(3)
   # This sets the size
   displayNode.SetGlyphScale(2.5)
   # This says that you dont want text
   displayNode.SetTextScale(0)
   # This sets the color
   displayNode.SetSelectedColor(0, 0, 1)
   # This saves the location the markup is place
   # Collect the point in image space
   self.fiducialNode.GetMarkupPoint(self.fiducialNode.GetNumberOfMarkups()-1, 0, centroid)
   tipToProbeTransform = vtk.vtkMatrix4x4()
   self.TransformSelector.currentNode().GetMatrixTransformToWorld(tipToProbeTransform)
   origin = [tipToProbeTransform.GetElement(0, 3), tipToProbeTransform.GetElement(1,3), tipToProbeTransform.GetElement(2,3)]
   dir = [tipToProbeTransform.GetElement(0, 2), tipToProbeTransform.GetElement(1,2), tipToProbeTransform.GetElement(2,2)]
   if self.fidCount == 0:
     self.logic.AddPointAndLineMan([centroid[0],centroid[1],0], origin, dir)
   if self.fidCount == 1: 
     self.logic.AddPointAndLineMan([0,centroid[1],centroid[2]], origin, dir)
   self.ImageToProbe = self.logic.manualRegLogic.CalculateRegistration()
   self.transformTable.setItem(0,0, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(0,0))))
   self.transformTable.setItem(0,1, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(0,1))))
   self.transformTable.setItem(0,2, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(0,2))))
   self.transformTable.setItem(0,3, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(0,3))))
   self.transformTable.setItem(1,0, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(1,0))))
   self.transformTable.setItem(1,1, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(1,1))))
   self.transformTable.setItem(1,2, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(1,2))))
   self.transformTable.setItem(1,3, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(1,3))))
   self.transformTable.setItem(2,0, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(2,0))))
   self.transformTable.setItem(2,1, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(2,1))))
   self.transformTable.setItem(2,2, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(2,2))))
   self.transformTable.setItem(2,3, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(2,3))))
   self.transformTable.setItem(3,0, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(3,0))))
   self.transformTable.setItem(3,1, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(3,1))))
   self.transformTable.setItem(3,2, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(3,2))))
   self.transformTable.setItem(3,3, qt.QTableWidgetItem(str(self.ImageToProbe.GetElement(3,3))))
   self.transformTable.resizeColumnToContents(0)
   self.transformTable.resizeColumnToContents(1)
   self.transformTable.resizeColumnToContents(2)
   self.transformTable.resizeColumnToContents(3)
   self.fiducialNode.RemoveAllMarkups()
   self.fiducialNode.RemoveObserver(self.markupAddedObserverTag) 
   slicer.mrmlScene.RemoveNode(self.fiducialNode)
   self.fiducialNode = None
   if slicer.mrmlScene.GetNodesByClass("vtkMRMLSequenceNode").GetNumberOfItems() == 0:
     if self.fidCount == 0: 
       slicer.modules.markups.logic().StartPlaceMode(0)
       self.redWidget.setCursor(qt.QCursor(2))
       self.yellowWidget.setCursor(qt.QCursor(2))
     if self.fidCount == 1:
       self.connectorNode.Start()
       self.connectorNode2.Start()
       self.connectButton.text = "Disconnect"
       self.freezeButton.text = "Freeze"
Beispiel #28
0
 def cursorOff(self):
     """Turn off and save the current cursor so
 the user can see the background image during editing"""
     qt.QApplication.setOverrideCursor(qt.QCursor(10))
Beispiel #29
0
 def cursorOff(self):
     """Turn off and save the current cursor so
 the user can see the background image during editing"""
     self.savedCursor = self.sliceWidget.cursor
     qt_BlankCursor = 10
     self.sliceWidget.setCursor(qt.QCursor(qt_BlankCursor))
Beispiel #30
0
 def createCursor(self, widget):
     # Turn off effect-specific cursor for this effect
     #return slicer.util.mainWindow().cursor
     return qt.QCursor(qt.Qt.PointingHandCursor)