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 create(self): super(WandEffectOptions,self).create() self.toleranceFrame = qt.QFrame(self.frame) self.toleranceFrame.setLayout(qt.QHBoxLayout()) self.frame.layout().addWidget(self.toleranceFrame) self.widgets.append(self.toleranceFrame) self.toleranceLabel = qt.QLabel("Tolerance:", self.toleranceFrame) self.toleranceLabel.setToolTip("Set the tolerance of the wand in terms of background pixel values") self.toleranceFrame.layout().addWidget(self.toleranceLabel) self.widgets.append(self.toleranceLabel) self.toleranceSpinBox = ctk.ctkDoubleSpinBox(self.toleranceFrame) self.toleranceSpinBox.setToolTip("Set the tolerance of the wand in terms of background pixel values") self.toleranceSpinBox.minimum = 0 self.toleranceSpinBox.maximum = 1000 self.toleranceSpinBox.suffix = "" self.toleranceFrame.layout().addWidget(self.toleranceSpinBox) self.widgets.append(self.toleranceSpinBox) self.maxPixelsFrame = qt.QFrame(self.frame) self.maxPixelsFrame.setLayout(qt.QHBoxLayout()) self.frame.layout().addWidget(self.maxPixelsFrame) self.widgets.append(self.maxPixelsFrame) self.maxPixelsLabel = qt.QLabel("Max Pixels per click:", self.maxPixelsFrame) self.maxPixelsLabel.setToolTip("Set the maxPixels for each click") self.maxPixelsFrame.layout().addWidget(self.maxPixelsLabel) self.widgets.append(self.maxPixelsLabel) self.maxPixelsSpinBox = ctk.ctkDoubleSpinBox(self.maxPixelsFrame) self.maxPixelsSpinBox.setToolTip("Set the maxPixels for each click") self.maxPixelsSpinBox.minimum = 1 self.maxPixelsSpinBox.maximum = 100000 self.maxPixelsSpinBox.suffix = "" self.maxPixelsFrame.layout().addWidget(self.maxPixelsSpinBox) self.widgets.append(self.maxPixelsSpinBox) self.fillModeFrame = qt.QFrame(self.frame) self.fillModeFrame.setLayout(qt.QHBoxLayout()) self.frame.layout().addWidget(self.fillModeFrame) self.widgets.append(self.fillModeFrame) self.fillModeCheckBox = qt.QCheckBox(self.fillModeFrame) self.fillModeCheckBox.text = "Fill Volume" self.fillModeCheckBox.setToolTip("Fill in 3D when checked, else fill plane") self.fillModeFrame.layout().addWidget(self.fillModeCheckBox) self.widgets.append(self.fillModeCheckBox) EditorLib.HelpButton(self.frame, "Use this tool to label all voxels that are within a tolerance of where you click") # don't connect the signals and slots directly - instead, add these # to the list of connections so that gui callbacks can be cleanly # disabled while the gui is being updated. This allows several gui # elements to be interlinked with signal/slots but still get updated # as a unit to the new value of the mrml node. self.connections.append( (self.toleranceSpinBox, 'valueChanged(double)', self.onToleranceSpinBoxChanged) ) self.connections.append( (self.maxPixelsSpinBox, 'valueChanged(double)', self.onMaxPixelsSpinBoxChanged) ) self.connections.append( (self.fillModeCheckBox, 'clicked()', self.onFillModeClicked) ) # Add vertical spacer self.frame.layout().addStretch(1)
def setup(self): self.imagesDirectory = "D:/w/data/DepthNetworkData/5/" self.initializeButton = qt.QPushButton("Initialize") self.initializeButton.clicked.connect(self.Initialize) self.layout.addWidget(self.initializeButton) imagesCollapseButton = ctk.ctkCollapsibleButton() imagesCollapseButton.text = "Images" self.layout.addWidget(imagesCollapseButton) imagesLayout = qt.QHBoxLayout(imagesCollapseButton) self.depthMapImageView = qt.QLabel() self.RGBImageView = qt.QLabel() self.depthMapImageView.resize(200, 200) self.RGBImageView.resize(200, 200) imagesLayout.addWidget(self.depthMapImageView) imagesLayout.addWidget(self.RGBImageView) self.RGBImageView.setSizePolicy(qt.QSizePolicy.MinimumExpanding, qt.QSizePolicy.MinimumExpanding) self.depthMapImageView.setSizePolicy(qt.QSizePolicy.MinimumExpanding, qt.QSizePolicy.MinimumExpanding) self.imageNumber = qt.QLabel("-") self.layout.addWidget(self.imageNumber) controlsWidget = qt.QWidget() self.layout.addWidget(controlsWidget) forwardsBackwardsLayout = qt.QHBoxLayout(controlsWidget) self.backwardsButton = qt.QPushButton("<") self.backwardsButton.clicked.connect(self.Backwards) forwardsBackwardsLayout.addWidget(self.backwardsButton) self.forwardsButton = qt.QPushButton(">") self.forwardsButton.clicked.connect(self.Forwards) forwardsBackwardsLayout.addWidget(self.forwardsButton) self.focalLengthBox = ctk.ctkDoubleSpinBox() self.focalLengthBox.maximum = 100000.0 self.focalLengthBox.minimum = 0.0 self.focalLengthBox.setValue(200.0) self.layout.addWidget(self.focalLengthBox) self.depthDividerBox = ctk.ctkDoubleSpinBox() self.depthDividerBox.setValue(2.5) self.depthDividerBox.maximum = 100000.0 self.depthDividerBox.minimum = 0.0 self.layout.addWidget(self.depthDividerBox) self.pointCloudButton = qt.QPushButton("Create and render point cloud") self.pointCloudButton.clicked.connect(self.OnConvertToPointCloud) self.layout.addWidget(self.pointCloudButton) inputsWidget = qt.QWidget() self.layout.addWidget(inputsWidget) inputsLayout = qt.QFormLayout(inputsWidget) self.baseModelSelector = slicer.qMRMLNodeComboBox() self.baseModelSelector.nodeTypes = (("vtkMRMLModelNode"), "") self.baseModelSelector.selectNodeUponCreation = False self.baseModelSelector.addEnabled = False self.baseModelSelector.removeEnabled = True self.baseModelSelector.renameEnabled = True self.baseModelSelector.noneEnabled = False self.baseModelSelector.showHidden = False self.baseModelSelector.showChildNodeTypes = False self.baseModelSelector.setMRMLScene(slicer.mrmlScene) inputsLayout.addRow("Base Model: ", self.baseModelSelector) self.pointCloudSelector = slicer.qMRMLNodeComboBox() self.pointCloudSelector.nodeTypes = (("vtkMRMLModelNode"), "") self.pointCloudSelector.selectNodeUponCreation = True self.pointCloudSelector.addEnabled = True self.pointCloudSelector.removeEnabled = True self.pointCloudSelector.renameEnabled = True self.pointCloudSelector.noneEnabled = False self.pointCloudSelector.showHidden = False self.pointCloudSelector.showChildNodeTypes = False self.pointCloudSelector.setMRMLScene(slicer.mrmlScene) inputsLayout.addRow("Point Cloud Model: ", self.pointCloudSelector) self.booleanModelSelector = slicer.qMRMLNodeComboBox() self.booleanModelSelector.nodeTypes = (("vtkMRMLModelNode"), "") self.booleanModelSelector.selectNodeUponCreation = True self.booleanModelSelector.addEnabled = True self.booleanModelSelector.removeEnabled = True self.booleanModelSelector.renameEnabled = True self.booleanModelSelector.noneEnabled = False self.booleanModelSelector.showHidden = False self.booleanModelSelector.showChildNodeTypes = False self.booleanModelSelector.setMRMLScene(slicer.mrmlScene) inputsLayout.addRow("Boolean Model: ", self.booleanModelSelector) self.transientModelSelector = slicer.qMRMLNodeComboBox() self.transientModelSelector.nodeTypes = (("vtkMRMLModelNode"), "") self.transientModelSelector.selectNodeUponCreation = True self.transientModelSelector.addEnabled = True self.transientModelSelector.removeEnabled = True self.transientModelSelector.renameEnabled = True self.transientModelSelector.noneEnabled = False self.transientModelSelector.showHidden = False self.transientModelSelector.showChildNodeTypes = False self.transientModelSelector.setMRMLScene(slicer.mrmlScene) inputsLayout.addRow("Transient Model: ", self.transientModelSelector) self.transientTransformSelector = slicer.qMRMLNodeComboBox() self.transientTransformSelector.nodeTypes = (( "vtkMRMLLinearTransformNode"), "") self.transientTransformSelector.selectNodeUponCreation = True self.transientTransformSelector.addEnabled = True self.transientTransformSelector.removeEnabled = True self.transientTransformSelector.renameEnabled = True self.transientTransformSelector.noneEnabled = False self.transientTransformSelector.showHidden = False self.transientTransformSelector.showChildNodeTypes = False self.transientTransformSelector.setMRMLScene(slicer.mrmlScene) inputsLayout.addRow("Transient Transform Node: ", self.transientTransformSelector) self.transformSelector = slicer.qMRMLNodeComboBox() self.transformSelector.nodeTypes = (("vtkMRMLLinearTransformNode"), "") self.transformSelector.selectNodeUponCreation = True self.transformSelector.addEnabled = True self.transformSelector.removeEnabled = True self.transformSelector.renameEnabled = True self.transformSelector.noneEnabled = False self.transformSelector.showHidden = False self.transformSelector.showChildNodeTypes = False self.transformSelector.setMRMLScene(slicer.mrmlScene) inputsLayout.addRow("Transform Node: ", self.transformSelector) self.iterationsSpinBox = qt.QSpinBox() self.iterationsSpinBox.setMaximum(50000) self.iterationsSpinBox.setMinimum(100) self.iterationsSpinBox.value = 1000 inputsLayout.addRow("Iterations: ", self.iterationsSpinBox) self.landmarksSpinBox = qt.QSpinBox() self.landmarksSpinBox.setMaximum(50000) self.landmarksSpinBox.setMinimum(100) self.landmarksSpinBox.value = 1000 inputsLayout.addRow("Landmarks: ", self.landmarksSpinBox) self.booleanCheckBox = qt.QCheckBox() self.booleanCheckBox.setChecked(False) inputsLayout.addRow("Use boolean: ", self.booleanCheckBox) self.registerButton = qt.QPushButton( "Create, render, and register point cloud") self.registerButton.clicked.connect(self.OnRegister) self.layout.addWidget(self.registerButton) spacer = qt.QSpacerItem(1, 14, qt.QSizePolicy.Expanding, qt.QSizePolicy.Expanding)
def setup(self): ScriptedLoadableModuleWidget.setup(self) self.logic = BitmapGeneratorLogic() # Instantiate and connect widgets ... # # Printer parameters Area # printerParametersCollapsibleButton = ctk.ctkCollapsibleButton() printerParametersCollapsibleButton.text = "Printer parameters" self.layout.addWidget(printerParametersCollapsibleButton) # Layout within the dummy collapsible button printerParametersFormLayout = qt.QFormLayout( printerParametersCollapsibleButton) self.xResolutionDpiSpinBox = ctk.ctkDoubleSpinBox() self.xResolutionDpiSpinBox.setToolTip( "Resolution of exported images along X axis.") self.xResolutionDpiSpinBox.decimals = 0 self.xResolutionDpiSpinBox.minimum = 60 self.xResolutionDpiSpinBox.maximum = 2400 self.xResolutionDpiSpinBox.suffix = "DPI" self.xResolutionDpiSpinBox.value = self.logic.xResolutionDpi self.xResolutionDpiSpinBox.singleStep = 100 printerParametersFormLayout.addRow("X resolution: ", self.xResolutionDpiSpinBox) self.yResolutionDpiSpinBox = ctk.ctkDoubleSpinBox() self.yResolutionDpiSpinBox.setToolTip( "Resolution of exported images along Y axis.") self.yResolutionDpiSpinBox.decimals = 0 self.yResolutionDpiSpinBox.minimum = 60 self.yResolutionDpiSpinBox.maximum = 2400 self.yResolutionDpiSpinBox.suffix = "DPI" self.yResolutionDpiSpinBox.value = self.logic.yResolutionDpi self.yResolutionDpiSpinBox.singleStep = 100 printerParametersFormLayout.addRow("Y resolution: ", self.yResolutionDpiSpinBox) self.layerThicknessMmSpinBox = ctk.ctkDoubleSpinBox() self.layerThicknessMmSpinBox.setToolTip( "Distance between extracted image slices.") self.layerThicknessMmSpinBox.decimals = 4 self.layerThicknessMmSpinBox.minimum = 0.0001 self.layerThicknessMmSpinBox.maximum = 50.0 self.layerThicknessMmSpinBox.suffix = "mm" self.layerThicknessMmSpinBox.value = self.logic.slabSpacingMm self.layerThicknessMmSpinBox.singleStep = 0.1 printerParametersFormLayout.addRow("Layer thickness: ", self.layerThicknessMmSpinBox) # # Output parameters Area # outputParametersCollapsibleButton = ctk.ctkCollapsibleButton() outputParametersCollapsibleButton.text = "Output parameters" self.layout.addWidget(outputParametersCollapsibleButton) # Layout within the dummy collapsible button outputParametersFormLayout = qt.QFormLayout( outputParametersCollapsibleButton) self.printScaleSpinBox = ctk.ctkDoubleSpinBox() self.printScaleSpinBox.setToolTip( "Scale of print size relative to real life size. 1.0 means printing in real life size, <1.0 means printed objects are smaller than in real life." ) self.printScaleSpinBox.decimals = 3 self.printScaleSpinBox.minimum = 0.01 self.printScaleSpinBox.maximum = 100.0 self.printScaleSpinBox.suffix = "x" self.printScaleSpinBox.value = self.logic.printScale self.printScaleSpinBox.singleStep = 0.1 outputParametersFormLayout.addRow("Scale: ", self.printScaleSpinBox) # # Path # self.dirPath = ctk.ctkPathLineEdit() self.dirPath.filters = ctk.ctkPathLineEdit.Dirs self.dirPath.settingKey = 'BitmapGeneratorOutputFolder' #self.dirPath.currentPath = "/tmp" outputParametersFormLayout.addRow("Output folder: ", self.dirPath) # # Apply Button # self.applyButtonLabelGenerate = "Generate bitmaps" self.applyButtonLabelCancel = "Cancel" self.applyButton = qt.QPushButton(self.applyButtonLabelGenerate) self.applyButton.toolTip = "Start/cancel bitmap generation" outputParametersFormLayout.addRow(self.applyButton) # connections self.applyButton.connect('clicked(bool)', self.onApplyButton) # Add vertical spacer self.layout.addStretch(1)
def setup(self): ScriptedLoadableModuleWidget.setup(self) # Instantiate and connect widgets ... # # Common Area # commonCollapsibleButton = ctk.ctkCollapsibleButton() commonCollapsibleButton.text = "Common" self.layout.addWidget(commonCollapsibleButton) commonFormLayout = qt.QFormLayout(commonCollapsibleButton) # ROI selector self.roiSelectorLabel = qt.QLabel() self.roiSelectorLabel.setText( "Region of interest: " ) self.exportRoiSelector = slicer.qMRMLNodeComboBox() self.exportRoiSelector.nodeTypes = ( "vtkMRMLAnnotationROINode", "" ) self.exportRoiSelector.noneEnabled = False self.exportRoiSelector.addEnabled = False self.exportRoiSelector.removeEnabled = True self.exportRoiSelector.setMRMLScene( slicer.mrmlScene ) self.exportRoiSelector.setToolTip( "Pick the input region of interest for comparison" ) commonFormLayout.addRow(self.roiSelectorLabel, self.exportRoiSelector) # Spacing self.compareVolumeSpacingLabel = qt.QLabel() self.compareVolumeSpacingLabel.setText( "Comparison volume spacing: " ) self.compareVolumeSpacing = ctk.ctkDoubleSpinBox() self.compareVolumeSpacing.minimum = 0.01 self.compareVolumeSpacing.maximum = 30 self.compareVolumeSpacing.suffix = 'mm' self.compareVolumeSpacing.singleStep = 0.5 self.compareVolumeSpacing.value = 3 self.compareVolumeSpacing.setToolTip( "Resolution for comparison. Smaller values mean higher accuracy but more computation time." ) commonFormLayout.addRow(self.compareVolumeSpacingLabel, self.compareVolumeSpacing) # # Average Area # averageCollapsibleButton = ctk.ctkCollapsibleButton() averageCollapsibleButton.text = "Average" self.layout.addWidget(averageCollapsibleButton) averageFormLayout = qt.QFormLayout(averageCollapsibleButton) # ground truth field selector self.maxNumberOfInputFieldsForAveraging = 10 self.averageInputFieldSelectors = [] for averageInputFieldIndex in xrange(0, self.maxNumberOfInputFieldsForAveraging): averageInputFieldSelectorLabel = qt.QLabel() averageInputFieldSelectorLabel.setText( 'Field {0}: '.format(averageInputFieldIndex+1) ) averageInputFieldSelector = slicer.qMRMLNodeComboBox() averageInputFieldSelector.nodeTypes = ( "vtkMRMLVectorVolumeNode", "" ) averageInputFieldSelector.noneEnabled = True averageInputFieldSelector.addEnabled = False averageInputFieldSelector.removeEnabled = True averageInputFieldSelector.setMRMLScene( slicer.mrmlScene ) averageInputFieldSelector.setToolTip( "Pick the field that will be include in the average computation" ) averageFormLayout.addRow(averageInputFieldSelectorLabel, averageInputFieldSelector) self.averageInputFieldSelectors.append(averageInputFieldSelector) self.averageOutputFieldLabel = qt.QLabel() self.averageOutputFieldLabel.setText( 'Output field mean:') self.averageOutputFieldSelector = slicer.qMRMLNodeComboBox() self.averageOutputFieldSelector.nodeTypes = ( "vtkMRMLVectorVolumeNode", "" ) self.averageOutputFieldSelector.noneEnabled = True self.averageOutputFieldSelector.addEnabled = True self.averageOutputFieldSelector.removeEnabled = True self.averageOutputFieldSelector.renameEnabled = True self.averageOutputFieldSelector.baseName = 'Mean' self.averageOutputFieldSelector.setMRMLScene( slicer.mrmlScene ) self.averageOutputFieldSelector.setToolTip( "Computed mean of the displacement fields" ) averageFormLayout.addRow(self.averageOutputFieldLabel, self.averageOutputFieldSelector) self.varianceOutputFieldLabel = qt.QLabel() self.varianceOutputFieldLabel.setText( 'Output field mean error:') self.varianceOutputFieldSelector = slicer.qMRMLNodeComboBox() self.varianceOutputFieldSelector.nodeTypes = ( "vtkMRMLScalarVolumeNode", "" ) self.varianceOutputFieldSelector.noneEnabled = True self.varianceOutputFieldSelector.addEnabled = True self.varianceOutputFieldSelector.removeEnabled = True self.varianceOutputFieldSelector.renameEnabled = True self.varianceOutputFieldSelector.showChildNodeTypes = False self.varianceOutputFieldSelector.baseName = 'MeanError' self.varianceOutputFieldSelector.setMRMLScene( slicer.mrmlScene ) self.varianceOutputFieldSelector.setToolTip( "Computed variance of the displacement fields" ) averageFormLayout.addRow(self.varianceOutputFieldLabel, self.varianceOutputFieldSelector) # Compute button self.averageComputeButton = qt.QPushButton("Compute") self.averageComputeButton.toolTip = "Compute average and standard deviation" self.averageComputeButton.enabled = True averageFormLayout.addRow(self.averageComputeButton) self.averageComputeButton.connect('clicked(bool)', self.computeAverage) # # Difference Area # differenceCollapsibleButton = ctk.ctkCollapsibleButton() differenceCollapsibleButton.text = "Difference" self.layout.addWidget(differenceCollapsibleButton) differenceFormLayout = qt.QFormLayout(differenceCollapsibleButton) self.differenceInputFieldALabel = qt.QLabel() self.differenceInputFieldALabel.setText( 'Displacement field A') self.differenceInputFieldASelector = slicer.qMRMLNodeComboBox() self.differenceInputFieldASelector.nodeTypes = ( "vtkMRMLVectorVolumeNode", "" ) self.differenceInputFieldASelector.noneEnabled = False self.differenceInputFieldASelector.addEnabled = False self.differenceInputFieldASelector.removeEnabled = True self.differenceInputFieldASelector.setMRMLScene( slicer.mrmlScene ) self.differenceInputFieldASelector.setToolTip( "Pick the field that the other will be subtracted from" ) differenceFormLayout.addRow(self.differenceInputFieldALabel, self.differenceInputFieldASelector) self.differenceInputFieldBLabel = qt.QLabel() self.differenceInputFieldBLabel.setText( 'Displacement field B' ) self.differenceInputFieldBSelector = slicer.qMRMLNodeComboBox() self.differenceInputFieldBSelector.nodeTypes = ( "vtkMRMLVectorVolumeNode", "" ) self.differenceInputFieldBSelector.noneEnabled = False self.differenceInputFieldBSelector.addEnabled = False self.differenceInputFieldBSelector.removeEnabled = True self.differenceInputFieldBSelector.setMRMLScene( slicer.mrmlScene ) self.differenceInputFieldBSelector.setToolTip( "Pick the field to subtract from the other" ) differenceFormLayout.addRow(self.differenceInputFieldBLabel, self.differenceInputFieldBSelector) self.differenceOutputFieldLabel = qt.QLabel() self.differenceOutputFieldLabel.setText( 'Output difference:') self.differenceOutputFieldSelector = slicer.qMRMLNodeComboBox() self.differenceOutputFieldSelector.nodeTypes = ( "vtkMRMLVectorVolumeNode", "" ) self.differenceOutputFieldSelector.noneEnabled = True self.differenceOutputFieldSelector.addEnabled = True self.differenceOutputFieldSelector.removeEnabled = True self.differenceOutputFieldSelector.renameEnabled = True self.differenceOutputFieldSelector.baseName = 'Difference' self.differenceOutputFieldSelector.setMRMLScene( slicer.mrmlScene ) self.differenceOutputFieldSelector.setToolTip( "Computed difference of the displacement fields" ) differenceFormLayout.addRow(self.differenceOutputFieldLabel, self.differenceOutputFieldSelector) # Compute button self.differenceComputeButton = qt.QPushButton("Compute") self.differenceComputeButton.toolTip = "Compute difference between fields (FieldA-FieldB)" self.differenceComputeButton.enabled = True differenceFormLayout.addRow(self.differenceComputeButton) self.differenceComputeButton.connect('clicked(bool)', self.computeDifference) # 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 populate_advanced_tab(self): jsonUIInfo = self.logic.getJsonInfo4UI(self.inputJsonFn.currentPath) self.advancedOptions = [] for el in jsonUIInfo: #print(el) self.idxSlide = ctk.ctkDoubleSpinBox() self.advancedFormLayout.addRow("Idx:", self.idxSlide) self.idxSlide.setValue(int(el[1])) self.idxSlide.setEnabled(False) self.rgbPath = ctk.ctkPathLineEdit() self.advancedFormLayout.addRow(" Rgb Image:", self.rgbPath) self.rgbPath.setCurrentPath(el[2]) self.doFlip = ctk.ctkCheckBox() self.advancedFormLayout.addRow(" Flip:", self.doFlip) if (not el[4] == None) and el[4] == 1: self.doFlip.setChecked(True) else: self.doFlip.setChecked(False) self.doRotate = ctk.ctkDoubleSpinBox() self.advancedFormLayout.addRow(" Rotation angle:", self.doRotate) self.doRotate.minimum = 0.0 self.doRotate.maximum = 360.0 self.doRotate.singleStep = 90.0 if el[5]: self.doRotate.setValue(int(el[5])) for maskEl in el[3]: print(maskEl) self.idxMask2 = ctk.ctkDoubleSpinBox() self.advancedFormLayout.addRow(" Mask Idx:", self.idxMask2) self.idxMask2.setValue(int(maskEl[0])) self.idxMask2.setEnabled(False) self.maskPath = ctk.ctkPathLineEdit() self.advancedFormLayout.addRow(" Mask Image:", self.maskPath) self.maskPath.setCurrentPath(maskEl[1]) self.idxMask2.connect( 'valueChanged(double)', lambda value, idxSlice=el[0], idxMask=int(maskEl[ 0]): self.onMaskIdxChange(value, idxSlice, idxMask)) self.maskPath.connect( 'currentPathChanged(QString)', lambda value, idxSlice=el[0], idxMask=int(maskEl[ 0]): self.onMaskFileChange(value, idxSlice, idxMask)) Separador = qt.QFrame() Separador.setFrameShape(qt.QFrame.HLine) Separador.setLineWidth(1) self.advancedFormLayout.addRow(Separador) self.idxSlide.connect( 'valueChanged(double)', lambda value, idx=el[0]: self.onSliceIdxChange(value, idx)) self.rgbPath.connect('currentPathChanged(QString)', lambda value, idx=el[0]: self. onSliceJsonFileChange(value, idx)) self.doFlip.connect( 'stateChanged(int)', lambda value, idx=el[0]: self.onSliceFlipChange(value, idx)) self.doRotate.connect('valueChanged(double)', lambda value, idx=el[0]: self. onSliceDoRotateChange(value, idx)) advancedUIEl = [ el[0], self.idxSlide, self.rgbPath, self.doRotate, self.doRotate ] self.advancedOptions.append(advancedUIEl)
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): ScriptedLoadableModuleWidget.setup(self) # Instantiate and connect widgets ... # # Common Area # commonCollapsibleButton = ctk.ctkCollapsibleButton() commonCollapsibleButton.text = "Common" self.layout.addWidget(commonCollapsibleButton) commonFormLayout = qt.QFormLayout(commonCollapsibleButton) # ROI selector self.roiSelectorLabel = qt.QLabel() self.roiSelectorLabel.setText("Region of interest: ") self.exportRoiSelector = slicer.qMRMLNodeComboBox() self.exportRoiSelector.nodeTypes = ("vtkMRMLAnnotationROINode", "") self.exportRoiSelector.noneEnabled = False self.exportRoiSelector.addEnabled = False self.exportRoiSelector.removeEnabled = True self.exportRoiSelector.setMRMLScene(slicer.mrmlScene) self.exportRoiSelector.setToolTip( "Pick the input region of interest for comparison") commonFormLayout.addRow(self.roiSelectorLabel, self.exportRoiSelector) # Spacing self.compareVolumeSpacingLabel = qt.QLabel() self.compareVolumeSpacingLabel.setText("Comparison volume spacing: ") self.compareVolumeSpacing = ctk.ctkDoubleSpinBox() self.compareVolumeSpacing.minimum = 0.01 self.compareVolumeSpacing.maximum = 30 self.compareVolumeSpacing.suffix = 'mm' self.compareVolumeSpacing.singleStep = 0.5 self.compareVolumeSpacing.value = 3 self.compareVolumeSpacing.setToolTip( "Resolution for comparison. Smaller values mean higher accuracy but more computation time." ) commonFormLayout.addRow(self.compareVolumeSpacingLabel, self.compareVolumeSpacing) # # Average Area # averageCollapsibleButton = ctk.ctkCollapsibleButton() averageCollapsibleButton.text = "Average" self.layout.addWidget(averageCollapsibleButton) averageFormLayout = qt.QFormLayout(averageCollapsibleButton) # ground truth field selector self.maxNumberOfInputFieldsForAveraging = 10 self.averageInputFieldSelectors = [] for averageInputFieldIndex in xrange( 0, self.maxNumberOfInputFieldsForAveraging): averageInputFieldSelectorLabel = qt.QLabel() averageInputFieldSelectorLabel.setText( 'Field {0}: '.format(averageInputFieldIndex + 1)) averageInputFieldSelector = slicer.qMRMLNodeComboBox() averageInputFieldSelector.nodeTypes = ("vtkMRMLVectorVolumeNode", "") averageInputFieldSelector.noneEnabled = True averageInputFieldSelector.addEnabled = False averageInputFieldSelector.removeEnabled = True averageInputFieldSelector.setMRMLScene(slicer.mrmlScene) averageInputFieldSelector.setToolTip( "Pick the field that will be include in the average computation" ) averageFormLayout.addRow(averageInputFieldSelectorLabel, averageInputFieldSelector) self.averageInputFieldSelectors.append(averageInputFieldSelector) self.averageOutputFieldLabel = qt.QLabel() self.averageOutputFieldLabel.setText('Output field mean:') self.averageOutputFieldSelector = slicer.qMRMLNodeComboBox() self.averageOutputFieldSelector.nodeTypes = ("vtkMRMLVectorVolumeNode", "") self.averageOutputFieldSelector.noneEnabled = True self.averageOutputFieldSelector.addEnabled = True self.averageOutputFieldSelector.removeEnabled = True self.averageOutputFieldSelector.renameEnabled = True self.averageOutputFieldSelector.baseName = 'Mean' self.averageOutputFieldSelector.setMRMLScene(slicer.mrmlScene) self.averageOutputFieldSelector.setToolTip( "Computed mean of the displacement fields") averageFormLayout.addRow(self.averageOutputFieldLabel, self.averageOutputFieldSelector) self.varianceOutputFieldLabel = qt.QLabel() self.varianceOutputFieldLabel.setText('Output field mean error:') self.varianceOutputFieldSelector = slicer.qMRMLNodeComboBox() self.varianceOutputFieldSelector.nodeTypes = ( "vtkMRMLScalarVolumeNode", "") self.varianceOutputFieldSelector.noneEnabled = True self.varianceOutputFieldSelector.addEnabled = True self.varianceOutputFieldSelector.removeEnabled = True self.varianceOutputFieldSelector.renameEnabled = True self.varianceOutputFieldSelector.showChildNodeTypes = False self.varianceOutputFieldSelector.baseName = 'MeanError' self.varianceOutputFieldSelector.setMRMLScene(slicer.mrmlScene) self.varianceOutputFieldSelector.setToolTip( "Computed variance of the displacement fields") averageFormLayout.addRow(self.varianceOutputFieldLabel, self.varianceOutputFieldSelector) # Compute button self.averageComputeButton = qt.QPushButton("Compute") self.averageComputeButton.toolTip = "Compute average and standard deviation" self.averageComputeButton.enabled = True averageFormLayout.addRow(self.averageComputeButton) self.averageComputeButton.connect('clicked(bool)', self.computeAverage) # # Difference Area # differenceCollapsibleButton = ctk.ctkCollapsibleButton() differenceCollapsibleButton.text = "Difference" self.layout.addWidget(differenceCollapsibleButton) differenceFormLayout = qt.QFormLayout(differenceCollapsibleButton) self.differenceInputFieldALabel = qt.QLabel() self.differenceInputFieldALabel.setText('Displacement field A') self.differenceInputFieldASelector = slicer.qMRMLNodeComboBox() self.differenceInputFieldASelector.nodeTypes = ( "vtkMRMLVectorVolumeNode", "") self.differenceInputFieldASelector.noneEnabled = False self.differenceInputFieldASelector.addEnabled = False self.differenceInputFieldASelector.removeEnabled = True self.differenceInputFieldASelector.setMRMLScene(slicer.mrmlScene) self.differenceInputFieldASelector.setToolTip( "Pick the field that the other will be subtracted from") differenceFormLayout.addRow(self.differenceInputFieldALabel, self.differenceInputFieldASelector) self.differenceInputFieldBLabel = qt.QLabel() self.differenceInputFieldBLabel.setText('Displacement field B') self.differenceInputFieldBSelector = slicer.qMRMLNodeComboBox() self.differenceInputFieldBSelector.nodeTypes = ( "vtkMRMLVectorVolumeNode", "") self.differenceInputFieldBSelector.noneEnabled = False self.differenceInputFieldBSelector.addEnabled = False self.differenceInputFieldBSelector.removeEnabled = True self.differenceInputFieldBSelector.setMRMLScene(slicer.mrmlScene) self.differenceInputFieldBSelector.setToolTip( "Pick the field to subtract from the other") differenceFormLayout.addRow(self.differenceInputFieldBLabel, self.differenceInputFieldBSelector) self.differenceOutputFieldLabel = qt.QLabel() self.differenceOutputFieldLabel.setText('Output difference:') self.differenceOutputFieldSelector = slicer.qMRMLNodeComboBox() self.differenceOutputFieldSelector.nodeTypes = ( "vtkMRMLVectorVolumeNode", "") self.differenceOutputFieldSelector.noneEnabled = True self.differenceOutputFieldSelector.addEnabled = True self.differenceOutputFieldSelector.removeEnabled = True self.differenceOutputFieldSelector.renameEnabled = True self.differenceOutputFieldSelector.baseName = 'Difference' self.differenceOutputFieldSelector.setMRMLScene(slicer.mrmlScene) self.differenceOutputFieldSelector.setToolTip( "Computed difference of the displacement fields") differenceFormLayout.addRow(self.differenceOutputFieldLabel, self.differenceOutputFieldSelector) # Compute button self.differenceComputeButton = qt.QPushButton("Compute") self.differenceComputeButton.toolTip = "Compute difference between fields (FieldA-FieldB)" self.differenceComputeButton.enabled = True differenceFormLayout.addRow(self.differenceComputeButton) self.differenceComputeButton.connect('clicked(bool)', self.computeDifference) # Add vertical spacer self.layout.addStretch(1)
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 setup(self): # Instantiate and connect widgets ... # # Reload and Test area # reloadCollapsibleButton = ctk.ctkCollapsibleButton() reloadCollapsibleButton.text = "Reload && Test" self.layout.addWidget(reloadCollapsibleButton) reloadFormLayout = qt.QFormLayout(reloadCollapsibleButton) # reload button # (use this during development, but remove it when delivering # your module to users) self.reloadButton = qt.QPushButton("Reload") self.reloadButton.toolTip = "Reload this module." self.reloadButton.name = "FiducialToImageRegistration Reload" reloadFormLayout.addWidget(self.reloadButton) self.reloadButton.connect('clicked()', self.onReload) # reload and test button # (use this during development, but remove it when delivering # your module to users) self.reloadAndTestButton = qt.QPushButton("Reload and Test") self.reloadAndTestButton.toolTip = "Reload this module and then run the self tests." reloadFormLayout.addWidget(self.reloadAndTestButton) self.reloadAndTestButton.connect('clicked()', self.onReloadAndTest) # # Parameters Area # parametersCollapsibleButton = ctk.ctkCollapsibleButton() parametersCollapsibleButton.text = "Parameters" self.layout.addWidget(parametersCollapsibleButton) # Layout within the dummy collapsible button parametersFormLayout = qt.QFormLayout(parametersCollapsibleButton) # # input volume selector # self.volumeSelector = slicer.qMRMLNodeComboBox() self.volumeSelector.nodeTypes = ( ("vtkMRMLScalarVolumeNode"), "" ) self.volumeSelector.addAttribute( "vtkMRMLScalarVolumeNode", "LabelMap", 0 ) self.volumeSelector.selectNodeUponCreation = True self.volumeSelector.addEnabled = False self.volumeSelector.removeEnabled = False self.volumeSelector.noneEnabled = False self.volumeSelector.showHidden = False self.volumeSelector.showChildNodeTypes = False self.volumeSelector.setMRMLScene( slicer.mrmlScene ) self.volumeSelector.setToolTip( "Pick the input to the algorithm." ) parametersFormLayout.addRow("Input Volume: ", self.volumeSelector) # # input fiducial list # self.fiducialSelector = slicer.qMRMLNodeComboBox() self.fiducialSelector.nodeTypes = ( ("vtkMRMLMarkupsFiducialNode"), "" ) self.fiducialSelector.selectNodeUponCreation = False self.fiducialSelector.addEnabled = False self.fiducialSelector.removeEnabled = False self.fiducialSelector.noneEnabled = False self.fiducialSelector.showHidden = False self.fiducialSelector.showChildNodeTypes = False self.fiducialSelector.setMRMLScene( slicer.mrmlScene ) self.fiducialSelector.setToolTip( "Pick the input to the algorithm." ) parametersFormLayout.addRow("Input Fiducials: ", self.fiducialSelector) # # output transform selector # self.transformSelector = slicer.qMRMLNodeComboBox() self.transformSelector.nodeTypes = ( ("vtkMRMLLinearTransformNode"), "" ) self.transformSelector.selectNodeUponCreation = True self.transformSelector.addEnabled = True self.transformSelector.removeEnabled = True self.transformSelector.renameEnabled = True self.transformSelector.noneEnabled = False self.transformSelector.showHidden = False self.transformSelector.showChildNodeTypes = False self.transformSelector.setMRMLScene( slicer.mrmlScene ) self.transformSelector.setToolTip( "Pick the output to the algorithm." ) parametersFormLayout.addRow("Output Transform: ", self.transformSelector) # # registration error # self.registrationError = ctk.ctkDoubleSpinBox() self.registrationError.setToolTip("Registration Error") self.registrationError.minimum = 0 self.registrationError.maximum = 1000 parametersFormLayout.addRow("Registration Error: ", self.registrationError) # # Apply Button # self.applyButton = qt.QPushButton("Apply") self.applyButton.toolTip = "Run the algorithm." self.applyButton.enabled = False parametersFormLayout.addRow(self.applyButton) # connections self.applyButton.connect('clicked(bool)', self.onApplyButton) self.volumeSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelect) self.fiducialSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelect) self.transformSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelect) # Add vertical spacer self.layout.addStretch(1)