コード例 #1
0
ファイル: SegmentEditor.py プロジェクト: zhangyy130/Slicer
  def setup(self):
    ScriptedLoadableModuleWidget.setup(self)

    # Add margin to the sides
    self.layout.setContentsMargins(4,0,4,0)

    #
    # Segment editor widget
    #
    import qSlicerSegmentationsModuleWidgetsPythonQt
    self.editor = qSlicerSegmentationsModuleWidgetsPythonQt.qMRMLSegmentEditorWidget()
    self.editor.setMaximumNumberOfUndoStates(10)
    # Set parameter node first so that the automatic selections made when the scene is set are saved
    self.selectParameterNode()
    self.editor.setMRMLScene(slicer.mrmlScene)
    self.layout.addWidget(self.editor)

    # Observe editor effect registrations to make sure that any effects that are registered
    # later will show up in the segment editor widget. For example, if Segment Editor is set
    # as startup module, additional effects are registered after the segment editor widget is created.
    import qSlicerSegmentationsEditorEffectsPythonQt
    #TODO: For some reason the instance() function cannot be called as a class function although it's static
    factory = qSlicerSegmentationsEditorEffectsPythonQt.qSlicerSegmentEditorEffectFactory()
    self.effectFactorySingleton = factory.instance()
    self.effectFactorySingleton.connect('effectRegistered(QString)', self.editorEffectRegistered)

    # Connect observers to scene events
    self.addObserver(slicer.mrmlScene, slicer.mrmlScene.StartCloseEvent, self.onSceneStartClose)
    self.addObserver(slicer.mrmlScene, slicer.mrmlScene.EndCloseEvent, self.onSceneEndClose)
    self.addObserver(slicer.mrmlScene, slicer.mrmlScene.EndImportEvent, self.onSceneEndImport)
コード例 #2
0
ファイル: SegmentEditor.py プロジェクト: Slicer/Slicer
  def setup(self):
    ScriptedLoadableModuleWidget.setup(self)

    # Add margin to the sides
    self.layout.setContentsMargins(4,0,4,0)

    #
    # Segment editor widget
    #
    import qSlicerSegmentationsModuleWidgetsPythonQt
    self.editor = qSlicerSegmentationsModuleWidgetsPythonQt.qMRMLSegmentEditorWidget()
    self.editor.setMaximumNumberOfUndoStates(10)
    # Set parameter node first so that the automatic selections made when the scene is set are saved
    self.selectParameterNode()
    self.editor.setMRMLScene(slicer.mrmlScene)
    self.layout.addWidget(self.editor)

    # Observe editor effect registrations to make sure that any effects that are registered
    # later will show up in the segment editor widget. For example, if Segment Editor is set
    # as startup module, additional effects are registered after the segment editor widget is created.
    import qSlicerSegmentationsEditorEffectsPythonQt
    #TODO: For some reason the instance() function cannot be called as a class function although it's static
    factory = qSlicerSegmentationsEditorEffectsPythonQt.qSlicerSegmentEditorEffectFactory()
    self.effectFactorySingleton = factory.instance()
    self.effectFactorySingleton.connect('effectRegistered(QString)', self.editorEffectRegistered)

    # Connect observers to scene events
    self.addObserver(slicer.mrmlScene, slicer.mrmlScene.StartCloseEvent, self.onSceneStartClose)
    self.addObserver(slicer.mrmlScene, slicer.mrmlScene.EndCloseEvent, self.onSceneEndClose)
    self.addObserver(slicer.mrmlScene, slicer.mrmlScene.EndImportEvent, self.onSceneEndImport)
コード例 #3
0
 def register(self):
   import qSlicerSegmentationsEditorEffectsPythonQt
   #TODO: For some reason the instance() function cannot be called as a class function although it's static
   factory = qSlicerSegmentationsEditorEffectsPythonQt.qSlicerSegmentEditorEffectFactory()
   effectFactorySingleton = factory.instance()
   effectFactorySingleton.registerEffect(self.scriptedEffect)
   logging.debug('Scripted segment editor effects registered: ' + self.scriptedEffect.name)
コード例 #4
0
 def register(self):
     import qSlicerSegmentationsEditorEffectsPythonQt
     #TODO: For some reason the instance() function cannot be called as a class function although it's static
     factory = qSlicerSegmentationsEditorEffectsPythonQt.qSlicerSegmentEditorEffectFactory(
     )
     effectFactorySingleton = factory.instance()
     effectFactorySingleton.registerEffect(self.scriptedEffect)
コード例 #5
0
    def setup(self):
        ScriptedLoadableModuleWidget.setup(self)

        # Load widget from .ui file (created by Qt Designer)

        uiWidget = slicer.util.loadUI(
            self.resourcePath('UI/SingleSliceSegmentation.ui'))
        self.layout.addWidget(uiWidget)
        self.ui = slicer.util.childWidgetVariables(uiWidget)

        # Set up widgets

        self.ui.inputSequenceBrowserSelector.setMRMLScene(slicer.mrmlScene)
        self.ui.inputVolumeSelector.setMRMLScene(slicer.mrmlScene)
        self.ui.inputSegmentationSelector.setMRMLScene(slicer.mrmlScene)
        self.ui.segmentationBrowserSelector.setMRMLScene(slicer.mrmlScene)

        # connections

        self.ui.inputSequenceBrowserSelector.connect(
            "currentNodeChanged(vtkMRMLNode*)", self.onInputBrowserChanged)
        self.ui.inputVolumeSelector.connect("currentNodeChanged(vtkMRMLNode*)",
                                            self.onInputVolumeChanged)
        self.ui.inputSegmentationSelector.connect(
            "currentNodeChanged(vtkMRMLNode*)", self.onSegmentationChanged)
        self.ui.segmentationBrowserSelector.connect(
            "currentNodeChanged(vtkMRMLNode*)",
            self.onSegmentationBrowserChanged)
        self.ui.skipImagesSpinBox.connect("valueChanged(int)",
                                          self.onSkipImagesNumChanged)

        self.ui.captureButton.connect('clicked(bool)', self.onCaptureButton)
        self.ui.clearSegmentationButton.connect('clicked(bool)',
                                                self.onClearButton)
        self.ui.skipImageButton.connect('clicked(bool)', self.onSkipButton)
        self.ui.exportButton.connect('clicked(bool)', self.onExportButton)

        self.ui.editor.setMRMLScene(slicer.mrmlScene)

        import qSlicerSegmentationsEditorEffectsPythonQt
        # TODO: For some reason the instance() function cannot be called as a class function although it's static
        factory = qSlicerSegmentationsEditorEffectsPythonQt.qSlicerSegmentEditorEffectFactory(
        )
        self.effectFactorySingleton = factory.instance()
        self.effectFactorySingleton.connect('effectRegistered(QString)',
                                            self.editorEffectRegistered)
コード例 #6
0
    def setupSegmentEditor(self):
        self.ui.segmentEditorWidget.setMRMLScene(slicer.mrmlScene)

        segmentEditorSingletonTag = "LiverRFA.SegmentEditor"
        segmentEditorNode = slicer.mrmlScene.GetSingletonNode(
            segmentEditorSingletonTag, "vtkMRMLSegmentEditorNode")
        if segmentEditorNode is None:
            segmentEditorNode = slicer.vtkMRMLSegmentEditorNode()
            segmentEditorNode.SetSingletonTag(segmentEditorSingletonTag)
            segmentEditorNode = slicer.mrmlScene.AddNode(segmentEditorNode)
        if self.ui.segmentEditorWidget.mrmlSegmentEditorNode(
        ) == segmentEditorNode:
            # nothing changed
            return
        self.ui.segmentEditorWidget.setMRMLSegmentEditorNode(segmentEditorNode)

        # Observe editor effect registrations to make sure that any effects that are registered
        # later will show up in the segment editor widget. For example, if Segment Editor is set
        # as startup module, additional effects are registered after the segment editor widget is created.
        import qSlicerSegmentationsEditorEffectsPythonQt
        #TODO: For some reason the instance() function cannot be called as a class function although it's static
        factory = qSlicerSegmentationsEditorEffectsPythonQt.qSlicerSegmentEditorEffectFactory(
        )
        self.effectFactorySingleton = factory.instance()
コード例 #7
0
    def setup(self):
        ScriptedLoadableModuleWidget.setup(self)

        # Load widget from .ui file (created by Qt Designer)

        uiWidget = slicer.util.loadUI(
            self.resourcePath('UI/SingleSliceSegmentation.ui'))
        self.layout.addWidget(uiWidget)
        self.ui = slicer.util.childWidgetVariables(uiWidget)

        # Set up widgets

        self.ui.inputSequenceBrowserSelector.setMRMLScene(slicer.mrmlScene)
        self.ui.inputVolumeSelector.setMRMLScene(slicer.mrmlScene)
        self.ui.inputSegmentationSelector.setMRMLScene(slicer.mrmlScene)
        self.ui.segmentationBrowserSelector.setMRMLScene(slicer.mrmlScene)

        # connections

        self.ui.inputSequenceBrowserSelector.connect(
            "currentNodeChanged(vtkMRMLNode*)", self.onInputBrowserChanged)
        self.ui.inputVolumeSelector.connect("currentNodeChanged(vtkMRMLNode*)",
                                            self.onInputVolumeChanged)
        self.ui.inputSegmentationSelector.connect(
            "currentNodeChanged(vtkMRMLNode*)", self.onSegmentationChanged)
        self.ui.segmentationBrowserSelector.connect(
            "currentNodeChanged(vtkMRMLNode*)",
            self.onSegmentationBrowserChanged)
        self.ui.skipImagesSpinBox.connect("valueChanged(int)",
                                          self.onSkipImagesNumChanged)

        self.ui.captureButton.connect('clicked(bool)', self.onCaptureButton)
        self.ui.clearSegmentationButton.connect('clicked(bool)',
                                                self.onClearButton)
        self.ui.skipImageButton.connect('clicked(bool)', self.onSkipButton)
        self.ui.exportButton.connect('clicked(bool)', self.onExportButton)
        self.ui.layoutSelectButton.connect('clicked(bool)',
                                           self.onLayoutSelectButton)

        self.ui.editor.setMRMLScene(slicer.mrmlScene)

        import qSlicerSegmentationsEditorEffectsPythonQt
        # TODO: For some reason the instance() function cannot be called as a class function although it's static
        factory = qSlicerSegmentationsEditorEffectsPythonQt.qSlicerSegmentEditorEffectFactory(
        )
        self.effectFactorySingleton = factory.instance()
        self.effectFactorySingleton.connect('effectRegistered(QString)',
                                            self.editorEffectRegistered)

        # Add custom layout to layout selection menu
        customLayout = """
    <layout type="horizontal" split="true">
      <item>
       <view class="vtkMRMLSliceNode" singletontag="Red">
        <property name="orientation" action="default">Axial</property>
        <property name="viewlabel" action="default">R</property>
        <property name="viewcolor" action="default">#F34A33</property>
       </view>
      </item>
      <item>
       <view class="vtkMRMLViewNode" singletontag="1">
         <property name="viewlabel" action="default">1</property>
       </view>
      </item>
    </layout>
    """

        customLayoutId = 501

        layoutManager = slicer.app.layoutManager()
        layoutManager.layoutLogic().GetLayoutNode().AddLayoutDescription(
            customLayoutId, customLayout)

        viewToolBar = slicer.util.mainWindow().findChild(
            'QToolBar', 'ViewToolBar')
        layoutMenu = viewToolBar.widgetForAction(
            viewToolBar.actions()[0]).menu()
        layoutSwitchActionParent = layoutMenu
        layoutSwitchAction = layoutSwitchActionParent.addAction(
            "red + 3D side by side")  # add inside layout list
        layoutSwitchAction.setData(customLayoutId)
        # layoutSwitchAction.setIcon(qt.QIcon(':Icons/Go.png'))
        layoutSwitchAction.setToolTip('3D and slice view')
        layoutSwitchAction.connect('triggered()',
                                   lambda layoutId=customLayoutId: slicer.app.
                                   layoutManager().setLayout(layoutId))

        customLayout = """
    <layout type="horizontal" split="true">
      <item>
       <view class="vtkMRMLSliceNode" singletontag="Red">
        <property name="orientation" action="default">Axial</property>
        <property name="viewlabel" action="default">R</property>
        <property name="viewcolor" action="default">#F34A33</property>
       </view>
      </item>
      <item>
        <layout type=\"horizontal\">
          <item>
            <view class="vtkMRMLViewNode" singletontag="1">
              <property name="viewlabel" action="default">1</property>
            </view>
          </item>
          <item>
            <view class="vtkMRMLViewNode" singletontag="2" type="secondary">
              <property name="viewlabel" action="default">2</property>
            </view>
          </item>
        </layout>
      </item>
    </layout>
    """

        customLayoutId = 502

        layoutManager.layoutLogic().GetLayoutNode().AddLayoutDescription(
            customLayoutId, customLayout)

        layoutSwitchActionParent = layoutMenu
        layoutSwitchAction = layoutSwitchActionParent.addAction(
            "red + stacked dual 3D")  # add inside layout list
        layoutSwitchAction.setData(customLayoutId)
        # layoutSwitchAction.setIcon(qt.QIcon(':Icons/Go.png'))
        layoutSwitchAction.setToolTip('Dual 3D and slice view')
        layoutSwitchAction.connect('triggered()',
                                   lambda layoutId=customLayoutId: slicer.app.
                                   layoutManager().setLayout(layoutId))