--- /dev/null
+/*## COPYRIGHT NOTICE
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+#
+# COPYRIGHT 2020 : Slightly Cyberpunk
+# www.slightlycyberpunk.com
+#
+#
+
+### DESCRIPTION
+#
+# A simple, configurable pencil holder / desk organizer
+# Not the best design -- the holes in the base need to be larger
+# in order to hold things more securely. Otherwise it works well.
+*/
+
+// === Main model ===
+// Main base plate to hold the various units together
+// Different plates could be designed to allow extending the overall unit
+// Items translated for an "exploded" view
+translate([0,0,-4]) { AllBase(); }
+
+// Various size holders
+pencilBase(7);
+translate([0,0,5]) { pencilHolder(7); }
+
+translate([20,0,0]) {
+ pencilBase(6);
+ translate([0,0,5]) { pencilHolder(6); }
+}
+
+translate([50,0,0]) {
+ pencilBase(4);
+ translate([0,0,5]) { pencilHolder(4); }
+}
+
+translate([80,0,0]) {
+ pencilBase(4);
+ translate([0,0,5]) { pencilHolder(4); }
+}
+
+
+// === MODULES ===
+module pencilBase(holes) {
+difference() {
+ radius=10*(8/holes);
+ cube([20,110,4]);
+ for(i = [1:holes]) {
+ translate([12,10+((90/holes)*(i-0.5)),radius-5.5]) {
+ sphere(r=5*(8/holes));
+ }
+ }
+ translate([2,2,0]) {
+ cube([4,4,5]);
+ }
+ translate([2,104,0]) {
+ cube([4,4,5]);
+ }
+}
+}
+
+module pencilHolder(holes) {
+ radius=6*(8/holes);
+ translate([2,2,0]) {
+ cube([4,4,50]);
+ translate([0,0,10]) {
+ cube([6,6,40]);
+ }
+ }
+ translate([2,104,0]) {
+ cube([4,4,50]);
+ translate([0,-2,10]) {
+ cube([6,6,40]);
+ }
+ }
+ difference() {
+ hull() {
+ translate([2,0,50]) {
+ cube([6,110,5]);
+ }
+ // holes inner and outer
+ for(i=[1:holes]) {
+ translate([10,10+((90/holes)*(i-0.5)),50]) {
+ cylinder(r=radius,h=5);
+ }
+ }
+ }
+ for(i=[1:holes]) {
+ translate([10,10+((90/holes)*(i-0.5)),50]) {
+ cylinder(r=radius-1.5,h=5);
+ }
+ }
+ // square holes between holes
+ translate([8,15,50]) { cube([5,30,5]); }
+ translate([8,65,50]) { cube([5,30,5]); }
+ }
+}
+
+module AllBase() {
+ difference() {
+ cube([100,110,3]);
+ for(i=[0:4]) {
+ translate([2+(20*i),2,0]) {
+ cube([4,4,5]);
+ }
+ translate([2+(20*i),104,0]) {
+ cube([4,4,5]);
+ }
+ }
+ }
+}
+
+