Ë
    :vžjŒ  ã                   ó¶   — d dl ZddlmZmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZ d„ Zdd	e	d
e
ej                     dz  defd„Zd„ Zdefd„Zdd„Zde	de	defd„Zy)é    Né   )ÚgraphÚgroupingÚutil)Útol_path)Ú	ArrayLikeÚNDArrayé   ©ÚArcÚLinec                 ó  — | j                  «       }t        t        dœ}dgt        | d   «      z  }t	        | d   «      D ]<  \  }}|d   dk(  r ||d      |d   ¬«      ||<   Œ$ ||d      |d   |d   ¬	«      ||<   Œ> ||d<   |S )
a'  
    Turn a pure dict into a dict containing entity objects that
    can be sent directly to a Path constructor.

    Parameters
    ------------
    as_dict : dict
      Has keys: 'vertices', 'entities'

    Returns
    ------------
    kwargs : dict
      Has keys: 'vertices', 'entities'
    r   NÚentitiesÚtyper   Úpoints)r   Úclosed)r   r   )Úcopyr   r   ÚlenÚ	enumerate)Úas_dictÚresultÚloadersr   Úentity_indexÚentitys         úk/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/trimesh/path/exchange/misc.pyÚdict_to_pathr   	   s­   € ð  �\‰\‹^€Fä¤4Ñ(€Gàˆvœ˜G JÑ/Ó0Ñ0€Hä )¨'°*Ñ*=Ö >Ñˆ�fØ�&‰>˜VÒ#Ø%< W¨V°F©^Ñ%<ÀFÈ8ÑDTÔ%UˆH�\Ò"à%< W¨V°F©^Ñ%<Ø˜hÑ'°°xÑ0@ô&ˆH�\Ò"ð	 !?ð "€Fˆ:Ñà€Mó    ÚlinesÚindexÚreturnc           	      óZ  — t        j                  | t         j                  ¬«      } |�%t        j                  |t         j                  ¬«      }t	        j
                  | d«      r@t        j                  t        t        j                  t        | «      «      «      g«      | dœ}|S t	        j
                  | d«      ri| j                  d   }| j                  d|f«      } t        j                  | t        j                  ¬«      \  }}t!        |j                  d«      | |   ¬«      S t#        d	«      ‚)
a}  
    Turn line segments into argument to be used for a Path2D or Path3D.

    Parameters
    ------------
    lines : (n, 2, dimension) or (n, dimension) float
      Line segments or connected polyline curve in 2D or 3D
    index : (n,) int64
      If passed save an index for each line segment.

    Returns
    -----------
    kwargs : dict
      kwargs for Path constructor
    )Údtype)éÿÿÿÿ©r
   r   ©r   Úvertices)r#   r
   r$   r#   )Údigits©r#   r
   ©Úedgesr&   z&Lines must be (n,(2|3)) or (n,2,(2|3)))ÚnpÚ
asanyarrayÚfloat64Úint64r   Úis_shapeÚarrayr   Úaranger   ÚshapeÚreshaper   Úunique_rowsr   Úmerge_digitsÚedges_to_pathÚ
ValueError)r   r   r   Ú	dimensionÚuniqueÚinverses         r   Úlines_to_pathr;   +   sá   € ô  �M‰M˜%¤r§z¡zÔ2€EàÐÜ—‘˜e¬2¯8©8Ô4ˆä‡}�}�U˜LÔ)ô !Ÿh™h¬¬R¯Y©Y´s¸5³zÓ-BÓ(CÐ'DÓEÐSXÑYˆØˆÜ	�‰�u˜oÔ	.à—K‘K ‘Oˆ	à—‘˜r 9˜oÓ.ˆä"×.Ñ.¨u¼X×=RÑ=RÔS‰ˆ�ô  7§?¡?°7Ó#;ÀeÈFÁmÔTÐTäÐAÓBÐBr   c           
      óö  — g }g }t        | j                  d«      r| j                  j                  }n| j                  g}d}|D ]‹  }|j                  t	        t        j                  t        |j                  «      «      |z   «      «       |t        |j                  «      z  }|j                  t        j                  |j                  «      «       Œ� |t        |«      dkD  rt        j                  |«      n|dœ}|S )a  
    Load shapely Polygon objects into a trimesh.path.Path2D object

    Parameters
    -------------
    polygon : shapely.geometry.Polygon
      Input geometry

    Returns
    -----------
    kwargs : dict
      Keyword arguments for Path2D constructor
    Úgeomsr   r%   )ÚhasattrÚboundaryr=   Úappendr   r+   r1   r   Úcoordsr0   Úvstack)Úpolygonr   r&   Ú
boundariesÚcurrentr?   Úkwargss          r   Úpolygon_to_pathrG   U   sÎ   € ð €Hà€Häˆw×Ñ Ô)Ø×%Ñ%×+Ñ+‰
à×&Ñ&Ð'ˆ
ð €GÛˆØ�‰œœRŸY™Y¤s¨8¯?©?Ó';Ó<¸wÑFÓGÔHØ”3�x—‘Ó'Ñ'ˆà�‰œŸ™ §¡Ó1Õ2ð	 ð Ü+.¨x«=¸1Ò+<”B—I‘I˜hÔ'À(ñ€Fð
 €Mr   c           
      óô  — ddl }g }g }t        | |j                  «      rt        | j                  «      } n| g} | D ]�  }t        |d«      sŒt        j                  |j                  «      }t        |«      dk  rŒ>|j                  t        t        j                  t        |«      «      t        |«      z   «      «       |j                  |«       Œ’ t        j                  |«      t        j                  |«      dœ}|S )a;  
    Load shapely LineString objects into arguments to create a Path2D or Path3D.

    Parameters
    -------------
    multi : shapely.geometry.LineString or MultiLineString
      Input 2D or 3D geometry

    Returns
    -------------
    kwargs : dict
      Keyword arguments for Path2D or Path3D constructor
    r   NrA   r
   r%   )ÚshapelyÚ
isinstanceÚMultiLineStringÚlistr=   r>   r+   r0   rA   r   r@   r   r1   Úextend)ÚmultirI   r   r&   ÚlinerA   rF   s          r   Úlinestrings_to_pathrP   ~   sÂ   € ó ð €HØ€Hä�%˜×0Ñ0Ô1Ü�U—[‘[Ó!‰à�ˆãˆä�4˜Õ"Ü—X‘X˜dŸk™kÓ*ˆFÜ�6‹{˜QŠØØ�O‰OœD¤§¡¬3¨v«;Ó!7¼#¸h»-Ñ!GÓHÔIØ�O‰O˜FÕ#ð ô Ÿ(™( 8Ó,¼"¿(¹(À8Ó:LÑM€FØ€Mr   c                 óþ   — |€| j                   }n-| j                   j                  d«      |   j                  d«      }t        j                  |d¬«      }|j	                  t        ||   | j                  ¬«      «       |S )aJ  
    Given a mesh and face indices find the outline edges and
    turn them into a Path3D.

    Parameters
    ------------
    mesh : trimesh.Trimesh
      Triangulated surface in 3D
    face_ids : (n,) int
      Indexes referencing mesh.faces

    Returns
    ---------
    kwargs : dict
      Kwargs for Path3D constructor
    )r#   é   r(   é   )Úrequire_countr)   )Úedges_sortedr3   r   Ú
group_rowsÚupdater6   r&   )ÚmeshÚface_idsrF   r*   Úunique_edgess        r   Úfaces_to_pathr[   ¤   sp   € ð" ÐØ×!Ñ!‰ð ×!Ñ!×)Ñ)¨'Ó2°8Ñ<×DÑDÀWÓMˆä×&Ñ& u¸AÔ>€Là
‡M�M”- e¨LÑ&9ÀDÇMÁMÔRÔSà€Mr   r*   r&   c                 óÆ   — t        j                  | d¬«      }t        j                  || ¬«      }|D �cg c]  }t        |«      ‘Œ }}|j	                  ||ddœ«       |S c c}w )a|  
    Given an edge list of indices and associated vertices
    representing lines, generate kwargs for a Path object.

    Parameters
    -----------
    edges : (n, 2) int
      Vertex indices of line segments
    vertices : (m, dimension) float
      Vertex positions where dimension is 2 or 3

    Returns
    ----------
    kwargs : dict
      Kwargs for Path constructor
    Údfs)Úmode)r*   F)r   r&   Úprocess)r   Ú
traversalsÚfill_traversalsr   rW   )r*   r&   rF   r]   Údfs_connectedÚdr   s          r   r6   r6   Â   sa   € ô$ ×
Ñ
˜5 uÔ
-€Cô ×)Ñ)¨#°UÔ;€Mñ ,Ó,™m˜ŒT�!�W˜m€EÐ,à
‡M�M˜u°(ÀuÑMÔNØ€Mùò -s   ³A)N)Únumpyr+   Ú r   r   r   Ú	constantsr   Útypedr   r	   r   r   r   r   r.   Údictr;   rG   rP   r[   r6   © r   r   Ú<module>rj      sx   ðÛ ç %Ñ %Ý !ß 'ß  òñD'˜ð '¨7°2·8±8Ñ+<¸tÑ+Cð 'Ètó 'òT&ðR# $ó #óLð<˜ð ¨ið Àdô r   