def setup(self): # # Instantiate and connect widgets connectorCollapsibleButton = ctk.ctkCollapsibleButton() connectorCollapsibleButton.text = "Leap Motion Controller Connector" self.layout.addWidget(connectorCollapsibleButton) connectorLayout = qt.QFormLayout(connectorCollapsibleButton) # Start and stop listening self.startButton = qt.QPushButton("Start Recording") connectorLayout.addRow(self.startButton) self.stopButton = qt.QPushButton("Stop Recording") connectorLayout.addRow(self.stopButton) #Buttons, boxes self.schemeBrowserSelector = ctk.ctkComboBox() self.schemeBrowserSelector.addItem('%s. Pointer Browser' % 0) self.schemeBrowserSelector.addItem('%s. Spinner Browser' % 1) connectorLayout.addRow("Browser Type:", self.schemeBrowserSelector) self.browserButton = qt.QPushButton("Open Browser") connectorLayout.addRow(self.browserButton) self.updateButton = qt.QPushButton("Update") connectorLayout.addRow(self.updateButton) # Debug box self.textBox = qt.QTextEdit() self.layout.addWidget(self.textBox) self.layout.addStretch(1) #Connections self.startButton.connect('clicked(bool)', self.onStart) self.stopButton.connect('clicked(bool)', self.onStop) self.browserButton.connect('clicked(bool)', self.onOpenBrowser) self.updateButton.connect('clicked(bool)', self.onUpdate) # Instantiate timer self.timer = qt.QTimer() # Instantiate Leap Motion device self.controller = LeapLib.Leap.Controller() self.controller.enable_gesture(LeapLib.Leap.Gesture.TYPE_CIRCLE); self.controller.enable_gesture(LeapLib.Leap.Gesture.TYPE_KEY_TAP); self.controller.enable_gesture(LeapLib.Leap.Gesture.TYPE_SCREEN_TAP); self.controller.enable_gesture(LeapLib.Leap.Gesture.TYPE_SWIPE);
def setup(self): QCLib.genericPanel.setup(self) # # Parameters Area # parametersCollapsibleButton = ctk.ctkCollapsibleButton() parametersCollapsibleButton.text = "Parameters" self.framelayout.addWidget(parametersCollapsibleButton) parametersFormLayout = qt.QFormLayout(parametersCollapsibleButton) # # ROI volume selector # self.ROISelector = slicer.qMRMLNodeComboBox() # self.ROISelector.nodeTypes = ( ("vtkMRMLScalarVolumeNode"), "" ) # self.ROISelector.addAttribute( "vtkMRMLScalarVolumeNode", "LabelMap", 1 ) self.ROISelector.nodeTypes = ["vtkMRMLLabelMapVolumeNode"] self.ROISelector.selectNodeUponCreation = False self.ROISelector.addEnabled = False self.ROISelector.removeEnabled = False self.ROISelector.noneEnabled = True self.ROISelector.showHidden = False self.ROISelector.showChildNodeTypes = False self.ROISelector.setMRMLScene( slicer.mrmlScene ) self.ROISelector.setToolTip( "ROI for analysis" ) parametersFormLayout.addRow("Rectangular ROI: ", self.ROISelector) #object type selector self.typeSel = ctk.ctkComboBox() types=["Edge","Line (Not Implemented)","Point","Droedge (Not Implemented)"] self.typeSel.addItems(types) self.typeSel.editable=False self.typeSel.setCurrentIndex(0) parametersFormLayout.addRow("Type of Analysis", self.typeSel) # #edge algorithm selector # self.algorithmSel = ctk.ctkComboBox() # algorithms=["Canny","Sobel","Zero Crossing Based"] # self.algorithmSel.addItems(algorithms) # #self.algorithmSel.enabled=False # self.algorithmSel.editable=False # self.algorithmSel.setCurrentIndex(0) # parametersFormLayout.addRow("Edge Detection Algorithm", self.algorithmSel) # #distance transform algorithm selector # self.distalgorithmSel = ctk.ctkComboBox() # distalgorithms=["Maurer Signed","Approximate Signed","Danielsson Signed","VTK Unsigned"] # self.distalgorithmSel.addItems(distalgorithms) # self.distalgorithmSel.editable=False # self.distalgorithmSel.setCurrentIndex(0) # parametersFormLayout.addRow("Distance Transform Algorithm", self.distalgorithmSel) #save intermediate self.intermediateCB = ctk.ctkCheckBox() self.intermediateCB.setChecked(False) parametersFormLayout.addRow("Save intermediate images and curves",self.intermediateCB) #options optionsCollapsibleButton = ctk.ctkCollapsibleButton() optionsCollapsibleButton.text = "Options" self.framelayout.addWidget(optionsCollapsibleButton) optionsFormLayout = qt.QFormLayout(optionsCollapsibleButton) self.edgeoptionframe=qt.QFrame() self.edgeoptionframe.enabled=False edgeoptionFormLayout = qt.QFormLayout(self.edgeoptionframe) self.pointoptionframe=qt.QFrame() self.pointoptionframe.enabled=False pointoptionFormLayout = qt.QFormLayout(self.pointoptionframe) optionsCollapsibleButton.layout().addWidget(self.edgeoptionframe) optionsCollapsibleButton.layout().addWidget(self.pointoptionframe) #edge options #symmetrize LSF self.symmetrizeCB = ctk.ctkCheckBox() self.symmetrizeCB.setChecked(True) self.symmetrizeCB.enabled=True edgeoptionFormLayout.addRow("Symmetrize LSF",self.symmetrizeCB) #point options #detection point criteria self.pointCB = ctk.ctkCheckBox() self.pointCB.setChecked(True) self.pointCB.enabled=True pointoptionFormLayout.addRow("Point object BRIGHTER than background",self.pointCB) # self.objradSB=ctk.ctkDoubleSpinBox() # self.objradSB.minimum=0 # self.objradSB.maximum=10 # self.objradSB.value=0.5 # pointoptionFormLayout.addRow("Radius of object point(mm)",self.objradSB) self.setOptions() # # Apply Button # self.applyButton = qt.QPushButton("Apply") self.applyButton.toolTip = "Run the algorithm." self.applyButton.enabled = False self.framelayout.addWidget(self.applyButton) arrayValCollapsibleButton = ctk.ctkCollapsibleButton() arrayValCollapsibleButton.text = "Array Value" self.framelayout.addWidget(arrayValCollapsibleButton) # Layout within the dummy collapsible button arrayValFormLayout = qt.QFormLayout(arrayValCollapsibleButton) # # Array selector # self.ArraySelector = slicer.qMRMLNodeComboBox() self.ArraySelector.nodeTypes = ( ("vtkMRMLDoubleArrayNode"), "" ) self.ArraySelector.selectNodeUponCreation = False self.ArraySelector.addEnabled = False self.ArraySelector.removeEnabled = False self.ArraySelector.noneEnabled = True self.ArraySelector.showHidden = False self.ArraySelector.showChildNodeTypes = False self.ArraySelector.setMRMLScene( slicer.mrmlScene ) self.ArraySelector.setToolTip( "Array for analysis" ) arrayValFormLayout.addRow("Function to interpolate: ", self.ArraySelector) self.abscissaSB=ctk.ctkDoubleSpinBox() self.abscissaSB.minimum=0 self.abscissaSB.maximum=0 self.abscissaSB.value=0 self.abscissaSB.enabled=False arrayValFormLayout.addRow("Abscissa Value: ",self.abscissaSB) self.ordinateVal=qt.QLineEdit() self.ordinateVal.readOnly=True self.ordinateVal.text="" arrayValFormLayout.addRow("Value: ",self.ordinateVal) # connections self.applyButton.connect('clicked(bool)', self.onApplyButton) self.masterSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelect) self.ROISelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelect) self.ArraySelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelectArray) self.abscissaSB.connect("valueChanged(double)",self.getOrdinate) self.typeSel.connect("currentIndexChanged(int)",self.setOptions) # Add vertical spacer self.layout.addStretch(1)
def createUserInterface(self): self.__layout = self.__parent.createUserInterface() ''' # Input fiducials node selector #self.inputFiducialsNodeSelector = slicer.qMRMLNodeComboBox() self.inputFiducialsNodeSelector.toolTip = "Select a fiducial to define an insertion point for a screw." self.inputFiducialsNodeSelector.nodeTypes = (("vtkMRMLMarkupsFiducialNode"), "") self.inputFiducialsNodeSelector.addEnabled = False self.inputFiducialsNodeSelector.removeEnabled = False self.inputFiducialsNodeSelector.setMRMLScene( slicer.mrmlScene ) self.inputFiducialsNodeSelector.connect('currentNodeChanged(vtkMRMLNode*)', self.fidChanged) self.__layout.addRow("Select Insertion Point:", self.inputFiducialsNodeSelector) self.fid = self.inputFiducialsNodeSelector.currentNode() self.sliceChange() ''' ''' # Input model selector self.inputScrewSelector = ctk.ctkComboBox() self.inputScrewSelector.toolTip = "Select a screw to insert." screwList = ['Select a screw','475x30', '475x35', '475x45', '550x30', '550x40', '550x45', '625x35', '625x40', '625x45', '625x50', '700x35', '700x40', '700x45', '700x50'] self.inputScrewSelector.addItems(screwList) self.connect(self.inputScrewSelector, PythonQt.QtCore.SIGNAL('activated(QString)'), self.combo_chosen) self.__layout.addRow("Choose Screw:", self.inputScrewSelector) vText = qt.QLabel("1st Instrumented Level:") iText = qt.QLabel("# to Instrument:") aText = qt.QLabel("Approach Direction:") self.vSelector = qt.QComboBox() self.vSelector.setMaximumWidth(120) self.levels = ("C1","C2","C3","C4","C5","C6","C7","T1","T2","T3","T4","T5","T6","T7","T8","T9","T10","T11","T12","L1", "L2", "L3", "L4", "L5","S1") self.vSelector.addItems(self.levels) self.iSelector = qt.QComboBox() self.iSelector.setMaximumWidth(120) self.iSelector.addItems(['1','2','3','4','5','6','7','8','9','10','11','12']) self.aSelector = qt.QComboBox() self.aSelector.setMaximumWidth(120) self.aSelector.addItems(['Posterior','Anterior','Left','Right']) blank = qt.QLabel(" ") blank.setMaximumWidth(30) #self.__layout.addWidget(vText) #self.__layout.addWidget(self.vSelector) #self.__layout.addWidget(iText) #self.__layout.addWidget(self.iSelector) self.vertebraeGridBox = qt.QGridLayout() self.vertebraeGridBox.addWidget(vText,0,0) self.vertebraeGridBox.addWidget(self.vSelector,1,0) self.vertebraeGridBox.addWidget(blank,0,1) self.vertebraeGridBox.addWidget(iText,0,2) self.vertebraeGridBox.addWidget(blank,1,1) self.vertebraeGridBox.addWidget(self.iSelector,1,2) self.vertebraeGridBox.addWidget(blank,0,3) self.vertebraeGridBox.addWidget(aText,0,4) self.vertebraeGridBox.addWidget(blank,1,3) self.vertebraeGridBox.addWidget(self.aSelector,1,4) self.__layout.addRow(self.vertebraeGridBox) ''' self.fiducial = ctk.ctkComboBox() self.fiducial.toolTip = "Select an insertion site." self.fiducial.addItems(self.fiduciallist) self.connect(self.fiducial, PythonQt.QtCore.SIGNAL('activated(QString)'), self.fiducial_chosen) #self.screwGridLayout.addWidget(self.fiducial,0,0) self.__layout.addRow("Insertion Site:", self.fiducial) self.__fiducial = '' measuredText1 = qt.QLabel(" Measured:") measuredText2 = qt.QLabel(" Measured:") lengthText = qt.QLabel("Screw Length: ") widthText = qt.QLabel("Screw Width: ") self.length = ctk.ctkComboBox() self.length.toolTip = "Select a screw to insert." screwList = ['Select a length (mm)', '475', '550', '625', '700'] self.length.addItems(screwList) self.connect(self.length, PythonQt.QtCore.SIGNAL('activated(QString)'), self.length_chosen) self.lengthMeasure = qt.QLineEdit() #self.__layout.addRow("Screw Length:", self.length) #self.__layout.addRow("Measured Pedicle Length:", self.lengthMeasure) self.__length = '' self.QHBox1 = qt.QHBoxLayout() self.QHBox1.addWidget(lengthText) self.QHBox1.addWidget(self.length) self.QHBox1.addWidget(measuredText1) self.QHBox1.addWidget(self.lengthMeasure) self.__layout.addRow(self.QHBox1) self.diameter = ctk.ctkComboBox() self.diameter.toolTip = "Select a screw to insert." screwList = ['Select a diameter (mm)', '30', '35', '45', '50'] self.diameter.addItems(screwList) self.widthMeasure = qt.QLineEdit() self.connect(self.diameter, PythonQt.QtCore.SIGNAL('activated(QString)'), self.diameter_chosen) #self.__layout.addRow("Screw Diameter:", self.diameter) #self.__layout.addRow("Measured Pedicle Width:", self.widthMeasure) self.__diameter = '' self.QHBox2 = qt.QHBoxLayout() self.QHBox2.addWidget(widthText) self.QHBox2.addWidget(self.diameter) self.QHBox2.addWidget(measuredText2) self.QHBox2.addWidget(self.widthMeasure) self.__layout.addRow(self.QHBox2) # Load Screw Button self.__loadScrewButton = qt.QPushButton("Load Screw") self.__loadScrewButton.enabled = False #self.__layout.addWidget(self.__loadScrewButton) self.__loadScrewButton.connect('clicked(bool)', self.loadScrew) # Delete Screw Button self.__delScrewButton = qt.QPushButton("Delete Screw") self.__delScrewButton.enabled = True #self.__layout.addWidget(self.__delScrewButton) self.__delScrewButton.connect('clicked(bool)', self.delScrew) self.QHBox3 = qt.QHBoxLayout() self.QHBox3.addWidget(self.__loadScrewButton) self.QHBox3.addWidget(self.__delScrewButton) self.__layout.addRow(self.QHBox3) # Input model node selector self.modelNodeSelector = slicer.qMRMLNodeComboBox() self.modelNodeSelector.toolTip = "." self.modelNodeSelector.nodeTypes = (("vtkMRMLModelNode"), "") self.modelNodeSelector.addEnabled = False self.modelNodeSelector.removeEnabled = False self.modelNodeSelector.setMRMLScene(slicer.mrmlScene) #self.__layout.addRow("Current Screws:", self.modelNodeSelector) self.transformGrid = qt.QGridLayout() vText = qt.QLabel("Vertical Adjustment:") iText = qt.QLabel("Horizontal Adjustment:") self.transformGrid.addWidget(vText, 0, 0) self.transformGrid.addWidget(iText, 0, 2) self.b = ctk.ctkDoubleSpinBox() self.b.minimum = -45 self.b.maximum = 45 self.transformGrid.addWidget(self.b, 1, 0) # Transform Sliders self.transformSlider1 = ctk.ctkDoubleSlider() self.transformSlider1.minimum = -45 self.transformSlider1.maximum = 45 self.transformSlider1.connect('valueChanged(double)', self.transformSlider1ValueChanged) self.transformSlider1.connect('valueChanged(double)', self.b.setValue) self.transformSlider1.setMinimumHeight(120) #self.__layout.addRow("Rotate IS", self.transformSlider1) self.transformGrid.addWidget(self.transformSlider1, 1, 1) self.b.connect('valueChanged(double)', self.transformSlider1.setValue) # Transform Sliders self.transformSlider2 = ctk.ctkSliderWidget() self.transformSlider2.minimum = -45 self.transformSlider2.maximum = 45 self.transformSlider2.connect('valueChanged(double)', self.transformSlider2ValueChanged) self.transformSlider2.setMaximumWidth(200) #self.__layout.addRow("Rotate LR", self.transformSlider2) self.transformGrid.addWidget(self.transformSlider2, 1, 2) self.__layout.addRow(self.transformGrid) ''' # Transfors Sliders self.transformSlider3 = ctk.ctkSliderWidget() self.transformSlider3.minimum = 0 self.transformSlider3.maximum = 100 self.transformSlider3.connect('valueChanged(double)', self.transformSlider3ValueChanged) self.__layout.addRow("Drive Screw", self.transformSlider3) ''' # Insert Screw Button self.insertScrewButton = qt.QPushButton("Insert Screw") self.insertScrewButton.enabled = True #self.__layout.addWidget(self.__loadScrewButton) self.insertScrewButton.connect('clicked(bool)', self.insertScrew) # Backout Screw Button self.backoutScrewButton = qt.QPushButton("Backout Screw") self.backoutScrewButton.enabled = False #self.__layout.addWidget(self.__delScrewButton) self.backoutScrewButton.connect('clicked(bool)', self.backoutScrew) # Reset Screw Button self.resetScrewButton = qt.QPushButton("Reset Screw") self.resetScrewButton.enabled = True #self.__layout.addWidget(self.__delScrewButton) self.resetScrewButton.connect('clicked(bool)', self.resetScrew) self.QHBox4 = qt.QHBoxLayout() self.QHBox4.addWidget(self.insertScrewButton) self.QHBox4.addWidget(self.backoutScrewButton) self.QHBox4.addWidget(self.resetScrewButton) self.__layout.addRow(self.QHBox4) # Hide ROI Details #measurementsTable = ctk.ctkCollapsibleButton() #measurementsTable.text = "Measurements Table" #self.__layout.addWidget(measurementsTable) #measurementsTable.collapsed = True ''' self.view = qt.QTableView() self.model = qt.QStandardItemModel() self.view.setModel(self.model) item = qt.QStandardItem() item.setText("item") self.model.setItem(0,0,item) self.__layout.addWidget(self.view) ''' #self.__layout.addRow(self.screwGridLayout) # self.updateWidgetFromParameters(self.parameterNode()) qt.QTimer.singleShot(0, self.killButton) self.currentFidIndex = self.fiducial.currentIndex self.currentFidLabel = self.fiducial.currentText self.fidNode.GetNthFiducialPosition(self.currentFidIndex, self.coords) logging.debug("Coords: {0}".format(self.coords)) self.updateMeasurements() self.cameraFocus(self.coords)
def createUserInterface( self ): self.__layout = self.__parent.createUserInterface() self.fid = Helper.Screws() self.fids = len(self.fid) self.fidlist = ["Choose the puncture site"] self.dimeter = [] self.length = [] self.PSA = [] self.PTA = [] self.CZn = 0 self.CXn = 0 self.CLstep = 0 self.CData = 3.5 self.cScrew = "" self.csNo=0 self.screwList=[] self.manulYn=0 # logging.debug("fids: {0}".format(self.fids)) # zheli pNode = self.parameterNode() print(pNode) self.vertebra = str(pNode.GetParameter('vertebra')) # logging.debug("椎体") logging.debug(self.vertebra) self.inst_length = str(pNode.GetParameter('inst_length')) self.sides = str(pNode.GetParameter('sides')) for i in range(self.levels.index(self.vertebra), self.levels.index(self.vertebra) + int(self.inst_length)): # if self.vertebra == "部位": # self.fidlist.append(self.vertebra + "_" + str(i)) # else: if self.sides == "L&R": self.fidlist.append(self.levels[i] + "_" + "L") self.fidlist.append(self.levels[i] + "_" + "R") else: self.fidlist.append(self.levels[i] + "_" + self.sides) for i, v in enumerate(self.fidlist[1:]): Helper.addFid(self.fid[i][1],1,"Isthmus-{}".format(i),v,"pink") logging.debug("Fidlist: {0}".format(self.fidlist)) logging.debug(self.fidlist[0]) sText = qt.QLabel('Choose the puncture site:') self.sSelector = ctk.ctkComboBox() self.sSelector.toolTip = "Choose the puncture site" # screwList = ['选择穿刺部位', "cS1","cS2","cS3","cS4","cS5"] self.sSelector.addItems(self.fidlist) self.connect(self.sSelector, PythonQt.QtCore.SIGNAL('activated(QString)'), self.sSelector_chosen) self.__sSelector='' dText = qt.QLabel('Select screw diameter:') self.dSelector = ctk.ctkComboBox() self.dSelector.toolTip = "Select screw diameter" dimList = ['Select screw diametermm', "2.5","3","3.5","4","4.5","5","5.5","6","6.5","7","7.5","8"] self.dSelector.addItems(dimList) self.connect(self.dSelector, PythonQt.QtCore.SIGNAL('activated(QString)'), self.dSelector_chosen) self.__dSelector='' self.QHBox0 = qt.QHBoxLayout() self.QHBox0.addWidget(sText) self.QHBox0.addWidget(self.sSelector) self.QHBox0.addWidget(self.dSelector) self.__layout.addRow(self.QHBox0) self.manButton = qt.QPushButton("Update") self.okButton = qt.QPushButton("OK") self.resetButton = qt.QPushButton("Reset") self.QHBox9 = qt.QHBoxLayout() self.QHBox9.addWidget(self.manButton) self.QHBox9.addWidget(self.okButton) self.QHBox9.addWidget(self.resetButton) # self.QHBox9.addWidget(self.okButton) self.__layout.addRow(self.QHBox9) self.manButton.connect('clicked(bool)', self.manualUp) self.okButton.connect('clicked(bool)', self.okShow) self.resetButton.connect('clicked(bool)', self.reset) # self.screwsTable.setHorizontalHeaderLabels(horizontalHeaders) self.items = [] # Camera Transform Sliders transCam = ctk.ctkCollapsibleButton() transCam.text = "Shift Camera Position" transCam.collapsed = True self.__layout.addWidget(transCam) # transCam.collapsed = True camLayout = qt.QFormLayout(transCam) a = PythonQt.qMRMLWidgets.qMRMLTransformSliders() a.setMRMLTransformNode(slicer.mrmlScene.GetNodeByID('vtkMRMLLinearTransformNode4')) camLayout.addRow(a) qt.QTimer.singleShot(0, self.killButton)
def setup(self): QCLib.genericPanel.setup(self) # # Output Volume collapsible button # self.output = ctk.ctkCollapsibleButton(self.frame) self.output.setText("Output Volume") self.output.enabled=False self.framelayout.addWidget(self.output) # Layout within the dummy collapsible button parametersFormLayout = qt.QFormLayout(self.output) # # output volume selector # self.outputSelector = slicer.qMRMLNodeComboBox() #self.outputSelector.nodeTypes = ["vtkMRMLScalarVolumeNode"] self.outputSelector.nodeTypes = ["vtkMRMLLabelMapVolumeNode"] #self.outputSelector.addAttribute( "vtkMRMLScalarVolumeNode", "LabelMap", 1 ) self.outputSelector.selectNodeUponCreation = True self.outputSelector.addEnabled = True self.outputSelector.removeEnabled = True self.outputSelector.noneEnabled = False self.outputSelector.renameEnabled = True self.outputSelector.showHidden = False self.outputSelector.showChildNodeTypes = False self.outputSelector.setMRMLScene(slicer.mrmlScene) self.outputSelector.setToolTip("Output Volume") #self.outputSelector.enabled=False parametersFormLayout.addRow("Output Volume: ", self.outputSelector) #algorithm selector self.algorithmSel = ctk.ctkComboBox() algorithms=["Canny","Sobel","Zero Crossing Based"] self.algorithmSel.addItems(algorithms) #self.algorithmSel.enabled=False self.algorithmSel.editable=False self.algorithmSel.setCurrentIndex(0) parametersFormLayout.addRow("Edge Detection Algorithm", self.algorithmSel) self.optionFrame=qt.QFrame() self.optionFrame.setLayout(qt.QFormLayout()) self.optionFrame.enabled=False self.framelayout.addWidget(self.optionFrame) #variance slider self.varianceSlider = ctk.ctkSliderWidget() self.varianceSlider.minimum = 0 self.varianceSlider.maximum = 100 self.varianceSlider.setValue(2) #self.varianceSlider.enabled = False self.varianceSlider.setToolTip("Variance of the pre gaussian filter") self.optionFrame.layout().addRow("Variance", self.varianceSlider) #threshold slider self.threshSlider=ctk.ctkRangeWidget() self.threshSlider.minimum = 0 self.threshSlider.maximum = 0 self.threshSlider.setValues(0,0) #self.threshSlider.enabled=False self.threshSlider.setToolTip("Threshold of output volume") self.optionFrame.layout().addRow("Threshold", self.threshSlider) # # Apply Button # self.applyButton = qt.QPushButton("Apply") self.applyButton.toolTip = "Run the edge detection algotrithm" self.applyButton.enabled = False self.framelayout.addWidget(self.applyButton) # connections self.applyButton.connect('clicked(bool)', self.onApplyButton) self.masterSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelectInput) self.masterSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelect) self.outputSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelectOutput) self.outputSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelect) self.algorithmSel.connect("currentIndexChanged(int)", self.setOptionEnabled) # Add vertical spacer self.layout.addStretch(1) count = slicer.mrmlScene.GetNumberOfNodesByClass('vtkMRMLSliceCompositeNode') for n in xrange(count): compNode = slicer.mrmlScene.GetNthNodeByClass(n, 'vtkMRMLSliceCompositeNode') compNode.SetForegroundOpacity(1.0)
def setup(self): ScriptedLoadableModuleWidget.setup(self) # ------------------------------------------------------------------------------------- self.modelList = list() self.fieldList = list() self.ROIList = list() self.ROIDict = dict() # Key = Name of ROI # Value = Dictionary of Fields (key = Name of Field # Value = dictionary of shapes # key = name of shapes # value = Statistics store() self.logic = MeshStatisticsLogic() # ------------------------------------------------------------------------------------ # SHAPES INPUT # ------------------------------------------------------------------------------------ self.inputComboBox = slicer.qMRMLCheckableNodeComboBox() self.inputComboBox.nodeTypes = ['vtkMRMLModelNode'] self.inputComboBox.setMRMLScene(slicer.mrmlScene) inputLayout = qt.QFormLayout() inputLayout.addRow(' Models: ', self.inputComboBox) self.layout.addLayout(inputLayout) self.inputComboBox.connect('checkedNodesChanged()', self.onInputComboBoxCheckedNodesChanged) # ------------------------------------------------------------------------------------ # ROI TABLE # ------------------------------------------------------------------------------------ self.ROIComboBox = ctk.ctkComboBox() self.ROIComboBox.adjustSize() self.ROICheckBox = qt.QCheckBox('All') ROILayout = qt.QHBoxLayout() ROILayout_0 = qt.QFormLayout() ROILayout_0.addRow(' Region considered: ', self.ROIComboBox) ROILayout.addLayout(ROILayout_0) ROILayout.addWidget(self.ROICheckBox) self.layout.addLayout(ROILayout) self.ROICheckBox.connect('stateChanged(int)', self.onROICheckBoxStateChanged) # ------------------------------------------------------------------------------------ # FIELD TABLE # ------------------------------------------------------------------------------------ self.tableField = qt.QTableWidget() self.tableField.setColumnCount(2) self.tableField.setMinimumHeight(250) self.tableField.setHorizontalHeaderLabels([' ', ' Field Name ']) self.tableField.setColumnWidth(0, 20) self.tableField.setColumnWidth(1, 260) self.tableField.setSizePolicy(qt.QSizePolicy().Expanding, qt.QSizePolicy().Expanding) label = qt.QLabel(' Select a Field to compute statistics on:') self.fieldLayout = qt.QVBoxLayout() self.fieldLayout.addWidget(label) self.fieldLayout.addWidget(self.tableField) self.layout.addLayout(self.fieldLayout) # ------------------------------------------------------------------------------------ # RUN # ------------------------------------------------------------------------------------ self.runButton = qt.QPushButton(' Run ') self.runButton.enabled = False roiLayout = qt.QHBoxLayout() roiLayout.addWidget(self.runButton) self.layout.addLayout(roiLayout) self.runButton.connect('clicked()', self.onRunButton) # ------------------------------------------------------------------------------------ # Statistics Table - Export # ------------------------------------------------------------------------------------ self.tabROI = qt.QTabWidget() self.tabROI.setTabPosition(0) self.tabROI.adjustSize() # ---------------------------- Directory - Export Button ----------------------------- self.directoryExport = ctk.ctkDirectoryButton() self.exportCheckBox = qt.QCheckBox('Separate Files') self.exportCheckBox.setChecked(True) self.exportButton = qt.QPushButton(' Export ') self.exportButton.enabled = True self.exportPointValueCheckBox = qt.QCheckBox('Export Value on Each Point') self.exportLayout = qt.QVBoxLayout() self.directoryAndExportLayout = qt.QHBoxLayout() self.directoryAndExportLayout.addWidget(self.directoryExport) self.directoryAndExportLayout.addWidget(self.exportCheckBox) self.directoryAndExportLayout.addWidget(self.exportPointValueCheckBox) self.exportButtonsLayout = qt.QHBoxLayout() self.exportButtonsLayout.addWidget(self.exportButton) self.exportLayout.addLayout(self.directoryAndExportLayout) self.exportLayout.addLayout(self.exportButtonsLayout) self.layout.addStretch(1) self.logic.updateInterface(self.tableField, self.ROIComboBox, self.ROIList, self.modelList, self.layout) # ------------------------------------------------------------------------------------ # OBSERVERS # ------------------------------------------------------------------------------------ def onCloseScene(obj, event): # initialize Parameters globals()['MeshStatistics'] = slicer.util.reloadScriptedModule('MeshStatistics') slicer.mrmlScene.AddObserver(slicer.mrmlScene.EndCloseEvent, onCloseScene)
def createUserInterface( self ): self.__layout = self.__parent.createUserInterface() ''' # Input fiducials node selector #self.inputFiducialsNodeSelector = slicer.qMRMLNodeComboBox() self.inputFiducialsNodeSelector.toolTip = "Select a fiducial to define an insertion point for a screw." self.inputFiducialsNodeSelector.nodeTypes = (("vtkMRMLMarkupsFiducialNode"), "") self.inputFiducialsNodeSelector.addEnabled = False self.inputFiducialsNodeSelector.removeEnabled = False self.inputFiducialsNodeSelector.setMRMLScene( slicer.mrmlScene ) self.inputFiducialsNodeSelector.connect('currentNodeChanged(vtkMRMLNode*)', self.fidChanged) self.__layout.addRow("Select Insertion Point:", self.inputFiducialsNodeSelector) self.fid = self.inputFiducialsNodeSelector.currentNode() self.sliceChange() ''' ''' # Input model selector self.inputScrewSelector = ctk.ctkComboBox() self.inputScrewSelector.toolTip = "Select a screw to insert." screwList = ['Select a screw','475x30', '475x35', '475x45', '550x30', '550x40', '550x45', '625x35', '625x40', '625x45', '625x50', '700x35', '700x40', '700x45', '700x50'] self.inputScrewSelector.addItems(screwList) self.connect(self.inputScrewSelector, PythonQt.QtCore.SIGNAL('activated(QString)'), self.combo_chosen) self.__layout.addRow("Choose Screw:", self.inputScrewSelector) vText = qt.QLabel("1st Instrumented Level:") iText = qt.QLabel("# to Instrument:") aText = qt.QLabel("Approach Direction:") self.vSelector = qt.QComboBox() self.vSelector.setMaximumWidth(120) self.levels = ("C1","C2","C3","C4","C5","C6","C7","T1","T2","T3","T4","T5","T6","T7","T8","T9","T10","T11","T12","L1", "L2", "L3", "L4", "L5","S1") self.vSelector.addItems(self.levels) self.iSelector = qt.QComboBox() self.iSelector.setMaximumWidth(120) self.iSelector.addItems(['1','2','3','4','5','6','7','8','9','10','11','12']) self.aSelector = qt.QComboBox() self.aSelector.setMaximumWidth(120) self.aSelector.addItems(['Posterior','Anterior','Left','Right']) blank = qt.QLabel(" ") blank.setMaximumWidth(30) #self.__layout.addWidget(vText) #self.__layout.addWidget(self.vSelector) #self.__layout.addWidget(iText) #self.__layout.addWidget(self.iSelector) self.vertebraeGridBox = qt.QGridLayout() self.vertebraeGridBox.addWidget(vText,0,0) self.vertebraeGridBox.addWidget(self.vSelector,1,0) self.vertebraeGridBox.addWidget(blank,0,1) self.vertebraeGridBox.addWidget(iText,0,2) self.vertebraeGridBox.addWidget(blank,1,1) self.vertebraeGridBox.addWidget(self.iSelector,1,2) self.vertebraeGridBox.addWidget(blank,0,3) self.vertebraeGridBox.addWidget(aText,0,4) self.vertebraeGridBox.addWidget(blank,1,3) self.vertebraeGridBox.addWidget(self.aSelector,1,4) self.__layout.addRow(self.vertebraeGridBox) ''' self.fiducial = ctk.ctkComboBox() self.fiducial.toolTip = "Select an insertion site." #fiducialList = ['Select an insertion landmark', self.fiduciallist] #print self.fiduciallist #print fiducialList #self.fiducial.addItem("Select an insertion site, no really") #self.fiducial.addItem("Select an insertion site.") self.fiducial.addItems(self.fiduciallist) self.connect(self.fiducial, PythonQt.QtCore.SIGNAL('activated(QString)'), self.fiducial_chosen) #self.connect(self.fiducial, PythonQt.QtCore.SIGNAL('activated(QString)'), self.fidChanged) #self.screwGridLayout.addWidget(self.fiducial,0,0) self.__layout.addRow("Insertion Site:", self.fiducial) self.__fiducial = '' measuredText1 = qt.QLabel(" Measured:") measuredText2 = qt.QLabel(" Measured:") lengthText = qt.QLabel("Screw Length: ") widthText = qt.QLabel("Screw Width: ") self.length = ctk.ctkComboBox() self.length.toolTip = "Select a screw to insert." screwList = ['Select a length (mm)','475', '550','625','700'] self.length.addItems(screwList) self.connect(self.length, PythonQt.QtCore.SIGNAL('activated(QString)'), self.length_chosen) self.lengthMeasure = qt.QLineEdit() #self.__layout.addRow("Screw Length:", self.length) #self.__layout.addRow("Measured Pedicle Length:", self.lengthMeasure) self.__length = '' self.QHBox1 = qt.QHBoxLayout() self.QHBox1.addWidget(lengthText) self.QHBox1.addWidget(self.length) self.QHBox1.addWidget(measuredText1) self.QHBox1.addWidget(self.lengthMeasure) self.__layout.addRow(self.QHBox1) self.diameter = ctk.ctkComboBox() self.diameter.toolTip = "Select a screw to insert." screwList = ['Select a diameter (mm)','30', '35', '45', '50'] self.diameter.addItems(screwList) self.widthMeasure = qt.QLineEdit() self.connect(self.diameter, PythonQt.QtCore.SIGNAL('activated(QString)'), self.diameter_chosen) #self.__layout.addRow("Screw Diameter:", self.diameter) #self.__layout.addRow("Measured Pedicle Width:", self.widthMeasure) self.__diameter = '' self.QHBox2 = qt.QHBoxLayout() self.QHBox2.addWidget(widthText) self.QHBox2.addWidget(self.diameter) self.QHBox2.addWidget(measuredText2) self.QHBox2.addWidget(self.widthMeasure) self.__layout.addRow(self.QHBox2) # Load Screw Button self.__loadScrewButton = qt.QPushButton("Load Screw") self.__loadScrewButton.enabled = False #self.__layout.addWidget(self.__loadScrewButton) self.__loadScrewButton.connect('clicked(bool)', self.loadScrew) # Delete Screw Button self.__delScrewButton = qt.QPushButton("Delete Screw") self.__delScrewButton.enabled = True #self.__layout.addWidget(self.__delScrewButton) self.__delScrewButton.connect('clicked(bool)', self.delScrew) self.QHBox3 = qt.QHBoxLayout() self.QHBox3.addWidget(self.__loadScrewButton) self.QHBox3.addWidget(self.__delScrewButton) self.__layout.addRow(self.QHBox3) # Input model node selector self.modelNodeSelector = slicer.qMRMLNodeComboBox() self.modelNodeSelector.toolTip = "." self.modelNodeSelector.nodeTypes = (("vtkMRMLModelNode"), "") self.modelNodeSelector.addEnabled = False self.modelNodeSelector.removeEnabled = False self.modelNodeSelector.setMRMLScene( slicer.mrmlScene ) #self.__layout.addRow("Current Screws:", self.modelNodeSelector) self.transformGrid = qt.QGridLayout() vText = qt.QLabel("Vertical Adjustment:") iText = qt.QLabel("Horizontal Adjustment:") self.transformGrid.addWidget(vText, 0,0) self.transformGrid.addWidget(iText, 0,2) self.b = ctk.ctkDoubleSpinBox() self.b.minimum = -45 self.b.maximum = 45 self.transformGrid.addWidget(self.b, 1,0) # Transform Sliders self.transformSlider1 = ctk.ctkDoubleSlider() self.transformSlider1.minimum = -45 self.transformSlider1.maximum = 45 self.transformSlider1.connect('valueChanged(double)', self.transformSlider1ValueChanged) self.transformSlider1.connect('valueChanged(double)', self.b.setValue) self.transformSlider1.setMinimumHeight(120) #self.__layout.addRow("Rotate IS", self.transformSlider1) self.transformGrid.addWidget(self.transformSlider1, 1,1) self.b.connect('valueChanged(double)', self.transformSlider1.setValue) # Transform Sliders self.transformSlider2 = ctk.ctkSliderWidget() self.transformSlider2.minimum = -45 self.transformSlider2.maximum = 45 self.transformSlider2.connect('valueChanged(double)', self.transformSlider2ValueChanged) self.transformSlider2.setMaximumWidth(200) #self.__layout.addRow("Rotate LR", self.transformSlider2) self.transformGrid.addWidget(self.transformSlider2, 1,2) self.__layout.addRow(self.transformGrid) ''' # Transfors Sliders self.transformSlider3 = ctk.ctkSliderWidget() self.transformSlider3.minimum = 0 self.transformSlider3.maximum = 100 self.transformSlider3.connect('valueChanged(double)', self.transformSlider3ValueChanged) self.__layout.addRow("Drive Screw", self.transformSlider3) ''' # Insert Screw Button self.insertScrewButton = qt.QPushButton("Insert Screw") self.insertScrewButton.enabled = True #self.__layout.addWidget(self.__loadScrewButton) self.insertScrewButton.connect('clicked(bool)', self.insertScrew) # Backout Screw Button self.backoutScrewButton = qt.QPushButton("Backout Screw") self.backoutScrewButton.enabled = False #self.__layout.addWidget(self.__delScrewButton) self.backoutScrewButton.connect('clicked(bool)', self.backoutScrew) # Reset Screw Button self.resetScrewButton = qt.QPushButton("Reset Screw") self.resetScrewButton.enabled = True #self.__layout.addWidget(self.__delScrewButton) self.resetScrewButton.connect('clicked(bool)', self.resetScrew) self.QHBox4 = qt.QHBoxLayout() self.QHBox4.addWidget(self.insertScrewButton) self.QHBox4.addWidget(self.backoutScrewButton) self.QHBox4.addWidget(self.resetScrewButton) self.__layout.addRow(self.QHBox4) # Hide ROI Details #measurementsTable = ctk.ctkCollapsibleButton() #measurementsTable.text = "Measurements Table" #self.__layout.addWidget(measurementsTable) #measurementsTable.collapsed = True ''' self.view = qt.QTableView() self.model = qt.QStandardItemModel() self.view.setModel(self.model) item = qt.QStandardItem() item.setText("item") self.model.setItem(0,0,item) self.__layout.addWidget(self.view) ''' #self.__layout.addRow(self.screwGridLayout) # self.updateWidgetFromParameters(self.parameterNode()) qt.QTimer.singleShot(0, self.killButton) self.currentFidIndex = self.fiducial.currentIndex self.currentFidLabel = self.fiducial.currentText self.fidNode.GetNthFiducialPosition(self.currentFidIndex,self.coords) print self.coords self.updateMeasurements() self.cameraFocus(self.coords)
def setup(self): QCLib.genericPanel.setup(self) # # Parameters Area # parametersCollapsibleButton = ctk.ctkCollapsibleButton() parametersCollapsibleButton.text = "Parameters" self.framelayout.addWidget(parametersCollapsibleButton) # Layout within the dummy collapsible button parametersFormLayout = qt.QFormLayout(parametersCollapsibleButton) # # ROI volume selector # self.ROISelector = slicer.qMRMLNodeComboBox() # self.ROISelector.nodeTypes = ( ("vtkMRMLScalarVolumeNode"), "" ) # self.ROISelector.addAttribute( "vtkMRMLScalarVolumeNode", "LabelMap", 1 ) self.ROISelector.nodeTypes = ["vtkMRMLLabelMapVolumeNode"] self.ROISelector.selectNodeUponCreation = False self.ROISelector.addEnabled = False self.ROISelector.removeEnabled = False self.ROISelector.noneEnabled = True self.ROISelector.showHidden = False self.ROISelector.showChildNodeTypes = False self.ROISelector.setMRMLScene( slicer.mrmlScene ) self.ROISelector.setToolTip( "ROI for analysis" ) parametersFormLayout.addRow("Rectangular ROI: ", self.ROISelector) #object type selector self.typeSel = ctk.ctkComboBox() types=["Wedge","Ramp"] self.typeSel.addItems(types) self.typeSel.editable=False self.typeSel.setCurrentIndex(0) parametersFormLayout.addRow("Type of Analysis", self.typeSel) self.angleSB=ctk.ctkDoubleSpinBox() self.angleSB.minimum=0 self.angleSB.maximum=360 self.angleSB.value=11.3 self.angleSB.enabled=True parametersFormLayout.addRow("Angle Value: ",self.angleSB) #direction selector self.directionSel = ctk.ctkComboBox() directions=["x vs y","y vs x","z vs x"]#todo: add all directions self.directionSel.addItems(directions) self.directionSel.editable=False self.directionSel.setCurrentIndex(0) parametersFormLayout.addRow("Direction: ", self.directionSel) # # Apply Button # self.applyButton = qt.QPushButton("Apply") self.applyButton.toolTip = "Calculate FWHM." self.applyButton.enabled = False parametersFormLayout.addRow(self.applyButton) resultCollapsibleButton = ctk.ctkCollapsibleButton() resultCollapsibleButton.text = "Results" self.framelayout.addWidget(resultCollapsibleButton) # Layout within the dummy collapsible button resultFormLayout = qt.QFormLayout(resultCollapsibleButton) # # Array selector # self.ArraySelector = slicer.qMRMLNodeComboBox() self.ArraySelector.nodeTypes = ( ("vtkMRMLDoubleArrayNode"), "" ) self.ArraySelector.selectNodeUponCreation = False self.ArraySelector.addEnabled = False self.ArraySelector.removeEnabled = False self.ArraySelector.noneEnabled = True self.ArraySelector.showHidden = False self.ArraySelector.showChildNodeTypes = False self.ArraySelector.setMRMLScene( slicer.mrmlScene ) self.ArraySelector.setToolTip( "Ramp profile" ) resultFormLayout.addRow("Ramp profile: ", self.ArraySelector) self.FWHMVal=qt.QLineEdit() self.FWHMVal.readOnly=True self.FWHMVal.text="" resultFormLayout.addRow("FWHM: ",self.FWHMVal) self.SliceThkVal=qt.QLineEdit() self.SliceThkVal.readOnly=True self.SliceThkVal.text="" resultFormLayout.addRow("SliceThk: ",self.SliceThkVal) # connections self.applyButton.connect('clicked(bool)', self.onApplyButton) self.masterSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelect) self.ROISelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelect) self.ArraySelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelectArray) # Add vertical spacer self.layout.addStretch(1)
def createUserInterface( self ): self.__layout = qt.QFormLayout( self ) self.__layout.setVerticalSpacing( 5 ) # Add empty rows self.__layout.addRow( "", qt.QWidget() ) self.__layout.addRow( "", qt.QWidget() ) viewText = qt.QLabel("Viewpoint:") self.views = ctk.ctkComboBox() self.views.toolTip = "Select your view point." self.views.addItem("Left") self.views.addItem("Right") self.connect(self.views, PythonQt.QtCore.SIGNAL('activated(QString)'), self.cameraSide) workText = qt.QLabel("Screw Insertion Workflow") self.QHBox = qt.QHBoxLayout() self.QHBox.addWidget(workText) self.__layout.addRow(self.QHBox) self.startMeasurements = qt.QPushButton("Click to Add") self.startMeasurements.connect('clicked(bool)', self.addFiducials) self.markerPosition = qt.QPushButton("Click to Add") self.markerPosition.connect('clicked(bool)', self.addPositions) self.adjustClamp = qt.QPushButton("Click to Adjust") self.adjustClamp.connect('clicked(bool)', self.moveAruco) self.adjustClamp.enabled = False self.findSP = qt.QPushButton("Click to find startpoint") self.findSP.connect('clicked(bool)', self.findStartPoints) self.findSP.enabled = False self.stopTracking = qt.QPushButton("Click to stop tracking") self.stopTracking.connect('clicked(bool)', self.stopSPTracking) self.stopTracking.enabled = False self.aPoints= qt.QPushButton("Click to choose points") self.aPoints.connect('clicked(bool)', self.selectAPoints) self.aPoints.enabled = False self.fiducial = ctk.ctkComboBox() self.fiducial.toolTip = "Select an insertion site." self.fiducial.addItems(self.fiduciallist) self.connect(self.fiducial, PythonQt.QtCore.SIGNAL('activated(QString)'), self.fidChanged) eText = qt.QLabel("1. Add Entry Point:") self.QHBox1 = qt.QHBoxLayout() self.QHBox1.addWidget(eText) self.QHBox1.addWidget(self.startMeasurements) self.__layout.addRow(self.QHBox1) sText = qt.QLabel("2. Active Entry Point:") self.QHBox2 = qt.QHBoxLayout() self.QHBox2.addWidget(sText) self.QHBox2.addWidget(self.fiducial) self.__layout.addRow(self.QHBox2) qText = qt.QLabel("3. Add Clamp Position Point") self.arucoBox = qt.QHBoxLayout() self.arucoBox.addWidget(qText) self.arucoBox.addWidget(self.markerPosition) self.__layout.addRow(self.arucoBox) mText = qt.QLabel("4. Adjust Clamp Position") self.clampBox = qt.QHBoxLayout() self.clampBox.addWidget(mText) self.clampBox.addWidget(self.adjustClamp) self.__layout.addRow(self.clampBox) aText = qt.QLabel("5. Add anatomical points:") self.anatomBox = qt.QHBoxLayout() self.anatomBox.addWidget(aText) self.anatomBox.addWidget(self.aPoints) self.__layout.addRow(self.anatomBox) tText = qt.QLabel("6. Start Tracking") self.trackingBox = qt.QHBoxLayout() self.trackingBox.addWidget(tText) self.trackingBox.addWidget(self.findSP) self.__layout.addRow(self.trackingBox) stText = qt.QLabel("7. Stop Tracking") self.trackingBoxStop = qt.QHBoxLayout() self.trackingBoxStop.addWidget(stText) self.trackingBoxStop.addWidget(self.stopTracking) self.__layout.addRow(self.trackingBoxStop) self.transformGrid = qt.QGridLayout() self.__layout.addRow(self.transformGrid) self.delSP = qt.QPushButton("Remove Start Point") self.delSP.enabled = False self.delSP.connect('clicked(bool)', self.delStartPoint) self.QHBox4 = qt.QHBoxLayout() self.QHBox4.addWidget(self.delSP) self.__layout.addRow(self.QHBox4) navCollapsibleButton = ctk.ctkCollapsibleButton() navCollapsibleButton.text = "Navigation" self.__layout.addWidget(navCollapsibleButton) navCollapsibleButton.collapsed = True # Layout navLayout = qt.QFormLayout(navCollapsibleButton) self.resetSliceButton = qt.QPushButton("Reset Slice Views") navLayout.addRow(self.resetSliceButton) self.resetSliceButton.connect('clicked(bool)', self.resetSliceViews) qt.QTimer.singleShot(0, self.killButton)