This commit is contained in:
2022-06-27 12:12:44 -04:00
commit a29f6d8f94
591 changed files with 5335885 additions and 0 deletions

216
items.py Normal file
View File

@@ -0,0 +1,216 @@
import importlib as ir
from collections import UserList
import cadquery as cq
import numpy as np
class item_list(UserList):
def __init__(self, data):
self.data = data
self.tag = ''
def add_tag(self, tag):
self.tag = tag
return self
def translate(self, x, y, z):
all_objs = list()
for da in self.data:
all_objs.append(da.translate((x, y, z)))
return item_list(all_objs)
def as_dict(self):
all_d = dict()
for it, objd in enumerate(self.data):
key_name = self.tag + '_' + str(it)
all_d[key_name] = objd
return all_d
import util as u
ir.reload(u)
def add_panel(wplane, w, d, z_drop, r_hole, extrude_amt, t_back):
out = u.add_rect(wplane, w, d + z_drop).extrude(extrude_amt)
pts_holes = u.slide_pts(w,
d / 2 + z_drop,
offset_from_back=163 + t_back,
spacing=(64, 160, 64, 45))
out = out.cut(
wplane.pushPoints(pts_holes).slot2D(10, r_hole * 2).extrude(
10 * abs(extrude_amt) / extrude_amt))
pts = [[72 + t_back, d / 2 - 21 / 2 + z_drop],
[72 + t_back, d / 2 + 21 / 2 + z_drop]]
for pt in pts:
out = out.cut(
wplane.polygon(6, 5.3).extrude(100 * abs(extrude_amt) /
extrude_amt).translate(
(0, pt[0], pt[1])))
# out = out.cut(wplane.pushPoints(pts).circle(r_hole).extrude(10 * abs(extrude_amt)/extrude_amt ))
# for pt in pts:
# pt_line = u.n_gon(56, 6, xoff=pt[0], yoff=pt[1])
# out = out.cut(wplane.polyline(pt_line).extrude(10*abs(extrude_amt)/extrude_amt))
return out
def create_drawer(w,
d,
h,
tab_override=False,
slide_flavor='push-open',
front_pts='push-open',
slide_on_bottom=False,
t_small=None,
t_large=None,
r_hole=None,
add_holes=False,
add_fingers=False,
vert_tabs = None,
slide_width=54):
box_width = w
box_depth = d
box_height = h
t1 = t_small
t2 = t_large
l_plane = cq.Plane(origin=(box_width, 0, 0),
xDir=(0, 1, 0),
normal=(1, 0, 0))
r_plane = cq.Plane(origin=(0, 0, 0), xDir=(0, 1, 0), normal=(1, 0, 0))
f_plane = cq.Plane(origin=(box_width, box_depth, 0),
xDir=(-1, 0, 0),
normal=(0, 1, 0))
def xy_wp():
return cq.Workplane('XY')
def xz_wp():
return cq.Workplane('XZ')
def yz_wp():
return cq.Workplane('YZ')
def l_wp():
return cq.Workplane(l_plane)
def f_wp():
return cq.Workplane(f_plane)
bottom = u.add_rect(xy_wp(), box_width, box_depth).extrude(t2).translate(
(0, 0, 2))
l_side = u.add_rect(l_wp(), box_depth, box_height).extrude(-t2)
r_side = u.add_rect(yz_wp(), box_depth, box_height).extrude(t2)
b_side = u.add_rect(xz_wp(), box_width, box_height).extrude(-t2)
f_side = u.add_rect(f_wp(), box_width, box_height).extrude(-t2)
rect_cut = u.add_rect(xy_wp(), slide_width, 1.2*box_depth, offy=0, offx=box_width/2 - slide_width/2).extrude(t2)
if add_holes:
pts_holes = u.slide_pts(box_depth, box_height / 2, which=slide_flavor)
if slide_flavor=="24inch":
idx_s = 0
else:
idx_s = 1
r_side = r_side.cut(
yz_wp().pushPoints(pts_holes).circle(r_hole).extrude(10))
r_side = r_side.cut(yz_wp().pushPoints(pts_holes[idx_s:]).slot2D(
10, r_hole * 2).extrude(10))
l_side = l_side.cut(
l_wp().pushPoints(pts_holes).circle(r_hole).extrude(-10))
l_side = l_side.cut(l_wp().pushPoints(pts_holes[idx_s:]).slot2D(
10, r_hole * 2).extrude(-10))
# if slide_flavor == "24inch":
# pts_holes = u.slide_pts(box_depth, box_width / 2, which=slide_flavor)
# pts_holes = [[x[1], x[0]] for x in pts_holes]
# bottom = bottom.cut(
# xy_wp().pushPoints(pts_holes).circle(r_hole).extrude(10))
# bottom = bottom.cut(xy_wp().pushPoints(pts_holes[1:]).slot2D(
# 10, r_hole * 2, angle=90).extrude(10))
pts_holes = u.slide_pts(box_depth,
box_height / 2,
reverse=True,
which=slide_flavor)
if slide_flavor=="24inch":
pts_holes[0], pts_holes[2] = pts_holes[2], pts_holes[0]
pts_holes[2], pts_holes[1] = pts_holes[1], pts_holes[2]
idx_t = 2
else:
idx_t = 1
r_side = r_side.cut(
yz_wp().pushPoints(pts_holes).circle(r_hole).extrude(10))
r_side = r_side.cut(yz_wp().pushPoints(pts_holes[idx_t:]).slot2D(
10, r_hole * 2).extrude(10))
l_side = l_side.cut(
l_wp().pushPoints(pts_holes).circle(r_hole).extrude(-10))
l_side = l_side.cut(l_wp().pushPoints(pts_holes[idx_t:]).slot2D(
10, r_hole * 2).extrude(-10))
# pts_holes = u.slide_pts(box_depth,
# box_width / 2,
# reverse=True,
# which=slide_flavor)
# pts_holes = [[x[1], x[0]] for x in pts_holes]
# if slide_flavor == "24inch":
# bottom = bottom.cut(
# xy_wp().pushPoints(pts_holes).circle(r_hole).extrude(10))
# bottom = bottom.cut(xy_wp().pushPoints(pts_holes[1:]).slot2D(
# 10, r_hole * 2, angle=90).extrude(10))
bw = box_width * 0.6
if front_pts == '24inch':
f_side = f_side.cut(f_wp().pushPoints(
u.ret_front_pts(box_width, box_height * 0.5,
spread=0)).circle(r_hole).extrude(-10))
else:
f_side = f_side.cut(f_wp().pushPoints(
u.ret_front_pts(box_width, box_height * 0.3,
spread=bw)).circle(r_hole).extrude(-10))
f_side = f_side.cut(f_wp().pushPoints(
u.ret_front_pts(box_width, box_height * (0.7),
spread=bw)).circle(r_hole).extrude(-10))
f_side = f_side.cut(f_wp().pushPoints(
u.ret_front_pts(box_width, box_height * (0.7),
spread=0)).circle(r_hole).extrude(-10))
f_side = f_side.cut(f_wp().pushPoints(
u.ret_front_pts(box_width, box_height * (0.3),
spread=0)).circle(r_hole).extrude(-10))
if add_fingers:
r_side, f_side, _ = u.do_fingers(r_side, f_side, num_tabs = vert_tabs)
l_side, f_side, _ = u.do_fingers(l_side, f_side, num_tabs = vert_tabs)
l_side, b_side, _ = u.do_fingers(l_side, b_side, num_tabs = vert_tabs)
r_side, b_side, _ = u.do_fingers(r_side, b_side, num_tabs = vert_tabs)
bottom, l_side, _ = u.do_fingers(bottom, l_side, num_tabs=15)
bottom, r_side, _ = u.do_fingers(bottom, r_side, num_tabs=15)
bottom, f_side, _ = u.do_fingers(bottom, f_side, num_tabs=15)
if tab_override:
bottom, b_side, _ = u.do_fingers(bottom,
b_side,
num_tabs=15,
skip_list=[1, 2, 3])
else:
bottom, b_side, _ = u.do_fingers(bottom, b_side, num_tabs=15)
if slide_on_bottom:
b_side = b_side.cut(rect_cut)
f_side = f_side.cut(rect_cut)
return item_list([bottom, b_side, l_side, f_side, r_side])