
    OgX                        U d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	 ddl
mZ g dZdZeeee   ee   ee   f   Zd	ed
<   ee   Zd	ed<   dddZ	 d	 	 	 	 	 	 	 ddZdddZddZddZ G d d      Z ed       Zd dZd!dZ G d d      Zy)"    )annotations)SequenceTupleOptional)	TypeAlias)Vec2   )ISO_PATTERN)	loadscale_pattern	scale_allparser
   IMPERIAL_PATTERNHatchPatternLineTypeHatchPatternTypePatternAnalyserg
BP(?r   r   r   Nc                T    || dk(  rdnt         }t        }|dk7  rt        ||      }|S )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      X/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/tools/pattern.pyr   r      s5     ~#q(.CG}GF3N    c                b    ddfddfd}| D cg c]
  } ||       c}S c c}w )N
   c                H    | D cg c]  }t        |z         c}S c c}w Nround)iterableir   ndigitss     r   _scalezscale_pattern.<locals>._scale9   s"    4<=qa&j'*===s   c                    | \  }}}}r<t        |      j                        }t        |      j                        }|z   dz  }t        |      t         |            t         |             |      gS )Ng     v@)r   
rotate_degr   tuple)lineangle0
base_pointoffsetdash_length_itemsr#   angler"   s        r   _scale_linez"scale_pattern.<locals>._scale_line<   s    8<5
F$5j)44U;J&\,,U3Fun-F &'"&$%&.!$%	
 	
r   )returnSequence[float])r.   r    )r   r   r,   r-   r'   r#   r"   s    ``  @@r   r   r   4   s/     G>
 +22$K222s   ,c           
     l    | j                         D ci c]  \  }}|t        |||       c}}S c c}}w r   )itemsr   )r   r   r,   nameps        r   r   r   N   s.    AHQgdAD-6511QQQs   0c                j    	 t        |       }|j                         S # t        $ r t        d      w xY w)Nz Incompatible pattern definition.)PatternFileCompilercompile_pattern	Exception
ValueError)r   comps     r   r   r   R   s;    ="7+##%% =;<<=s    2c                X    | j                  d| j                  d      rd      S d      S )N,*r	   )maxsplit)split
startswith)r'   s    r   _tokenize_pattern_linerB   Z   s*    ::c)=A:FF2:FFr   c                  $    e Zd ZddZd ZdddZy)r6   c                    d |j                  d      D        D cg c]  }|r|d   dk7  rt        |       c}| _        y c c}w )Nc              3  <   K   | ]  }|j                           y wr   )strip).0r'   s     r   	<genexpr>z/PatternFileCompiler.__init__.<locals>.<genexpr>b   s     F$Fs   
r   ;)r@   rB   _lines)selfcontentr'   s      r   __init__zPatternFileCompiler.__init___   sD     G'--2EF
Q3 #4(
 
s   A c           	   #     K   g }| j                   D ]S  }|d   j                  d      r|r| |d   dd  |d   gg},|j                  |D cg c]  }t        |       c}       U |r| y y c c}w w)Nr   r=   r	   )rK   rA   appendfloat)rL   r   r'   es       r   _parse_patternz"PatternFileCompiler._parse_patternf   s     KK 	9DAw!!#&!M GABKa12$7Qa78	9 M   8s   A
A4A/
A4c           	        t               }| j                         D ]  }g }|dd  D ]  }t        |d   |d         }|D cg c]  }t        ||       }}g }|d   }	|j	                  |	       |j	                  |d   |d   f       |j                  |	      }|j	                  t        |j                  |      t        |j                  |      f       |j	                  |dd         |j	                  |        |||d   d   <    |S c c}w )Nr	         r         )dictrS   r   r   rP   r%   xy)
rL   r"   r   r4   patr'   r*   rR   pat_liner,   s
             r   r7   z#PatternFileCompiler.compile_patterns   s   &$$& 	#AC!" %d1gtAw/ 488aa)88Q& a$q' 23  **51vxx!957;S TU QR)

8$)%*  #GAaDG/	#0 # 9s   DN)rM   str)r   )r"   intr.   rY   )__name__
__module____qualname__rN   rS   r7   r0   r   r   r6   r6   ^   s    
r   r6   )r   c                ,    t        t        |              S r   )boollen)r   s    r   is_solidrf      s    CL!!!r   c                *    t        | dz  dz        dz  S )N      r   )r,   s    r   round_angle_15_degrj      s    %#+#$r))r   c                  T    e Zd ZddZddZddZddZddZddZddZ	ddZ
dd	Zy
)r   c           	     v    |D cg c]  \  }}}}t        |      t        |      f c}}}| _        y c c}}}w r   )rj   rf   rK   )rL   r   r,   _line_patterns        r   rN   zPatternAnalyser.__init__   s?    
 .5/
 /
)q!\  &(>?/
 /
s   "4c                @    t        fd| j                  D              S )Nc              3  .   K   | ]  \  }}|k(    y wr   r0   rG   angle_rm   r,   s      r   rH   z,PatternAnalyser.has_angle.<locals>.<genexpr>        @yvq6U?@   anyrK   rL   r,   s    `r   	has_anglezPatternAnalyser.has_angle       @DKK@@@r   c                @    t        fd| j                  D              S )Nc              3  .   K   | ]  \  }}|k(    y wr   r0   rq   s      r   rH   z-PatternAnalyser.all_angles.<locals>.<genexpr>   rs   rt   allrK   rw   s    `r   
all_angleszPatternAnalyser.all_angles   ry   r   c                D    t        fd| j                  D              S )Nc              3  <   K   | ]  \  }}|k(  xr |k(    y wr   r0   rG   rr   solid_r,   solids      r   rH   z+PatternAnalyser.has_line.<locals>.<genexpr>   *      
4BFFFeO/%/
   ru   rL   r,   r   s    ``r   has_linezPatternAnalyser.has_line   !     
FJkk
 
 	
r   c                D    t        fd| j                  D              S )Nc              3  <   K   | ]  \  }}|k(  xr |k(    y wr   r0   r   s      r   rH   z,PatternAnalyser.all_lines.<locals>.<genexpr>   r   r   r|   r   s    ``r   	all_lineszPatternAnalyser.all_lines   r   r   c                :    t        d | j                  D              S )Nc              3  &   K   | ]	  \  }}|  y wr   r0   rG   rm   r   s      r   rH   z1PatternAnalyser.has_solid_line.<locals>.<genexpr>        5XQ55   ru   rL   s    r   has_solid_linezPatternAnalyser.has_solid_line       5555r   c                :    t        d | j                  D              S )Nc              3  (   K   | ]
  \  }}|   y wr   r0   r   s      r   rH   z2PatternAnalyser.has_dashed_line.<locals>.<genexpr>        9Eu99   ru   r   s    r   has_dashed_linezPatternAnalyser.has_dashed_line       9T[[999r   c                :    t        d | j                  D              S )Nc              3  &   K   | ]	  \  }}|  y wr   r0   r   s      r   rH   z2PatternAnalyser.all_solid_lines.<locals>.<genexpr>   r   r   r|   r   s    r   all_solid_lineszPatternAnalyser.all_solid_lines   r   r   c                :    t        d | j                  D              S )Nc              3  (   K   | ]
  \  }}|   y wr   r0   r   s      r   rH   z3PatternAnalyser.all_dashed_lines.<locals>.<genexpr>   r   r   r|   r   s    r   all_dashed_linesz PatternAnalyser.all_dashed_lines   r   r   N)r   r   )r,   r_   r.   rd   )r,   r_   r   rd   r.   rd   )r.   rd   )r`   ra   rb   rN   rx   r~   r   r   r   r   r   r   r0   r   r   r   r      s1    
AA



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