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
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
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()
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()