
    OgJ                    2   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-d$dZ.y)%    )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	 	 	 ddZd 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dZddZd dZed!d       Zedd       Zy)"HatchAnalyzer      ?-   )marker_sizeanglec                   || _         || _        t        j                         | _        | j                  j                         | _        | j                          | j                          y N)	r"   r#   ezdxfnewdoc
modelspacemspinit_layersinit_markers)selfr"   r#   s      X/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/tools/analyze.py__init__zHatchAnalyzer.__init__%   sL     '
99;88&&(    c                   | j                   j                  j                  t        t        j
                         | j                   j                  j                  t        t        j                         | j                   j                  j                  t        t        j                         | j                   j                  j                  t        t        j                         | j                   j                  j                  t        t        j                         | j                   j                  j                  t               y 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&--@Jfjj9IV\\:M@L<K(r0   c                   | j                   j                  j                  t              }ddi}| j                  dz  }|}|j                  d||       |dz  }|j                  |df||dz  z
  df|       |j                  d	|
      }||j                  _	        |j                  |dft        j                         | j                   j                  j                  t              }ddi}|j                  | | f||f|       |j                  | |f|| f|       | dz  }|j                  | df||dz  z   df|       |j                  d	|
      }||j                  _	        |j                  |dft        j                         y )Nlayer0       @r   r   centerradius
dxfattribs   r   )startendrJ   NAME)tagrJ   )align)r(   blocksr'   r   r"   
add_circleadd_line
add_attdefdxfheightset_placementr
   MIDDLE_LEFTr   MIDDLE_RIGHT)r-   blkattribsrI   rV   
text_starttexts          r.   r,   zHatchAnalyzer.init_markers:   s   hhoo!!"34C.!!C' 	 	 	

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

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

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

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

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

 ~~  
 !O#6#C#C 	 	
r0   c                :    | j                   j                  |       y r%   )r(   saveas)r-   names     r.   exportzHatchAnalyzer.exportq   s    r0   c                    |j                   j                  d       t        |j                   _        | j                  j                  |       y )N	extrusion)rU   discardr@   rC   r*   add_foreign_entity)r-   hatchs     r.   	add_hatchzHatchAnalyzer.add_hatcht   s1    		+&%		##E*r0   c                "   |j                   j                  d       d}|j                  D ]c  }|dz  }t        |t              r| j                  ||       +t        |t              r| j                  ||       Nt        dt        |              y )Nrc   r      zunknown boundary path type: )
rU   rd   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AMH!\*))!X6Ax(%%a2">tAwi HII	Jr0   c                4    | j                  t        |||       y r%   )
add_markerr   r-   locationr`   rC   s       r.   add_start_markerzHatchAnalyzer.add_start_marker   s    )8T5Ar0   c                4    | j                  t        |||       y r%   )rt   r   ru   s       r.   add_end_markerzHatchAnalyzer.add_end_marker   s    4?r0   c                    | j                   j                  |||| j                  d      }|j                  d|i       y )N)rC   rotation)r`   insertrJ   rN   )r*   add_blockrefr#   add_auto_attribs)r-   blk_namerv   r`   rC   blkrefs         r.   rt   zHatchAnalyzer.add_marker   sF     && JJ ' 
 	/r0   c                    | j                  t        |j                  d         d| dt               | j	                  t        |j                  d         d| dt               y )Nr   zPoly-S()zPoly-E()rw   r   verticesr6   ry   )r-   rq   nums      r.   rl   z"HatchAnalyzer.add_polyline_markers   sZ    A73%q!1>	
 	A73%q!1>	
r0   c                   d}|j                   D ]  }|dz  }d| d| d}t        |t              r| j                  ||       4t        |t              r| j                  ||       Wt        |t              r| j                  ||       zt        |t              r| j                  ||       t        dt        |              y )Nr   ri   (.r   zunknown edge type: )edgesrk   r   add_line_edge_markersr   add_arc_edge_markersr   add_ellipse_edge_markersr   add_spline_edge_markersrn   ro   )r-   rq   r   edge_numedger`   s         r.   rm   zHatchAnalyzer.add_edge_markers   s    GG 	DDMHse1XJa(D **46D'*))$5D+.--dD9D*-,,T48"5d4j\ BCC	Dr0   c                    | j                  |j                  d|z   t               | j                  |j                  d|z   t               y )NzLine-SzLine-E)rw   rL   r8   ry   rM   )r-   liner`   s      r.   r   z#HatchAnalyzer.add_line_edge_markers   s6    djj(T/:FDHHhozBr0   c                    | j                  |j                  d|z   t               | j                  |j                  d|z   t               y )NzArc-SzArc-E)rw   start_pointr:   ry   	end_point)r-   arcr`   s      r.   r   z"HatchAnalyzer.add_arc_edge_markers   s6    coow~yICMM7T>9Er0   c                    | j                  |j                  d|z   t               | j                  |j                  d|z   t               y )Nz	Ellipse-Sz	Ellipse-E)rw   r   r<   ry   r   )r-   ellipser`   s      r.   r   z&HatchAnalyzer.add_ellipse_edge_markers   sD    t!3]	
 	{T1=	
r0   c                    t        |j                        rI| j                  |j                  d|z   t               | j                  |j                  d|z   t               y y )NSplineSSplineE)lencontrol_pointsrw   r   r>   ry   r   )r-   spliner`   s      r.   r   z%HatchAnalyzer.add_spline_edge_markers   sY    v$$% !!""I$4l   )d"2L &r0   c                    t        |       S r%   )hatch_reportrf   s    r.   reportzHatchAnalyzer.report   s    E""r0   c                J    t        dj                  t        |                    y N
)printjoinr   r   s    r.   print_reportzHatchAnalyzer.print_report   s    diiU+,-r0   N)r"   floatr#   r   )r`   strreturnNone)rf   r   r   r   )rv   r   r`   r   rC   r   r   r   )
r   r   rv   r   r`   r   rC   r   r   r   )rq   r   r   intr   r   )rq   r   r   r   r   r   )r   r   r`   r   r   r   )r   r   r`   r   r   r   )r   r   r`   r   r   r   )r   r   r`   r   r   r   rf   r   r   	list[str])__name__
__module____qualname__r/   r+   r,   ra   rg   rr   rw   ry   rt   rl   rm   r   r   r   r   staticmethodr   r    r0   r.   r   r   $   s     !	  	)5
n+
JB@00'+0360?B0	0
D&CF
	 # # . .r0   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 ]_  }|dz  }t!        |t"              r|j%                  t'        ||             4t!        |t(              sE|j%                  t+        ||             a |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   ri   )rU   r	   ISLAND_DETECTIONhatch_styleHATCH_PATTERN_TYPEpattern_typer   bool
solid_fillpattern_nameassociativepatterngradientr   seedsrj   rk   r   extendpolyline_path_reportr   edge_path_report)rf   rU   styler   r]   r   paths          r.   r   r      sH   
))C""3??3E++C,<,<=Lu:,
$s~~./0
L>*
C,,-.
4012
w'
T 9:;
 t!; <=
EKK 012
"3u{{#3"45D C 5qdL)KK,T378h'KK(s345 Kr0   c                    dj                  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   )rq   r   	path_types      r.   r   r      sM    		%889J9JKLI%.s1::.?@
-i[9 r0   c           	     v   d}d}dj                  t        j                  | j                              }| j                  }t        |      rJ|d   j                  j                  |d   j                        }t        d t        ||dd        D              }| dt        | j                         d| d	| d
| gS )NFr   r   c              3  l   K   | ],  \  }}|j                   j                  |j                         . y wr%   )r   iscloser   ).0e1e2s      r.   	<genexpr>z#edge_path_report.<locals>.<genexpr>  s/      
B LL  0
s   24ri   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)rq   r   closed	connectedr   r   s         r.   r   r      s    FI		%889J9JKLIGGE
5zq%%--eBi.A.AB 
eU12Y/
 
	 %(QWW7
-i[9
-i[9
-fX6	 r0   MULTILEADER_MARKERPOINT_MARKERc                     e Zd ZdZddd	 	 	 	 	 d"dZd Zd Zed#d       Zed$d	       Z	d%d&d
Z
d'd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(dZd Zd(d Z y!)+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_widthc                  || _         || _        || _        | j                  j                  J d       | j                  j                  | _        | j                  j	                         | _        | j                          | j                          y )Nzvalid DXF document required)r"   r   multileaderr(   r)   r*   r+   r,   )r-   r   r"   r   s       r.   r/   zMultileaderAnalyzer.__init__  sy     '(&##/N1NN/##''88&&(r0   c                    | j                   j                  j                  t              ry | j                   j                  j	                  t        t
        j                         y r2   )r(   r4   	has_entryMULTILEADERr5   r   r9   rA   s    r.   r+   zMultileaderAnalyzer.init_layers(  s:    88??$$[1Kvzz:r0   c                P   t         | j                  j                  vr| j                  j                  j                  t               }ddi}| j                  }|dz  }|dz  }|j                  d||       |j                  | df|df|       |j                  d| fd|f|       y y )	NrC   rD   rE   g      @rF   rG   r   )rJ   )r   r(   rQ   r'   r"   rR   rS   )r-   rZ   r[   sizesize_2rI   s         r.   r,   z MultileaderAnalyzer.init_markers-  s    txx.((//%%l3CnG##DCZFCZFNN"  
 LL6'1{wLGLL!fW6{wLG /r0   c                .    | j                   j                  S r%   )r   contextrA   s    r.   r   zMultileaderAnalyzer.context<  s    '''r0   c                    | j                   j                  j                  d      }| j                  j                  j                  |      S )Nstyle_handle)r   rU   getr(   entitydb)r-   handles     r.   mleaderstylez MultileaderAnalyzer.mleaderstyle@  s9    !!%%)).9xx  $$V,,r0   c                     || j                   z  S r%   )r   )r-   symbols     r.   divider_linez MultileaderAnalyzer.divider_lineE  s    ))))r0   c                j    |D cg c]#  }t        j                  || j                        % c}S c c}w )N)width)textwrapshortenr   )r-   linesr   s      r.   shorten_linesz!MultileaderAnalyzer.shorten_linesH  s2    HM
@DHT):):;
 	
 
s   (0c                0   t        | j                        | j                         d| j                         g}|j                  | j	                                |j                  | j                                | j                  j                  |j                  | j                                | j                  j                  T|j                  | j                                | j                  j                  r|j                  | j                                | j                  j                  j                  r|j                  | j                                | j                  j                  r|j                  | j                                | j!                  |      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  s+     !&	
 	d1134d--/0<<)MM$//12<<)MM$//12--d::<=##++MM$0023''MM$**,-!!&))r0   c                    | j                   }t                t        d|z         t        dj                  | j                                      t        d|z         y )N=r   )r   r   r   r   )r-   r   s     r.   r   z MultileaderAnalyzer.print_reportb  sA    !!cEkdii&'cEkr0   c                T    t        dj                  | j                                      y r   )r   r   overridden_attributesrA   s    r.   print_overridden_propertiesz/MultileaderAnalyzer.print_overridden_propertiesi  s    dii22456r0   c                0   | j                   }| j                  }|| j                         dt        |       d|j                  j
                   d| j                         g}t        ||      }t        j                         D ]9  }|j                  |      s|j                  | d|j                  |              ; |j                  r|j                  d       |S | j                   j                  j                  d      }| j                         d| dg}|S )	NzOverride attributes of z: '': zuse_mtext_default_content: 1r   MLEADERSTYLE(#) not found)r   r   r   r   rU   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   &&!!!!#)#e*S8HJ!!#F ,E;?H%**, C))$/MMTF"X\\$-?,@"ABC 11<=  %%))--n=F!!# 4F r0   c                    | j                   j                  j                         }t        |j	                               }|D cg c]  }| d||     c}S c c}w Nr  )r   rU   all_existing_dxf_attribssortedr  )r-   r[   r  keys       r.   r   z*MultileaderAnalyzer.multileader_attributes  sO    ""&&??Aglln%489S3%r'#,(999s   Ac                    | j                   j                  j                  }t        d       t        d|        t        dt	        |              t        |       y )Nz
property_override_flags:zdec: zhex: )r   rU   property_override_flagsr   hexr   )r-   flagss     r.   print_override_statez(MultileaderAnalyzer.print_override_state  sK      $$<<*,eWoc%j\"#er0   c                T    t        dj                  | j                                      y r   )r   r   r   rA   s    r.   print_context_attributesz,MultileaderAnalyzer.print_context_attributes  s    dii//123r0   c           	        | j                   }|g S | j                         d| j                         dt        |j                         dt        |j                         | j                         g}|j
                  j                         D cg c]  }|dvr|
 }}|D cg c]  }| dt        ||        }}|j                          |j                  |       | j                  |      S c c}w c c}w )NzCONTEXT object attributes:zhas MTEXT content: zhas BLOCK content: )r   r   r   r  )r   r   	yes_or_nor   r   __dict__r  getattrsortr   r   )r-   r   r   r  r  r`   
attributess          r.   r   z&MultileaderAnalyzer.context_attributes  s    ,,?I(!)GMM":!;<!)GMM":!;<
 '',,.
77 
 

 GKKdb$!7 89K
Kj!!!&))

 Ls   C*C/c                T    t        dj                  | j                                      y r   )r   r   r   rA   s    r.   print_mtext_attributesz*MultileaderAnalyzer.print_mtext_attributes      dii--/01r0   c                    | j                         d| j                         g}| j                  j                  }||j                  t	        |             | j                  |      S )NzMTEXT content attributes:)r   r   r   r   _content_attributesr   )r-   r   r   s      r.   r   z$MultileaderAnalyzer.mtext_attributes  ^    '

 ""MM-e45!!&))r0   c                T    t        dj                  | j                                      y r   )r   r   r   rA   s    r.   print_block_attributesz*MultileaderAnalyzer.print_block_attributes  r$  r0   c                    | j                         d| j                         g}| j                  j                  }||j                  t	        |             | j                  |      S )NzBLOCK content attributes:)r   r   r   r   r&  r   )r-   r   r   s      r.   r   z$MultileaderAnalyzer.block_attributes  r'  r0   c                T    t        dj                  | j                                      y r   )r   r   r   rA   s    r.   print_leader_attributesz+MultileaderAnalyzer.print_leader_attributes  s    dii..012r0   c                    g }| j                   j                  }|4t        |      D ]&  \  }}|j                  | j	                  ||             ( | j                  |      S r%   )r   r   	enumerater   _leader_attributesr   )r-   r   r   indexleaders        r.   r   z%MultileaderAnalyzer.leader_attributes  s`    ,,&&!*7!3 Fvd55eVDEF!!&))r0   c                t   | j                         |dz    d| j                         g}|j                  t        |d             dj                  t	        t
        |j                              }|j                  d| d       |j                  r*|j                  | j                  |j                               |S )Nri   z. LEADER attributes:)r   breaks)excluder   z	breaks: [])
r   r   r&  r   mapr   r3  r  r   _leader_lines)r-   r0  r1  r   ss        r.   r/  z&MultileaderAnalyzer._leader_attributes  s     Qwi+,

 	)&:MNOIIc#v}}-.	!A&'<<MM$,,V\\:;r0   c                ~   g }t        |      D ]  \  }}|j                  | j                         |dz    d| j                         g       |j                  j	                         D ]T  \  }}|dv r*d}|dj                  t        t        |            }d| d}nt        |      }|j                  | d|        V  |S )	Nri   z. LEADER LINE attributes:)r   r3   r   [r5  r  )	r.  r   r   r  itemsr   r6  r   r  )r-   r   r   r   r   r`   valuevstrs           r.   r7  z!MultileaderAnalyzer._leader_lines  s    "5) 	1ICMM%%'Qwi89%%'  $}}224 1e11D(#yyS%9tfA;Du:Db/01	1" r0   c                T    t        dj                  | j                                      y r   )r   r   r   rA   s    r.   print_block_attribsz'MultileaderAnalyzer.print_block_attribs      dii44678r0   c                   | j                         d| j                         g}t        | j                  j                        D ]  \  }}|j	                  |dz    d| j                         g       |j                  d|j                          |j                  d|j                          |j                  d|j                          |j                  d|j                           |S )NzBLOCK reference attributes:ri   z. Attributeshandle: index: zwidth: ztext: )
r   r.  r   r   r   r  r   r0  r   r]   r-   r   r0  attrs       r.   r   z+MultileaderAnalyzer.block_reference_attribs  s    )

 %T%5%5%C%CD 
	0KE4MMQwi|,%%' MMHT[[M23MMGDJJ<01MMGDJJ<01MMF499+./
	0 r0   c                \   | j                         d| j                         g}t        | j                  j                        D ]h  \  }}|j	                  |dz    d| j                         g       |j                  d|j                          |j                  d|j                          j |S )NzARROW HEAD attributes:ri   z. Arrow HeadrC  rD  )r   r.  r   r   r   r  r   r0  rE  s       r.   r   zMultileaderAnalyzer.arrow_heads
  s    $

 %T%5%5%A%AB 	2KE4MMQwi|,%%' MMHT[[M23MMGDJJ<01	2 r0   c                T    t        dj                  | j                                      y r   )r   r   mleaderstyle_attributesrA   s    r.   print_mleaderstylez&MultileaderAnalyzer.print_mleaderstyle  rA  r0   c           	        g }| j                   }||j                  | j                  d      t        |      | j                  d      g       |j                  j                         }t        |j                               }|j                  |D cg c]  }| d||     c}       n:| j                  j                  j                  d      }|j                  d| d       | j                  |      S c c}w )Nr  r  r   r	  r
  )r   r   r   r   rU   r  r  r  r   r   r  r   )r-   r   r   r[   r  r`   r   s          r.   rI  z+MultileaderAnalyzer.mleaderstyle_attributes  s    !!MM%%c*J%%c* ii88:G',,.)DMM$G$dV2gdm_5GH%%))--n=FMMN6(+>?!!&))	 Hs   C2N)r   zmleader.MultiLeaderr"   r   r   r   )r   zmleader.MLeaderContext)r   zOptional[mleader.MLeaderStyle])-r   r   )r   zIterable[str]r   r   )r   r   )r   r   )r0  r   r1  zmleader.LeaderDatar   r   )!r   r   r   __doc__r/   r+   r,   propertyr   r   r   r   r   r   r  r  r   r  r  r   r#  r   r)  r   r,  r   r/  r7  r@  r   r   rJ  rI  r   r0   r.   r   r     s     !( 	
  ;
H ( ( - -*

**70:
4*,2	*2	*3*"4	*9&"9*r0   r   c                    |xs g }| 6| j                   j                         D cg c]  \  }}||vr| d|  c}}S g S c c}}w r  )r  r<  )entityr4  r`   r=  s       r.   r&  r&  2  s`     mG  &446
e7" fBug
 	

 I
s   Ac                    | rdS dS )Nyesnor   )datas    r.   r  r  ?  s    5"d"r0   r   )rq   r   r   r   r   r   )rq   r   r   r   r   r   r%   )r4  zOptional[Sequence[str]]r   r   rM  )/
__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   r@   r6   r8   r:   r<   r>   r   r   r   r   r   r   r   r&  r  r   r0   r.   <module>r_     s    # / /      + + D   .' #"
	 q. q.h4( #]* ]*B	 04
,

#r0   