$fn=100; // Paramètres longueur = 80; // Longueur de la boîte largeur = 40; // Largeur de la boîte hauteur = 80; // Hauteur de la boîte epaisseur = 3; // Épaisseur des parois diametre_trou = 14; // Diamètre des trous nombre_trous = 3; // Nombre de trous sur le dessus // Calculs pour positionnement espace_total = longueur - nombre_trous * diametre_trou; // Espace libre total sur la longueur espacement_bord = espace_total / (nombre_trous + 1); // Espacement exact entre les bords et les trous // Module pour le parallélépipède extérieur module exterieur() { cube([longueur, largeur, hauteur]); } // Module pour la cavité intérieure module interieur() { translate([epaisseur, epaisseur, epaisseur]) cube([longueur - 2 * epaisseur, largeur - 2 * epaisseur, hauteur - 2 * epaisseur]); } // Module pour un trou unique module trou(pos_x) { translate([pos_x, largeur / 2, hauteur - epaisseur]) cylinder(h = epaisseur, r = diametre_trou / 2); } // Module pour les trous sur le dessus module trous() { for (i = [0 : nombre_trous - 1]) { trou(espacement_bord + i * (diametre_trou + espacement_bord) + diametre_trou / 2); } } // Générer la boîte avec les trous difference() { exterieur(); interieur(); trous(); }