3
MyaA                 @   sn   d dl Z d dlZdZdZdZdd Zdd Zd	d
 Zdd Zdd Z	G dd dZ
G dd de
Zdd ZdS )    Na  facet normal {normal[0]:.4f} {normal[1]:.4f} {normal[2]:.4f}
outer loop
vertex {face[0][0]:.4f} {face[0][1]:.4f} {face[0][2]:.4f}
vertex {face[1][0]:.4f} {face[1][1]:.4f} {face[1][2]:.4f}
vertex {face[2][0]:.4f} {face[2][1]:.4f} {face[2][2]:.4f}
endloop
endfacet
Z80sIZ12fHc             C   sj   | d |d  | d |d   }| d |d  | d |d   }| d |d  | d |d   }|||gS )N      r    )uvs1s2Zs3r   r   8/afs/cs.cmu.edu/academic/class/15294-f21/STL/stlwrite.pycrossproduct   s       r
   c             C   s6   t j| d | d  | d | d   | d | d   S )Nr   r   r   )mathZsqrt)r   r   r   r	   norm   s    r   c             C   s6   t | }|dkrd}| d | | d | | d | gS )Nr   r   r   )r   )r   mr   r   r	   	normalize!   s    r   c             C   s   t t| |S )N)r   r
   )r   r   r   r   r	   normalto'   s    r   c             C   s.   | d |d  | d |d  | d |d  gS )Nr   r   r   r   )r   r   r   r   r	   diff*   s    r   c               @   sH   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )ASCII_STL_WriterzC Export 3D objects build of 3 or 4 vertices as ASCII STL file.
    c             C   s   || _ | j  d S )N)fp_write_header)selfstreamr   r   r	   __init__0   s    zASCII_STL_Writer.__init__c             C   s   | j jd d S )Ns   solid python
)r   write)r   r   r   r	   r   4   s    zASCII_STL_Writer._write_headerc             C   s   | j jd d S )Ns   endsolid python
)r   r   )r   r   r   r	   close7   s    zASCII_STL_Writer.closec             C   sF   t t|d |d t|d |d }| jjttj||dd d S )Nr   r   r   )Znormalfaceutf8)r   r   r   r   bytesASCII_FACETformat)r   r   nr   r   r	   _write:   s    &zASCII_STL_Writer._writec             C   s    |\}}}}|||f|||ffS )Nr   )r   r   p1p2p3p4r   r   r	   _split>   s    zASCII_STL_Writer._splitc             C   sT   t |dkr0| j|\}}| j| | j| n t |dkrH| j| ntddS )z$ Add one face with 3 or 4 vertices.       z"only 3 or 4 vertices for each faceN)lenr$   r   
ValueError)r   r   Zface1Zface2r   r   r	   add_faceB   s    
zASCII_STL_Writer.add_facec             C   s   x|D ]}| j | qW dS )z Add many faces. N)r)   )r   Zfacesr   r   r   r	   	add_facesM   s    
zASCII_STL_Writer.add_facesN)__name__
__module____qualname____doc__r   r   r   r   r$   r)   r*   r   r   r   r	   r   -   s   r   c               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )Binary_STL_WriterzD Export 3D objects build of 3 or 4 vertices as binary STL file.
    c             C   s   d| _ tj| | d S )Nr   )counterr   r   )r   r   r   r   r	   r   U   s    zBinary_STL_Writer.__init__c             C   s   | j   d S )N)r   )r   r   r   r	   r   Y   s    zBinary_STL_Writer.closec             C   s(   | j jd | j jtjtd| j d S )Nr   s   Python Binary STL Writer)r   seekr   structpackBINARY_HEADERr0   )r   r   r   r	   r   \   s    zBinary_STL_Writer._write_headerc             C   s   |  j d7  _ tt|d |d t|d |d }|d |d |d |d d |d d |d d |d d |d d |d d |d d |d d |d d dg}| jjtjtf|  d S )Nr   r   r   )r0   r   r   r   r   r2   r3   BINARY_FACET)r   r   r   datar   r   r	   r   `   s    &zBinary_STL_Writer._writeN)r+   r,   r-   r.   r   r   r   r   r   r   r   r	   r/   R   s
   r/   c           
   C   sN   dd } d}t |d"}t|}|j|   |j  W d Q R X td|  d S )Nc              S   s4   d	} d
}d}d}| ||g|||g||| g|| |ggS )Nr   r   r   r&         r%      )r   r   r   )r   r   r&   )r:   r;   r%   )r&   r<   r9   r   )r    r!   r"   r#   r   r   r	   get_trianglesm   s
    zexample.<locals>.get_trianglesztriangles.stlwbzWrote )openr   r*   r   print)r=   filenamer   writerr   r   r	   examplel   s    rC   )r   r2   r   r4   r5   r
   r   r   r   r   r   r/   rC   r   r   r   r	   <module>	   s   	%