
    'jX                    D   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dS )0    )annotations)SequenceTupleOptional)	TypeAlias)Vec2   )ISO_PATTERN)	loadscale_pattern	scale_allparser
   IMPERIAL_PATTERNHatchPatternLineTypeHatchPatternTypePatternAnalyserg
BP(?r   r   r   NmeasurementintfactorOptional[float]c                d    || dk    rdnt           }t          }|dk    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

    Nr	   g      ?)r   )IMPERIAL_SCALE_FACTORr
   r   )r   r   patterns      M/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/tools/pattern.pyr   r      sB     ~#q((.CG}}GF333N    r   floatanglereturnc                J    ddfdd	fdfd| D             S )
N
   r   Sequence[float]c                "    fd| D             S )Nc                6    g | ]}t          |z            S  round).0ir   ndigitss     r   
<listcomp>z1scale_pattern.<locals>._scale.<locals>.<listcomp>:   s'    ===qa&j'**===r   r$   )iterabler   r)   s    r   _scalezscale_pattern.<locals>._scale9   s     =====H====r   r   c                @   | \  }}}}rLt          |                                        }t          |                                        }|z   dz  }t          |          t           |                    t           |                     |          gS )Ng     v@)r   
rotate_degr&   tuple)lineangle0
base_pointoffsetdash_length_itemsr,   r   r)   s        r   _scale_linez"scale_pattern.<locals>._scale_line<   s    8<5
F$5 	.j))44U;;J&\\,,U33Fun-F &'""&&$$%%&&..!!F$%%	
 	
r   c                &    g | ]} |          S r$   r$   )r'   r0   r5   s     r   r*   z!scale_pattern.<locals>.<listcomp>K   s#    222$KK222r   )r   r!   )r   r   r$   )r   r   r   r,   r5   r)   s    ``@@@r   r   r   4   su     G> > > > > > >
 
 
 
 
 
 
 
 3222'2222r   dictc                H    fd|                                  D             S )Nc                :    i | ]\  }}|t          |          S r$   )r   )r'   namepr   r   s      r   
<dictcomp>zscale_all.<locals>.<dictcomp>O   s+    QQQgdAD-6511QQQr   )items)r   r   r   s    ``r   r   r   N   s)    QQQQQQQQQr   strc                    	 t          |           }|                                S # t          $ r t          d          w xY w)Nz Incompatible pattern definition.)PatternFileCompilercompile_pattern	Exception
ValueError)r   comps     r   r   r   R   sP    ="7++##%%% = = =;<<<=s   "% ?r0   listc                ^    |                      d|                     d          rdnd          S )N,*r	   )maxsplit)split
startswith)r0   s    r   _tokenize_pattern_linerM   Z   s-    ::c)=)=$EAA2:FFFr   c                  &    e Zd ZddZd Zddd
ZdS )r@   contentr>   c                b    d d |                     d          D             D             | _        d S )Nc                H    g | ]}|r|d          dk    t          |           S )r   ;)rM   r'   r0   s     r   r*   z0PatternFileCompiler.__init__.<locals>.<listcomp>`   s?     
 
 

 Q3 #4((&r   c              3  >   K   | ]}|                                 V  d S N)striprS   s     r   	<genexpr>z/PatternFileCompiler.__init__.<locals>.<genexpr>b   s*      FF$FFFFFFr   
)rK   _lines)selfrO   s     r   __init__zPatternFileCompiler.__init___   s@    
 
FF'--2E2EFFF
 
 
r   c              #     K   g }| j         D ]\}|d                             d          r |r|V  |d         dd          |d         gg}=|                    d |D                        ]|r|V  d S d S )Nr   rH   r	   c                ,    g | ]}t          |          S r$   )r   )r'   es     r   r*   z6PatternFileCompiler._parse_pattern.<locals>.<listcomp>n   s    777Qa777r   )rY   rL   append)rZ   r   r0   s      r   _parse_patternz"PatternFileCompiler._parse_patternf   s      K 	9 	9DAw!!#&& 9 "!MMM GABBKa1277$7778888 	MMMMM	 	r   r    r)   r   r   r7   c           	     v   t                      }|                                 D ]}g }|dd          D ]}t          |d         |d                   }fd|D             }g }|d         }|                    |           |                    |d         |d         f           |                    |          }|                    t          |j                  t          |j                  f           |                    |dd                     |                    |           |||d         d         <   |S )Nr	         c                0    g | ]}t          |          S r$   r%   )r'   r^   r)   s     r   r*   z7PatternFileCompiler.compile_pattern.<locals>.<listcomp>|   s#    888aa))888r   r         )r7   r`   r   r_   r.   r&   xy)	rZ   r)   r   r;   patr0   r3   pat_liner   s	    `       r   rA   z#PatternFileCompiler.compile_patterns   sE   &&$$&& 	# 	#AC!"" % %d1gtAw// 98884888Q&&& a$q' 2333  **511vx!9!957;S;S TUUU QRR)))

8$$$$"GAaDGr   N)rO   r>   )r    )r)   r   r   r7   )__name__
__module____qualname__r[   r`   rA   r$   r   r   r@   r@   ^   sP        
 
 
 
        r   r@   )r   r!   boolc                <    t          t          |                      S rU   )rn   len)r   s    r   is_solidrq      s    CLL!!!!r   c                2    t          | dz  dz            dz  S )N      r%   )r   s    r   round_angle_15_degru      s    %#+#$$r))r   c                  V    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dS )r   r   r   c                (    d |D             | _         d S )Nc                T    g | ]%\  }}}}t          |          t          |          f&S r$   )ru   rq   )r'   r   _line_patterns       r   r*   z,PatternAnalyser.__init__.<locals>.<listcomp>   sE     /
 /
 /
)q!\  &&(>(>?/
 /
 /
r   )rY   )rZ   r   s     r   r[   zPatternAnalyser.__init__   s&    /
 /
-4/
 /
 /
r   r   r   r   rn   c                D    t          fd| j        D                       S )Nc              3  *   K   | ]\  }}|k    V  d S rU   r$   r'   angle_ry   r   s      r   rW   z,PatternAnalyser.has_angle.<locals>.<genexpr>   +      @@yvq6U?@@@@@@r   anyrY   rZ   r   s    `r   	has_anglezPatternAnalyser.has_angle   (    @@@@DK@@@@@@r   c                D    t          fd| j        D                       S )Nc              3  *   K   | ]\  }}|k    V  d S rU   r$   r}   s      r   rW   z-PatternAnalyser.all_angles.<locals>.<genexpr>   r   r   allrY   r   s    `r   
all_angleszPatternAnalyser.all_angles   r   r   solidc                H    t          fd| j        D                       S )Nc              3  6   K   | ]\  }}|k    o|k    V  d S rU   r$   r'   r~   solid_r   r   s      r   rW   z+PatternAnalyser.has_line.<locals>.<genexpr>   E       
 
4BFFFeO/%
 
 
 
 
 
r   r   rZ   r   r   s    ``r   has_linezPatternAnalyser.has_line   C     
 
 
 
 
FJk
 
 
 
 
 	
r   c                H    t          fd| j        D                       S )Nc              3  6   K   | ]\  }}|k    o|k    V  d S rU   r$   r   s      r   rW   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   | ]	\  }}|V  
d S rU   r$   r'   ry   r   s      r   rW   z1PatternAnalyser.has_solid_line.<locals>.<genexpr>   &      55XQ5555555r   r   rZ   s    r   has_solid_linezPatternAnalyser.has_solid_line   !    55555555r   c                >    t          d | j        D                       S )Nc              3  "   K   | ]
\  }}| V  d S rU   r$   r   s      r   rW   z2PatternAnalyser.has_dashed_line.<locals>.<genexpr>   (      99Eu9999999r   r   r   s    r   has_dashed_linezPatternAnalyser.has_dashed_line   !    99T[999999r   c                >    t          d | j        D                       S )Nc              3      K   | ]	\  }}|V  
d S rU   r$   r   s      r   rW   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   | ]
\  }}| V  d S rU   r$   r   s      r   rW   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   rn   )r   r   r   rn   r   rn   )r   rn   )rk   rl   rm   r[   r   r   r   r   r   r   r   r   r$   r   r   r   r      s        
 
 
 
A A A AA A A A
 
 
 


 
 
 

6 6 6 6: : : :6 6 6 6: : : : : :r   r   )r	   N)r   r   r   r   )r	   r   )r   r   r   r   r   r   r   r   )r   r7   r   r   r   r   )r   r>   r   r7   )r0   r>   r   rE   )r   r!   r   rn   )r   r   r   r   )
__future__r   typingr   r   r   typing_extensionsr   
ezdxf.mathr   _iso_patternr
   __all__r   r   r   __annotations__r   r   r   r   r   rM   r@   r   rq   ru   r   r$   r   r   <module>r      s   # " " " " " " , , , , , , , , , , ' ' ' ' ' '       % % % % % %
 
 
 # "'	8E?HUOXe_<#      '';<  < < < <    , BC3 3 3 3 34R R R R R= = = =G G G G/ / / / / / / /d 4A&&& " " " "* * * *#: #: #: #: #: #: #: #: #: #:r   