https://github.com/NikVard/memstim-hh
Tip revision: 6f5b0c54a39579fc0fa992406d0d56cd383361cb authored by Nikolaos Vardalakis on 02 March 2023, 17:09:40 UTC
[DEL] Deleted old license
[DEL] Deleted old license
Tip revision: 6f5b0c5
plot3d.py
"""
--------------------------------------------------------------------------------
Date: 09/12/2021
@author: Nikolaos Vardalakis
--------------------------------------------------------------------------------
Implementation Notes
--------------------------------------------------------------------------------
| 1: For plotting the hippocampal structure in 3D I will be using a library
| developed by Nicolas P. Rougier and can be found here:
| https://github.com/rougier/matplotlib-3d/
| The following functions are wrappers, taken from his example code.
"""
import numpy as np
from mpl3d import glm
from mpl3d.camera import Camera
class Scatter:
def __init__(self, ax, transform,
vertices, sizes=50, facecolors="white", edgecolors="black"):
self.vertices = vertices
self.sizes = sizes
self.facecolors = facecolors
self.edgecolors = edgecolors
self.scatter = ax.scatter([], [])
self.outline = ax.scatter([], [], zorder=-20,
linewidth=2, edgecolor="black", facecolor="black")
self.update(transform)
def update(self, transform):
vertices = glm.transform(self.vertices, transform)
I = np.argsort(-vertices[:,2])
vertices = vertices[I]
facecolors = self.facecolors[I]
edgecolors = self.edgecolors[I]
sizes = self.sizes[I]
self.outline.set_offsets(vertices[:,:2])
self.outline.set_sizes(sizes)
vertices = np.repeat(vertices,2,axis=0)
facecolors = np.repeat(facecolors,2,axis=0)
facecolors[::2] = 0,0,0,.1
edgecolors = np.repeat(edgecolors,2,axis=0)
edgecolors[::2] = 0,0,0,0
sizes = np.repeat(sizes,2,axis=0)
sizes[::2] *= 2
Z = vertices[:,2]
Z = (Z-Z.min())/(Z.max()-Z.min())
Z = Z[::2].reshape(-1,1)
facecolors[1::2,:3] = Z + (1-Z)*facecolors[1::2,:3]
edgecolors[1::2,:3] = Z + (1-Z)*edgecolors[1::2,:3]
self.scatter.set_offsets(vertices[:,:2])
self.scatter.set_sizes(sizes)
self.scatter.set_facecolors(facecolors)
self.scatter.set_edgecolors(edgecolors)
