Ë
    £èhN  ã                  óH  — d dl mZ d dlmZmZ d dlZd dlZd dlm	Z	m
Z
mZm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 dd
lmZ ddlmZmZmZ ddl m!Z! erd dl"m#Z# dgZ$ ed edd ¬«       edd¬«      dœ«      Z% ee%«      Z& eee&«      Z'e! G d„ de«      «       Z(y)é    )Úannotations)ÚTYPE_CHECKINGÚIteratorN)ÚVec3ÚMatrix44ÚConstructionArcÚarc_angle_span_deg)ÚOCSTransform)ÚDXFAttrÚDXFAttributesÚDefSubclassÚgroup_code_mappingÚmerge_group_code_mappings)ÚDXF12ÚSUBCLASS_MARKERé   )Ú
base_class)Úacdb_entity)Úacdb_circleÚCircleÚmerged_circle_group_codes)Úregister_entity)ÚAbstractTagWriterÚArcÚAcDbArcé2   )Údefaulté3   éh  )Ústart_angleÚ	end_anglec                  ó’   ‡ — e Zd ZdZdZ eeeee	«      Z
eZdˆ fd„Zedd„«       Zedd„«       Zdd„Zdd„Zdˆ fd„Zdd	„Zdd
„Zˆ xZS )r   zDXF ARC entityÚARCc                óÎ   •— t         ‰| �  |«       |j                  t        kD  r$|j	                  t
        t        j                  «       | j                  j                  |ddg«       y)z(Export entity specific data as DXF tags.r    r!   N)
ÚsuperÚexport_entityÚ
dxfversionr   Ú
write_tag2r   Úacdb_arcÚnameÚdxfÚexport_dxf_attribs)ÚselfÚ	tagwriterÚ	__class__s     €ú2lib/python3.12/site-packages/ezdxf/entities/arc.pyr&   zArc.export_entity8   sM   ø€ ä‰Ñ˜iÔ(ð ×Ñ¤%Ò'Ø× Ñ ¤´(·-±-Ô@Ø�‰×#Ñ# I°¸{Ð/KÕLó    c                ój   — t        | j                  | j                  j                  g«      «      }|d   S )zeReturns the start point of the arc in :ref:`WCS`, takes the :ref:`OCS` into
        account.
        r   )ÚlistÚverticesr+   r    ©r-   Úvs     r0   Ústart_pointzArc.start_pointA   s-   € ô
 �—‘ §¡× 4Ñ 4Ð5Ó6Ó7ˆØ�‰tˆr1   c                ój   — t        | j                  | j                  j                  g«      «      }|d   S )zcReturns the end point of the arc in :ref:`WCS`, takes the :ref:`OCS` into
        account.
        r   )r3   r4   r+   r!   r5   s     r0   Ú	end_pointzArc.end_pointI   s-   € ô
 �—‘ §¡× 2Ñ 2Ð3Ó4Ó5ˆØ�‰tˆr1   c              #  óî   K  — |dk  rt        d«      ‚| j                  j                  dz  }| j                  j                  dz  }||k  r|dz  }t	        j
                  |||d¬«      D ]	  }|dz  –— Œ y­w)z Yields `num` angles from start- to end angle in degrees in counter-clockwise
        orientation. All angles are normalized in the range from [0, 360).
        é   znum >= 2r   T)ÚnumÚendpointN)Ú
ValueErrorr+   r    r!   ÚnpÚlinspace)r-   r<   ÚstartÚstopÚangles        r0   Úanglesz
Arc.anglesQ   sv   è ø€ ð �Š7Ü˜ZÓ(Ð(Ø—‘×$Ñ$ sÑ*ˆØ�x‰x×!Ñ! CÑ'ˆØ�5Š=Ø�C‰KˆDÜ—[‘[ ¨°#À×EˆEØ˜#‘+Óñ Fùs   ‚A3A5c              #  óF  ‡K  — | j                  «       }| j                  «       }t        | j                  j                  «      j
                  Š|j                  r|j                  }nt        j                  } |ˆfd„|j                  |«      D «       «      E d{  –—†  y7 Œ­w)a  Approximate the arc by vertices in :ref:`WCS`, the argument `sagitta`_
        defines the maximum distance from the center of an arc segment to the center of
        its chord.

        .. _sagitta: https://en.wikipedia.org/wiki/Sagitta_(geometry)
        c              3  ó`   •K  — | ]%  }t        |j                  |j                  ‰«      –— Œ' y ­w)N)r   ÚxÚy)Ú.0ÚpÚ	elevations     €r0   Ú	<genexpr>z!Arc.flattening.<locals>.<genexpr>m   s%   øè ø€ ÐUÑ=T¸œ$˜qŸs™s A§C¡C¨×3Ñ=Tùs   ƒ+.N)
Úconstruction_toolÚocsr   r+   ÚcenterÚzÚ	transformÚpoints_to_wcsÚgenerateÚ
flattening)r-   ÚsagittaÚarcrN   Úto_wcsrK   s        @r0   rT   zArc.flattening^   sr   øè ø€ ð ×$Ñ$Ó&ˆØ�h‰h‹jˆÜ˜Ÿ™Ÿ™Ó)×+Ñ+ˆ	Ø�=Š=Ø×&Ñ&‰Fä—]‘]ˆFáÓU¸S¿^¹^ÈGÔ=TÓUÓU×UÒUús   ƒBB!ÂBÂB!c                ó†  •— t        | j                  j                  |«      }t        ‰| �  |«       | j                  j
                  }| j                  j                  }t        j                  t        ||«      d«      s3|j                  ||«      \  | j                  _        | j                  _        | j                  |«       | S )zˆTransform ARC entity by transformation matrix `m` inplace.
        Raises ``NonUniformScalingError()`` for non-uniform scaling.
        g     €v@)r
   r+   Ú	extrusionr%   Ú
_transformr    r!   ÚmathÚiscloser	   Útransform_ccw_arc_angles_degÚpost_transform)r-   ÚmrN   ÚsÚer/   s        €r0   rQ   zArc.transformo   sš   ø€ ô ˜4Ÿ8™8×-Ñ-¨qÓ1ˆÜ‰Ñ˜3ÔØ—8‘8×'Ñ'ˆØ—8‘8×%Ñ%ˆÜ�|‰|Ô.¨q°!Ó4°eÔ<ð ×0Ñ0°°AÓ6ñØ—‘Ô$Ø—‘Ô"à×Ñ˜AÔØˆr1   c                ó†   — | j                   }t        |j                  |j                  |j                  |j
                  «      S )zzReturns the 2D construction tool :class:`ezdxf.math.ConstructionArc` but the
        extrusion vector is ignored.
        )r+   r   rO   Úradiusr    r!   )r-   r+   s     r0   rM   zArc.construction_tool   s6   € ð �h‰hˆÜØ�J‰JØ�J‰JØ�O‰OØ�M‰Mó	
ð 	
r1   c                ó¸   — | j                   }t        |j                  «      |_        |j                  |_        |j                  |_        |j
                  |_        | S )z�Set ARC data from the construction tool :class:`ezdxf.math.ConstructionArc`
        but the extrusion vector is ignored.
        )r+   r   rO   rc   r    r!   )r-   rV   r+   s      r0   Úapply_construction_toolzArc.apply_construction_tool‹   sC   € ð �h‰hˆÜ˜#Ÿ*™*Ó%ˆŒ
Ø—Z‘ZˆŒ
ØŸ/™/ˆŒØŸ™ˆŒØˆr1   )r.   r   ÚreturnÚNone)rf   r   )r<   Úintrf   zIterator[float])rU   Úfloatrf   zIterator[Vec3])r_   r   rf   r   )rf   r   )rV   r   rf   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚDXFTYPEr   r   r   r   r)   Ú
DXFATTRIBSÚmerged_arc_group_codesÚMERGED_GROUP_CODESr&   Úpropertyr7   r9   rD   rT   rQ   rM   re   Ú__classcell__)r/   s   @r0   r   r   0   si   ø„ áà€GÙ˜z¨;¸ÀXÓN€JØ/ÐõMð òó ðð òó ðóóVõ"ó 

÷	r1   ))Ú
__future__r   Útypingr   r   r[   Únumpyr?   Ú
ezdxf.mathr   r   r   r	   Úezdxf.math.transformtoolsr
   Úezdxf.lldxf.attributesr   r   r   r   r   Úezdxf.lldxf.constr   r   Ú	dxfentityr   Údxfgfxr   Úcircler   r   r   Úfactoryr   Úezdxf.lldxf.tagwriterr   Ú__all__r)   Úacdb_arc_group_codesrp   r   © r1   r0   Ú<module>rƒ      s¯   ðõ #ß *Û Û ÷ó õ 3÷õ ÷ 5Ý !Ý ß BÑ BÝ $áÝ7àˆ'€áØá˜r¨1Ô-Ù˜R¨Ô-ñó€ñ *¨(Ó3Ð Ù2ØÐ3óÐ ð
 ôcˆ&ó có ñcr1   