Added pack files
parent
b3d8983d41
commit
e29ac003e4
@ -0,0 +1,87 @@
|
||||
from ocp_vscode import *
|
||||
from build123d import *
|
||||
from math import sqrt, atan, pi, cos, radians
|
||||
|
||||
class HingeProfile(BaseSketchObject):
|
||||
def __init__(
|
||||
self,
|
||||
height: float,
|
||||
width: float,
|
||||
thickness: float = 0.5*MM,
|
||||
radius: float = 0.25 * MM,
|
||||
rotation: float = 0,
|
||||
align: tuple[Align, Align] = (Align.CENTER, Align.CENTER),
|
||||
mode: Mode = Mode.ADD,
|
||||
):
|
||||
circle = Pos(0, (thickness/2 + radius)) * Circle(radius)
|
||||
line_1 = PointArcTangentLine(( width/2, height/2), circle.edge())
|
||||
line_2 = PointArcTangentLine((-width/2, height/2), circle.edge(), Side.RIGHT)
|
||||
|
||||
lines = Curve() + [
|
||||
Line((width/2, height/2), (width/2, 0)),
|
||||
line_1,
|
||||
RadiusArc(line_1.end_point(), line_2.end_point(), radius),
|
||||
line_2,
|
||||
Line((-width/2, height/2), (-width/2, 0)),
|
||||
Line((-width/2, 0), (width/2, 0)),
|
||||
]
|
||||
|
||||
hinge_profile = make_face(lines)
|
||||
hinge_profile += mirror(hinge_profile)
|
||||
super().__init__(obj=make_face(hinge_profile), rotation=rotation, align=align, mode=mode)
|
||||
|
||||
class Pack(BasePartObject):
|
||||
def __init__(
|
||||
self,
|
||||
card_x: float = 69.5 * MM,
|
||||
card_y: float = 95 * MM,
|
||||
card_t: float = (0.3+2*0.04+2*0.12) * MM,
|
||||
card_num: int = 15,
|
||||
fit: float = 1 * MM,
|
||||
wall: float = 2 * MM,
|
||||
magnet_d: float = 10 * MM,
|
||||
magnet_t: float = 1 * MM,
|
||||
hinge_thickness: float = 0.5 * MM,
|
||||
hinge_radius: float = 0.25 * MM,
|
||||
rotation: float = (0, 0, 0),
|
||||
align: tuple[Align, Align] = (Align.CENTER, Align.CENTER),
|
||||
mode: Mode = Mode.ADD,
|
||||
):
|
||||
x = card_x + fit
|
||||
y = card_y + fit
|
||||
z = card_t*card_num + fit
|
||||
s = wall
|
||||
profile = Rectangle(x, y)
|
||||
|
||||
for i in [-1, 1]:
|
||||
profile += Pos(0, i*(y/2 + s + z/2)) * Rectangle(x, z)
|
||||
profile += Pos(0, i*(y/2 + y/8 + 2*s + z)) * Rectangle(x, y/4)
|
||||
profile += Pos(i*(x/2 + s + z/2 + wall/2), 0) * Rectangle(z + wall, y)
|
||||
profile += Pos(i*(3*x/4 + 2*s + z + wall), 0) * Rectangle(x/2, y)
|
||||
|
||||
part = extrude(profile, wall)
|
||||
hinge = HingeProfile(s, wall, hinge_thickness, hinge_radius, (90, 0, 0), align=(Align.CENTER, Align.MIN))
|
||||
|
||||
for i in [-1, 1]:
|
||||
part += extrude(Pos(i*(x/2+s/2), -y/2) * hinge, y, (0, 1, 0))
|
||||
part += extrude(Pos(i*(x/2+3*s/2+z+wall), -y/2) * hinge, y, (0, 1, 0))
|
||||
part += extrude(Pos(-x/2, i*(y/2+s/2)) * Rot(0, 0, 90) * hinge, x, (1, 0, 0))
|
||||
part += extrude(Pos(-x/2, i*(y/2+3*s/2+z)) * Rot(0, 0, 90) * hinge, x, (1, 0, 0))
|
||||
|
||||
magnet_hole = extrude(Pos(0, 0, (wall-magnet_t)/2) * Circle(magnet_d/2), magnet_t)
|
||||
|
||||
for i in [-1, 1]:
|
||||
for j in [-1, 1]:
|
||||
part -= Pos(j*x/4, i*(y/2 + 2*s + z + y/8)) * magnet_hole
|
||||
part -= Pos(j*(x/2 + 2*s + wall + z + x/4), i*(y/2 - y/8)) * magnet_hole
|
||||
|
||||
super().__init__(part=part, rotation=rotation, align=align, mode=mode)
|
||||
|
||||
|
||||
pack_superthin = Pack(wall=1*MM, hinge_thickness=0.25*MM, hinge_radius=0.2*MM)
|
||||
export_stl(pack_superthin, "pack_superthin.stl")
|
||||
show(pack_superthin)
|
||||
|
||||
pack = Pack()
|
||||
export_stl(pack, "pack.stl")
|
||||
show(pack)
|
@ -0,0 +1,17 @@
|
||||
from ocp_vscode import *
|
||||
from build123d import *
|
||||
|
||||
card_x = 69.5 * MM
|
||||
card_y = 95 * MM
|
||||
card_z = (0.3+2*0.04+2*0.12) * MM
|
||||
card_num = 15
|
||||
fit = 1 * MM
|
||||
wall = 1 * MM
|
||||
radius = 2 * MM
|
||||
|
||||
profile = RectangleRounded(card_x + fit + 2*wall, card_z * card_num + fit + 2*wall, radius)
|
||||
cut_profile = Pos(0, 0, wall) * RectangleRounded(card_x + fit, card_z * card_num + fit, radius/2)
|
||||
pack = extrude(profile, card_y + fit + 1*wall)
|
||||
pack -= extrude(cut_profile, card_y + fit)
|
||||
show(pack)
|
||||
export_stl(pack, "pack.stl")
|
Loading…
Reference in New Issue