def draw_force_lines(self): """ Draws the a line between particles, thickness depending on the magnitude of the force """ labels = pyglet.graphics.Batch() for fl in self.force_lines: f = fl[1] e = fl[0] if f[0] == 0 and f[1] == 0: return # If the force is 0, don't draw a line t_mod = 7500 F = math.sqrt((f[0] * f[0]) + (f[1] * f[1])) line = Shapes.make_line(self.pos, e.pos, thickness=F * t_mod) line.draw(pyglet.gl.GL_LINES) # Put label in batch x = (max(e.pos[0], self.pos[0]) + min(e.pos[0], self.pos[0])) / 2.0 y = (max(e.pos[1], self.pos[1]) + min(e.pos[1], self.pos[1])) / 2.0 label_pos = (x, y) force_text = str(f[0]) + " / " + str(f[1]) label = Shapes.make_label(force_text, label_pos, size=10, batch=labels) # Draw batch of labels labels.draw()
def __init__(self, anchor, size, text): super().__init__(anchor) self.text = text self.size = size self.label = Shapes.make_label(self.text, self.anchor, self.size, anchor_x='left', anchor_y='top')
def draw_debug_view(self): # Draw circle indicating range indices, verts, colors = Shapes.make_circle(center=self.pos, radius=self.radius / 2.0) # Overwrite degenerate first point verts[1][0:1] = verts[1][-2:-1] n_points = len(verts[1]) // 2 pyglet.gl.glLineWidth(1) pyglet.graphics.draw(n_points, pyglet.gl.GL_LINE_LOOP, verts, colors) # Draw label showing # neighbours label_pos = (self.pos[0], self.pos[1] + 3 * self.size + 0.015) n_label = Shapes.make_label(str(self._neighbourhood_size), label_pos, size=14) n_label.draw()
def __init__(self, anchor, w, h, color=(100, 100, 100)): super().__init__(anchor) self.w = w self.h = h self.color = color self.shape = Shapes.make_rect(self.anchor, self.w, self.h, color=self.color, as_vertexlist = True)
def draw(self): # Draw selection circle around selected entity if self._cur_selected is not None: r = (self._cur_selected.size * 1.2) + 0.005 indices, verts, colors = Shapes.make_circle( center=self._cur_selected.pos, radius=r) # Overwrite degenerate first point verts = verts[1] verts[0:1] = verts[-2:-1] self._selection_ring.vertices = verts self._selection_ring.colors = colors[1] pyglet.gl.glLineWidth(1) self._selection_ring.draw(pyglet.gl.GL_LINE_LOOP) # Draw UI self._ui.draw()
def __init__(self, sim, keyboard=None): self.sim = sim self.keyboard = keyboard # Setup persistence.create_data_folder() # Controller parameters self.mode = ModeEnum.SELECT self.ticks_per_secs = 50.0 self.creatable_types = get_creatable_types() self.cur_creation_index = 0 self._cur_selected = None self._ui = controller_ui.ControllerUI() # Graphics self._selection_ring = Shapes.make_circle(as_vertexlist=True)
def draw(self, batch=None): indices, verts, colors = Shapes.make_circle( center=self.pos, radius=self.size, color=self.determine_color()) if batch is None: # Just draw the shape immediately n = len(verts[1]) // 2 pyglet.graphics.draw(n, pyglet.gl.GL_POLYGON, verts, colors) else: # Add indexed vertices to batch n = len(verts[1]) // 2 batch.add_indexed(n, pyglet.gl.GL_TRIANGLES, None, indices, verts, colors) if self.debug_view: self.draw_force_lines() if self.draw_trail_points: self.draw_trail()
def draw(self, batch=None): color = self.colors_heatmap() #(40, 10, 120) indices, verts, colors = Shapes.make_circle(n_points=20, center=self.pos, radius=self.size, color=color) if batch is None: # Draw directly n = len(verts[1]) // 2 pyglet.graphics.draw(n, pyglet.gl.GL_POLYGON, verts, colors) else: # Add indexed vertices to batch n = len(verts[1]) // 2 batch.add_indexed(n, pyglet.gl.GL_TRIANGLES, None, indices, verts, colors) # Debug view if self.debug_view: self.draw_debug_view()
def draw(self): verts, colors = Shapes.make_rect(self.anchor, self.w, self.h, color=self.color) self.shape.vertices = verts[1] self.shape.draw(pyglet.gl.GL_POLYGON) super().draw()
def draw_trail(self): """ Draws the trail of the particle as points in previous positions. """ n = self.trail_points.length() verts, colors = Shapes.make_points(self.trail_points._list) pyglet.graphics.draw(n, pyglet.gl.GL_POINTS, verts, colors)