// m_vis.scad // // Bibliothèque pour les trous de vis // // (C) 2015-2020 E.Chamouard // (Libre de droits pour utilisation non commerciale et à vos propres risques) // // Utilisation : // Inclure la biliothèque dans votre fichier, par exemple : // use ; // // Utiliser les objets vis en mode positif (la vis est dans votre projet) ou en mode négatif (le trou pour la vis est dans votre object) // // Objets disponnibles : // vis_plate(lg=20, d=3, lt=3, dt=6, dir=[0, 1, 0], pos=[-10, 0, 15], ep=.1, $fs=1); // Avec (tout en mm, tous les paramètres étant optionnels): // l la longueur de la vis (hors tête) // d le diamètre de la vis // lt la longueur de la tête // dt le diamètre de la tête // dir la direction de la vis (X=[1, 0, 0],...) // pos la position de la vis (raccord avec la tête) // ep petite valeur pour marge sur la longueur de la vis et position de la tete // fs un parametre de finesse des cylindres (voir doc SCAD) // // vis_fraisee(lg=20, d=3, lt=3, dt=6, dir=[0, 1, 0], pos=[-10, 0, 15], ep=.1, $fs=1); // Avec (tout en mm, tous les paramètres étant optionnels): // l la longueur de la vis (avec tête) // d le diamètre de la vis // lt la longueur de la tête (sommet au raccord avec le cylindre) // dt le diamètre de la tête (diametre maximal) // dir la direction de la vis (X=[1, 0, 0],...) // pos la position de la vis (raccord avec la tête) // ep petite valeur pour marge sur la longueur de la vis et position de la tete // fs un parametre de finesse des cylindres (voir doc SCAD) // // ecrou(d=8, e=3, dir=[0, 1, 0], pos=[-10, 0, 15], ep=.1); // Avec (tout en mm, tous les paramètres étant optionnels): // d le cercle contenant l'extérieur de l'écrou // e l'épaisseur de l'écrou (et de l'orifice d'insertion si il y a) // dir la direction de l'écrou (X=[1, 0, 0],...) // pos la position de l'écrou // ep petite valeur pour marge // // Exemple : Enlever le commentaire dans la ligne ci-dessous //tst_vis(); module tst_vis() { // Vis tête plate // Utilisation pour faire passer une vis dans une pièce difference() { translate([0, 0, 10])cube(size=[10, 20, 40], center=false); union() { #vis_plate(lg=20, d=1, dt=2, lt=1, dir=[0, 1, 0], pos=[10, 0, 15], ep=.1); #vis_plate(lg=20, d=2, dt=4, lt=2, dir=[0, 1, 0], pos=[10, 0, 25], ep=.1); #vis_plate(lg=20, d=3, dt=6, lt=3, dir=[0, 1, 0], pos=[10, 0, 35], ep=.1); #vis_plate(lg=20, d=4, dt=8, lt=4, dir=[0, 1, 0], pos=[10, 0, 45], ep=.1); #vis_plate(lg=20, d=3, dt=6, lt=3, dir=[1, 1, 1], pos=[0, 0, 10], ep=.1); #vis_plate(lg=20, d=3, dt=6, lt=3, dir=[0, 1, -1], pos=[0, 0, 50], ep=.1); } } // Utilisation pour dessiner une vis vis_plate(lg=20, d=1, dt=2, lt=1, dir=[0, 1, 0], pos=[-10, 0, 15], ep=.1); vis_plate(lg=20, d=2, dt=4, lt=2, dir=[0, 1, 0], pos=[-20, 0, 15], ep=.1); vis_plate(lg=20, d=3, dt=6, lt=3, dir=[0, 1, 0], pos=[-30, 0, 15], ep=.1); vis_plate(lg=20, d=4, dt=8, lt=4, dir=[0, 1, 0], pos=[-40, 0, 15], ep=.1, fs=1); // Vis tête fraisée // Utilisation pour faire passer une vis dans une pièce difference() { translate([0, 0, -50])cube(size=[10, 20, 40], center=false); union() { #vis_fraisee(lg=20, d=1, dt=2, lt=1, dir=[0, 1, 0], pos=[10, 0, -15], ep=.1); #vis_fraisee(lg=20, d=2, dt=4, lt=2, dir=[0, 1, 0], pos=[10, 0, -25], ep=.1); #vis_fraisee(lg=20, d=3, dt=6, lt=3, dir=[0, 1, 0], pos=[10, 0, -35], ep=.1); #vis_fraisee(lg=20, d=4, dt=8, lt=4, dir=[0, 1, 0], pos=[10, 0, -45], ep=.1); #vis_fraisee(lg=20, d=3, dt=6, lt=3, dir=[1, 1, -1], pos=[0, 0, -10], ep=.1); #vis_fraisee(lg=20, d=3, dt=6, lt=3, dir=[0, 1, 1], pos=[0, 0, -50], ep=.1); } } // Utilisation pour dessiner une vis vis_fraisee(lg=20, d=1, dt=2, lt=1, dir=[0, 1, 0], pos=[-10, 0, -15], ep=.1); vis_fraisee(lg=20, d=2, dt=4, lt=2, dir=[0, 1, 0], pos=[-20, 0, -15], ep=.1); vis_fraisee(lg=20, d=3, dt=6, lt=3, dir=[0, 1, 0], pos=[-30, 0, -15], ep=.1); vis_fraisee(lg=20, d=4, dt=8, lt=4, dir=[0, 1, 0], pos=[-40, 0, -15], ep=.1); // Utilisation pour dessiner un ecrou ecrou(d=8, e=4, dir=[1, 0, 0], pos=[50, 0, 0], ep=.01); ecrou(d=6,5, e=3, dir=[1, 0, 0], pos=[60, 0, 0], ep=.01); ecrou(d=8, e=4, dir=[0, 1, 0], pos=[50, 20, 0], ep=.01); ecrou(d=6,5, e=3, dir=[0, 1, 0], pos=[60, 20, 0], ep=.01); ecrou(d=8, e=4, dir=[0, 0, 1], pos=[50, 40, 0], ep=.01); ecrou(d=6,5, e=3, dir=[0, 0, 1], pos=[60, 40, 0], ep=.01); } module vis_plate(lg=20, d=3, dt=6, lt=2, dir=[1, 0, 0], pos=[0, 0, 0], ep=.1, fs=1) { // Renormalisation au cas ou Module=sqrt(dir[0]*dir[0]+dir[1]*dir[1]+dir[2]*dir[2]); dir_x=dir[0]/Module; dir_y=dir[1]/Module; dir_z=dir[2]/Module; // Calcul de la matrice de rotation Beta=asin(dir_x); Alpha=-atan2(dir_y, dir_z); // Creation de la vis translate(pos) rotate(Alpha, [1, 0, 0]) rotate(Beta, [0, 1, 0]) union() { translate([0, 0, -2*ep]) cylinder(h=lg+3*ep, r=d/2, center=false, $fs=fs); translate([0, 0, -lt-ep]) cylinder(h=lt, r=dt/2, center=false, $fs=fs); } } module vis_fraisee(lg=20, d=3, dt=6, lt=2, dir=[1, 0, 0], pos=[0, 0, 0], ep=.1, fs=1) { // Renormalisation au cas ou Module=sqrt(dir[0]*dir[0]+dir[1]*dir[1]+dir[2]*dir[2]); dir_x=dir[0]/Module; dir_y=dir[1]/Module; dir_z=dir[2]/Module; // Calcul de la matrice de rotation Beta=asin(dir_x); Alpha=-atan2(dir_y, dir_z); // Creation de la vis translate(pos) rotate(Alpha, [1, 0, 0]) rotate(Beta, [0, 1, 0]) union() { cylinder(h=lg+ep, r=d/2, center=false, $fs=1); cylinder(h=lt, r1=dt/2, r2=d/2, center=false, $fs=fs); translate([0, 0, -ep+0.01]) cylinder(h=ep+0.01, r=dt/2, center=false, $fs=fs); } } module ecrou(d=8, e=3, dir=[0, 1, 0], pos=[-10, 0, 15], ep=.1) { // Renormalisation au cas ou Module=sqrt(dir[0]*dir[0]+dir[1]*dir[1]+dir[2]*dir[2]); dir_x=dir[0]/Module; dir_y=dir[1]/Module; dir_z=dir[2]/Module; // Calcul de la matrice de rotation Beta=asin(dir_x); Alpha=-atan2(dir_y, dir_z); // Creation de l'écrou largeur=d*sin(30); longueur=d*cos(30); translate(pos) rotate(Alpha, [1, 0, 0]) rotate(Beta, [0, 1, 0]) union() { translate([0, 0, -ep]) union() { translate([-longueur/2, -largeur/2, 0])cube([longueur, largeur, e+2*ep]); rotate([0, 0, 60])translate([-longueur/2, -largeur/2, 0])cube([longueur, largeur, e+2*ep]); rotate([0, 0, -60])translate([-longueur/2, -largeur/2, 0])cube([longueur, largeur, e+2*ep]); } } }