Ë
    :vžji!  ã                   óx   — 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	m
Z
 	 dd„Zdd	„Zd
„ Zdd„Z	 	 	 	 	 	 dd„Zy)é    Né   )ÚtransformationsÚutil)Úplane_transformé   )Úarc)ÚArcÚLinec           	      óÊ  — ddl m} |€/t        j                  dt        j                  dz  |dz   «      dd }nCt        |t        «      st        |t        «      rt        j                  d||«      }nt        d«      ‚|€ddg}t        j                  t        j                  |«      t        j                  |«      f«      | z  }g }	g }
|D ]v  }t        j                  dt        j                  g||¬	«      }|
j                  t        t        j                   d
«      t#        |	«      z   d¬«      «       |	j%                  |«       Œx t        j&                  |	«      |z   }	 |d|
|	dœ|¤Ž}|S )a
  
    Create a Path2D representing a circle pattern.

    Parameters
    ------------
    pattern_radius : float
      Radius of circle centers
    circle_radius : float
      The radius of each circle
    count : int
      Number of circles in the pattern
    center : (2,) float
      Center of pattern
    angle :  float
      If defined pattern will span this angle
      If None, pattern will be evenly spaced

    Returns
    -------------
    pattern : trimesh.path.Path2D
      Path containing circular pattern
    r   ©ÚPath2DNç        ç       @éÿÿÿÿzangle must be float or int!r   ©ÚanglesÚcenterÚradiusé   T©ÚpointsÚclosed©ÚentitiesÚvertices© )Úpathr   ÚnpÚlinspaceÚpiÚ
isinstanceÚfloatÚintÚ
ValueErrorÚcolumn_stackÚcosÚsinr   Úto_threepointÚappendr	   ÚarangeÚlenÚextendÚarray)Úpattern_radiusÚcircle_radiusÚcountr   ÚangleÚkwargsr   r   ÚcentersÚvertÚentsÚcircle_centerÚthreeÚpatterns                 úf/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/trimesh/path/creation.pyÚcircle_patternr:   	   s,  € õ2 à€}Ü—‘˜S¤"§%¡%¨#¡+¨u°q©yÓ9¸#¸2Ð>‰Ü	�Eœ5Ô	!¤Z°´sÔ%;Ü—‘˜S %¨Ó/‰äÐ6Ó7Ð7à€~Ø�s�ˆô �o‰oœrŸv™v f›~¬r¯v©v°f«~Ð>Ó?À.ÑP€Gà€DØ€DÛ ˆä×!Ñ!Ø”r—u‘u�: m¸Mô
ˆð 	�‰”CœrŸy™y¨›|¬c°$«iÑ7ÀÔEÔFà�‰�EÕð !ô �8‰8�D‹>˜FÑ"€DÙÐ<˜d¨TÑ<°VÑ<€GØ€Nó    c                 ó$  — ddl m} |€ddg}n%t        j                  |t        j                  ¬«      }t        | «      } t        j                  dt        j                  g|| ¬«      } |dt        t        j                  d«      d¬	«      g|d
œ|¤Ž}|S )aŒ  
    Create a Path2D containing circle with the specified
    radius.

    Parameters
    --------------
    radius : float
      The radius of the circle
    center : None or (2,) float
      Center of the circle, origin by default
    ** kwargs : dict
      Passed to trimesh.path.Path2D constructor

    Returns
    -------------
    circle : Path2D
      Path containing specified circle
    r   r   r   ©Údtyper   r   r   Tr   r   r   )r   r   r   Ú
asanyarrayÚfloat64r"   r   r(   r    r	   r*   )r   r   r2   r   r7   Úresults         r9   ÚcirclerB   C   s…   € õ& à€~Ø�s�‰ä—‘˜v¬R¯Z©ZÔ8ˆä�6‹]€Fô ×Ñ a¬¯© Z¸ÀvÔN€Eáð ÜœRŸY™Y q›\°$Ô7Ð8À5ñØLRñ€Fð €Mr;   c           	      óZ  — ddl m} t        j                  | t        j                  ¬«      } | j
                  dk(  r0t        j                  | «      dz  }t        j                  | |g«      } t        j                  | d«      s!t        j                  | d«      st        d«      ‚g }g }| j                  d«      D ]f  \  }}|j                  t        t        j                  d	«      d
z  t        |«      z   «      «       |j!                  ||d   |d   g||d   |d   gg«       Œh  |d||dœ|¤Ž}|S )a-  
    Create a Path2D containing a single or multiple rectangles
    with the specified bounds.

    Parameters
    --------------
    bounds : (2, 2) float, or (m, 2, 2) float
      Minimum XY, Maximum XY

    Returns
    -------------
    rect : Path2D
      Path containing specified rectangles
    r   r   r=   )r   r   )r   r   )r   r   r   z"bounds must be (m, 2, 2) or (2, 2)é   é   r   r   r   )r   r   r   r?   r@   ÚshapeÚabsr-   r   Úis_shaper$   Úreshaper)   r
   r*   r+   r,   )	Úboundsr2   r   ÚhalfÚlinesr   ÚlowerÚupperÚrects	            r9   Ú	rectanglerP   i   s  € õ ô �]‰]˜6¬¯©Ô4€Fð ‡|�|�tÒÜ�v‰v�f‹~ Ñ#ˆÜ—‘˜D˜5 $˜-Ó(ˆô �M‰M˜& &Ô)¬T¯]©]¸6À:Ô-NÜÐ=Ó>Ð>ð €Eà€Hð Ÿ™ zÖ2‰ˆˆuØ�‰”Tœ2Ÿ9™9 Q›<¨!Ñ+¬s°8«}Ñ<Ó=Ô>Ø�‰˜  q¡¨5°©8Ð 4°e¸eÀA¹hÈÈaÉÐ=QÐRÕSð 3ñ
 Ð>˜5¨8Ñ>°vÑ>€Dà€Kr;   c                 óh  — ddl m} g d¢}t        j                  |dt        j                  ¬«      j                  d«      }|dz  }| �Dt        j                  | t        j                  ¬«      } | j                  d	k7  rt        d
«      ‚|| z  }|�t        j                  ||«      }g d¢} |||   «      }|S )aC  
    Return a cuboid.

    Parameters
    ------------
    extents : float, or (3,) float
      Edge lengths
    transform: (4, 4) float
      Transformation matrix
    **kwargs:
        passed to Trimesh to create box

    Returns
    ------------
    geometry : trimesh.Path3D
      Path outline of a cuboid geometry
    r   )Ú	load_path)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚC)Úorderr>   )r   r   g      à?r=   )r   zExtents must be (3,)!)r   r   r   r   r   rE   rD   é   é   rE   r   r   rV   rU   r   r   rD   )Úexchange.loadrR   r   r-   r@   rI   r?   rF   r$   r   Útransform_points)ÚextentsÚ	transformr2   rR   r   ÚindicesÚoutlines          r9   Úbox_outliner]   –   s­   € õ$ )ò X€HÜ�x‰x˜¨´2·:±:Ô>×FÑFÀwÓO€HØ��O€Hð ÐÜ—-‘- ¬r¯z©zÔ:ˆØ�=‰=˜DÒ ÜÐ4Ó5Ð5Ø�GÑˆð ÐÜ"×3Ñ3°H¸iÓHˆò B€GÙ˜ Ñ)Ó*€Gà€Nr;   c                 ó†  — ddl m} t        | «      } t        |«      }t	        j
                  d| |dz   «      dd }|d   }	d}
g }g }|D �]W  }|rÕt        ||d   z  |z  «      }t	        j
                  dt        j                  dz  |«      }t	        j                  t	        j                  |«      t	        j                  |«      f«      |z  }|j                  |«       |j                  t        t	        j                  t        |«      «      |
z   ¬«      «       |
t        |«      z  }
|j                  |	 |g|	|g|	 | g|	| g||	 g||	g| |	 g| |	gg«       d	D ]6  }|j                  t        t	        j                  d«      |
z   |z   ¬«      «       Œ8 |
t        |d   «      z  }
�ŒZ |j                  d|	gd|	 g|	 dg|	dgg«       |j                  t        t	        j                  d«      |
z   ¬«      «       |j                  t        t	        j                  d«      |
z   dz   ¬«      «       t	        j                  |«      }|€.|�,|�*t        j                  j!                  t#        ||¬
«      «      }t	        j                  |t	        j$                  t        |«      «      f«      }|�t'        j(                  ||¬«      } |||¬«      }|S )aà  
    Create a Path3D for a grid visualization of a plane.

    Parameters
    -----------
    side : float
      Length of half of a grid side
    count : int
      Number of grid lines per grid half
    transform : None or (4, 4) float
      Transformation matrix to move grid location.
      Takes precedence over plane_origin if both are passed.
    plane_origin : None or (3,) float
      Plane origin
    plane_normal : None or (3,) float
      Unit normal vector
    include_circle : bool
      Include a circular pattern inside the grid
    sections_circle : int
      How many sections should the smallest circle have

    Returns
    ----------
    grid : trimesh.path.Path3D
      Path containing grid plane visualization
    r   )ÚPath3Dr   Nr   r   r   )r   )r   r   rE   rV   )ÚoriginÚnormal)Úmatrixr   )r   r_   r"   r#   r   r   r    r%   r&   r'   r)   r
   r*   r+   ÚvstackÚlinalgÚinvr   Úzerosr   rX   )Úsider0   rZ   Úplane_originÚplane_normalÚinclude_circleÚsections_circler_   ÚradiiÚrmaxÚcurrentr   r   ÚrÚ
circle_resÚthetarB   ÚiÚ	grid_paths                      r9   Úgridrt   Á   s…  € õF ô �‹;€Dä�‹J€Eä�K‰K˜˜T 5¨1¡9Ó-¨a¨bÐ1€Eà�‰9€Dð €Gà€HØ€HÜˆÙä˜a %¨¡(™l¨oÑ=Ó>ˆJä—K‘K ¤R§U¡U¨Q¡Y°
Ó;ˆEÜ—_‘_¤b§f¡f¨U£m´R·V±V¸E³]Ð%CÓDÀqÑHˆFà�O‰O˜FÔ#Ø�O‰OœD¬¯	©	´#°f³+Ó(>ÀÑ(HÔIÔJà”s˜6“{Ñ"ˆGà�‰à�˜�
Ø�q�	Ø�˜˜�Ø˜�r�
Ø�T�E�
Ø�D�	Ø��d�U�Ø��T�
ð	ô	
ó ˆAØ�O‰OœD¬¯	©	°!«°wÑ(>ÀÑ(BÔCÕDð à”3�x ‘|Ó$Ñ$Šð9 ð> ‡O�O�a˜�Y  T E 
¨d¨U°A¨J¸¸q¸	ÐBÔCØ‡O�O”D¤§	¡	¨!£¨wÑ 6Ô7Ô8Ø‡O�O”D¤§	¡	¨!£¨wÑ 6¸Ñ :Ô;Ô<ä�y‰y˜Ó"€Hð Ð˜\Ð5¸,Ð:RÜ—I‘I—M‘MÜ <¸ÔEó
ˆ	ô
 �‰ ¬"¯(©(´3°x³=Ó*AÐBÓC€HàÐÜ"×3Ñ3°HÀYÔOˆá °8Ô<€IØÐr;   )NN)N)rD   NNNTé    )Únumpyr   Ú r   r   Úgeometryr   r   r   r	   r
   r:   rB   rP   r]   rt   r   r;   r9   Ú<module>ry      sL   ðÛ ç $Ý &Ý ß ð >Bó7ót#òL*óZ(ðZ ØØØØØôer;   