/* Super générateur de support à machins CC-BY-SA 2.0 Belgique - Marc Vanlindt (marc@vanlindt.be) --------------------------------------------- Carte de visite : 85*55 Magazine : 210*297 */ // --------------------------------------------- Vue ="3D";//[2D,3D] Ecart_des_bord =0;//[0:20] /*[ Forme générale ]*/ //Epaisseur du matériau Epaisseur =4.5; //Ecart pour faciliter l'insertion Ecart =0.2; Largeur = 90 ; Hauteur_arriere = 45 ; Hauteur_avant = 15 ; Profondeur = 30 ; /*[ Inclinaisons ]*/ Inclinaison_avant = 10;// [-90:90] Inclinaison_arriere = 10;// [0:90] Support=true; /*[ Côtés ]*/ Forme ="2";//[1,2] Objet ="Carré";//[Cercle, Carré] Modif_taille_objet =1; Qualite_si_cercle =8; Arrondir =20; Epaissir =0; Qualite_arrondi =32; // --------------------------------------------- if(Vue=="3D") { vue3D(); } if(Vue=="2D") { vue2D(); } module vue2D() { translate([-Epaisseur-Epaissir-1,0]) cote(); translate([Epaisseur+Epaissir+1,0]) mirror() cote(); translate([0,Profondeur+Epaisseur+Epaissir+Profondeur+Profondeur]) bas(); translate([0,Profondeur+Epaisseur+Epaissir+Profondeur+Profondeur/2+Hauteur_avant/2+5+Profondeur]) avant(); translate([0,Profondeur+Epaisseur+Epaissir+Profondeur+Profondeur/2+Hauteur_avant+5+Hauteur_arriere/2+5+Profondeur]) arriere(); } module cote() { difference() { if(Forme=="1"){cote1();} if(Forme=="2"){cote2();} cote_devant2(); cote_haut2(); cote_bas2(); } } // ------------------------------------------------- module cote2() { offset(Epaissir,$fn=Qualite_arrondi) offset(-Arrondir,$fn=Qualite_arrondi) offset(Arrondir,$fn=Qualite_arrondi) chull(){ translate([-Epaisseur,-Profondeur/2]) rotate([0,0,90+Inclinaison_avant]) translate([-Epaisseur/2,Epaisseur/2]) translate([0,Hauteur_avant-Epaisseur,0]) offset(Modif_taille_objet) monobjet2(); translate([-Epaisseur,-Profondeur/2]) rotate([0,0,90+Inclinaison_avant]) translate([-Epaisseur/2,Epaisseur/2]) offset(Modif_taille_objet) monobjet2(); translate([-Epaisseur/2,-Profondeur/2+Epaisseur/2]) offset(Modif_taille_objet) monobjet2(); translate([-Epaisseur/2,Profondeur/2-Epaisseur/2]) offset(Modif_taille_objet) monobjet2(); translate([-Epaisseur,Profondeur/2]) rotate([0,0,180-Inclinaison_arriere]) translate([Epaisseur/2,-Epaisseur/2]) offset(Modif_taille_objet) monobjet2(); translate([-Epaisseur,Profondeur/2]) rotate([0,0,180-Inclinaison_arriere]) translate([Epaisseur/2,-Epaisseur/2]) translate([Hauteur_arriere-Epaisseur,0]) offset(Modif_taille_objet) monobjet2(); translate([-Epaisseur,Profondeur/2]) rotate([0,0,180-Inclinaison_arriere]) translate([Epaisseur/2,-Epaisseur/2]) offset(Modif_taille_objet) monobjet2(); translate([-Epaisseur,Profondeur/2]) rotate([0,0,180-Inclinaison_arriere]) translate([Epaisseur/2,-Epaisseur/2]) translate([Hauteur_arriere-Epaisseur,0]) offset(Modif_taille_objet) monobjet2(); } } // ------------------------------------------------- module cote1() { offset(Epaissir,$fn=Qualite_arrondi) offset(-Arrondir,$fn=Qualite_arrondi) offset(Arrondir,$fn=Qualite_arrondi) { hull() { translate([-Epaisseur/2,Profondeur/2+Epaisseur/2-sin(Inclinaison_arriere)*Epaisseur/2]) monobjet(); if(Support==true) { translate([-Epaisseur/2,Profondeur/2+Epaisseur/2+sin(Inclinaison_arriere)*Hauteur_arriere-sin(Inclinaison_arriere)*Epaisseur/2]) monobjet(); } translate([-Epaisseur/2,Profondeur/2+Epaisseur/2-sin(Inclinaison_arriere)*Epaisseur/2]) rotate([0,0,-180-Inclinaison_arriere]) translate([Hauteur_arriere,0,0]) monobjet(); } hull(){ translate([-Epaisseur/2,-Profondeur/2-Epaisseur/2+sin(Inclinaison_avant)*Epaisseur/2]) monobjet(); translate([-Epaisseur/2,Profondeur/2+Epaisseur/2-sin(Inclinaison_arriere)*Epaisseur/2]) monobjet(); } hull(){ translate([-Epaisseur/2,-Profondeur/2-Epaisseur/2+sin(Inclinaison_avant)*Epaisseur/2]) monobjet(); translate([-Epaisseur/2,-Profondeur/2-Epaisseur/2+sin(Inclinaison_avant)*Epaisseur/2]) rotate([0,0,-180+Inclinaison_avant]) translate([Hauteur_avant,0,0]) monobjet(); } } } module monobjet() { if(Objet=="Cercle") { circle(Epaisseur/2+Modif_taille_objet/2,$fn=Qualite_si_cercle); } if(Objet=="Carré") { square(Epaisseur+Modif_taille_objet,center=true); } } module monobjet2() { if(Objet=="Cercle") { circle(Epaisseur/2,$fn=Qualite_si_cercle); } if(Objet=="Carré") { square(Epaisseur,center=true); } } module cote_haut2() { translate([-Epaisseur,Profondeur/2,0]) rotate([0,0,90-Inclinaison_arriere]) translate([Epaisseur/2,Hauteur_arriere/2]) square([Epaisseur+Ecart,Hauteur_arriere/2+Ecart],center=true); } module cote_devant2() { translate([-Epaisseur,-Profondeur/2,0]) rotate([0,0,90+Inclinaison_avant]) translate([-Epaisseur/2,Hauteur_avant/2]) square([Epaisseur+Ecart,Hauteur_avant/2+Ecart],center=true); } module cote_bas2() { translate([-Epaisseur/2,0]) square([Epaisseur+Ecart,Profondeur/2+Ecart],center=true); } module cote_haut() { translate([-Epaisseur,Profondeur/2,0]) rotate([0,0,90-Inclinaison_arriere]) translate([Epaisseur/2,Hauteur_arriere/2]) square([Epaisseur,Hauteur_arriere],center=true); } module cote_devant() { translate([-Epaisseur,-Profondeur/2,0]) rotate([0,0,90+Inclinaison_avant]) translate([-Epaisseur/2,Hauteur_avant/2]) square([Epaisseur,Hauteur_avant],center=true); } module cote_bas() { translate([-Epaisseur/2,0]) square([Epaisseur,Profondeur],center=true); } module vue3D(){ translate([0,Profondeur/2,Epaisseur]) rotate([-90-Inclinaison_arriere,0,0]) translate([0,-Hauteur_arriere/2,0]) linear_extrude(Epaisseur) arriere(); translate([0,-Profondeur/2,Epaisseur]) rotate([90+Inclinaison_avant,0,0]) translate([0,Hauteur_avant/2,0]) linear_extrude(Epaisseur) avant(); linear_extrude(Epaisseur) bas(); color("red") translate([Largeur/2+Ecart_des_bord,0,0]) rotate([90,90,90]) linear_extrude(Epaisseur) cote(); color("green") translate([-Largeur/2-Epaisseur-Ecart_des_bord,0,0]) rotate([90,90,90]) linear_extrude(Epaisseur) cote(); } module bas() { square([Largeur, Profondeur],center=true); square([Largeur+Epaisseur*2, Profondeur/2],center=true); } module avant() { square([Largeur, Hauteur_avant],center=true); square([Largeur+Epaisseur*2, Hauteur_avant/2],center=true); } module arriere() { square([Largeur, Hauteur_arriere],center=true); square([Largeur+Epaisseur*2, Hauteur_arriere/2],center=true); } module chull(m){ for(i=[0:$children-2]){ hull(){ children(m==true?0:i); children(i+1); } } }