
     h                     n    d Z ddlmZmZmZ ddlmZmZmZ ddl	m
Z
 ddlmZ ddZddZd	 Zdd
ZddZy)zNThis submodule contains functions related to smoothing paths of Bezier
curves.    )divisionabsolute_importprint_function   )PathCubicBezierLine)isclose)disvgc                 0   t        t        |             D ]  }| |dz
  t        |       z     j                  d      }| |   j                  d      }|j                  |j                  z  |j                  |j                  z  z   }t        |dz
        |kD  s y y)Nr   r   FT)rangelenunit_tangentrealimagabs)pathtolidxuvu_dot_vs         r/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/svgpathtools/smoothing.pyis_differentiabler      s    SY #a%3t9$%2215I""1%&&-!&&-/w{c!     c                    g }t        t        |             D ]  }|dk(  r| j                         s	 | |dz
  t        |       z     j                  d      }| |   j                  d      }|j                  |j                  z  |j
                  |j
                  z  z   }d}|st        dz
        |kD  s|j                  |        |S # t        $ r d}Y 6w xY w)zEreturns indices of segments that start on a non-differentiable joint.r   r   FT)	r   r   isclosedr   r   r   
ValueErrorr   append)r   r   	kink_listr   r   r   r   flags           r   kinksr"      s    ISY "!8DMMO	cAgT*+88;AS	&&q)AffQVVmaffQVVm3GD 3w{#c)S!"   	D	s   A,CCCc                     dt        |      d|}t        | |D cg c]  }| |   j                   c}       t        |      c c}w )N
z kinks have been detected at that cannot be smoothed.
To ignore these kinks and fix all others, run this function again with the second argument 'ignore_unfixable_kinks=True' The locations of the unfixable kinks are at the beginnings of segments: )nodes)r   r   start	Exception)_path
_kink_listmesr   s       r   _report_unfixable_kinksr+   *   sE    
 !_j	:C
 
%J?Sc
((?@
C. @s   A
c                    | j                   |j                  k(  sJ d|k  sJ d|cxk  rdk  sJ  J | j                   }| j                  d      }|j                  d      }|dz  }t        |t        |j	                         | j	                               dz        }t        | t              rt        |t              r	 d|z
  |z  }	t        |||z  z
  |||	dz  z
  |z  z
  |||	dz  z
  |z  z   |||z  z         }
t        | j                  |
j                        }t        |
j                   |j                         }||
g|fS t        | t              rX	 d|z
  |z  }	t        |||z  z
  ||	dz  |z
  |z  z   ||	dz  |z  z
  |      }
t        | j                  |
j                        }||
g|fS t        |t              rU|j                         | j                         ||f}t        | \  }}}|d   j                         }
| |
g|j                         fS | j                  | j	                         |dz  z
        }|j                  |dz        }| j                  d|      }|j                  |d      }t        |j                   |      }t        ||j                        }||||f}t        | \  }}}||||f}t        | \  }}}||||f}t        | \  }}}||gz   |z   |gz   |z   }
||
|fS #  | j                  d      }Y xY w#  |j                  d      }Y xY w)	aR   See Andy's notes on
    Smoothing Bezier Paths for an explanation of the method.
    Input: two segments seg0, seg1 such that seg0.end==seg1.start, and
    jointsize, a positive number

    Output: seg0_trimmed, elbow, seg1_trimmed, where elbow is a cubic bezier
        object that smoothly connects seg0_trimmed and seg1_trimmed.

    r      r   gH.?g-C6?         )endr&   r   minlength
isinstancer	   r   reversedsmoothed_jointilengthcropped)seg0seg1maxjointsize	tightnessqr   wmax_aabelbowseg0_trimmedseg1_trimmedargsrseg1_trimmedrelbowrseg0t0t1	seg0_line	seg1_linedummyelbow0seg0_line_trimmedseg1_line_trimmedelbow1elbowqs                              r   r6   r6   4   s=    88tzz!!!|y1Aq!q! 1EE3t{{}dkkm4r9:A$*T4"8		. ]AA!GQ!ac'1_a1qs7A+oq1Q3wODJJ4EIItxx0eWl22	D$			 ]AA!GQ!A#'1_a!A#a%iCDJJ4eWd**	D$	,	J'5t'<$vuq	""$eWm44666 \\$++-!A#-.\\!A#||Ar*||B*))1-	L../	iyA+94+@(v(<yA+94+@(65!#4lIN7Et7L46#4+,,v59J8KKfTUL00_ ,!!(+A'!!$'As   K K6 K36Lc                    t        |       dk(  r| S | j                         sJ g }| d   g}t        t        |             D ]  }|t        |       dz
  k(  r| j                         s&|d   }n| |dz      }|d   }	 |j	                  d      }	|j	                  d      }
d}|s/t        	
      r#|t        |       dz
  k7  r|j                  |       |dz   t        |       z  }|s0t        	 
      r#|j                  |       |j                  |       ||||f}t        | \  }}}||d<   ||z  }|t        |       dz
  k(  r||d<   |j                  |        |r|st        | |       t        | S # t
        $ r d}Y w xY w)z1returns a path with no non-differentiable joints.r   r   FT)r   iscontinuousr   r   r   r   r
   r   r6   r+   r   )r   r;   r<   ignore_unfixable_kinkssharp_kinksnew_pathr   r:   r9   unit_tangent0unit_tangent1r!   kink_idxrE   new_seg0
elbow_segsnew_seg1s                    r   smoothed_pathr_      s   
4yA~KQyHSY #.#d)A+==?{a=D|	 --a0M --a0MD }=c$ik!%a3t9,HG]NMB%""8,dL)<1?1F.*h'J&#d)a-'"*HQKOOH-G#.L 1k2?7  	D	s   9$E11E?>E?N)g:0yE>)r/   ףp=
?)r/   r`   F)__doc__
__future__r   r   r   r   r   r   r	   	misctoolsr
   	paths2svgr   r   r"   r+   r6   r_    r   r   <module>rf      s<    A @ * )  &`1F2r   