def test_full_cell_with_links(full_cell_mesh, full_cell_merge_log, tmp_path,
                              monkeypatch):
    class MyChunkedGraph(object):
        def __init__(a, **kwargs):
            pass

        def get_merge_log(self, atomic_id):
            return full_cell_merge_log

    monkeypatch.setattr(trimesh_io.trimesh_repair.chunkedgraph,
                        'ChunkedGraphClient', MyChunkedGraph)

    full_cell_mesh.add_link_edges('test', 5)

    mesh_actor = trimesh_vtk.mesh_actor(full_cell_mesh)
    eval_actor_image([mesh_actor],
                     'full_cell_with_links.png',
                     tmp_path,
                     scale=1)

    mesh_actor = trimesh_vtk.mesh_actor(full_cell_mesh,
                                        opacity=1.0,
                                        show_link_edges=True)

    m1 = np.array(full_cell_merge_log['merge_edge_coords'][0])
    ctr = np.mean(m1, axis=0)
    camera = trimesh_vtk.oriented_camera(ctr,
                                         backoff=5,
                                         up_vector=(0, 0, 1),
                                         backoff_vector=(0, 1, 0))

    eval_actor_image([mesh_actor],
                     'full_cell_show_links.png',
                     tmp_path,
                     camera=camera)
示例#2
0
def test_full_cell_with_links(full_cell_mesh, full_cell_merge_log, tmp_path):

    full_cell_mesh.add_link_edges(merge_log=full_cell_merge_log,
                                  base_resolution=[1, 1, 1])

    mesh_actor = trimesh_vtk.mesh_actor(full_cell_mesh)
    eval_actor_image([mesh_actor],
                     'full_cell_with_links.png',
                     tmp_path,
                     scale=1)

    mesh_actor = trimesh_vtk.mesh_actor(full_cell_mesh,
                                        opacity=1.0,
                                        show_link_edges=True)

    m1 = np.array(full_cell_merge_log['merge_edge_coords'][0])
    ctr = np.mean(m1, axis=0)
    camera = trimesh_vtk.oriented_camera(ctr,
                                         backoff=5,
                                         up_vector=(0, 0, 1),
                                         backoff_vector=(0, 1, 0))

    eval_actor_image([mesh_actor],
                     'full_cell_show_links.png',
                     tmp_path,
                     camera=camera)
def test_vertex_colors(full_cell_mesh, tmp_path):
    d = np.linalg.norm(full_cell_mesh.vertices - full_cell_mesh.centroid,
                       axis=1)
    cmap = np.array(cm.viridis.colors)
    vclrs = trimesh_vtk.values_to_colors(d, cmap, 0, 80000)
    clr_mesh_actor = trimesh_vtk.mesh_actor(full_cell_mesh,
                                            vertex_colors=vclrs,
                                            opacity=1.0)
    eval_actor_image([clr_mesh_actor], 'full_cell_colors.png', tmp_path)

    vclrs = trimesh_vtk.values_to_colors(d, cmap)
    clr_mesh_actor = trimesh_vtk.mesh_actor(full_cell_mesh,
                                            vertex_colors=vclrs,
                                            opacity=1.0)
    eval_actor_image([clr_mesh_actor], 'full_cell_auto_colors.png', tmp_path)
示例#4
0
    def set_vtk_window(self):
        self.curId = get_filename(self)
        filename_local = self.meshdirectoryline.text(
        ) + '/' + self.curId + '/' + 'locmesh_' + self.curFilenumber + '.off'
        filename_spine = self.meshdirectoryline.text(
        ) + '/' + self.curId + '/' + 'spine_' + self.curFilenumber + '.off'
        self.curUniqueId = self.curId + '_' + self.curFilenumber
        if self.curUniqueId in self.LABELS.keys():
            labeltext = "Current Label = %s" % self.LABELS[self.curUniqueId][0]
        else:
            labeltext = "No Current Label"
        currentIndex = "Current Index: " + str(self.curIndex)
        self.filenameline.setText(filename_local + ", " + filename_spine +
                                  ", " + labeltext + ", " + currentIndex)
        print("this is filename")
        print(filename_local + ", " + filename_spine)

        # Create an actor for local mesh
        local_mesh = trimesh.exchange.load.load_mesh(filename_local)
        actor_local = trimesh_vtk.mesh_actor(local_mesh)
        if self.curUniqueId in self.LABELS.keys():
            actor_local.GetProperty().SetColor(0.0, 0.8, 0.0)
        else:
            actor_local.GetProperty().SetColor(1.0, 0.0, 0.0)
        actor_local.GetProperty().SetOpacity(float(self.opacityline.text()))
        print(actor_local.GetProperty().GetColor())

        # Create an actor for spine mesh
        spine_mesh = trimesh.exchange.load.load_mesh(filename_spine)
        actor_spine = trimesh_vtk.mesh_actor(spine_mesh)
        if self.curUniqueId in self.LABELS.keys():
            actor_spine.GetProperty().SetColor(1.0, 0.0, 0.0)
        else:
            actor_spine.GetProperty().SetColor(0.0, 1.0, 0.0)
        actor_spine.GetProperty().SetOpacity(float(self.opacityline.text()))
        print(actor_spine.GetProperty().GetColor())

        #render
        self.ren.RemoveActor(self.curActor1)
        self.ren.RemoveActor(self.curActor2)
        self.curActor1 = actor_local
        self.curActor2 = actor_spine
        self.ren.AddActor(actor_local)
        self.ren.AddActor(actor_spine)
        self.ren.ResetCamera()
        self.ren.SetBackground((.1, .1, .1))
        self.iren.Initialize()
        self.iren.Start()
示例#5
0
def test_filter_two_points(full_cell_mesh, full_cell_soma_pt, tmp_path):

    pt_down = full_cell_soma_pt + np.array([0, 50000, 0])
    is_large = mesh_filters.filter_largest_component(full_cell_mesh)
    full_cell_mesh = full_cell_mesh.apply_mask(is_large)
    on_ais = mesh_filters.filter_two_point_distance(
        full_cell_mesh, [full_cell_soma_pt, pt_down], 2000)

    ais_mesh = full_cell_mesh.apply_mask(on_ais)
    ais_actor = trimesh_vtk.mesh_actor(ais_mesh)

    fname = 'full_cell_ais.png'
    filepath = os.path.join(tmp_path, fname)

    trimesh_vtk.render_actors([ais_actor],
                              back_color=(1, 1, 1),
                              do_save=True,
                              filename=filepath,
                              scale=1)
    compare_img_to_test_file(filepath)

    pts_end = np.array([full_cell_soma_pt, pt_down])
    ais_sloppy = mesh_filters.filter_close_to_line(full_cell_mesh, pts_end,
                                                   4000)
    assert (np.sum(ais_sloppy) == 12961)
def test_full_cell_movie(full_cell_mesh, full_cell_soma_pt, tmp_path):
    mesh_actor = trimesh_vtk.mesh_actor(full_cell_mesh)
    camera = trimesh_vtk.oriented_camera(full_cell_soma_pt, backoff=100)
    eval_actor_360([mesh_actor],
                   'full_cell_movie',
                   tmp_path,
                   camera=camera,
                   scale=1)
def test_ngl_state(full_cell_mesh, tmp_path):
    with open('test/test_files/view_state.json', 'r') as fp:
        ngl_state = json.load(fp)

    camera = trimesh_vtk.camera_from_ngl_state(ngl_state)
    mesh_actor = trimesh_vtk.mesh_actor(full_cell_mesh)
    eval_actor_image([mesh_actor],
                     'full_cell_ngl_view.png',
                     tmp_path,
                     camera=camera)
def test_basic_mesh_actor(cube_verts_faces):
    verts, faces = cube_verts_faces
    mesh = trimesh_io.Mesh(verts, faces, process=False)
    mesh_actor = trimesh_vtk.mesh_actor(mesh)
    mesh_actor.GetMapper().Update()
    pd = mesh_actor.GetMapper().GetInput()
    verts_out, faces_out, tmp = trimesh_vtk.poly_to_mesh_components(pd)

    assert (np.all(verts == verts_out))
    assert (np.all(faces_out == faces))
示例#9
0
def loadmeshes(i):
    spine1_file = r'Meshes/' + str(
        spines_df['cell id'][i]) + '/' + str(i) + '/spine_' + str(
            spines_df['spine 1 index'][i]) + '.off'
    spinemesh1 = trimesh.exchange.load.load_mesh(spine1_file)
    spinemesh1_mp = meshparty.trimesh_io.Mesh(vertices=spinemesh1.vertices,
                                              faces=spinemesh1.faces)
    spinemesh1_actor = trimesh_vtk.mesh_actor(spinemesh1,
                                              color=(0, 0, 1),
                                              opacity=0.2)
    spine2_file = r'Meshes/' + str(
        spines_df['cell id'][i]) + '/' + str(i) + '/spine_' + str(
            spines_df['spine 2 index'][i]) + '.off'
    spinemesh2 = trimesh.exchange.load.load_mesh(spine2_file)
    spinemesh2_mp = meshparty.trimesh_io.Mesh(vertices=spinemesh2.vertices,
                                              faces=spinemesh2.faces)
    spinemesh2_actor = trimesh_vtk.mesh_actor(spinemesh2,
                                              color=(1, 0, 0),
                                              opacity=0.2)
    return spinemesh1_mp, spinemesh2_mp, spinemesh1_actor, spinemesh2_actor
示例#10
0
    def set_vtk_window(self):
        self.curId = self.allids[self.curIndex]
        filename = self.meshdirectoryline.text() + '/' + self.curId + '.h5'
        label_dir = self.labelline.text()
        if len(label_dir) > 0:
            label_file = os.path.join(label_dir, self.curId + ".h5")
            with h5py.File(label_file, "r") as f:
                labels = np.array(f['mask'])
                print(labels.shape)
        else:
            labels = None
        if self.curId in self.LABELS.keys():
            labeltext = "Current Label = %s" % self.LABELS[self.curId]
        else:
            labeltext = "No Current Label"
        self.filenameline.setText(filename + ", " + labeltext)
        print("this is filename")
        print(filename)
        cvpath = 'https://storage.googleapis.com/neuroglancer/basil_v0/basil_full/seg-aug'
        mm = trimesh_io.MeshMeta()
        mesh = mm.mesh(filename=filename)
        print(mesh.vertices.shape)
        print(labels.dtype)
        #mesh_poly = trimesh_vtk.trimesh_to_vtk(mesh.vertices, mesh.faces, mesh.mesh_edges)
        #reader = vtk.vtkDataReader()
        #reader.SetFileName(filename)
        #mapper = vtk.vtkPolyDataMapper()
        #mapper.SetInputConnection(mesh_poly.GetOutputPort())

        # Create an actor
        # actor = vtk.vtkActor()
        actor = trimesh_vtk.mesh_actor(mesh,
                                       vertex_colors=labels.astype(np.float64),
                                       opacity=float(self.opacityline.text()))
        if self.curId in self.LABELS.keys():
            actor.GetProperty().SetColor(0.5, 0.5, 0.0)
        else:
            actor.GetProperty().SetColor(0.0, 0.5, 0.5)
        # actor.GetProperty().SetOpacity(float(self.opacityline.text()))
        # actor.SetMapper(mapper)

        #render
        self.ren.RemoveActor(self.curActor)
        self.curActor = actor
        self.ren.AddActor(actor)
        self.ren.ResetCamera()
        cam1 = self.ren.GetActiveCamera()
        cam1.Zoom(1.4)
        self.ren.SetBackground((1.0, 1.0, 1.0))
        self.iren.Initialize()
        self.iren.Start()
def test_full_cell_camera(full_cell_mesh, full_cell_soma_pt, tmp_path):
    mesh_actor = trimesh_vtk.mesh_actor(full_cell_mesh)
    camera = trimesh_vtk.oriented_camera(full_cell_soma_pt, backoff=100)
    eval_actor_image([mesh_actor],
                     'full_cell_orient_camera.png',
                     tmp_path,
                     camera=camera,
                     scale=1)
    scale_bar_actor = trimesh_vtk.scale_bar_actor(
        full_cell_soma_pt - [15000, 0, 0], camera)
    eval_actor_image([mesh_actor, scale_bar_actor],
                     'full_cell_scale_bar.png',
                     tmp_path,
                     camera=camera,
                     scale=1)
def test_point_cloud(full_cell_mesh, full_cell_synapses, full_cell_soma_pt,
                     tmp_path):

    mesh_actor = trimesh_vtk.mesh_actor(full_cell_mesh)
    camera = trimesh_vtk.oriented_camera(full_cell_soma_pt, backoff=300)
    sizes = full_cell_synapses['sizes']

    # size points by size, fixed color
    syn_actor = trimesh_vtk.point_cloud_actor(full_cell_synapses['positions'],
                                              size=sizes,
                                              color=(1, 0, 0))
    eval_actor_image([mesh_actor, syn_actor],
                     'full_cell_with_synapes_size_scaled.png',
                     tmp_path,
                     camera=camera)

    # color points by size, mapping sizes
    syn_actor = trimesh_vtk.point_cloud_actor(full_cell_synapses['positions'],
                                              size=500,
                                              color=np.clip(sizes, 0, 1000))
    eval_actor_image([mesh_actor, syn_actor],
                     'full_cell_synapes_colored_size.png',
                     tmp_path,
                     camera=camera)

    # color and size points
    syn_actor = trimesh_vtk.point_cloud_actor(full_cell_synapses['positions'],
                                              size=sizes,
                                              color=np.clip(sizes, 0, 1000))
    eval_actor_image([mesh_actor, syn_actor],
                     'full_cell_synapes_colored_and_size.png',
                     tmp_path,
                     camera=camera)

    # random colors
    x = np.linspace(0, 1.0, len(sizes))
    rand_colors = np.hstack([
        x[:, np.newaxis],
        np.abs(x - .5)[:, np.newaxis], (1 - x)[:, np.newaxis]
    ])

    syn_actor = trimesh_vtk.point_cloud_actor(full_cell_synapses['positions'],
                                              size=500,
                                              color=rand_colors)
    eval_actor_image([mesh_actor, syn_actor],
                     'full_cell_synapes_random_colors.png',
                     tmp_path,
                     camera=camera)

    # random colors uint8
    rand_colors_uint8 = np.uint8(rand_colors * 255)
    syn_actor = trimesh_vtk.point_cloud_actor(full_cell_synapses['positions'],
                                              size=500,
                                              color=rand_colors_uint8)
    eval_actor_image([mesh_actor, syn_actor],
                     'full_cell_synapes_random_colors_uint8.png',
                     tmp_path,
                     camera=camera)

    # test failure modes
    with pytest.raises(ValueError) as e:
        syn_actor = trimesh_vtk.point_cloud_actor(
            full_cell_synapses['positions'],
            size=np.random.rand(10, 10),
            color=(1, 0, 0))

    with pytest.raises(ValueError) as e:
        syn_actor = trimesh_vtk.point_cloud_actor(
            full_cell_synapses['positions'],
            size=300,
            color=np.random.rand(len(x), 2))
示例#13
0
# Import dually innervated spines list
spines_file = 'dually-innervated_reindexed.pkl'
spines_df = pd.read_pickle(spines_file)

# Choose which pair of meshes to work with (i corresponds to index in list of pairs)
i = 39344

# Load meshes and create mesh actors for each mesh
spine1_file = r'Meshes/' + str(
    spines_df['cell id'][i]) + '/' + str(i) + '/spine_' + str(
        spines_df['spine 1 index'][i]) + '.off'
spinemesh1 = trimesh.exchange.load.load_mesh(spine1_file)
spinemesh1_mp = meshparty.trimesh_io.Mesh(vertices=spinemesh1.vertices,
                                          faces=spinemesh1.faces)
spinemesh1_actor = trimesh_vtk.mesh_actor(spinemesh1,
                                          color=(0, 0, 1),
                                          opacity=0.2)
spine2_file = r'Meshes/' + str(
    spines_df['cell id'][i]) + '/' + str(i) + '/spine_' + str(
        spines_df['spine 2 index'][i]) + '.off'
spinemesh2 = trimesh.exchange.load.load_mesh(spine2_file)
spinemesh2_mp = meshparty.trimesh_io.Mesh(vertices=spinemesh2.vertices,
                                          faces=spinemesh2.faces)
spinemesh2_actor = trimesh_vtk.mesh_actor(spinemesh2,
                                          color=(1, 0, 0),
                                          opacity=0.2)

# Find synapse location and make a point cloud actor for the synapse of each mesh
synapse1_loc = [
    spines_df['spine 1 synapse'][i][0] * 4,
    spines_df['spine 1 synapse'][i][1] * 4,
示例#14
0
#from PyQt5.QtWidgets import QShortcut ,  QApplication, QWidget, QPushButton, QVBoxLayout, QLabel, QLineEdit, QGridLayout, QMessageBox
#from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
import csv
import json
import os
import pickle
import pandas as pd
import numpy as np
#import moviepy
import trimesh
import meshparty
from meshparty import trimesh_io, trimesh_vtk

# Create a set of 120 png images vizualizing the full rotation of each mesh
# Change mesh filename manually
spinemesh1 = trimesh.exchange.load.load_mesh(r'data\PSS_meshes\27.off')
spinemesh1_actor = trimesh_vtk.mesh_actor(spinemesh1,
                                          color=(0, 1, 0),
                                          opacity=0.6)
locmesh1 = trimesh.exchange.load.load_mesh(r'data\local_meshes\27.off')
locmesh1_actor = trimesh_vtk.mesh_actor(locmesh1, color=(1, 1, 1), opacity=0.1)
renderer1 = trimesh_vtk.render_actors(
    actors=[spinemesh1_actor, locmesh1_actor], do_save=False)

# When vtk window appears with PSS and local mesh actors, manually rotate meshes to desired orientation
cam = renderer1.GetActiveCamera()
trimesh_vtk.render_actors_360(actors=[spinemesh1_actor, locmesh1_actor],
                              camera_start=cam,
                              directory='pss_images\pt27',
                              nframes=120,
                              do_save=True)
示例#15
0
shaft1openings = shaft1.submesh([shaft1broken], append=True)
#shaft1_actor = trimesh_vtk.mesh_actor(shaft1)
#trimesh_vtk.render_actors([shaft1_actor])
#shaft1openings_actor = trimesh_vtk.mesh_actor(shaft1openings)
#trimesh_vtk.render_actors([shaft1openings_actor])
print(shaft1openings.body_count)

#shaft 2
shaft2 = trimesh.exchange.load.load_mesh(
    r'data\meshes\EXPT1\137732862037\spine_1676.off')
shaft2broken = trimesh.repair.broken_faces(shaft2)
shaft2openings = shaft2.submesh([shaft2broken], append=True)
#shaft2_actor = trimesh_vtk.mesh_actor(shaft2,color=(0,0,1),opacity=0.2)
#trimesh_vtk.render_actors([shaft2_actor])
shaft2openings_actor = trimesh_vtk.mesh_actor(shaft2openings,
                                              color=(0, 0, 1),
                                              opacity=0.2)
trimesh_vtk.render_actors([shaft2openings_actor])
print(shaft2openings.body_count)

#spine 1
spine1 = trimesh.exchange.load.load_mesh(
    r'data\meshes\EXPT1\134025041739\spine_599.off')
spine1broken = trimesh.repair.broken_faces(spine1)
spine1openings = spine1.submesh([spine1broken], append=True)
#spine1_actor = trimesh_vtk.mesh_actor(spine1)
#trimesh_vtk.render_actors([spine1_actor])
#spine1openings_actor = trimesh_vtk.mesh_actor(spine1openings)
#trimesh_vtk.render_actors([spine1openings_actor])
print(spine1openings.body_count)