Advertisement
gwilliams

plot_box.py

Dec 11th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.07 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. __author__ = 'Gary Williams, Grin Technologies'
  5.  
  6. import sys
  7. import math
  8.  
  9. from reportlab.lib.pagesizes import letter
  10. from reportlab.lib.units import inch, mm
  11. from reportlab.lib.colors import black, white, blue, red
  12.  
  13. import PDF # https://pastebin.com/edit/imz8TQun
  14.  
  15. tab_size = 0.5 * inch
  16. matl_thick = 6 * mm
  17. margin = 0.25 * inch
  18. gap = 0.125 * inch
  19.  
  20. box_height = 4.5 * inch + 2 * matl_thick
  21. box_width = 6 * inch + 2 * matl_thick
  22. box_length = 8 * inch + 2 * matl_thick
  23.  
  24. m3_hole_dia = 2.89 * mm
  25. m3_nut_thickness = 2.29 * mm
  26. m3_nut_width_flat_flat = 5.41 * mm
  27. m3_nut_width_point_point = 6.10 * mm
  28.  
  29. screw_length = 10 * mm
  30. screw_hole_dia = m3_hole_dia
  31. nut_thickness = m3_nut_thickness
  32. nut_width = m3_nut_width_flat_flat
  33.  
  34. cut_holes_for_screws = True
  35. cut_slots_for_screws = True
  36.  
  37. def plot_edge(pdf, l):
  38.     float_num_tabs = (l - 2 * matl_thick) / (2.0 * tab_size)
  39.  
  40.     num_tabs = int(float_num_tabs + 0.5)
  41.     adj_tab_size = (l - 2 * matl_thick) / (2.0 * num_tabs)
  42.  
  43.     for i in range(0, num_tabs):
  44.         if cut_holes_for_screws and i == 0:
  45.             x, y, d = pdf.x, pdf.y, pdf.dir
  46.             pdf.forward(0.5 * adj_tab_size, False)
  47.             pdf.turn_left()
  48.             pdf.forward(0.5 * matl_thick, False)
  49.             pdf.circle(pdf.x, pdf.y, 0.5 * screw_hole_dia)
  50.             pdf.set_xy(x, y)
  51.             pdf.set_dir(d)
  52.  
  53.         pdf.turn_left()
  54.         pdf.forward(0.5 * matl_thick)
  55.         pdf.curve_right(0.5 * matl_thick)
  56.         pdf.forward(adj_tab_size - matl_thick)
  57.         pdf.curve_right(0.5 * matl_thick)
  58.         pdf.forward(0.5 * matl_thick)
  59.         pdf.turn_left()
  60.  
  61.         if cut_slots_for_screws and (i == num_tabs - 1):
  62.             z0 = 0.5 * (adj_tab_size - screw_hole_dia)
  63.  
  64.             screw_depth = screw_length - matl_thick - nut_thickness + 1 * mm
  65.  
  66.             z1a = 2.0 / 3.0 * screw_depth
  67.             z1b = screw_depth - z1a
  68.             z2 = 0.5 * (nut_width - nut_thickness)
  69.  
  70.             pdf.forward(z0)
  71.             pdf.turn_right()
  72.  
  73.             pdf.forward(z1a)
  74.             pdf.turn_right()
  75.             pdf.forward(z2)
  76.             pdf.turn_left()
  77.             pdf.forward(nut_thickness)
  78.             pdf.turn_left()
  79.             pdf.forward(z2)
  80.             pdf.turn_right()
  81.             pdf.forward(z1b)
  82.  
  83.             pdf.turn_left()
  84.             pdf.forward(screw_hole_dia)
  85.             pdf.turn_left()
  86.  
  87.             pdf.forward(z1b)
  88.             pdf.turn_right()
  89.             pdf.forward(z2)
  90.             pdf.turn_left()
  91.             pdf.forward(nut_thickness)
  92.             pdf.turn_left()
  93.             pdf.forward(z2)
  94.             pdf.turn_right()
  95.             pdf.forward(z1a)
  96.  
  97.             pdf.turn_right()
  98.             pdf.forward(z0)
  99.  
  100.         else:
  101.             pdf.forward(adj_tab_size)
  102.  
  103. def plot_box_side(pdf, x0, y0, w, h):
  104. #   pdf.rect(x0, y0, w, h)
  105.     pdf.set_xy(x0 + matl_thick, y0 + matl_thick)
  106.     pdf.set_dir(PDF.Direction.Up.value)
  107.     for i in range(2):
  108.         plot_edge(pdf, h)
  109.         pdf.turn_right()
  110.         plot_edge(pdf, w)
  111.         pdf.turn_right()
  112.  
  113. pdf = PDF.PDF(
  114.     'box.pdf',
  115.     PDF.PageOrientation.Landscape,
  116.     (24 * inch, 14 * inch),
  117. )
  118.  
  119. pdf.setLineWidth(0)
  120. plot_box_side(pdf, margin, pdf.get_page_height() - margin - box_height, box_length, box_height)
  121. plot_box_side(pdf, margin, pdf.get_page_height() - margin - box_height - gap - box_width, box_length, box_width)
  122. plot_box_side(pdf, margin + box_length + gap, pdf.get_page_height() - margin - box_height, box_width, box_height)
  123.  
  124. pdf.save()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement