// 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); }