Ë
    :vžjh   ã            	       ó®   — d dl mZ d dl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mZmZ d	Ze G d
„ d«      «       Z	 ddedededefd„Zdd„Zdd„Zy)é    )Ú	dataclassNé   )Úutil)Úlog)Úres_path)Útol_path)Ú	ArrayLikeÚNDArrayÚNumberÚfloat64gê-�™—q=c                   óv   — e Zd ZU eed<   ee   ed<   dZee   dz  ed<   dZee   dz  ed<   dZ	e
dz  ed<   d„ Zy)ÚArcInfoÚradiusÚcenterNÚnormalÚanglesÚspanc                 ó   — t        | |«      S ©N)Úgetattr)ÚselfÚitems     úa/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/trimesh/path/arc.pyÚ__getitem__zArcInfo.__getitem__!   s   € ä�t˜TÓ"Ð"ó    )Ú__name__Ú
__module__Ú__qualname__ÚfloatÚ__annotations__r
   r   r   r   r   r   r   © r   r   r   r      sW   … ð ƒMð �GÑÓð '+€FˆG�GÑ˜tÑ#Ó*ð '+€FˆG�GÑ˜tÑ#Ó*ð €Dˆ&�4‰-Óó#r   r   ÚpointsÚreturn_normalÚreturn_angleÚreturnc           	      ój  — t        j                  | t         j                  ¬«      } | g d¢   | g d¢   z
  }t        j                  |dz  dg| j                  d   z  «      }t        j
                  |«      }|j                  «       }||z  }|j                  «       dz  }|t        j                  ||z
  «      z  }	|	t        j                  k  rt        d«      ‚|t        j                  |«      dz  t        j
                  |	«      z  z  }
|g d	¢   g d
¢z  j                  d«      j                  d¬«      |z  }| j                  j                  |«      |j                  «       z  }t        j                  r:t        j                   t         j"                  j%                  | |z
  d¬«      |
«      sJ ‚||
dœ}|rž| j                  dk(  r\t        j&                  t        j(                  t        j*                  |d    d«      t        j*                  |d   d«      «      «      |d<   n3t        j&                  t        j(                  |d    |d   «      «      |d<   |�rXt        j&                  | |z
  «      }t        j,                  | d¬«      }t        j                  |ddg   Ž }|t.        dz
  k  rt         j0                  }n$|dt.        z
  kD  rd}nt        j2                  |«      }t5        |«      t.        kD  r+t        j                  |Ž dk  rt         j0                  dz  |z
  }t        j6                  |dd…dd…f   j                  ddd…   Ž t         j0                  dz  z   }t        j8                  |ddg   «      }|d   |d   cxk  xr |d   k  nc }|dddt;        | «      dz  z
  …   }||d<   ||d<   t=        di |¤ŽS )aÏ  
    Given three points on a 2D or 3D arc find the center,
    radius, normal, and angular span.

    Parameters
    ---------
    points : (3, dimension) float
      Points in space, where dimension is either 2 or 3
    return_normal : bool
      If True calculate the 3D normal unit vector
    return_angle : bool
      If True calculate the start and stop angle and span

    Returns
    ---------
    info
      Arc center, radius, and other information.
    ©Údtype)r   r   é   )r)   r   r   r   r)   g       @zarc is colinear!g      @)	r)   r   r   r   r   r)   r   r)   r   )	r)   r)   éÿÿÿÿr)   r)   r*   r)   r)   r*   )é   r+   )Úaxis)r   r   )r+   r   r   r   ç        Nr*   r   r   r!   )ÚnpÚ
asanyarrayr   ÚdotÚshapeÚsqrtÚminÚsumÚprodÚtolÚmergeÚ
ValueErrorÚreshapeÚTÚstrictr   ÚallcloseÚlinalgÚnormÚunitizeÚcrossÚappendÚdiffÚ	_TOL_ZEROÚpiÚarccosÚabsÚarctan2ÚsortÚintr   )r"   r#   r$   ÚvectorsÚabc2ÚabcÚscaleÚedgesÚhalfÚdenomr   Úba2r   ÚresultÚvectorÚedge_directionr0   Úangler   Úangles_sortedÚreverses                        r   Ú
arc_centerrX   &   s(  € ô* �]‰]˜6¬¯©Ô4€Fð ’YÑ &ªÑ"3Ñ3€Gä�6‰6�'˜1‘*˜q˜c F§L¡L°¡OÑ3Ó4€Dä
�'‰'�$‹-€Cð �G‰G‹I€Eà�%‰K€Eà�9‰9‹;˜Ñ€Dà”2—7‘7˜4 %™<Ó(Ñ(€EØŒs�y‰yÒÜÐ+Ó,Ð,à”r—w‘w˜u“~¨Ñ+¬r¯w©w°u«~Ñ=Ñ>€Fð Ò+Ñ,Ò/MÑM×
VÑ
VØóç	�cˆq€cƒk�Dñ€Cð �X‰X�\‰\˜#Ó §¡£Ñ*€Fä
‡z‚zä�}‰}œRŸY™YŸ^™^¨F°V©OÀ!˜^ÓDÀfÔMÐMÐMð ¨&Ñ1€FÙØ�<‰<˜6Ò!ô  $Ÿ|™|Ü—‘œŸ™ G¨A¡J ;°Ó2´B·I±I¸gÀa¹jÈ!Ó4LÓMó ˆF�8Òô
  $Ÿ|™|¬B¯H©H°g¸a±j°[À'È!Á*Ó,MÓNˆF�8Ñâä—‘˜f v™oÓ.ˆÜŸ™ ¨aÔ0ˆä�f‰f�f˜a ˜V‘nÐ%ˆØ”)˜a‘-Ò Ü—E‘E‰EØ�1”y‘=Ò Ø‰Eä—I‘I˜c“NˆEô ˆu‹:œ	Ò!¤b§f¡f¨nÐ&=ÀÒ&CÜ—U‘U˜Q‘Y %Ñ'ˆEä—‘˜V¢A r¨ r E™]Ÿ_™_©T¨r¨TÑ2Ð3´b·e±e¸a±iÑ?ˆÜŸ™ ¨¨1 v¡Ó/ˆØ Ñ" V¨A¡YÖA°¸qÑ1AÔAˆØ%Ñ&C¨!¬c°g°+Ó.>ÀÑ.BÑ*BÐ&CÑDˆØ(ˆˆxÑØˆˆv‰äÑ�VÑÐr   c                 ó@  — t        j                  | d¬«      \  } }	 t        | «      }|j                  |j
                  |j                  |j                  f\  }}}}|rt        j                  dz  }|t        j                  z  }	||z  t        j                  |z  z  }
t        j                  |	|
g«      }t        j                  |dt        j                  «      }t!        t        j"                  |«      «      }t        j$                  | d   |z
  «      }t        j$                  t        j&                  | |«      «      }t        j(                  d||«      }t        j*                  ||df«      }||t        j,                  |«      j/                  d«      z  |z  z  }||t        j0                  |«      j/                  d«      z  |z  z  }|s«t2        j4                  r�t        j6                  | dd	g   |dd	g   z
  «      }|t2        j8                  k  j;                  «       }|sJt=        j>                  d
tA        |«      |«       t=        j>                  dtA        | «      «       tC        d«      ‚| dd	g   |dd	g<   |dd…dd|z
  …f   }|S # t        $ r |r| dd…dd…f   cY S | cY S w xY w)aÇ  
    Returns a version of a three point arc consisting of
    line segments.

    Parameters
    ---------
    points : (3, d) float
      Points on the arc where d in [2,3]
    close :  boolean
      If True close the arc into a circle
    scale : float
      What is the approximate overall drawing scale
      Used to establish order of magnitude for precision

    Returns
    ---------
    discrete : (m, d) float
      Connected points in space
    T)Ú	return_2DNr   é   r   r)   )r*   r)   r*   z4failed to discretize arc (endpoint_distance=%s R=%s)zFailed arc points: %szArc endpoints diverging!r+   )"r   Ústack_3DrX   ÚBaseExceptionr   r   r   r   r.   rD   ÚresÚ	seg_angleÚseg_fracÚmaxÚclipÚinfrI   Úceilr?   r@   ÚlinspaceÚtileÚcosr9   Úsinr6   r;   Úrow_normr7   Úallr   ÚwarningÚstrr8   )r"   ÚcloserM   Úis_2DÚcenter_infor   ÚRÚNrU   Úcount_aÚcount_lÚcountÚV1ÚV2ÚtÚdiscreteÚarc_distÚarc_oks                     r   Údiscretize_arcr{   „   sa  € ô* —M‘M &°DÔ9�M€FˆEðä  Ó(ˆð 	×ÑØ×ÑØ×ÑØ×Ñð	Ñ€FˆAˆq�%ñ Ü—‘˜‘	ˆð ”c—m‘mÑ#€GØ�5‰yœSŸ\™\¨EÑ1Ñ2€Gô �F‰F�G˜WÐ%Ó&€Eô �G‰G�E˜1œbŸf™fÓ%€EÜ”—‘˜“Ó€Eä	�‰�f˜Q‘i &Ñ(Ó	)€BÜ	�‰”b—h‘h ˜r 2Ó&Ó	'€BÜ
�‰�A�u˜eÓ$€Aä�w‰w�v  q˜zÓ*€HØ�”B—F‘F˜1“I×%Ñ% gÓ.Ñ.°Ñ3Ñ3€HØ�”B—F‘F˜1“I×%Ñ% gÓ.Ñ.°Ñ3Ñ3€Hñ Ü�:Š:Ü—}‘} V¨Q°¨G¡_°xÀÀBÀÑ7HÑ%HÓIˆHØ¤§¡Ñ*×/Ñ/Ó1ˆFÙÜ—‘ØJÜ˜“MØôô
 —‘Ð3´S¸³[ÔAÜ Ð!;Ó<Ð<à" A r 7™Oˆ�!�R�Ñð š˜=˜a %™i˜=Ð(Ñ)€Hà€Oøôs ò ñ Øš!˜R˜a˜R˜%‘=Ò ØŠðús   œJ  Ê JÊJÊJc                 óz  — |€dt         j                  g}t        j                  |t         j                  ¬«      }|j                  dk7  rt        d«      ‚|d   |d   k  r|dxx   t         j                  dz  z  cc<   t        j                  | t         j                  ¬«      } | j                  dk7  rt        d«      ‚t        j                  |d   |j                  «       |d   gt         j                  ¬«      }t        j                  t        j                  |«      t        j                  |«      f«      |z  | z   }|S )	a¤  
    For 2D arcs, given a center and radius convert them to three
    points on the arc.

    Parameters
    -----------
    center : (2,) float
      Center point on the plane
    radius : float
      Radius of arc
    angles : (2,) float
      Angles in radians for start and end angle
      if not specified, will default to (0.0, pi)

    Returns
    ----------
    three : (3, 2) float
      Arc control points
    r-   r'   )r   zangles must be (2,)!r)   r   r   zonly valid on 2D arcs!)r.   rD   r/   r   r1   r8   ÚarrayÚmeanÚcolumn_stackrg   rh   )r   r   r   Úthrees       r   Úto_threepointr�   Ú   sñ   € ð* €~Ø”r—u‘u�ˆä�]‰]˜6¬¯©Ô4€FØ‡|�|�tÒÜÐ/Ó0Ð0àˆa�y�6˜!‘9ÒØˆq‹	”R—U‘U˜Q‘YÑ‹	ä�]‰]˜6¬¯©Ô4€FØ‡|�|�tÒÜÐ1Ó2Ð2ô �X‰X�v˜a‘y &§+¡+£-°¸±Ð;Ä2Ç:Á:ÔN€Fä�_‰_œbŸf™f V›n¬b¯f©f°V«nÐ=Ó>ÀÑGÈ6ÑQ€Eà€Lr   )TT)Fg      ð?r   )Údataclassesr   Únumpyr.   Ú r   Ú	constantsr   r   r^   r   r6   Útypedr	   r
   r   r   rC   r   ÚboolrX   r{   r�   r!   r   r   Ú<module>rˆ      s{   ðÝ !ã å Ý Ý 'Ý 'ß 7Ó 7ð €	ð ÷#ð #ó ð#ð. IMñ[Øð[Ø&*ð[ØAEð[àó[ó|Sôl)r   