class_docstr: Cairo-specific abstract edge drawer object.
class_docstr_tok: ["Cairo-specific","abstract","edge","drawer","object","."]
docstr: Draws a loop edge.
  
  The default implementation draws a small circle.
  
  @param edge: the edge to be drawn. Visual properties of the edge
    are defined by the attributes of this object.
  @param vertex: the vertex to which the edge is attached. Visual
    properties are given again as attributes.
docstr_tok: ["Draws","a","loop","edge",".","The","default","implementation","draws","a","small","circle",".","@","param","edge",":","the","edge","to","be","drawn",".","Visual","properties","of","the","edge","are","defined","by","the","attributes","of","this","object",".","@","param","vertex",":","the","vertex","to","which","the","edge","is","attached",".","Visual","properties","are","given","again","as","attributes","."]
code: def draw_loop_edge(self, edge, vertex):
      """Draws a loop edge.
  
      The default implementation draws a small circle.
  
      @param edge: the edge to be drawn. Visual properties of the edge
        are defined by the attributes of this object.
      @param vertex: the vertex to which the edge is attached. Visual
        properties are given again as attributes.
      """
      ctx = self.context
      ctx.set_source_rgba(*edge.color)
      ctx.set_line_width(edge.width)
      radius = vertex.size * 1.5
      center_x = vertex.position[0] + cos(pi / 4) * radius / 2.0
      center_y = vertex.position[1] - sin(pi / 4) * radius / 2.0
      ctx.arc(center_x, center_y, radius / 2.0, 0, pi * 2)
      ctx.stroke()
  
imports: from math import atan2, cos, pi, sin
  from igraph.drawing.baseclasses import AbstractEdgeDrawer
  from igraph.drawing.colors import clamp
  from igraph.drawing.metamagic import AttributeCollectorBase
  from igraph.drawing.utils import euclidean_distance, get_bezier_control_points_for_curved_edge, intersect_bezier_curve_and_circle
  from .utils import find_cairo
label_desc: Use image node_id 3 for calling the AbstractCairoEdgeDrawer obj's underlying member method code with example usage: obj.draw_loop_edge(edge, vertex) without return types