
    'j                    t   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(dS )    )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AcDbArc2   )default3   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ARC	tagwriterr   returnNonec                    t                                          |           |j        t          k    r%|                    t
          t          j                   | j        	                    |ddg           dS )z(Export entity specific data as DXF tags.r    r!   N)
superexport_entity
dxfversionr   
write_tag2r   acdb_arcnamedxfexport_dxf_attribs)selfr$   	__class__s     L/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/entities/arc.pyr)   zArc.export_entity8   sf    i((( %''  (-@@@##I{/KLLLLL    r   c                l    t          |                     | 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    r0   vs     r2   start_pointzArc.start_pointA   s.    
  456677tr3   c                l    t          |                     | j        j        g                    }|d         S )zcReturns the end point of the arc in :ref:`WCS`, takes the :ref:`OCS` into
        account.
        r   )r5   r6   r.   r!   r7   s     r2   	end_pointzArc.end_pointI   s.    
  234455tr3   numintIterator[float]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  V  
dS )zYields `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)r<   endpointN)
ValueErrorr.   r    r!   nplinspace)r0   r<   startstopangles        r2   anglesz
Arc.anglesQ   s       77Z((($s*x!C'5==CKD[#EEE 	 	E#+	 	r3   sagittafloatIterator[Vec3]c              #  .  K   |                                  }|                                 }t          | j        j                  j        |j        r|j        }nt          j        } |fd|	                    |          D                       E d{V  dS )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  N   K   | ]}t          |j        |j                  V   d S )N)r   xy).0p	elevations     r2   	<genexpr>z!Arc.flattening.<locals>.<genexpr>m   s3      UU$qsAC33UUUUUUr3   N)
construction_toolocsr   r.   centerz	transformpoints_to_wcsgenerate
flattening)r0   rI   arcrU   to_wcsrR   s        @r2   r[   zArc.flattening^   s       $$&&hhjj))+	= 	#&FF]F6UUUUS^^G=T=TUUUUUUUUUUUUUUr3   mr   c                x   t          | j        j        |          }t                                          |           | j        j        }| j        j        }t          j        t          ||          d          s-|
                    ||          \  | j        _        | j        _        |                     |           | S )zTransform 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)r0   r^   rU   ser1   s        r2   rX   zArc.transformo   s     48-q1138'8%|.q!44e<< 	7 00A66$"Ar3   r   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   rV   radiusr    r!   )r0   r.   s     r2   rT   zArc.construction_tool   s1     hJJOM	
 
 	
r3   r\   c                    | j         }t          |j                  |_        |j        |_        |j        |_        |j        |_        | S )zSet ARC data from the construction tool :class:`ezdxf.math.ConstructionArc`
        but the extrusion vector is ignored.
        )r.   r   rV   ri   r    r!   )r0   r\   r.   s      r2   apply_construction_toolzArc.apply_construction_tool   s<     h#*%%
Z
/r3   )r$   r   r%   r&   )r%   r   )r<   r=   r%   r>   )rI   rJ   r%   rK   )r^   r   r%   r   )r%   r   )r\   r   r%   r   )__name__
__module____qualname____doc__DXFTYPEr   r   r   r   r,   
DXFATTRIBSmerged_arc_group_codesMERGED_GROUP_CODESr)   propertyr9   r;   rH   r[   rX   rT   rk   __classcell__)r1   s   @r2   r   r   0   s       Gz;XNNJ/M M M M M M    X    X   V V V V"      

 

 

 

	 	 	 	 	 	 	 	r3   ))
__future__r   typingr   r   rb   numpyrC   
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_codesrr   r    r3   r2   <module>r      s#   # " " " " " * * * * * * * *                 3 2 2 2 2 2              5 4 4 4 4 4 4 4 ! ! ! ! ! !       B B B B B B B B B B $ $ $ $ $ $ 8777777';wr1---WR---   *)(33 223  
 c c c c c& c c c c cr3   