def _make_ribbon_mesh(self, x, y, w, h): signal_power = np.square(self.data) frames_per_pixel = int(self.frames_per_beat / HORIZ_SCALE) scale_factor = frames_per_pixel * 2 pad_size = math.ceil(float(signal_power.size)/scale_factor)*scale_factor - signal_power.size signal_power = np.append(signal_power, np.zeros(pad_size)*np.NaN) print signal_power.shape signal_power = signal_power.reshape(-1, scale_factor) print signal_power.shape signal_power = scipy.nanmean(signal_power, axis=1) print signal_power.shape signal_power /= np.max(signal_power) print 'signal power', len(signal_power) print signal_power[100:200] print np.max(signal_power) segments = self.blah_width mesh = Mesh() # create indices mesh.indices = range(segments * 2 + 2) # create vertices with evenly spaced texture coordinates span = np.linspace(0.0, 1.0, segments + 1) verts = [] mid_y = y + h/2 y_scale = h/2 idx = 0 for s in span: height = y_scale * signal_power[idx] verts += [x + s * w, mid_y - height, s, 0, x + s * w, mid_y + height, s, 1] idx += 1 mesh.vertices = verts # # animate a sine wave by setting the vert positions every frame: # theta = 3.0 * self.time # y = 300 + 50 * np.sin(np.linspace(theta, theta + 2 * np.pi, self.segments + 1)) # self.mesh.vertices[5::8] = y # seems that you have to reassign the entire verts list in order for the change # to take effect. mesh.vertices = mesh.vertices # # assign texture # if tex_file: # mesh.texture = Image(tex_file).texture # standard triangle strip mode mesh.mode = 'triangle_strip' return mesh
def DrawTris(vertices, triangles, DrawCallback): #Arrange data in kivy internal mesh format vertMod = [] for i in range(len(vertices)/2): vertMod.extend((vertices[i*2], vertices[(i*2)+1], 0., 0.)) ind = [] for tri in triangles: ind.extend(tri) mesh = Mesh() mesh.vertices = vertMod mesh.indices = ind mesh.mode = "triangles" DrawCallback(mesh)