// Paramètres
outer_radius = 20;    // Rayon de la sphère extérieure
inner_radius = 10;    // Rayon de la petite sphère intérieure
gap = 2;              // Espace entre la sphère intérieure et extérieure
hole_radius = 4;      // Rayon des trous dans la sphère extérieure

// Module pour la sphère extérieure (avec trous symétriques)
module outer_sphere_with_holes(outer_radius, gap, hole_radius) {
    difference() {
        // Sphère extérieure
        sphere(r = outer_radius);

        // Espace intérieur
        sphere(r = outer_radius - gap);

        // Trous : Les trous sont ajoutés des deux côtés symétriquement
        for (angle_x = [-75, -60, -45, -30, -15, 0, 15, 30, 45, 60, 75])
            for (angle_y = [0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330]) {
                // Trous pour la face avant
                rotate([angle_x, angle_y, 0])
                    translate([outer_radius - 1, 0, 0])
                        sphere(r = hole_radius);
                // Trous pour la face arrière (symétriques)
                rotate([-angle_x, angle_y + 180, 0])
                    translate([outer_radius - 1, 0, 0])
                        sphere(r = hole_radius);
            }
    }
}

// Module pour la petite sphère intérieure
module inner_sphere(radius) {
    translate([0, 0, 0])
        sphere(r = radius);
}

// Combinaison des modules
union() {
    // Sphère extérieure (avec trous symétriques)
    outer_sphere_with_holes(outer_radius, gap, hole_radius);

    // Petite sphère intérieure
    inner_sphere(inner_radius);
}