Ë
    :vžj
  ã                   óŽ  — U d 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
mZmZmZ 	 ddlmZmZ 	 	 dd	ed
e
defd„Z	 	 dd	ed
e
defd„Z	 	 dd	ed
e
defd„Z	 dd	ededefd„Zi Zeeef   ed<    eee«      reed<   need<   ej:                  j<                  rej:                  j>                  ed<   n e e d«      «      ed<    e!d„ ejE                  «       D «        e e d«      «      «      ed<   ejG                  «       D � �ch c]  \  } } e|e«      rŒ| ’Œ c}} Z$y# e$ rZ ee«      Z ee«      ZY dZ[�Œ
dZ[ww xY wc c}} w )z]
boolean.py
-------------

Do boolean operations on meshes using either Blender or Manifold.
é    Né   )Ú
interfaces)ÚExceptionWrapper)Úreduce_cascade)ÚBooleanEngineTypeÚBooleanOperationTypeÚCallableÚSequence)ÚManifoldÚMeshÚmeshesÚengineÚcheck_volumec                 ó&   — t        |   | fd|dœ|¤ŽS )a/  
    Compute the boolean difference between a mesh an n other meshes.

    Parameters
    ----------
    meshes : sequence of trimesh.Trimesh
      Meshes to be processed.
    engine
      Which backend to use, i.e. 'blender' or 'manifold'
    check_volume
      Raise an error if not all meshes are watertight
      positive volumes. Advanced users may want to ignore
      this check as it is expensive.
    kwargs
      Passed through to the `engine`.

    Returns
    ----------
    difference
      A `Trimesh` that contains `meshes[0] - meshes[1:]`
    Ú
difference©Ú	operationr   ©Ú_engines©r   r   r   Úkwargss       ú`/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/trimesh/boolean.pyr   r      s+   € ô8 �FÑØðØ&°\ñØEKñð ó    c                 ó&   — t        |   | fd|dœ|¤ŽS )a-  
    Compute the boolean union between a mesh an n other meshes.

    Parameters
    ----------
    meshes : list of trimesh.Trimesh
      Meshes to be processed
    engine : str
      Which backend to use, i.e. 'blender' or 'manifold'
    check_volume
      Raise an error if not all meshes are watertight
      positive volumes. Advanced users may want to ignore
      this check as it is expensive.
    kwargs
      Passed through to the `engine`.

    Returns
    ----------
    union
      A `Trimesh` that contains the union of all passed meshes.
    Úunionr   r   r   s       r   r   r   7   s+   € ô6 �FÑØðØ!°ñØ@Fñð r   c                 ó&   — t        |   | fd|dœ|¤ŽS )a5  
    Compute the boolean intersection between a mesh and other meshes.

    Parameters
    ----------
    meshes : list of trimesh.Trimesh
      Meshes to be processed
    engine : str
      Which backend to use, i.e. 'blender' or 'manifold'
    check_volume
      Raise an error if not all meshes are watertight
      positive volumes. Advanced users may want to ignore
      this check as it is expensive.
    kwargs
      Passed through to the `engine`.

    Returns
    ----------
    intersection
      A `Trimesh` that contains the intersection geometry.
    Úintersectionr   r   r   s       r   r   r   W   s+   € ô6 �FÑØðØ(°|ñØGMñð r   r   c                 óØ  — |rt        d„ | D «       «      st        d«      ‚| D �cg c]s  }t        t        t	        j
                  |j                  t        j                  ¬«      t	        j
                  |j                  t        j                  ¬«      ¬«      ¬«      ‘Œu }}|dk(  rZt        | «      dk  rt        d«      ‚t        | «      dk(  r|d	   |d
   z
  }n\t        | «      dkD  rNt        d„ |d
d «      }|d	   |z
  }n5|dk(  rt        d„ |«      }n"|dk(  rt        d„ |«      }nt        d|› d�«      ‚d
dlm} j                  «       }	 ||	j                  |	j                   d¬«      S c c}w )a³  
    Run an operation on a set of meshes using the Manifold engine.

    Parameters
    ----------
    meshes : list of trimesh.Trimesh
      Meshes to be processed
    operation
      Which boolean operation to do.
    check_volume
      Raise an error if not all meshes are watertight
      positive volumes. Advanced users may want to ignore
      this check as it is expensive.
    kwargs
      Passed through to the `engine`.
    c              3   ó4   K  — | ]  }|j                   –— Œ y ­w©N)Ú	is_volume)Ú.0Úms     r   Ú	<genexpr>z#boolean_manifold.<locals>.<genexpr>�   s   è ø€ Ð<±V° §¥±Vùs   ‚zNot all meshes are volumes!)Údtype)Úvert_propertiesÚ	tri_verts)Úmeshr   é   z(Difference only defined over two meshes.r   r   c                 ó   — | |z   S r    © ©ÚaÚbs     r   Ú<lambda>z"boolean_manifold.<locals>.<lambda>¤   s   € °!°a²%r   Nr   c                 ó   — | |z   S r    r+   r,   s     r   r/   z"boolean_manifold.<locals>.<lambda>¨   ó   € °a¸!²er   r   c                 ó   — | |z  S r    r+   r,   s     r   r/   z"boolean_manifold.<locals>.<lambda>ª   r1   r   zInvalid boolean operation: 'Ú')ÚTrimeshF)ÚverticesÚfacesÚprocess)ÚallÚ
ValueErrorr   r   ÚnpÚarrayr5   Úfloat32r6   Úuint32Úlenr   Ú r4   Úto_meshr&   r'   )
r   r   r   r   r(   Ú	manifoldsÚresult_manifoldÚunionedr4   Úresult_meshs
             r   Úboolean_manifoldrE   w   sc  € ñ, œCÑ<±VÓ<Ô<ÜÐ6Ó7Ð7ñ óñ ˆDô 	ÜÜ "§¡¨¯©¼b¿j¹jÔ IÜŸ(™( 4§:¡:´R·Y±YÔ?ôö	
ð ð ð ð �LÒ Üˆv‹;˜Š?ÜÐGÓHÐHÜ�‹[˜AÒà'¨™l¨Y°q©\Ñ9‰OÜ�‹[˜1Š_ä$Ñ%7¸À1À2¸ÓGˆGà'¨™l¨WÑ4‰OØ	�gÒ	Ü(Ñ);¸YÓG‰Ø	�nÒ	$Ü(Ñ);¸YÓG‰äÐ7¸	°{À!ÐDÓEÐEõ à!×)Ñ)Ó+€KáØ×,Ñ,°K×4IÑ4IÐSXôð ùòEs   ¤A8E'r   ÚmanifoldÚblenderz`blender` is not in `PATH`c              #   óB   K  — | ]  }t        |t        «      rŒ|–— Œ y ­wr    )Ú
isinstancer   )r"   Úvs     r   r$   r$   Ì   s   è ø€ ÐIÑ!ˆ1¬°AÔ7GÕ)H„QÑ!ùs   ‚˜zANo boolean backend: `pip install manifold3d` or install `blender`)NT)T)%Ú__doc__Únumpyr:   r?   r   Ú
exceptionsr   Ú	iterationr   Útypedr   r   r	   r
   Ú
manifold3dr   r   ÚBaseExceptionÚEÚboolr   r   r   rE   r   ÚdictÚstrÚ__annotations__rI   rG   ÚexistsÚbooleanÚImportErrorÚnextÚvaluesÚitemsÚengines_available)ÚkrJ   s   00r   Ú<module>r_      sÅ  ðòó å Ý (Ý %ß NÓ Nð#ß)ð !%ØñØðàðð óðF !%ØñØðàðð óðD !%ØñØðàðð óðF ñ>Øð>à#ð>ð ó>ðD !#€ˆ$ˆs�Hˆ}Ñ
Ó "áˆhÐ(Ô)à#€HˆZÒð ,€HˆZÑð ×Ñ×Òà$×,Ñ,×4Ñ4€HˆYÒñ +©;Ð7SÓ+TÓU€HˆYÑñ ÙI�—‘Ô!ÓIÙÙÐWÓXóó€ˆ�ð —.‘.Ô"ôÙ"‰$ˆ!ˆQ©*°QÐ8HÕ*I‚AÐ"òÑ øðC ò #Ù˜AÓ€DÙ Ó"†Hûð#üóBs#   §D ÄEÄEÄD>Ä#D9Ä9D>