Example #1
0
    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
Example #2
0
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)