include /*************************************************************************************** Modules pour créer un ressort spirale ressort_coord prend en arguments : x1 l'abscisse du point de départ y1 l'ordonnée du point de départ x2 l'abscisse du point d'arrivé y2 l'ordonnée du point d'arrivé tour désigne le nombre de tour qui devront être effectué pour passer du point de départ au point d'arrivé largeur désigne la largeur du bras de la spirale hauteur fix_int désigne le diamètre interne du trou de fixation fix_ext désigne le diamètre externe de la fixation ressort_point prend en arguments: A un vecteur représentant le point de départ B un vecteur représentant le point d'arrivé tour désigne le nombre de tour qui devront être effectué pour passer du point de départ au point d'arrivé largeur désigne la largeur du bras de la spirale hauteur fix_int désigne le diamètre interne du trou de fixation fix_ext désigne le diamètre externe de la fixation ***************************************************************************************/ module ressort_coord(x1 = -10, y1 = -10, x2 = -30, y2 = -30, tours = 2, largeur = 1, hauteur = 2, fix_int = 3, fix_ext = 5) { difference() { union() { //création des fixations //point de départ translate([x1, y1]) {cylinder(d = fix_ext, h = hauteur);} //point d'arrivé translate([x2, y2]) {cylinder(d = fix_ext, h = hauteur);} //création de la spirale theta2 = calcule_angle_2d(x2, y2); theta1 = norm([x1, y1]) == 0 ? theta2 - tours * 360 : calcule_angle_2d(x1, y1); linear_extrude(hauteur) { spirale_log_coord( x1 + ((fix_ext - largeur)/2 ) * cos(theta1), y1 + ((fix_ext - largeur)/2 ) * sin(theta1), x2 + ((fix_ext - largeur)/2 ) * cos(theta2), y2 + ((fix_ext - largeur)/2 ) * sin(theta2), tours, largeur); } } //création des trous de fixations //point de départ translate([x1, y1, -0.5]) {cylinder(d = fix_int, h = hauteur + 1);} //point d'arrivé translate([x2, y2, -0.5]) {cylinder(d = fix_int, h = hauteur + 1);} } } module ressort_point(A = [0, 0], B = [10, 10], tours = 2, largeur = 1, hauteur = 2, fix_int = 3, fix_ext = 5) { ressort_coord(A[0], A[1], B[0], B[1], tours, largeur, hauteur, fix_int, fix_ext); } /*************************************************************************************** Modules pour les écrous https://fr.wikipedia.org/wiki/%C3%89crou_hexagonal ***************************************************************************************/ module ecrou(largeur, hauteur) { linear_extrude(hauteur) {polygone_regulier(cotes = 6, rayon = largeur/sqrt(3));} } module ecrou_M1(marge = 0.5, marge_h = 0, h = 0.8) {ecrou(largeur = 2.5 + marge, hauteur = h + marge_h);} module ecrou_M2(marge = 0.5, marge_h = 0, h = 1.6) {ecrou(largeur = 4 + marge, hauteur = h + marge_h);} module ecrou_M3(marge = 0.5, marge_h = 0, h = 2.4) {ecrou(largeur = 5.5 + marge, hauteur = h + marge_h);} module ecrou_M4(marge = 0.5, marge_h = 0, h = 3.2) {ecrou(largeur = 7 + marge, hauteur = h + marge_h);} module ecrou_M5(marge = 0.5, marge_h = 0, h = 4.7) {ecrou(largeur = 8 + marge, hauteur = h + marge_h);} module ecrou_M6(marge = 0.5, marge_h = 0, h = 5.2) {ecrou(largeur = 10 + marge, hauteur = h + marge_h);} module ecrou_M8(marge = 0.5, marge_h = 0, h = 6.8) {ecrou(largeur = 13 + marge, hauteur = h + marge_h);} module ecrou_M10(marge = 0.5, marge_h = 0, h = 8.4) {ecrou(largeur = 17 + marge, hauteur = h + marge_h);}