
    ?Uj
                     &   d Z ddlZddlZddddddZd	d
ddddZd ZddZddZe	dk(  rc edd      Z
e
j                  d        ed      Zej                  d        ede
j                   de
j                  ddej                          ddZy)u4  Parametric metric fasteners (ISO dims) — THE reusable screw/nut models for viz + clearance work.
socket_screw(d, L): ISO 4762 socket head cap screw (correct head OD/height, hex socket recess, tip chamfer).
hex_nut(d): ISO 4032 nut (across-flats, height, chamfered corners). All along +z, head at z=0 plane.    N)g      @      @       @)      @      @r   )      @      @r   )g      !@      @r   )      $@      @r	   )r               )r	   r   )r   g333333@)r   g	@)g       @g@)r
   g@c                 z    | t        j                  d      z  }t        j                  j	                  ||d      }|S )Nr   r   radiusheightsections)npsqrttrimeshcreationcylinder)afhrps       3/home/cameronsmith/cad_recovery_mnt/gen_fastener.py
_hex_prismr   	   s6    
RWWS\A!!1q!AAH    r	   c                    t         |    \  }}}t        j                  j                  |dz  |d      }|j	                  dd| dz  g       t        ||dz        }|j	                  dd| |dz  z   dz
  g       t        j                  j                  ||gd	      }t        j                  j                  | dz  || d
z  z
  d      }|j	                  dd|| d
z  z
  dz  g       t        j                  j                  | dz  | d
z  d      }|j                  t        j                  j                  t        j                  g d             |j	                  dd|g       t        j                  j                  |||gd	      S )z9Head sits z -H..0, shaft z 0..L (insertion direction +z).   0   r   r   g333333?g      ?g{Gz?manifoldengineg333333?$   )   r   r   )ISO4762r   r   r   apply_translationr   boolean
differenceconeapply_transformtransformationsrotation_matrixr   piunion)	dLhdhhsock_afheadsockshafttips	            r   socket_screwr<      sh   ajOBG$$BF2$KDAq2#'?+grCx(DAq2#S.4"789??%%tTl:%FD%%QU1q4x<RT%UE	QADLA#567




q1uQX

KC//??yQR1a)$??  $s!3J GGr    c                 *   t         |    \  }}t        ||      }|j                  dd|dz  g       t        j                  j                  | dz  dz  |dz  d      }|j                  dd|dz  g       t        j                  j                  ||gd      S )Nr   r"   333333?   r   r$   r%   )ISO4032r   r*   r   r   r   r+   r,   )r3   r   r   nbores        r   hex_nutrC      s    AJEB2qAAq1u&$$AEDLQQS$TDAq!a%=)??%%q$i
%CCr    __main__g     F@zfastener_m5x45_socket.stlzfastener_m5_nut.stlzM5x45 socket screw: wt=z vol=z.0fzmm3; M5 nut: wt=c                    t         j                  j                  g d      }|j                  g d       t         j                  j                  g d      }|j                  g d       t         j                  j                  ||gd      }t         j                  j                  | dz  d	z  d
d      }t         j                  j                  ||gd      S )z2020-series drop-in T-nut: body 10x6x3.4 + wings that grip under the slot lips, M5 bore.
    Origin at the thread axis, top face (slot-opening side) at z=0, body hangs z<0.)r
   r   g333333@)extents)r   r   g333333)r
   g!@gffffff?)r   r   gffffffr$   r%   r"   r>      r?   r   )r   r   boxr*   r+   r2   r   r,   )r3   bodywingrA   rB   s        r   drop_in_tnutrK   +   s     (89D<((89D<(tTl:>A$$AEDLR$PD??%%q$i
%CCr    )r	   g      D@)r	   )__doc__numpyr   r   r)   r@   r   r<   rC   __name__sexportrA   printis_watertightvolumerK    r    r   <module>rU      s   h OO`p
qzjZK
X
HD zS$A*E!FAahh45	#AOO#4E!((3GWXYXgXgWh
ij	Dr    