Ë
    £èhù  ã                  ó  — d dl mZ d dlmZmZmZmZ d dlZd dlZ	d dl
mZ d dlmZmZmZmZ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mZm Z  d	d
l!m"Z"m#Z# d	dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d	dl+m,Z, erd dl-m.Z. d dl/m0Z0 d dl-m1Z1m2Z2 dgZ3 ed edejh                  e¬«       edd	¬«       edd d¬«       edd d¬«       edejh                  edejj                  e¬«      dœ«      Z6 ee6«      Z7 ee*e7«      Z8e, G d„ de%«      «       Z9y)é    )Úannotations)ÚTYPE_CHECKINGÚIterableÚOptionalÚIteratorN)Ú	validator)ÚVec3ÚMatrix44ÚNULLVECÚZ_AXISÚarc_segment_count)ÚOCSTransformÚNonUniformScalingError)ÚDXFAttrÚDXFAttributesÚDefSubclassÚXTypeÚRETURN_DEFAULTÚgroup_code_mappingÚmerge_group_code_mappings)ÚDXF12ÚSUBCLASS_MARKERÚDXFValueErroré   )Ú
base_classÚSubclassProcessor)Ú
DXFGraphicÚacdb_entityÚ
add_entityÚreplace_entityÚelevation_to_z_axisÚacdb_entity_group_codes)Úregister_entity)ÚDXFNamespace)ÚAbstractTagWriter)ÚEllipseÚSplineÚCircleÚ
AcDbCircleé
   )ÚxtypeÚdefaulté(   )r,   é&   T)r,   Úoptionalé'   éÒ   )r+   r,   r/   r   Úfixer)ÚcenterÚradiusÚ	elevationÚ	thicknessÚ	extrusionc                  ó’   ‡ — e Zd ZdZdZ eeee«      Z	e
Z	 d	 	 	 dˆ fd„Zdˆ fd„Zdd„Zdd„Zdd„Zdd„Zdd	„Zddd
„Zddd„Zˆ xZS )r(   zDXF CIRCLE entityÚCIRCLEc                óš   •— t         t        | �  |«      }|r4|j                  || j                  «       |j
                  rt        |d«       |S )z!Loading interface. (internal API))r3   )Úsuperr   Úload_dxf_attribsÚsimple_dxfattribs_loaderÚMERGED_GROUP_CODESÚr12r!   )ÚselfÚ	processorÚdxfÚ	__class__s      €ú5lib/python3.12/site-packages/ezdxf/entities/circle.pyr<   zCircle.load_dxf_attribsQ   sE   ø€ ô
 ”J Ñ6°yÓAˆÙØ×.Ñ.¨s°D×4KÑ4KÔLØ�}Š}ä# C¨Ô5Øˆ
ó    c                óÎ   •— t         ‰| �  |«       |j                  t        kD  r$|j	                  t
        t        j                  «       | j                  j                  |g d¢«       y)z(Export entity specific data as DXF tags.)r3   r4   r6   r7   N)
r;   Úexport_entityÚ
dxfversionr   Ú
write_tag2r   Úacdb_circleÚnamerB   Úexport_dxf_attribs)r@   Ú	tagwriterrC   s     €rD   rG   zCircle.export_entity^   sL   ø€ ä‰Ñ˜iÔ(Ø×Ñ¤%Ò'Ø× Ñ ¤´+×2BÑ2BÔCØ�‰×#Ñ#ØÒEõ	
rE   c              #  ó
  K  — | j                  «       }t        | j                  j                  «      }t	        | j                  j
                  «      }|D ],  }|j                  t	        j                  ||«      |z   «      –— Œ. y­w)aN  Yields the vertices of the circle of all given `angles` as
        :class:`~ezdxf.math.Vec3` instances in :ref:`WCS`.

        Args:
            angles: iterable of angles in :ref:`OCS` as degrees, angle goes
                counter-clockwise around the extrusion vector, and the OCS x-axis
                defines 0-degree.

        N)ÚocsÚabsrB   r4   r	   r3   Úto_wcsÚfrom_deg_angle)r@   ÚanglesrO   r4   r3   Úangles         rD   ÚverticeszCircle.verticesg   sb   è ø€ ð �h‰h‹jˆÜ˜DŸH™HŸO™OÓ,ˆÜ�d—h‘h—o‘oÓ&ˆÛˆEØ—*‘*œT×0Ñ0°¸Ó?À&ÑHÓIÓIñ ùs   ‚BBc              #  óò   K  — t        | j                  j                  «      }|dkD  rMt        |t        j
                  |«      }| j                  t        j                  dd|dz   «      «      E d{  –—†  yy7 Œ­w)az  Approximate the circle by vertices in :ref:`WCS` as :class:`~ezdxf.math.Vec3`
        instances. The argument `sagitta`_ is the maximum distance from the center of an
        arc segment to the center of its chord. Yields a closed polygon where the start
        vertex is equal to the end  vertex!

        .. _sagitta: https://en.wikipedia.org/wiki/Sagitta_(geometry)
        g        g     €v@r   N)	rP   rB   r4   r   ÚmathÚtaurU   ÚnpÚlinspace)r@   Úsagittar4   Úcounts       rD   Ú
flatteningzCircle.flatteningw   s^   è ø€ ô �T—X‘X—_‘_Ó%ˆØ�CŠ<Ü% f¬d¯h©h¸Ó@ˆEØ—}‘}¤R§[¡[°°e¸UÀQ¹YÓ%GÓH×HÑHð àHús   ‚A,A7Á.A5Á/A7c                ó†   — | j                  t        | j                  j                  |«      «      }| j	                  |«       |S )z�Transform the CIRCLE entity by transformation matrix `m` inplace.
        Raises ``NonUniformScalingError()`` for non-uniform scaling.
        )Ú
_transformr   rB   r7   Úpost_transform)r@   ÚmÚcircles      rD   Ú	transformzCircle.transform„   s6   € ð —‘¤¨d¯h©h×.@Ñ.@À!Ó!DÓEˆØ×Ñ˜AÔØˆrE   c                óV  — | j                   }|j                  r‡|j                  |_        |j	                  |j
                  «      |_        |j                  |j                  ddf«      |_        |j                  d«      r |j                  |j                  «      |_
        | S t        d«      ‚)Nr   r6   z/CIRCLE/ARC does not support non uniform scaling)rB   Úscale_uniformÚnew_extrusionr7   Útransform_vertexr3   Útransform_lengthr4   ÚhasattrÚtransform_thicknessr6   r   )r@   rO   rB   s      rD   r_   zCircle._transformŒ   s“   € Ø�h‰hˆØ×ÒØ×-Ñ-ˆCŒMØ×-Ñ-¨c¯j©jÓ9ˆCŒJð ×-Ñ-¨s¯z©z¸1¸aÐ.@ÓAˆCŒJØ�{‰{˜;Ô'ð !$× 7Ñ 7¸¿¹Ó F�”ð ˆô	 )ØAóð rE   c                ó,  — | j                  «       }|j                  t        |||«      |j                  | j                  j
                  «      z   «      | j                  _        | j                  r&| j                  t        j                  |||«      «       | S )z�Optimized CIRCLE/ARC translation about `dx` in x-axis, `dy` in
        y-axis and `dz` in z-axis, returns `self` (floating interface).
        )
rO   Úfrom_wcsr	   rQ   rB   r3   Úis_post_transform_requiredr`   r
   Ú	translate)r@   ÚdxÚdyÚdzrO   s        rD   rn   zCircle.translate¡   sm   € ð �h‰h‹jˆØŸ,™,¤t¨B°°BÓ'7¸#¿*¹*ÀTÇXÁXÇ_Á_Ó:UÑ'UÓVˆ�‰Œà×*Ò*Ø×Ñ¤× 2Ñ 2°2°r¸2Ó >Ô?ØˆrE   c                óª   — ddl m} | j                  «       }|€t        d«      ‚ |j                  | «      }|rt        | ||«       |S t        ||«       |S )a(  Convert the CIRCLE/ARC entity to an :class:`~ezdxf.entities.Ellipse` entity.

        Adds the new ELLIPSE entity to the entity database and to the same layout as
        the source entity.

        Args:
            replace: replace (delete) source entity by ELLIPSE entity if ``True``

        r   )r&   úvalid layout required)Úezdxf.entitiesr&   Ú
get_layoutr   Úfrom_arcr    r   )r@   Úreplacer&   ÚlayoutÚellipses        rD   Ú
to_ellipsezCircle.to_ellipse¬   s]   € õ 	+à—‘Ó"ˆØˆ>ÜÐ 7Ó8Ð8Ø"�'×"Ñ" 4Ó(ˆÙÜ˜4 ¨&Ô1ð ˆô �w Ô'ØˆrE   c                óª   — ddl m} | j                  «       }|€t        d«      ‚ |j                  | «      }|rt        | ||«       |S t        ||«       |S )a$  Convert the CIRCLE/ARC entity to a :class:`~ezdxf.entities.Spline` entity.

        Adds the new SPLINE entity to the entity database and to the same layout as the
        source entity.

        Args:
            replace: replace (delete) source entity by SPLINE entity if ``True``

        r   )r'   rs   )rt   r'   ru   r   rv   r    r   )r@   rw   r'   rx   Úsplines        rD   Ú	to_splinezCircle.to_splineÂ   s[   € õ 	*à—‘Ó"ˆØˆ>ÜÐ 7Ó8Ð8Ø �—‘ Ó&ˆÙÜ˜4 ¨Ô0ð ˆô �v˜vÔ&ØˆrE   )N)rA   zOptional[SubclassProcessor]Úreturnr$   )rM   r%   r~   ÚNone)rS   zIterable[float]r~   úIterator[Vec3])r[   Úfloatr~   r€   )ra   r
   r~   r(   )rO   r   r~   r(   )ro   r�   rp   r�   rq   r�   r~   r(   )T)r~   r&   )r~   r'   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚDXFTYPEr   r   r   rJ   Ú
DXFATTRIBSÚmerged_circle_group_codesr>   r<   rG   rU   r]   rc   r_   rn   rz   r}   Ú__classcell__)rC   s   @rD   r(   r(   I   sh   ø„ áà€GÙ˜z¨;¸ÓD€JØ2Ðð 8<ðØ4ðà	õõ
óJó Ióóó*	ô÷,ð rE   ):Ú
__future__r   Útypingr   r   r   r   rW   ÚnumpyrY   Úezdxf.lldxfr   Ú
ezdxf.mathr	   r
   r   r   r   Úezdxf.math.transformtoolsr   r   Úezdxf.lldxf.attributesr   r   r   r   r   r   r   Úezdxf.lldxf.constr   r   r   Ú	dxfentityr   r   Údxfgfxr   r   r   r    r!   r"   Úfactoryr#   rt   r$   Úezdxf.lldxf.tagwriterr%   r&   r'   Ú__all__Úpoint3dÚis_not_null_vectorrJ   Úacdb_circle_group_codesrˆ   r(   © rE   rD   Ú<module>r›      s  ðõ #ß >Ó >Û Û å !÷õ ÷ K÷÷ ñ ÷ DÑ Cß 4÷÷ õ %áÝ+Ý7ß.àˆ*€áØá˜" E§M¡M¸7ÔCá˜" aÔ(ñ ˜R¨°TÔ:Ù˜R¨°TÔ:ÙØØ—-‘-ØØØ×2Ñ2Ø ô
ñó€ñ, -¨[Ó9Ð Ù5ØÐ4óÐ ð
 ôLˆZó Ló ñLrE   