def draw(self, vsk: vsketch.Vsketch) -> None: if self.override_page_size: vsk.size(f"{self.page_width}x{self.page_height}") else: vsk.size(self.page_size, landscape=False) vsk.stroke(1) vsk.fill(1) for i, (y, x) in enumerate( itertools.product(range(self.row_count), range(self.column_count))): pw = self.smallest_width_mm + i * self.width_increment_mm vsk.penWidth(f"{pw}mm", 1) vsk.rect( x * self.horizontal_offset, y * self.vertical_offset, self.box_width, self.box_height, ) vsk.text( f"{pw:.3}mm", x * self.horizontal_offset + self.box_width / 2, y * self.vertical_offset + self.box_height + vpype.convert_length("0.5cm"), mode="label", align="center", size=12, )
def test_rect_mode_success( vsk: vsketch.Vsketch, data: Tuple[float, float, float, float], mode: str, expected: Sequence[float], ) -> None: vsk.rect(*data, mode=mode) # type: ignore assert line_count_equal(vsk, 1) assert line_exists(vsk, np.array(expected, dtype=complex), strict=False)
def draw(self, vsk: vsketch.Vsketch) -> None: vsk.size("a4", landscape=False) vsk.scale("cm") for j in range(self.rows): with vsk.pushMatrix(): for i in range(self.columns): with vsk.pushMatrix(): vsk.rotate(self.fuzziness * 0.03 * vsk.random(-j, j)) vsk.translate( self.fuzziness * 0.01 * vsk.randomGaussian() * j, self.fuzziness * 0.01 * vsk.randomGaussian() * j, ) vsk.rect(0, 0, 1, 1) vsk.translate(1, 0) vsk.translate(0, 1)
def draw(self, vsk: vsketch.Vsketch) -> None: vsk.size("a6", landscape=True, center=False) vsk.scale("cm") address = ADDRESSES[self.addr_id].split("\n") if not self.address_only: vsk.line(8, 0.5, 8, 10) vsk.rect(12.5, 0.5, 1.8, 2.2) self.draw_text( vsk, HEADER.split("\n"), (0.5, 0.8), self.header_line_spacing, self.header_font_size, ) # deal with abbreviated first name name_line = address[0].split(" ") if len(name_line) > 2 and len(name_line[1]) > len(name_line[0]): name = name_line[1] else: name = name_line[0] self.draw_text( vsk, MESSAGE.replace("$FirstName$", name).split("\n"), (0.5, self.message_y_offset), self.message_line_spacing, self.message_font_size, ) self.draw_text( vsk, address, (8.5, self.address_y_offset), self.address_line_spacing, self.address_font_size, )
def test_rect_arg_fail(vsk: vsketch.Vsketch) -> None: # vsk.rect() expects 3 float args + optional `h` float and `mode` arg with pytest.raises(TypeError): # noinspection PyArgumentList vsk.rect(0, 4, mode="corners") # type: ignore with pytest.raises(TypeError): # noinspection PyTypeChecker vsk.rect("hey", 0, 2.5, 4) # type: ignore # vsk.rect() expects `mode` parameter to be one of "corner", "corners", "center", "radius" with pytest.raises(ValueError): vsk.rect(0, 0, 2, 4, mode="jumbo")
def test_rect_round_corners_success( vsk: vsketch.Vsketch, data: Sequence[float], expected: Tuple[float, float, float, float]) -> None: vsk.rect(*data) # type: ignore assert line_count_equal(vsk, 1) assert bounds_equal(vsk, *expected)
def test_rect_default_success(vsk: vsketch.Vsketch) -> None: vsk.rect(0, 0, 2, 4) assert line_count_equal(vsk, 1) assert line_exists(vsk, np.array([0, 2, 2 + 4j, 4j, 0], dtype=complex), strict=False)