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()
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
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()
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()
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)
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]
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
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()
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()
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()
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))
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()
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()
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
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))
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))
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 )
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))
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))
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))
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()
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))
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()
def set_cursor(self, cursor): if DEBUG: print 'Set cursor', cursor qt.QApplication.restoreOverrideCursor() qt.QApplication.setOverrideCursor(qt.QCursor(cursord[cursor]))
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
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"
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))
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))
def createCursor(self, widget): # Turn off effect-specific cursor for this effect #return slicer.util.mainWindow().cursor return qt.QCursor(qt.Qt.PointingHandCursor)