
    Ti
                     `    d dl Z d dlZddlmZ ddlmZmZmZ de	fdZ
d
defdZd	e
iZd	eiZdS )    N   )triangulate_quads)array_to_stringcomment_stripdecode_textreturnc                 (   |                                  }t          t          |                                                    }t	          j        d|d          \  }}}|                                dvrt          d| d          d t          	                    t          |                    D             }d |D             }t          j        |d	                                         t          j        
          }|dd         \  }}t          j        d |d|dz            D             t          j        
          }	|	                    |df          }	d ||dz   ||z   dz            D             }
d |
D             }
t          |
          }
|	|
d}|S )z
    Load an OFF file into the kwargs for a Trimesh constructor.

    Parameters
    ----------
    file_obj : file object
      Contains an OFF file

    Returns
    ----------
    loaded : dict
      kwargs for Trimesh constructor
    z
(COFF|OFF)   )maxsplit)OFFCOFFzNot an OFF file! Header was: ``c                 6    g | ]}|                                 S  )strip.0is     N/DATA/AppData/hermes/venv/lib/python3.11/site-packages/trimesh/exchange/off.py
<listcomp>zload_off.<locals>.<listcomp>"   s     :::Aaggii:::    c                 8    g | ]}t          |          d k    |S )r   )lenr   s     r   r   zload_off.<locals>.<listcomp>$   s#    ...A3q66A::a:::r   r   )dtypeNr   c                 F    g | ]}|                                 d d         S )N   splitr   s     r   r   zload_off.<locals>.<listcomp>+   s(    ===12A2===r   r   c                 6    g | ]}|                                 S r   r   r   s     r   r   zload_off.<locals>.<listcomp>2   s     YYY1QWWYYYYYr   c                 N    g | ]"}|d t          |d                   d z            #S )r
   r   )int)r   lines     r   r   zload_off.<locals>.<listcomp>4   s1    :::DT!c$q'llQ&&':::r   )verticesfaces)readr   r   r   rer   upper	NameErrorstr
splitlinesnparrayint64float64reshaper   )file_objkwargstext_headerrawsplitsvertex_count
face_countr#   r$   s              r   load_offr9   	   s    ==??D T**++1133D XlD1===NAvs||~~_,,BBBBCCC ;:C!9!9:::F.....F XfQioo''rx888F%bqbzL*x==q<!+;'; <===RZ  H
 q 122H ZY|a'7,:SVW:W'W XYYYE::E:::Ee$$E"U33FMr   
   c           
         t          |          }t          j        t          j        t	          | j                            dz  | j        f                              t          j                  }d                    dt          t	          | j
                            dz   t          t	          | j                            z   dz   t          | j
        dd|          t          |dd          dg          }|S )	a  
    Export a mesh as an OFF file, a simple text format

    Parameters
    -----------
    mesh : trimesh.Trimesh
      Geometry to export
    digits : int
      Number of digits to include on floats

    Returns
    -----------
    export : str
      OFF format output
    r   
r    z 0)	col_delim	row_delimdigits)r>   r?    )r!   r+   column_stackonesr   r$   astyper-   joinr)   r#   r   )meshr@   faces_stackedexports       r   
export_offrI   =   s    " [[FORWS__%=%=%A4:$NOOVV
 M YYDM""##c)CDJ,@,@@4GDMSDQWXXXMSDIII	
 F Mr   off)r:   )r&   numpyr+   geometryr   utilr   r   r   dictr9   r)   rI   _off_loaders_off_exportersr   r   r   <module>rQ      s    				     ( ( ( ( ( ( > > > > > > > > > >1D 1 1 1 1h! !3 ! ! ! !H x $r   