class_docstr: Static class, the ancestor of all vertex shape drawer classes.
  
  Custom shapes must implement at least the C{draw_path} method of the class.
  The method I{must not} stroke or fill, it should just set up the current
  Cairo path appropriately.
class_docstr_tok: ["Static","class",",","the","ancestor","of","all","vertex","shape","drawer","classes",".","Custom","shapes","must","implement","at","least","the","C","{","draw_path","}","method","of","the","class",".","The","method","I","{","must","not","}","stroke","or","fill",",","it","should","just","set","up","the","current","Cairo","path","appropriately","."]
docstr: Draws the path of the shape on the given Cairo context, without
  stroking or filling it.
  
  This method must be overridden in derived classes implementing custom shapes
  and declared as a static method using C{staticmethod(...)}.
  
  @param ctx: the context to draw on
  @param center_x: the X coordinate of the center of the object
  @param center_y: the Y coordinate of the center of the object
  @param width: the width of the object
  @param height: the height of the object. If C{None}, equals to the width.
docstr_tok: ["Draws","the","path","of","the","shape","on","the","given","Cairo","context",",","without","stroking","or","filling","it",".","This","method","must","be","overridden","in","derived","classes","implementing","custom","shapes","and","declared","as","a","static","method","using","C","{","staticmethod","(","...",")","}",".","@","param","ctx",":","the","context","to","draw","on","@","param","center_x",":","the","X","coordinate","of","the","center","of","the","object","@","param","center_y",":","the","Y","coordinate","of","the","center","of","the","object","@","param","width",":","the","width","of","the","object","@","param","height",":","the","height","of","the","object",".","If","C","{","None","}",",","equals","to","the","width","."]
code: def draw_path(ctx, center_x, center_y, width, height=None, **kwargs):
      """Draws the path of the shape on the given Cairo context, without
      stroking or filling it.
  
      This method must be overridden in derived classes implementing custom shapes
      and declared as a static method using C{staticmethod(...)}.
  
      @param ctx: the context to draw on
      @param center_x: the X coordinate of the center of the object
      @param center_y: the Y coordinate of the center of the object
      @param width: the width of the object
      @param height: the height of the object. If C{None}, equals to the width.
      """
      raise NotImplementedError
  
imports: from abc import ABCMeta, abstractmethod
  from math import atan2, copysign, cos, pi, sin
  import sys
  from igraph.drawing.matplotlib.utils import find_matplotlib
label_desc: Use image node_id 1 for calling the ShapeDrawer obj's underlying member method code with example usage: obj.draw_path(ctx, center_x, center_y, width, height) without return types