| 116 | (1 if self.filled else 2)) |
| 117 | |
| 118 | def set_vertices_and_codes(self, vertices, codes): |
| 119 | offset = 1.0 / self.num_rows |
| 120 | shape_vertices = self.shape_vertices * offset * self.size |
| 121 | shape_codes = self.shape_codes |
| 122 | if not self.filled: |
| 123 | shape_vertices = np.concatenate( # Forward, then backward. |
| 124 | [shape_vertices, shape_vertices[::-1] * 0.9]) |
| 125 | shape_codes = np.concatenate([shape_codes, shape_codes]) |
| 126 | vertices_parts = [] |
| 127 | codes_parts = [] |
| 128 | for row in range(self.num_rows + 1): |
| 129 | if row % 2 == 0: |
| 130 | cols = np.linspace(0, 1, self.num_rows + 1) |
| 131 | else: |
| 132 | cols = np.linspace(offset / 2, 1 - offset / 2, self.num_rows) |
| 133 | row_pos = row * offset |
| 134 | for col_pos in cols: |
| 135 | vertices_parts.append(shape_vertices + [col_pos, row_pos]) |
| 136 | codes_parts.append(shape_codes) |
| 137 | np.concatenate(vertices_parts, out=vertices) |
| 138 | np.concatenate(codes_parts, out=codes) |
| 139 | |
| 140 | |
| 141 | class Circles(Shapes): |