ó
N9TVc           @   s   d  d l  Z  d  d l Z d Z d Z d Z d „  Z d „  Z d „  Z d „  Z d	 „  Z	 d
 d d „  ƒ  YZ
 d e
 f d „  ƒ  YZ d „  Z d S(   iÿÿÿÿNs  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
t   80sIt   12fHc         C   ss   |  d | d |  d | d } |  d | d |  d | d } |  d | d |  d | d } | | | g S(   Ni   i   i    (    (   t   ut   vt   s1t   s2t   s3(    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt   crossproduct   s    """c         C   s9   t  j |  d |  d |  d |  d |  d |  d ƒ S(   Ni    i   i   (   t   matht   sqrt(   R   (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt   norm   s    c         C   sF   t  |  ƒ } | d k r! d } n  |  d | |  d | |  d | g S(   Ni    i   i   (   R
   (   R   t   m(    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt	   normalize!   s    	c         C   s   t  t |  | ƒ ƒ S(   N(   R   R   (   R   R   (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt   normalto'   s    c         C   s1   |  d | d |  d | d |  d | d g S(   Ni    i   i   (    (   R   R   (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt   diff*   s    t   ASCII_STL_Writerc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   sC    Export 3D objects build of 3 or 4 vertices as ASCII STL file.
    c         C   s   | |  _  |  j ƒ  d  S(   N(   t   fpt   _write_header(   t   selft   stream(    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt   __init__0   s    	c         C   s   |  j  j d ƒ d  S(   Ns   solid python
(   R   t   write(   R   (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyR   4   s    c         C   s   |  j  j d ƒ d  S(   Ns   endsolid python
(   R   R   (   R   (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt   close7   s    c         C   sW   t  t | d | d ƒ t | d | d ƒ ƒ } |  j j t j d | d | ƒ ƒ d  S(   Ni    i   i   t   normalt   face(   R   R   R   R   t   ASCII_FACETt   format(   R   R   t   n(    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt   _write:   s    1c         C   s.   | \ } } } } | | | f | | | f f S(   N(    (   R   R   t   p1t   p2t   p3t   p4(    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt   _split>   s    c         C   sv   t  | ƒ d k rD |  j | ƒ \ } } |  j | ƒ |  j | ƒ n. t  | ƒ d k rf |  j | ƒ n t d ƒ ‚ d S(   s$    Add one face with 3 or 4 vertices. i   i   s"   only 3 or 4 vertices for each faceN(   t   lenR!   R   t
   ValueError(   R   R   t   face1t   face2(    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt   add_faceB   s    c         C   s"   x | D] } |  j  | ƒ q Wd S(   s    Add many faces. N(   R&   (   R   t   facesR   (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt	   add_facesM   s    (
   t   __name__t
   __module__t   __doc__R   R   R   R   R!   R&   R(   (    (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyR   -   s   						t   Binary_STL_Writerc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   sD    Export 3D objects build of 3 or 4 vertices as binary STL file.
    c         C   s   d |  _  t j |  | ƒ d  S(   Ni    (   t   counterR   R   (   R   R   (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyR   U   s    	c         C   s   |  j  ƒ  d  S(   N(   R   (   R   (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyR   Y   s    c         C   s6   |  j  j d ƒ |  j  j t j t d |  j ƒ ƒ d  S(   Ni    s   Python Binary STL Writer(   R   t   seekR   t   structt   packt   BINARY_HEADERR-   (   R   (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyR   \   s    c         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 | Œ ƒ d  S(   Ni   i    i   (   R-   R   R   R   R   R/   R0   t   BINARY_FACET(   R   R   R   t   data(    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyR   `   s    1!!!	(   R)   R*   R+   R   R   R   R   (    (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyR,   R   s
   			c          C   sZ   d „  }  d } t  | d ƒ - } t | ƒ } | j |  ƒ  ƒ | j ƒ  Wd  QXd | GHd  S(   Nc          S   sL   d
 }  d } d } d } |  | | g | | | g | | |  g | |  | g g S(   Ni    i   i   i   iûÿÿÿiùÿÿÿi   iþÿÿÿi   (   i    i    i    (   i   i   i   (   iûÿÿÿiùÿÿÿi   (   i   iþÿÿÿi   (    (   R   R   R   R    (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt   get_trianglesm   s
    s   triangles.stlt   wbs   Wrote (   t   openR   R(   R   (   R4   t   filenameR   t   writer(    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt   examplel   s    	(    (   R   R/   R   R1   R2   R   R
   R   R   R   R   R,   R9   (    (    (    s8   /afs/cs.cmu.edu/academic/class/15294-f15/STL/stlwrite.pyt   <module>	   s   						%