diff --git a/back.scad b/back.scad index c92f9a3..e5aa38d 100644 --- a/back.scad +++ b/back.scad @@ -6,7 +6,8 @@ * License: CC0 * *************************************************************************/ - include ; +include ; +include ; /* Höhe wichtiger Bauteile: * @@ -73,10 +74,10 @@ button_support = true; // Strukturen zur Stützung der Analog Sticks. stick_support = true; -// Öffnung für den I²C-Anschluss. +// Öffnung über dem I²C-Anschluss. i2c_port = true; -// Wird ein Gewindeeinsatz verwendet? +// Gewindeeinsatz statt Mutter. threaded_insert = false; // Dicke der Decke. @@ -435,29 +436,6 @@ module outer() { } } -// Maske, um abgerundete oder abgeschrägte Außenkanten zu schneiden. -module edge_cut() { - minkowski() { - linear_extrude(height=0.1) { - import("./svg/back outline.svg"); - } - - $fn = $preview ? 4 : 16; - if (beveled_edges) { - // Abgeschrägte Kanten. - cylinder(h=4, r1=1.5, r2=0); - } else { - // Abgerundete Kanten. - // Dafür generieren wir im folgenden einen konkaven Kegel. - curve = [1.34, 1.07, 0.84, 0.63, 0.46, 0.32, 0.2, 0.11, 0.05, 0.01, 0]; - for (i = [0:len(curve)-2]) { - translate([0, 0, i*0.5]) - cylinder(h=0.5, r1=curve[i], r2=curve[i+1]); - } - } - } -} - /************************************************************************* * Die Hülle. * @@ -465,13 +443,8 @@ module edge_cut() { module body_back() { if (rounded_edges || beveled_edges) { - difference() { - union () { - outer(); - } - - translate([0, 0, -0.1]) - edge_cut(); + edge_modifier(beveled_edges, "./svg/back outline.svg") { + outer(); } } else { outer(); diff --git a/edge.scad b/edge.scad new file mode 100644 index 0000000..8858178 --- /dev/null +++ b/edge.scad @@ -0,0 +1,46 @@ +/************************************************************************* + * Hülle für die u23-Spielekonsole. * + * Funktionen zur Modifikation der Außenkanten. * + * * + * Author: Shy * + * License: CC0 * + *************************************************************************/ + + +// Objekt, um abgerundete oder abgeschrägte Außenkanten zu "schneiden". +module edge_cutter(beveled, outline) { + minkowski() { + linear_extrude(height=0.1) { + import(outline); + } + + $fn = $preview ? 4 : 16; + if (beveled) { + // Abgeschrägte Kanten. + cylinder(h=4, r1=1.5, r2=0); + } else { + // Abgerundete Kanten. Dafür generieren wir einen konkaven Kegel. + // Kurve der Kegelseite. + curve = $preview + ? [1.34, 0.84, 0.46, 0.2, 0.05, 0] + : [1.34, 1.07, 0.84, 0.63, 0.46, 0.32, 0.2, 0.11, 0.05, 0.01, 0]; + // Vertikale Auflösung. + v_step = $preview ? 1 : 0.5; + + for (i = [0:len(curve)-2]) { + translate([0, 0, i*v_step]) + cylinder(h=v_step, r1=curve[i], r2=curve[i+1]); + } + } + } +} + +// Erzeugt abgerundete oder abgeschrägte Außenkanten. +module edge_modifier(beveled, outline) { + difference() { + children(); + + translate([0, 0, -0.1]) + edge_cutter(beveled_edges, outline); + } +} diff --git a/front.scad b/front.scad index f29f4df..ab574e0 100644 --- a/front.scad +++ b/front.scad @@ -7,6 +7,7 @@ *************************************************************************/ include ; +include ; /* Höhe wichtiger Bauteile: * @@ -326,29 +327,6 @@ module outer() { } } -// Maske, um abgerundete oder abgeschrägte Außenkanten zu schneiden. -module edge_cut() { - minkowski() { - linear_extrude(height=0.1) { - import("./svg/front outline.svg"); - } - - $fn = $preview ? 4 : 16; - if (beveled_edges) { - // Abgeschrägte Kanten. - cylinder(h=4, r1=1.5, r2=0); - } else { - // Abgerundete Kanten. - // Dafür generieren wir im folgenden einen konkaven Kegel. - curve = [1.34, 1.07, 0.84, 0.63, 0.46, 0.32, 0.2, 0.11, 0.05, 0.01, 0]; - for (i = [0:len(curve)-2]) { - translate([0, 0, i*0.5]) - cylinder(h=0.5, r1=curve[i], r2=curve[i+1]); - } - } - } -} - /************************************************************************* * Die Hülle. * @@ -357,13 +335,8 @@ module edge_cut() { module casing_front() { difference() { if (rounded_edges || beveled_edges) { - difference() { - union () { - outer(); - } - - translate([0, 0, -0.1]) - edge_cut(); + edge_modifier(beveled_edges, "./svg/front outline.svg"){ + outer(); } } else { outer();