
    'j                    X   d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
Z
d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZmZmZmZmZmZm Z m!Z!m"Z" d d
l#m$Z$ d dl%Z%er"d dl&m'Z' d dl(m)Z) d dl*m+Z+ d dl#m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1  e%j2        d          Z3dZ4 G d de5          Z6	 dLdMdZ7	 	 dLdNd"Z8dOd%Z9dOd&Z:dOd'Z;dOd(Z<dOd)Z=dOd*Z>dOd+Z?dOd,Z@e:d-fe;d-fe<d-fe=d-fe>d-fe?d.fd/ZAdPd7ZBdQd;ZC G d< d=e          ZD G d> d?          ZE G d@ dAeE          ZFdRdFZGdSdHZHdTdKZIdS )U    )annotations)TYPE_CHECKINGOptionalIterableIteratorcastSequenceAnyN)IntEnum)repeat)const)bytes_to_hexstr
ByteStream	BitStream)colors)	Vec3Vec2Matrix44Z_AXISConstructionCircleConstructionArcOCSUCSX_AXIS)factory)Drawing)Tags)AbstractTagWriter)
DXFGraphicPolymeshPolyfacePolylineHatch
LWPolylineezdxf   c                      e Zd ZdS )ProxyGraphicErrorN)__name__
__module____qualname__     L/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/proxygraphic.pyr(   r(   5   s        Dr-   r(      6  tagsr   length_codeint	data_codereturnOptional[bytes]c                    fd|                      |f          D             }t          |          rd                    |          nd S )Nc                4    g | ]}|j         k    |j        S r,   )codevalue).0tagr4   s     r.   
<listcomp>z&load_proxy_graphic.<locals>.<listcomp><   s2       8y   		   r-   )codesr-   )pop_tagslenjoin)r1   r2   r4   binary_datas     ` r.   load_proxy_graphicrC   9   sd       ==Y'?=@@  K
 %($4$4>388K   $>r-   databytes	tagwriterr   Nonec                ,   |j         t          j        k    sJ t          |           }|dk    rd S |                    ||           d}||k     rGt          | ||t          z                      }|                    ||           |t          z  }||k     Ed S d S )Nr   )
dxfversionr   DXF12r@   
write_tag2r   
CHUNK_SIZE)rD   rF   r2   r4   lengthindexhex_strs          r.   export_proxy_graphicrP   D   s     %+----YYF{{f---E
&..!$uuz/A'A"BCCY000 &......r-   flagsboolc                &    t          | dz            S )Ni  rR   rQ   s    r.   has_prim_traitsrV   Y       r-   c                &    t          | dz            S )N   rT   rU   s    r.   prims_have_colorsrZ   ]   rW   r-   c                &    t          | dz            S )N   rT   rU   s    r.   prims_have_layersr]   a   rW   r-   c                &    t          | dz            S )N   rT   rU   s    r.   prims_have_linetypesr`   e   rW   r-   c                &    t          | dz            S )N    rT   rU   s    r.   prims_have_markersrc   i   rW   r-   c                &    t          | dz            S )N@   rT   rU   s    r.   prims_have_visibilitiesrf   m   rW   r-   c                &    t          | dz            S )N   rT   rU   s    r.   prims_have_normalsri   q   rW   r-   c                &    t          | dz            S )N   rT   rU   s    r.   prims_have_orientationrl   u   rW   r-   RL3RD)r   layers	linetypesmarkersvisibilitiesnormalsbsr   typesSequence[str]
prim_flagscountdictc                      fd} fd}t                      }|D ]T}t          |         \  }}	 ||          r7|	dk    r |            ||<   1|	dk    r |            ||<   Et          |	          U|S )Nc                 :     fdt                    D             S )Nc                8    g | ]}                                 S r,   	read_longr;   _rt   s     r.   r=   z=read_prim_traits.<locals>.read_float_list.<locals>.<listcomp>   s!    5551555r-   rangert   rx   s   r.   read_float_listz)read_prim_traits.<locals>.read_float_list   s#    5555e5555r-   c                 :     fdt                    D             S )Nc                R    g | ]#}t                                                    $S r,   r   read_vertexr   s     r.   r=   z;read_prim_traits.<locals>.read_vertices.<locals>.<listcomp>   s+    ===1R^^%%&&===r-   r   r   s   r.   read_verticesz'read_prim_traits.<locals>.read_vertices   s#    ====e====r-   rn   rm   )ry   TRAIT_TESTER	TypeError)
rt   ru   rw   rx   r   r   rD   t
test_trait	data_types
   `  `      r.   read_prim_traitsr      s    6 6 6 6 6 6> > > > > > 66D + + ,Q
I:j!! 	+E!!'-//Qd"")/++Q	***	+ Kr-   
edge_count
face_countvertex_countc                D    t                      }                                 }t          |          rt           g d||          |d<                                    }t          |          rt           g d||          |d<   |dk    r                                 }t          |          rst                      }t	          |          r fdt          |          D             |d<   t          |          r$t                                                     |d<   ||d	<   |S )
N)r   ro   rp   rq   rr   edges)r   ro   rq   rs   rr   facesr   c                R    g | ]#}t                                                    $S r,   r   r   s     r.   r=   z$read_mesh_traits.<locals>.<listcomp>   s8     ' ' '/0D))**' ' 'r-   rs   orientationvertices)ry   r~   rV   r   ri   r   rl   rR   )	rt   r   r   r   traits
edge_flags
face_flagsvertex_flagsr   s	   `        r.   read_mesh_traitsr      sG   * VVFJz"" 
*HHH	
 
w Jz"" 
*FFF	
 
w a||~~<(( 	*vvH!,// ' ' ' '49,4G4G' ' '# &l33 ?*.r||~~*>*>'!)F:Mr-   c                      e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(S ))ProxyGraphicTypesrY   r\      r_               	   
                                                                  rb   !   "   #   $   %   &   ,   N)*r)   r*   r+   EXTENTSCIRCLE	CIRCLE_3PCIRCULAR_ARCCIRCULAR_ARC_3PPOLYLINEPOLYGONMESHSHELLTEXTTEXT2XLINERAYATTRIBUTE_COLOR	UNUSED_15ATTRIBUTE_LAYER	UNUSED_17ATTRIBUTE_LINETYPEATTRIBUTE_MARKERATTRIBUTE_FILL	UNUSED_21ATTRIBUTE_TRUE_COLORATTRIBUTE_LINEWEIGHTATTRIBUTE_LTSCALEATTRIBUTE_THICKNESSATTRIBUTE_PLOT_STYLE_NAME	PUSH_CLIPPOP_CLIPPUSH_MATRIXPUSH_MATRIX2
POP_MATRIXPOLYLINE_WITH_NORMALS
LWPOLYLINEATTRIBUTE_MATERIALATTRIBUTE_MAPPERUNICODE_TEXT
UNKNOWN_37UNICODE_TEXT2ELLIPTIC_ARCr,   r-   r.   r   r      s        GFILOHGDEDEE
COIOINI "IHKLJJLJMLLLr-   r   c                     e Zd Z	 d@ej        ddAdZdBd
ZdCdZdCdZdDdZ	dEdZ
dEdZd ZdEdZdEdZdEdZdEdZdEdZdEdZdEdZdEdZdEdZdEdZdEdZdEdZdEdZdEd Zd! Zd"ed#dFd&ZdEd'ZdEd(ZdEd)Z dEd*Z!dEd+Z"dEd,Z#dEd-Z$dEd.Z%dGdHd1Z&dEd2Z'dEd3Z(dEd4Z)dEd5Z*dId8Z+dJd;Z,e-dGdKd=            Z.dLd?Z/dS )MProxyGraphicN)rI   rD   rE   docOptional[Drawing]c                  || _         t          j        | _        || _        d| _        |r|j        n|| _        | j        t          j        k     rdnd| _	        t          j
        | _        d| _        d| _        d| _        d| _        d | _        t          j        | _        d| _        d	| _        g | _        g | _        t/                      | _        t3                      | _        g | _        | j         r~t9          d
 | j         j        D                       | _        t9          d | j         j        D                       | _        d | j         j        D             | _        | j         j	        | _	        d S d S )Nr   cp1252zutf-80BYLAYERr   F      ?        c              3  .   K   | ]}|j         j        V  d S Ndxfname)r;   layers     r.   	<genexpr>z(ProxyGraphic.__init__.<locals>.<genexpr>  s&      LL%uy~LLLLLLr-   c              3  .   K   | ]}|j         j        V  d S r   r   )r;   linetypes     r.   r   z(ProxyGraphic.__init__.<locals>.<genexpr>  s'      !X!X(,"3!X!X!X!X!X!Xr-   c                <    i | ]}|j         j        |j         j        S r,   )r   fontr   )r;   styles     r.   
<dictcomp>z)ProxyGraphic.__init__.<locals>.<dictcomp>  s/       38		  r-   )_docr   new_factory_buffer_indexrI   r   DXF2007encodingr   colorr   r   marker_indexfill
true_colorLINEWEIGHT_DEFAULT
lineweightltscale	thicknessro   rp   ry   
textstylessetrequired_fontsmatricesliststyles)selfrD   r   rI   s       r.   __init__zProxyGraphic.__init__   sO    	",/?#..Z)-5=)H)HXXg-

&!"	)-$7! #!#$&*.&&(+(*9 	/LL49;KLLLLLDK!!X!XDIDW!X!X!XXXDN <@I<L  DO !I.DMMM	/ 	/r-   r5   Iterable[tuple[int, int, str]]c              #  "  K   | j         }| j        }|t          |          k     rkt          j        d| j        |          \  }}	 t          |          j        }n# t          $ r d| }Y nw xY w|||fV  ||z  }|t          |          k     id S d S )N<2LoffsetUNKNOWN_TYPE_)r  r  r@   structunpack_fromr   r   
ValueError)r  rN   buffersizetype_r   s         r.   infozProxyGraphic.info  s      c&kk!! ,UDLOOOKD%/(//4 / / /.u../t####TME c&kk!!!!!!s   A A+*A+Iterator[DXFGraphic]c                *    |                                  S r   )__virtual_entities__r  s    r.   virtual_entitieszProxyGraphic.virtual_entities*  s    ((***r-   c              #     K   	 |                                  E d{V  dS # t          $ r$}t          dt          |                     d}~ww xY w)z0Implements the SupportsVirtualEntities protocol.NzProxy graphic error: )unsafe_virtual_entities	Exceptionr(   str)r  es     r.   r'  z!ProxyGraphic.__virtual_entities__-  sv      	F3355555555555 	F 	F 	F#$DCFF$D$DEEE	Fs     
AA		AIterable[DXFGraphic]c              #     K    fd} j         } j        }|t          |          k     r4t          j        d||          \  }}|dk     rt          d          	 t          |          j                                        }n2# t
          $ r% t          
                    d|            ||z  }Y w xY wt           |d           }|r_ | j        |dz   ||z                      }t          |t                    r|D ]}	 ||	          V  n|r ||          V  |rd _        nt          
                    d| d	           ||z  }|t          |          k     2d S d S )
Nc                V    j         r |                     j         d                   S | S )N)r  	transform)entityr  s    r.   r3  z7ProxyGraphic.unsafe_virtual_entities.<locals>.transform5  s-    } ''b(9:::r-   r  r  r   z#parsing error: chunk size < 8 byteszUnsupported Type Code: Fz!Unsupported feature ProxyGraphic.z())r  r  r@   r  r  r   r   r   lowerloggerdebuggetattr
isinstancetupler
  )
r  r3  rN   r!  r"  r#  r   methodresultr4  s
   `         r.   r+  z$ProxyGraphic.unsafe_virtual_entities4  s     	 	 	 	 	 c&kk!! ,UF5IIIKD%axx !FGGG(//4::<<   >u>>??? T4..F 
KUQY-E FGGfe,, ,"( 0 0'i//////0 ,#)F+++++ & %DIIIIIJJJTME1 c&kk!!!!!!s   &B ,B10B1c                    t          j        d|          }t          |          }|                                 | j                            |           d S )Nz<16d)r  unpackr   	transposer  append)r  rD   valuesms       r.   push_matrixzProxyGraphic.push_matrixW  sI    vt,,V	Qr-   c                J    | j         r| j                                          d S d S r   )r  popr  rD   s     r.   
pop_matrixzProxyGraphic.pop_matrix]  s0    = 	 M	  	 r-   c                6    t           j        | _        d | _        d S r   )r   r   r  r  r(  s    r.   reset_colorszProxyGraphic.reset_colorsa  s    ]
r-   c                    |                                   t          j        d|          d         | _        | j        dk     s| j        dk    rt          j        | _        d S d S )N<Lr      )rI  r  r>  r  r   r   rF  s     r.   attribute_colorzProxyGraphic.attribute_colore  sX    ]4..q1
:>>TZ#--DJJJ .-r-   c                    | j         rGt          j        d|          d         }|t          | j                  k     r| j        |         | _        d S d S d S NrK  r   )r  r  r>  r@   ro   r   r  rD   rN   s      r.   attribute_layerzProxyGraphic.attribute_layerk  sY    9 	0M$--a0Es4;''''![/


	0 	0''r-   c                    | j         r[t          j        d|          d         }	 | j        |dz            | _        d S # t
          $ r |dk    r
d| _        Y d S d| _        Y d S w xY wd S )NrK  r   r\   i  BYBLOCKr   )r  r  r>  rp   r   
IndexErrorrP  s      r.   attribute_linetypezProxyGraphic.attribute_linetypeq  s    9 		.M$--a0E. $uqy 9 . . .E>>$-DMMMM$-DMMMM	.		. 		.s   ; A A A c                F    t          j        d|          d         | _        d S rO  )r  r>  r	  rF  s     r.   attribute_markerzProxyGraphic.attribute_marker}  s!    "M$55a8r-   c                `    t          t          j        d|          d                   | _        d S rO  )rR   r  r>  r
  rF  s     r.   attribute_fillzProxyGraphic.attribute_fill  s&    tT221566			r-   c                    |                                   t          j        t          j        d|          d                   \  }}|t          j        k    rt          j        |          | _        d S || _        d S rO  )	rI  r   decode_raw_colorr  r>  COLOR_TYPE_RGBrgb2intr  r  )r  rD   r9   r:   s       r.   attribute_true_colorz!ProxyGraphic.attribute_true_color  sg    -fmD$.G.G.JKKe6((($nU33DOOODJJJr-   c                    t          j        d|          d         }|t          j        k    r$t	          |dz
  t          j                  | _        d S || _        d S )NrK  r   l        )r  r>  r   MAX_VALID_LINEWEIGHTmaxr  r  )r  rD   lws      r.   attribute_lineweightz!ProxyGraphic.attribute_lineweight  sN    ]4&&q)***!"{"2E4LMMDOOO DOOOr-   c                F    t          j        d|          d         | _        d S Nz<dr   )r  r>  r  rF  s     r.   attribute_ltscalezProxyGraphic.attribute_ltscale  s    }T4003r-   c                F    t          j        d|          d         | _        d S re  )r  r>  r  rF  s     r.   attribute_thicknessz ProxyGraphic.attribute_thickness  s    tT2215r-   c                   t          |          }|                                 }t          |                                          }|                                |d<   t          |                                          }||d<   |                    t                    s$t          |          }|                    |          }||d<   | 	                    d|          S )Nradius	extrusioncenterr   
dxfattribs)
r   _build_dxf_attribsr   r   
read_floatiscloser   r   from_wcsr  )r  rD   rt   attribsrl  normalocss          r.   circlezProxyGraphic.circle  s    ))++bnn&&''MMOObnn&&''%~~f%% 	*
 f++C\\&))F"}}X'}:::r-   c                   t          |          }|                                 }t          |                                          }t          |                                          }t          |                                          }t	          j        |||          }|j        |d<   |j        |d<   |                     d|          S )Nrl  rj  r   rm  )	r   ro  r   r   r   from_3prl  rj  r  )r  rD   rt   rs  p1p2p3rv  s           r.   	circle_3pzProxyGraphic.circle_3p  s    ))++"..""##"..""##"..""###+BB77"M"M}}X'}:::r-   c                |   t          |          }|                                 }t          |                                          }|                                |d<   t          |                                          }t          |                                          }|                                }|                    t                    st          ||          }t          |          }	|		                    |
                    t                              j        }
t          j        |          }|		                    |
                    |                    j        }||d<   |		                    |          }n|j        }
|
t          j        |          z   }||d<   |
|d<   ||d<   |                     d|          S )	Nrj  )uxuzrk  rl  start_angle	end_angleARCrm  )r   ro  r   r   rp  rq  r   r   r   rr  to_wcsr   	angle_deg
from_anglemathdegreesr  )r  rD   rt   rs  rl  rt  	start_vecsweep_angleucsru  r  end_vecr  s                r.   circular_arczProxyGraphic.circular_arc  st   ))++bnn&&''MMOObnn&&''))**	mmoo ~~f%% 	@v...Cf++C,,szz&'9'9::DKok22GSZZ%8%899CI#)GK \\&))FF#-K#dl;&?&??I"!,(}}Uw}777r-   c                   t          |          }|                                 }t          |                                          }t          |                                          }t          |                                          }t	          j        |||          }|j        |d<   |j        |d<   |j        |d<   |j	        |d<   | 
                    d|          S )Nrl  rj  r  r  r  rm  )r   ro  r   r   r   rx  rl  rj  r  r  r  )r  rD   rt   rs  ry  rz  r{  arcs           r.   circular_arc_3pzProxyGraphic.circular_arc_3p  s    ))++"..""##"..""##"..""##%b"b11JJ!$"}}}Uw}777r-   c                n   t          |          }|                                 }t          |                                          |d<   t          |                                          }||d<   |                                }|                                }||z  |d<   |                                }|                                }|                                }	t          |          }
|
                    t          j        |	|                    }||d<   ||d<   ||d<   |                     d|          S )	Nrl  rk  ratio
major_axisstart_param	end_paramELLIPSErm  )	r   ro  r   r   rp  r   r  r  r  )r  rD   rt   rs  rk  major_axis_lengthminor_axis_lengthr  r  major_axis_angleru  r  s               r.   elliptic_arczProxyGraphic.elliptic_arc  s   ))++ !1!122))**	(MMOOMMOO,/@@mmooMMOO	==??)nnZZ0@BS T TUU
 *!,(}}Y7};;;r-   c                   t          d|                     d|                    }t          |          }|j                            t          j        |          d           |rt          dd|          |j        _	        |S )Nr#   HATCHrm  T)	is_closedr   )
r   r  _get_elevationpathsadd_polyline_pathr   generater   r   	elevation)r  r   rs  hatchr  s        r.   _filled_polygonzProxyGraphic._filled_polygon  sv    WdmmGmHHII"8,,	%%dmH&=&=%NNN 	8"&q!Y"7"7EIr-   F)closert  r   
list[Vec3]c                  |                                  }t          |          }|dk    s'|dk    rC|d                             |d                   r"|d         |d<   |                     d|          S t	          |          st
          j        |d<   t          d|                     d	|                    }|                    |           |r|	                                 |
                                 |S )
NrY   r\   r   locationPOINTrm  rQ   r"   r   )ro  r@   rq  r  is_2d_polyliner   POLYLINE_3D_POLYLINEr   append_verticesr  
new_seqend)r  r   r  rt  rs  rx   polylines          r.   	_polylinezProxyGraphic._polyline   s     ))++HA::%1**!)<)<Xa[)I)I*"*1+GJ==W====h'' 	:$9GG
DMM*M$Q$QRR  *** 	NNr-   c                d    |                      |d          \  }}|                     ||          S )NTload_normal)rt  _load_verticesr  r  rD   r   rt  s       r.   polyline_with_normalsz"ProxyGraphic.polyline_with_normals  s7      ..t.FF&~~hv~666r-   c                `    |                      |d          \  }}|                     |          S )NFr  r  r  s       r.   r  zProxyGraphic.polyline  s3      ..t.GG&~~h'''r-   c                    |                      |d          \  }}| j        r(|                     ||                                           S |                     |d          S )NFr  T)r  )r  r
  r  ro  r  r  s       r.   polygonzProxyGraphic.polygon  sb    ..t.GG&9 	M''$2I2I2K2KLLL~~hd~333r-   c                    |                                  }d}d}d}d}t          |                                          }                                }|dz  r                                |d<   |dz  r                                |d<   |dz  r                                |d<   |d	z  r%t                              d
                    |d<   |dz  rd}                                }	|	dk    rd S |dz  r                                }| j        dk    r2|dz  r                                }|dz  r                                }                    d          g}
|
d         }t          |	d	z
            D ]S}
                    |d                   }
                    |d	                   }||f}|
                    |           Tfdt          |          D             }fdt          |          D             }fdt          |          D             }t          |          dk    rt          t          d|	                    }t          |          dk    rt          t          d|	                    }g }t          |
||          D ]8\  }}}|                    |d         |d	         |d         |d	         |f           9t!          d|                     d|                    }|                    |           ||_        |S )Nr   Fr_   const_widthr   r  r\   r  rY   r   rk  i   Tr   AC1024rk   rb   r2  )defaultc                8    g | ]}                                 S r,   read_bit_doubler   s     r.   r=   z+ProxyGraphic.lwpolyline.<locals>.<listcomp>O  s%    OOOr1133OOOr-   c                8    g | ]}                                 S r,   )read_bit_longr   s     r.   r=   z+ProxyGraphic.lwpolyline.<locals>.<listcomp>P  s%     S S S!1!1!3!3 S S Sr-   c                `    g | ]*}                                                                  f+S r,   r  r   s     r.   r=   z+ProxyGraphic.lwpolyline.<locals>.<listcomp>Q  sC     -
 -
 -
=>R!!2#5#5#7#78-
 -
 -
r-   )r   r   r$   r   rm  )ro  r   read_unsigned_longread_bit_shortr  r   r  rI   read_raw_doubler   read_bit_double_defaultr@  r@   r  r   zipr   r  
set_pointsclosed)r  rD   rs  
num_bulgesnum_vertex_ids	num_widthr  num_data_bytesflag
num_pointsr   
prev_pointr   xybulges
vertex_idswidthspointsvwb
lwpolylinert   s                          @r.   r  zProxyGraphic.lwpolyline%  sd   ))++
		t__ 3355%%''!8 	:%'%7%7%9%9GM"!8 	8#%#5#5#7#7GK !8 	8#%#5#5#7#7GK !8 	?#'(:(:1(=(=#>#>GK #: 	I%%''
??4"9 	,))++J?h&&d{ 4!#!1!1!3!3by /,,..	 02/A/A!/D/D.Eb\
zA~&& 	( 	(A**:a=*AAA**:a=*AAAQJOOJ''''OOOOU:=N=NOOO S S S SU>=R=R S S S
-
 -
 -
 -
BG	BRBR-
 -
 -
 v;;!&J//00Fv;;!&4455F(*8VV44 	7 	7GAq!MM1Q41qtQqT156666,lw(W(WXX
f%%%%
r-   c                z   t                               d           t          |                              d          \  }}|dz
  |z  |dz
  |z  z   }|dz
  |dz
  z  }||z  }fdt	          |          D             }t                      }	 t          ||d          }n/# t          j        $ r t                               d           Y nw xY w|r	 | 	                                }	||	d<   ||	d	<   t          j        |	d
<   t          d|                     d|	                    }
|
                    |           |
S )Nz4Untested proxy graphic entity: MESH - Need examples!r  rY   c                R    g | ]#}t                                                    $S r,   r   r   s     r.   r=   z%ProxyGraphic.mesh.<locals>.<listcomp>l  +    NNNqD))**NNNr-   r   r   z;Structure error while parsing traits for MESH proxy graphicm_countn_countrQ   r    r   rm  )r6  warningr   read_structr   ry   r   r  errorro  r   POLYLINE_3D_POLYMESHr   r  r  )r  rD   rowscolumnstotal_edge_counttotal_face_counttotal_vertex_countr   r   rs  polymeshrt   s              @r.   meshzProxyGraphic.mesh`  sy    	MNNNu--g 1H/7Q;$2FF 1H15!G^NNNNE:L4M4MNNN	X%$&6Q  FF | 	X 	X 	XLLVWWWWW	X 	 ))++!	$	 5
DMM*M$Q$QRR  ***s   B" ")CCc                    t          |          |                                 }t          j        |d<   t	          d|                     d|                    }                                }fdt          |          D                                             }g }d}d}d}	||k     rwt          	                                          }
|d|
z   z  }fdt          |
          D             }fd	|D             }|dz  }|	|
z  }	|
                    |           ||k     wt                      }	 t          |	|d
          }n/# t          j        $ r t                              d           Y nw xY w|                    |           |ro|                    d          }|rX|                    d          }|rAt                              d           t'          |t(                    sJ t+          ||           |                                 |S )NrQ   r!   r   rm  c                R    g | ]#}t                                                    $S r,   r   r   s     r.   r=   z&ProxyGraphic.shell.<locals>.<listcomp>  r  r-   r   rY   c                8    g | ]}                                 S r,   r}   r   s     r.   r=   z&ProxyGraphic.shell.<locals>.<listcomp>  s!    FFFqBLLNNFFFr-   c                     g | ]
}|         S r,   r,   )r;   rN   r   s     r.   r=   z&ProxyGraphic.shell.<locals>.<listcomp>  s    >>>HUO>>>r-   r  z<Structure error while parsing traits for SHELL proxy graphicr   r   zLUntested proxy graphic feature for SHELL: apply face colors - Need examples!)r   ro  r   POLYLINE_POLYFACEr   r  r~   r   absread_signed_longr@  ry   r   r  r  r6  append_facesgetr  r9  r  _apply_face_colorsoptimize)r  rD   rs  polyfacer  face_entry_countr   
read_countr  r  r   face_indicesfacer   face_traitsface_colorsrt   r   s                   @@r.   shellzProxyGraphic.shell  s]    ))++ 2
DMM*M$Q$QRR\\^^NNNNE:L4M4MNNN<<>>
 ! !+++R002233J!j.(JFFFFE*4E4EFFFL>>>>>>>D!
*LL +++ 	Y%$&6Q  FF | 	Y 	Y 	YLLWXXXXX	Ye$$$ 
	> **W--K >)ooh77 >NN=   &k488888&x===s   1E )E10E1c                0    |                      |d          S )NFunicode_textrF  s     r.   textzProxyGraphic.text  s    zz$z...r-   c                0    |                      |d          S )NTr   r  rF  s     r.   unicode_textzProxyGraphic.unicode_text  s    zz$z---r-   r  rR   c           	     b   t          |          }t          |                                          }t          |                                          }t          |                                          }|                    d          \  }}}	d}
|rW	 |                                }
n# t
          $ r4}t                              dt          |                      Y d }~nmd }~ww xY w	 |	                    | j
                  }
nI# t
          $ r<}t                              d| j
         dt          |                      Y d }~nd }~ww xY w|                                 }||d<   |
|d<   ||d<   ||d	<   |j        |d
<   t          j        |	          |d<   ||d<   |                     d|          S )N<3d z"ProxyGraphic._text(unicode=True); z,ProxyGraphic._text(unicode=False); encoding=; insertr  heightwidthrotationobliquerk  r   rm  )r   r   r   r  read_padded_unicode_stringUnicodeDecodeErrorr6  r7  r-  read_padded_stringr  ro  r  r  r  r  )r  rD   r  rt   start_pointrt  text_directionr  width_factoroblique_angler  r.  rs  s                r.   r  zProxyGraphic._text  s   2>>++,,bnn&&''bnn..//.0nnU.C.C+m 	L4466% L L LJ#a&&JJKKKKKKKKL,,T];;%   \4=\\TWXYTZTZ\\        ))++'"',6
!\-88	%}}V}888s0   B& &
C$0*CC$(D 
E	2EE	c           	     N   | j         }t          |          }t          |                                          }t          |                                          }t          |                                          }d}	 |                    |          }nD# t
          $ r7}t                              d| dt          |                      Y d }~nd }~ww xY w|	                    d          \  }	}
|	                    d          \  }}}}|	                    d          \  }}}}}d}d}	 |                    |          }|                    |          }nD# t
          $ r7}t                              d	| d
t          |                      Y d }~nd }~ww xY w| 
                                }||d<   ||d<   ||d<   ||d<   |j        |d<   t          j        |          |d<   |                     ||          |d<   d|z  d|z  z   |d<   ||d<   |                     d|          S )Nr	  )r  z%ProxyGraphic.text2(); text; encoding=r
  <2l<4d<5LTXT.SHXz'ProxyGraphic.text2(); fonts; encoding='z'; r  r  r  r  r  r  r   r\   r_   text_generation_flagrk  r   rm  )r  r   r   r   r  r  r6  r7  r-  r  ro  r  r  r  
_get_styler  )r  rD   r  rt   r  rt  r  r  r.  ignore_length_of_stringrawr  r  r  tracking_percentageis_backwardsis_upside_downis_verticalis_underlineis_overlinefont_filenamebig_font_filenamers  s                          r.   text2zProxyGraphic.text2  s   =2>>++,,bnn&&''bnn..//	W((((;;DD! 	W 	W 	WLLUUUSQRVVUUVVVVVVVV	W (*~~e'<'<$ NN5!!	
 NN5!!	
&!#	1181DDM " 5 5x 5 H H! 	 	 	LLO(OOs1vvOO       	
 ))++'"',6
!\-88	??=:KLL*+l*:Q=O*O&'%}}V}888s0   =B 
C-CC*,E 
F!-FFc                   t          |          }t          |                                          }t          |                                          }t          |                                          }d}	 |                                }nA# t          $ r4}t
                              dt          |                      Y d }~nd }~ww xY w|                    d          \  }}	|                    d          \  }
}}}|                    d          \  }}}}}|                    d          \  }}}}d}d}d}	 |                                }|                                }|                                }nA# t          $ r4}t
                              dt          |                      Y d }~nd }~ww xY w| 	                                }||d	<   ||d
<   |
|d<   ||d<   |j
        |d<   t          j        |          |d<   |                     ||          |d<   d|z  d|z  z   |d<   ||d<   |                     d|          S )Nr	  z$ProxyGraphic.unicode_text2(); text; r  r  r  z<4Lr  z%ProxyGraphic.unicode_text2(); fonts; r  r  r  r  r  r  r   r\   r_   r  rk  r   rm  )r   r   r   r  r  r6  r7  r-  r  ro  r  r  r  r  r  )r  rD   rt   r  rt  r  r  r.  r  
ignore_rawr  r  r  r   r!  r"  r#  r$  r%  is_bold	is_italiccharsetpitch	type_facer&  r'  rs  s                              r.   unicode_text2zProxyGraphic.unicode_text2  s   2>>++,,bnn&&''bnn..//	J0022DD! 	J 	J 	JLLHAHHIIIIIIII	J /1nnU.C.C+ NN5!!	
 NN5!!	
-/^^E-B-B*GU	&!#	K5577I99;;M " = = ? ?! 	K 	K 	KLLIQIIJJJJJJJJ	K ))++'"',6
!\-88	??=:KLL*+l*:Q=O*O&'%}}V}888s0   6B 
C	*CC	:<E7 7
F5*F00F5c                .    |                      |d          S )Nr   _xlinerF  s     r.   xlinezProxyGraphic.xline4  s    {{4)))r-   c                .    |                      |d          S )Nr   r2  rF  s     r.   rayzProxyGraphic.ray7  s    {{4'''r-   r#  r-  c                l   t                               d           t          |          }|                                 }t	          |                                          }t	          |                                          }||d<   ||z
                                  |d<   |                     ||          S )Nz9Untested proxy graphic entity: RAY/XLINE - Need examples!startunit_vectorrm  )r6  r  r   ro  r   r   	normalizer  )r  rD   r#  rt   rs  r  other_points          r.   r3  zProxyGraphic._xline:  s    RSSS))++2>>++,,2>>++,,&"-";!F!F!H!H}}Uw}777r-   r   bigfontc                   | j                             |           || j        v r| j        |         }nV|}| j        rM| j        j                            |          s.| j        j                            |||d           || j        |<   |S )N)r   r<  rm  )r  addr  r  r  	has_entryr  )r  r   r<  r   s       r.   r  zProxyGraphic._get_styleD  s    %%%4?""OD)EEEy .!1!;!;E!B!B .	 $$dw%G%G %    ).%r-   tuple[list[Vec3], Vec3]c                (   t           }t          |           }|                                }|r|dz  }g }|dk    r@|                    t	          |                    d                               |dz  }|dk    @|r|                                }||fS )NrY   r   r  )r   r   r~   r@  r   r  rE  )rD   r  rt  rt   rx   r   s         r.   r  zProxyGraphic._load_verticesQ  s     	QJE!aiiOOD!6!677888QJE aii  	$\\^^Fr-   dict[str, Any]c                >   t                      }| j        dk    r
| j        |d<   | j        t          j        k    r
| j        |d<   | j        dk    r
| j        |d<   | j        t          j        k    r
| j        |d<   | j        dk    r
| j        |d<   | j	        
| j	        |d	<   |S )
Nr   r   r  r   r   r  r   r  r  )
ry   r   r  r   r   r   r  r  r  r  )r  rs  s     r.   ro  zProxyGraphic._build_dxf_attribs`  s    "&&&:#zGG:&&#zGG=I%%"&-GJ?e666$(OGL!<3!%GI?&$(OGL!r-   r   rD   rE   r   r   )r5   r  )r5   r%  )r5   r/  rD   rE   )r   r  )F)rD   rE   r  rR   )rD   rE   r#  r-  )r   r-  r<  r-  r5   r-  )rD   rE   r5   r@  )r5   rB  )0r)   r*   r+   r   DXF2000r  r$  r)  r'  r+  rC  rG  rI  rM  rQ  rU  rW  rY  r^  rc  rf  rh  rv  r|  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r(  r0  r4  r6  r3  r  staticmethodr  ro  r,   r-   r.   r   r      s       48!/HM!/ !/ !/ !/ !/ !/F
 
 
 
+ + + +F F F F! ! ! !F                ' ' ' '0 0 0 0
. 
. 
. 
.9 9 9 97 7 7 7   ! ! ! !4 4 4 46 6 6 6; ; ; ;"	; 	; 	; 	; 8  8  8  8D8 8 8 8< < < <(   8=V      $7 7 7 7( ( ( (4 4 4 49 9 9 9v       D, , , ,\/ / / /. . . .9 9 9 9 9:.9 .9 .9 .9`/9 /9 /9 /9b* * * *( ( ( (8 8 8 8            \      r-   r   c                       e Zd Zdd fdZd Zd ZddZddZd ZddZ	d fdZ
d fdZd fdZd fdZd fdZd fdZd fdZ xZS )ProxyGraphicDebuggerNrD   rE   r   r   c                    t          t          |                               ||           |t          j        }|| _        d S r   )superrI  r  sysstdout_debug_stream)r  rD   r   debug_stream	__class__s       r.   r  zProxyGraphicDebugger.__init__r  s?    "D))224===:L)r-   c                   |                      dd           |                     d           |                      d           |                                 D ]W}|                     d|                                            |                     d|                                 d           X|                      d	           d S )
N=FcharnewlinezCreate virtual DXF entities:rU  z
  * z  * 
rT  )log_separatorlog_messager)  dxftypegraphic_properties)r  r4  s     r.   log_entitiesz!ProxyGraphicDebugger.log_entitiesx  s    U33378885)))++-- 	E 	EF8fnn&6&688999CF$=$=$?$?CCCDDDD$$$$$r-   c           	     (   |                      dd           |                     d           |                      d           |                                 D ]$\  }}}|                     d| d| d|            %|                      d	           d S )
NrR  FrS  zRaw proxy commands:rV  z	Command: z Index: z Size: rX  )rY  rZ  r$  )r  rN   r"  cmds       r.   log_commandsz!ProxyGraphicDebugger.log_commands  s    U333.///5))) $		 	L 	LE4JJJeJJDJJKKKK$$$$$r-   -Tc                h    |                      |dz             |r|                      d           d S d S )NO   r	  )rZ  )r  rT  rU  s      r.   rY  z"ProxyGraphicDebugger.log_separator  sF    ### 	!R     	! 	!r-   msgr-  c                2    t          || j                   d S )N)file)printrN  )r  rd  s     r.   rZ  z ProxyGraphicDebugger.log_message  s    c*++++++r-   c                Z    |                      d|                                 z              d S )Nz> )rZ  	get_stater(  s    r.   	log_statezProxyGraphicDebugger.log_state  s+     0 0011111r-   r5   c                v    d| j          d| j         d| j         d| j         d| j         d| j         d| j         S )Nzly: 'z', clr: z, lt: z, lw: z, ltscale: z, rgb: z, fill: )r   r  r   r  r  r  r
  r(  s    r.   ri  zProxyGraphicDebugger.get_state  sr    9DJ 9 9
 9 9$- 9 9?9 9/3|9 9O9 9-1Y9 9	
r-   c                    |                      d           t                                          |           |                                  d S )NzCommand: set COLOR)rZ  rK  rM  rj  r  rD   rP  s     r.   rM  z$ProxyGraphicDebugger.attribute_color  F    -...%%%r-   c                    |                      d           t                                          |           |                                  d S )NzCommand: set LAYER)rZ  rK  rQ  rj  rm  s     r.   rQ  z$ProxyGraphicDebugger.attribute_layer  rn  r-   c                    |                      d           t                                          |           |                                  d S )NzCommand: set LINETYPE)rZ  rK  rU  rj  rm  s     r.   rU  z'ProxyGraphicDebugger.attribute_linetype  sF    0111""4(((r-   c                    |                      d           t                                          |           |                                  d S )NzCommand: set TRUE-COLOR)rZ  rK  r^  rj  rm  s     r.   r^  z)ProxyGraphicDebugger.attribute_true_color  F    2333$$T***r-   c                    |                      d           t                                          |           |                                  d S )NzCommand: set LINEWEIGHT)rZ  rK  rc  rj  rm  s     r.   rc  z)ProxyGraphicDebugger.attribute_lineweight  rr  r-   c                    |                      d           t                                          |           |                                  d S )NzCommand: set LTSCALE)rZ  rK  rf  rj  rm  s     r.   rf  z&ProxyGraphicDebugger.attribute_ltscale  sF    /000!!$'''r-   c                    |                      d           t                                          |           |                                  d S )NzCommand: set FILL)rZ  rK  rY  rj  rm  s     r.   rY  z#ProxyGraphicDebugger.attribute_fill  sF    ,---t$$$r-   )NNrD  )ra  T)rd  r-  )r5   r-  rE  )r)   r*   r+   r  r]  r`  rY  rZ  rj  ri  rM  rQ  rU  r^  rc  rf  rY  __classcell__)rP  s   @r.   rI  rI  q  s}       * * * * * * *% % %% % %! ! ! !
, , , ,2 2 2
 
 
 
     
     
     
     
     
     
         r-   rI  r  r!   r   	list[int]c                    t          |          }|dk    rd S d}| j        D ])}|j        r ||         |j        _        |dz  }||k    r d S *d S )Nr   rY   )r@   r   is_face_recordr   r  )r  r   color_countrN   vertexs        r.   r  r    ss    6{{KaE#    	%e}FJQJE## r-   floatc                $    | r| d         j         S dS )Nr   r   )z)r   s    r.   r  r    s     {}3r-   r   r  c                ~    t          |           dk     rdS | d         j        t          fd| D                       S )NrY   Tr   c              3  L   K   | ]}t          j        |j                  V  d S r   )r  rq  r~  )r;   r  r~  s     r.   r   z!is_2d_polyline.<locals>.<genexpr>  s1      66t|Aqs##666666r-   )r@   r~  all)r   r~  s    @r.   r  r    sG    
8}}qtA6666X666666r-   )r/   r0   )r1   r   r2   r3   r4   r3   r5   r6   )
rD   rE   rF   r   r2   r3   r4   r3   r5   rG   )rQ   r3   r5   rR   )
rt   r   ru   rv   rw   r3   rx   r3   r5   ry   )rt   r   r   r3   r   r3   r   r3   )r  r!   r   rw  r5   rG   )r5   r|  )r   r  r5   rR   )J
__future__r   typingr   r   r   r   r   r	   r
   rL  r  r  enumr   	itertoolsr   ezdxf.lldxfr   ezdxf.tools.binarydatar   r   r   r%   r   
ezdxf.mathr   r   r   r   r   r   r   r   r   ezdxf.entitiesr   loggingezdxf.documentr   ezdxf.lldxf.tagsr   ezdxf.lldxf.tagwriterr   r   r    r!   r"   r#   r$   	getLoggerr6  rL   r,  r(   rC   rP   rV   rZ   r]   r`   rc   rf   ri   rl   r   r   r   r   r   rI  r  r  r  r,   r-   r.   <module>r     sm   # " " " " "                  


                     I I I I I I I I I I      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 # " " " " "  &&&&&&%%%%%%777777                
	7	#	#
	 	 	 	 		 	 	 	
 :=? ? ? ? ? 	    *                                                        
 !$' $'&-"D),d3"E*    ,4 4 4 4n' ' ' ' ' ' ' 'Tt	 t	 t	 t	 t	 t	 t	 t	nK K K K K< K K K\      7 7 7 7 7 7r-   