/*
 * Minimalistischer Kreditkartenhalter zum Ankleben
 *
 * Der Halter ist vorne offen und hat eine flache Rückseite.
 * Die Parameter im nächsten Abschnitt können einfach angepasst werden.
 */

//==========================================================
// ============== EINSTELLUNGEN ==============
//==========================================================
$fn = 100;

// 1. Maße der Karte (Standard: 85.6 x 54.0 mm)
card_width = 115.0;
card_height = 32.0;

// 2. Toleranz für die Passform
// Ein kleiner Puffer, damit die Karte nicht klemmt.
// Üblich sind Werte zwischen 0.8 und 1.5 mm.
// Erhöhe den Wert, wenn die Karte zu streng sitzt.
fit_tolerance = 5;

// 3. Wandstärke des Halters
// 2 mm ist ein guter, stabiler Wert für die meisten Drucker.
wall_thickness = 1.3;

// 4. Innere Tiefe des Halters
// Bestimmt, wie viele Karten hineinpassen (eine Karte ist ca. 0.8 mm dick).
// Mit 3.0 mm passen etwa 2-3 Karten locker hinein.
holder_inner_depth = 15.0;

// 5. Höhe der vorderen Halterungslippe
// Wie hoch die Kante vorne sein soll, die die Karte sichert.
front_lip_height = 20.0; // [mm]

// Radius für die Abrundung
runden_radius = 0.2;

//==========================================================
// ============== CODE (keine Änderung nötig) ==============
//==========================================================

// Abgeleitete Maße für die Konstruktion
inner_width = card_width + fit_tolerance;
inner_height = card_height + fit_tolerance;
outer_width = inner_width + (2 * wall_thickness);
outer_height = inner_height;
outer_depth = holder_inner_depth + wall_thickness;

// Konstruktion des Modells
module objekt() {
    difference() {
        // 1. Erzeugt einen soliden Grundkörper in U-Form mit Rückwand
        union() {
            // Rückwand
                cube([outer_width, outer_height, wall_thickness]);
            
            // Boden
                cube([outer_width, wall_thickness, outer_depth]);
                
            // Linke Wand
                cube([wall_thickness, outer_height, outer_depth]);
            
            // Rechte Wand
                translate([outer_width - wall_thickness, 0, 0]) {
                    cube([wall_thickness, outer_height, outer_depth]);
                }
                
            // Halterungslippe
                translate([0, 0, outer_depth - wall_thickness]) {
                    cube([outer_width, front_lip_height, wall_thickness]);
                }
        }
    }
}

minkowski() {
    objekt();
    sphere(r = runden_radius);
}