
    hX                    .   % S SK Jr  S SKJrJrJr  S SKJr  S SKJ	r	  SSK
Jr  / SQrSr\\\\   \\   \\   4   rS	\S
'   \\   rS	\S'   SSS jjr S       SS jjrSSS jjrSS jrSS jr " S S5      r\" S S9rS S jrS!S jr " S S5      rg)"    )annotations)SequenceTupleOptional)	TypeAlias)Vec2   )ISO_PATTERN)	loadscale_pattern	scale_allparser
   IMPERIAL_PATTERNHatchPatternLineTypeHatchPatternTypePatternAnalyserg
BP(?r   r   r   Nc                R    Uc  U S:X  a  SO[         n[        nUS:w  a	  [        X!S9nU$ )a  Load hatch pattern definition, default scaling is like the iso.pat of
BricsCAD, set `measurement` to 0 to use the imperial (US) scaled pattern,
which has a scaling factor of 1/25.4 = ~0.03937.

Args:
    measurement: like the $MEASUREMENT header variable, 0 to user imperial
        scaled pattern, 1 to use ISO scaled pattern.
    factor: hatch pattern scaling factor, overrides `measurement`

Returns: hatch pattern dict of scaled pattern

r	   g      ?)factor)IMPERIAL_SCALE_FACTORr
   r   )measurementr   patterns      E/var/www/html/env/lib/python3.13/site-packages/ezdxf/tools/pattern.pyr   r      s3     ~#q(.CG}G3N    c                n   ^^^^ SmSUU4S jjmSUUU4S jjnU  Vs/ s H
  oC" U5      PM     sn$ s  snf )N
   c                N   > U  Vs/ s H  n[        UT-  T5      PM     sn$ s  snf Nround)iterableir   ndigitss     r   _scalescale_pattern.<locals>._scale9   s&    4<=Hqa&j'*H===s   "c                   > U u  pp4T(       a<  [        U5      R                  T5      n[        U5      R                  T5      nUT-   S-  n[        UT5      [        T" U5      5      [        T" U5      5      T" U5      /$ )Ng     v@)r   
rotate_degr   tuple)lineangle0
base_pointoffsetdash_length_itemsr#   angler"   s        r   _scale_line"scale_pattern.<locals>._scale_line<   s    8<5Fj)44U;J&\,,U3Fun-F &'"&$%&.!$%	
 	
r   )returnSequence[float])r0   r    )r   r   r-   r.   r(   r#   r"   s    ``  @@r   r   r   4   s=     G> >
 
 +22'$K'222s   2c           
     n    U R                  5        VVs0 s H  u  p4U[        XAU5      _M     snn$ s  snnf r   )itemsr   )r   r   r-   nameps        r   r   r   N   s.    AHQgdD-511QQQs   1c                l     [        U 5      nUR                  5       $ ! [         a    [        S5      ef = f)Nz Incompatible pattern definition.)PatternFileCompilercompile_pattern	Exception
ValueError)r   comps     r   r   r   R   s;    ="7+##%% =;<<=s    3c                V    U R                  SU R                  S5      (       a  SS9$ SS9$ )N,*r	   )maxsplit)split
startswith)r(   s    r   _tokenize_pattern_linerD   Z   s-    ::c)=)=A:FF2:FFr   c                  2    \ rS rSrSS jrS rSS	S jjrSrg)
r8   ^   c                    S UR                  S5       5        Vs/ s H"  nU(       d  M  US   S:w  d  M  [        U5      PM$     snU l        g s  snf )Nc              3  @   #    U  H  oR                  5       v   M     g 7fr   )strip).0r(   s     r   	<genexpr>/PatternFileCompiler.__init__.<locals>.<genexpr>b   s     F2E$2Es   
r   ;)rB   rD   _lines)selfcontentr(   s      r   __init__PatternFileCompiler.__init___   sR     G'--2EF
F )Q3 )"4(F
 
s   AAAc           	   #    #    / nU R                    Hb  nUS   R                  S5      (       a  U(       a  Uv   US   SS  US   //nM7  UR                  U Vs/ s H  n[        U5      PM     sn5        Md     U(       a  Uv   g g s  snf 7f)Nr   r?   r	   )rO   rC   appendfloat)rP   r   r(   es       r   _parse_pattern"PatternFileCompiler._parse_patternf   s     KKDAw!!#&&!M GABKa12$7$Qa$78   M   8s   AB	B
,B	c           	         [        5       nU R                  5        H  n/ nUSS   H  n[        US   US   5      nU Vs/ s H  n[        Xq5      PM     nn/ nUS   n	UR	                  U	5        UR	                  US   US   45        UR                  U	5      nUR	                  [        UR                  U5      [        UR                  U5      45        UR	                  USS  5        UR	                  U5        M     XBUS   S   '   M     U$ s  snf )Nr	         r         )dictrX   r   r   rU   r&   xy)
rP   r"   r   r6   patr(   r+   rW   pat_liner-   s
             r   r9   #PatternFileCompiler.compile_patterns   s   &$$&AC!"d1gtAw/ 4884aa)48Q& a$q' 23  **51vxx!957;S TU QR)

8$) *  #AaDG/ '0 # 9s   DrO   N)rQ   str)r   )r"   intr0   r_   )__name__
__module____qualname____firstlineno__rR   rX   r9   __static_attributes__r2   r   r   r8   r8   ^   s    
 r   r8   )r   c                4    [        [        U 5      5      (       + $ r   )boollen)r   s    r   is_solidrp      s    CL!!!r   c                *    [        U S-  S-  5      S-  $ )N      r   )r-   s    r   round_angle_15_degrt      s    %#+#$r))r   c                  n    \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSrg)r      c           	     z    U VVVs/ s H  u  n  p4[        U5      [        U5      4PM     snnnU l        g s  snnnf r   )rt   rp   rO   )rP   r   r-   _line_patterns        r   rR   PatternAnalyser.__init__   s>    
 .5/
-4)q!  &(>?-4/
 /
s   $6c                B   ^ [        U4S jU R                   5       5      $ )Nc              3  2   >#    U  H  u  pUT:H  v   M     g 7fr   r2   rJ   angle_rx   r-   s      r   rK   ,PatternAnalyser.has_angle.<locals>.<genexpr>        @Kyv6U?K   anyrO   rP   r-   s    `r   	has_anglePatternAnalyser.has_angle       @DKK@@@r   c                B   ^ [        U4S jU R                   5       5      $ )Nc              3  2   >#    U  H  u  pUT:H  v   M     g 7fr   r2   r}   s      r   rK   -PatternAnalyser.all_angles.<locals>.<genexpr>   r   r   allrO   r   s    `r   
all_anglesPatternAnalyser.all_angles   r   r   c                F   ^^ [        UU4S jU R                   5       5      $ )Nc              3  J   >#    U  H  u  pUT:H  =(       a    UT:H  v   M     g 7fr   r2   rJ   r~   solid_r-   solids      r   rK   +PatternAnalyser.has_line.<locals>.<genexpr>   &      
FQNFFeO/%/k    #r   rP   r-   r   s    ``r   has_linePatternAnalyser.has_line   !     
FJkk
 
 	
r   c                F   ^^ [        UU4S jU R                   5       5      $ )Nc              3  J   >#    U  H  u  pUT:H  =(       a    UT:H  v   M     g 7fr   r2   r   s      r   rK   ,PatternAnalyser.all_lines.<locals>.<genexpr>   r   r   r   r   s    ``r   	all_linesPatternAnalyser.all_lines   r   r   c                :    [        S U R                   5       5      $ )Nc              3  *   #    U  H	  u  pUv   M     g 7fr   r2   rJ   rx   r   s      r   rK   1PatternAnalyser.has_solid_line.<locals>.<genexpr>        5XQ5   r   rP   s    r   has_solid_linePatternAnalyser.has_solid_line       5555r   c                :    [        S U R                   5       5      $ )Nc              3  4   #    U  H  u  pU(       + v   M     g 7fr   r2   r   s      r   rK   2PatternAnalyser.has_dashed_line.<locals>.<genexpr>        9[u99[   r   r   s    r   has_dashed_linePatternAnalyser.has_dashed_line       9T[[999r   c                :    [        S U R                   5       5      $ )Nc              3  *   #    U  H	  u  pUv   M     g 7fr   r2   r   s      r   rK   2PatternAnalyser.all_solid_lines.<locals>.<genexpr>   r   r   r   r   s    r   all_solid_linesPatternAnalyser.all_solid_lines   r   r   c                :    [        S U R                   5       5      $ )Nc              3  4   #    U  H  u  pU(       + v   M     g 7fr   r2   r   s      r   rK   3PatternAnalyser.all_dashed_lines.<locals>.<genexpr>   r   r   r   r   s    r   all_dashed_lines PatternAnalyser.all_dashed_lines   r   r   re   N)r   r   )r-   rg   r0   rn   )r-   rg   r   rn   r0   rn   )r0   rn   )rh   ri   rj   rk   rR   r   r   r   r   r   r   r   r   rl   r2   r   r   r   r      s1    
AA



6:6:r   r   )r	   N)r   rg   r   zOptional[float])r	   r   )r   r   r   rV   r-   rV   r0   r   )r   r_   r   rV   r-   rV   )r   rf   r0   r_   )r(   rf   r0   list)r   r1   r0   rn   )r-   rV   r0   rg   )
__future__r   typingr   r   r   typing_extensionsr   
ezdxf.mathr   _iso_patternr
   __all__r   rV   r   __annotations__r   r   r   r   r   rD   r8   r   rp   rt   r   r2   r   r   <module>r      s    # , , '  %
 # "'	8E?HUOXe_<# i  '';< ) <, BC33',39>334R=G/ /d A& "*#: #:r   