Spaces:
Runtime error
Runtime error
# -*- coding: utf-8 -*- | |
# Max-Planck-Gesellschaft zur Förderung der Wissenschaften e.V. (MPG) is | |
# holder of all proprietary rights on this computer program. | |
# You can only use this computer program if you have closed | |
# a license agreement with MPG or you get the right to use the computer | |
# program from someone who is authorized to grant you that right. | |
# Any use of the computer program without a valid license is prohibited and | |
# liable to prosecution. | |
# | |
# Copyright©2020 Max-Planck-Gesellschaft zur Förderung | |
# der Wissenschaften e.V. (MPG). acting on behalf of its Max Planck Institute | |
# for Intelligent Systems. All rights reserved. | |
# | |
# Code from Chumpy and OpenDR. Placed here to avoid chumpy dependency | |
# The original code can be found in https://github.com/MPI-IS/mesh | |
import numpy as np | |
import scipy.sparse as sp | |
def row(A): | |
return A.reshape((1, -1)) | |
def col(A): | |
return A.reshape((-1, 1)) | |
def get_vert_connectivity(mesh_v, mesh_f): | |
"""Returns a sparse matrix (of size #verts x #verts) where each nonzero | |
element indicates a neighborhood relation. For example, if there is a | |
nonzero element in position (15,12), that means vertex 15 is connected | |
by an edge to vertex 12.""" | |
vpv = sp.csc_matrix((len(mesh_v), len(mesh_v))) | |
# for each column in the faces... | |
for i in range(3): | |
IS = mesh_f[:, i] | |
JS = mesh_f[:, (i + 1) % 3] | |
data = np.ones(len(IS)) | |
ij = np.vstack((row(IS.flatten()), row(JS.flatten()))) | |
mtx = sp.csc_matrix((data, ij), shape=vpv.shape) | |
vpv = vpv + mtx + mtx.T | |
return vpv | |
def get_vertices_per_edge(mesh_v, mesh_f): | |
"""Returns an Ex2 array of adjacencies between vertices, where | |
each element in the array is a vertex index. Each edge is included | |
only once. If output of get_faces_per_edge is provided, this is used to | |
avoid call to get_vert_connectivity()""" | |
vc = sp.coo_matrix(get_vert_connectivity(mesh_v, mesh_f)) | |
result = np.hstack((col(vc.row), col(vc.col))) | |
result = result[result[:, 0] < result[:, 1]] # for uniqueness | |
return result | |