
    Og                         d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
mZ d dlmZmZ d dlZerd dl	mZmZmZmZmZ dgZ ej,                  d	      Zdd
ZddZy)    )annotations)TYPE_CHECKINGcastSequenceAny)chain)factory
MLineStyle)Vec3OCSN)MLine
DXFGraphicHatchLineArcvirtual_entitiesezdxfc                4    | j                         }d|v r|d= |S )N
true_color)graphic_properties)mlineattribss     W/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/render/mline.py_dxfattribsr      s%    &&(GwL!N    c           	         d fd}dfd}dfd}dfd	 	 	 	 	 	 	 	 	 	 d fdd fd}fd}d fdg } j                   r$ j                  t         j                        d	k  r|S  j                  |S  j                  t         j                  j                        t        j                        } j                  j                         d
   d   g g g  j                  D ]  }|j                  }	t        |	      |k7  r2t        j                  dt               dt                d       |c S |j                  }
|j                   }g }|	D ]  }	 |d
   }|j%                  |
||z  z          ! j%                  |       j%                  |          j%                  |           r<j%                  d
          j%                  d
          j%                  d
          s|j'                   |              |j'                   |              j)                  j*                        r|j'                   |              s|j'                   |              j)                  j,                        r|j/                  d
 |              |S # t"        $ r d
}Y Kw xY w)zYields 'virtual' parts of MLINE as LINE, ARC and HATCH entities.

    These entities are located at the original positions, but are not stored
    in the entity database, have no handle and are not assigned to any
    layout.
    c            
        t              } 
j                  j                  | d<   t        	j	                  d               j                  dd      | d<   j                  j                  | d<   t        dt        j                  d| 	            }dgt              d
z  z  }t        t        j                  	j                              t        j                  	j                  t                                }sL
j                  
j                         rd|t              dz
  <   
j                  
j"                        rd|d<   d t%        ||      D        }|j&                  j)                  |d       |S )Ncolorr   g        xy	elevation	extrusionr   HATCH
dxfattribsdoc   g      ?   c              3  T   K   | ]   \  }}|j                   |j                  |f " y wNr   ).0vbulges      r   	<genexpr>z4virtual_entities.<locals>.filling.<locals>.<genexpr>8   s#     J(!UQSS!##u%Js   &(T)	is_closed)r   dxf
fill_colorr   from_wcsreplacer#   r   r	   newlenr   generatepoints_from_wcsreversedget_flag_state	END_ROUNDSTART_ROUNDzippathsadd_polyline_path)r   hatchbulgespointslwpointsbottom_borderclosedr'   r   ocsstyle
top_borders        r   fillingz!virtual_entities.<locals>.filling&   sK   e$ 99//#CLLq1A$BCKKS  L  
  %yy22Wgkk'g3OP"es='9A'=>MM#--m<=MM#--hz.BCD
 ##EOO414s=)A-.##E$5$56 r
Jc&&6IJ%%h$%?r   c                    g } j                  j                        r| j                   d                j                  j                        r| j                   d	             j                  j                        r;t        j                        dkD  r#d   }d   }| j                   d||             | S )Nr      r)   )r;   START_SQUAREextendr=   START_INNER_ARCr7   elements
entitiesstart_index	end_indexbottom_indexcreate_mitermiter_pointsordered_indices
round_capsrH   	top_indexs
      r   	start_capz#virtual_entities.<locals>.start_cap<   s    %' 2 23OOLa9: 1 12OOJq)\BC  !6!67ENN#a')"-K'*IOOJq+yABr   c                    g } j                  j                        r| j                   d                j                  j                        r| j                   d	             j                  j                        r;t        j                        dkD  r#d   }d   }| j                   d||             | S )Nr*   rL   r)   rM   )r;   
END_SQUARErO   r<   END_INNER_ARCr7   rQ   rR   s
      r   end_capz!virtual_entities.<locals>.end_capK   s    %' 0 01OOLb)9:;0OOJr<CD  !4!45ENN#a')!,K'+IOOJr;	BCr   c                    
j                   |   j                  }
j                   |   j                  }	j                  |    |         }	j                  |    |         } ||||      S r,   )rQ   r   r4   )miter_indexrT   rU   color1color2startend	_arc_capsrX   rG   rH   s          r   rZ   z$virtual_entities.<locals>.round_capsZ   sl    ,22	*00\+6{CDll<4Y?@VV44r   c                   t              }| j                  |      }|| z
  j                  dz  }| |z
  j                  }||d<   ||d<   ||d<   ||d<   |||k(  rdndz   |d<   t	        d	t        j                  d
|
            }||k(  r|fS |dz   |d<   |dz   |d<   ||d<   t	        d	t        j                  d
|
            }	||	fS )Ng       @centerradiusr   start_angle   Z   	end_angler   ARCr%   )r   lerp	magnitude	angle_degr   r	   r6   )re   rf   rc   rd   r   ri   rj   anglearc1arc2r'   r   s             r   rg   z#virtual_entities.<locals>._arc_capsa   s     e$C+((3.**""!!&$v/?RHE7;;ucJKV7N!&$s{!E7;;ucJKTzr   c                 4   d } g }t              }D ]  }| |t        	j                        D ]d  \  }}| |   |d<   ||   |d<   |j                  |d<   |j                  |d<   |j                  t        dt        j                  d|                   f |}  |S Nre   rf   r   linetyper   LINEr%   )	r   	enumeraterQ   r   rx   appendr   r	   r6   )
prev_linesr   miterindexelementr'   rX   r   rH   s
         r   lineszvirtual_entities.<locals>.linesv   s    e$! 	E&/&? 
NE7'+E{GG$%*5\GEN'.}}GG$*1*:*:GJ'MM"#KK7L
 D	 r   c                     g } t               }|j                  t              dz
         s|j                  d       t              D ]!  \  }}||vs| j	                   |             # | S )Nr)   r   )setaddr7   rz   rO   )r}   skipr   r~   rF   rW   rX   s       r   display_miterz'virtual_entities.<locals>.display_miter   sk    u\"Q&'HHQK%l3 	3LE5D l512	3 r   c           
        g }t        	      }|    }|    }|j                  |      }
j                     }||d<   ||d<   |j                  |d<   |j                  |d<   |j                  t        dt        j                  d|                   
j                     }||d<   ||d<   |j                  |d<   |j                  |d<   |j                  t        dt        j                  d|                   |S rw   )	r   rp   rQ   r   rx   r{   r   r	   r6   )r~   r}   r   topbottomzeror   rV   r'   r   rH   r[   s          r   rW   z&virtual_entities.<locals>.create_miter   s   e$I|${{3..+"==%..
VSIJ	
 ...!"==%..
VSIJ	
 r   r(   r   r*   z(Invalid line parametrization for vertex z in .)returnr   )r   list[DXFGraphic])rb   intrT   r   rU   r   )
re   r   rf   r   rc   r   rd   r   r   zSequence[Arc])r   z
list[Line])is_aliver'   r7   verticesrH   r   r2   r#   rQ   r1   rY   line_paramsloggerdebugstrlocationmiter_direction
IndexErrorr{   rO   r;   MITERFILLinsert)r   rJ   r\   r`   r   r   rS   element_countvertexoffsetsr   r   r~   offsetlengthrg   rE   rV   rF   rW   r'   rX   rG   rY   rZ   rH   rI   r[   s   `              @@@@@@@@@@@@@r   r   r      s    ,  5 5(+58	* *	 0 "$H>>UYY.#enn2E2IE}
))C
eii!!
"C'M__F++-O"1%L#I "MJ%'L.. 2$$w<=(LL:3|;L:M N%j\$ O?? 00 	>F LLOf$<<=	> 	E"%	*+U<01'2* LO,*Q-(]1-.	$OOEGEKK((	"EJJ'79%O5  s   KK#"K#)r   zdict[str, Any])r   r   r   r   )
__future__r   typingr   r   r   r   	itertoolsr   ezdxf.entitiesr	   r
   
ezdxf.mathr   r   loggingr   r   r   r   r   __all__	getLoggerr   r   r    r   r   <module>r      sJ    # 5 5  .   BB
			7	#Kr   