149 lines
3.5 KiB
OpenSCAD
149 lines
3.5 KiB
OpenSCAD
$fn = $preview ? 32 : 64;
|
|
|
|
eraser_width = 125.6;
|
|
eraser_height = 51;
|
|
eraser_depth = 24;
|
|
frame_margin = 10;
|
|
frame_thickness = 2;
|
|
nub_diameter = 2;
|
|
screw_holes = true;
|
|
screw_hole_diameter = 5;
|
|
holder_offset = 60;
|
|
pen_diameter = 17.7;
|
|
pen_count = 6;
|
|
|
|
module clasp(diameter) {
|
|
difference() {
|
|
cube([
|
|
diameter + frame_thickness * 2,
|
|
frame_margin,
|
|
diameter * 0.74 + frame_thickness * 2 + nub_diameter / 2
|
|
]);
|
|
translate([
|
|
frame_thickness,
|
|
-1,
|
|
frame_thickness + diameter / 2
|
|
]) cube([
|
|
diameter,
|
|
frame_margin * 4 + 2,
|
|
diameter
|
|
]);
|
|
translate([
|
|
diameter / 2 + frame_thickness,
|
|
-1,
|
|
diameter / 2 + frame_thickness
|
|
]) rotate([-90, 0, 0]) cylinder(
|
|
h=frame_margin + 2,
|
|
r=diameter / 2
|
|
);
|
|
}
|
|
translate([
|
|
frame_thickness,
|
|
frame_margin / 2,
|
|
frame_thickness + diameter * 0.74
|
|
]) sphere(nub_diameter / 2);
|
|
translate([
|
|
frame_thickness + diameter,
|
|
frame_margin / 2,
|
|
frame_thickness + diameter * 0.74
|
|
]) sphere(nub_diameter / 2);
|
|
}
|
|
|
|
// Eraser shelf
|
|
difference() {
|
|
cube([
|
|
eraser_width + frame_thickness * 2,
|
|
eraser_height + frame_thickness * 2,
|
|
eraser_depth + frame_thickness * 2
|
|
]);
|
|
translate([
|
|
frame_thickness,
|
|
frame_thickness,
|
|
frame_thickness
|
|
]) cube([
|
|
eraser_width,
|
|
eraser_height + frame_thickness + 1,
|
|
eraser_depth + frame_thickness + 1
|
|
]);
|
|
if (screw_holes) {
|
|
translate([
|
|
frame_thickness + frame_margin,
|
|
eraser_height + frame_thickness * 2 - frame_margin,
|
|
-1
|
|
]) cylinder(
|
|
h=frame_thickness + 2,
|
|
r=screw_hole_diameter / 2
|
|
);
|
|
translate([
|
|
eraser_width + frame_thickness - frame_margin,
|
|
eraser_height + frame_thickness * 2 - frame_margin,
|
|
-1
|
|
]) cylinder(
|
|
h=frame_thickness + 2,
|
|
r=screw_hole_diameter / 2
|
|
);
|
|
}
|
|
}
|
|
|
|
// Pen holder frame
|
|
difference() {
|
|
translate([
|
|
0,
|
|
-holder_offset,
|
|
0
|
|
]) cube([
|
|
eraser_width + frame_thickness * 2,
|
|
holder_offset,
|
|
frame_thickness
|
|
]);
|
|
translate([
|
|
frame_margin,
|
|
-holder_offset + frame_margin,
|
|
-1
|
|
]) cube([
|
|
eraser_width + frame_thickness * 2 - frame_margin * 2,
|
|
holder_offset - frame_margin,
|
|
frame_thickness + 2
|
|
]);
|
|
}
|
|
|
|
// Lower screw bar
|
|
difference() {
|
|
union() {
|
|
translate([
|
|
0,
|
|
-holder_offset * 0.618 + frame_margin * 0.375,
|
|
0,
|
|
]) cube([
|
|
eraser_width,
|
|
frame_margin / 2,
|
|
frame_thickness
|
|
]);
|
|
translate([
|
|
eraser_width / 2 + frame_thickness,
|
|
-holder_offset * 0.618 + frame_margin * 0.625,
|
|
0,
|
|
]) cylinder(
|
|
h=frame_thickness,
|
|
r=frame_margin / 2
|
|
);
|
|
}
|
|
translate([
|
|
eraser_width / 2 + frame_thickness,
|
|
-holder_offset * 0.618 + frame_margin * 0.625,
|
|
-1,
|
|
]) cylinder(
|
|
h=frame_thickness + 2,
|
|
r=screw_hole_diameter / 2
|
|
);
|
|
}
|
|
|
|
// Pen holder clasps
|
|
translate([
|
|
(eraser_width - pen_count * (pen_diameter + frame_thickness) + frame_thickness) / 2,
|
|
-holder_offset,
|
|
0
|
|
]) for(i = [0:pen_count - 1]) {
|
|
translate([(pen_diameter + frame_thickness) * i, 0]) clasp(pen_diameter);
|
|
}
|