// ============================================= // SUPERIEURE.scad — Le chapeau // ============================================= include superieure(); module superieure() { difference() { // ── 1. BLOC DE BASE + LÈVRE D'EMBOÎTEMENT ──────────────────── union() { // Corps principal du chapeau cube([chapeau_ext_x, chapeau_ext_y, chapeau_ext_z]); // Lèvre d'emboîtement — cadre périphérique en bas du chapeau, // qui vient coiffer le bac par glissement vers le bas. translate([0, 0, -emboitement_profondeur]) difference() { // Bloc extérieur de la lèvre (même empreinte que le chapeau) cube([chapeau_ext_x, chapeau_ext_y, emboitement_profondeur]); // On vide l'intérieur : ne reste que le cadre translate([epaisseur_paroi, epaisseur_paroi, -1]) cube([ chapeau_ext_x - 2 * epaisseur_paroi, chapeau_ext_y - 2 * epaisseur_paroi, emboitement_profondeur + 2 ]); } } // ── 2. CAVITÉ PERFORATRICE ──────────────────────────────────── // Pavé creusé depuis le dessus, ouvert vers le haut. // Centré en X, décalé en Y selon cav_offset_y. // // Centrage en X dans le chapeau : cav_x = (chapeau_ext_x - cav_largeur) / 2; // Position en Y : paroi arrière + offset cav_y = epaisseur_paroi + cav_offset_y; // La cavité part du dessus et descend de cav_hauteur cav_z = epaisseur_fond; // démarre au-dessus du fond translate([cav_x, cav_y, cav_z]) cube([cav_largeur, cav_profondeur, cav_hauteur + 1]); // +1 pour sortir du dessus // ── 3. FENTE LATÉRALE — guide tract (face DROITE, centrée) ─── // Rainure horizontale débouchant sur la face droite (X max). // Centrée en Y sur la face. // La butée est le fond de la rainure (paroi non percée). // // Centre de la fente en Y = centre du chapeau fente_y = (chapeau_ext_y - fente_largeur) / 2; // Hauteur absolue de la fente (depuis le bas du chapeau) fente_z_abs = epaisseur_fond + fente_z; translate([ chapeau_ext_x - fente_profondeur, // la fente entre par la droite fente_y, fente_z_abs ]) cube([fente_profondeur + 1, fente_largeur, fente_section]); // +1 pour déboucher // ── 4. TROU D'ÉVACUATION DES CONFETTIS ─────────────────────── // Trou carré dans le fond, positionné par evac_offset_x/y // depuis le coin intérieur bas-gauche / arrière. translate([ epaisseur_paroi + evac_offset_x, epaisseur_paroi + evac_offset_y, -1 // perce depuis en dessous ]) cube([evac_taille, evac_taille, epaisseur_fond + 2]); } }