def initialize(self): global renderer, renderWindow, renderWindowInteractor, cone, mapper, actor # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery()) self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) # Create default pipeline (Only once for all the session) if not _WebCone.view: # VTK specific code renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderWindowInteractor.GetInteractorStyle().SetCurrentStyleToTrackballCamera() cone = vtk.vtkConeSource() mapper = vtk.vtkPolyDataMapper() actor = vtk.vtkActor() mapper.SetInputConnection(cone.GetOutputPort()) actor.SetMapper(mapper) renderer.AddActor(actor) renderer.ResetCamera() renderWindow.Render() # VTK Web application specific _WebCone.view = renderWindow self.Application.GetObjectIdMap().SetActiveObject("VIEW", renderWindow)
def initialize(self): print "initialize" global renderer, renderWindow, renderWindowInteractor, cone, mapper, actor # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery()) self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) self.registerVtkWebProtocol(protocols.vtkWebFileBrowser('.', '.')) # Create default pipeline (Only once for all the session) # Update authentication key to use self.updateSecret(_WebCone.authKey) if not _WebCone.view: # # VTK specific code # renderer = vtk.vtkRenderer() # renderWindow = vtk.vtkRenderWindow() # renderWindow.AddRenderer(renderer) # renderWindowInteractor = vtk.vtkRenderWindowInteractor() # renderWindowInteractor.SetRenderWindow(renderWindow) # renderWindowInteractor.GetInteractorStyle().SetCurrentStyleToTrackballCamera() # cone = vtk.vtkConeSource() # mapper = vtk.vtkPolyDataMapper() # actor = vtk.vtkActor() # mapper.SetInputConnection(cone.GetOutputPort()) # actor.SetMapper(mapper) # renderer.AddActor(actor) # renderer.ResetCamera() # renderWindow.Render() # VCS specific code import vcs, cdms2, sys x = vcs.init(bg=1) f = cdms2.open(vcs.sample_data + "/geos5-sample.nc") v = f["uwnd"] dv3d = vcs.get3d_scalar() dv3d.ToggleClipping = (40, 360, -28, 90) dv3d.YSlider = (0.0, vcs.off) dv3d.XSlider = (180.0, vcs.on) dv3d.ZSlider = (0.0, vcs.on) dv3d.ToggleVolumePlot = vcs.on dv3d.ToggleSurfacePlot = vcs.on dv3d.IsosurfaceValue = 31.0 dv3d.ScaleOpacity = [0.0, 1.0] dv3d.BasemapOpacity = 0.5 dv3d.Camera = { 'Position': (-161, -171, 279), 'ViewUp': (.29, 0.67, 0.68), 'FocalPoint': (146.7, 8.5, -28.6) } dv3d.VerticalScaling = 5.0 dv3d.ScaleColormap = [-46.0, 48.0] dv3d.ScaleTransferFunction = [12.0, 77.0] x.plot(v, dv3d) renderWindow = x.backend.renWin # VTK Web application specific _WebCone.view = renderWindow self.getApplication().GetObjectIdMap().SetActiveObject( "VIEW", renderWindow)
def initialize(self): print "initialize" global renderer, renderWindow, renderWindowInteractor, cone, mapper, actor # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery()) self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) self.registerVtkWebProtocol(protocols.vtkWebFileBrowser('.', '.')) # Create default pipeline (Only once for all the session) # Update authentication key to use self.updateSecret(_WebCone.authKey) if not _WebCone.view: # # VTK specific code # renderer = vtk.vtkRenderer() # renderWindow = vtk.vtkRenderWindow() # renderWindow.AddRenderer(renderer) # renderWindowInteractor = vtk.vtkRenderWindowInteractor() # renderWindowInteractor.SetRenderWindow(renderWindow) # renderWindowInteractor.GetInteractorStyle().SetCurrentStyleToTrackballCamera() # cone = vtk.vtkConeSource() # mapper = vtk.vtkPolyDataMapper() # actor = vtk.vtkActor() # mapper.SetInputConnection(cone.GetOutputPort()) # actor.SetMapper(mapper) # renderer.AddActor(actor) # renderer.ResetCamera() # renderWindow.Render() # VCS specific code import vcs, cdms2, sys x = vcs.init(bg=1) f = cdms2.open( vcs.sample_data+"/geos5-sample.nc" ) v = f["uwnd"] dv3d = vcs.get3d_scalar() dv3d.ToggleClipping = ( 40, 360, -28, 90 ) dv3d.YSlider = ( 0.0, vcs.off) dv3d.XSlider = ( 180.0, vcs.on ) dv3d.ZSlider = ( 0.0, vcs.on ) dv3d.ToggleVolumePlot = vcs.on dv3d.ToggleSurfacePlot = vcs.on dv3d.IsosurfaceValue = 31.0 dv3d.ScaleOpacity = [0.0, 1.0] dv3d.BasemapOpacity = 0.5 dv3d.Camera={ 'Position': (-161, -171, 279), 'ViewUp': (.29, 0.67, 0.68), 'FocalPoint': (146.7, 8.5, -28.6) } dv3d.VerticalScaling = 5.0 dv3d.ScaleColormap = [ -46.0, 48.0 ] dv3d.ScaleTransferFunction = [ 12.0, 77.0 ] x.plot( v, dv3d ) renderWindow = x.backend.renWin # VTK Web application specific _WebCone.view = renderWindow self.getApplication().GetObjectIdMap().SetActiveObject("VIEW", renderWindow)
def initialize(self): global renderer, renderWindow, renderWindowInteractor, cone, mapper, actor # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery()) self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) # Update authentication key to use self.updateSecret(_PhylogeneticTree.authKey) # Create default pipeline (Only once for all the session) if not _PhylogeneticTree.view: # read in a tree treeReader = vtk.vtkNewickTreeReader() treeReader.SetFileName(_PhylogeneticTree.treeFilePath) treeReader.Update() reader = treeReader.GetOutput() # read in a table tableReader = vtk.vtkDelimitedTextReader() tableReader.SetFileName(_PhylogeneticTree.csvFilePath) tableReader.SetHaveHeaders(True) tableReader.DetectNumericColumnsOn() tableReader.Update() table = tableReader.GetOutput() # play with the heatmap vis treeHeatmapItem = vtk.vtkTreeHeatmapItem() treeHeatmapItem.SetTree(reader) treeHeatmapItem.SetTable(table) # setup the window view = vtk.vtkContextView() view.GetRenderer().SetBackground(1, 1, 1) view.GetRenderWindow().SetSize(800, 600) iren = view.GetInteractor() iren.SetRenderWindow(view.GetRenderWindow()) transformItem = vtk.vtkContextTransform() transformItem.AddItem(treeHeatmapItem) transformItem.SetInteractive(1) view.GetScene().AddItem(transformItem) view.GetRenderWindow().SetMultiSamples(0) iren.Initialize() view.GetRenderWindow().Render() # VTK Web application specific _PhylogeneticTree.view = view.GetRenderWindow() self.Application.GetObjectIdMap().SetActiveObject( "VIEW", view.GetRenderWindow())
def initialize(self): global renderer, renderWindow, renderWindowInteractor, cone, mapper, actor # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery()) self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) # Update authentication key to use self.updateSecret(_PhylogeneticTree.authKey) # Create default pipeline (Only once for all the session) if not _PhylogeneticTree.view: # read in a tree treeReader = vtk.vtkNewickTreeReader() treeReader.SetFileName(_PhylogeneticTree.treeFilePath) treeReader.Update() reader = treeReader.GetOutput() # read in a table tableReader = vtk.vtkDelimitedTextReader() tableReader.SetFileName(_PhylogeneticTree.csvFilePath) tableReader.SetHaveHeaders(True) tableReader.DetectNumericColumnsOn() tableReader.Update() table = tableReader.GetOutput() # play with the heatmap vis treeHeatmapItem = vtk.vtkTreeHeatmapItem() treeHeatmapItem.SetTree(reader); treeHeatmapItem.SetTable(table); # setup the window view = vtk.vtkContextView() view.GetRenderer().SetBackground(1,1,1) view.GetRenderWindow().SetSize(800,600) iren = view.GetInteractor() iren.SetRenderWindow(view.GetRenderWindow()) transformItem = vtk.vtkContextTransform() transformItem.AddItem(treeHeatmapItem) transformItem.SetInteractive(1) view.GetScene().AddItem(transformItem) view.GetRenderWindow().SetMultiSamples(0) iren.Initialize() view.GetRenderWindow().Render() # VTK Web application specific _PhylogeneticTree.view = view.GetRenderWindow() self.Application.GetObjectIdMap().SetActiveObject("VIEW", view.GetRenderWindow())
def initialize(self): # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol( protocols.vtkWebViewPortImageDelivery()) self.registerVtkWebProtocol( protocols.vtkWebViewPortGeometryDelivery()) # Update authentication key to use self.updateSecret(VTKWebApp.authKey) if "initialize" in self.app.__dict__: self.app.initialize(self, VTKWebApp, self.args)
def initialize(self): global renderer, renderWindow, renderWindowInteractor, cone, mapper, actor # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol( protocols.vtkWebPublishImageDelivery(decode=False)) self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) # Update authentication key to use self.updateSecret(_WebCone.authKey) # tell the C++ web app to use no encoding. # ParaViewWebPublishImageDelivery must be set to decode=False to match. self.getApplication().SetImageEncoding(0) # Create default pipeline (Only once for all the session) if not _WebCone.view: # VTK specific code renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) # renderWindow.SetOffScreenRendering(1) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderWindowInteractor.GetInteractorStyle( ).SetCurrentStyleToTrackballCamera() cone = vtk.vtkConeSource() mapper = vtk.vtkPolyDataMapper() actor = vtk.vtkActor() mapper.SetInputConnection(cone.GetOutputPort()) actor.SetMapper(mapper) renderer.AddActor(actor) renderer.ResetCamera() renderWindow.Render() # VTK Web application specific _WebCone.view = renderWindow self.getApplication().GetObjectIdMap().SetActiveObject( "VIEW", renderWindow)
def initialize(self): global renderer, renderWindow, renderWindowInteractor, cone, mapper, actor # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery()) self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) # Create default pipeline (Only once for all the session) if not _WebCone.view: # VTK specific code renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderWindowInteractor.GetInteractorStyle( ).SetCurrentStyleToTrackballCamera() cone = vtk.vtkConeSource() mapper = vtk.vtkPolyDataMapper() actor = vtk.vtkActor() mapper.SetInputConnection(cone.GetOutputPort()) actor.SetMapper(mapper) renderer.AddActor(actor) renderer.ResetCamera() renderWindow.Render() # VTK Web application specific _WebCone.view = renderWindow self.Application.GetObjectIdMap().SetActiveObject( "VIEW", renderWindow)
def initialize(self): global renderer, renderWindow, renderWindowInteractor, cone, mapper, actor # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol( protocols.vtkWebPublishImageDelivery(decode=False)) self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) # Update authentication key to use self.updateSecret(_WebCone.authKey) # tell the C++ web app to use no encoding. # ParaViewWebPublishImageDelivery must be set to decode=False to match. self.getApplication().SetImageEncoding(0) # Create default pipeline (Only once for all the session) if not _WebCone.view: # VTK specific code renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderWindowInteractor.GetInteractorStyle( ).SetCurrentStyleToTrackballCamera() # cone = vtk.vtkConeSource() # mapper = vtk.vtkPolyDataMapper() # actor = vtk.vtkActor() # mapper.SetInputConnection(cone.GetOutputPort()) # actor.SetMapper(mapper) # renderer.AddActor(actor) # load nrrd reader = vtk.vtkNrrdReader() reader.SetFileName('C:\\Users\\Mat\\Desktop\\tardiva3.0.nrrd') reader.Update() # The volume will be displayed by ray-cast alpha compositing. # A ray-cast mapper is needed to do the ray-casting. # volume_mapper = vtk.vtkFixedPointVolumeRayCastMapper() volume_mapper = vtk.vtkSmartVolumeMapper() volume_mapper.SetInputConnection(reader.GetOutputPort()) volume_mapper.SetSampleDistance(0.5) # The color transfer function maps voxel intensities to colors. # It is modality-specific, and often anatomy-specific as well. # The goal is to one color for flesh (between 500 and 1000) # and another color for bone (1150 and over). volume_color = vtk.vtkColorTransferFunction() volume_color.AddRGBPoint(0, 0.2, 0.2, 0.7) volume_color.AddRGBPoint(500, 240.0 / 255.0, 184.0 / 255.0, 160.0 / 255.0) volume_color.AddRGBPoint(1000, 240.0 / 255.0, 184.0 / 255.0, 160.0 / 255.0) volume_color.AddRGBPoint(1150, 1.0, 1.0, 240.0 / 255.0) # Ivory # The opacity transfer function is used to control the opacity # of different tissue types. volume_scalar_opacity = vtk.vtkPiecewiseFunction() volume_scalar_opacity.AddPoint(0, 0.00) volume_scalar_opacity.AddPoint(500, 0.15) volume_scalar_opacity.AddPoint(1000, 0.15) volume_scalar_opacity.AddPoint(1150, 0.85) # The gradient opacity function is used to decrease the opacity # in the 'flat' regions of the volume while maintaining the opacity # at the boundaries between tissue types. The gradient is measured # as the amount by which the intensity changes over unit distance. # For most medical data, the unit distance is 1mm. volume_gradient_opacity = vtk.vtkPiecewiseFunction() volume_gradient_opacity.AddPoint(0, 0.0) volume_gradient_opacity.AddPoint(90, 0.5) volume_gradient_opacity.AddPoint(100, 1.0) # The VolumeProperty attaches the color and opacity functions to the # volume, and sets other volume properties. The interpolation should # be set to linear to do a high-quality rendering. The ShadeOn option # turns on directional lighting, which will usually enhance the # appearance of the volume and make it look more '3D'. However, # the quality of the shading depends on how accurately the gradient # of the volume can be calculated, and for noisy data the gradient # estimation will be very poor. The impact of the shading can be # decreased by increasing the Ambient coefficient while decreasing # the Diffuse and Specular coefficient. To increase the impact # of shading, decrease the Ambient and increase the Diffuse and Specular. volume_property = vtk.vtkVolumeProperty() volume_property.SetColor(volume_color) volume_property.SetScalarOpacity(volume_scalar_opacity) volume_property.SetGradientOpacity(volume_gradient_opacity) volume_property.SetInterpolationTypeToLinear() volume_property.ShadeOn() volume_property.SetAmbient(0.4) volume_property.SetDiffuse(0.6) volume_property.SetSpecular(0.2) # The vtkVolume is a vtkProp3D (like a vtkActor) and controls the position # and orientation of the volume in world coordinates. volumeActor = vtk.vtkVolume() volumeActor.SetMapper(volume_mapper) volumeActor.SetProperty(volume_property) # Finally, add the volume to the renderer renderer.AddActor(volumeActor) ########################## # renderer.AddActor(actor) # render renderer.ResetCamera() renderWindow.Render() # VTK Web application specific _WebCone.view = renderWindow self.getApplication().GetObjectIdMap().SetActiveObject( "VIEW", renderWindow)
def initialize(self): global renderer, renderWindow, renderWindowInteractor, cone, mapper, actor # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery()) self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) # Update authentication key to use self.updateSecret(_WebCone.authKey) # Create default pipeline (Only once for all the session) if not _WebCone.view: try: # Create the renderer, the render window, and the interactor. The renderer # draws into the render window, the interactor enables mouse- and # keyboard-based interaction with the scene. ren = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) iren.GetInteractorStyle().SetCurrentStyleToTrackballCamera() cred = credentials() mydb = mysql.connector.connect(host="localhost", user=cred[0], password=cred[1], database="iqweb") mycursor = mydb.cursor() sql = "SELECT path FROM image WHERE seriesuid = %s" params = (self.uid, ) mycursor.execute(sql, params) files = mycursor.fetchall() fileset = vtk.vtkStringArray() for file in files: fileset.InsertNextValue(file[0]) sorter = vtk.vtkDICOMFileSorter() sorter.SetInputFileNames(fileset) sorter.Update() sortedFiles = vtk.vtkStringArray() sortedFiles = sorter.GetFileNamesForSeries(0) reader = vtk.vtkDICOMReader() reader.AutoRescaleOff() #only because our preset is shifted reader.SetFileNames(sortedFiles) reader.Update() # The volume will be displayed by ray-cast alpha compositing. # A ray-cast mapper is needed to do the ray-casting, and a # compositing function is needed to do the compositing along the ray. volumeMapper = vtk.vtkGPUVolumeRayCastMapper() volumeMapper.SetInputConnection(reader.GetOutputPort()) volumeMapper.SetBlendModeToComposite() volumeMapper.AutoAdjustSampleDistancesOff() volumeMapper.UseJitteringOn() # The color transfer function maps voxel intensities to colors. # It is modality-specific, and often anatomy-specific as well. # The goal is to one color for flesh (between 500 and 1000) # and another color for bone (1150 and over). volumeColor = vtk.vtkColorTransferFunction() volumeColor.AddRGBPoint(1024, 0.53125, 0.171875, 0.0507813) volumeColor.AddRGBPoint(1031, 0.488281, 0.148438, 0.0351563) volumeColor.AddRGBPoint(1000, 0.589844, 0.0257813, 0.0148438) volumeColor.AddRGBPoint(1170, 0.589844, 0.0257813, 0.0148438) volumeColor.AddRGBPoint(1181, 0.957031, 0.996094, 0.878906) volumeColor.AddRGBPoint(2024, 0.976563, 0.996094, 0.929688) volumeColor.AddRGBPoint(3014, 0.488281, 0.488281, 0.488281) # The opacity transfer function is used to control the opacity # of different tissue types. volumeScalarOpacity = vtk.vtkPiecewiseFunction() #volumeScalarOpacity.AddPoint(0, 0.00) #volumeScalarOpacity.AddPoint(500, 0.15) #volumeScalarOpacity.AddPoint(1000, 0.15) #volumeScalarOpacity.AddPoint(1150, 0.85) volumeScalarOpacity.AddPoint(1131, 0) volumeScalarOpacity.AddPoint(1463, 1) volumeScalarOpacity.AddPoint(3135, 1) # The gradient opacity function is used to decrease the opacity # in the "flat" regions of the volume while maintaining the opacity # at the boundaries between tissue types. The gradient is measured # as the amount by which the intensity changes over unit distance. # For most medical data, the unit distance is 1mm. volumeGradientOpacity = vtk.vtkPiecewiseFunction() volumeGradientOpacity.AddPoint(0, 0.0) volumeGradientOpacity.AddPoint(90, 0.9) volumeGradientOpacity.AddPoint(100, 1.0) # The VolumeProperty attaches the color and opacity functions to the # volume, and sets other volume properties. The interpolation should # be set to linear to do a high-quality rendering. The ShadeOn option # turns on directional lighting, which will usually enhance the # appearance of the volume and make it look more "3D". However, # the quality of the shading depends on how accurately the gradient # of the volume can be calculated, and for noisy data the gradient # estimation will be very poor. The impact of the shading can be # decreased by increasing the Ambient coefficient while decreasing # the Diffuse and Specular coefficient. To increase the impact # of shading, decrease the Ambient and increase the Diffuse and Specular. volumeProperty = vtk.vtkVolumeProperty() volumeProperty.SetColor(volumeColor) volumeProperty.SetScalarOpacity(volumeScalarOpacity) volumeProperty.SetGradientOpacity(volumeGradientOpacity) volumeProperty.SetInterpolationTypeToLinear() volumeProperty.ShadeOn() volumeProperty.SetAmbient(0.4) # 0.1 volumeProperty.SetDiffuse(0.5) # 0.9 volumeProperty.SetSpecular(0.2) # 0.2 volumeProperty.SetSpecularPower(10) # The vtkVolume is a vtkProp3D (like a vtkActor) and controls the position # and orientation of the volume in world coordinates. volume = vtk.vtkVolume() volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) # Finally, add the volume to the renderer ren.AddViewProp(volume) # Set up an initial view of the volume. The focal point will be the # center of the volume, and the camera position will be 400mm to the # patient's left (which is our right). camera = ren.GetActiveCamera() c = volume.GetCenter() camera.SetFocalPoint(c[0], c[1], c[2]) camera.SetPosition(c[0] + 400, c[1], c[2]) camera.SetViewUp(0, 0, -1) # Increase the size of the render window #renWin.SetSize(640, 480) #renWin.SetSize(432, 336) renWin.SetSize(320, 240) # Interact with the data. #iren.Initialize() renWin.Render() # vtkweb self.getApplication().GetObjectIdMap().SetActiveObject( "VIEW", renWin) except: print("Unexpected error:", sys.exc_info()[0])
def initialize(self): print(sys.version) global renderer, renderWindow, renderWindowInteractor #, cone, mapper, actor # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery()) # self.registerVtkWebProtocol(protocols.vtkWebPublishImageDelivery(decode=False)) self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) # Update authentication key to use self.updateSecret(_WebCone.authKey) # tell the C++ web app to use no encoding. vtkWebPublishImageDelivery must be set to decode=False to match. # self.getApplication().SetImageEncoding(0) # Create default pipeline (Only once for all the session) if not _WebCone.view: TEST_HORIZON = False if not TEST_HORIZON: showm = window.ShowManager() showm.initialize() slider_demo = self.build_slider_demo() brain_demo = self.build_brain_demo(showm) bundle_demo = self.build_bundle_demo() surface_demo = self.build_surface_demo(showm) examples = [slider_demo, brain_demo] examples_names = [name for name, act in examples] listbox = ui.ListBox2D(values=examples_names, position=(10, 300), size=(300, 80), multiselection=False) def hide_all_examples(): for _, l_act in examples: for element in l_act: if hasattr(element, 'add_to_scene'): element.set_visibility(False) else: element.SetVisibility(False) def display_element(): hide_all_examples() example = examples[examples_names.index( listbox.selected[0])] for element in example[1]: if hasattr(element, 'add_to_scene'): element.set_visibility(True) else: element.SetVisibility(True) listbox.on_change = display_element listbox.panel.color = (1.0, 1.0, 1.0) listbox.panel.opacity = 0.3 hide_all_examples() showm.scene.add(listbox) for _, l_act in examples: for element in l_act: showm.scene.add(element) # VTK specific code renderer = showm.scene renderWindow = showm.window renderWindowInteractor = showm.iren else: affine = np.diag([2., 1, 1, 1]).astype('f8') data = 255 * np.random.rand(150, 150, 150) images = [(data, affine)] from dipy.segment.tests.test_bundles import f1 streamlines = f1.copy() tractograms = [streamlines] Horizon(tractograms, images=images, cluster=True, cluster_thr=5, random_colors=False, length_lt=np.inf, length_gt=0, clusters_lt=np.inf, clusters_gt=0, world_coords=True) def calc_suare(numbers, showm): print("Calculate square numbers") for n in numbers: time.sleep(1) print("square:", n * n) showm.scene.GetActiveCamera().Azimuth(10) # showm.render() # view = self.getApplication().GetObjectIdMap().GetActiveObject("VIEW") # arr = np.random.rand(100) # t1 = threading.Thread(target=calc_suare, args=(arr, showm)) # t1.start() print("Auth-key {}".format(_WebCone.authKey)) print('Initialization --- OK') print('Starting FURY SERVER') # VTK Web application specific _WebCone.view = renderWindow self.getApplication().GetObjectIdMap().SetActiveObject( "VIEW", renderWindow)
def initialize(self): global renderer, renderWindow, renderWindowInteractor, cone, mapper, actor # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery()) self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) # Update authentication key to use self.updateSecret(_WebCone.authKey) # Create default pipeline (Only once for all the session) if not _WebCone.view: def GetDiagonalFromBounds(bounds): box = vtk.vtkBoundingBox(bounds) box.SetBounds(bounds) distance = box.GetDiagonalLength() return distance def setupCamera( renWin, ren, width, height ): print("setting up camera") renWin.SetSize( width, height ) camera = ren.GetActiveCamera() cameraDistance = 10 sliceHalfThickness = 1 xFocal = ( width - 1 ) / 2.0 yFocal = ( height - 1 ) / 2.0 #camera.SetFocalPoint( xFocal, yFocal, 0.0 ) camera.SetPosition( xFocal, yFocal, cameraDistance ) camera.SetViewUp( 0, 1, 0 ) camera.SetClippingRange( cameraDistance - sliceHalfThickness, cameraDistance + sliceHalfThickness ) #camera.SetParallelScale( ( height - 1 ) / 2.0 ) camera.ParallelProjectionOn() try: # Create the renderer, the render window, and the interactor. The renderer # draws into the render window, the interactor enables mouse- and # keyboard-based interaction with the scene. ren = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) interactorStyle = vtk.vtkInteractorStyleImage() iren.SetInteractorStyle(interactorStyle) cred = credentials() mydb = mysql.connector.connect( host="localhost", user=cred[0], password=cred[1], database="iqweb" ) mycursor = mydb.cursor() sql = "SELECT path FROM image WHERE seriesuid = %s" params = (self.uid,) mycursor.execute(sql, params) files = mycursor.fetchall() fileset = vtk.vtkStringArray() for file in files: fileset.InsertNextValue(file[0]) sorter = vtk.vtkDICOMFileSorter() sorter.SetInputFileNames(fileset) sorter.Update() sortedFiles = vtk.vtkStringArray() sortedFiles = sorter.GetFileNamesForSeries(0) reader = vtk.vtkDICOMReader() reader.SetFileNames(sortedFiles); reader.Update() # Calculate the center of the volume reader.Update() (xMin, xMax, yMin, yMax, zMin, zMax) = reader.GetExecutive().GetWholeExtent(reader.GetOutputInformation(0)) (xSpacing, ySpacing, zSpacing) = reader.GetOutput().GetSpacing() (x0, y0, z0) = reader.GetOutput().GetOrigin() origin = [x0, y0, z0] spacing = [xSpacing, ySpacing, zSpacing] extent = [xMin, xMax, yMin, yMax, zMin, zMax] bounds = [ extent[0]/spacing[0], extent[1]/spacing[0], extent[2]/spacing[1], extent[3]/spacing[1], extent[4]/spacing[2], extent[5]/spacing[2] ] diagonal = GetDiagonalFromBounds(bounds) originOut = [diagonal * spacing[0]/2, -diagonal * spacing[1]/2] center = [x0 + xSpacing * 0.5 * (xMin + xMax), y0 + ySpacing * 0.5 * (yMin + yMax), z0 + zSpacing * 0.5 * (zMin + zMax)] # Matrices for axial, coronal, sagittal, oblique view orientations axial = vtk.vtkMatrix4x4() axial.DeepCopy((1, 0, 0, center[0], 0, 1, 0, center[1], 0, 0, 1, center[2], 0, 0, 0, 1)) coronal = vtk.vtkMatrix4x4() coronal.DeepCopy((1, 0, 0, center[0], 0, 0, 1, center[1], 0,-1, 0, center[2], 0, 0, 0, 1)) sagittal = vtk.vtkMatrix4x4() sagittal.DeepCopy((0, 0,-1, center[0], 1, 0, 0, center[1], 0,-1, 0, center[2], 0, 0, 0, 1)) # Extract a slice in the desired orientation reslice = vtk.vtkImageReslice() reslice.SetInputConnection(reader.GetOutputPort()) reslice.SetOutputDimensionality(2) #reslice.SetOutputOrigin(origin) reslice.SetResliceAxes(axial) if self.orientation == "coronal": reslice.SetResliceAxes(coronal) if self.orientation == "sagittal": reslice.SetResliceAxes(sagittal) reslice.SetInterpolationModeToLinear() meta = reader.GetMetaData(); level = meta.Get(vtk.vtkDICOMTag(0x0028,0x1050)).AsUTF8String().split("\\")[0] window = meta.Get(vtk.vtkDICOMTag(0x0028,0x1051)).AsUTF8String().split("\\")[0] range1 = int(level) - int(window)/2 range2 = int(level) + int(window)/2 # Create a greyscale lookup table table = vtk.vtkLookupTable() table.SetRange(range1, range2) # image intensity range table.SetValueRange(0.0, 1.0) # from black to white table.SetSaturationRange(0.0, 0.0) # no color saturation table.SetRampToLinear() table.Build() # Map the image through the lookup table color = vtk.vtkImageMapToColors() color.SetLookupTable(table) color.SetInputConnection(reslice.GetOutputPort()) # Display the image actor = vtk.vtkImageActor() actor.GetMapper().SetInputConnection(color.GetOutputPort()) ren.AddActor(actor) # Create callbacks for slicing the image actions = {} actions["Slicing"] = 0 def ButtonCallback(obj, event): if event == "LeftButtonPressEvent": actions["Slicing"] = 1 else: actions["Slicing"] = 0 def MouseMoveCallback(obj, event): (lastX, lastY) = iren.GetLastEventPosition() (mouseX, mouseY) = iren.GetEventPosition() if actions["Slicing"] == 1: deltaY = mouseY - lastY reslice.Update() sliceSpacing = reslice.GetOutput().GetSpacing()[2] matrix = reslice.GetResliceAxes() # move the center point that we are slicing through center = matrix.MultiplyPoint((0, 0, sliceSpacing*deltaY, 1)) matrix.SetElement(0, 3, center[0]) matrix.SetElement(1, 3, center[1]) matrix.SetElement(2, 3, center[2]) window.Render() else: interactorStyle.OnMouseMove() interactorStyle.AddObserver("MouseMoveEvent", MouseMoveCallback) interactorStyle.AddObserver("LeftButtonPressEvent", ButtonCallback) interactorStyle.AddObserver("LeftButtonReleaseEvent", ButtonCallback) xc = origin[0] + 0.5*(extent[0] + extent[1])*spacing[0] yc = origin[1] + 0.5*(extent[2] + extent[3])*spacing[1] xd = (extent[1] - extent[0] + 1)*spacing[0] yd = (extent[3] - extent[2] + 1)*spacing[1] ren.ResetCamera() camera = ren.GetActiveCamera() camera.Zoom(1.4) #d = camera.GetDistance() #camera.SetParallelScale(0.5 * yd) #camera.SetFocalPoint(xc, yc, 0.0) #camera.SetPosition(xc, yc, d) #setupCamera(renWin, ren, 320, 240) renWin.Render() # vtkweb self.getApplication().GetObjectIdMap().SetActiveObject("VIEW", renWin) except: print("Unexpected error:", sys.exc_info()[0]) exit()
def initialize(self): # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery()) self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) # Update authentication key to use self.updateSecret(_WebSpheres.authKey) # Create default pipeline (Only once for all the session) if not _WebSpheres.view: # FURY specific code scene = window.Scene() scene.background((1, 1, 1)) n_points = 1000000 translate = 100 colors = 255 * np.random.rand(n_points, 3) centers = translate * np.random.rand(n_points, 3) - translate / 2 radius = np.random.rand(n_points) / 10 polydata = vtk.vtkPolyData() verts = np.array([[0.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0], [1.0, 0.0, 0.0]]) verts -= np.array([0.5, 0.5, 0]) big_verts = np.tile(verts, (centers.shape[0], 1)) big_cents = np.repeat(centers, verts.shape[0], axis=0) big_verts += big_cents # print(big_verts) big_scales = np.repeat(radius, verts.shape[0], axis=0) # print(big_scales) big_verts *= big_scales[:, np.newaxis] # print(big_verts) tris = np.array([[0, 1, 2], [2, 3, 0]], dtype='i8') big_tris = np.tile(tris, (centers.shape[0], 1)) shifts = np.repeat( np.arange(0, centers.shape[0] * verts.shape[0], verts.shape[0]), tris.shape[0]) big_tris += shifts[:, np.newaxis] # print(big_tris) big_cols = np.repeat(colors, verts.shape[0], axis=0) # print(big_cols) big_centers = np.repeat(centers, verts.shape[0], axis=0) # print(big_centers) big_centers *= big_scales[:, np.newaxis] # print(big_centers) set_polydata_vertices(polydata, big_verts) set_polydata_triangles(polydata, big_tris) set_polydata_colors(polydata, big_cols) vtk_centers = numpy_to_vtk(big_centers, deep=True) vtk_centers.SetNumberOfComponents(3) vtk_centers.SetName("center") polydata.GetPointData().AddArray(vtk_centers) canvas_actor = get_actor_from_polydata(polydata) canvas_actor.GetProperty().BackfaceCullingOff() mapper = canvas_actor.GetMapper() mapper.MapDataArrayToVertexAttribute( "center", "center", vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS, -1) vtk_major_version = vtk.vtkVersion.GetVTKMajorVersion() vtk_minor_version = vtk.vtkVersion.GetVTKMinorVersion() if vtk_major_version > 8 or (vtk_major_version == 8 and vtk_minor_version >= 90): mapper = canvas_actor.GetShaderProperty() mapper.AddShaderReplacement( vtk.vtkShader.Vertex, "//VTK::ValuePass::Dec", True, """ //VTK::ValuePass::Dec in vec3 center; out vec3 centeredVertexMC; """, False) mapper.AddShaderReplacement( vtk.vtkShader.Vertex, "//VTK::ValuePass::Impl", True, """ //VTK::ValuePass::Impl centeredVertexMC = vertexMC.xyz - center; float scalingFactor = 1. / abs(centeredVertexMC.x); centeredVertexMC *= scalingFactor; vec3 cameraRight = vec3(MCVCMatrix[0][0], MCVCMatrix[1][0], MCVCMatrix[2][0]); vec3 cameraUp = vec3(MCVCMatrix[0][1], MCVCMatrix[1][1], MCVCMatrix[2][1]); vec2 squareVertices = vec2(.5, -.5); vec3 vertexPosition = center + cameraRight * squareVertices.x * vertexMC.x + cameraUp * squareVertices.y * vertexMC.y; gl_Position = MCDCMatrix * vec4(vertexPosition, 1.); gl_Position /= gl_Position.w; """, False) mapper.AddShaderReplacement( vtk.vtkShader.Fragment, "//VTK::ValuePass::Dec", True, """ //VTK::ValuePass::Dec in vec3 centeredVertexMC; """, False) mapper.AddShaderReplacement( vtk.vtkShader.Fragment, "//VTK::Light::Impl", True, """ // Renaming variables passed from the Vertex Shader vec3 color = vertexColorVSOutput.rgb; vec3 point = centeredVertexMC; float len = length(point); // VTK Fake Spheres float radius = 1.; if(len > radius) discard; vec3 normalizedPoint = normalize(vec3(point.xy, sqrt(1. - len))); vec3 direction = normalize(vec3(1., -1., 1.)); float df = max(0, dot(direction, normalizedPoint)); float sf = pow(df, 24); fragOutput0 = vec4(max(df * color, sf * vec3(1)), 1); """, False) scene.add(canvas_actor) #scene.add(actor.axes()) showm = window.ShowManager(scene) renderWindow = showm.window # VTK Web application specific _WebSpheres.view = renderWindow self.getApplication().GetObjectIdMap().\ SetActiveObject('VIEW', renderWindow)