Exemple #1
0
    def __init__(self, scene=None):
        """ Do whatever is needed to reset the state - typically a scene clear will be enough.
    """
        self.logic = ShaderComputationLogic()
        try:
            from vtkSlicerShadedActorModuleLogicPython import vtkOpenGLShaderComputation
        except ImportError:
            import vtkAddon
        vtkOpenGLShaderComputation = vtkAddon.vtkOpenGLShaderComputation
        self.shaderComputation = vtkOpenGLShaderComputation()

        self.shaderComputation.SetVertexShaderSource(
            self.logic.rayCastVertexShaderSource())

        self.resultImage = vtk.vtkImageData()
        self.resultImage.SetDimensions(1024, 1024, 1)
        self.resultImage.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 4)
        self.shaderComputation.SetResultImageData(self.resultImage)

        self.imageViewer = vtk.vtkImageViewer()
        self.imageViewer.SetColorLevel(128)
        self.imageViewer.SetColorWindow(256)

        self.transformPointSource = ""
        # TODO: this is just an example
        self.volumePropertyNode = None

        # map of node IDs to instances of FieldSampler subclasses
        self.fieldSamplersByNodeID = {}

        if scene:
            self.scene = scene
        else:
            self.scene = slicer.mrmlScene
        self.sceneObserver = SceneObserver(self.scene)
        self.sceneObserver.addTrigger("ScalarVolume", "Added",
                                      self.onVolumeAdded)
        self.sceneObserver.addTrigger("ScalarVolume", "Removed",
                                      self.onVolumeRemoved)
        self.sceneObserver.addTrigger("ScalarVolume", "Modified",
                                      self.requestRender)
        self.sceneObserver.addTrigger("ScalarVolume", "ImageDataModified",
                                      self.requestRender)
        self.sceneObserver.addTrigger("LabelMapVolume", "Modified",
                                      self.requestRender)
        self.sceneObserver.addTrigger("LabelMapVolume", "ImageDataModified",
                                      self.requestRender)
        self.sceneObserver.addTrigger("Camera", "Modified", self.requestRender)
        self.sceneObserver.addTrigger("LinearTransform", "Modified",
                                      self.requestRender)
        self.sceneObserver.addTrigger("VolumeProperty", "Modified",
                                      self.requestRender)
        self.sceneObserver.addTrigger("MarkupsFiducial", "Modified",
                                      self.requestRender)
        self.renderPending = False
Exemple #2
0
  def __init__(self, scene=None):
    """ Do whatever is needed to reset the state - typically a scene clear will be enough.
    """
    self.logic = ShaderComputationLogic()
    try:
      from vtkSlicerShadedActorModuleLogicPython import vtkOpenGLShaderComputation
    except ImportError:
      import vtkAddon
    vtkOpenGLShaderComputation=vtkAddon.vtkOpenGLShaderComputation
    self.shaderComputation=vtkOpenGLShaderComputation()

    self.shaderComputation.SetVertexShaderSource(self.logic.rayCastVertexShaderSource())

    self.resultImage = vtk.vtkImageData()
    self.resultImage.SetDimensions(1024, 1024, 1)
    self.resultImage.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 4)
    self.shaderComputation.SetResultImageData(self.resultImage)

    self.imageViewer = vtk.vtkImageViewer()
    self.imageViewer.SetColorLevel(128)
    self.imageViewer.SetColorWindow(256)

    self.transformPointSource = "" ;# TODO: this is just an example
    self.volumePropertyNode = None

    # map of node IDs to instances of FieldSampler subclasses
    self.fieldSamplersByNodeID = {}

    if scene:
      self.scene = scene
    else:
      self.scene = slicer.mrmlScene
    self.sceneObserver = SceneObserver(self.scene)
    self.sceneObserver.addTrigger("ScalarVolume", "Added", self.onVolumeAdded)
    self.sceneObserver.addTrigger("ScalarVolume", "Removed", self.onVolumeRemoved)
    self.sceneObserver.addTrigger("ScalarVolume", "Modified", self.requestRender)
    self.sceneObserver.addTrigger("ScalarVolume", "ImageDataModified", self.requestRender)
    self.sceneObserver.addTrigger("LabelMapVolume", "Modified", self.requestRender)
    self.sceneObserver.addTrigger("LabelMapVolume", "ImageDataModified", self.requestRender)
    self.sceneObserver.addTrigger("Camera", "Modified", self.requestRender)
    self.sceneObserver.addTrigger("LinearTransform", "Modified", self.requestRender)
    self.sceneObserver.addTrigger("VolumeProperty", "Modified", self.requestRender)
    self.sceneObserver.addTrigger("MarkupsFiducial", "Modified", self.requestRender)
    self.renderPending = False
Exemple #3
0
    def __init__(self, sliceWidget):
        self.initialized = False
        super(IsobrushEffectTool, self).__init__(sliceWidget)
        # create a logic instance to do the non-gui work
        self.logic = IsobrushEffectLogic(self.sliceWidget.sliceLogic())

        # interaction state variables - track if painting or not
        self.actionState = None

        self.mode = 'isograph'  # TODO: could be a node setting controlled by gui

        #
        # cursor actor (paint preview)
        #
        self.cursorMapper = vtk.vtkImageMapper()
        self.cursorDummyImage = vtk.vtkImageData()
        self.cursorDummyImage.AllocateScalars(vtk.VTK_UNSIGNED_INT, 1)
        self.cursorMapper.SetInputData(self.cursorDummyImage)
        self.cursorActor = vtk.vtkActor2D()
        self.cursorActor.VisibilityOff()
        self.cursorActor.SetMapper(self.cursorMapper)
        self.cursorMapper.SetColorWindow(255)
        self.cursorMapper.SetColorLevel(128)

        self.actors.append(self.cursorActor)

        self.renderer.AddActor2D(self.cursorActor)

        #
        # Shader computation
        # - need to import class from module here since it may not be in sys.path
        #   at startup time
        # - uses dummy render window for framebuffer object context
        #
        try:
            from vtkSlicerShadedActorModuleLogicPython import vtkOpenGLShaderComputation
            from vtkSlicerShadedActorModuleLogicPython import vtkOpenGLTextureImage
        except ImportError:
            import vtkAddon
            vtkOpenGLShaderComputation = vtkAddon.vtkOpenGLShaderComputation
            vtkOpenGLTextureImage = vtkAddon.vtkOpenGLTextureImage
        self.shaderComputation = vtkOpenGLShaderComputation()
        self.backgroundTextureImage = vtkOpenGLTextureImage()
        self.labelTextureImage = vtkOpenGLTextureImage()
        self.resultImageTexture = vtkOpenGLTextureImage()
        self.iterationImageTexture = vtkOpenGLTextureImage()
        self.backgroundTextureImage.SetShaderComputation(
            self.shaderComputation)
        self.labelTextureImage.SetShaderComputation(self.shaderComputation)
        self.resultImageTexture.SetShaderComputation(self.shaderComputation)
        self.iterationImageTexture.SetShaderComputation(self.shaderComputation)

        self.shaderComputation.SetVertexShaderSource("""
      #version 120
      attribute vec3 vertexAttribute;
      attribute vec2 textureCoordinateAttribute;
      varying vec3 interpolatedTextureCoordinate;
      void main()
      {
        interpolatedTextureCoordinate = vec3(textureCoordinateAttribute, .5);
        gl_Position = vec4(vertexAttribute, 1.);
      }
    """)

        self.initialized = True

        self.previewOn()
Exemple #4
0
  def __init__(self, sliceWidget):
    self.initialized = False
    super(IsobrushEffectTool,self).__init__(sliceWidget)
    # create a logic instance to do the non-gui work
    self.logic = IsobrushEffectLogic(self.sliceWidget.sliceLogic())

    # interaction state variables - track if painting or not
    self.actionState = None

    #
    # cursor actor (paint preview)
    #
    self.cursorMapper = vtk.vtkImageMapper()
    self.cursorDummyImage = vtk.vtkImageData()
    self.cursorDummyImage.AllocateScalars(vtk.VTK_UNSIGNED_INT, 1)
    self.cursorMapper.SetInputData( self.cursorDummyImage )
    self.cursorActor = vtk.vtkActor2D()
    self.cursorActor.VisibilityOff()
    self.cursorActor.SetMapper( self.cursorMapper )
    self.cursorMapper.SetColorWindow( 255 )
    self.cursorMapper.SetColorLevel( 128 )

    self.actors.append( self.cursorActor )

    self.renderer.AddActor2D( self.cursorActor )

    #
    # Shader computation
    # - need to import class from module here since it may not be in sys.path
    #   at startup time
    # - uses dummy render window for framebuffer object context
    #
    try:
      from vtkSlicerShadedActorModuleLogicPython import vtkOpenGLShaderComputation
      from vtkSlicerShadedActorModuleLogicPython import vtkOpenGLTextureImage
    except ImportError:
      import vtkAddon
      vtkOpenGLShaderComputation=vtkAddon.vtkOpenGLShaderComputation
      vtkOpenGLTextureImage=vtkAddon.vtkOpenGLTextureImage
    self.shaderComputation=vtkOpenGLShaderComputation()
    self.backgroundTextureImage=vtkOpenGLTextureImage()
    self.labelTextureImage=vtkOpenGLTextureImage()
    self.resultImageTexture=vtkOpenGLTextureImage()
    self.iterationImageTexture=vtkOpenGLTextureImage()
    self.backgroundTextureImage.SetShaderComputation(self.shaderComputation)
    self.labelTextureImage.SetShaderComputation(self.shaderComputation)
    self.resultImageTexture.SetShaderComputation(self.shaderComputation)
    self.iterationImageTexture.SetShaderComputation(self.shaderComputation)

    self.shaderComputation.SetVertexShaderSource("""
      #version 120
      attribute vec3 vertexAttribute;
      attribute vec2 textureCoordinateAttribute;
      varying vec3 interpolatedTextureCoordinate;
      void main()
      {
        interpolatedTextureCoordinate = vec3(textureCoordinateAttribute, .5);
        gl_Position = vec4(vertexAttribute, 1.);
      }
    """)

    self.initialized = True

    self.previewOn()