Source code for oursin.meshes

"""Primitive meshes"""

from . import client
import warnings
from . import utils

from vbl_aquarium.models.urchin import *
from vbl_aquarium.models.generic import *

callback = None

def _neuron_callback(callback_data):
  if callback is not None:
    callback(callback_data)

counter = 0

## Primitive Mesh Renderer
[docs]class Mesh: """Mesh Object in Unity """ def __init__(self, position= [0.0,0.0,0.0], scale= [1,1,1], color=[1,1,1], material = 'default', interactive = False): """Create a mesh object Note: this function should be avoided, use `urchin.meshes.create()` Parameters ---------- position : list, optional position in ap/ml/dv Atlas coordinates, by default [0.0,0.0,0.0] scale : list, optional neuron scale, by default [1,1,1] color : str, optional by default '#FFFFFF' material : str, optional by default 'default' """ global counter self.data = MeshModel( id = str(counter), shape = 'sphere', position = utils.formatted_vector3([x/1000 for x in position]), color = utils.formatted_color(color), scale = utils.formatted_vector3(scale), material = material, interactive = interactive ) counter += 1 self._update() self.in_unity = True def _update(self): """Serialize and update the data in the Urchin Renderer """ client.sio.emit('urchin-meshes-update', self.data.to_string())
[docs] def delete(self): """Deletes meshes Parameters ---------- references object being deleted Examples -------- >>> cube_obj.delete() """ data = IDData data.id = self.data.id client.sio.emit('urchin-meshes-delete', data.to_string()) self.in_unity = False
[docs] def set_position(self, position): """Set the position of a mesh object. Position shoul dbe in AP/ML/DV coordinates in um Parameters ---------- position : list of three floats (ap, ml, dv) in um Examples -------- >>> cube_obj.set_position([2,2,2]) """ if self.in_unity == False: raise Exception("Object does not exist in Unity, call create method first.") position_sanitized = utils.sanitize_vector3([position[0]/1000, position[1]/1000, position[2]/1000]) self.data.position = utils.formatted_vector3(position_sanitized) self._update()
[docs] def set_scale(self, scale): """Set the scale of mesh renderer Parameters ---------- scale : list of three floats new scale of mesh Examples -------- >>> cube_obj.set_scale([3,2,3]) """ if self.in_unity == False: raise Exception("Object does not exist in Unity, call create method first.") scale_sanitized = utils.sanitize_vector3(scale) self.data.scale = utils.formatted_vector3(scale_sanitized) self._update()
[docs] def set_color(self, color): """Set the color of mesh renderer Parameters ---------- mesh_color : string hex color new hex color of mesh Examples -------- >>> cube_obj.set_color("#000000") """ if self.in_unity == False: raise Exception("Object does not exist in Unity, call create method first.") # color_sanitized = utils.sanitize_color(color) self.data.color = utils.formatted_color(color) self._update()
[docs] def set_material(self, material): """Set the material of mesh renderer Parameters ---------- mesh_material : string name of new material Examples -------- >>> cube_obj.set_material('opaque-lit') """ if self.in_unity == False: raise Exception("Object does not exist in Unity, call create method first.") material_sanitized = utils.sanitize_material(material) self.data.material = material_sanitized self._update()
[docs]def clear(): client.sio.emit('Clear', 'mesh')
[docs]def create(num_objects, position= [0.0,0.0,0.0], scale= [1,1,1], color=[1,1,1], material = 'default', interactive = False): """Create multiple meshes Parameters ---------- num_objects : int number of mesh objects to be created position : list, optional default position nullspace (ap, ml, dv), by default [0.0,0.0,0.0] scale : list, optional default scale, by default [1,1,1] color : list, optional default color, by default [1,1,1] material : str, optional default material, by default 'default' interactive : bool, optional default interactive state, by default False Examples -------- >>> meshes = urchin.meshes.create(2) """ mesh_objects = [] for i in range(num_objects): mesh_objects.append(Mesh(position=position, color=color, scale=scale, material=material, interactive=interactive)) return(mesh_objects)
[docs]def delete(meshes_list): """Deletes meshes Parameters ---------- meshes_list : list of mesh objects list of meshes being deleted Examples -------- >>> urchin.meshes.delete(meshes) """ meshes_list = utils.sanitize_list(meshes_list) data = IDList( ids = [x.data.id for x in meshes_list] ) client.sio.emit('urchin-meshes-deletes', data.to_string())
[docs]def set_positions(meshes_list, positions_list): """Set the positions of mesh renderers Parameters ---------- meshes_list : list of mesh objects list of meshes being set positions_list : list of list of three floats vertex positions of each mesh in um Examples -------- >>> urchin.primitives.set_positions(cubes,[[3,3,3],[2,2,2]]) """ meshes_list = utils.sanitize_list(meshes_list) positions_list = utils.sanitize_list(positions_list) data = IDListVector3List( ids = [x.data.id for x in meshes_list], values = [utils.formatted_vector3(utils.sanitize_vector3([x[0]/1000, x[1]/1000, x[2]/1000])) for x in positions_list] ) client.sio.emit('urchin-meshes-positions', data.to_string())
[docs]def set_scales(meshes_list, scales_list): """Set scale of mesh renderers Parameters ---------- meshes_list : list of mesh objects list of meshes being scaled scales_list : list of list of three floats new scales of each mesh Examples -------- >>> urchin.primitives.set_scales(cubes,[[3,3,3],[2,2,2]]) """ meshes_list = utils.sanitize_list(meshes_list) scales_list = utils.sanitize_list(scales_list) data = IDListVector3List( ids = [x.data.id for x in meshes_list], values = [utils.formatted_vector3(utils.sanitize_vector3(x)) for x in scales_list] ) client.sio.emit('urchin-meshes-scales', data.to_string())
[docs]def set_colors(meshes_list, colors_list): """Sets colors of mesh renderers Parameters ---------- meshes_list : list of mesh objects list of meshes undergoing color change colors_list : list of string hex colors new hex colors for each mesh Examples -------- >>> urchin.primitives.set_colors(cubes,["#000000","#000000"]) """ meshes_list = utils.sanitize_list(meshes_list) colors_list = utils.sanitize_list(colors_list) data = IDListColorList( ids = [x.data.id for x in meshes_list], values = [utils.formatted_color(x) for x in colors_list] ) client.sio.emit('urchin-meshes-colors', data.to_string())
[docs]def set_materials(meshes_list, materials_list): """Sets materials of mesh renderers Parameters ---------- meshes_list : list of mesh objects list of meshes undergoing material change materials_list : list of strings name of new materials Examples -------- >>> urchin.primitives.set_material(cubes,['opaque-lit','opaque-lit']) """ meshes_list = utils.sanitize_list(meshes_list) materials_list = utils.sanitize_list(materials_list) data = IDListStringList( ids = [x.data.id for x in meshes_list], values = [utils.sanitize_material(x) for x in materials_list] ) client.sio.emit('urchin-meshes-materials', data.to_string())