// Dimensions principales badge_radius = 30; // Rayon du badge avec le "R" badge_thickness = 5; // Épaisseur du badge ring_inner_radius = badge_radius + 2; // Rayon interne de l'anneau ring_outer_radius = ring_inner_radius + 8; // Rayon externe de l'anneau ring_thickness = ring_outer_radius - ring_inner_radius; // Épaisseur calculée ring_gap = 0.5; // Espace pour permettre la rotation du badge connector_width = 4; // Largeur des bras connecteurs connector_thickness = 3; // Épaisseur des bras connecteurs text_size = 20; // Taille du texte "R" text_depth = 2; // Profondeur de gravure du texte // Module pour le badge rotatif avec le "R" module badge() { difference() { // Badge circulaire cylinder(h = badge_thickness, r = badge_radius, $fn = 100); // Gravure du texte "R" translate([-text_size / 2, -text_size / 2, badge_thickness - text_depth]) linear_extrude(height = text_depth) text("R", size = text_size, valign = "center", halign = "center", font = "Liberation Sans"); } } // Module pour l'anneau contenant le badge module outer_ring() { difference() { // Anneau externe cylinder(h = badge_thickness + 2 * ring_gap, r = ring_outer_radius, $fn = 100); // Vide interne pour créer le rail du badge cylinder(h = badge_thickness + 2 * ring_gap + 1, r = ring_inner_radius, $fn = 100); } } // Module pour les connecteurs qui maintiennent le badge dans l'anneau module connectors() { for (angle = [0, 180]) { // Deux connecteurs opposés à 0° et 180° rotate([0, 0, angle]) translate([ring_inner_radius, 0, badge_thickness / 2]) cube([connector_width, connector_thickness, badge_thickness], center = true); } } // Assemblage complet module badge_with_rotating_ring() { // Badge rotatif au centre translate([0, 0, -ring_gap]) badge(); // Rail extérieur de l'anneau outer_ring(); // Connecteurs entre le badge et l'anneau connectors(); } // Appel du module principal badge_with_rotating_ring();