def setup(self): #Se establecen los pasos del flujo de trabajo self.StepInicio=simuladorTornillosPedicularesWizard.Inicio('Inicio') self.StepRegistro=simuladorTornillosPedicularesWizard.IngresoAlumno('IngresoAlumno') self.StepHistoriaClinica=simuladorTornillosPedicularesWizard.HistoriaClinica('HistoriaClinica') self.StepModuloPlaneacion=simuladorTornillosPedicularesWizard.ModuloPlaneacion('ModuloPlaneacion') self.StepMenuProfesor=simuladorTornillosPedicularesWizard.MenuProfesor('MenuProfesor') self.StepCalibracion=simuladorTornillosPedicularesWizard.SimulatorTTPCalibration('SimulatorTTPCalibration') steps = [] #Se crea tupla que contenga los pasos del flujo de trabajo #Se añade a la tupla cada uno de los pasos del flujo de trabajo steps.append(self.StepInicio) #Se crea el flujo de trabajo self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(self.workflow) #Se definen las transiciones entre los pasos del flujo de trabajo self.workflow.addTransition(self.StepInicio, self.StepRegistro,'1', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition(self.StepInicio, self.StepHistoriaClinica,'2', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition(self.StepInicio, self.StepMenuProfesor,'3', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition(self.StepHistoriaClinica, self.StepModuloPlaneacion) self.workflow.addTransition(self.StepModuloPlaneacion,self.StepCalibracion) self.workflow.start() workflowWidget.visible = True self.layout.addWidget( workflowWidget )
def setup(self): self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(self.workflow) steps = [] steps.append(StenosisDetectorWizard.InputStep('Input')) steps.append(StenosisDetectorWizard.VesselnessFilterStep('Vesselness Filter')) steps.append(StenosisDetectorWizard.LevelSetSegmentationStep('Level Set Segmentation')) # steps.append(OptimizationStep('Optimization')) steps.append(StenosisDetectorWizard.CenterlineComputationStep('Centerline Computation')) steps.append(StenosisDetectorWizard.VisualizationStep('Detect Stenosis')) logic = SlicerVmtk4CommonLib.StenosisDetectorLogic() # Add transition associated to steps for i in range(len(steps) - 1): steps[i].setLogic(logic) self.workflow.addTransition(steps[i], steps[i + 1]) self.workflow.start() workflowWidget.visible = True self.layout.addWidget(workflowWidget)
def setup(self): ''' Create and start the EMSegment workflow. ''' # Use the logic associated with the module if not self.__logic: self.__logic = self.parent.module().logic() self.parent.connect('mrmlSceneChanged(vtkMRMLScene*)', self.onMRMLSceneChanged) workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(workflow) # Create all wizard steps step1 = EMSegmentWizard.EMSegmentQuickStep1(Helper.GetNthStepId(2)) step2 = EMSegmentWizard.EMSegmentQuickStep2(Helper.GetNthStepId(3)) step3 = EMSegmentWizard.EMSegmentQuickStep3(Helper.GetNthStepId(7)) step4 = EMSegmentWizard.EMSegmentQuickStep4(Helper.GetNthStepId(9)) step5 = EMSegmentWizard.EMSegmentQuickStep5(Helper.GetNthStepId(11)) segmentStep = EMSegmentWizard.EMSegmentQuickSegmentationStep( Helper.GetNthStepId(10)) # Add the wizard steps to an array for convenience allSteps = [] allSteps.append(step1) allSteps.append(step2) allSteps.append(step3) allSteps.append(step4) allSteps.append(step5) allSteps.append(segmentStep) # Add transitions for i in range(0, len(allSteps) - 1): workflow.addTransition(allSteps[i], allSteps[i + 1]) # Propagate the workflow, the logic and the MRML Manager to the steps for s in allSteps: s.setLogic(self.__logic) s.setMRMLManager(self.__logic.GetMRMLManager()) # Disable the error text which showed up when jumping to the (invisible) segment step workflowWidget.workflowGroupBox().errorTextEnabled = False workflow.goBackToOriginStepUponSuccess = False slicer.modules.emsegmenteasystep1 = step1 slicer.modules.emsegmenteasystep2 = step2 # Start the workflow and show the widget workflow.start() workflowWidget.visible = True self.parent.layout().addWidget(workflowWidget) # Keep track of workflow and workflowWidget references self.__workflow = workflow self.__workflowWidget = workflowWidget
def setup( self ): ''' Create and start the EMSegment workflow. ''' # Use the logic associated with the module if not self.__logic: self.__logic = self.parent.module().logic() self.parent.connect('mrmlSceneChanged(vtkMRMLScene*)', self.onMRMLSceneChanged) workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow( workflow ) # Create all wizard steps step1 = EMSegmentWizard.EMSegmentQuickStep1( Helper.GetNthStepId( 2 ) ) step2 = EMSegmentWizard.EMSegmentQuickStep2( Helper.GetNthStepId( 3 ) ) step3 = EMSegmentWizard.EMSegmentQuickStep3( Helper.GetNthStepId( 7 ) ) step4 = EMSegmentWizard.EMSegmentQuickStep4( Helper.GetNthStepId( 9 ) ) step5 = EMSegmentWizard.EMSegmentQuickStep5( Helper.GetNthStepId( 11 ) ) segmentStep = EMSegmentWizard.EMSegmentQuickSegmentationStep( Helper.GetNthStepId( 10 ) ) # Add the wizard steps to an array for convenience allSteps = [] allSteps.append( step1 ) allSteps.append( step2 ) allSteps.append( step3 ) allSteps.append( step4 ) allSteps.append( step5 ) allSteps.append( segmentStep ) # Add transitions for i in range( 0, len( allSteps ) - 1 ): workflow.addTransition( allSteps[i], allSteps[i + 1] ) # Propagate the workflow, the logic and the MRML Manager to the steps for s in allSteps: s.setLogic( self.__logic ) s.setMRMLManager( self.__logic.GetMRMLManager() ) # Disable the error text which showed up when jumping to the (invisible) segment step workflowWidget.workflowGroupBox().errorTextEnabled = False workflow.goBackToOriginStepUponSuccess = False slicer.modules.emsegmenteasystep1 = step1 slicer.modules.emsegmenteasystep2 = step2 # Start the workflow and show the widget workflow.start() workflowWidget.visible = True self.parent.layout().addWidget( workflowWidget ) # Keep track of workflow and workflowWidget references self.__workflow = workflow self.__workflowWidget = workflowWidget
def setup( self ): self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow( self.workflow ) # create all 4 wizard steps self.selectDataStep = LASegmentationResources.LASegmentationWorkflowSelectDataStep( 'SelectData' ) self.registrationStep = LASegmentationResources.LASegmentationWorkflowImageRegistrationStep( 'ImageRegistration' ) self.endoSegStep = LASegmentationResources.LASegmentationWorkflowEndoSegmentationStep( 'LAEndoSegmentation' ) # add the wizard steps to an array for convenience allSteps = [] allSteps.append( self.selectDataStep ) allSteps.append( self.registrationStep ) allSteps.append( self.endoSegStep ) self.workflow.addTransition( self.selectDataStep, self.registrationStep ) self.workflow.addTransition( self.registrationStep, self.endoSegStep ) nNodes = slicer.mrmlScene.GetNumberOfNodesByClass('vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass(n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'LASegmentationWorkflow': self.parameterNode = compNode print 'Found existing LASegmentationWorkflow parameter node' break if self.parameterNode == None: self.parameterNode = slicer.vtkMRMLScriptedModuleNode() self.parameterNode.SetModuleName('LASegmentationWorkflow') slicer.mrmlScene.AddNode(self.parameterNode) for s in allSteps: s.setParameterNode (self.parameterNode) # restore workflow step currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'SelectData': self.workflow.setInitialStep(self.selectDataStep) if currentStep == 'ImageRegistration': self.workflow.setInitialStep(self.registrationStep) if currentStep == 'LAEndoSegmentation': self.workflow.setInitialStep(self.endoSegStep) else: print 'currentStep in parameter node is empty!' # Start the workflow and show the widget self.workflow.start() workflowWidget.visible = True self.layout.addWidget( workflowWidget )
def setup(self): self.Step1 = Flujos.Step1('Step1') self.Step0 = Flujos.Step0('Step0') self.Step2 = Flujos.Step2('Step2') self.Step3 = Flujos.Step3('Step3') self.Step4 = Flujos.Step4('Step4') self.Step5 = Flujos.Step5('Step5') self.Step6 = Flujos.Step6('Step6') self.Step7 = Flujos.Step7('Step7') self.Step8 = Flujos.Step8('Step8') self.Step9 = Flujos.Step9('Step9') self.Step10 = Flujos.Step10('Step10') steps = [] steps.append(self.Step1) steps.append(self.Step0) steps.append(self.Step2) steps.append(self.Step3) steps.append(self.Step4) steps.append(self.Step5) steps.append(self.Step6) steps.append(self.Step7) steps.append(self.Step8) steps.append(self.Step9) steps.append(self.Step10) self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(self.workflow) self.workflow.addTransition(self.Step1, self.Step2, 'pass', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.Step1, self.Step3, 'fail', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.Step1, self.Step0, 'Reg', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.Step3, self.Step4) self.workflow.addTransition(self.Step2, self.Step5) self.workflow.addTransition(self.Step5, self.Step6, 'pass', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.Step5, self.Step7, 'fail', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.Step4, self.Step8, '1', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.Step4, self.Step9, '2', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.Step4, self.Step10, '3', ctk.ctkWorkflow.Bidirectional) self.workflow.start() workflowWidget.visible = True self.layout.addWidget(workflowWidget)
def setup(self): self.Step1 = Flujos.Step1('Step1') self.Step0 = Flujos.Step0('Step0') self.Step2 = Flujos.Step2('Step2') self.Step3 = Flujos.Step3('Step3') self.Step4 = Flujos.Step4('Step4') self.Step5 = Flujos.Step5('Step5') self.Step6 = Flujos.Step6('Step6') self.Step7 = Flujos.Step7('Step7') self.Step8 = Flujos.Step8('Step8') self.Step9 = Flujos.Step9('Step9') self.Step10 = Flujos.Step10('Step10') steps = [] steps.append(self.Step1) steps.append(self.Step0) steps.append(self.Step2) steps.append(self.Step3) steps.append(self.Step4) steps.append(self.Step5) steps.append(self.Step6) steps.append(self.Step7) steps.append(self.Step8) steps.append(self.Step9) steps.append(self.Step10) self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(self.workflow) self.workflow.addTransition(self.Step1, self.Step2, 'pass', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition(self.Step1, self.Step3, 'fail', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition(self.Step1, self.Step0, 'Reg', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition(self.Step3, self.Step4) self.workflow.addTransition(self.Step2, self.Step5) self.workflow.addTransition(self.Step5, self.Step6, 'pass', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition(self.Step5, self.Step7, 'fail', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition(self.Step4, self.Step8, '1', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition(self.Step4, self.Step9, '2', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition(self.Step4, self.Step10, '3', ctk.ctkWorkflow.Bidirectional ) self.workflow.start() workflowWidget.visible = True self.layout.addWidget( workflowWidget )
def setup(self): self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(self.workflow) steps = [] steps.append(ExampleStep('step1')) steps.append(ExampleStep('step2')) steps.append(ExampleStep('step3')) # Add transition associated to steps for i in range(len(steps) - 1): self.workflow.addTransition(steps[i], steps[i + 1]) self.workflow.start() workflowWidget.visible = True self.layout.addWidget(workflowWidget)
def setup(self): #Se establecen los pasos del flujo de trabajo self.StepInicio = simuladorTornillosPedicularesWizard.Inicio('Inicio') self.StepRegistro = simuladorTornillosPedicularesWizard.IngresoAlumno( 'IngresoAlumno') self.StepHistoriaClinica = simuladorTornillosPedicularesWizard.HistoriaClinica( 'HistoriaClinica') self.StepModuloPlaneacion = simuladorTornillosPedicularesWizard.ModuloPlaneacion( 'ModuloPlaneacion') self.StepMenuProfesor = simuladorTornillosPedicularesWizard.MenuProfesor( 'MenuProfesor') self.StepCalibracion = simuladorTornillosPedicularesWizard.SimulatorTTPCalibration( 'SimulatorTTPCalibration') steps = [] #Se crea tupla que contenga los pasos del flujo de trabajo #Se añade a la tupla cada uno de los pasos del flujo de trabajo steps.append(self.StepInicio) #Se crea el flujo de trabajo self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(self.workflow) #Se definen las transiciones entre los pasos del flujo de trabajo self.workflow.addTransition(self.StepInicio, self.StepRegistro, '1', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.StepInicio, self.StepHistoriaClinica, '2', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.StepInicio, self.StepMenuProfesor, '3', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.StepHistoriaClinica, self.StepModuloPlaneacion) self.workflow.addTransition(self.StepModuloPlaneacion, self.StepCalibracion) self.workflow.start() workflowWidget.visible = True self.layout.addWidget(workflowWidget)
def setup(self): ''' Create and start the ChangeTracker workflow. ''' self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(self.workflow) # create all wizard steps self.selectScansStep = ChangeTrackerWizard.ChangeTrackerSelectScansStep( 'SelectScans') self.defineROIStep = ChangeTrackerWizard.ChangeTrackerDefineROIStep( 'DefineROI') self.segmentROIStep = ChangeTrackerWizard.ChangeTrackerSegmentROIStep( 'SegmentROI') self.analyzeROIStep = ChangeTrackerWizard.ChangeTrackerAnalyzeROIStep( 'AnalyzeROI') self.reportROIStep = ChangeTrackerWizard.ChangeTrackerReportROIStep( 'ReportROI') # add the wizard steps to an array for convenience allSteps = [] allSteps.append(self.selectScansStep) allSteps.append(self.defineROIStep) allSteps.append(self.segmentROIStep) allSteps.append(self.analyzeROIStep) allSteps.append(self.reportROIStep) # Add transition for the first step which let's the user choose between simple and advanced mode self.workflow.addTransition(self.selectScansStep, self.defineROIStep) self.workflow.addTransition(self.defineROIStep, self.segmentROIStep) self.workflow.addTransition(self.segmentROIStep, self.analyzeROIStep) self.workflow.addTransition(self.analyzeROIStep, self.reportROIStep) nNodes = slicer.mrmlScene.GetNumberOfNodesByClass( 'vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass( n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'ChangeTracker': self.parameterNode = compNode print 'Found existing ChangeTracker parameter node' break if self.parameterNode == None: self.parameterNode = slicer.vtkMRMLScriptedModuleNode() self.parameterNode.SetModuleName('ChangeTracker') slicer.mrmlScene.AddNode(self.parameterNode) for s in allSteps: s.setParameterNode(self.parameterNode) # restore workflow step currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'SelectScans': self.workflow.setInitialStep(self.selectScansStep) if currentStep == 'DefineROI': self.workflow.setInitialStep(self.defineROIStep) if currentStep == 'SegmentROI': self.workflow.setInitialStep(self.segmentROIStep) if currentStep == 'AnalyzeROI': self.workflow.setInitialStep(self.analyzeROIStep) if currentStep == 'ReportROI': self.workflow.setInitialStep(self.reportROIStep) else: print 'currentStep in parameter node is empty!' # start the workflow and show the widget self.workflow.start() workflowWidget.visible = True self.layout.addWidget(workflowWidget)
def __init__(self, widgetClass=None): self.parent = qt.QFrame() self.parent.setLayout(qt.QHBoxLayout()) self.moduleLogic = StylusBasedUSProbeCalibrationLogic() # TODO: should have way to pop up python interactor self.leftFrame = qt.QFrame(self.parent) self.leftFrame.setLayout(qt.QVBoxLayout()) self.parent.layout().addWidget(self.leftFrame, 1) self.layoutSelectorFrame2 = qt.QFrame(self.parent) self.layoutSelectorFrame2.setLayout(qt.QHBoxLayout()) self.leftFrame.layout().addWidget(self.layoutSelectorFrame2) self.layoutSelectorLabel2 = qt.QLabel("Layout Selector: ", self.layoutSelectorFrame2) self.layoutSelectorLabel2.setToolTip("Select the layout ...") self.layoutSelectorFrame2.layout().addWidget(self.layoutSelectorLabel2) self.layoutSelector2 = qt.QComboBox(self.layoutSelectorFrame2) self.layoutSelector2.addItem("FourViews") self.layoutSelector2.addItem("3D View") self.layoutSelector2.addItem("One view") self.layoutSelector2.addItem("Double 3D View") self.layoutSelectorFrame2.layout().addWidget(self.layoutSelector2) self.layoutSelector2.connect('activated(int)', self.onLayoutSelect) self.resetViewButton = qt.QPushButton("Reset") self.layoutSelectorFrame2.layout().addWidget(self.resetViewButton) self.resetViewButton.connect('clicked()', self.moduleLogic.onResetView) self.layoutWidget = slicer.qMRMLLayoutWidget() self.layoutWidget.setMRMLScene(slicer.mrmlScene) # self.layoutManager.setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUp3DView) # self.layoutManager.setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpRedSliceView) # self.layoutManager.setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutTabbedSliceView) #### Some of the possible layouts # SlicerLayout3DPlusLightboxView SlicerLayoutCompareGridView SlicerLayoutCompareWidescreenView SlicerLayoutConventionalQuantitativeView SlicerLayoutConventionalView SlicerLayoutConventionalWidescreenView # SlicerLayoutCustomView SlicerLayoutDefaultView SlicerLayoutOneUp3DView SlicerLayoutOneUpRedSliceView SlicerLayoutOneUpGreenSliceView SlicerLayoutOneUpYellowSliceView SlicerLayoutDual3DView # SlicerLayoutFourOverFourView SlicerLayoutTabbedSliceView self.layoutWidget.setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutConventionalView) self.parent.layout().addWidget(self.layoutWidget, 2) self.toolsViewer = ToolsViewer() self.toolsViewer.setModuleLogic(self.moduleLogic) # self.toolsViewer.listenToScene() # item=qt.QListWidgetItem("unItem") # self.modelsViewer.addItem(item) self.leftFrame.layout().addWidget(self.toolsViewer.getToolsWidget(), 1) ''' Create and start the USGuided workflow. ''' self.workflow = ctk.ctkWorkflow() self.workflowWidget = ctk.ctkWorkflowStackedWidget() self.workflowWidget.setWorkflow(self.workflow) bw = self.workflowWidget.buttonBoxWidget() bw.hideInvalidButtons = True groupBox = self.workflowWidget.workflowGroupBox() groupBox.errorTextEnabled = False #bw.nextButtonDefaultText = "" #bw.backButtonDefaultText = "" nextButton=bw.nextButton() backButton=bw.backButton() nextButton.text="" backButton.text="" self.leftFrame.layout().addWidget(self.workflowWidget, 8) # create all wizard steps self.connectToTrackerStep = StylusBasedUSProbeCalibrationWizard.ConnectToTrackerStep('ConnectToTracker') self.connectToTrackerStep.setModuleLogic(self.moduleLogic) self.connectToTrackerStep.setButtonBoxWidget(bw) self.connectToTrackerStep.setToolsViewer(self.toolsViewer) self.placeStylusTipInTheImageStep = StylusBasedUSProbeCalibrationWizard.PlaceStylusTipInTheImageStep('PlaceStylusTipInTheImage') self.placeStylusTipInTheImageStep.setModuleLogic(self.moduleLogic) self.placeStylusTipInTheImageStep.setButtonBoxWidget(bw) self.captureSpatialPositionsStep = StylusBasedUSProbeCalibrationWizard.CaptureSpatialPositionsStep('CaptureSpatialPositions') self.captureSpatialPositionsStep.setModuleLogic(self.moduleLogic) self.captureSpatialPositionsStep.setButtonBoxWidget(bw) self.registrationStep = StylusBasedUSProbeCalibrationWizard.RegistrationStep('Registration') self.registrationStep.setModuleLogic(self.moduleLogic) self.registrationStep.setButtonBoxWidget(bw) # add the wizard steps to an array for convenience allSteps = [] allSteps.append(self.connectToTrackerStep) allSteps.append(self.captureSpatialPositionsStep) allSteps.append(self.placeStylusTipInTheImageStep) allSteps.append(self.registrationStep) # Add transition for the first step which let's the user choose between simple and advanced mode self.workflow.addTransition(self.connectToTrackerStep, self.captureSpatialPositionsStep) self.workflow.addTransition(self.captureSpatialPositionsStep, self.placeStylusTipInTheImageStep) self.workflow.addTransition(self.placeStylusTipInTheImageStep, self.registrationStep) nNodes = slicer.mrmlScene.GetNumberOfNodesByClass('vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass(n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'StylusBasedUSProbeCalibration': self.parameterNode = compNode print 'Found existing StylusBasedUSProbeCalibration parameter node' break if self.parameterNode == None: self.parameterNode = slicer.vtkMRMLScriptedModuleNode() self.parameterNode.SetModuleName('StylusBasedUSProbeCalibration') slicer.mrmlScene.AddNode(self.parameterNode) for s in allSteps: s.setParameterNode (self.parameterNode) # restore workflow step currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'ConnectToTracker': self.workflow.setInitialStep(self.connectToTrackerStep) if currentStep == 'PlaceStylusInTheImage': self.workflow.setInitialStep(self.placeStylusInTheImageStep) if currentStep == 'CaptureSpatialPositions': self.workflow.setInitialStep(self.captureSpatialPositionsStep) if currentStep == 'Registration': self.workflow.setInitialStep(self.registrationStep) else: print 'currentStep in parameter node is empty!' # start the workflow and show the widget self.workflow.start() self.workflowWidget.visible = True if widgetClass: self.widget = widgetClass(self.parent) self.parent.show()
def setup(self): ''' Define a workflow with the necessary steps. ''' self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(self.workflow) workflowWidget.buttonBoxWidget().nextButtonDefaultText = "" workflowWidget.buttonBoxWidget().backButtonDefaultText = "" # Create all wizard steps selectVolumesStep = MRIChangeDetectorWizard.SelectVolumesStep( 'SelectVolumes') registrationStep = MRIChangeDetectorWizard.RegistrationStep( 'Registration') #quantificationStep = MRIChangeDetectorWizard.QuantificationStep('Quantification') # add the wizard steps to an array for convenience allSteps = [] allSteps.append(selectVolumesStep) allSteps.append(registrationStep) #allSteps.append(quantificationStep) # Add transition for the first step which let's the user choose between simple and advanced mode self.workflow.addTransition(selectVolumesStep, registrationStep) #self.workflow.addTransition( registrationStep, quantificationStep) nNodes = slicer.mrmlScene.GetNumberOfNodesByClass( 'vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass( n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'MRIChangeDetector': self.parameterNode = compNode print 'Found existing MRIChangeDetector parameter node' break if self.parameterNode == None: self.parameterNode = slicer.mrmlScene.CreateNodeByClass( 'vtkMRMLScriptedModuleNode') self.parameterNode.SetModuleName('MRIChangeDetector') slicer.mrmlScene.AddNode(self.parameterNode) # Propagate the workflow, the logic and the MRML Manager to the steps for s in allSteps: s.setWorkflow(self.workflow) s.setParameterNode(self.parameterNode) # restore workflow step currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'SelectVolumes': self.workflow.setInitialStep(selectVolumesStep) if currentStep == 'Registration': self.workflow.setInitialStep(registrationStep) #if currentStep == 'Quantification': # self.workflow.setInitialStep(quantificationStep) else: print 'currentStep in parameter node is empty!' # start the workflow and show the widget self.workflow.start() workflowWidget.visible = True self.layout.addWidget(workflowWidget)
def setup(self): ''' Create and start the EMSegment workflow. ''' # Use the logic associated with the module if not self.__logic: self.__logic = self.parent.module().logic() self.parent.connect('mrmlSceneChanged(vtkMRMLScene*)', self.onMRMLSceneChanged) workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(workflow) workflowWidget.buttonBoxWidget().nextButtonDefaultText = "" workflowWidget.buttonBoxWidget().backButtonDefaultText = "" # create all wizard steps selectTaskStep = EMSegmentWizard.EMSegmentSelectTaskStep( Helper.GetNthStepId(1)) defineInputChannelsSimpleStep = EMSegmentWizard.EMSegmentDefineInputChannelsStep( Helper.GetNthStepId(2) + 'Simple') # simple branch defineInputChannelsAdvancedStep = EMSegmentWizard.EMSegmentDefineInputChannelsStep( Helper.GetNthStepId(2) + 'Advanced') # advanced branch defineAnatomicalTreeStep = EMSegmentWizard.EMSegmentDefineAnatomicalTreeStep( Helper.GetNthStepId(3)) defineAtlasStep = EMSegmentWizard.EMSegmentDefineAtlasStep( Helper.GetNthStepId(4)) editRegistrationParametersStep = EMSegmentWizard.EMSegmentEditRegistrationParametersStep( Helper.GetNthStepId(5)) definePreprocessingStep = EMSegmentWizard.EMSegmentDefinePreprocessingStep( Helper.GetNthStepId(6)) specifyIntensityDistributionStep = EMSegmentWizard.EMSegmentSpecifyIntensityDistributionStep( Helper.GetNthStepId(7)) editNodeBasedParametersStep = EMSegmentWizard.EMSegmentEditNodeBasedParametersStep( Helper.GetNthStepId(8)) miscStep = EMSegmentWizard.EMSegmentDefineMiscParametersStep( Helper.GetNthStepId(9)) segmentStep = EMSegmentWizard.EMSegmentStartSegmentationStep( Helper.GetNthStepId(10)) statisticsStep = EMSegmentWizard.EMSegmentLabelStatisticsStep( Helper.GetNthStepId(11)) # add the wizard steps to an array for convenience allSteps = [] allSteps.append(selectTaskStep) allSteps.append(defineInputChannelsSimpleStep) allSteps.append(defineInputChannelsAdvancedStep) allSteps.append(defineAnatomicalTreeStep) allSteps.append(defineAtlasStep) allSteps.append(editRegistrationParametersStep) allSteps.append(definePreprocessingStep) allSteps.append(specifyIntensityDistributionStep) allSteps.append(editNodeBasedParametersStep) allSteps.append(miscStep) allSteps.append(statisticsStep) allSteps.append(segmentStep) # Add transition for the first step which let's the user choose between simple and advanced mode workflow.addTransition(selectTaskStep, defineInputChannelsSimpleStep, 'SimpleMode') workflow.addTransition(selectTaskStep, defineInputChannelsAdvancedStep, 'AdvancedMode') # Add transitions associated to the simple mode workflow.addTransition(defineInputChannelsSimpleStep, defineAnatomicalTreeStep) # Add transitions associated to the advanced mode workflow.addTransition(defineInputChannelsAdvancedStep, defineAnatomicalTreeStep) # .. add transitions for the rest of the advanced mode steps for i in range(3, len(allSteps) - 1): workflow.addTransition(allSteps[i], allSteps[i + 1]) # Propagate the workflow, the logic and the MRML Manager to the steps for s in allSteps: s.setLogic(self.__logic) s.setMRMLManager(self.__logic.GetMRMLManager()) # Disable the error text which showed up when jumping to the (invisible) segment step workflowWidget.workflowGroupBox().errorTextEnabled = False workflow.goBackToOriginStepUponSuccess = False # start the workflow and show the widget workflow.start() workflowWidget.visible = True self.layout.addWidget(workflowWidget) # enable global access to the dynamicFrames on step 2 and step 6 slicer.modules.emsegmentLogic = self.__logic slicer.modules.emsegmentSimpleDynamicFrame = defineInputChannelsSimpleStep.dynamicFrame( ) slicer.modules.emsegmentPreprocessingStep = definePreprocessingStep # Keep track of workflow and workflowWidget references self.__workflow = workflow self.__workflowWidget = workflowWidget
def setup(self): ''' Define a workflow with the necessary steps. ''' self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(self.workflow) workflowWidget.buttonBoxWidget().nextButtonDefaultText = "" workflowWidget.buttonBoxWidget().backButtonDefaultText = "" # Create all wizard steps selectVolumesStep = TMRIChangeDetectorWizard.SelectVolumesStep('SelectVolumes') registrationStep = TMRIChangeDetectorWizard.RegistrationStep('Registration') quantificationStep = TMRIChangeDetectorWizard.QuantificationStep('Quantification') # add the wizard steps to an array for convenience allSteps = [] allSteps.append(selectVolumesStep) allSteps.append(registrationStep) allSteps.append(quantificationStep) # Add transition for the first step which let's the user choose between simple and advanced mode self.workflow.addTransition( selectVolumesStep, registrationStep) self.workflow.addTransition( registrationStep, quantificationStep) nNodes = slicer.mrmlScene.GetNumberOfNodesByClass('vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass(n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'TMRIChangeDetector': self.parameterNode = compNode print 'Found existing TMRIChangeDetector parameter node' break if self.parameterNode == None: self.parameterNode = slicer.mrmlScene.CreateNodeByClass('vtkMRMLScriptedModuleNode') self.parameterNode.SetModuleName('TMRIChangeDetector') slicer.mrmlScene.AddNode(self.parameterNode) # Propagate the workflow, the logic and the MRML Manager to the steps for s in allSteps: s.setWorkflow(self.workflow) s.setParameterNode(self.parameterNode) # restore workflow step currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'SelectVolumes': self.workflow.setInitialStep(selectVolumesStep) if currentStep == 'Registration': self.workflow.setInitialStep(registrationStep) if currentStep == 'Quantification': self.workflow.setInitialStep(quantificationStep) else: print 'currentStep in parameter node is empty!' # start the workflow and show the widget self.workflow.start() workflowWidget.visible = True self.layout.addWidget(workflowWidget)
def setup( self ): """ Slicer seems to call all methods of these classes upon entry. setup creates a workflow from ctk, which simply means that it creates a series of UI steps one can traverse with "next" / "previous" buttons. The steps themselves are contained within SegmentationWizard_Lib. """ # Currently unclear on the difference between ctkWorkflow and # ctkWorkflowStackedWidget, but presumably the latter creates a UI # for the former. self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow( self.workflow ) # Create workflow steps. self.Step1 = SegmentationWizard_Lib.VolumeSelectStep('VolumeSelectStep') self.Step2 = SegmentationWizard_Lib.RegistrationStep('RegistrationStep') self.Step3 = SegmentationWizard_Lib.NormalizeSubtractStep('NormalizeSubtractStep') self.Step4 = SegmentationWizard_Lib.ROIStep('ROIStep') self.Step5 = SegmentationWizard_Lib.ThresholdStep('ThresholdStep') self.Step6 = SegmentationWizard_Lib.ReviewStep('ReviewStep') # Add the wizard steps to an array for convenience. Much of the following code # is copied wholesale from ChangeTracker. allSteps = [] allSteps.append( self.Step1 ) allSteps.append( self.Step2 ) allSteps.append( self.Step3 ) allSteps.append( self.Step4 ) allSteps.append( self.Step5 ) allSteps.append( self.Step6 ) # Adds transition functionality between steps. self.workflow.addTransition(self.Step1, self.Step2) self.workflow.addTransition(self.Step2, self.Step3) self.workflow.addTransition(self.Step3, self.Step4) self.workflow.addTransition(self.Step4, self.Step5) self.workflow.addTransition(self.Step5, self.Step6) self.workflow.addTransition(self.Step6, self.Step1) """ The following code creates a 'parameter node' from the vtkMRMLScriptedModuleNode class. A parameter node keeps track of module variables from step to step, in the case of ctkWorkflow, and when users leave the module to visit other modules. The code below searches to see if a parameter node already exists for SegmentationWizard among all available parameter nodes, and then creates one if it does not. """ nNodes = slicer.mrmlScene.GetNumberOfNodesByClass('vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass(n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'SegmentationWizard': self.parameterNode = compNode # print 'Found existing SegmentationWizard parameter node' break if self.parameterNode == None: self.parameterNode = slicer.vtkMRMLScriptedModuleNode() self.parameterNode.SetModuleName('SegmentationWizard') slicer.mrmlScene.AddNode(self.parameterNode) # Individual workflow steps need to remember the parameter node too. for s in allSteps: s.setParameterNode(self.parameterNode) # Restores you to the correct step if you leave and then return to the module. currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': # print 'Restoring SegmentationWizard workflow step to ', currentStep if currentStep == 'VolumeSelectStep': self.workflow.setInitialStep(self.Step1) if currentStep == 'RegistrationStep': self.workflow.setInitialStep(self.Step2) if currentStep == 'NormalizeSubtractStep': self.workflow.setInitialStep(self.Step3) if currentStep == 'ROIStep': self.workflow.setInitialStep(self.Step4) if currentStep == 'ThresholdStep': self.workflow.setInitialStep(self.Step4) if currentStep == 'ReviewStep': self.workflow.setInitialStep(self.Step4) else: # print 'currentStep in parameter node is empty!' pass # Starts and show the workflow. self.workflow.start() workflowWidget.visible = True self.layout.addWidget( workflowWidget )
def setup(self): """ Slicer seems to call all methods of these classes upon entry. setup creates a workflow from ctk, which simply means that it creates a certies of UI steps one can traverse with "next" / "previous" buttons. The steps themselves are contained within ContrastSubtractionWizard. """ # Currently unclear on the difference between ctkWorkflow and # ctkWorkflowStackedWidget, but presumably the latter creates a UI # for the former self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(self.workflow) # Create workflow steps. self.Step1 = ContrastSubtractionWizard.VolumeSelectStep( 'VolumeSelectStep') self.Step2 = ContrastSubtractionWizard.RegistrationStep( 'RegistrationStep') self.Step3 = ContrastSubtractionWizard.NormalizeSubtractStep( 'NormalizeSubtractStep') self.Step4 = ContrastSubtractionWizard.ROIStep('ROIStep') self.Step5 = ContrastSubtractionWizard.ThresholdStep('ThresholdStep') self.Step6 = ContrastSubtractionWizard.ReviewStep('ReviewStep') # Add the wizard steps to an array for convenience. Much of the following code # is copied wholesale from ChangeTracker. allSteps = [] allSteps.append(self.Step1) allSteps.append(self.Step2) allSteps.append(self.Step3) allSteps.append(self.Step4) allSteps.append(self.Step5) allSteps.append(self.Step6) # Adds transition functionality between steps. self.workflow.addTransition(self.Step1, self.Step2) self.workflow.addTransition(self.Step2, self.Step3) self.workflow.addTransition(self.Step3, self.Step4) self.workflow.addTransition(self.Step4, self.Step5) self.workflow.addTransition(self.Step5, self.Step6) self.workflow.addTransition(self.Step6, self.Step1) # The following code creates a so-called parameter node referencing the # vtkMRMLScriptedModuleNode class, while checking to make sure one doesn't # already exist for some reason. This node keeps track of changse to MRML scene. nNodes = slicer.mrmlScene.GetNumberOfNodesByClass( 'vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass( n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'ContrastSubtraction': self.parameterNode = compNode print 'Found existing ContrastSubtraction parameter node' break if self.parameterNode == None: self.parameterNode = slicer.vtkMRMLScriptedModuleNode() self.parameterNode.SetModuleName('ContrastSubtraction') slicer.mrmlScene.AddNode(self.parameterNode) # Individual steps get access to the parameter node too! for s in allSteps: s.setParameterNode(self.parameterNode) # Restores workflow step in case something goes wrong. currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'VolumeSelectStep': self.workflow.setInitialStep(self.Step1) if currentStep == 'RegistrationStep': self.workflow.setInitialStep(self.Step2) if currentStep == 'NormalizeSubtractStep': self.workflow.setInitialStep(self.Step3) if currentStep == 'ROIStep': self.workflow.setInitialStep(self.Step4) if currentStep == 'ThresholdStep': self.workflow.setInitialStep(self.Step4) if currentStep == 'ReviewStep': self.workflow.setInitialStep(self.Step4) else: print 'currentStep in parameter node is empty!' # Starts and show the workflow. self.workflow.start() workflowWidget.visible = True self.layout.addWidget(workflowWidget)
def __init__(self, widgetClass=None): self.parent = qt.QFrame() self.parent.setLayout( qt.QHBoxLayout() ) self.moduleLogic = USGuidedProcedureLogic() # TODO: should have way to pop up python interactor self.leftFrame = qt.QFrame(self.parent) self.leftFrame.setLayout( qt.QVBoxLayout() ) #self.leftFrame.setSizePolicy(qt.QSizePolicy.Maximum,qt.QSizePolicy.Maximum) #self.leftFrame.setSizePolicy(qt.QSizePolicy.MinimumExpanding,qt.QSizePolicy.MinimumExpanding) #self.parent.setStyleSheet( #"QFrame{background: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #eef, stop: 1 #ccf); background-color: qlineargradient(spread:pad, x1:0.989, y1:0.012, x2:0, y2:0, stop:0 rgba(223, 227, 255, 255), stop:0.494318 rgba(164, 157, 194, 255), stop:1 rgba(115, 115, 115, 255));}" #"QComboBox{color: white; background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #88d, stop: 0.1 #99e, stop: 0.49 #77c, stop: 0.5 #66b, stop: 1 #77c); border-width: 1px; border-color: #339; border-style: solid; border-radius: 7; padding: 3px; font-size: 12px; font-weight: bold; padding-left: 5px; padding-right: 5px; /*min-width: 50px;*/ max-width: 150px; /*min-height: 13px;*/ max-height: 150px; }" "QPushButton{color: white; background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #88d, stop: 0.1 #99e, stop: 0.49 #77c, stop: 0.5 #66b, stop: 1 #77c); border-width: 1px; border-color: #339; border-style: solid; border-radius: 7; padding: 3px; font-size: 12px; font-weight: bold; padding-left: 5px; padding-right: 5px; min-width: 20px; max-width: 150px; min-height: 20px; max-height: 40px;}" #"QLabel{color: white; background-color: rgba(255, 255, 255, 0);}" # "QSlider::groove:horizontal{border: 1px solid #bbb;background: white;height: 10px;border-radius: 4px;}" # "QSlider::sub-page:horizontal {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #66e, stop: 1 #bbf);background:qlineargradient(x1: 0, y1: 0.2, x2: 1, y2: 1, stop: 0 #bbf, stop: 1 #55f);border: 1px solid #777;height: 10px;border-radius:4px;}" # "QSlider::add-page:horizontal {background: #fff;border: 1px solid #777;height: 10px;border-radius: 4px;}" # "QSlider::handle:horizontal {background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #eee, stop:1 #ccc);border: 1px solid #777;width: 13px;margin-top: -2px;margin-bottom: -2px;border-radius: 4px;}" # "QSlider::handle:horizontal:hover {background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #fff, stop:1 #ddd);border: 1px solid#444;border-radius: 4px;}" # "QSlider::sub-page:horizontal:disabled {background: #bbb;border-color: #999;}" # "QSlider::add-page:horizontal:disabled {background: #eee;border-color: #999;}" # "QSlider::handle:horizontal:disabled {background: #eee;border: 1px solid #aaa;border-radius: 4px;}") self.parent.layout().addWidget(self.leftFrame,1) self.addDataButton = qt.QPushButton("Add Data") self.leftFrame.layout().addWidget(self.addDataButton) self.addDataButton.connect("clicked()",slicer.app.ioManager().openAddDataDialog) self.saveSceneButton = qt.QPushButton("Save Data") self.leftFrame.layout().addWidget(self.saveSceneButton) self.saveSceneButton.connect("clicked()",slicer.app.ioManager().openSaveDataDialog) #self.loadSceneButton = qt.QPushButton("Load Scene") #self.leftFrame.layout().addWidget(self.loadSceneButton) #self.loadSceneButton.connect("clicked()",slicer.app.ioManager().openLoadSceneDialog) self.layoutSelectorFrame2 = qt.QFrame(self.parent) self.layoutSelectorFrame2.setLayout(qt.QHBoxLayout()) self.leftFrame.layout().addWidget(self.layoutSelectorFrame2) self.layoutSelectorLabel2 = qt.QLabel("Layout Selector: ", self.layoutSelectorFrame2) self.layoutSelectorLabel2.setToolTip( "Select the layout ...") self.layoutSelectorFrame2.layout().addWidget(self.layoutSelectorLabel2) self.layoutSelector2 = qt.QComboBox(self.layoutSelectorFrame2) self.layoutSelector2.addItem("FourViews") self.layoutSelector2.addItem("3D View") self.layoutSelector2.addItem("One view") self.layoutSelector2.addItem("Double 3D View") self.layoutSelectorFrame2.layout().addWidget(self.layoutSelector2) self.layoutSelector2.connect('activated(int)', self.onLayoutSelect) self.resetViewButton = qt.QPushButton("R") self.layoutSelectorFrame2.layout().addWidget(self.resetViewButton) self.resetViewButton.connect('clicked()', self.moduleLogic.onResetView) self.layoutWidget = slicer.qMRMLLayoutWidget() self.layoutWidget.setMRMLScene(slicer.mrmlScene) #self.layoutManager.setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUp3DView) #self.layoutManager.setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutOneUpRedSliceView) #self.layoutManager.setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutTabbedSliceView) #### Some of the possible layouts #SlicerLayout3DPlusLightboxView SlicerLayoutCompareGridView SlicerLayoutCompareWidescreenView SlicerLayoutConventionalQuantitativeView SlicerLayoutConventionalView SlicerLayoutConventionalWidescreenView #SlicerLayoutCustomView SlicerLayoutDefaultView SlicerLayoutOneUp3DView SlicerLayoutOneUpRedSliceView SlicerLayoutOneUpGreenSliceView SlicerLayoutOneUpYellowSliceView SlicerLayoutDual3DView #SlicerLayoutFourOverFourView SlicerLayoutTabbedSliceView self.layoutWidget.setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutConventionalView) self.parent.layout().addWidget(self.layoutWidget,2) print("Previous line of the Constructor of ModelsViewer") self.modelsViewer = ModelsViewer() self.modelsViewer.setModuleLogic(self.moduleLogic) self.modelsViewer.listenToScene() self.volumeRenderingViewer = VolumeRenderingViewer() self.volumeRenderingViewer.setModuleLogic(self.moduleLogic) self.volumeRenderingViewer.listenToScene() #item=qt.QListWidgetItem("unItem") #self.modelsViewer.addItem(item) self.leftFrame.layout().addWidget(self.modelsViewer.getListWidget(),1) self.leftFrame.layout().addWidget(self.volumeRenderingViewer.getListWidget(),1) ''' Create and start the USGuided workflow. ''' self.workflow = ctk.ctkWorkflow() self.workflowWidget = ctk.ctkWorkflowStackedWidget() self.workflowWidget.setWorkflow( self.workflow ) bw=self.workflowWidget.buttonBoxWidget() bw.hideInvalidButtons=True groupBox=self.workflowWidget.workflowGroupBox() groupBox.errorTextEnabled = False self.workflowWidget.buttonBoxWidget().nextButtonDefaultText = "" self.workflowWidget.buttonBoxWidget().backButtonDefaultText = "" self.leftFrame.layout().addWidget( self.workflowWidget,3 ) # create all wizard steps self.loadSceneStep = USGuidedWizard.LoadSceneStep('LoadScene') self.loadSceneStep.setModuleLogic(self.moduleLogic) self.loadSceneStep.setButtonBoxWidget(bw) self.connectToTrackerStep = USGuidedWizard.ConnectToTrackerStep('ConnectToTracker') self.connectToTrackerStep.setModuleLogic(self.moduleLogic) self.connectToTrackerStep.setButtonBoxWidget(bw) self.placeImageFiducialsStep = USGuidedWizard.PlaceImageFiducialsStep( 'PlaceImageFiducials') self.placeImageFiducialsStep.setModuleLogic(self.moduleLogic) self.placeImageFiducialsStep.setButtonBoxWidget(bw) self.placeSpatialFiducialsStep = USGuidedWizard.PlaceSpatialFiducialsStep( 'PlaceSpatialFiducials') self.placeSpatialFiducialsStep.setModuleLogic(self.moduleLogic) self.placeSpatialFiducialsStep.setButtonBoxWidget(bw) self.registrationStep = USGuidedWizard.RegistrationStep( 'Registration') self.registrationStep.setModuleLogic(self.moduleLogic) self.registrationStep.setButtonBoxWidget(bw) self.navigationStep = USGuidedWizard.NavigationStep( 'Navigation') self.navigationStep.setModuleLogic(self.moduleLogic) self.navigationStep.setButtonBoxWidget(bw) #self.selectScansStep = USGuidedWizard.ChangeTrackerSelectScansStep( 'SelectScans' ) #self.defineROIStep = USGuidedWizard.ChangeTrackerDefineROIStep( 'DefineROI' ) #self.segmentROIStep = USGuidedWizard.ChangeTrackerSegmentROIStep( 'SegmentROI' ) #self.analyzeROIStep = USGuidedWizard.ChangeTrackerAnalyzeROIStep( 'AnalyzeROI' ) #self.reportROIStep = USGuidedWizard.ChangeTrackerReportROIStep( 'ReportROI' ) # add the wizard steps to an array for convenience allSteps = [] allSteps.append( self.loadSceneStep ) allSteps.append( self.connectToTrackerStep ) allSteps.append( self.placeImageFiducialsStep ) allSteps.append( self.placeSpatialFiducialsStep ) allSteps.append( self.registrationStep ) allSteps.append( self.navigationStep ) #allSteps.append( self.selectScansStep ) #allSteps.append( self.defineROIStep ) #allSteps.append( self.segmentROIStep ) #allSteps.append( self.analyzeROIStep ) #allSteps.append( self.reportROIStep ) # Add transition for the first step which let's the user choose between simple and advanced mode self.workflow.addTransition( self.loadSceneStep, self.connectToTrackerStep ) self.workflow.addTransition( self.connectToTrackerStep, self.placeImageFiducialsStep ) self.workflow.addTransition( self.placeImageFiducialsStep, self.placeSpatialFiducialsStep ) self.workflow.addTransition( self.placeSpatialFiducialsStep, self.registrationStep ) self.workflow.addTransition( self.registrationStep, self.navigationStep ) #self.workflow.addTransition( self.placeImageFiducials, self.selectScansStep ) #self.workflow.addTransition( self.selectScansStep, self.defineROIStep ) #self.workflow.addTransition( self.defineROIStep, self.segmentROIStep ) #self.workflow.addTransition( self.segmentROIStep, self.analyzeROIStep ) #self.workflow.addTransition( self.analyzeROIStep, self.reportROIStep ) nNodes = slicer.mrmlScene.GetNumberOfNodesByClass('vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass(n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'USGuidedProcedure': self.parameterNode = compNode print 'Found existing USGuidedProcedure parameter node' break if self.parameterNode == None: self.parameterNode = slicer.vtkMRMLScriptedModuleNode() self.parameterNode.SetModuleName('USGuidedProcedure') slicer.mrmlScene.AddNode(self.parameterNode) for s in allSteps: s.setParameterNode (self.parameterNode) # restore workflow step currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'LoadScene': self.workflow.setInitialStep(self.loadSceneStep) if currentStep == 'ConnectToTracker': self.workflow.setInitialStep(self.connectToTrackerStep) if currentStep == 'PlaceImageFiducials': self.workflow.setInitialStep(self.placeImageFiducialsStep) if currentStep == 'PlaceSpatialFiducials': self.workflow.setInitialStep(self.placeSpatialFiducialsStep) if currentStep == 'Registration': self.workflow.setInitialStep(self.registrationStep) if currentStep == 'Navigation': self.workflow.setInitialStep(self.navigationStep) #if currentStep == 'SelectScans': # self.workflow.setInitialStep(self.selectScansStep) #if currentStep == 'DefineROI': # self.workflow.setInitialStep(self.defineROIStep) #if currentStep == 'SegmentROI': # self.workflow.setInitialStep(self.segmentROIStep) #if currentStep == 'AnalyzeROI': # self.workflow.setInitialStep(self.analyzeROIStep) #if currentStep == 'ReportROI': # self.workflow.setInitialStep(self.reportROIStep) else: print 'currentStep in parameter node is empty!' # start the workflow and show the widget self.workflow.start() self.workflowWidget.visible = True if widgetClass: self.widget = widgetClass(self.parent) self.widget.setup() self.parent.show()
def setup(self): self.level = 0 self.workflow = ctk.ctkWorkflow(self.parent) #workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget = ctk.ctkWorkflowWidget() workflowWidget.setWorkflow( self.workflow ) self.workflowWidget = workflowWidget self.Settings = None workflowWidget.buttonBoxWidget().hideInvalidButtons = True workflowWidget.buttonBoxWidget().hideGoToButtons = True workflowWidget.buttonBoxWidget().backButtonFormat = '[<-]{back:#}"/"{!#}") "{back:name}(back:description)' workflowWidget.buttonBoxWidget().nextButtonFormat = '{next:#}"/"{!#}") "{next:name}(next:description)[->]' workflowWidget.workflowGroupBox().titleFormat = '[current:icon]{#}"/"{!#}") "{current:name}' workflowWidget.workflowGroupBox().hideWidgetsOfNonCurrentSteps = True #Creating each step of the workflow self.steps = [Widgets.InitialStep(), Widgets.LoadDataStep(), Widgets.ResampleStep(), Widgets.RegisterStep(), Widgets.SegmentationStep(), Widgets.VesselEnhancementStep(), Widgets.VesselExtractionStep(), ] i = 0 for step in self.steps: # \todo: b) steps should be able to access the workflow widget automatically step.Workflow = self # \todo: f) have an option to setup all the gui at startup step.createUserInterface() #Connecting the created steps of the workflow if i != 0: self.workflow.addTransition(self.steps[i-1], self.steps[i]) i += 1 self.layout.addWidget(workflowWidget) # Settings self.Settings = self.loadUi('WorkflowSettingsPanel.ui') # Display settings opacitySlider = self.findWidget(self.Settings, 'OpacityRatioDoubleSlider') opacitySlider.connect('valueChanged(double)', self.setOpacityRatio) self.setOpacityRatio(opacitySlider.value) # Hide and disable until step 1 is validated self.setDisplaySettingsVisible(False) self.setDisplaySettingsEnabled(False) # Advanced settings levelComboBox = self.findWidget(self.Settings, 'WorkflowLevelComboBox') levelComboBox.connect('currentIndexChanged(int)', self.setWorkflowLevel) self.setWorkflowLevel(levelComboBox.currentIndex) self.reloadButton = self.findWidget(self.Settings, 'ReloadPushButton') self.reloadButton.connect('clicked()', self.reloadModule) # Add CLI progress bar self.CLIProgressBar = slicer.qSlicerCLIProgressBar() self.CLIProgressBar.setStatusVisibility(self.CLIProgressBar.VisibleAfterCompletion) self.CLIProgressBar.setProgressVisibility(self.CLIProgressBar.HiddenWhenIdle) self.Settings.layout().insertWidget(1, self.CLIProgressBar) # insert after spacer # Insert settings before workflow's buttons collapsibleGroupBox = self.findWidget(self.workflowWidget.workflowGroupBox(), 'CollapsibleButton') collapsibleGroupBox.layout().addWidget(self.Settings) # Init naming and jsons. self.step('Initial').onPresetSelected() # Starting and showing the module in layout self.workflow.start()
def setup(self): self.level = 0 self.workflow = ctk.ctkWorkflow(self.parent) #workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget = ctk.ctkWorkflowWidget() workflowWidget.setWorkflow(self.workflow) self.workflowWidget = workflowWidget self.Settings = None workflowWidget.buttonBoxWidget().hideInvalidButtons = True workflowWidget.buttonBoxWidget().hideGoToButtons = True workflowWidget.buttonBoxWidget( ).backButtonFormat = '[<-]{back:#}"/"{!#}") "{back:name}(back:description)' workflowWidget.buttonBoxWidget( ).nextButtonFormat = '{next:#}"/"{!#}") "{next:name}(next:description)[->]' workflowWidget.workflowGroupBox( ).titleFormat = '[current:icon]{#}"/"{!#}") "{current:name}' workflowWidget.workflowGroupBox().hideWidgetsOfNonCurrentSteps = True #Creating each step of the workflow self.steps = [ Widgets.InitialStep(), Widgets.LoadDataStep(), Widgets.ResampleStep(), Widgets.RegisterStep(), Widgets.SegmentationStep(), Widgets.VesselEnhancementStep(), Widgets.VesselExtractionStep(), ] i = 0 for step in self.steps: # \todo: b) steps should be able to access the workflow widget automatically step.Workflow = self # \todo: f) have an option to setup all the gui at startup step.createUserInterface() #Connecting the created steps of the workflow if i != 0: self.workflow.addTransition(self.steps[i - 1], self.steps[i]) i += 1 self.layout.addWidget(workflowWidget) # Settings self.Settings = self.loadUi('WorkflowSettingsPanel.ui') # Display settings opacitySlider = self.findWidget(self.Settings, 'OpacityRatioDoubleSlider') opacitySlider.connect('valueChanged(double)', self.setOpacityRatio) self.setOpacityRatio(opacitySlider.value) # Hide and disable until step 1 is validated self.setDisplaySettingsVisible(False) self.setDisplaySettingsEnabled(False) # Advanced settings levelComboBox = self.findWidget(self.Settings, 'WorkflowLevelComboBox') levelComboBox.connect('currentIndexChanged(int)', self.setWorkflowLevel) self.setWorkflowLevel(levelComboBox.currentIndex) self.reloadButton = self.findWidget(self.Settings, 'ReloadPushButton') self.reloadButton.connect('clicked()', self.reloadModule) # Add CLI progress bar self.CLIProgressBar = slicer.qSlicerCLIProgressBar() self.CLIProgressBar.setStatusVisibility( self.CLIProgressBar.VisibleAfterCompletion) self.CLIProgressBar.setProgressVisibility( self.CLIProgressBar.HiddenWhenIdle) self.Settings.layout().insertWidget( 1, self.CLIProgressBar) # insert after spacer # Insert settings before workflow's buttons collapsibleGroupBox = self.findWidget( self.workflowWidget.workflowGroupBox(), 'CollapsibleButton') collapsibleGroupBox.layout().addWidget(self.Settings) # Init naming and jsons. self.step('Initial').onPresetSelected() # Starting and showing the module in layout self.workflow.start()
def setup( self ): """ Slicer seems to call all methods of these classes upon entry. setup creates a workflow from ctk, which simply means that it creates a certies of UI steps one can traverse with "next" / "previous" buttons. The steps themselves are contained within ContrastSubtractionWizard. """ # Currently unclear on the difference between ctkWorkflow and # ctkWorkflowStackedWidget, but presumably the latter creates a UI # for the former self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow( self.workflow ) # Create workflow steps. self.Step1 = ContrastSubtractionWizard.VolumeSelectStep('VolumeSelectStep') self.Step2 = ContrastSubtractionWizard.RegistrationStep('RegistrationStep') self.Step3 = ContrastSubtractionWizard.NormalizeSubtractStep('NormalizeSubtractStep') self.Step4 = ContrastSubtractionWizard.ROIStep('ROIStep') self.Step5 = ContrastSubtractionWizard.ThresholdStep('ThresholdStep') self.Step6 = ContrastSubtractionWizard.ReviewStep('ReviewStep') # Add the wizard steps to an array for convenience. Much of the following code # is copied wholesale from ChangeTracker. allSteps = [] allSteps.append( self.Step1 ) allSteps.append( self.Step2 ) allSteps.append( self.Step3 ) allSteps.append( self.Step4 ) allSteps.append( self.Step5 ) allSteps.append( self.Step6 ) # Adds transition functionality between steps. self.workflow.addTransition(self.Step1, self.Step2) self.workflow.addTransition(self.Step2, self.Step3) self.workflow.addTransition(self.Step3, self.Step4) self.workflow.addTransition(self.Step4, self.Step5) self.workflow.addTransition(self.Step5, self.Step6) # The following code creates a so-called parameter node referencing the # vtkMRMLScriptedModuleNode class, while checking to make sure one doesn't # already exist for some reason. This node keeps track of changse to MRML scene. nNodes = slicer.mrmlScene.GetNumberOfNodesByClass('vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass(n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'ContrastSubtraction': self.parameterNode = compNode print 'Found existing ContrastSubtraction parameter node' break if self.parameterNode == None: self.parameterNode = slicer.vtkMRMLScriptedModuleNode() self.parameterNode.SetModuleName('ContrastSubtraction') slicer.mrmlScene.AddNode(self.parameterNode) # Individual steps get access to the parameter node too! for s in allSteps: s.setParameterNode (self.parameterNode) # Restores workflow step in case something goes wrong. currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'VolumeSelectStep': self.workflow.setInitialStep(self.Step1) if currentStep == 'RegistrationStep': self.workflow.setInitialStep(self.Step2) if currentStep == 'NormalizeSubtractStep': self.workflow.setInitialStep(self.Step3) if currentStep == 'ROIStep': self.workflow.setInitialStep(self.Step4) if currentStep == 'ThresholdStep': self.workflow.setInitialStep(self.Step4) if currentStep == 'ReviewStep': self.workflow.setInitialStep(self.Step4) else: print 'currentStep in parameter node is empty!' # Starts and show the workflow. self.workflow.start() workflowWidget.visible = True self.layout.addWidget( workflowWidget )
def setup( self ): ''' Create and start the EMSegment workflow. ''' self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow( self.workflow ) workflowWidget.buttonBoxWidget().nextButtonDefaultText = "" workflowWidget.buttonBoxWidget().backButtonDefaultText = "" # create all wizard steps selectTaskStep = EMSegmentWizard.EMSegmentSelectTaskStep( Helper.GetNthStepId( 1 ) ) defineInputChannelsSimpleStep = EMSegmentWizard.EMSegmentDefineInputChannelsStep( Helper.GetNthStepId( 2 ) + 'Simple' ) # simple branch defineInputChannelsAdvancedStep = EMSegmentWizard.EMSegmentDefineInputChannelsStep( Helper.GetNthStepId( 2 ) + 'Advanced' ) # advanced branch defineAnatomicalTreeStep = EMSegmentWizard.EMSegmentDefineAnatomicalTreeStep( Helper.GetNthStepId( 3 ) ) defineAtlasStep = EMSegmentWizard.EMSegmentDefineAtlasStep( Helper.GetNthStepId( 4 ) ) editRegistrationParametersStep = EMSegmentWizard.EMSegmentEditRegistrationParametersStep( Helper.GetNthStepId( 5 ) ) definePreprocessingStep = EMSegmentWizard.EMSegmentDefinePreprocessingStep( Helper.GetNthStepId( 6 ) ) specifyIntensityDistributionStep = EMSegmentWizard.EMSegmentSpecifyIntensityDistributionStep( Helper.GetNthStepId( 7 ) ) editNodeBasedParametersStep = EMSegmentWizard.EMSegmentEditNodeBasedParametersStep( Helper.GetNthStepId( 8 ) ) miscStep = EMSegmentWizard.EMSegmentDefineMiscParametersStep( Helper.GetNthStepId( 9 ) ) segmentStep = EMSegmentWizard.EMSegmentStartSegmentationStep( Helper.GetNthStepId( 10 ) ) # add the wizard steps to an array for convenience allSteps = [] allSteps.append( selectTaskStep ) allSteps.append( defineInputChannelsSimpleStep ) allSteps.append( defineInputChannelsAdvancedStep ) allSteps.append( defineAnatomicalTreeStep ) allSteps.append( defineAtlasStep ) allSteps.append( editRegistrationParametersStep ) allSteps.append( definePreprocessingStep ) allSteps.append( specifyIntensityDistributionStep ) allSteps.append( editNodeBasedParametersStep ) allSteps.append( miscStep ) allSteps.append( segmentStep ) # Add transition for the first step which let's the user choose between simple and advanced mode self.workflow.addTransition( selectTaskStep, defineInputChannelsSimpleStep, 'SimpleMode' ) self.workflow.addTransition( selectTaskStep, defineInputChannelsAdvancedStep, 'AdvancedMode' ) # Add transitions associated to the simple mode self.workflow.addTransition( defineInputChannelsSimpleStep, defineAnatomicalTreeStep ) # Add transitions associated to the advanced mode self.workflow.addTransition( defineInputChannelsAdvancedStep, defineAnatomicalTreeStep ) # .. add transitions for the rest of the advanced mode steps for i in range( 3, len( allSteps ) - 1 ): self.workflow.addTransition( allSteps[i], allSteps[i + 1] ) # Propagate the workflow, the logic and the MRML Manager to the steps for s in allSteps: s.setWorkflow( self.workflow ) s.setLogic( self.logic() ) s.setMRMLManager( self.mrmlManager() ) # disable the error text which showed up when jumping to the (invisible) segment step workflowWidget.workflowGroupBox().errorTextEnabled = False # start the workflow and show the widget self.workflow.start() workflowWidget.visible = True self.layout.addWidget( workflowWidget ) # enable global access to the dynamicFrames on step 2 and step 6 slicer.modules.emsegmentSimpleDynamicFrame = defineInputChannelsSimpleStep.dynamicFrame() slicer.modules.emsegmentAdvancedDynamicFrame = definePreprocessingStep.dynamicFrame() slicer.modules.emsegmentPreprocessingStep = definePreprocessingStep
def setup( self ): ''' Create and start the workflow. ''' self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow( self.workflow ) # create all wizard steps self.loadDataStep = PedicleScrewSimulatorWizard_v3.LoadDataStep( 'LoadData' ) self.defineROIStep = PedicleScrewSimulatorWizard_v3.DefineROIStep( 'DefineROI' ) self.measurementsStep = PedicleScrewSimulatorWizard_v3.MeasurementsStep( 'Measurements' ) self.landmarksStep = PedicleScrewSimulatorWizard_v3.LandmarksStep( 'Landmarks' ) self.screwStep = PedicleScrewSimulatorWizard_v3.ScrewStep( 'Screw' ) self.gradeStep = PedicleScrewSimulatorWizard_v3.GradeStep( 'Grade' ) self.endStep = PedicleScrewSimulatorWizard_v3.EndStep( 'Final' ) # add the wizard steps to an array for convenience allSteps = [] allSteps.append( self.loadDataStep ) allSteps.append( self.defineROIStep ) allSteps.append( self.landmarksStep) allSteps.append( self.measurementsStep ) allSteps.append( self.screwStep) allSteps.append( self.gradeStep) allSteps.append( self.endStep ) # Add transition # Check if volume is loaded self.workflow.addTransition( self.loadDataStep, self.defineROIStep ) self.workflow.addTransition( self.defineROIStep, self.landmarksStep, 'pass', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition( self.defineROIStep, self.loadDataStep, 'fail', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition( self.landmarksStep, self.measurementsStep, 'pass', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition( self.landmarksStep, self.measurementsStep, 'fail', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition( self.measurementsStep, self.screwStep, 'pass', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition( self.measurementsStep, self.screwStep, 'fail', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition( self.screwStep, self.gradeStep, 'pass', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition( self.screwStep, self.gradeStep, 'fail', ctk.ctkWorkflow.Bidirectional ) self.workflow.addTransition( self.gradeStep, self.endStep ) nNodes = slicer.mrmlScene.GetNumberOfNodesByClass('vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass(n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'PedicleScrewSimulator_v3': self.parameterNode = compNode print 'Found existing PedicleScrewSimulator_v3 parameter node' break if self.parameterNode == None: self.parameterNode = slicer.vtkMRMLScriptedModuleNode() self.parameterNode.SetModuleName('PedicleScrewSimulator_v3') slicer.mrmlScene.AddNode(self.parameterNode) for s in allSteps: s.setParameterNode (self.parameterNode) # restore workflow step currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'LoadData': self.workflow.setInitialStep(self.loadDataStep) if currentStep == 'DefineROI': self.workflow.setInitialStep(self.defineROIStep) if currentStep == 'Measurements': self.workflow.setInitialStep(self.measurementsStep) if currentStep == 'Landmarks': self.workflow.setInitialStep(self.landmarksStep) if currentStep == 'Screw': self.workflow.setInitialStep(self.screwStep) if currentStep == 'Grade': self.workflow.setInitialStep(self.gradeStep) if currentStep == 'Final': self.workflow.setInitialStep(self.endStep) else: print 'currentStep in parameter node is empty!' # start the workflow and show the widget self.workflow.start() workflowWidget.visible = True self.layout.addWidget( workflowWidget )
def setup( self ): ''' Create and start the ChangeTracker workflow. ''' self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow( self.workflow ) workflowWidget.buttonBoxWidget().nextButtonDefaultText = "" workflowWidget.buttonBoxWidget().backButtonDefaultText = "" # create all wizard steps selectScansStep = ChangeTrackerWizard.ChangeTrackerSelectScansStep( 'SelectScans' ) defineROIStep = ChangeTrackerWizard.ChangeTrackerDefineROIStep( 'DefineROI' ) segmentROIStep = ChangeTrackerWizard.ChangeTrackerSegmentROIStep( 'SegmentROI' ) analyzeROIStep = ChangeTrackerWizard.ChangeTrackerAnalyzeROIStep( 'AnalyzeROI' ) reportROIStep = ChangeTrackerWizard.ChangeTrackerReportROIStep( 'ReportROI' ) # add the wizard steps to an array for convenience allSteps = [] allSteps.append( selectScansStep ) allSteps.append( defineROIStep ) allSteps.append( segmentROIStep ) allSteps.append( analyzeROIStep ) allSteps.append( reportROIStep ) # Add transition for the first step which let's the user choose between simple and advanced mode self.workflow.addTransition( selectScansStep, defineROIStep ) self.workflow.addTransition( defineROIStep, segmentROIStep ) self.workflow.addTransition( segmentROIStep, analyzeROIStep ) self.workflow.addTransition( analyzeROIStep, reportROIStep ) nNodes = slicer.mrmlScene.GetNumberOfNodesByClass('vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass(n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'ChangeTracker': self.parameterNode = compNode print 'Found existing ChangeTracker parameter node' break if self.parameterNode == None: self.parameterNode = slicer.mrmlScene.CreateNodeByClass('vtkMRMLScriptedModuleNode') self.parameterNode.SetModuleName('ChangeTracker') slicer.mrmlScene.AddNode(self.parameterNode) # Propagate the workflow, the logic and the MRML Manager to the steps for s in allSteps: s.setWorkflow( self.workflow ) s.setParameterNode (self.parameterNode) #s.setLogic( self.logic() ) #s.setMRMLManager( self.mrmlManager() ) # restore workflow step currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'SelectScans': self.workflow.setInitialStep(selectScansStep) if currentStep == 'DefineROI': self.workflow.setInitialStep(defineROIStep) if currentStep == 'SegmentROI': self.workflow.setInitialStep(segmentROIStep) if currentStep == 'AnalyzeROI': self.workflow.setInitialStep(analyzeROIStep) if currentStep == 'ReportROI': self.workflow.setInitialStep(reportROIStep) else: print 'currentStep in parameter node is empty!' # start the workflow and show the widget self.workflow.start() workflowWidget.visible = True self.layout.addWidget( workflowWidget )
def setup( self ): ''' Create and start the iGyne workflow. ''' self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow( self.workflow ) # create all wizard steps selectProcedureStep = iGyneWizard.iGyneSelectProcedureStep( 'SelectProcedure' ) selectApplicatorStep = iGyneWizard.iGyneSelectApplicatorStep( 'SelectApplicator' ) loadModelStep = iGyneWizard.iGyneLoadModelStep( 'LoadModel' ) firstRegistrationStep = iGyneWizard.iGyneFirstRegistrationStep( 'FirstRegistration' ) secondRegistrationStep = iGyneWizard.iGyneSecondRegistrationStep( 'SecondRegistration' ) needlePlanningStep = iGyneWizard.iGyneNeedlePlanningStep( 'NeedlePlanning' ) needleSegmentationStep = iGyneWizard.iGyneNeedleSegmentationStep( 'NeedleSegmentation' ) # add the wizard steps to an array for convenience allSteps = [] allSteps.append( selectProcedureStep ) allSteps.append( selectApplicatorStep ) allSteps.append( loadModelStep ) allSteps.append( firstRegistrationStep ) allSteps.append( secondRegistrationStep ) allSteps.append( needlePlanningStep ) allSteps.append( needleSegmentationStep ) self.workflow.addTransition( selectProcedureStep, selectApplicatorStep ) self.workflow.addTransition( selectApplicatorStep, loadModelStep ) self.workflow.addTransition( loadModelStep, firstRegistrationStep ) self.workflow.addTransition( firstRegistrationStep, secondRegistrationStep ) self.workflow.addTransition( secondRegistrationStep, needlePlanningStep ) self.workflow.addTransition( needlePlanningStep, needleSegmentationStep ) self.workflow.addTransition(selectProcedureStep,needleSegmentationStep) nNodes = slicer.mrmlScene.GetNumberOfNodesByClass('vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass(n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'iGynePy': self.parameterNode = compNode print 'Found existing iGyne parameter node' break if self.parameterNode == None: self.parameterNode = slicer.mrmlScene.CreateNodeByClass('vtkMRMLScriptedModuleNode') self.parameterNode.SetModuleName('iGynePy') slicer.mrmlScene.AddNode(self.parameterNode) # Propagate the workflow, the logic and the MRML Manager to the steps for s in allSteps: s.setWorkflow( self.workflow ) s.setParameterNode (self.parameterNode) # restore workflow step currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'SelectProcedure': self.workflow.setInitialStep(selectProcedureStep) if currentStep == 'SelectApplicator': self.workflow.setInitialStep(selectApplicatorStep) if currentStep == 'LoadModel': self.workflow.setInitialStep(loadModelStep) if currentStep == 'FirstRegistration': self.workflow.setInitialStep(firstRegistrationStep) if currentStep == 'SecondRegistration': self.workflow.setInitialStep(secondRegistrationStep) if currentStep == 'NeedlePlanning': self.workflow.setInitialStep(needlePlanningStep) if currentStep == 'NeedleSegmentation': self.workflow.setInitialStep(needleSegmentationStep) else: print 'currentStep in parameter node is empty!' # start the workflow and show the widget self.workflow.start() workflowWidget.visible = True self.layout.addWidget( workflowWidget )
def setup(self): self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(self.workflow) # create all 4 wizard steps self.selectDataStep = LASegmentationResources.LASegmentationWorkflowSelectDataStep( 'SelectData') self.registrationStep = LASegmentationResources.LASegmentationWorkflowImageRegistrationStep( 'ImageRegistration') self.endoSegStep = LASegmentationResources.LASegmentationWorkflowEndoSegmentationStep( 'LAEndoSegmentation') # add the wizard steps to an array for convenience allSteps = [] allSteps.append(self.selectDataStep) allSteps.append(self.registrationStep) allSteps.append(self.endoSegStep) self.workflow.addTransition(self.selectDataStep, self.registrationStep) self.workflow.addTransition(self.registrationStep, self.endoSegStep) nNodes = slicer.mrmlScene.GetNumberOfNodesByClass( 'vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass( n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'LASegmentationWorkflow': self.parameterNode = compNode print 'Found existing LASegmentationWorkflow parameter node' break if self.parameterNode == None: self.parameterNode = slicer.vtkMRMLScriptedModuleNode() self.parameterNode.SetModuleName('LASegmentationWorkflow') slicer.mrmlScene.AddNode(self.parameterNode) for s in allSteps: s.setParameterNode(self.parameterNode) # restore workflow step currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'SelectData': self.workflow.setInitialStep(self.selectDataStep) if currentStep == 'ImageRegistration': self.workflow.setInitialStep(self.registrationStep) if currentStep == 'LAEndoSegmentation': self.workflow.setInitialStep(self.endoSegStep) else: print 'currentStep in parameter node is empty!' # Start the workflow and show the widget self.workflow.start() workflowWidget.visible = True self.layout.addWidget(workflowWidget)
def setup(self): ''' Create and start the workflow. ''' self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(self.workflow) # create all wizard steps self.loadDataStep = PedicleScrewSimulatorWizard_v3.LoadDataStep( 'LoadData') self.defineROIStep = PedicleScrewSimulatorWizard_v3.DefineROIStep( 'DefineROI') self.measurementsStep = PedicleScrewSimulatorWizard_v3.MeasurementsStep( 'Measurements') self.landmarksStep = PedicleScrewSimulatorWizard_v3.LandmarksStep( 'Landmarks') self.screwStep = PedicleScrewSimulatorWizard_v3.ScrewStep('Screw') self.gradeStep = PedicleScrewSimulatorWizard_v3.GradeStep('Grade') self.endStep = PedicleScrewSimulatorWizard_v3.EndStep('Final') # add the wizard steps to an array for convenience allSteps = [] allSteps.append(self.loadDataStep) allSteps.append(self.defineROIStep) allSteps.append(self.landmarksStep) allSteps.append(self.measurementsStep) allSteps.append(self.screwStep) allSteps.append(self.gradeStep) allSteps.append(self.endStep) # Add transition # Check if volume is loaded self.workflow.addTransition(self.loadDataStep, self.defineROIStep) self.workflow.addTransition(self.defineROIStep, self.landmarksStep, 'pass', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.defineROIStep, self.loadDataStep, 'fail', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.landmarksStep, self.measurementsStep, 'pass', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.landmarksStep, self.measurementsStep, 'fail', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.measurementsStep, self.screwStep, 'pass', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.measurementsStep, self.screwStep, 'fail', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.screwStep, self.gradeStep, 'pass', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.screwStep, self.gradeStep, 'fail', ctk.ctkWorkflow.Bidirectional) self.workflow.addTransition(self.gradeStep, self.endStep) nNodes = slicer.mrmlScene.GetNumberOfNodesByClass( 'vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass( n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'PedicleScrewSimulator_v3': self.parameterNode = compNode print 'Found existing PedicleScrewSimulator_v3 parameter node' break if self.parameterNode == None: self.parameterNode = slicer.vtkMRMLScriptedModuleNode() self.parameterNode.SetModuleName('PedicleScrewSimulator_v3') slicer.mrmlScene.AddNode(self.parameterNode) for s in allSteps: s.setParameterNode(self.parameterNode) # restore workflow step currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'LoadData': self.workflow.setInitialStep(self.loadDataStep) if currentStep == 'DefineROI': self.workflow.setInitialStep(self.defineROIStep) if currentStep == 'Measurements': self.workflow.setInitialStep(self.measurementsStep) if currentStep == 'Landmarks': self.workflow.setInitialStep(self.landmarksStep) if currentStep == 'Screw': self.workflow.setInitialStep(self.screwStep) if currentStep == 'Grade': self.workflow.setInitialStep(self.gradeStep) if currentStep == 'Final': self.workflow.setInitialStep(self.endStep) else: print 'currentStep in parameter node is empty!' # start the workflow and show the widget self.workflow.start() workflowWidget.visible = True self.layout.addWidget(workflowWidget)
def setup(self): """ Create and start the EMSegment workflow. """ # Use the logic associated with the module if not self.__logic: self.__logic = self.parent.module().logic() self.parent.connect("mrmlSceneChanged(vtkMRMLScene*)", self.onMRMLSceneChanged) workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow(workflow) # create all wizard steps selectTaskStep = EMSegmentWizard.EMSegmentSelectTaskStep(Helper.GetNthStepId(1)) defineInputChannelsSimpleStep = EMSegmentWizard.EMSegmentDefineInputChannelsStep( Helper.GetNthStepId(2) + "Simple" ) # simple branch defineInputChannelsAdvancedStep = EMSegmentWizard.EMSegmentDefineInputChannelsStep( Helper.GetNthStepId(2) + "Advanced" ) # advanced branch defineAnatomicalTreeStep = EMSegmentWizard.EMSegmentDefineAnatomicalTreeStep(Helper.GetNthStepId(3)) defineAtlasStep = EMSegmentWizard.EMSegmentDefineAtlasStep(Helper.GetNthStepId(4)) editRegistrationParametersStep = EMSegmentWizard.EMSegmentEditRegistrationParametersStep(Helper.GetNthStepId(5)) definePreprocessingStep = EMSegmentWizard.EMSegmentDefinePreprocessingStep(Helper.GetNthStepId(6)) specifyIntensityDistributionStep = EMSegmentWizard.EMSegmentSpecifyIntensityDistributionStep( Helper.GetNthStepId(7) ) editNodeBasedParametersStep = EMSegmentWizard.EMSegmentEditNodeBasedParametersStep(Helper.GetNthStepId(8)) miscStep = EMSegmentWizard.EMSegmentDefineMiscParametersStep(Helper.GetNthStepId(9)) segmentStep = EMSegmentWizard.EMSegmentStartSegmentationStep(Helper.GetNthStepId(10)) statisticsStep = EMSegmentWizard.EMSegmentLabelStatisticsStep(Helper.GetNthStepId(11)) # add the wizard steps to an array for convenience allSteps = [] allSteps.append(selectTaskStep) allSteps.append(defineInputChannelsSimpleStep) allSteps.append(defineInputChannelsAdvancedStep) allSteps.append(defineAnatomicalTreeStep) allSteps.append(defineAtlasStep) allSteps.append(editRegistrationParametersStep) allSteps.append(definePreprocessingStep) allSteps.append(specifyIntensityDistributionStep) allSteps.append(editNodeBasedParametersStep) allSteps.append(miscStep) allSteps.append(statisticsStep) allSteps.append(segmentStep) # Add transition for the first step which let's the user choose between simple and advanced mode workflow.addTransition(selectTaskStep, defineInputChannelsSimpleStep, "SimpleMode") workflow.addTransition(selectTaskStep, defineInputChannelsAdvancedStep, "AdvancedMode") # Add transitions associated to the simple mode workflow.addTransition(defineInputChannelsSimpleStep, defineAnatomicalTreeStep) # Add transitions associated to the advanced mode workflow.addTransition(defineInputChannelsAdvancedStep, defineAnatomicalTreeStep) # .. add transitions for the rest of the advanced mode steps for i in range(3, len(allSteps) - 1): workflow.addTransition(allSteps[i], allSteps[i + 1]) # Propagate the workflow, the logic and the MRML Manager to the steps for s in allSteps: s.setLogic(self.__logic) s.setMRMLManager(self.__logic.GetMRMLManager()) # Disable the error text which showed up when jumping to the (invisible) segment step workflowWidget.workflowGroupBox().errorTextEnabled = False workflow.goBackToOriginStepUponSuccess = False # start the workflow and show the widget workflow.start() workflowWidget.visible = True self.layout.addWidget(workflowWidget) # enable global access to the dynamicFrames on step 2 and step 6 slicer.modules.emsegmentLogic = self.__logic slicer.modules.emsegmentSimpleDynamicFrame = defineInputChannelsSimpleStep.dynamicFrame() slicer.modules.emsegmentPreprocessingStep = definePreprocessingStep # Keep track of workflow and workflowWidget references self.__workflow = workflow self.__workflowWidget = workflowWidget
def setup( self ): self.workflow = ctk.ctkWorkflow() workflowWidget = ctk.ctkWorkflowStackedWidget() workflowWidget.setWorkflow( self.workflow ) #workflowWidget.buttonBoxWidget().nextButtonDefaultText = "" #workflowWidget.buttonBoxWidget().backButtonDefaultText = "" # create all 9 wizard steps self.selectMRIDataStep = Resources.CMRToolkitWizardSelectDataStep( 'SelectMRIData' ) self.endoSegStep = Resources.CMRToolkitWizardEndoSegmentationStep( 'LAEndoSegmentation' ) self.axialDilateStep = Resources.CMRToolkitWizardAxialDilateStep( 'AxialDilate' ) self.booleanRemoveStep = Resources.CMRToolkitWizardBooleanRemoveStep( 'BooleanRemove' ) self.wallCleanupStep = Resources.CMRToolkitWizardWallCleanupStep( 'LAWallCleanup' ) self.antrumCutStep = Resources.CMRToolkitWizardAntrumCutStep( 'PVAntrumCut' ) self.endoNVIsoStep = Resources.CMRToolkitWizardEndoNVIsosurfaceStep( 'EndoNVIsosurface' ) self.autoScarStep = Resources.CMRToolkitWizardAutoScarStep( 'AutomaticLeftAtrialScar' ) #self.scarIsoStep = Resources.CMRToolkitWizardScarIsosurfaceStep( 'ScarIsosurface' ) # add the wizard steps to an array for convenience allSteps = [] allSteps.append( self.selectMRIDataStep ) allSteps.append( self.endoSegStep ) allSteps.append( self.axialDilateStep ) allSteps.append( self.booleanRemoveStep ) allSteps.append( self.wallCleanupStep ) allSteps.append( self.antrumCutStep ) allSteps.append( self.endoNVIsoStep ) allSteps.append( self.autoScarStep ) #allSteps.append( self.scarIsoStep ) self.workflow.addTransition( self.selectMRIDataStep, self.endoSegStep ) self.workflow.addTransition( self.endoSegStep, self.axialDilateStep ) self.workflow.addTransition( self.axialDilateStep, self.booleanRemoveStep ) self.workflow.addTransition( self.booleanRemoveStep, self.wallCleanupStep ) self.workflow.addTransition( self.wallCleanupStep, self.antrumCutStep ) self.workflow.addTransition( self.antrumCutStep, self.endoNVIsoStep ) self.workflow.addTransition( self.endoNVIsoStep, self.autoScarStep ) nNodes = slicer.mrmlScene.GetNumberOfNodesByClass('vtkMRMLScriptedModuleNode') self.parameterNode = None for n in xrange(nNodes): compNode = slicer.mrmlScene.GetNthNodeByClass(n, 'vtkMRMLScriptedModuleNode') nodeid = None if compNode.GetModuleName() == 'CMRToolkitWizard': self.parameterNode = compNode print 'Found existing CMRToolkitWizard parameter node' break if self.parameterNode == None: self.parameterNode = slicer.vtkMRMLScriptedModuleNode() self.parameterNode.SetModuleName('CMRToolkitWizard') slicer.mrmlScene.AddNode(self.parameterNode) for s in allSteps: s.setParameterNode (self.parameterNode) # restore workflow step currentStep = self.parameterNode.GetParameter('currentStep') if currentStep != '': print 'Restoring workflow step to ', currentStep if currentStep == 'SelectMRIData': self.workflow.setInitialStep(self.selectMRIDataStep) if currentStep == 'LAEndoSegmentation': self.workflow.setInitialStep(self.endoSegStep) if currentStep == 'AxialDilate': self.workflow.setInitialStep(self.axialDilateStep) if currentStep == 'BooleanRemove': self.workflow.setInitialStep(self.booleanRemoveStep) if currentStep == 'LAWallSegmentation': self.workflow.setInitialStep(self.wallCleanupStep) if currentStep == 'PVAntrumCut': self.workflow.setInitialStep(self.antrumCutStep) if currentStep == 'EndoNVIsosurface': self.workflow.setInitialStep(self.endoNVIsoStep) if currentStep == 'AutomaticLeftAtrialScar': self.workflow.setInitialStep(self.autoScarStep) #if currentStep == 'ScarIsosurface': # self.workflow.setInitialStep(self.scarIsoStep) else: print 'currentStep in parameter node is empty!' # Start the workflow and show the widget self.workflow.start() workflowWidget.visible = True self.layout.addWidget( workflowWidget )