Files
kickdrawers/dividers.py
2022-06-27 12:12:44 -04:00

152 lines
4.4 KiB
Python

import os
import importlib as ir
from cadquery import exporters as et
from util import intersect, add_rect, do_fingers
import util as u
import numpy as np
from pathlib import Path
import random
home = str(Path.home())
root_dir = home+'\\Seafile\\Designs\\Projects\\kickdrawers\\cadfree\\code'
os.chdir(root_dir)
import items as it
import util as u
import cadquery as cq
ir.reload(it)
ir.reload(u)
print('hello')
print('hello2f')
objs = list()
# Base parameters
add_the_fingers = False
force_tab_width = False
# r_hole = 4.6/2
r_hole = 3.5/2
nut_depth = 10
nut_width = 5.5
nut_thickness = 2.5
m_length = 15
full_width = 1012
slider_thickness = 14
t_small = 3.175
t_large = t_small*1
back_padding = 14
box_width = 226
box_depth = 433
box_height = 90
prefix = 'dividers'
#120
box_clearance_depth = box_depth - 2*t_large
n_bins_depth = 7
n_space_depth = box_clearance_depth / n_bins_depth
box_clearance_width = box_width - 2*t_large
n_bins_width = 4
n_space_width = box_clearance_width / n_bins_width
tab_width =52
xy_wp = lambda: cq.Workplane('XY')
xz_wp = lambda: cq.Workplane('XZ')
yz_wp = lambda: cq.Workplane('YZ')
bottom = u.add_rect(xy_wp(), box_width, box_depth).extrude(t_large)
b_side = u.add_rect(xz_wp(), box_width, box_height).extrude(-t_large)
f_side = u.add_rect(xz_wp(), box_width, box_height).extrude(t_large).translate((0,box_depth, 0))
l_side = u.add_rect(yz_wp(), box_depth, box_height).extrude(t_large)
r_side = u.add_rect(yz_wp(), box_depth, box_height).extrude(-t_large).translate((box_width, 0, 0))
print('hellod')
pnx = list()
if True:
for i in range(1,n_bins_depth): #n_bins_depth
for iw in range(0, n_bins_width): #n_bins_width
if len(pnx) > 1:
continue
pnx.append( u.add_rect(xz_wp(), tab_width, box_height).extrude(t_large).translate((t_large + iw*n_space_width + n_space_width/2 - tab_width/2,t_large + i* box_clearance_depth/n_bins_depth,0)) )
#
for i in range(1,n_bins_width):
for idd in range(0,n_bins_depth):
if len(pnx) > 1:
continue
a_panel = u.add_rect(yz_wp(), tab_width, box_height).extrude(t_large).translate(( t_large/2 + i* box_clearance_width /n_bins_width, t_large/2 + (idd+.5)*n_space_depth -tab_width/2,0))
pnx.append(a_panel)
#
for idx in range(len(pnx)):
# if random.random() < 0.05:
if True:
bottom,pnx[idx], _ = do_fingers( bottom,pnx[idx],num_tabs = 3, cut=True, skip_bolt_1= True)
bottom, b_side, _ = u.do_fingers(bottom, b_side, num_tabs = 7, skip_bolt_1= True, skip_bolt_2=True)
bottom, f_side, _ = u.do_fingers(bottom, f_side, num_tabs = 7, skip_bolt_1= True, skip_bolt_2=True)
bottom, l_side, _ = u.do_fingers(bottom, l_side, num_tabs = 7, skip_bolt_1= True, skip_bolt_2=True)
bottom, r_side, _ = u.do_fingers(bottom, r_side, num_tabs = 7, skip_bolt_1= True, skip_bolt_2=True)
l_side, b_side, _ = u.do_fingers(l_side, b_side, num_tabs = 5, skip_bolt_1= True, skip_bolt_2=True)
l_side, f_side, _ = u.do_fingers(l_side, f_side, num_tabs = 5, skip_bolt_1= True, skip_bolt_2=True)
r_side, b_side, _ = u.do_fingers(r_side, b_side, num_tabs = 5, skip_bolt_1= True, skip_bolt_2=True)
r_side, f_side, _ = u.do_fingers(r_side, f_side, num_tabs = 5, skip_bolt_1= True, skip_bolt_2=True)
il = it.item_list([bottom, b_side, l_side, r_side, f_side, *pnx]);
cm = os.path.join(root_dir,'divider_newstl')
try:
os.mkdir(cm)
except:
pass
u.save_stls([il], cm, 'dividers')
np.random.seed(20)#
cold = lambda: tuple([int(x) for x in np.random.randint(0,255, size=(3,1), dtype=int).squeeze()])
for f, itx in list(globals().items()):
if isinstance(it, list):
for p in it:
if isinstance(p, cq.Workplane):
cold = tuple([int(x) for x in np.random.randint(0,255, size=(3,1), dtype=int).squeeze()])
show_object(p, options=dict(alpha=0.0, color=cold ))
if isinstance(itx, cq.Workplane):
show_object(itx)#, options=dict(alpha=0.0, color=cold() ))
for s in pnx:
show_object(s)#, options=dict(alpha=0.0, color=cold() ))
# show_object(a_panel, options=dict(alpha=0.5,color=cold ))
# objs.append(bottom)
# objs.append(b_side)
# objs.append(f_side)
# objs.append(l_side)
# objs.append(r_side)
# for x in objs:
# show_object(x)