brain_areas = get_brain_areas(all_data_path)

#brain_option = st.selectbox('Which circuit to visualize?', brain_areas)
brain_option = get_ix_name(all_data_path, sl_neuron)[0][0]

st.write('You selected:', brain_option)

import brainrender
brainrender.SHADER_STYLE = 'cartoon'
from brainrender.scene import Scene

# Create a scene
scene = Scene()

scene.add_brain_regions([brain_option], alpha=.15)

#scene.render()
vp = Plotter(axes=0)
vp.show(scene.get_actors(), viewup=(10, 0.7, 0))

scene.close()

brain_df = get_ix_name(all_data_path, sl_neuron)[1]

st.write(brain_df)

#vp = Plotter(axes=0)
#vp.show(tutorial_scene.get_actors(), viewup=(10, 0.7, 0))
Пример #2
0
class MainWindow(Scene, Window):
    # ---------------------------------- create ---------------------------------- #
    def __init__(
        self, *args, atlas=None, axes=None, random_colors=False, **kwargs
    ):
        """
            Adds brainrender/vedo functionality to the 
            pyqt5 application created in bgviewer.viewer3d.ui.Window

            Arguments
            ---------
            atlas: name of a brainatlas api atlas (or any atlas class supported by brainrender)
            random_colors: if True brain regions are assigned a random color
            axes: by default it's None, so no axes are shown. If True is passed
                Cartesian coordinates axes are shown
        """
        self.scene = Scene(*args, atlas=atlas, **kwargs)
        Window.__init__(self, *args, **kwargs)

        self.axes = axes

        # Create a new vedo plotter
        self.setup_plotter()
        self.random_colors = random_colors

        # update plotter
        self._update()

        # Add inset
        self.scene._get_inset()

    def setup_plotter(self):
        """
            Changes the scene's default plotter
            with one attached to the qtWidget in the 
            pyqt application. 
        """
        # Get embedded plotter
        new_plotter = Plotter(qtWidget=self.vtkWidget)
        self.scene.plotter = new_plotter

        # Get axes
        if self.axes:
            ax = addons.buildAxes(
                self.scene.root,
                xtitle="x [um]",
                xLabelOffset=0.07,
                xTitleOffset=0.1,
                xTitleJustify="bottom-left",
                ytitle="y [um]",
                yLabelOffset=0.025,
                yTitleOffset=0.1,
                yTitleJustify="bottom-left",
                ztitle="z [um]",
                zLabelOffset=0.025,
                zTitleOffset=0.1,
                zTitleJustify="bottom-left",
            )
            for a in ax.unpack():
                if "xtitle" in a.name or "xNumericLabel" in a.name:
                    a.RotateZ(180)

            self.scene.add_actor(ax)

        # Fix camera
        set_camera(self.scene, self.scene.camera)

    # ---------------------------------- Update ---------------------------------- #
    def show_hide_mesh(self, val):
        """
            When an item on the hierarchy tree is double clicked, the
            corresponding mesh is added/removed from the brainrender scene
        """
        # Get item
        idxs = self.hierarchy.selectedIndexes()
        if idxs:
            item = idxs[0]
        else:
            return
        item = item.model().itemFromIndex(val)

        # Get region name
        region = item.tag

        # Toggle checkbox
        if not item._checked:
            item.setCheckState(Qt.Checked)
            item._checked = True
        else:
            item.setCheckState(Qt.Unchecked)
            item._checked = False

        # Add/remove mesh
        if region == "root" or region == "grey":
            if self.scene.root is None:
                self.scene.add_root()
        else:
            if region not in self.scene.actors["regions"].keys():
                # Add region
                fnt = QFont("Open Sans", 12)
                fnt.setBold(True)
                item.setFont(fnt)

                if not self.random_colors:
                    self.scene.add_brain_regions(region)
                else:
                    self.scene.add_brain_regions(
                        region,
                        use_original_color=False,
                        colors=brainrender.colors.get_random_colors(1),
                    )
            else:
                del self.scene.actors["regions"][region]

            # Update hierarchy's item font
            item.toggle_active()

        # Update brainrender scene
        self._update()

    def _update(self):
        """
            Updates the scene's Plotter to add/remove
            meshes
        """
        self.scene.apply_render_style()

        self.scene.plotter.show(
            *self.scene.get_actors(),
            interactorStyle=0,
            bg=brainrender.BACKGROUND_COLOR,
        )

        # Fake a button press to force update
        self.scene.plotter.interactor.MiddleButtonPressEvent()
        self.scene.plotter.interactor.MiddleButtonReleaseEvent()

    # ----------------------------------- Close ---------------------------------- #
    def keyPressEvent(self, event):
        if (
            event.key() == QtCore.Qt.Key_Escape
            or event.key() == QtCore.Qt.Key_Q
        ):
            self.close()

    def onClose(self):
        """
            Disable the interactor before closing to prevent it from trying to act on a already deleted items
        """
        self.vtkWidget.close()