def draw(self, image):
     self._calculate_points()
     canvas = ImageDraw2.Draw(image)
     pen = ImageDraw2.Pen("blue", width=7, opacity=125)
     pen2 = ImageDraw2.Pen("red", width=7, opacity=125)
     brush = ImageDraw2.Brush("blue", 125)
     pos_1 = self.position[Part.POSITION]
     pos_2 = self.position[Part.TORSO]
     canvas.line(pos_1 + pos_2, pen)
     pos_1 = self.position[Part.POSITION]
     pos_2 = self.position[Part.UPPER_LEG_1]
     canvas.line(pos_1 + pos_2, pen2)
     pos_1 = self.position[Part.UPPER_LEG_1]
     pos_2 = self.position[Part.LOWER_LEG_1]
     canvas.line(pos_1 + pos_2, pen2)
     pos_1 = self.position[Part.POSITION]
     pos_2 = self.position[Part.UPPER_LEG_2]
     canvas.line(pos_1 + pos_2, pen)
     pos_1 = self.position[Part.UPPER_LEG_2]
     pos_2 = self.position[Part.LOWER_LEG_2]
     canvas.line(pos_1 + pos_2, pen)
     pos_1 = self.position[Part.TORSO]
     pos_2 = self.position[Part.UPPER_ARM_1]
     canvas.line(pos_1 + pos_2, pen2)
     pos_1 = self.position[Part.UPPER_ARM_1]
     pos_2 = self.position[Part.LOWER_ARM_1]
     canvas.line(pos_1 + pos_2, pen2)
     pos_1 = self.position[Part.TORSO]
     pos_2 = self.position[Part.UPPER_ARM_2]
     canvas.line(pos_1 + pos_2, pen)
     pos_1 = self.position[Part.UPPER_ARM_2]
     pos_2 = self.position[Part.LOWER_ARM_2]
     canvas.line(pos_1 + pos_2, pen)
     for part in Part:
         pos = self.position[part]
         if part == Part.HEAD:
             r = self.radius_head
             brush = ImageDraw2.Brush("blue", 125)
             canvas.ellipse((pos[0] - r, pos[1] - r, pos[0] + r, pos[1] + r), pen, brush)
         else:
             brush = ImageDraw2.Brush("red", 125)
             canvas.ellipse((pos[0] - 3.5, pos[1] - 3.5, pos[0] + 3.5, pos[1] + 3.5), None, brush)
     canvas.flush()
 def _draw_joints(self, image, node: Node):
     canvas = ImageDraw2.Draw(image)
     brush = ImageDraw2.Brush("red", 125)
     pos = node.position
     canvas.ellipse(
         (pos[0] - 3.5, pos[1] - 3.5, pos[0] + 3.5, pos[1] + 3.5), None,
         brush)
     canvas.flush()
     for child in node.children:
         self._draw_joints(image, child)
Beispiel #3
0
def test_ellipse_edge():
    # Arrange
    im = Image.new("RGB", (W, H))
    draw = ImageDraw2.Draw(im)
    brush = ImageDraw2.Brush("white")

    # Act
    draw.ellipse(((0, 0), (W - 1, H - 1)), brush)

    # Assert
    assert_image_similar_tofile(im, "Tests/images/imagedraw_ellipse_edge.png",
                                1)
Beispiel #4
0
def helper_rectangle(bbox):
    # Arrange
    im = Image.new("RGB", (W, H))
    draw = ImageDraw2.Draw(im)
    pen = ImageDraw2.Pen("green", width=2)
    brush = ImageDraw2.Brush("black")

    # Act
    draw.rectangle(bbox, pen, brush)

    # Assert
    assert_image_equal_tofile(im, "Tests/images/imagedraw_rectangle.png")
Beispiel #5
0
def helper_polygon(points):
    # Arrange
    im = Image.new("RGB", (W, H))
    draw = ImageDraw2.Draw(im)
    pen = ImageDraw2.Pen("blue", width=2)
    brush = ImageDraw2.Brush("red")

    # Act
    draw.polygon(points, pen, brush)

    # Assert
    assert_image_equal_tofile(im, "Tests/images/imagedraw_polygon.png")
    def test_ellipse_edge(self):
        # Arrange
        im = Image.new("RGB", (W, H))
        draw = ImageDraw2.Draw(im)
        brush = ImageDraw2.Brush("white")

        # Act
        draw.ellipse(((0, 0), (W-1, H)), brush)

        # Assert
        self.assert_image_similar(
            im, Image.open("Tests/images/imagedraw_ellipse_edge.png"), 1)
Beispiel #7
0
def helper_ellipse(mode, bbox):
    # Arrange
    im = Image.new("RGB", (W, H))
    draw = ImageDraw2.Draw(im)
    pen = ImageDraw2.Pen("blue", width=2)
    brush = ImageDraw2.Brush("green")
    expected = f"Tests/images/imagedraw_ellipse_{mode}.png"

    # Act
    draw.ellipse(bbox, pen, brush)

    # Assert
    assert_image_similar_tofile(im, expected, 1)
    def helper_ellipse(self, mode, bbox):
        # Arrange
        im = Image.new("RGB", (W, H))
        draw = ImageDraw2.Draw(im)
        pen = ImageDraw2.Pen("blue", width=2)
        brush = ImageDraw2.Brush("green")
        expected = "Tests/images/imagedraw_ellipse_{}.png".format(mode)

        # Act
        draw.ellipse(bbox, pen, brush)

        # Assert
        self.assert_image_similar(im, Image.open(expected), 1)
Beispiel #9
0
def test_big_rectangle():
    # Test drawing a rectangle bigger than the image
    # Arrange
    im = Image.new("RGB", (W, H))
    bbox = [(-1, -1), (W + 1, H + 1)]
    brush = ImageDraw2.Brush("orange")
    draw = ImageDraw2.Draw(im)
    expected = "Tests/images/imagedraw_big_rectangle.png"

    # Act
    draw.rectangle(bbox, brush)

    # Assert
    assert_image_similar_tofile(im, expected, 1)
 def _draw_sticks(self, image, node: Node, shadow=False):
     canvas = ImageDraw2.Draw(image)
     if shadow:
         color = "grey"
     else:
         color = "blue" if node.attributes is None else node.attributes.color
     pen = ImageDraw2.Pen(color, width=7, opacity=125)
     brush = ImageDraw2.Brush(color, 125)
     if node.attributes is None or not node.attributes.circle:
         canvas.line(node.parent.position + node.position, pen)
     else:
         pos = ((node.position[0] + node.parent.position[0]) / 2,
                (node.position[1] + node.parent.position[1]) / 2)
         r = math.sqrt((node.position[0] - node.parent.position[0])**2 +
                       (node.position[1] - node.parent.position[1])**2) / 2
         canvas.ellipse((pos[0] - r, pos[1] - r, pos[0] + r, pos[1] + r),
                        pen, brush)
     canvas.flush()
     for child in node.children:
         self._draw_sticks(image, child, shadow)