Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 5
0
    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)