Ë
    £èhRB  ã                  óT  — d dl mZ d dlmZmZmZmZmZ d dlm	Z	 d dl
Z
d dlZd dlmZ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 ddl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& ddl'm(Z( ddlm)Z) erd dlm*Z* ejV                  Z+dgZ,h d£Z-h d£Z. G d„ de"«      Z/y)é    )Úannotations)ÚSequenceÚOptionalÚUnionÚTYPE_CHECKINGÚIterator)ÚSelfN)ÚAuditorÚ
AuditError)Úconst)ÚTags)Úcolors)Úpattern)ÚVec3ÚMatrix44)ÚOCSTransformé   )ÚBoundaryPaths)ÚSubclassProcessorÚDXFNamespace)Ú
DXFGraphic)ÚGradient)ÚPatternÚPatternLine)Ú	DXFEntity)Údefault_copy)ÚxrefÚ
DXFPolygon>   éJ  é
   é   é   é   é(   é*   é2   é3   éH   éI   éJ   é\   é]   é^   é_   é`   éa   >   é+   é,   é-   é.   é1   é5   éO   c                  ó  ‡ — e Zd ZU dZi Zded<   d ˆ fd„Zefd!d„Z	 d"	 	 	 d#ˆ fd„Z	d$d„Z
d$d„Zd$d	„Zd%ˆ fd
„Zd$d„Zed&d„«       Zed&d„«       Zed&d„«       Zed'd„«       Zej(                  d(d„«       Zej*                  d d„«       Z eddd«       eddd«      dddddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d)d„Z	 	 	 	 	 	 	 d*	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d+d„Z	 d,	 	 	 	 	 	 	 d-d„Zd.d„Zd/d„Zd0d„Zd1d2d„Zd3d„Zej@                  d4d5d„«       Z!d6ˆ fd„Z"ˆ xZ#S )7r   z1Base class for the HATCH and the MPOLYGON entity.z dict[int, Union[str, list[str]]]ÚLOAD_GROUP_CODESc                ój   •— t         ‰| �  «        t        «       | _        d | _        d | _        g | _        y ©N)ÚsuperÚ__init__r   Úpathsr   ÚgradientÚseeds)ÚselfÚ	__class__s    €ú6lib/python3.12/site-packages/ezdxf/entities/polygon.pyr=   zDXFPolygon.__init__<   s,   ø€ Ü‰ÑÔÜ"“_ˆŒ
Ø*.ˆŒØ,0ˆŒØ02ˆ�
ó    c                óH  — t        |t        «      sJ ‚t        j                  | j                  «      |_        t        j                  | j
                  «      |_        t        j                  | j                  «      |_        t        j                  | j                  «      |_        y)z%Copy paths, pattern, gradient, seeds.N)Ú
isinstancer   ÚcopyÚdeepcopyr>   r   r?   r@   )rA   ÚentityÚcopy_strategys      rC   Ú	copy_datazDXFPolygon.copy_dataC   sb   € ä˜&¤*Ô-Ð-Ð-Ü—}‘} T§Z¡ZÓ0ˆŒÜŸ™ t§|¡|Ó4ˆŒÜŸ-™-¨¯©Ó6ˆŒÜ—}‘} T§Z¡ZÓ0ˆ�rD   c                ó&  •— t         ‰| �  |«      }|r~t        |j                  d   dd  «      }| j	                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|j                  || j                  |d¬«       |S )Né   r   T)ÚsubclassÚrecover)
r<   Úload_dxf_attribsr   Ú
subclassesÚ
load_pathsÚload_gradientÚload_patternÚ
load_seedsÚfast_load_dxfattribsr9   )rA   Ú	processorÚdxfÚtagsrB   s       €rC   rP   zDXFPolygon.load_dxf_attribsK   sš   ø€ ô ‰gÑ& yÓ1ˆÙä˜	×,Ñ,¨QÑ/°°Ð3Ó4ˆDà—?‘? 4Ó(ˆDà×%Ñ% dÓ+ˆDà×$Ñ$ TÓ*ˆDà—?‘? 4Ó(ˆDð ×*Ñ*Ø�T×*Ñ*°TÀ4ð +ô ð ˆ
rD   c                óN  — 	 |j                  d«      }|j                  t        |dz   ¬«      }t        |«      rt        j                  |«      | _
        |t        |«      z   dz   }|||…= |S # t        j                  $ r' t        j                  | j	                  «       › d�«      ‚w xY w)Né[   zH: Missing required DXF tag 'Number of boundary paths (loops)' (code=91).r   ©Ústart)Ú	tag_indexr   ÚDXFValueErrorÚDXFStructureErrorÚdxftypeÚcollect_consecutive_tagsÚ
PATH_CODESÚlenr   Ú	load_tagsr>   )rA   rY   Ústart_indexÚ	path_tagsÚ	end_indexs        rC   rR   zDXFPolygon.load_pathsa   s¯   € ð	ØŸ.™.¨Ó,ˆKð ×1Ñ1´*ÀKÐRSÁOÐ1ÓTˆ	ÜˆyŒ>Ü&×0Ñ0°Ó;ˆDŒJØ¤# i£.Ñ0°1Ñ4ˆ	Ø�˜YÐ&Ð'Øˆøô ×"Ñ"ò 	Ü×)Ñ)Ø—<‘<“>Ð"ð #5ð 6óð ð	ús   ‚A* Á*:B$c                óð   — 	 |j                  d«      }|j                  t        |dz   ¬«      }t        j                  |«      | _        |||t        |«      z   dz   …= |S # t        j                  $ r |cY S w xY w)NéN   r   r\   )	r^   r   r_   rb   ÚPATTERN_DEFINITION_LINE_CODESr   re   r   rd   )rA   rY   ÚindexÚpattern_tagss       rC   rT   zDXFPolygon.load_patterns   sˆ   € ð	à—N‘N 2Ó&ˆEð
 ×4Ñ4Ü)°¸±ð 5ó 
ˆô ×(Ñ(¨Ó6ˆŒð �˜¤ \Ó!2Ñ2°QÑ6Ð6Ð7Øˆøô ×"Ñ"ò 	àŠKð	ús   ‚A ÁA5Á4A5c                ó¤   — 	 |j                  d«      }t        j                  ||d  «      | _        ||d …= |S # t        j                  $ r |cY S w xY w)NiÂ  )r^   r   r_   r   re   r?   )rA   rY   rl   s      rC   rS   zDXFPolygon.load_gradient„   sY   € ð	Ø—N‘N 3Ó'ˆEô !×*Ñ*¨4°°¨<Ó8ˆŒà�‘ˆLØˆøô ×"Ñ"ò 	àŠKð	ús   ‚7 ·AÁAc                óL  •— t        |t        «      sJ ‚|j                  €J ‚t        ‰| �  ||«       |j                  j
                  }|j                  D ]D  }|j                  D �cg c]  }|j                  |«      ‘Œ }}|D �cg c]	  }||v sŒ|‘Œ c}|_        ŒF yc c}w c c}w )z3Translate resources from self to the copied entity.N)	rF   r   Údocr<   Úmap_resourcesÚentitydbr>   Úsource_boundary_objectsÚ
get_handle)rA   ÚcloneÚmappingÚdbÚpathÚhÚhandlesrB   s          €rC   rq   zDXFPolygon.map_resources‘   s™   ø€ ä˜%¤Ô,Ð,Ð,Ø�y‰yÐ$Ð$Ð$ä‰Ñ˜e WÔ-Ø�Y‰Y×ÑˆØ—K”KˆDØ6:×6RÒ6RÓSÑ6R°�w×)Ñ)¨!Õ,Ð6RˆGÐSÙ7>Ó+J±w°!À!ÀrÂ'ªA°wÑ+JˆDÕ(ñ  ùÚSùÚ+Js   Á%BÂ	B!ÂB!c                ó   — |S r;   © )rA   rY   s     rC   rU   zDXFPolygon.load_seedsœ   s   € ØˆrD   c                ó@   — t        | j                  j                  «      S )z0``True`` if entity has a solid fill. (read only)©ÚboolrX   Ú
solid_fill©rA   s    rC   Úhas_solid_fillzDXFPolygon.has_solid_fillŸ   s   € ô �D—H‘H×'Ñ'Ó(Ð(rD   c                óB   — t        | j                  j                  «       S )z2``True`` if entity has a pattern fill. (read only)r~   r�   s    rC   Úhas_pattern_fillzDXFPolygon.has_pattern_fill¤   s   € ô ˜Ÿ™×+Ñ+Ó,Ð,Ð,rD   c                ó,   — t        | j                  «      S )zv``True`` if entity has a gradient fill. A hatch with gradient fill
        has also a solid fill. (read only)
        )r   r?   r�   s    rC   Úhas_gradient_datazDXFPolygon.has_gradient_data©   s   € ô
 �D—M‘MÓ"Ð"rD   c                óò   — 	 | j                  d«      }|j                  dd«      }	 t	        j
                  t        |«      «      S # t        j                  $ r Y yw xY w# t        $ r t        ddd«      cY S w xY w)at  
        Set pattern fill background color as (r, g, b)-tuple, rgb values
        in the range [0, 255] (read/write/del)

        usage::

            r, g, b = entity.bgcolor  # get pattern fill background color
            entity.bgcolor = (10, 20, 30)  # set pattern fill background color
            del entity.bgcolor  # delete pattern fill background color

        ÚHATCHBACKGROUNDCOLORNé/  r   )	Ú	get_xdatar   r_   Úget_first_valuer   Úint2rgbÚintÚ
ValueErrorÚRGB)rA   Úxdata_bgcolorÚcolors      rC   ÚbgcolorzDXFPolygon.bgcolor°   sz   € ð	Ø ŸN™NÐ+AÓBˆMð ×-Ñ-¨d°AÓ6ˆð	 Ü—>‘>¤# e£*Ó-Ð-øô	 ×"Ñ"ò 	Ùð	ûô
 ò 	 Ü�q˜!˜Q“<Òð	 ús"   ‚A ¦A ÁAÁAÁA6Á5A6c                ó€   — t        j                  |«      dz  }| j                  d«       | j                  dd|fg«       y )Ni   Ârˆ   r‰   )r   Úrgb2intÚdiscard_xdataÚ	set_xdata)rA   ÚrgbÚcolor_values      rC   r’   zDXFPolygon.bgcolorÇ   sC   € ô �N‰N˜3ÓÐ"CÑCð 	ð 	×ÑÐ1Ô2Ø�‰Ð-°°{Ð0CÐ/DÕErD   c                ó&   — | j                  d«       y )Nrˆ   )r•   r�   s    rC   r’   zDXFPolygon.bgcolorÐ   s   € à×ÑÐ1Õ2rD   r   éÿ   ç        ÚLINEARc                ó   — | j                   �<| j                   j                  t        j                  k  rt        j                  d«      ‚|r*|t        j
                  vrt        j                  d|› �«      ‚d| _        d| j                  _	        d| j                  _
        t        j                  | j                  _        t        «       }||_        ||_        ||_        ||_        ||_        ||_        ||_        || _        y)a'  Sets the gradient fill mode and removes all pattern fill related data, requires
        DXF R2004 or newer.  A gradient filled hatch is also a solid filled hatch.

        Valid gradient type names are:

            - "LINEAR"
            - "CYLINDER"
            - "INVCYLINDER"
            - "SPHERICAL"
            - "INVSPHERICAL"
            - "HEMISPHERICAL"
            - "INVHEMISPHERICAL"
            - "CURVED"
            - "INVCURVED"

        Args:
            color1: (r, g, b)-tuple for first color, rgb values as int in
                the range [0, 255]
            color2: (r, g, b)-tuple for second color, rgb values as int in
                the range [0, 255]
            rotation: rotation angle in degrees
            centered: determines whether the gradient is centered or not
            one_color: 1 for gradient from `color1` to tinted `color1`
            tint: determines the tinted target `color1` for a one color
                gradient. (valid range 0.0 to 1.0)
            name: name of gradient type, default "LINEAR"

        Nz#Gradient support requires DXF R2004zInvalid gradient type name: r   ÚSOLID)rp   Ú
dxfversionr   ÚDXF2004ÚDXFVersionErrorÚGRADIENT_TYPESr_   r   rX   r€   Úpattern_nameÚHATCH_TYPE_PREDEFINEDÚpattern_typer   Úcolor1Úcolor2Ú	one_colorÚrotationÚcenteredÚtintÚnamer?   )	rA   r¦   r§   r©   rª   r¨   r«   r¬   r?   s	            rC   Úset_gradientzDXFPolygon.set_gradientÔ   sÒ   € ðL �8‰8Ð D§H¡H×$7Ñ$7¼%¿-¹-Ò$GÜ×'Ñ'Ð(MÓNÐNÙ�D¤× 4Ñ 4Ñ4Ü×%Ñ%Ð(DÀTÀFÐ&KÓLÐLàˆŒØˆ�‰ÔØ 'ˆ�‰ÔÜ %× ;Ñ ;ˆ�‰Ôä“:ˆØ ˆŒØ ˆŒØ&ˆÔØ$ˆÔØ$ˆÔØˆŒØˆŒØ ˆ�rD   c	                óª  — d| _         d| j                  _        || j                  _        || j                  _        t        |«      | j                  _        t        |«      | j                  _        t        |«      | j                  _	        || j                  _
        || j                  _        |€kd}	| j                  r&| j                  j                  j                  d|	«      }	|	rt        j                   nt        j"                  }
|
j                  ||
d   «      }| j%                  || j                  j                  | j                  j                  ¬«       y)aú  Sets the pattern fill mode and removes all gradient related data.

        The pattern definition should be designed for a scale factor 1 and a rotation
        angle of 0 degrees.  The predefined hatch pattern like "ANSI33" are scaled
        according to the HEADER variable $MEASUREMENT for ISO measurement (m, cm, ... ),
        or imperial units (in, ft, ...), this replicates the behavior of BricsCAD.

        Args:
            name: pattern name as string
            color: pattern color as :ref:`ACI`
            angle: pattern rotation angle in degrees
            scale: pattern scale factor
            double: double size flag
            style: hatch style (0 = normal; 1 = outer; 2 = ignore)
            pattern_type: pattern type (0 = user-defined;
                1 = predefined; 2 = custom)
            definition: list of definition lines and a definition line is a
                4-tuple [angle, base_point, offset, dash_length_items],
                see :meth:`set_pattern_definition`

        Nr   r   z$MEASUREMENTÚANSI31©ÚfactorÚangle)r?   rX   r€   r£   r‘   ÚfloatÚpattern_scaleÚpattern_angler�   Úpattern_doubleÚhatch_styler¥   rp   ÚheaderÚgetr   ÚISO_PATTERNÚIMPERIAL_PATTERNÚset_pattern_definition)rA   r¬   r‘   r²   ÚscaleÚdoubleÚstyler¥   Ú
definitionÚmeasurementÚpredefined_patterns              rC   Úset_pattern_fillzDXFPolygon.set_pattern_fill  s  € ð@ ˆŒØˆ�‰ÔØ $ˆ�‰ÔØˆ�‰ŒÜ!& u£ˆ�‰ÔÜ!& u£ˆ�‰ÔÜ"% f£+ˆ�‰ÔØ$ˆ�‰ÔØ ,ˆ�‰ÔàÐØˆKØ�xŠxØ"Ÿh™hŸo™o×1Ñ1°.À+ÓN�á'2”×#Ò#¼×8PÑ8Pð ð ,×/Ñ/°Ð6HÈÑ6RÓSˆJØ×#Ñ#ØØ—8‘8×)Ñ)Ø—(‘(×(Ñ(ð 	$õ 	
rD   c                ó¸   — |dk7  s|rt        j                  |||¬«      }t        |D �cg c]  }t        |d   |d   |d   |d   «      ‘Œ c}«      | _         yc c}w )a¨  Setup pattern definition by a list of definition lines and the
        definition line is a 4-tuple (angle, base_point, offset, dash_length_items).
        The pattern definition should be designed for a pattern scale factor of 1 and
        a pattern rotation angle of 0.

            - angle: line angle in degrees
            - base-point: (x, y) tuple
            - offset: (dx, dy) tuple
            - dash_length_items: list of dash items (item > 0 is a line,
              item < 0 is a gap and item == 0.0 is a point)

        Args:
            lines: list of definition lines
            factor: pattern scale factor
            angle: rotation angle in degrees

        r   r°   r   rM   é   N)r   Úscale_patternr   r   )rA   Úlinesr±   r²   Úlines        rC   r¼   z!DXFPolygon.set_pattern_definitionF  s]   € ð( �QŠ;™%Ü×)Ñ)¨%¸ÀeÔLˆEÜÙINÓOÉÀŒ[˜˜a™ $ q¡'¨4°©7°D¸±GÕ<ÈÑOó
ˆ�ùÚOs   ©!Ac                óœ   — | j                   sy| j                  }| j                  j                  d|j                  z  |z  ¬«       ||_        y)a	  Sets the pattern scale factor and scales the pattern definition.

        The method always starts from the original base scale, the
        :code:`set_pattern_scale(1)` call resets the pattern scale to the original
        appearance as defined by the pattern designer, but only if the pattern attribute
        :attr:`dxf.pattern_scale` represents the actual scale, it cannot
        restore the original pattern scale from the pattern definition itself.

        Args:
            scale: pattern scale factor

        Nç      ð?)r±   )r„   rX   r   r½   r´   )rA   r½   rX   s      rC   Úset_pattern_scalezDXFPolygon.set_pattern_scale`  sF   € ð ×$Ò$ØØ�h‰hˆØ�‰×Ñ #¨×(9Ñ(9Ñ"9¸EÑ"AÐÔBØ!ˆÕrD   c                óœ   — | j                   sy| j                  }| j                  j                  ||j                  z
  ¬«       |dz  |_        y)a>  Sets the pattern rotation angle and rotates the pattern definition.

        The method always starts from the original base rotation of 0, the
        :code:`set_pattern_angle(0)` call resets the pattern rotation angle to the
        original appearance as defined by the pattern designer, but only if the
        pattern attribute :attr:`dxf.pattern_angle` represents the actual pattern
        rotation, it cannot restore the original rotation angle from the
        pattern definition itself.

        Args:
            angle: pattern rotation angle in degrees

        N)r²   g     €v@)r„   rX   r   r½   rµ   )rA   r²   rX   s      rC   Úset_pattern_anglezDXFPolygon.set_pattern_angles  sE   € ð ×$Ò$ØØ�h‰hˆØ�‰×Ñ ¨×):Ñ):Ñ!:ÐÔ;Ø! E™MˆÕrD   c                ó˜  — | j                   }t        |j                  |«      }t        |j                  «      j
                  }| j                  j                  ||¬«       |j                  t        dd|«      «      j                  dd¬«      |_        |j                  |_        | j                  r‹|j                  | j                   j                  ddf«      }|j                  | j                   j                  «      }| j                  j!                  ||«       || j                   _        || j                   _        | j#                  |«       | S )z6Transform entity by transformation matrix `m` inplace.)Ú	elevationr   r›   )ÚxÚy)rX   r   Ú	extrusionr   rÏ   Úzr>   Ú	transformÚtransform_vertexÚreplaceÚnew_extrusionr   Útransform_lengthr´   Útransform_deg_anglerµ   r½   Úpost_transform)rA   ÚmrX   ÚocsrÏ   r±   r²   s          rC   rÔ   zDXFPolygon.transform‡  s	  € à�h‰hˆÜ˜3Ÿ=™=¨!Ó,ˆä˜Ÿ™Ó'×)Ñ)ˆ	Ø�
‰
×Ñ˜S¨IÐÔ6Ø×,Ñ,¬T°!°Q¸	Ó-BÓC×KÑKØ�Sð Ló 
ˆŒð ×)Ñ)ˆŒØ�<Š<ð ×)Ñ)¨4¯8©8×+AÑ+AÀ1ÀaÐ*HÓIˆFØ×+Ñ+¨D¯H©H×,BÑ,BÓCˆEà�L‰L×Ñ˜v uÔ-Ø%+ˆD�H‰HÔ"Ø%*ˆD�H‰HÔ"Ø×Ñ˜AÔØˆrD   c              #  óˆ  ‡K  — ddl m} t        | j                  j                  «      Š| j                  j                  d«      r"‰t        | j                  j                  «      z  Š| j                  D �cg c]  }|j                  |«      ‘Œ }}|j                  |||«      D ]  }t        ˆfd„|D «       «      –— Œ yc c}w ­w)u¿  Triangulate the HATCH/MPOLYGON in OCS coordinates, Elevation and offset is
        applied to all vertices.

        Args:
            max_sagitta: maximum distance from the center of the curve to the
                center of the line segment between two approximation points to determine
                if a segment should be subdivided.
            min_segments: minimum segment count per BÃ©zier curve

        .. versionadded:: 1.1

        r   )rx   Úoffsetc              3  ó(   •K  — | ]	  }‰|z   –— Œ y ­wr;   r|   )Ú.0ÚvrÏ   s     €rC   Ú	<genexpr>z)DXFPolygon.triangulate.<locals>.<genexpr>²  s   øè ø€ Ð8©x¨!˜	 A�©xùs   ƒN)Úezdxfrx   r   rX   rÏ   ÚhasattrrÞ   r>   Úfrom_hatch_boundary_pathÚtriangulateÚtuple)rA   Úmax_sagittaÚmin_segmentsrx   ÚpÚboundary_pathsÚverticesrÏ   s          @rC   ræ   zDXFPolygon.triangulatež  s�   øè ø€ õ 	ä˜Ÿ™×+Ñ+Ó,ˆ	Ø�8‰8×Ñ˜HÔ%Øœ˜dŸh™hŸo™oÓ.Ñ.ˆIØDHÇJÂJÓOÁJ¸q˜$×7Ñ7¸Õ:ÀJˆÐOØ×(Ñ(¨¸ÀlÖSˆHÜÓ8©xÓ8Ó8Ó8ñ Tùò Pùs   ƒA1CÁ4B=Â6Cc              #  ó”   K  — ddl m} | j                  r	 |j                  | «      E d{  –—†  yy7 Œ# |j                  $ r Y yw xY w­w)zUYields the pattern lines in WCS coordinates.

        .. versionadded:: 1.1

        r   )ÚhatchingN)Úezdxf.renderrî   r„   Úhatch_entityÚHatchingError)rA   rî   s     rC   Úrender_pattern_lineszDXFPolygon.render_pattern_lines´  sL   è ø€ õ 	*à× Ò ðØ#×0Ñ0°Ó6×6Ñ6ð !à6ùØ×)Ñ)ò Ùðüs1   ‚A–3 ª1«3 ¯A±3 ³AÁAÁAÁAc                 ó   — y r;   r|   )rA   r‘   r¿   r—   s       rC   Úset_solid_fillzDXFPolygon.set_solid_fillÂ  s   € àrD   c                óò   •— t         ‰| �  |«       | j                  sy | j                  j	                  «       s@|j                  t        j                  dt        | «      › d�¬«       |j                  | «       y y )NzDeleted entity z# containing invalid boundary paths.)ÚcodeÚmessage)
r<   ÚauditÚis_aliver>   Úis_validÚfixed_errorr   ÚINVALID_HATCH_BOUNDARY_PATHÚstrÚtrash)rA   ÚauditorrB   s     €rC   rø   zDXFPolygon.auditÆ  si   ø€ Ü‰‰�gÔØ�}Š}ØØ�z‰z×"Ñ"Ô$Ø×ÑÜ×;Ñ;Ø)¬#¨d«)¨Ð4WÐXð  ô ð �M‰M˜$Õð %rD   )ÚreturnÚNone)rI   r	   r   r  r;   )rW   zOptional[SubclassProcessor]r   r   )rY   r   r   r   )ru   r	   rv   zxref.ResourceMapperr   r  )r   r   )r   úOptional[RGB])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   N)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   r  )r²   r³   r   r  )rÛ   r   r   r   )é   )r   zIterator[Sequence[Vec3]])r   zIterator[tuple[Vec3, Vec3]])r  r   N)r‘   r�   r¿   r�   r—   r  )rÿ   r
   r   r  )$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r9   Ú__annotations__r=   r   rK   rP   rR   rT   rS   rq   rU   Úpropertyr‚   r„   r†   r’   ÚsetterÚdeleterr�   r­   rÃ   r¼   rË   rÍ   rÔ   ræ   rò   ÚabcÚabstractmethodrô   rø   Ú__classcell__)rB   s   @rC   r   r   7   s(  ø… Ù;à9;ÐÐ6Ó;õ3ð 5Aô 1ð 8<ðØ4ðà	õó,ó$ó"õ	Kóð ò)ó ð)ð ò-ó ð-ð ò#ó ð#ð ò ó ð ð, ‡^�^òFó ðFð ‡_�_ò3ó ð3ñ
 ˜!˜Q “lÙ˜#˜s CÓ(ØØØØØð8!àð8!ð ð8!ð ð	8!ð
 ð8!ð ð8!ð ð8!ð ð8!ð 
ó8!ðz ØØØØØØð6
àð6
ð ð6
ð ð	6
ð
 ð6
ð ð6
ð ð6
ð ð6
ð 
ó6
ðr BCð
Øð
Ø',ð
Ø9>ð
à	ó
ó4"ó&*ó(ô.9ó,ð 	×Ñóó ð÷	 ñ 	 rD   )0Ú
__future__r   Útypingr   r   r   r   r   Útyping_extensionsr	   r  rG   Úezdxf.auditr
   r   Úezdxf.lldxfr   Úezdxf.lldxf.tagsr   rã   r   Úezdxf.toolsr   Ú
ezdxf.mathr   r   Úezdxf.math.transformtoolsr   rë   r   Údxfnsr   r   Údxfgfxr   r?   r   r   r   Ú	dxfentityr   r   r   r�   Ú__all__rc   rk   r   r|   rD   rC   Ú<module>r     sv   ðõ #ß EÕ EÝ "Û 
Û ç +Ý Ý !Ý Ý ß %Ý 2Ý )ß 2Ý Ý ß )Ý  Ý áÝà‡j�j€àˆ.€ò€
ò* !=Ð ôX �õ X rD   