Ë
    £èhR]  ã                  óŠ  — U d dl 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 d dlZd dlZd dlmZ d dlmZ d dlmZmZmZmZmZmZ d dl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)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6m7Z7 ddl8m9Z9 ddlm:Z: erd dl;m<Z<m=Z= d dl>m?Z? d dlm@Z@ dgZA ed edd ¬«       eddej„                  ¬«       edej†                  d¬«       edej†                  d¬«       edej†                  d ¬«       ed!d"d#¬$«       ed%d"d#¬$«       ed&d"d#¬$«       ed'ejˆ                  d#ejŠ                  ¬(«       ed)ejˆ                  d#ejŠ                  ¬(«       ed*ejˆ                  e'd#ejŠ                  e¬+«      d,œ«      ZF eeF«      ZG G d-„ d.«      ZHh d/£ZIeeeJ      ZKd0eLd1<   e9 G d2„ de6«      «       ZMy)3é    )Úannotations)ÚTYPE_CHECKINGÚListÚIterableÚSequenceÚcastÚIteratorÚOptional)Ú	TypeAliasÚSelfN)Ú
AuditError)Ú	validator)ÚDXFAttrÚDXFAttributesÚDefSubclassÚXTypeÚRETURN_DEFAULTÚgroup_code_mapping)ÚSUBCLASS_MARKERÚDXF2000ÚDXFValueErrorÚDXFStructureError)ÚVertexArrayÚTags)ÚVec3ÚUVecÚMatrix44ÚConstructionEllipseÚZ_AXISÚNULLVECÚOCSÚuniform_knot_vectorÚopen_uniform_knot_vectorÚBSplineÚrequired_knot_valuesÚrequired_fit_pointsÚrequired_control_pointsÚfit_points_to_cad_cvÚround_knotsé   )Ú
base_classÚSubclassProcessor)Ú
DXFGraphicÚacdb_entity)Úregister_entity)Údefault_copy)ÚDXFNamespaceÚEllipse)ÚAbstractTagWriter)ÚAuditorÚSplineÚ
AcDbSplineéF   )ÚdefaultéG   é   )r8   r   éH   Ú
knot_count)ÚxtypeÚgetteréI   Úcontrol_point_countéJ   Úfit_point_counté*   g»½×Ùß|Û=T)r8   Úoptionalé+   é,   é   )r=   rD   r   é   éÒ   )r=   r8   rD   r   Úfixer)ÚflagsÚdegreeÚn_knotsÚn_control_pointsÚn_fit_pointsÚknot_toleranceÚcontrol_point_toleranceÚfit_toleranceÚstart_tangentÚend_tangentÚ	extrusionc                  ó   — e Zd Zdd„Zy)Ú
SplineDatac                óŒ   — |j                   | _         |j                  | _        |j                  | _        |j                  | _        y ©N)Ú
fit_pointsÚcontrol_pointsÚknotsÚweights)ÚselfÚsplines     ú5lib/python3.12/site-packages/ezdxf/entities/spline.pyÚ__init__zSplineData.__init__†   s3   € Ø ×+Ñ+ˆŒØ$×3Ñ3ˆÔØ—\‘\ˆŒ
Ø—~‘~ˆ�ó    N)r_   r5   )Ú__name__Ú
__module__Ú__qualname__ra   © rb   r`   rW   rW   …   s   „ ô&rb   rW   >   é
   é   é(   é)   r;   r?   rA   r   ÚVerticesc                  ó„  ‡ — e Zd ZdZdZ eeee«      Z	e
ZdZdZdZdZdZˆ fd„Zefd*d	„Z	 d+	 	 	 d,ˆ fd
„Zd-d„Zd.ˆ fd„Zd/d„Zed0d„«       Zej4                  d1d„«       Zed2d„«       Zej4                  d3d„«       Zd4d„Zed2d„«       Zej4                  d3d„«       Zed5d„«       Zej4                  d6d„«       Zd4d„Zed5d„«       Z e j4                  d6d„«       Z d4d„Z!d7d„Z"d8d„Z#d9d:d„Z$e%d;d„«       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,d@d%„Z-dAˆ fd&„Z.dBd'„Z/dBd(„Z0dCd)„Z1ˆ xZ2S )Dr5   zDXF SPLINE entityÚSPLINEr*   é   é   é   é   c                óz   •— t         ‰| �  «        t        «       | _        t        «       | _        g | _        g | _        y rY   )Úsuperra   r   rZ   r[   r\   r]   )r^   Ú	__class__s    €r`   ra   zSpline.__init__Ÿ   s/   ø€ Ü‰ÑÔÜ%›-ˆŒÜ)›mˆÔØˆŒ
Øˆ�rb   c                óH  — t        |t        «      sJ ‚t        j                  | j                  «      |_        t        j                  | j
                  «      |_        t        j                  | j                  «      |_        t        j                  | j                  «      |_        y)z<Copy data: control_points, fit_points, weights, knot_values.N)Ú
isinstancer5   ÚcopyÚdeepcopyÚ_control_pointsÚ_fit_pointsÚ_knotsÚ_weights)r^   ÚentityÚcopy_strategys      r`   Ú	copy_datazSpline.copy_data¦   sh   € ä˜&¤&Ô)Ð)Ð)Ü!%§¡¨t×/CÑ/CÓ!DˆÔÜ!Ÿ]™]¨4×+;Ñ+;Ó<ˆÔÜŸ™ d§k¡kÓ2ˆŒÜŸ-™-¨¯©Ó6ˆ�rb   c                óì   •— t         ‰| �  |«      }|ra|j                  d«      }|r5t        | j	                  |«      «      }|j                  |t        |d¬«       |S t        d|j                  › d�«      ‚|S )Nrn   T)ÚsubclassÚrecoverz)missing 'AcDbSpline' subclass in SPLINE(#Ú))	rs   Úload_dxf_attribsÚsubclass_by_indexr   Úload_spline_dataÚfast_load_dxfattribsÚacdb_spline_group_codesr   Úhandle)r^   Ú	processorÚdxfÚtagsrt   s       €r`   r„   zSpline.load_dxf_attribs®   s‰   ø€ ô ‰gÑ& yÓ1ˆÙØ×.Ñ.¨qÓ1ˆDÙÜ˜D×1Ñ1°$Ó7Ó8�Ø×.Ñ.ØÔ0¸4Èð /ô ð ˆ
ô (Ø?ÀÇ
Á
¸|È1ÐMóð ð ˆ
rb   c              #  ó`  K  — g }g }g }g }|D ]�  }|\  }}|dk(  r|j                  |«       Œ|dk(  r|j                  |«       Œ6|dk(  r|j                  |«       ŒM|dk(  r|j                  |«       Œd|dv rt        j                  |«      rŒ~|–— Œƒ || _        || _        || _        || _        y­w)z±Load and set spline data (fit points, control points, weights,
        knots) and remove invalid start- and end tangents.
        Yields the remaining unprocessed tags.
        rg   rh   ri   rj   )rG   rH   N)Úappendr    Úiscloser[   rZ   r\   r]   )	r^   rŒ   r[   rZ   r\   r]   ÚtagÚcodeÚvalues	            r`   r†   zSpline.load_spline_data¿   s»   è ø€ ð
 ˆØˆ
ØˆØˆÛˆCØ‰KˆD�%Ø�rŠzØ×%Ñ% eÕ,Ø˜’Ø×!Ñ! %Õ(Ø˜’Ø—‘˜UÕ#Ø˜’Ø—‘˜uÕ%Ø˜Ñ!¤g§o¡o°eÔ&<ð à“	ð ð  -ˆÔØ$ˆŒØˆŒ
Øˆ�ùs   ‚B,B.c                óÆ  •— t         ‰| �  |«       |j                  t        t        j
                  «       | j                  j                  |g d¢«       |j                  d| j                  «       «       |j                  d| j                  «       «       |j                  d| j                  «       «       | j                  j                  |g d¢«       | j                  |«       y)z(Export entity specific data as DXF tags.)rU   rK   rL   r;   r?   rA   )rP   rQ   rR   rS   rT   N)rs   Úexport_entityÚ
write_tag2r   Úacdb_splineÚnamer‹   Úexport_dxf_attribsr<   r@   rB   Úexport_spline_data)r^   Ú	tagwriterrt   s     €r`   r”   zSpline.export_entityÝ   s®   ø€ ä‰Ñ˜iÔ(Ø×Ñœ_¬k×.>Ñ.>Ô?Ø�‰×#Ñ# IÒ/OÔPØ×Ñ˜R §¡Ó!2Ô3Ø×Ñ˜R ×!9Ñ!9Ó!;Ô<Ø×Ñ˜R ×!5Ñ!5Ó!7Ô8Ø�‰×#Ñ#Øòô		
ð 	×Ñ 	Õ*rb   c                ó.  — | j                   D ]  }|j                  d|«       Œ t        | j                  «      r#| j                  D ]  }|j                  d|«       Œ | j                  j                  |d¬«       | j                  j                  |d¬«       y )Nri   rj   rg   )r‘   rh   )r{   r•   Úlenr|   ry   Ú
export_dxfrz   )r^   rš   r’   s      r`   r™   zSpline.export_spline_dataò   s€   € Ø—[”[ˆEØ× Ñ   UÕ+ð !ô ˆt�}‰}ÔØŸœ�Ø×$Ñ$ R¨Õ/ð 'ð 	×Ñ×'Ñ'¨	¸Ð'Ô;Ø×Ñ×#Ñ# I°BÐ#Õ7rb   c                ó<   — | j                  | j                  d¬«      S )z”``True`` if spline is closed. A closed spline has a connection from
        the last control point to the first control point. (read/write)
        rK   )r—   )Úget_flag_stateÚCLOSED©r^   s    r`   ÚclosedzSpline.closedý   s   € ð
 ×"Ñ" 4§;¡;°WÐ"Ó=Ð=rb   c                ó@   — | j                  | j                  |d¬«       y )NrK   )Ústater—   )Úset_flag_stater    )r^   Ústatuss     r`   r¢   zSpline.closed  s   € à×Ñ˜DŸK™K¨v¸GÐÕDrb   c                ó   — | j                   S )z(Knot values as :code:`array.array('d')`.)r{   r¡   s    r`   r\   zSpline.knots  s   € ð �{‰{Ðrb   c                ód   — t        t        t           t        j                  d|«      «      | _        y ©NÚd)r   r   ÚfloatÚarrayr{   ©r^   Úvaluess     r`   r\   zSpline.knots  s   € ä#'¬¬U©´U·[±[ÀÀfÓ5MÓ#Nˆ�rb   c                ó,   — t        | j                  «      S )zCount of knot values.)rœ   r{   r¡   s    r`   r<   zSpline.knot_count  s   € ä�4—;‘;ÓÐrb   c                ó   — | j                   S )z2Control point weights as :code:`array.array('d')`.)r|   r¡   s    r`   r]   zSpline.weights  s   € ð �}‰}Ðrb   c                ód   — t        t        t           t        j                  d|«      «      | _        y r©   )r   r   r«   r¬   r|   r­   s     r`   r]   zSpline.weights  s   € ä%)¬$¬u©+´u·{±{À3ÈÓ7OÓ%Pˆ�rb   c                ó   — | j                   S )z^:class:`~ezdxf.lldxf.packedtags.VertexArray` of control points in
        :ref:`WCS`.
        )ry   r¡   s    r`   r[   zSpline.control_points  s   € ð
 ×#Ñ#Ð#rb   c                óf   — t        t        t        t        j                  |«      «      «      | _        y rY   )r   rk   r   r   Úlistry   ©r^   Úpointss     r`   r[   zSpline.control_points&  s   € ä)-¬h¼ÄDÇIÁIÈfÓDUÓ8VÓ)WˆÕrb   c                ó,   — t        | j                  «      S )zCount of control points.)rœ   r[   r¡   s    r`   r@   zSpline.control_point_count+  s   € ä�4×&Ñ&Ó'Ð'rb   c                ó   — | j                   S )zZ:class:`~ezdxf.lldxf.packedtags.VertexArray` of fit points in
        :ref:`WCS`.
        )rz   r¡   s    r`   rZ   zSpline.fit_points/  s   € ð
 ×ÑÐrb   c                óf   — t        t        t        t        j                  |«      «      «      | _        y rY   )r   rk   r   r   r´   rz   rµ   s     r`   rZ   zSpline.fit_points6  s#   € ä%)ÜÜœŸ	™	 &Ó)Ó*ó&
ˆÕrb   c                ó,   — t        | j                  «      S )zCount of fit points.)rœ   rZ   r¡   s    r`   rB   zSpline.fit_point_count>  s   € ä�4—?‘?Ó#Ð#rb   c                óx  — | j                  «       r•t        | j                  «      r| j                  nd}t        | j                  «      r+t	        | j                  | j
                  j                  «      }nd}t        | j                  | j
                  j                  dz   ||¬«      S | j                  «       r{d}| j
                  j                  d«      rG| j
                  j                  d«      r,| j
                  j                  | j
                  j                  g}t        | j                  |¬«      S t!        d«      ‚)z:Returns the construction tool :class:`ezdxf.math.BSpline`.Nr*   )r[   Úorderr\   r]   rS   rT   ©Útangentsz2Construction tool requires control- or fit points.)r@   rœ   r]   r\   r)   r‹   rP   r$   r[   rL   rB   ÚhasattrrS   rT   r(   rZ   Ú
ValueError)r^   r]   r\   r¾   s       r`   Úconstruction_toolzSpline.construction_toolB  só   € à×#Ñ#Ô%Ü&)¨$¯,©,Ô&7�d—l’l¸TˆGä�4—:‘:ŒÜ# D§J¡J°·±×0GÑ0GÓH‘à�ÜØ#×2Ñ2Ø—h‘h—o‘o¨Ñ)ØØô	ð ð ×!Ñ!Ô#ØˆHØ�x‰x×Ñ Ô0°T·X±X×5EÑ5EÀmÔ5TØ ŸH™H×2Ñ2°D·H±H×4HÑ4HÐI�ä'Ø—‘Ø!ôð ô
 ÐQÓRÐRrb   c                ó¦  — 	 |j                   | _         |j                  | j
                  _        g | _        |j                  «       | _        |j                  «       | _        | j                  t        j                  t        t        | j                  «      «      ¬«       | S # t        $ r) t        j                  |«      }|j                   | _         Y Œ¼w xY w)z‰Apply SPLINE data from a :class:`~ezdxf.math.BSpline` construction
        tool or from a :class:`geomdl.BSpline.Curve` object.

        )r¤   )r[   ÚAttributeErrorr$   Úfrom_nurbs_python_curverL   r‹   rZ   r\   r]   r¥   r5   ÚRATIONALÚboolrœ   )r^   Úss     r`   Úapply_construction_toolzSpline.apply_construction_tool]  s    € ð
	3Ø"#×"2Ñ"2ˆDÔð
 Ÿ(™(ˆ�‰ŒØˆŒØ—W‘W“YˆŒ
Ø—y‘y“{ˆŒØ×ÑœFŸO™O´4¼¸D¿L¹LÓ8IÓ3JÐÔKØˆøô ò 	3Ü×/Ñ/°Ó2ˆAØ"#×"2Ñ"2ˆDÖð	3ús   ‚B Â/CÃCc                óB   — | j                  «       j                  ||«      S )aÙ  Adaptive recursive flattening. The argument `segments` is the
        minimum count of approximation segments between two knots, if the
        distance from the center of the approximation segment to the curve is
        bigger than `distance` the segment will be subdivided.

        Args:
            distance: maximum distance from the projected curve point onto the
                segment chord.
            segments: minimum segment count between two knots

        )rÁ   Ú
flattening)r^   ÚdistanceÚsegmentss      r`   rÊ   zSpline.flatteningo  s    € ð ×%Ñ%Ó'×2Ñ2°8¸XÓFÐFrb   c           
     óP  — |j                  «       }|dk(  rt        d|«      j                  «       }�n;|dk(  rxt        j                  |j
                  j                  dt        «      t        |j
                  j                  dd«      «      |j
                  j                  dt        «      ¬«      }n¾|d	k(  r®t        j                  |j
                  j                  dt        «      t        |j
                  j                  dd«      «      |j
                  j                  dt        «      |j
                  j                  d
d«      |j
                  j                  dd«      ¬«      }nt        d«      ‚t        j                  |j                  «       |j                  ¬«      }t        j                   |«      }|j"                  |j
                  _        t        j$                  |j
                  _        |j(                  |_        |j+                  «       |_        |j-                  «       |_        |S )zËCreate a new SPLINE entity from a CIRCLE, ARC or ELLIPSE entity.

        The new SPLINE entity has no owner, no handle, is not stored in
        the entity database nor assigned to any layout!

        ÚELLIPSEr2   ÚCIRCLEÚcenterÚradiusg      ð?rU   )rÐ   rÑ   rU   ÚARCÚstart_angler   Ú	end_angleih  )rÐ   rÑ   rU   rÓ   rÔ   z'CIRCLE, ARC or ELLIPSE entity required.)Ú
dxfattribsÚdoc)Údxftyper   rÁ   r   Úfrom_arcr‹   Úgetr    Úabsr   Ú	TypeErrorr5   ÚnewÚgraphic_propertiesrÖ   r$   Úfrom_ellipserL   rÅ   rK   r[   r\   r]   )Úclsr}   r×   Úellipser_   rÇ   s         r`   rØ   zSpline.from_arc}  sƒ  € ð —.‘.Ó"ˆØ�iÒÜ˜9 fÓ-×?Ñ?ÓAŠGØ˜Ò Ü)×2Ñ2Ø—z‘z—~‘~ h´Ó8Ü˜6Ÿ:™:Ÿ>™>¨(°CÓ8Ó9Ø Ÿ*™*Ÿ.™.¨´fÓ=ô‰Gð
 ˜ÒÜ)×2Ñ2Ø—z‘z—~‘~ h´Ó8Ü˜6Ÿ:™:Ÿ>™>¨(°CÓ8Ó9Ø Ÿ*™*Ÿ.™.¨´fÓ=Ø"ŸJ™JŸN™N¨=¸!Ó<Ø Ÿ*™*Ÿ.™.¨°cÓ:ô‰Gô ÐEÓFÐFä—‘ v×'@Ñ'@Ó'BÈÏ
É
�ÓSˆÜ× Ñ  Ó)ˆØŸH™Hˆ�
‰
ÔÜ!Ÿ?™?ˆ�
‰
ÔØ !× 0Ñ 0ˆÔØ—w‘w“yˆŒØŸ™›ˆŒØˆrb   c                ó�   — d| j                   _        || j                   _        || _        t	        t        |«      |dz   «      | _        y)zpOpen B-spline with a uniform knot vector, start and end at your first
        and last control points.

        r   r*   N)r‹   rK   rL   r[   r#   rœ   r\   ©r^   r[   rL   s      r`   Úset_open_uniformzSpline.set_open_uniform¢  s9   € ð
 ˆ�‰ŒØ ˆ�‰ŒØ,ˆÔÜ-¬c°.Ó.AÀ6ÈAÁ:ÓNˆ�
rb   c                ó�   — d| j                   _        || j                   _        || _        t	        t        |«      |dz   «      | _        y)ztB-spline with a uniform knot vector, does NOT start and end at your
        first and last control points.

        r   r*   N)r‹   rK   rL   r[   r"   rœ   r\   râ   s      r`   Úset_uniformzSpline.set_uniform¬  s9   € ð
 ˆ�‰ŒØ ˆ�‰ŒØ,ˆÔÜ(¬¨^Ó)<¸fÀq¹jÓIˆ�
rb   c                ó  — | j                   | j                  z  | j                  _        || j                  _        || _        | j
                  j                  |d| «       t        t        | j
                  «      |dz   «      | _	        y)zhClosed B-spline with a uniform knot vector, start and end at your
        first control point.

        Nr*   )
ÚPERIODICr    r‹   rK   rL   r[   Úextendr"   rœ   r\   râ   s      r`   Ú
set_closedzSpline.set_closed¶  si   € ð
 Ÿ™¨¯©Ñ4ˆ�‰ŒØ ˆ�‰ŒØ,ˆÔØ×Ñ×"Ñ" >°'°6Ð#:Ô;ô
 )¬¨T×-@Ñ-@Ó)AÀ6ÈAÁ:ÓNˆ�
rb   c                óô   — | j                  ||¬«       | j                  j                  | j                  z  | j                  _        t	        |«      t	        | j
                  «      k7  rt        d«      ‚|| _        y)zËOpen rational B-spline with a uniform knot vector, start and end at
        your first and last control points, and has additional control
        possibilities by weighting each control point.

        ©rL   ú3Control point count must be equal to weights count.N)rã   r‹   rK   rÅ   rœ   r[   r   r]   ©r^   r[   r]   rL   s       r`   Úset_open_rationalzSpline.set_open_rationalÅ  s]   € ð 	×Ñ˜n°VÐÔ<ØŸ™Ÿ™¨$¯-©-Ñ7ˆ�‰ŒÜˆw‹<œ3˜t×2Ñ2Ó3Ò3ÜÐ UÓVÐVØˆ�rb   c                óô   — | j                  ||¬«       | j                  j                  | j                  z  | j                  _        t	        |«      t	        | j
                  «      k7  rt        d«      ‚|| _        y)zÏRational B-spline with a uniform knot vector, does NOT start and end
        at your first and last control points, and has additional control
        possibilities by weighting each control point.

        rë   rì   N)rå   r‹   rK   rÅ   rœ   r[   r   r]   rí   s       r`   Úset_uniform_rationalzSpline.set_uniform_rationalÖ  s]   € ð 	×Ñ˜°ÐÔ7ØŸ™Ÿ™¨$¯-©-Ñ7ˆ�‰ŒÜˆw‹<œ3˜t×2Ñ2Ó3Ò3ÜÐ UÓVÐVØˆ�rb   c                ó2  — | j                  ||¬«       | j                  j                  | j                  z  | j                  _        t	        |«      }|j                  |d| «       t        |«      t        | j                  «      k7  rt        d«      ‚|| _	        y)zÃClosed rational B-spline with a uniform knot vector, start and end at
        your first control point, and has additional control possibilities by
        weighting each control point.

        rë   Nrì   )
ré   r‹   rK   rÅ   r´   rè   rœ   r[   r   r]   rí   s       r`   Úset_closed_rationalzSpline.set_closed_rationalç  sv   € ð 	�‰˜¨vˆÔ6ØŸ™Ÿ™¨$¯-©-Ñ7ˆ�‰ŒÜ�w“-ˆØ�‰�w˜w Ð'Ô(Üˆw‹<œ3˜t×2Ñ2Ó3Ò3ÜÐ UÓVÐVØˆ�rb   c           	     ó>  — | j                   j                  |«       | j                  j                  |«       | j                  }dD ]D  }|j	                  |«      sŒ|j                  ||j                  |j                  |«      «      «       ŒF | j                  |«       | S )zATransform the SPLINE entity by transformation matrix `m` inplace.)rS   rT   rU   )	ry   Ú	transformrz   r‹   r¿   ÚsetÚtransform_directionrÙ   Úpost_transform)r^   Úmr‹   r—   s       r`   rô   zSpline.transformú  s€   € à×Ñ×&Ñ& qÔ)Ø×Ñ×"Ñ" 1Ô%à�h‰hˆÛAˆDØ�{‰{˜4Õ Ø—‘˜˜a×3Ñ3°C·G±G¸D³MÓBÕCð Bð 	×Ñ˜AÔØˆrb   c                ó  •— t         ‰| �  |«       | j                  j                  }t	        | «      }|dk  r:|j                  t        j                  d|› d|› d�¬«       |j                  | «       yt        | j                  «      }t        | j                  «      }|dk(  r<|dk(  r7|j                  t        j                  d|› d�¬«       |j                  | «       y|dkD  r| j                  |«       y|dkD  r| j                  |«       yy)	zAudit the SPLINE entity.r*   úRemoved z with invalid degree: z < 1.©r‘   ÚmessageNr   z" without any points (no geometry).)rs   Úauditr‹   rL   ÚstrÚfixed_errorr   ÚINVALID_SPLINE_DEFINITIONÚtrashrœ   r[   rZ   Ú_audit_control_pointsÚ_audit_fit_points)r^   ÚauditorrL   r—   rN   rO   rt   s         €r`   rý   zSpline.audit  s  ø€ ä‰‰�gÔØ—‘—‘ˆÜ�4‹yˆà�AŠ:Ø×ÑÜ×9Ñ9Ø" 4 &Ð(>¸v¸hÀeÐLð  ô ð �M‰M˜$ÔØä˜t×2Ñ2Ó3ÐÜ˜4Ÿ?™?Ó+ˆà˜qÒ  \°QÒ%6Ø×ÑÜ×9Ñ9Ø" 4 &Ð(JÐKð  ô ð �M‰M˜$ÔØà˜aÒØ×&Ñ& wÕ/à˜AÒØ×"Ñ" 7Õ+ð rb   c           	     ó„  — t        | «      }| j                  j                  dz   }t        | j                  «      }t        |«      }||k  r<|j                  t        j                  d|› d|› d|› �¬«       |j                  | «       y t        | j                  «      }t        | j                  «      }t        ||«      }||k  r<|j                  t        j                  d|› d|› d|› �¬«       |j                  | «       y |rB||k7  r<|j                  t        j                  d|› d|› d|› �¬«       |j                  | «       y y y )	Nr*   rú   z# with invalid control point count: ú < rû   z  with invalid knot value count: z with invalid weight count: z != )rþ   r‹   rL   rœ   r[   r'   rÿ   r   Ú"INVALID_SPLINE_CONTROL_POINT_COUNTr  r]   r\   r%   ÚINVALID_SPLINE_KNOT_VALUE_COUNTÚINVALID_SPLINE_WEIGHT_COUNT)	r^   r  r—   r¼   rN   Ún_control_points_requiredÚ	n_weightsrM   Ún_knots_requireds	            r`   r  zSpline._audit_control_points%  si  € Ü�4‹yˆØ—‘—‘ !Ñ#ˆÜ˜t×2Ñ2Ó3Ðô %<¸EÓ$BÐ!ØÐ7Ò7Ø×ÑÜ×BÑBØ" 4 &Ð(KØ#Ð$ CÐ(AÐ'BðDð  ô ð
 �M‰M˜$ÔØä˜Ÿ™Ó%ˆ	Ü�d—j‘j“/ˆÜ/Ð0@À%ÓHÐàÐ%Ò%ð ×ÑÜ×?Ñ?Ø" 4 &Ð(HØ�)˜3Ð/Ð0ð2ð  ô ð
 �M‰M˜$ÔØá˜Ð&6Ò6ð ×ÑÜ×;Ñ;Ø" 4 &Ð(DØ�+˜TÐ"2Ð!3ð5ð  ô ð
 �M‰M˜$ÔØð 7ˆ9rb   c           	     ó  — t        | «      }| j                  j                  dz   }t        |d¬«      }t	        | j
                  «      }||k  r<|j                  t        j                  d|› d|› d|› �¬«       |j                  | «       y t	        | j                  «      r,|j                  t        j                  d|› d	�¬«       g | _
        t	        | j                  «      r-|j                  t        j                  d
|› d	�¬«       g | _        y y )Nr*   Tr½   rú   z with invalid fit point count: r  rû   zRemoved unused knot values for z defined by fit points.zRemoved unused weights for )rþ   r‹   rL   r&   rœ   rZ   rÿ   r   ÚINVALID_SPLINE_FIT_POINT_COUNTr  r\   r  r]   r	  )r^   r  r—   r¼   Ún_fit_points_requiredrO   s         r`   r  zSpline._audit_fit_pointsO  s  € Ü�4‹yˆØ—‘—‘ !Ñ#ˆô !4°EÀDÔ IÐô ˜4Ÿ?™?Ó+ˆØÐ/Ò/Ø×ÑÜ×>Ñ>Ø" 4 &Ð(GØ�. Ð$9Ð#:ð<ð  ô ð
 �M‰M˜$ÔØô ˆt�z‰zŒ?Ø×ÑÜ×?Ñ?Ø9¸$¸ð @)ð *ð  ô ð
 ˆDŒJô ˆt�|‰|ÔØ×ÑÜ×;Ñ;Ø5°d°VÐ;VÐWð  ô ð ˆD�Lð rb   c                ó   — t        «       S rY   )r!   r¡   s    r`   Úocsz
Spline.ocsr  s   € ô ‹uˆrb   )r}   r   ÚreturnÚNonerY   )rŠ   zOptional[SubclassProcessor]r  r1   )r  r	   )rš   r3   r  r  )rš   r3   )r  rÆ   )r¦   rÆ   r  r  )r  zlist[float])r®   zIterable[float]r  r  )r  Úint)r  rk   )r¶   zIterable[UVec]r  r  )r  r$   )r  r5   )ro   )rË   r«   rÌ   r  r  zIterator[Vec3])r}   r-   r  r5   )r:   )r[   úSequence[UVec]rL   r  r  r  )r[   r  r  r  )r[   r  r]   zSequence[float]rL   r  r  r  )rø   r   r  r5   )r  r4   r  r  )r  r4   )r  r!   )3rc   rd   re   Ú__doc__ÚDXFTYPEr   r+   r.   r–   Ú
DXFATTRIBSr   ÚMIN_DXF_VERSION_FOR_EXPORTr    rç   rÅ   ÚPLANARÚLINEARra   r0   r   r„   r†   r”   r™   Úpropertyr¢   Úsetterr\   r<   r]   r[   r@   rZ   rB   rÁ   rÈ   rÊ   ÚclassmethodrØ   rã   rå   ré   rî   rð   rò   rô   rý   r  r  r  Ú__classcell__)rt   s   @r`   r5   r5   ’   sK  ø„ áà€GÙ˜z¨;¸ÓD€JØ!(ÐØ€FØ€HØ€HØ€FØ€Fôð 5Aô 7ð 8<ðØ4ðà	õó"õ<+ó*	8ð ò>ó ð>ð ‡]�]òEó ðEð òó ðð ‡\�\òOó ðOó ð òó ðð ‡^�^òQó ðQð ò$ó ð$ð ×ÑòXó ðXó(ð ò ó ð ð ×Ñò
ó ð
ó$óSó6ô$Gð ò"ó ð"ôHOôJôOð& ð	à&ðð !ðð ð	ð
 
óð* ð	à&ðð !ðð ð	ð
 
óð* ð	à&ðð !ðð ð	ð
 
óó&
õ,ó>(óT!÷Frb   )NÚ
__future__r   Útypingr   r   r   r   r   r	   r
   Útyping_extensionsr   r   r¬   rw   Úezdxf.auditr   Úezdxf.lldxfr   Úezdxf.lldxf.attributesr   r   r   r   r   r   Úezdxf.lldxf.constr   r   r   r   Úezdxf.lldxf.packedtagsr   r   Ú
ezdxf.mathr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   Ú	dxfentityr+   r,   Údxfgfxr-   r.   Úfactoryr/   r0   Úezdxf.entitiesr1   r2   Úezdxf.lldxf.tagwriterr3   r4   Ú__all__Úis_positiveÚcallbackÚpoint3dÚis_not_null_vectorr–   rˆ   rW   ÚREMOVE_CODESr«   rk   Ú__annotations__r5   rf   rb   r`   Ú<module>r5     sÃ  ðö #÷÷ ñ ÷ .Û Û Ý "Ý !÷÷ ÷ó ÷ 5÷÷ ÷ ÷ ñ ÷" 5ß +Ý $Ý áß4Ý7Ý#àˆ*€ñ& Øñ ˜ QÔ'ñ ˜" a°9×3HÑ3HÔIÙ˜2 U§^¡^¸LÔIÙ#Ø�e—n‘nÐ-Bô
ñ   ¨%¯.©.ÐARÔSÙ! "¨e¸dÔCÙ#*¨2°uÀtÔ#LÙ  ¨U¸TÔBñ !ØØ—-‘-ØØ×2Ñ2ô	
ñ ØØ—-‘-ØØ×2Ñ2ô	
ñ ØØ—-‘-ØØØ×2Ñ2Ø ô
ñE/ó2€ñf -¨[Ó9Ð ÷&ñ &ò ,€à˜8 E™?Ñ+€ˆ)Ó +ð ôbˆZó bó ñbrb   