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: Determines where the shape centered at (center_x, center_y)
  intersects with a line drawn from (source_x, source_y) to
  (center_x, center_y).
  
  Can be overridden in derived classes. Must always be defined as a static
  method using C{staticmethod(...)}
  
  @param width: the width of the shape
  @param height: the height of the shape. If C{None}, defaults to the width
  @return: the intersection point (the closest to (source_x, source_y) if
      there are more than one) or (center_x, center_y) if there is no
      intersection
docstr_tok: ["Determines","where","the","shape","centered","at","(","center_x",",","center_y",")","intersects","with","a","line","drawn","from","(","source_x",",","source_y",")","to","(","center_x",",","center_y",")",".","Can","be","overridden","in","derived","classes",".","Must","always","be","defined","as","a","static","method","using","C","{","staticmethod","(","...",")","}","@","param","width",":","the","width","of","the","shape","@","param","height",":","the","height","of","the","shape",".","If","C","{","None","}",",","defaults","to","the","width","@","return",":","the","intersection","point","(","the","closest","to","(","source_x",",","source_y",")","if","there","are","more","than","one",")","or","(","center_x",",","center_y",")","if","there","is","no","intersection"]
code: def intersection_point(
      center_x, center_y, source_x, source_y, width, height=None
  ):
      """Determines where the shape centered at (center_x, center_y)
      intersects with a line drawn from (source_x, source_y) to
      (center_x, center_y).
  
      Can be overridden in derived classes. Must always be defined as a static
      method using C{staticmethod(...)}
  
      @param width: the width of the shape
      @param height: the height of the shape. If C{None}, defaults to the width
      @return: the intersection point (the closest to (source_x, source_y) if
          there are more than one) or (center_x, center_y) if there is no
          intersection
      """
      return center_x, center_y
  
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 2 for calling the ShapeDrawer obj's underlying member method code with example usage: obj.intersection_point(center_x, center_y, source_x, source_y, width, height) and returns: center_x,  center_y