
    'jJ                    :   d dl mZ d dlmZmZm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 d dlmZ d d	lmZmZ d d
lmZmZmZmZmZmZmZ d dlmZ dZdZdZ dZ!dZ"dZ#dZ$dZ% G d d          Z&d+dZ'd,dZ(d-d!Z)d"Z*d#Z+ G d$ d%          Z,	 d.d/d(Z-d0d*Z.dS )1    )annotations)IterableSequenceOptionalN)colors)Vec2)const)TextEntityAlignment)print_bitmask)MLeaderStyleOverrideOVERRIDE_FLAG)EdgePathPolylinePathLineEdgeArcEdgeEllipseEdge
SplineEdgemleader)
DXFPolygonEDGE_START_MARKEREDGE_END_MARKERHATCHPOLYLINE_MARKERLINE_MARKER
ARC_MARKERELLIPSE_MARKERSPLINE_MARKERc                      e Zd Zdddd1dZd Zd	 Zd2dZd3dZd3dZd4dZ	d4dZ
d5dZd6dZd7d Zd8d#Zd9d&Zd:d)Zd;d,Zed<d.            Zed3d/            Zd0S )=HatchAnalyzer      ?-   )marker_sizeangler"   floatr#   c                   || _         || _        t          j                    | _        | j                                        | _        |                                  |                                  d S N)	r"   r#   ezdxfnewdoc
modelspacemspinit_layersinit_markers)selfr"   r#   s      M/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/tools/analyze.py__init__zHatchAnalyzer.__init__%   s_     '
9;;8&&((    c                .   | j         j                            t          t          j                   | j         j                            t          t          j                   | j         j                            t          t          j	                   | j         j                            t          t          j                   | j         j                            t          t          j                   | j         j                            t                     d S N)color)r)   layersaddPOLYLINE_LAYERr   YELLOW
LINE_LAYERRED	ARC_LAYERGREENELLIPSE_LAYERMAGENTASPLINE_LAYERCYANHATCH_LAYERr.   s    r/   r,   zHatchAnalyzer.init_layers2   s    N&-@@@Jfj999IV\:::M@@@L<<<K(((((r1   c                   | j         j                            t                    }ddi}| j        dz  }|}|                    d||           |dz  }|                    |df||dz  z
  df|           |                    d	|
          }||j        _	        |
                    |dft          j                   | j         j                            t                    }ddi}|                    | | f||f|           |                    | |f|| f|           | dz  }|                    | df||dz  z   df|           |                    d	|
          }||j        _	        |
                    |dft          j                   d S )Nlayer0       @r   r   centerradius
dxfattribs   r   )startendrK   NAME)tagrK   )align)r)   blocksr(   r   r"   
add_circleadd_line
add_attdefdxfheightset_placementr
   MIDDLE_LEFTr   MIDDLE_RIGHT)r.   blkattribsrJ   rW   
text_starttexts          r/   r-   zHatchAnalyzer.init_markers:   s   ho!!"344C.!C' 	 	 	
 	
 	

 aZ
1+fsl*A. 	 	
 	
 	

 ~~  
 
 !O#6#B 	 	
 	
 	

 ho!!/22C.7VG$  	 	
 	
 	

 	7F#&! 	 	
 	
 	

 Wq[
7A,fsl*A. 	 	
 	
 	

 ~~  
 
 !O#6#C 	 	
 	
 	
 	
 	
r1   namestrreturnNonec                :    | j                             |           d S r&   )r)   saveas)r.   r_   s     r/   exportzHatchAnalyzer.exportq   s    r1   hatchr   c                    |j                             d           t          |j         _        | j                            |           d S )N	extrusion)rV   discardrA   rD   r+   add_foreign_entity)r.   rf   s     r/   	add_hatchzHatchAnalyzer.add_hatcht   s=    	+&&&%	##E*****r1   c                H   |j                             d           d}|j        D ]}}|dz  }t          |t                    r|                     ||           3t          |t                    r|                     ||           _t          dt          |                     d S )Nrh   r      zunknown boundary path type: )
rV   ri   paths
isinstancer   add_polyline_markersr   add_edge_markers	TypeErrortype)r.   rf   path_numps       r/   add_boundary_markersz"HatchAnalyzer.add_boundary_markersy   s    	+&&& 	J 	JAMH!\** J))!X6666Ax(( J%%a2222 HtAww H HIII	J 	Jr1   locationr   rD   c                @    |                      t          |||           d S r&   )
add_markerr   r.   rw   r_   rD   s       r/   add_start_markerzHatchAnalyzer.add_start_marker   s!    )8T5AAAAAr1   c                @    |                      t          |||           d S r&   )ry   r   rz   s       r/   add_end_markerzHatchAnalyzer.add_end_marker   s     4?????r1   blk_namec                ~    | j                             |||| j        d          }|                    d|i           d S )N)rD   rotation)r_   insertrK   rO   )r+   add_blockrefr#   add_auto_attribs)r.   r~   rw   r_   rD   blkrefs         r/   ry   zHatchAnalyzer.add_marker   sX     && J  ' 
 
 	/////r1   ru   r   numintc                    |                      t          |j        d                   d| dt                     |                     t          |j        d                   d| dt                     d S )Nr   zPoly-S()zPoly-E()r{   r   verticesr7   r}   )r.   ru   r   s      r/   rp   z"HatchAnalyzer.add_polyline_markers   s    A!13!1!1!1>	
 	
 	
 	A!13!1!1!1>	
 	
 	
 	
 	
r1   r   c                   d}|j         D ]}|dz  }d| d| d}t          |t                    r|                     ||           <t          |t                    r|                     ||           ht          |t                    r|                     ||           t          |t                    r| 	                    ||           t          dt          |                     d S )Nr   rm   (.r   zunknown edge type: )edgesro   r   add_line_edge_markersr   add_arc_edge_markersr   add_ellipse_edge_markersr   add_spline_edge_markersrr   rs   )r.   ru   r   edge_numedger_   s         r/   rq   zHatchAnalyzer.add_edge_markers   s   G 	D 	DDMH(s((X(((D  D **46666D'** D))$5555D+.. D--dD9999D*-- D,,T48888 Bd4jj B BCCC	D 	Dr1   liner   c                    |                      |j        d|z   t                     |                     |j        d|z   t                     d S )NzLine-SzLine-E)r{   rM   r9   r}   rN   )r.   r   r_   s      r/   r   z#HatchAnalyzer.add_line_edge_markers   sD    dj(T/:FFFDHhozBBBBBr1   arcr   c                    |                      |j        d|z   t                     |                     |j        d|z   t                     d S )NzArc-SzArc-E)r{   start_pointr;   r}   	end_point)r.   r   r_   s      r/   r   z"HatchAnalyzer.add_arc_edge_markers   sD    cow~yIIICM7T>9EEEEEr1   ellipser   c                    |                      |j        d|z   t                     |                     |j        d|z   t                     d S )Nz	Ellipse-Sz	Ellipse-E)r{   r   r=   r}   r   )r.   r   r_   s      r/   r   z&HatchAnalyzer.add_ellipse_edge_markers   s\    t!3]	
 	
 	
 	{T1=	
 	
 	
 	
 	
r1   spliner   c                    t          |j                  rJ|                     |j        d|z   t                     |                     |j        d|z   t                     d S d S )NSplineSSplineE)lencontrol_pointsr{   r   r?   r}   r   )r.   r   r_   s      r/   r   z%HatchAnalyzer.add_spline_edge_markers   s{    v$%% 	 !!"I$4l    )d"2L    	 	r1   	list[str]c                     t          |           S r&   )hatch_reportrf   s    r/   reportzHatchAnalyzer.report   s    E"""r1   c                d    t          d                    t          |                                d S N
)printjoinr   r   s    r/   print_reportzHatchAnalyzer.print_report   s*    diiU++,,-----r1   N)r"   r$   r#   r$   )r_   r`   ra   rb   )rf   r   ra   rb   )rw   r   r_   r`   rD   r`   ra   rb   )
r~   r`   rw   r   r_   r`   rD   r`   ra   rb   )ru   r   r   r   ra   rb   )ru   r   r   r   ra   rb   )r   r   r_   r`   ra   rb   )r   r   r_   r`   ra   rb   )r   r   r_   r`   ra   rb   )r   r   r_   r`   ra   rb   rf   r   ra   r   )__name__
__module____qualname__r0   r,   r-   re   rk   rv   r{   r}   ry   rp   rq   r   r   r   r   staticmethodr   r    r1   r/   r   r   $   s        !	     ) ) )5
 5
 5
n   + + + +
J J J JB B B B@ @ @ @0 0 0 0
 
 
 
D D D D&C C C CF F F F
 
 
 
	 	 	 	 # # # \# . . . \. . .r1   r   rf   r   ra   r   c                   | j         }t          j        |j                 }t          j        |j                 }t          |            dt          |j                   d| d|j	         dt          |j
                   d| d| j        d u d| j        d u dt          | j                   d	t          | j                   g
}d
}| j        D ]x}|dz  }t!          |t"                    r$|                    t'          ||                     @t!          |t(                    r#|                    t+          ||                     y|S )Nz   solid fill: z   pattern type: z   pattern name: z   associative: z   island detection: z   has pattern data: z   has gradient data: z   seed value count: z   boundary path count: r   rm   )rV   r	   ISLAND_DETECTIONhatch_styleHATCH_PATTERN_TYPEpattern_typer`   bool
solid_fillpattern_nameassociativepatterngradientr   seedsrn   ro   r   extendpolyline_path_reportr   edge_path_report)rf   rV   styler   r^   r   paths          r/   r   r      s^   
)C"3?3E+C,<=Lu::0$s~..00*L**.C,..240022''';T 9;;=t!;==2EK 0 02253u{#3#355D C 5 5qdL)) 	5KK,T3778888h'' 	5KK(s33444Kr1   ru   r   r   r   c                    d                     t          j        | j                            }| dt	          | j                   d| gS )N, z. Polyline Path, vertex count: #   path type:                      )r   r	   boundary_path_flag_namespath_type_flagsr   r   )ru   r   	path_types      r/   r   r      sO    		%89JKKLLI@@s1:@@9i99 r1   r   c           	        d}d}d                     t          j        | j                            }| j        }t          |          rZ|d         j                            |d         j                  }t          d t          ||dd                    D                       }| dt          | j                   d| d	| d
| gS )NFr   r   c              3  Z   K   | ]&\  }}|j                             |j                  V  'd S r&   )r   iscloser   ).0e1e2s      r/   	<genexpr>z#edge_path_report.<locals>.<genexpr>  sL       
 
B L  00
 
 
 
 
 
r1   rm   z. Edge Path, edge count: r   z#   continuously connected edges:   z#   closed edge loop:               )r   r	   r   r   r   r   r   r   r   allzip)ru   r   closed	connectedr   r   s         r/   r   r      s    FI		%89JKKLLIGE
5zz 
q%--eBi.ABB 
 
eU122Y//
 
 
 
 
	 77QW779i999i996f66	 r1   MULTILEADER_MARKERPOINT_MARKERc                     e Zd ZdZdddd4dZd Zd Zed5d            Zed6d            Z	d7d8dZ
d9dZd:dZd;dZd Zd:dZd:dZd  Zd! Zd:d"Zd# Zd:d$Zd% Zd:d&Zd' Zd:d(Zd<d,Zd:d-Zd. Zd:d/Zd:d0Zd1 Zd:d2Z d3S )=MultileaderAnalyzerzMultileader can not be added as foreign entity to a new document.
    Annotations have to be added to the source document.

    r    O   )r"   report_widthmultileadermleader.MultiLeaderr"   r$   r   r   c               
   || _         || _        || _        | j        j        
J d            | j        j        | _        | j                                        | _        |                                  |                                  d S )Nzvalid DXF document required)r"   r   r   r)   r*   r+   r,   r-   )r.   r   r"   r   s       r/   r0   zMultileaderAnalyzer.__init__  s     '(&#//1N///#'8&&((r1   c                    | j         j                            t                    rd S | j         j                            t          t
          j                   d S r3   )r)   r5   	has_entryMULTILEADERr6   r   r:   rB   s    r/   r,   zMultileaderAnalyzer.init_layers(  sF    8?$$[11 	FKvz:::::r1   c                F   t           | j        j        vr| j        j                            t                     }ddi}| j        }|dz  }|dz  }|                    d||           |                    | df|df|           |                    d| fd|f|           d S d S )	NrD   rE   rF   g      @rG   rH   r   )rK   )r   r)   rR   r(   r"   rS   rT   )r.   r[   r\   sizesize_2rJ   s         r/   r-   z MultileaderAnalyzer.init_markers-  s    tx..(/%%l33CnG#DCZFCZFNN"    
 LL6'1{wLGGGLL!fW6{wLGGGGG /.r1   ra   mleader.MLeaderContextc                    | j         j        S r&   )r   contextrB   s    r/   r   zMultileaderAnalyzer.context<  s    ''r1   Optional[mleader.MLeaderStyle]c                ~    | j         j                            d          }| j        j                            |          S )Nstyle_handle)r   rV   getr)   entitydb)r.   handles     r/   mleaderstylez MultileaderAnalyzer.mleaderstyle@  s4    !%)).99x $$V,,,r1   -r`   c                    || j         z  S r&   )r   )r.   symbols     r/   divider_linez MultileaderAnalyzer.divider_lineE  s    )))r1   linesIterable[str]r   c                       fd|D             S )Nc                F    g | ]}t          j        |j                   S ))width)textwrapshortenr   )r   r   r.   s     r/   
<listcomp>z5MultileaderAnalyzer.shorten_lines.<locals>.<listcomp>I  s9     
 
 
@DHT):;;;
 
 
r1   r   )r.   r   s   ` r/   shorten_linesz!MultileaderAnalyzer.shorten_linesH  s.    
 
 
 
HM
 
 
 	
r1   c                H   t          | j                  |                                 d|                                 g}|                    |                                            |                    |                                            | j        j        '|                    |                                            | j        j	        Z|                    | 
                                           | j        j        r'|                    |                                            | j        j        j        r'|                    |                                            | j        j        r'|                    |                                            |                     |          S )NzExisting DXF attributes:)r`   r   r   r   multileader_attributescontext_attributesr   mtextmtext_attributesblockblock_attributesblock_attribsblock_reference_attribsleadersleader_attributesarrow_headsr   )r.   r   s     r/   r   zMultileaderAnalyzer.reportM  sc    !!&	
 	d1133444d--//000<)MM$//11222<)MM$//11222- >d::<<===#+ 	4MM$0022333' 	.MM$**,,---!!&)))r1   rb   c                    | j         }t                       t          d|z             t          d                    |                                                      t          d|z             d S )N=r   )r   r   r   r   )r.   r   s     r/   r   z MultileaderAnalyzer.print_reportb  s_    !cEkdii&&'''cEkr1   c                n    t          d                    |                                                      d S r   )r   r   overridden_attributesrB   s    r/   print_overridden_propertiesz/MultileaderAnalyzer.print_overridden_propertiesi  s.    dii22445566666r1   c                0   | j         }| j        }||                                 dt          |           d|j        j         d|                                 g}t          ||          }t          j                    D ]D}|	                    |          r-|
                    | d|                    |                      E|j        r|
                    d           n9| j         j                            d          }|                                 d| dg}|S )	NzOverride attributes of z: '': zuse_mtext_default_content: 1r   MLEADERSTYLE(#) not found)r   r   r   r`   rV   r_   r   r   keysis_overriddenappendr   use_mtext_default_content)r.   r   r   r   overrider_   r   s          r/   r  z)MultileaderAnalyzer.overridden_attributesl  s/   &!!!##J#e**JJJJJ!!##F ,E;??H%*,, C C))$// CMMT"A"AX\\$-?-?"A"ABBB1 ><===%)--n==F!!##4444F r1   c                    | j         j                                        t                                                    }fd|D             S )Nc                *    g | ]}| d |          S r  r   )r   keyr\   s     r/   r   z>MultileaderAnalyzer.multileader_attributes.<locals>.<listcomp>  s+    999S3(('#,((999r1   )r   rV   all_existing_dxf_attribssortedr  )r.   r  r\   s     @r/   r   z*MultileaderAnalyzer.multileader_attributes  sI    "&??AAgllnn%%9999D9999r1   c                    | j         j        j        }t          d           t          d|            t          dt	          |                      t          |           d S )Nz
property_override_flags:zdec: zhex: )r   rV   property_override_flagsr   hexr   )r.   flagss     r/   print_override_statez(MultileaderAnalyzer.print_override_state  sd     $<+,,,oeoo"c%jj""###er1   c                n    t          d                    |                                                      d S r   )r   r   r   rB   s    r/   print_context_attributesz,MultileaderAnalyzer.print_context_attributes  s.    dii//112233333r1   c                   | j         g S |                                 d|                                 dt          j                   dt          j                   |                                 g}d j                                        D             }fd|D             }|                                 |                    |           | 	                    |          S )NzCONTEXT object attributes:zhas MTEXT content: zhas BLOCK content: c                    g | ]}|d v|	S ))r   r  r  r   )r   r  s     r/   r   z:MultileaderAnalyzer.context_attributes.<locals>.<listcomp>  s.     
 
 
777 777r1   c                :    g | ]}| d t          |           S r  )getattr)r   r_   r   s     r/   r   z:MultileaderAnalyzer.context_attributes.<locals>.<listcomp>  s1    KKKd99$!7!799KKKr1   )
r   r   	yes_or_nor   r  __dict__r  sortr   r   )r.   r   r  
attributesr   s       @r/   r   z&MultileaderAnalyzer.context_attributes  s    ,?I(<)GM":":<<<)GM":":<<

 
',,..
 
 

 LKKKdKKK
j!!!!!&)))r1   c                n    t          d                    |                                                      d S r   )r   r   r   rB   s    r/   print_mtext_attributesz*MultileaderAnalyzer.print_mtext_attributes  .    dii--//0011111r1   c                    |                                  d|                                  g}| j        j        }|"|                    t	          |                     |                     |          S )NzMTEXT content attributes:)r   r   r   r   _content_attributesr   )r.   r   r   s      r/   r   z$MultileaderAnalyzer.mtext_attributes  k    '

 "MM-e44555!!&)))r1   c                n    t          d                    |                                                      d S r   )r   r   r  rB   s    r/   print_block_attributesz*MultileaderAnalyzer.print_block_attributes  r.  r1   c                    |                                  d|                                  g}| j        j        }|"|                    t	          |                     |                     |          S )NzBLOCK content attributes:)r   r   r  r   r0  r   )r.   r   r  s      r/   r  z$MultileaderAnalyzer.block_attributes  r1  r1   c                n    t          d                    |                                                      d S r   )r   r   r  rB   s    r/   print_leader_attributesz+MultileaderAnalyzer.print_leader_attributes  s.    dii..001122222r1   c                    g }| j         j        }|>t          |          D ].\  }}|                    |                     ||                     /|                     |          S r&   )r   r  	enumerater   _leader_attributesr   )r.   r   r  indexleaders        r/   r  z%MultileaderAnalyzer.leader_attributes  sm    ,&!*7!3!3 F Fvd55eVDDEEEE!!&)))r1   r:  r;  mleader.LeaderDatac                   |                                  |dz    d|                                  g}|                    t          |d                     d                    t	          t
          |j                            }|                    d| d           |j        r-|                    | 	                    |j                             |S )Nrm   z. LEADER attributes:)r   breaks)excluder   z	breaks: [])
r   r   r0  r   mapr`   r>  r  r   _leader_lines)r.   r:  r;  r   ss        r/   r9  z&MultileaderAnalyzer._leader_attributes  s     Qw,,,

 	)&:MNNNOOOIIc#v}--..&!&&&'''< 	<MM$,,V\::;;;r1   c                   g }t          |          D ]\  }}|                    |                                 |dz    d|                                 g           |j                                        D ]e\  }}|dv r3d}|(d                    t          t          |                    }d| d}nt          |          }|                    | d|            f|S )	Nrm   z. LEADER LINE attributes:)r   r>   r   [r@  r  )	r8  r   r   r)  itemsr   rA  r`   r  )r.   r   r   r   r   r_   valuevstrs           r/   rB  z!MultileaderAnalyzer._leader_lines  s   "5)) 	1 	1ICMM%%''Qw999%%''    $}2244 1 1e111D(#yyS%99&t;;;DDu::D////00001 r1   c                n    t          d                    |                                                      d S r   )r   r   r  rB   s    r/   print_block_attribsz'MultileaderAnalyzer.print_block_attribs  .    dii44667788888r1   c                   |                                  d|                                  g}t          | j        j                  D ]\  }}|                    |dz    d|                                  g           |                    d|j                    |                    d|j                    |                    d|j                    |                    d|j	                    |S )NzBLOCK reference attributes:rm   z. Attributeshandle: index: zwidth: ztext: )
r   r8  r   r  r   r  r   r:  r   r^   r.   r   r:  attrs       r/   r  z+MultileaderAnalyzer.block_reference_attribs  s   *

 %T%5%CDD 
	0 
	0KE4MMQw,,,%%''   MM2T[22333MM0DJ00111MM0DJ00111MM.49..////r1   c                h   |                                  d|                                  g}t          | j        j                  D ]n\  }}|                    |dz    d|                                  g           |                    d|j                    |                    d|j                    o|S )NzARROW HEAD attributes:rm   z. Arrow HeadrN  rO  )r   r8  r   r  r   r  r   r:  rP  s       r/   r  zMultileaderAnalyzer.arrow_heads
  s    %

 %T%5%ABB 	2 	2KE4MMQw,,,%%''   MM2T[22333MM0DJ001111r1   c                n    t          d                    |                                                      d S r   )r   r   mleaderstyle_attributesrB   s    r/   print_mleaderstylez&MultileaderAnalyzer.print_mleaderstyle  rL  r1   c                   g }| j         }||                    |                     d          t          |          |                     d          g           |j                                        t                                                    }|                    fd|D                        n8| j        j        	                    d          }|
                    d| d           |                     |          S )Nr	  c                *    g | ]}| d |          S r  r   )r   r_   r\   s     r/   r   z?MultileaderAnalyzer.mleaderstyle_attributes.<locals>.<listcomp>+  s+    GGG$d55gdm55GGGr1   r   r  r  )r   r   r   r`   rV   r  r  r  r   r   r  r   )r.   r   r   r  r   r\   s        @r/   rT  z+MultileaderAnalyzer.mleaderstyle_attributes  s    !MM%%c**JJ%%c**   i88::G',,..))DMMGGGG$GGGHHHH%)--n==FMM>6>>>???!!&)))r1   N)r   r   r"   r$   r   r   )ra   r   )ra   r   )r   ra   r`   )r   r   ra   r   )ra   r   )ra   rb   )r:  r   r;  r<  ra   r   )!r   r   r   __doc__r0   r,   r-   propertyr   r   r   r   r   r   r  r  r   r!  r#  r   r-  r   r3  r  r6  r  r9  rB  rK  r  r  rU  rT  r   r1   r/   r   r     sN         !      ; ; ;
H H H ( ( ( X( - - - X-* * * * *
 
 
 

* * * **   7 7 7   0: : : :
  4 4 4* * * *,2 2 2	* 	* 	* 	*2 2 2	* 	* 	* 	*3 3 3* * * *      *9 9 9   &   "9 9 9* * * * * *r1   r   r?  Optional[Sequence[str]]c                ^    pg | %fd| j                                         D             S g S )Nc                ,    g | ]\  }}|v	| d | S r  r   )r   r_   rH  r?  s      r/   r   z'_content_attributes.<locals>.<listcomp>7  s@     
 
 
e7"" u"""r1   )r)  rG  )entityr?  s    `r/   r0  r0  2  sT     mG
 
 
 
%4466
 
 
 	

 Ir1   r`   c                    | rdndS )Nyesnor   )datas    r/   r(  r(  ?  s    "55d"r1   r   )ru   r   r   r   ra   r   )ru   r   r   r   ra   r   r&   )r?  r[  ra   r   rX  )/
__future__r   typingr   r   r   r   r'   r   
ezdxf.mathr   ezdxf.lldxfr	   ezdxf.enumsr
   ezdxf.tools.debugr   ezdxf.render.mleaderr   r   ezdxf.entitiesr   r   r   r   r   r   r   ezdxf.entities.polygonr   r   r   rA   r7   r9   r;   r=   r?   r   r   r   r   r   r   r   r0  r(  r   r1   r/   <module>rl     s8   # " " " " " / / / / / / / / / /                     + + + + + + + + + + + + D D D D D D D D                  . - - - - -' #"
	 q. q. q. q. q. q. q. q.h   4      ( #]* ]* ]* ]* ]* ]* ]* ]*B	 04
 
 
 
 
# # # # # #r1   