Ë
    £èhQE  ã                  ó\  — 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	m
Z
mZmZmZmZmZmZmZmZmZ erd dlmZ d„ Zd„ Zdd	ej2                  d
z  df	 	 	 	 	 	 	 	 	 dd„Zdd	ej2                  dz  ej2                  dz  df	 	 	 	 	 	 	 	 	 	 	 dd„Z G d„ d«      Z G d„ d«      Z G d„ d«      Zy)é    )Úannotations)ÚTYPE_CHECKINGÚIterableÚOptionalN)ÚVec3ÚVec2ÚUVecÚMatrix44ÚperlinÚBezier4PÚglobal_bspline_interpolationÚBSplineÚopen_uniform_bsplineÚclosed_uniform_bsplineÚEulerSpiral)Ú
BaseLayoutc                ó<   — | dz  t        j                   «       | z  z
  S ©Nç       @)Úrandom)Ú	max_values    ú3lib/python3.12/site-packages/ezdxf/render/curves.pyÚrndr      s   € Ø�s‰?œVŸ]™]›_¨yÑ8Ñ8Ð8ó    c                ól   — t        j                  |j                  |j                  «      }| dz  || z  z
  S r   )r   Úsnoise2ÚxÚy)r   ÚwalkerÚrs      r   Ú
rnd_perlinr!      s-   € Ü�‰�v—x‘x §¡Ó*€AØ�s‰?˜Q ™]Ñ*Ð*r   éd   g      ð?é   é   c              #  ó0  ‡K  — || z  Šˆfd„}t        dd«      } |«       }t        | «      D ]f  }||z  dk(  r
| |«       z   }||z
  j                  }|t        ||«      z   }	|t	        j                  «       z  }
|t        j
                  |	|
«      z   }|–— Œh y­w)u]  Returns a random 2D path as iterable of :class:`~ezdxf.math.Vec2`
    objects.

    Args:
        steps: count of vertices to generate
        max_step_size: max step size
        max_heading: limit heading angle change per step to Â± max_heading/2 in
            radians
        retarget: specifies steps before changing global walking target

    c                 óB   •— t        t        ‰ «      t        ‰ «      f«      S ©N)r   r   ©Úmax_s   €r   Únext_global_targetz*random_2d_path.<locals>.next_global_target5   s   ø€ Ü”S˜“Y¤ D£	Ð*Ó+Ð+r   r   N)r   ÚrangeÚangler!   r   Ú
from_angle)ÚstepsÚmax_step_sizeÚmax_headingÚretargetr*   r   ÚtargetÚir,   ÚheadingÚlengthr)   s              @r   Úrandom_2d_pathr6   "   sŸ   øè ø€ ð" ˜5Ñ €Dô,ô �!�Q‹Z€FÙÓ!€FÜ�5Ž\ˆØˆx‰<˜1ÒØÑ0Ó2Ñ2ˆFØ˜&‘×'Ñ'ˆØœ* [°&Ó9Ñ9ˆØ¤§¡£Ñ0ˆØœ$Ÿ/™/¨'°6Ó:Ñ:ˆØ‹ñ ùs   ƒBBr   g       @c              #  óŒ  ‡K  — || z  Šˆfd„}t        «       } |«       }t        | «      D ]–  }||z  dk(  r
| |«       z   }||z
  j                  }	|t        j                  «       z  }
|	t	        ||«      z   }t        j
                  ||
«      }t	        ||«      }|t        j                  |«      j                  |«      z  }|–— Œ˜ y­w)uñ  Returns a random 3D path as iterable of :class:`~ezdxf.math.Vec3`
    objects.

    Args:
        steps: count of vertices to generate
        max_step_size: max step size
        max_heading: limit heading angle change per step to Â± max_heading/2,
            rotation about the z-axis in radians
        max_pitch: limit pitch angle change per step to Â± max_pitch/2, rotation
            about the x-axis in radians
        retarget: specifies steps before changing global walking target

    c                 óV   •— t        t        ‰ «      t        ‰ «      t        ‰ «      f«      S r'   )r   r   r(   s   €r   r*   z*random_3d_path.<locals>.next_global_targetZ   s!   ø€ Ü”S˜“Y¤ D£	¬3¨t«9Ð5Ó6Ð6r   r   N)	r   r+   r,   r   r!   r-   r
   Úx_rotateÚ	transform)r.   r/   r0   Ú	max_pitchr1   r*   r   r2   r3   r,   r5   Úheading_angleÚ	next_stepÚpitch_angler)   s                 @r   Úrandom_3d_pathr?   D   sÂ   øè ø€ ð( ˜5Ñ €Dô7ô ‹V€FÙÓ!€FÜ�5Ž\ˆØˆx‰<˜1ÒØÑ0Ó2Ñ2ˆFØ˜&‘×'Ñ'ˆØ¤§¡£Ñ0ˆØ¤
¨;¸Ó ?Ñ?ˆÜ—O‘O M°6Ó:ˆ	Ü  ¨FÓ3ˆØ”(×#Ñ# KÓ0×:Ñ:¸9ÓEÑEˆØ‹ñ ùs   ƒCCc                  óp   — e Zd ZdZ G d„ d«      Zd
d„Zdd„Z	 	 d	 	 	 	 	 	 	 dd„Zdd„Z	 	 d	 	 	 	 	 dd	„Z	y)ÚBeziera>  Render a bezier curve as 2D/3D :class:`~ezdxf.entities.Polyline`.

    The :class:`Bezier` class is implemented with multiple segments, each
    segment is an optimized 4 point bezier curve, the 4 control points of the
    curve are: the start point (1) and the end point (4), point (2) is start
    point + start vector and point (3) is end point + end vector. Each segment
    has its own approximation count.

    .. seealso::

        The new :mod:`ezdxf.path` package provides many advanced construction tools
        based on the :class:`~ezdxf.path.Path` class.

    c                  ó0   — e Zd Z	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zy)úBezier.Segmentc                ó’   — t        |«      | _        t        |«      | _        t        |«      | _        t        |«      | _        || _        y r'   )r   ÚstartÚendÚstart_tangentÚend_tangentÚsegments)ÚselfrE   rF   rG   rH   rI   s         r   Ú__init__zBezier.Segment.__init__|   s@   € ô ˜e›ˆDŒJÜ˜C“yˆDŒHÜ!%Øó"ˆDÔô  $ KÓ0ˆDÔØ$ˆD�Mr   c                óÞ   — | j                   | j                   | j                  z   | j                  | j                  z   | j                  g}t	        |«      }|j                  | j                  «      S r'   )rE   rG   rF   rH   r   ÚapproximaterI   )rJ   Úcontrol_pointsÚbeziers      r   rM   zBezier.Segment.approximateŒ   s\   € à—
‘
Ø—
‘
˜T×/Ñ/Ñ/Ø—‘˜4×+Ñ+Ñ+Ø—‘ð	ˆNô ˜nÓ-ˆFØ×%Ñ% d§m¡mÓ4Ð4r   N)
rE   r	   rF   r	   rG   r	   rH   r	   rI   Úint)ÚreturnúIterable[Vec3])Ú__name__Ú
__module__Ú__qualname__rK   rM   © r   r   ÚSegmentrC   {   s<   „ ð	%àð	%ð ð	%ð  ð		%ð
 ð	%ð ó	%ô 	5r   rW   c                ó   — g | _         y r'   )Úpoints)rJ   s    r   rK   zBezier.__init__–   s   € ð ð 	�r   c                óT   — | j                   j                  t        |«      d|df«       y)zëSet start point and start tangent.

        Args:
            point: start point
            tangent: start tangent as vector, example: (5, 0, 0) means a
                     horizontal tangent with a length of 5 drawing units
        N)rY   Úappendr   )rJ   ÚpointÚtangents      r   rE   zBezier.startœ   s#   € ð 	�‰×ÑœD ›K¨¨w¸Ð=Õ>r   Nc                óž   — t        |«      }|€| }nt        |«      }| j                  j                  t        |«      ||t        |«      f«       y)aù  Append a control point with two control tangents.

        Args:
            point: control point
            tangent1: first tangent as vector "left" of the control point
            tangent2: second tangent as vector "right" of the control point,
                if omitted `tangent2` = `-tangent1`
            segments: count of line segments for the polyline approximation,
                count of line segments from the previous control point to the
                appended control point.

        N)r   rY   r[   rP   )rJ   r\   Útangent1Útangent2rI   s        r   r[   zBezier.append¦   sF   € ô& ˜“>ˆØÐØ �y‰Hä˜H“~ˆHØ�‰×ÑœD ›K¨°8¼SÀ»]ÐKÕLr   c              #  ó  K  — t        | j                  «      dkD  rct        | j                  d d | j                  dd  «      D ]9  \  }}|d   }|d   }|d   }|d   }|d   }t        j	                  |||||«      –— Œ; y t        d«      ‚­w)Né   éÿÿÿÿr   r#   é   zTwo or more points needed!)ÚlenrY   ÚziprA   rW   Ú
ValueError)rJ   Ú
from_pointÚto_pointÚstart_pointrG   Ú	end_pointrH   Úcounts           r   Ú_build_bezier_segmentszBezier._build_bezier_segmentsÀ   sš   è ø€ Üˆt�{‰{Ó˜aÒÜ(+¨D¯K©K¸¸Ð,<¸d¿k¹kÈ!È"¸oÖ(NÑ$�
˜HØ(¨™m�Ø *¨1¡�Ø$ Q™K�	Ø& q™k�Ø  ™�Ü—n‘nØ ¨M¸;Èóó ñ )Oô Ð9Ó:Ð:ùs   ‚BB	c                óæ   — g }| j                  «       D ]!  }|j                  |j                  «       «       Œ# |st        d„ |D «       «      r|j	                  ||¬«       y|j                  ||¬«       y)a  Render Bezier curve as 2D/3D :class:`~ezdxf.entities.Polyline`.

        Args:
            layout: :class:`~ezdxf.layouts.BaseLayout` object
            force3d: force 3D polyline rendering
            dxfattribs: DXF attributes for :class:`~ezdxf.entities.Polyline`

        c              3  ó&   K  — | ]	  }|d    –— Œ y­w)r#   NrV   )Ú.0Úps     r   Ú	<genexpr>z Bezier.render.<locals>.<genexpr>ß   s   è ø€ Ð/© 1˜!˜A�$©ùs   ‚©Ú
dxfattribsN)rm   ÚextendrM   ÚanyÚadd_polyline3dÚadd_polyline2d)rJ   ÚlayoutÚforce3drt   rY   Úsegments         r   ÚrenderzBezier.renderÎ   sg   € ð  ˆØ×2Ñ2Ö4ˆGØ�M‰M˜'×-Ñ-Ó/Õ0ð 5á”cÑ/©Ó/Ô/Ø×!Ñ! &°ZÐ!Õ@à×!Ñ! &°ZÐ!Õ@r   )rQ   ÚNone)r\   r	   r]   r	   rQ   r}   )Nr$   )r\   r	   r_   r	   r`   zOptional[UVec]rI   rP   )rQ   zIterable[Segment])FN)ry   r   rz   ÚboolrQ   r}   )
rS   rT   rU   Ú__doc__rW   rK   rE   r[   rm   r|   rV   r   r   rA   rA   k   s…   „ ñ÷5ñ 5ó6ó?ð $(ØðMàðMð ðMð !ð	Mð
 óMó4;ð" Øð	AàðAð ðAð
 
ôAr   rA   c                  óè   — e Zd ZdZ	 d	 	 	 dd„Zddd„Z	 	 	 d	 	 	 	 	 	 	 	 	 dd„ZeZ	 d	 	 	 	 	 dd„Z	 d	 	 	 	 	 dd„Z		 d	 	 	 	 	 dd„Z
	 	 d	 	 	 	 	 	 	 dd	„Z	 	 d	 	 	 	 	 	 	 dd
„Z	 	 d	 	 	 	 	 	 	 dd„Zy)ÚSplinea-  This class can be used to render B-splines into DXF R12 files as
    approximated :class:`~ezdxf.entities.Polyline` entities.
    The advantage of this class over the :class:`R12Spline` class is,
    that this is a real 3D curve, which means that the B-spline vertices do
    have to be located in a flat plane, and no :ref:`UCS` class is needed to
    place the curve in 3D space.

    .. seealso::

        The newer :class:`~ezdxf.math.BSpline` class provides the
        advanced vertex interpolation method :meth:`~ezdxf.math.BSpline.flattening`.

    Nc                ó`   — |€g }t        j                  |«      | _        t        |«      | _        y)z´
        Args:
            points: spline definition points
            segments: count of line segments for approximation, vertex count is
                `segments` + 1

        N)r   ÚlistrY   rP   rI   )rJ   rY   rI   s      r   rK   zSpline.__init__ô   s)   € ð ˆ>ØˆFÜ"&§)¡)¨FÓ"3ˆŒÜ˜H›ˆ�r   c                óD   — t        | j                  «      dz
  |z  | _        y)ad  Calculate overall segment count, where segments is the sub-segment
        count, `segments` = 4, means 4 line segments between two definition
        points e.g. 4 definition points and 4 segments = 12 overall segments,
        useful for fit point rendering.

        Args:
            segments: sub-segments count between two definition points

        rb   N)re   rY   rI   )rJ   rI   s     r   Ú	subdividezSpline.subdivide  s   € ô ˜TŸ[™[Ó)¨AÑ-°Ñ9ˆ�r   c                óî   — t        | j                  ||¬«      }t        |j                  | j                  «      «      }t        d„ |D «       «      r|j                  ||¬«       y|j                  ||¬«       y)aŒ  Render a B-spline as 2D/3D :class:`~ezdxf.entities.Polyline`, where
        the definition points are fit points.

           - 2D spline vertices uses: :meth:`~ezdxf.layouts.BaseLayout.add_polyline2d`
           - 3D spline vertices uses: :meth:`~ezdxf.layouts.BaseLayout.add_polyline3d`

        Args:
            layout: :class:`~ezdxf.layouts.BaseLayout` object
            degree: degree of B-spline (order = `degree` + 1)
            method: "uniform", "distance"/"chord", "centripetal"/"sqrt_chord" or
                "arc" calculation method for parameter t
            dxfattribs: DXF attributes for :class:`~ezdxf.entities.Polyline`

        )ÚdegreeÚmethodc              3  ó:   K  — | ]  }|j                   d k7  –— Œ y­w)g        N)Úz)rp   Úvertexs     r   rr   z.Spline.render_as_fit_points.<locals>.<genexpr>(  s   è ø€ Ð6©X 6ˆv�x‰x˜3�©Xùs   ‚rs   N)r   rY   rƒ   rM   rI   rv   rw   rx   )rJ   ry   r‡   rˆ   rt   ÚsplineÚverticess          r   Úrender_as_fit_pointszSpline.render_as_fit_points  sh   € ô* .Ø�K‰K ¨vô
ˆô ˜×*Ñ*¨4¯=©=Ó9Ó:ˆÜÑ6©XÓ6Ô6Ø×!Ñ! (°zÐ!ÕBà×!Ñ! (°zÐ!ÕBr   c                ó¢   — t        | j                  |dz   ¬«      }|j                  t        |j	                  | j
                  «      «      |¬«       y)aX  Render an open uniform B-spline as 3D :class:`~ezdxf.entities.Polyline`.
        Definition points are control points.

        Args:
            layout: :class:`~ezdxf.layouts.BaseLayout` object
            degree: degree of B-spline (order = `degree` + 1)
            dxfattribs: DXF attributes for :class:`~ezdxf.entities.Polyline`

        rb   ©Úorderrs   N©r   rY   rw   rƒ   rM   rI   ©rJ   ry   r‡   rt   rŒ   s        r   Úrender_open_bsplinezSpline.render_open_bspline/  sD   € ô ˜Ÿ™¨F°Q©JÔ7ˆØ×ÑÜ�×#Ñ# D§M¡MÓ2Ó3À
ð 	õ 	
r   c                ó¢   — t        | j                  |dz   ¬«      }|j                  t        |j	                  | j
                  «      «      |¬«       y)aR  Render a uniform B-spline as 3D :class:`~ezdxf.entities.Polyline`.
        Definition points are control points.

        Args:
            layout: :class:`~ezdxf.layouts.BaseLayout` object
            degree: degree of B-spline (order = `degree` + 1)
            dxfattribs: DXF attributes for :class:`~ezdxf.entities.Polyline`

        rb   r�   rs   N)r   rY   rw   rƒ   rM   rI   r“   s        r   Úrender_uniform_bsplinezSpline.render_uniform_bspline@  sD   € ô & d§k¡k¸À!¹ÔDˆØ×ÑÜ�×#Ñ# D§M¡MÓ2Ó3À
ð 	õ 	
r   c                ó¢   — t        | j                  |dz   ¬«      }|j                  t        |j	                  | j
                  «      «      |¬«       y)aY  Render a closed uniform B-spline as 3D :class:`~ezdxf.entities.Polyline`.
        Definition points are control points.

        Args:
            layout: :class:`~ezdxf.layouts.BaseLayout` object
            degree: degree of B-spline (order = `degree` + 1)
            dxfattribs: DXF attributes for :class:`~ezdxf.entities.Polyline`

        rb   r�   rs   N©r   rY   rw   rƒ   rM   rI   r“   s        r   Úrender_closed_bsplinezSpline.render_closed_bsplineQ  sD   € ô (¨¯©¸6ÀA¹:ÔFˆØ×ÑÜ�×#Ñ# D§M¡MÓ2Ó3À
ð 	õ 	
r   c                ó¤   — t        | j                  |dz   |¬«      }|j                  t        |j	                  | j
                  «      «      |¬«       y)aÐ  Render a rational open uniform BSpline as 3D :class:`~ezdxf.entities.Polyline`.
        Definition points are control points.

        Args:
            layout: :class:`~ezdxf.layouts.BaseLayout` object
            weights: list of weights, requires a weight value (float) for each
                definition point.
            degree: degree of B-spline (order = `degree` + 1)
            dxfattribs: DXF attributes for :class:`~ezdxf.entities.Polyline`

        rb   ©r‘   Úweightsrs   Nr’   ©rJ   ry   rœ   r‡   rt   rŒ   s         r   Úrender_open_rbsplinezSpline.render_open_rbsplineb  sF   € ô$ ˜Ÿ™¨F°Q©JÀÔHˆØ×ÑÜ�×#Ñ# D§M¡MÓ2Ó3À
ð 	õ 	
r   c                ó¤   — t        | j                  |dz   |¬«      }|j                  t        |j	                  | j
                  «      «      |¬«       y)aÌ  Render a rational uniform B-spline as 3D :class:`~ezdxf.entities.Polyline`.
        Definition points are control points.

        Args:
            layout: :class:`~ezdxf.layouts.BaseLayout` object
            weights: list of weights, requires a weight value (float) for each
                definition point.
            degree: degree of B-spline (order = `degree` + 1)
            dxfattribs: DXF attributes for :class:`~ezdxf.entities.Polyline`

        rb   r›   rs   Nr˜   r�   s         r   Úrender_uniform_rbsplinezSpline.render_uniform_rbspliney  óK   € ô$ (Ø�K‰K˜v¨™z°7ô
ˆð 	×ÑÜ�×#Ñ# D§M¡MÓ2Ó3À
ð 	õ 	
r   c                ó¤   — t        | j                  |dz   |¬«      }|j                  t        |j	                  | j
                  «      «      |¬«       y)aÄ  Render a rational B-spline as 3D :class:`~ezdxf.entities.Polyline`.
        Definition points are control points.

        Args:
            layout: :class:`~ezdxf.layouts.BaseLayout` object
            weights: list of weights, requires a weight value (float) for each
                definition point.
            degree: degree of B-spline (order = `degree` + 1)
            dxfattribs: DXF attributes for :class:`~ezdxf.entities.Polyline`

        rb   r›   rs   Nr˜   r�   s         r   Úrender_closed_rbsplinezSpline.render_closed_rbspline’  r¡   r   )Nr"   )rY   zOptional[Iterable[UVec]]rI   rP   )é   )rI   rP   rQ   r}   )rd   ÚchordN)
ry   r   r‡   rP   rˆ   Ústrrt   zOptional[dict]rQ   r}   )rd   N)ry   r   r‡   rP   rQ   r}   )ry   r   rœ   zIterable[float]r‡   rP   rQ   r}   )rS   rT   rU   r   rK   r…   rŽ   r|   r”   r–   r™   rž   r    r£   rV   r   r   r�   r�   å   sw  „ ñð HKð&Ø.ð&ØADó&ô
:ð ØØ%)ðCàðCð ðCð ð	Cð
 #ðCð 
óCð< "€Fð ?Cð
Ø ð
Ø*-ð
à	ó
ð$ ?Cð
Ø ð
Ø*-ð
à	ó
ð$ ?Cð
Ø ð
Ø*-ð
à	ó
ð* Øð
àð
ð !ð
ð ð	
ð 
ó
ð6 Øð
àð
ð !ð
ð ð	
ð 
ó
ð: Øð
àð
ð !ð
ð ð	
ð 
ô
r   r�   c                  ó`   — e Zd ZdZddd„Z	 	 	 	 d	 	 	 	 	 	 	 d	d„Z	 	 	 	 	 d
	 	 	 	 	 	 	 	 	 dd„Zy)r   zöRender an `euler spiral <https://en.wikipedia.org/wiki/Euler_spiral>`_
    as a 3D :class:`~ezdxf.entities.Polyline` or a
    :class:`~ezdxf.entities.Spline` entity.

    This is a parametric curve, which always starts at the origin (0, 0).

    c                ó6   — t        t        |«      «      | _        y)zC
        Args:
            curvature: Radius of curvature

        N)Ú_EulerSpiralÚfloatÚspiral)rJ   Ú	curvatures     r   rK   zEulerSpiral.__init__µ  s   € ô #¤5¨Ó#3Ó4ˆ�r   Nc                ó˜   — | j                   j                  ||«      }|�|j                  |«      }|j                  t	        |«      |¬«      S )a
  Render curve as :class:`~ezdxf.entities.Polyline`.

        Args:
            layout: :class:`~ezdxf.layouts.BaseLayout` object
            length: length measured along the spiral curve from its initial position
            segments: count of line segments to use, vertex count is `segments` + 1
            matrix: transformation matrix as :class:`~ezdxf.math.Matrix44`
            dxfattribs: DXF attributes for :class:`~ezdxf.entities.Polyline`

        Returns:
            :class:`~ezdxf.entities.Polyline`

        rs   )r«   rM   Útransform_verticesrw   rƒ   )rJ   ry   r5   rI   Úmatrixrt   rY   s          r   Úrender_polylinezEulerSpiral.render_polyline½  sJ   € ð* —‘×(Ñ(¨°Ó:ˆØÐØ×.Ñ.¨vÓ6ˆFØ×$Ñ$¤T¨&£\¸jÐ$ÓIÐIr   c                óÖ   — | j                   j                  |||¬«      }|j                  }|�|j                  |«      }|j	                  ||j
                  |j                  «       |¬«      S )a  
        Render curve as :class:`~ezdxf.entities.Spline`.

        Args:
            layout: :class:`~ezdxf.layouts.BaseLayout` object
            length: length measured along the spiral curve from its initial position
            fit_points: count of spline fit points to use
            degree: degree of B-spline
            matrix: transformation matrix as :class:`~ezdxf.math.Matrix44`
            dxfattribs: DXF attributes for :class:`~ezdxf.entities.Spline`

        Returns:
            :class:`~ezdxf.entities.Spline`

        )r‡   )rN   r‡   Úknotsrt   )r«   ÚbsplinerN   r®   Úadd_open_spliner‡   r²   )	rJ   ry   r5   Ú
fit_pointsr‡   r¯   rt   rŒ   rY   s	            r   Úrender_splinezEulerSpiral.render_spline×  sn   € ð0 —‘×$Ñ$ V¨ZÀÐ$ÓGˆØ×&Ñ&ˆØÐØ×.Ñ.¨vÓ6ˆFØ×%Ñ%Ø!Ø—=‘=Ø—,‘,“.Ø!ð	 &ó 
ð 	
r   )rb   )r¬   rª   )rb   r"   NN)ry   r   r5   rª   rI   rP   r¯   úOptional[Matrix44])rb   é
   rd   NN)
ry   r   r5   rª   rµ   rP   r‡   rP   r¯   r·   )rS   rT   rU   r   rK   r°   r¶   rV   r   r   r   r   ¬  s�   „ ñô5ð ØØ%)ØðJàðJð ðJð ð	Jð
 #óJð: ØØØ%)Øð!
àð!
ð ð!
ð ð	!
ð
 ð!
ð #ô!
r   r   )
r.   rP   r/   rª   r0   rª   r1   rP   rQ   zIterable[Vec2])r.   rP   r/   rª   r0   rª   r;   rª   r1   rP   rQ   rR   )Ú
__future__r   Útypingr   r   r   r   ÚmathÚ
ezdxf.mathr   r   r	   r
   r   r   r   r   r   r   r   r©   Úezdxf.layoutsr   r   r!   Úpir6   r?   rA   r�   rV   r   r   Ú<module>r¿      s  ðõ #ß 4Ñ 4Û Û ÷÷ ÷ ñ ñ Ý(ò9ò+ð ØØŸ™ 1™Øð	Øðàðð ðð ð	ð
 óðF ØØŸ™ 3™Ø—w‘w ‘}Øð$Øð$àð$ð ð$ð ð	$ð
 ð$ð ó$÷NwAñ wA÷tD
ñ D
÷NL
ò L
r   