From 8ee6ead266a09b200d9975a5f7930a59573b55ec Mon Sep 17 00:00:00 2001 From: Nettika Date: Sun, 3 Nov 2024 01:32:17 -0800 Subject: [PATCH] Initial design --- .gitignore | 1 + marker-holder.scad | 148 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100644 .gitignore create mode 100644 marker-holder.scad diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1567411 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.stl diff --git a/marker-holder.scad b/marker-holder.scad new file mode 100644 index 0000000..9bd1547 --- /dev/null +++ b/marker-holder.scad @@ -0,0 +1,148 @@ +$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); +}