def initialize(self): # Bring used components self.registerVtkWebProtocol(vtk_protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(vtk_protocols.vtkWebViewPort()) self.registerVtkWebProtocol( vtk_protocols.vtkWebPublishImageDelivery(decode=False)) # Custom API self.registerVtkWebProtocol(VtkCone()) # tell the C++ web app to use no encoding. # ParaViewWebPublishImageDelivery must be set to decode=False to match. self.getApplication().SetImageEncoding(0) # Update authentication key to use self.updateSecret(_Server.authKey) if not _Server.view: renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderWindowInteractor.GetInteractorStyle( ).SetCurrentStyleToTrackballCamera() renderWindowInteractor.EnableRenderOff() 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.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 initializeProtocols(self): if "geode_default" not in GeodeServerProtocol.modules: GeodeServerProtocol.modules.append("geode_default") # Bring used components self.registerVtkWebProtocol(vtk_protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(vtk_protocols.vtkWebViewPort()) delivery = vtk_protocols.vtkWebPublishImageDelivery(decode=False) delivery.deltaStaleTimeBeforeRender = 0.001 self.registerVtkWebProtocol(delivery) # tell the C++ web app to use no encoding. ParaViewWebPublishImageDelivery must be set to decode=False to match. self.getApplication().SetImageEncoding(0) print(GeodeServerProtocol.modules) for module_name in GeodeServerProtocol.modules: module = import_module(module_name.strip() + "_protocols") for module_protocol in module.protocols: self.registerVtkWebProtocol(module_protocol())
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): # Bring used components self.registerVtkWebProtocol(protocols.vtkWebMouseHandler()) self.registerVtkWebProtocol(protocols.vtkWebViewPort()) # Image delivery # 1. Original method where the client ask for each image individually #self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery()) # 2. Improvement on the initial protocol to allow images to be pushed # from the server without any client request (i.e.: animation, LOD, …) self.registerVtkWebProtocol( protocols.vtkWebPublishImageDelivery(decode=False)) # Protocol for sending geometry for the vtk.js synchronized render # window # For local rendering using vtk.js #self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery()) #self.registerVtkWebProtocol(protocols.vtkWebLocalRendering()) # Custom API self.registerVtkWebProtocol(FuryProtocol()) # Tell the C++ web app to use no encoding. # ParaViewWebPublishImageDelivery must be set to decode=False to match. # RAW instead of base64 self.getApplication().SetImageEncoding(0) # 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 = 10000 translate = 100 centers = translate * np.random.rand(n_points, 3) - translate / 2 colors = 255 * np.random.rand(n_points, 3) radius = np.random.rand(n_points) fake_sphere = \ """ float len = length(point); 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_1 = max(0, dot(direction, normalizedPoint)); float sf_1 = pow(df_1, 24); fragOutput0 = vec4(max(df_1 * color, sf_1 * vec3(1)), 1); """ spheres_actor = actor.billboard(centers, colors=colors, scales=radius, fs_impl=fake_sphere) scene.add(spheres_actor) scene.add(actor.axes()) showm = window.ShowManager(scene) # For debugging purposes #showm.render() ren_win = showm.window ren_win_interactor = vtk.vtkRenderWindowInteractor() ren_win_interactor.SetRenderWindow(ren_win) ren_win_interactor.GetInteractorStyle().\ SetCurrentStyleToTrackballCamera() ren_win_interactor.EnableRenderOff() # VTK Web application specific _WebSpheres.view = ren_win self.getApplication().GetObjectIdMap().SetActiveObject( 'VIEW', ren_win)