// ============================================= // COUVERCLE.scad // Coiffe la partie supérieure par l'extérieur, // même principe d'emboîtement que chapeau/bac. // Ouverture rectangulaire centrée sur la cavité. // ============================================= include couvercle(); module couvercle() { // Dimensions extérieures du couvercle. // La lèvre intérieure doit glisser autour du chapeau : // on ajoute le jeu + l'épaisseur de paroi de chaque côté. couv_ext_x = chapeau_ext_x + 2 * (epaisseur_paroi + emboitement_jeu); couv_ext_y = chapeau_ext_y + 2 * (epaisseur_paroi + emboitement_jeu); couv_ext_z = couvercle_epaisseur + emboitement_profondeur; // Centre de la cavité en X/Y dans le repère du couvercle. // La cavité est centrée en X dans le chapeau, et positionnée en Y par cav_offset_y. // Dans le repère du couvercle, on décale de epaisseur_paroi + emboitement_jeu // pour compenser le débord de la lèvre. offset_couv = epaisseur_paroi + emboitement_jeu; // décalage repère chapeau → couvercle cav_centre_x = offset_couv + epaisseur_paroi + chapeau_int_x / 2; cav_centre_y = offset_couv + epaisseur_paroi + cav_offset_y + cav_profondeur / 2; difference() { // ── 1. BLOC DE BASE ─────────────────────────────────────────── cube([couv_ext_x, couv_ext_y, couv_ext_z]); // ── 2. ÉVIDEMENT INTÉRIEUR — lèvre d'emboîtement ───────────── // On creuse le dessous du couvercle pour qu'il vienne coiffer // le chapeau. La lèvre a l'épaisseur epaisseur_paroi. translate([epaisseur_paroi, epaisseur_paroi, -1]) cube([ couv_ext_x - 2 * epaisseur_paroi, couv_ext_y - 2 * epaisseur_paroi, emboitement_profondeur + 1 // s'arrête au plateau ]); // ── 3. OUVERTURE RECTANGULAIRE ──────────────────────────────── // Trou traversant le plateau, centré sur la cavité perforatrice. translate([ cav_centre_x - couvercle_ouv_largeur / 2, cav_centre_y - couvercle_ouv_profondeur / 2, emboitement_profondeur - 1 // perce depuis le plateau vers le haut ]) cube([ couvercle_ouv_largeur, couvercle_ouv_profondeur, couvercle_epaisseur + 2 ]); } }