parameters: (link_sub_1, link_sub_2)
return_statement: return start, end
docstring: Measure two edges from two different objects to measure the angle.
  
      This function is a prototype because it does not determine all possible
      starting and ending angles that could be used to draw the dimension line,
      which is a circular arc.
  
      Parameters
      ----------
      link_sub_1: tuple
          A tuple containing one object and a list of subelement strings,
          which may be empty. Only the first subelement is considered, which
          must be an edge.
          ::
              link_sub_1 = (obj1, ['EdgeN', ...])
  
      link_sub_2: tuple
          Same.
docstring_summary: Measure two edges from two different objects to measure the angle.
docstring_tokens: Measure two edges from two different objects to measure the angle .
function: def measure_two_obj_angles(link_sub_1, link_sub_2):
      """Measure two edges from two different objects to measure the angle.
  
      This function is a prototype because it does not determine all possible
      starting and ending angles that could be used to draw the dimension line,
      which is a circular arc.
  
      Parameters
      ----------
      link_sub_1: tuple
          A tuple containing one object and a list of subelement strings,
          which may be empty. Only the first subelement is considered, which
          must be an edge.
          ::
              link_sub_1 = (obj1, ['EdgeN', ...])
  
      link_sub_2: tuple
          Same.
      """
      start = 0
      end = 0
  
      obj1 = link_sub_1[0]
      lsub1 = link_sub_1[1]
  
      obj2 = link_sub_2[0]
      lsub2 = link_sub_2[1]
  
      # The subelement list may be empty so we test it first
      # and pick only the first item
      if lsub1 and lsub2:
          subelement1 = lsub1[0]
          subelement2 = lsub2[0]
  
          if "Edge" in subelement1 and "Edge" in subelement2:
              n1 = int(subelement1[4:]) - 1
              n2 = int(subelement2[4:]) - 1
              start = obj1.Shape.Edges[n1].Curve.Direction
              end = obj2.Shape.Edges[n2].Curve.Direction
  
              # We get the angle from the direction of the line to the U axis
              # of the working plane; we should be able to also use the V axis
              start_r = DraftVecUtils.angle(start, App.DraftWorkingPlane.u)
              end_r = DraftVecUtils.angle(end, App.DraftWorkingPlane.u)
              start = math.degrees(start_r)
              end = math.degrees(end_r)
  
              # We make the angle positive because when tested, some errors
              # were produced in the code that calculates the 'Angle'.
              # This code is actually inside the viewprovider.
              if start < 0:
                  start = abs(start)
              if end < 0:
                  end = abs(end)
  
      return start, end
function_tokens: def measure_two_obj_angles ( link_sub_1 , link_sub_2 ) : start = 0 end = 0 obj1 = link_sub_1 [ 0 ] lsub1 = link_sub_1 [ 1 ] obj2 = link_sub_2 [ 0 ] lsub2 = link_sub_2 [ 1 ] # The subelement list may be empty so we test it first # and pick only the first item if lsub1 and lsub2 : subelement1 = lsub1 [ 0 ] subelement2 = lsub2 [ 0 ] if "Edge" in subelement1 and "Edge" in subelement2 : n1 = int ( subelement1 [ 4 : ] ) - 1 n2 = int ( subelement2 [ 4 : ] ) - 1 start = obj1 . Shape . Edges [ n1 ] . Curve . Direction end = obj2 . Shape . Edges [ n2 ] . Curve . Direction # We get the angle from the direction of the line to the U axis # of the working plane; we should be able to also use the V axis start_r = DraftVecUtils . angle ( start , App . DraftWorkingPlane . u ) end_r = DraftVecUtils . angle ( end , App . DraftWorkingPlane . u ) start = math . degrees ( start_r ) end = math . degrees ( end_r ) # We make the angle positive because when tested, some errors # were produced in the code that calculates the 'Angle'. # This code is actually inside the viewprovider. if start < 0 : start = abs ( start ) if end < 0 : end = abs ( end ) return start , end