
    jUj
                        d Z ddlZddlZddlmZ ddlmZ  e	dddddd	
       e	dddddd
       e	dddddd
      dZ
d Zd Zedk(  r<dD ]7  Z eed      Z ee de dej"                   dej$                  dz  dd        9 d! Zy)"u  Parametric T-slot/V-slot aluminum extrusion mesh — real cross-section (slot openings, lips,
inner cavities, center bore), extruded to length. profile(size): 20 -> 2020 (6.2mm slots),
30 -> 3030 (8.2mm slots), 40 -> 4040. Axis along +z, centered at origin in xy.    N)unary_uniong@g      "@g333333@g?g@g      ?)open_wcav_wcav_hlip_tborechamgffffff @g      (@g      @g333333@g333333@       @g      .@g      @g      @g      %@g      @)      (   c                    t         |    }| dz  }t        j                  | |d   z   | f||d   z
  | f|| |d   z   f|||d   z
  f||d   z
  |f| |d   z   |f| ||d   z
  f| | |d   z   fg      }t        j                  dd      j	                  |d   dz  d      g}t        d      D ]  }t        j                  |d	    dz  ||d
   z
  dz
  |d	   dz  |dz         }t        j                  |d    dz  ||d
   z
  |d   z
  |d   dz  ||d
   z
        }t        j                  |d	    dz  dz
  |dz   f|d	    dz  |dz   f|d	    dz  |dz
  fg      }t        j                  |d	   dz  dz   |dz   f|d	   dz  |dz   f|d	   dz  |dz
  fg      }	t        ||||	g      }
t        j                  t        j                  |
j                  j                        t        j                  t        j                  |t        j                  z  dz        t        j                  |t        j                  z  dz         gt        j                  |t        j                  z  dz        t        j                  |t        j                  z  dz        gg      j                  z        }
|j!                  |
        |j#                  t        |            }|j$                  dk(  rt'        |j(                  d       }|S )Nr
   r	   r   r         )
resolution   r   r   g{Gz?   r   r   gffffff?MultiPolygonc                     | j                   S )N)area)gs    4/home/cameronsmith/cad_recovery_mnt/gen_extrusion.py<lambda>z!profile_polygon.<locals>.<lambda>"   s
    166     )key)SPECSsgPolygonPointbufferrangeboxr   nparrayexteriorcoordscospisinTappend
difference	geom_typemaxgeoms)sizephoutercutsangopeningcavityvee1vee2slotress               r   profile_polygonr<      s)   dAs
AJJ!ai!,q1V9}qb.AArAfI~CVA&	M*Q6]A,>!aiQR@SQ6]+qb1"qy.-AC DE HHQN!!!F)a-B!?@DQx &&!H+)1qz>D+@!H+PQ/STWXSXY7aQwZ!G*)DajSTnVWZ[\cZdVdezzQx[L1,s2AH=8q@PRSVZRZ?[x[L1,a#g68 9zzAhK!Oc11t8<q{QPQTXPX>YhK!OQW57 8GVT489zz"((4==#7#78288ffS255[1_%sRUU{Q(?'?@ffS255[1_%rvvcBEEkAo'>?A<BBC!D E 	D 

;t,
-C
}}&#))!12Jr   c                     t         j                  j                  t        |       |      }|j	                  dd| dz  g       |S )Nheightr   r   )trimeshcreationextrude_polygonr<   apply_translation)r0   lengthms      r   	extrusionrF   %   sB    (()>v(NAAw{+,Hr   __main__d   xz: wt=z vol/100mm=i  z.1fcm3c                     ddl m} | dz  } |j                  | | ||      } |j                  | |z   | |z   ||z
  ||z
        }t        j                  j                  |j                  |      |      }|j                  dd| dz  g       |S )zVPlain hollow square tube (what GEM actually uses - through-bolts pass the thin walls).r   Nr
   r>   r   )shapely.geometrygeometryr"   r@   rA   rB   r,   rC   )r0   wallrD   r   r2   r3   innerrE   s           r   square_tuberP   0   s    !s
ABFFA2r1a EBFFA29qb4iT1t8<E(()9)9%)@(PAAw{+,Hr   )__doc__numpyr#   r@   rL   rM   r   shapely.opsr   dictr   r<   rF   __name__srE   printis_watertightvolumerP    r   r   <module>r[      s   R   # Cs#CcRD3SsSD3TPST	V0
 z Qa1QCuQ__-[$s8K3OPQ
r   