~~NOTOC~~ ====== Générateur de luminaires ====== Ce générateur créera les plans DXF à utiliser avec une découpeuse laser afin d'obtenir le résultat voulu, prévisualisable dans le générateur. Par exemple : {{ :outilsit:fablab:openscad:2022-02-01_16_08_58-desktopwindowxamlsource.png }} Nous pouvons voir sur cette capture quatre choses : - L'objet en 3D. - La largeur totale de l'objet - La hauteur de l'objet - L'angle utilisé, indiquant la courbure de chaque élément. Ainsi, si vous désirez une lampe "ronde", il suffit de mettre cet angle à 180° : {{ :outilsit:fablab:laser:2022-02-01_16_42_07-testbdaok.scad_-_openscad.png |}} Ce générateur est complexe dans le sens où il existe énormément de variables pouvant influer sur la forme, le tout sans aucun garde-fou vous indiquant si vous faites une mauvaise utilisation de l'outil. Merci vous référer à ce qui suit avant de me contacter ;) ===== Les options de customization ===== {{ :outilsit:fablab:laser:2022-02-01_17_46_55-testbdaok.scad_-_openscad.png |}} ==== Mode de visualisation ==== Vous aurez le choix entre : === 3D === correspondant à ce que vous aurez vu plus haut. === Forme === Affichant alors uniquement une des parts de la lampe : {{ :outilsit:fablab:laser:2022-02-01_19_14_55-testbdaok.scad_-_openscad.png |}} === DXF === Permettant d'exorter le DXF pour la découpe complète. {{ :outilsit:fablab:laser:2022-02-01_19_16_53-testbdaok.scad_-_openscad.png |}} ---- ==== Forme générale ===== === Répétitions === Nombre de fois que la forme sera répétée autour du luminaire. Attention à toujours garder un moyen de mettre une ampoule! === Diamètre intérieur === Diamètre des plaques haut et bas servant d'accroches aux formes et où sera mise l'ampoule. === Position de la lampe === Simulera le fait que la lampe soit là où vous l'indiquez : en haut ou en bas. ---- ==== Matériau ==== === Epaisseur === Indique l'épaisseur du matériau que vous utiliserez. === R, V et B === indique la couleur du matériau dans la prévisualisation 3D. ---- ==== 3D ==== === Informations 3D === Donne les informations de largeur, hauteur et d'angle utilisé. === Support === Affiche le support sur lequel est posé la lampe en prévisualisation 3D. === Transparence des formes === Rend les formes transparentes : === Simulation emboitement === Permet de simuler l'emboitement... === Eloignement === Eloignement que doit avoir la simulation. {{ :outilsit:fablab:openscad:2022-02-02_11_01_09-testbdaok.scad_-_openscad.png |}} ---- ==== Forme principale ==== === Hauteur === Hauteur de la lampe === Qualite === Indique le nombre de bords qu'aura la forme. L'information est également donnée là où est indiqué l'angle. Ici avec une qualité de 3, équivalant donc à 3 côtés : {{ :outilsit:fablab:openscad:2022-02-02_11_05_42-testbdaok.scad_-_openscad.png |}} === Angle === Créé la courbure de la forme en fonction de l'angle voulu. === Redimensionnement largeur === Permet d'étirer une forme pour changer le type de courbure. ---- ==== Forme intérieure 1 & 2 ==== Deux formes intérieures peuvent etre crées pour trouer ou modifier la forme. === Intérieur taille === Indique la taille du trou === Intérieur qualité === Indique le nombre de bords qu'aura ce trou === Intérieur Déplacement H et V === Déplacement horizontal et vertical === Interieur Custom rotation === Permet de faire pivoter la forme. Utile si elle a peu de bords. {{ :outilsit:fablab:openscad:2022-02-02_11_16_49-testbdaok.scad_-_openscad.png |}} ---- ==== Accroches haut et bas ==== === Hauteur === Hauteur à laquelle se situe l'accorhce === Taille raccord === Taille des encoches === Trou === Créée le trou pour mettre l'ampoule === Trou diamètre === Diamètre du trou pour la lampe... ---- ==== Pattern ==== Permet d'afficher un pattern au sein de la forme. === Application pattern === Applique ou non === Taille bord === Taille qu'aura le bord === Pattern === Plusieurs patterns peuvent-être utilisés : == Lignes == {{ :outilsit:fablab:openscad:2022-02-02_11_34_20-testbdaok.scad_-_openscad.png |}} == Hexagones == {{ :outilsit:fablab:openscad:2022-02-02_11_35_15-testbdaok.scad_-_openscad.png |}} == Quadrillage == {{ :outilsit:fablab:openscad:2022-02-02_11_35_54-testbdaok.scad_-_openscad.png |}} == Hexagones 2 == {{ :outilsit:fablab:openscad:2022-02-02_11_36_48-testbdaok.scad_-_openscad.png |}} == Soleil == {{ :outilsit:fablab:openscad:2022-02-02_11_38_03-testbdaok.scad_-_openscad.png |}} == DXF / SVG == Utilisera le fichier indiqué comme pattern. **Attention à ne pas utiliser de tros gros SVG!!!!** === Pattern Mod 1 à 4 === Quatre modificateurs modifiant les patterns. Chaque pattern étant fort différent l'un de l'autre, les modificateurs n'agissent pas de la même manière en fonction de chaque pattern. A vous d'essayer chacun. ---- ==== Ampoule ==== Permet de simuler la présence de l'ampoule et modifier la forme de la lampe en fonction de la lampe voulue. Plusieurs paramètres permettent de créer la forme de la majorité de ampoules habituelles. Le paramètre "offset" permet d'augmenter ou diminuer l'espace entre l'ampoule et la forme de la lampe. Il y a déjà plusieurs ampoules incluses : {{gallery>:outilsit:fablab:openscad:osampoule?400x400&0&crop}} ---- ===== Bugs connus ==== - La hauteur indiquée est celle voulue et non celle réelle (hauteur voulue - découpe pour pied) - La largeur indiquée est toujours celle que l'on aurait avec un cercle parfait. La largeur d'une forme ayant peu de faces peut donc moindre que celle indiquée. ---- /* Générateur de support à lampes. Vanlindt Marc - marc@vanlindt.be - www.vanlindt.be Inspiré des réalisations de ... (Merci à qui me donnera le nom) /!\ A l'heure actuelle aucune découpe et lampe na encore été réalisée à l'aide v0.6.5 ------- 0.6.5 : - offset autour de la lampe 0.6 : - Mode Ampoule (beta) 0.5 : - correction erreur des Interieur_mode quand "gauche" est utilisé. 0.4 : - Ajout de plusieurs "Interieur mode" afin de changer facilement ou de manière personnalisée la rotation de la forme intérieure. 0.3 : - Calcul correct de la hauteur lorsque angles > à 180° 0.2 : - ajout variable "Pied" afin d'avoir un pied plat à l'objet. 0.1 : - ajout informations en 3D et Forme */ /* [Mode de visualisation] */ Visualisation = "3D";//[3D,Forme,Sortie DXF,Ampoule] /* [Forme générale] */ // Nombre de formes Repetitions = 8; // Diamètre au centre de la forme Diametre_interieur = 45; // Coupure pour avoir un pied plat Pied = 50;//[0:200] // La lampe sera positionnée en... Position_de_la_lampe = "bas";//[bas,haut] /* [Matériau] */ // En mm Epaisseur = 5; // Rouge R = 208;//[0:255] // Vert V = 185;//[0:255] // Bleu B = 166;//[0:255] /* [3D] */ // Affichage d'informations à l'écran et dans la console Informations_3D = true; Support =true; // En mode 3D, les formes principales seront transparentes. Transparence_formes = false; // Eloigne certaines formes Simulation_emboitement = true; // Valeur de l'éoiglement (en mm.) Eloignement = 0;//[0:500] /* [Forme] */ Informations_Forme = true; // Taille du trait en mode informations Informations_trait = 5; /* [Forme principale] */ // Hauteur finale en mm Taille = 500;//[1:2000] // En nombre de côtés Qualite = 64; // En ° Angle = 90;//[1:360] // Redimensionnement en largeur (en %) Redimensionnement_largeur = 100;//[1:500] /* [Forme intérieure I] */ // En mm Interieur_1_Taille = 350; // En ... Interieur_1_Qualite = 64; // En mm Interieur_1_Deplacement_H = -250;//[-2000:2000] // En mm Interieur_1_Deplacement_V = -125;//[-2000:2000] // Change l'angle de placement de la forme Interieur_1_mode = 1;//[1:"Gauche",2:"Haut",3:"Droite",4:"Bas",5:"Custom"] Interieur_1_Custom_rotation = 0;//[-180:180] /* [Forme intérieure II] */ // En mm Interieur_2_Taille = 0; // En ... Interieur_2_Qualite = 32; // En mm Interieur_2_Deplacement_H = 0;//[-2000:2000] // En mm Interieur_2_Deplacement_V = 0;//[-2000:2000] // Change l'angle de placement de la forme Interieur_2_mode = 1;//[1:"Gauche",2:"Haut",3:"Droite",4:"Bas",5:"Custom"] Interieur_2_Custom_rotation = 0;//[-180:180] /* [Accroche - haut] */ // En % de la hauteur Hauteur_accroche_haut = 75;//[0:100] // Taille de encoches en mm Taille_raccord_haut = 50; // Trou pour lampe ? Trou_haut = false; // Diametre du trou en mm Trou_haut_diametre = 80; /* [Accroche - bas] */ // En % de la hauteur Hauteur_accroche_bas = 15;//[0:100] // Taille de encoches en mm Taille_raccord_bas = 50; // Trou pour lampe ? Trou_bas = false; // Diametre du trou en mm Trou_bas_diametre = 80; /* [Pattern] */ Informations_pattern = true; Application_pattern = false; // Taille du bord pour pattern. Taille_bord = 10; Pattern = 5;//[1:"Lignes",2:"Hexagones (Attention! Grandes valeurs pour pattern_mod!!!)",3:"Quadrillage",4:"Hexagones II (Attention! Grandes valeurs pour pattern_mod!!!)",5:"Soleil!",6:"DXF/SVG - Attention, activer l'option ''SVG'' dans les préférences!"] Pattern_mod_1 = 128; Pattern_mod_2 = 4; Pattern_mod_3 = 0;//[-1000:1000] Pattern_mod_4 = -71;//[-1000:1000] Pattern_fichier = "pattern.svg"; /* [Ampoule] */ Montrer_ampoule = false; Ampoule_Hauteur = 300;//[1:300] Ampoule_Diametre_culot = 27;//[14:"Petit culot - 14mm",27:"Grand culot - 27mm"] Ampoule_Evasement = 50;//[0:5000] Ampoule_Evasement_Type = 1;//[1,2] Ampoule_Diametre_haut = 30;//[1:200] Ampoule_ecrasement_haut = 100;//[1:100] Ampoule_Diametre_bas = 30;//[1:60] Ampoule_ecrasement_bas = 100;//[1:100] Ampoule_type = 1;//[1:"Custom",2:"E27 - Tube long à filament - 30 cm - 3cm",3:"E27 - Ampoule Edison Frequency à filaments - 13cm - 9.5cm",4:"E27 - Ampoule Edison cage à filaments / Spiral - 12cm - 8cm",5:"E27 - Edison Guad - 11.5cm - 6cm",6:"E27 - Edison Squirrel - 14cm - 6.4cm",7:"E27 - Ampoule Edison Valve à filaments - 11cm - 4.5cm",8:"E14 - Ampoule Edison Oval à filaments - 10cm - 3.5cm",9:"E27 - Ampoule Edison Candle à filaments - 13cm - 5.3cm",10:"E27 - Ampoule Edison Globe à filaments - 13cm - 5.3cm",11:"E27 - Osram Vintage 1906 - 14.5cm - 6.4cm"] // Offset autour de l'ampoule Offset_ampoule = 20;//[0:200] // Variables calculées haut = Angle>180?sin(90)*Taille:sin(Angle/2)*Taille; // Taille réelle de la forme obtenue hautmod = Taille/2/haut; // Modificateur permettant de ramener la forme a la taille voulue hautmod2 = ((Taille/2)+Pied/2)/haut; ma = Angle/Qualite; // Angle de chaque division de la forme. ep = Taille-(cos((Angle)/2)*Taille); // Epaisseur réelle de la forme ep2 = ep*hautmod2*Redimensionnement_largeur/100; // Epaisseur de la forme une fois revenue à taille voulue depl2 = Interieur_1_Taille/2>ep ? Interieur_1_Taille/2-ep : 0; // Modificateur de déplacement au cas où la forme intérieure serait plus grande que la forme extérieure. points = [for(i=[0:Qualite])[sin(-ma*i)*Taille , cos(-ma*i)*Taille]]; // Points composant ma forme de base. cr = 1/255*R; // Rouge cv = 1/255*V; // Vert cb = 1/255*B; // Bleu dechex = [0,1/1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F"]; hexaR = str(dechex[floor(R/16)],dechex[R%16]); hexaV = str(dechex[floor(V/16)],dechex[V%16]); hexaB = str(dechex[floor(B/16)],dechex[B%16]); HexaCouleur = str("#",hexaR,hexaV,hexaB); HexaRC = str("#",hexaR,"0000"); HexaRV = str("#00",hexaV,"00"); HexaRB = str("#0000",hexaB); Espacement = sin(360/Repetitions/2)*Diametre_interieur;// Calcul de l'espacement entre deux formes pour savoir si l'ampoule choisie passe. if(Visualisation=="Ampoule") { MonAmpoule(); } if(Visualisation=="3D") { rotate([90,0,-90]) color([cr,cv,cb,1]) ObjetComplet(); if(Support==true) { color([0.9,0.7,0.5,1]) translate([0,0,-Epaisseur]) cylinder(r=ep2+Diametre_interieur/2,h=Epaisseur,$fn=64); } if(Informations_3D==true) { color([1,0.5,0.5,1]) { translate([0,ep2+Diametre_interieur/2+50,0]) cylinder(d=10,h=Taille,$fn=4); translate([0,ep2+Diametre_interieur/2+50,0]) rotate([90,0,0]) cylinder(d=10,h=50,$fn=4); translate([0,ep2+Diametre_interieur/2+50,Taille]) rotate([90,0,0]) cylinder(d=10,h=50,$fn=4); } rotate([90,0,90]) translate([ep2+Diametre_interieur+40,Taille/2,0]) text(str("± ",Taille," mm"),valign="center",halign="left",size=Taille/15); color([1,0.5,0.5,1]) { translate([0,ep2+Diametre_interieur/2,Taille]) cylinder(d=10,h=50,$fn=4); translate([0,-ep2-Diametre_interieur/2,Taille]) cylinder(d=10,h=50,$fn=4); translate([0,-ep2-Diametre_interieur/2,Taille+50]) rotate([-90,0,0]) cylinder(d=10,h=ep2*2+Diametre_interieur,$fn=4); } translate([0,0,Taille+75]) rotate([90,0,90]) text(str("± ",ep2*2+Diametre_interieur," mm"),valign="bottom",halign="center",size=Taille/15); translate([0,ep2+Diametre_interieur+(300*Taille/1200),Taille/4*3]) scale([1/1200*Taille,1/1200*Taille,1/1200*Taille]) rotate([90,0,90]) translate([-250,-Taille/2,0]) { translate([250,Taille/2]) text(str(" ",Angle,"° "),valign="center",halign=Angle>180 ? "right":"left",size=Taille/25*1200/Taille); hull() { translate([250,Taille/2]) circle(d=30); translate([sin(-90+Angle/2)*200,cos(-90+Angle/2)*200]) translate([250,Taille/2]) circle(d=30); } hull() { translate([250,Taille/2]) circle(d=30); translate([sin(-90-Angle/2)*200,cos(-90-Angle/2)*200]) translate([250,Taille/2]) circle(d=30); } for(i=[0:Qualite]) { translate([250,Taille/2]) rotate([0,0,90-Angle/2]) translate([sin(-ma*i)*200,cos(-ma*i)*200]) circle(d=30); } } } if(Position_de_la_lampe=="bas" && Montrer_ampoule==true) { translate([0,0,Taille/100*Hauteur_accroche_bas]) MonAmpoule(); } if(Position_de_la_lampe=="haut" && Montrer_ampoule==true) { translate([0,0,Taille/100*Hauteur_accroche_haut]) rotate([180,0,0]) MonAmpoule(); } } if(Visualisation=="Sortie DXF") { for(i=[1:Repetitions]) { translate([(ep2+10)*i,0]) FormePrincipale(); translate([Diametre_interieur/2+Taille_raccord_haut/2,Taille*1.2+Diametre_interieur+20]) AccrocheHaut(); translate([Diametre_interieur*2+Taille_raccord_haut+Taille_raccord_bas/2,Taille*1.2+Diametre_interieur+Taille_raccord_bas/2]) AccrocheBas(); } } if(Visualisation=="Forme") { rotate([90,0,90]) color([cr,cv,cb,1]) linear_extrude(Epaisseur) FormePrincipale(); } module ObjetComplet() { Eloignement = Simulation_emboitement==true ? Eloignement : 0; for(i=[0:Repetitions-1]) { rotate([0,360/Repetitions*i,0]) translate([-Diametre_interieur/2-(Eloignement*sin(180/Repetitions*i)),0]) if(Transparence_formes==true) { #MaFormePrincipale3D(); } else { MaFormePrincipale3D(); } } translate([0,Epaisseur/2+Taille/100*Hauteur_accroche_haut,0]) rotate([90,0,0]) linear_extrude(Epaisseur) AccrocheHaut(); translate([0,Epaisseur/2+Taille/100*Hauteur_accroche_bas,0]) rotate([90,0,0]) linear_extrude(Epaisseur) AccrocheBas(); } module AccrocheHaut() { rotrep = Repetitions%2==1 ? 180/Repetitions : 0; rotate([0,0,rotrep]) difference() { circle(d=Application_pattern==false ? Diametre_interieur+Taille_raccord_haut:Diametre_interieur+Taille_raccord_haut/2+Taille_bord*2 ,$fn=64); for(i=[1:Repetitions]) { rotate([0,0,360/Repetitions*i]) translate([Diametre_interieur/2+Taille_raccord_haut/2+Taille_raccord_haut/4,0,0]) square([Taille_raccord_haut,Epaisseur],center=true); } if(Trou_haut==true) { circle(d=Trou_haut_diametre,$fn=64); } } } module AccrocheBas() { rotrep = Repetitions%2==1 ? 180/Repetitions : 0; rotate([0,0,rotrep]) difference() { circle(d=Application_pattern==false ? Diametre_interieur+Taille_raccord_bas:Diametre_interieur+Taille_raccord_bas/2+Taille_bord*2,$fn=64); for(i=[1:Repetitions]) { rotate([0,0,360/Repetitions*i]) translate([Diametre_interieur/2+Taille_raccord_bas/2+Taille_raccord_bas/4,0,0]) square([Taille_raccord_bas,Epaisseur],center=true); } if(Trou_bas==true) { circle(d=Trou_bas_diametre,$fn=64); } } } module MaFormePrincipale3D() { translate([0,0,-Epaisseur/2]) linear_extrude(Epaisseur) FormePrincipale(); } module FormePrincipale() { if(Application_pattern==true) { difference() { FormeDeBase(); offset(-Taille_bord) FormeDeBase(); } } else { FormeDeBase(); } if(Application_pattern==true) { intersection() { FormeDeBase(); if(Pattern==1)Pattern1(); if(Pattern==2)Pattern2(); if(Pattern==3)Pattern3(); if(Pattern==4)Pattern4(); if(Pattern==5)Pattern5(); if(Pattern==6)Pattern6(); } } } module FormeDeBase() { rotint = Interieur_1_mode==3 ? (180/Interieur_1_Qualite): Interieur_1_mode==2 ? 90+(180/Interieur_1_Qualite): Interieur_1_mode==4 ? -90+(180/Interieur_1_Qualite): Interieur_1_mode==5 ? Interieur_1_Custom_rotation:(180/Interieur_1_Qualite)+180; rotint2 = Interieur_2_mode==3 ? (180/Interieur_2_Qualite): Interieur_2_mode==2 ? 90+(180/Interieur_2_Qualite): Interieur_2_mode==4 ? -90+(180/Interieur_2_Qualite): Interieur_2_mode==5 ? Interieur_2_Custom_rotation:(180/Interieur_2_Qualite)+180; difference() { translate([0,-Pied]) scale([hautmod2*Redimensionnement_largeur/100,hautmod2,0]) translate([-ep,haut]) difference() { translate([Taille,0]) rotate([0,0,90-Angle/2]) polygon(points); translate([(-depl2+Interieur_1_Deplacement_H)*1/Redimensionnement_largeur*100,Interieur_1_Deplacement_V]) scale([1/Redimensionnement_largeur*100,1,1]) rotate([0,0,rotint]) circle(r=Interieur_1_Taille,$fn=Interieur_1_Qualite); translate([(-depl2+Interieur_2_Deplacement_H)*1/Redimensionnement_largeur*100,Interieur_2_Deplacement_V]) scale([1/Redimensionnement_largeur*100,1,1]) rotate([0,0,rotint2]) circle(r=Interieur_2_Taille,$fn=Interieur_2_Qualite); } if(Position_de_la_lampe=="bas") { translate([Diametre_interieur/2,Taille/100*Hauteur_accroche_bas]) difference() { offset(Offset_ampoule) AmpouleForme(); translate([0,-5000+Epaisseur]) square([10000,10000],center=true); translate([0,Taille/100*Hauteur_accroche_haut-Taille/100*Hauteur_accroche_bas+5000-Epaisseur]) square([10000,10000],center=true); } } else { difference() { translate([Diametre_interieur/2,Taille/100*Hauteur_accroche_haut]) rotate([0,0,180]) difference() { offset(Offset_ampoule) AmpouleForme(); translate([0,-5000+5]) square([10000,10000],center=true); translate([0,Taille/100*Hauteur_accroche_haut-Taille/100*Hauteur_accroche_bas+5000-Epaisseur]) square([10000,10000],center=true); } } } translate([0,-Pied]) square([ep2*4,Pied*2],center=true); translate([Taille_raccord_haut/4,Taille/100*Hauteur_accroche_haut]) square([Taille_raccord_haut,Epaisseur],center=true); translate([Taille_raccord_bas/4,Taille/100*Hauteur_accroche_bas]) square([Taille_raccord_bas,Epaisseur],center=true); } if(Visualisation=="Forme" && Informations_Forme==true) { translate([100+250*Taille/1000,Taille/4*3,0]) scale([Taille/1000,Taille/1000,Taille/1000]) translate([0,0]) { //translate([250,Taille/2]) text(str(" ",Angle,"° "),valign="center",halign=Angle>180 ? "right":"left",size=40); hull() { //translate([250,Taille/2]) circle(d=Informations_trait); translate([sin(-90+Angle/2)*200,cos(-90+Angle/2)*200]) //translate([250,Taille/2]) circle(d=Informations_trait); } hull() { //translate([250,Taille/2]) circle(d=Informations_trait); translate([sin(-90-Angle/2)*200,cos(-90-Angle/2)*200]) //translate([250,Taille/2]) circle(d=Informations_trait); } for(i=[0:Qualite]) { //translate([250,Taille/2]) rotate([0,0,90-Angle/2]) translate([sin(-ma*i)*200,cos(-ma*i)*200]) circle(d=Informations_trait/2); } } hull() { translate([50,0,0]) circle(d=Informations_trait); translate([100,0,0]) circle(d=Informations_trait); } hull() { translate([50,Taille,0]) circle(d=Informations_trait); translate([100,Taille,0]) circle(d=Informations_trait); } hull() { translate([100,0,0]) circle(d=Informations_trait); translate([100,Taille,0]) circle(d=Informations_trait); } hull() { translate([0,Taille+50,0]) circle(d=Informations_trait); translate([0,Taille+100,0]) circle(d=Informations_trait); } hull() { translate([-ep2,Taille+50,0]) circle(d=Informations_trait); translate([-ep2,Taille+100,0]) circle(d=Informations_trait); } hull() { translate([-ep2,Taille+100,0]) circle(d=Informations_trait); translate([0,Taille+100,0]) circle(d=Informations_trait); } translate([0100,Taille/2,0]) text(str(" ± ",Taille," mm"),valign="center",halign="left",size=Taille/22); translate([-ep2/2,Taille+150,0]) text(str("± ",ep2," mm"),valign="bottom",halign="center",size=Taille/22); } } module Pattern1() { rotate([0,0,Pattern_mod_3]) for(i=[-Taille:Pattern_mod_1+Pattern_mod_2:Taille]) { hull() { translate([i,-Taille]) circle(d=Pattern_mod_2); translate([i,Taille*2]) circle(d=Pattern_mod_2); } } } module Pattern2() { hexa=[for(i=[0:5])[sin(60*i)*Pattern_mod_1 , cos(60*i)*Pattern_mod_1]]; difference() { translate([-Taille*2,-Taille*2]) square([Taille*4,Taille*4]); translate([Pattern_mod_1*2,0]) for(j=[-(Taille/2/Pattern_mod_1)/2:(Taille/2/Pattern_mod_1)*2]) { translate([0,j*cos(30)*Pattern_mod_1*2]) for(i=[-Taille/2/Pattern_mod_1:0]) { translate([Pattern_mod_1*i*3,0]) rotate([0,0,30]) offset(-Pattern_mod_2) polygon(hexa); translate([Pattern_mod_1*i*3+sin(30)*Pattern_mod_1*3,cos(30)* Pattern_mod_1]) rotate([0,0,30]) offset(-Pattern_mod_2) polygon(hexa); } } } } module Pattern3() { rotate([0,0,Pattern_mod_3]) { for(i=[-Taille:Pattern_mod_1+Pattern_mod_2:Taille]) { hull() { translate([i,-Taille]) circle(d=Pattern_mod_2); translate([i,Taille*2]) circle(d=Pattern_mod_2); } } for(i=[-Taille:Pattern_mod_1+Pattern_mod_2:Taille]) { hull() { translate([-Taille,i]) circle(d=Pattern_mod_2); translate([Taille*2,i]) circle(d=Pattern_mod_2); } } } } module Pattern4() { module p4fb(a) { polygon([[0,0],[sin(120)*a,cos(120)*a],[sin(120)*a+sin(60)*a,cos(120)*a+cos(60)*a],[sin(120)*a+sin(60)*a,cos(120)*a+cos(60)*a+a],[sin(60)*a,cos(60)*a],[0,a]]); } module p4fb2(a,b) { rotate([0,0,30]) for(i=[0:6]) { rotate([0,0,-60*i]) translate([0,-a]) difference() { offset(b/2) p4fb(a); offset(-b/2) p4fb(a); } } } module p4fb3() { p4fb2(Pattern_mod_1,Pattern_mod_2); translate([sin(30)*Pattern_mod_1*6,cos(30)*Pattern_mod_1*2]) p4fb2(Pattern_mod_1,Pattern_mod_2); } module p4fb4() { for(i=[-Taille/4/Pattern_mod_1:0]) { translate([sin(30)*Pattern_mod_1*12*i,0]) p4fb3(); } } for(i=[-Pattern_mod_1*4:sin(60)*Pattern_mod_1*4:Taille*1.5]) { translate([0,i]) p4fb4(); } } module Pattern5() { for(i=[1:Pattern_mod_1]) { translate([Pattern_mod_3,Pattern_mod_4]) hull() { circle(d=Pattern_mod_2); translate([sin(360/Pattern_mod_1*i)*Taille*4,cos(360/Pattern_mod_1*i)*Taille*4]) circle(d=Pattern_mod_2); } } } module Pattern6() { translate([Pattern_mod_3,Pattern_mod_4,0]) offset(Pattern_mod_2) scale([Pattern_mod_1/100,Pattern_mod_1/100,Pattern_mod_1/100]) import(Pattern_fichier); } module MonAmpoule() { if(Ampoule_type==1){Ampoule(h=Ampoule_Hauteur,d1=Ampoule_Diametre_culot,d2=Ampoule_Diametre_haut,d3=Ampoule_Diametre_bas,e=Ampoule_Evasement,de1=Ampoule_ecrasement_haut,de2=Ampoule_ecrasement_bas,et=Ampoule_Evasement_Type,o=0);} if(Ampoule_type==2) {Ampoule(h=300 ,d1=27 ,d2=30 ,d3=30 ,e=0 ,de1=100 ,de2=25 ,et=1,o=0);} if(Ampoule_type==3) {Ampoule(h=130 ,d1=27 ,d2=95 ,d3=30 ,e=10 ,de1=100 ,de2=25 ,et=1,o=0);} if(Ampoule_type==4) {Ampoule(h=120 ,d1=27 ,d2=80 ,d3=30 ,e=10 ,de1=100 ,de2=25 ,et=1,o=0);} if(Ampoule_type==5) {Ampoule(h=115 ,d1=27 ,d2=60 ,d3=30 ,e=70 ,de1=100 ,de2=25 ,et=1,o=0);} if(Ampoule_type==6) {Ampoule(h=140 ,d1=27 ,d2=64 ,d3=33 ,e=5000 ,de1=80 ,de2=10 ,et=1,o=0);} if(Ampoule_type==7) {Ampoule(h=110 ,d1=27 ,d2=45 ,d3=45 ,e=70 ,de1=100 ,de2=100 ,et=1,o=0);} if(Ampoule_type==8) {Ampoule(h=100 ,d1=14 ,d2=35 ,d3=15 ,e=25 ,de1=0 ,de2=30 ,et=2,o=0);} if(Ampoule_type==9) {Ampoule(h=130 ,d1=27 ,d2=53 ,d3=28 ,e=100 ,de1=0 ,de2=0 ,et=2,o=0);} if(Ampoule_type==10){Ampoule(h=130 ,d1=27 ,d2=95 ,d3=27 ,e=10 ,de1=100 ,de2=100 ,et=1,o=0);} if(Ampoule_type==11){Ampoule(h=145 ,d1=27 ,d2=64 ,d3=30 ,e=5000 ,de1=80 ,de2=25 ,et=1,o=0);} } module AmpouleForme() { if(Ampoule_type==1){Ampoule2D(h=Ampoule_Hauteur,d1=Ampoule_Diametre_culot,d2=Ampoule_Diametre_haut,d3=Ampoule_Diametre_bas,e=Ampoule_Evasement,de1=Ampoule_ecrasement_haut,de2=Ampoule_ecrasement_bas,et=Ampoule_Evasement_Type,o=Offset_ampoule);} if(Ampoule_type==2) {Ampoule2D(h=300 ,d1=27 ,d2=30 ,d3=30 ,e=0 ,de1=100 ,de2=25 ,et=1,o=0);} if(Ampoule_type==3) {Ampoule2D(h=130 ,d1=27 ,d2=95 ,d3=30 ,e=10 ,de1=100 ,de2=25 ,et=1,o=0);} if(Ampoule_type==4) {Ampoule2D(h=120 ,d1=27 ,d2=80 ,d3=30 ,e=10 ,de1=100 ,de2=25 ,et=1,o=0);} if(Ampoule_type==5) {Ampoule2D(h=115 ,d1=27 ,d2=60 ,d3=30 ,e=70 ,de1=100 ,de2=25 ,et=1,o=0);} if(Ampoule_type==6) {Ampoule2D(h=140 ,d1=27 ,d2=64 ,d3=33 ,e=5000 ,de1=80 ,de2=10 ,et=1,o=0);} if(Ampoule_type==7) {Ampoule2D(h=110 ,d1=27 ,d2=45 ,d3=45 ,e=70 ,de1=100 ,de2=100 ,et=1,o=0);} if(Ampoule_type==8) {Ampoule2D(h=100 ,d1=14 ,d2=35 ,d3=15 ,e=25 ,de1=0 ,de2=30 ,et=2,o=0);} if(Ampoule_type==9) {Ampoule2D(h=130 ,d1=27 ,d2=53 ,d3=28 ,e=100 ,de1=0 ,de2=0 ,et=2,o=0);} if(Ampoule_type==10){Ampoule2D(h=130 ,d1=27 ,d2=95 ,d3=27 ,e=10 ,de1=100 ,de2=100 ,et=1,o=0);} if(Ampoule_type==11){Ampoule2D(h=145 ,d1=27 ,d2=64 ,d3=30 ,e=5000 ,de1=80 ,de2=25 ,et=1,o=0);} } echoPrez=str("

Générateur de supports à lampes

CC-BY-SA marc@vanlindt.be - www.vanlindt.be
Inspiré d'une création de ... présentée à la Braderie de l'Art de Liège 2018
"); echoInfos=str("

Informations sur l'objet

Hauteur de l'objet : ",Taille," mm.
Largeur de l'objet : ",ep2*2+Diametre_interieur," mm.
Largeur d'une forme : ",ep2," mm.

Nombre de formes : ",Repetitions,"

Diametre intérieur : ",Diametre_interieur," mm.

Epaisseur matériau choisi : ",Epaisseur," mm.

Angle utilisé : ",Angle,"°

Hauteur raccord haut : ",Taille/100*Hauteur_accroche_haut," mm.
Hauteur raccord bas : ",Taille/100*Hauteur_accroche_bas," mm.

" ); toto="Edison-Tube-30-3.jpg"; echo3Dt=Transparence_formes==true ? "Activée!" : "Désactivée!"; echo3D=str("

Vue 3D

Attention, les formes 3D générées sont des visualisations de ce que donnera l'objet physique final, après découpe des plans 2D.
Si vous tentez de créer un STL à partir de cette vue, il y aura des erreurs dues à la juxtaposition de certains vecteurs (non-manifold object).


Couleur de l'objet :
",R,"
",V,"
",B,"
Transparence de l'objet : ",echo3Dt,"
"); echoPattern=str("

Aide pour pattern utilisé

"); InfoPattern=["

Pattern 1 : lignes

Pattern mod 1 : Espacement entre les lignes
Pattern mod 2 : Epaisseur des lignes
Pattern mod 3 : Rotation des lignes", "

Pattern 2 : Hexagones I

Pattern mod 1 : Taille des hexagones
Pattern mod 2 : Epaisseur des traits", "

Pattern 3 : Quadrillage

Pattern mod 1 : Espacement entre les lignes
Pattern mod 2 : Epaisseur des lignes • Pattern mod 3 : Rotation du quadrillage", "

Pattern 4 : Hexagones II

Pattern mod 1 : Taille des hexagones
Pattern mod 2 : Epaisseur des traits", "

Pattern 5 : Soleil

Pattern mod 1 : Nombre de rayons
Pattern mod 2 : Epaisseur des rayons
Pattern mod 3 : Déplacement horizonal
Pattern mod 4 : Déplacement vertical"]; PatternInfo=InfoPattern[Pattern-1]; echoTout=str(echoPrez,echoInfos,echo3D,echoPattern,PatternInfo,"
"); if(Informations_pattern==true) { echo(echoTout); } module Ampoule(h,d1,d2,d3,e,de1,de2,et,o) { translate([0,0,-d1]) { color([0.8,0.6,0.3,1]) translate([0,0,5]) cylinder(d=d1,h=d1-5); color([0.1,0.1,0.1,1]) cylinder(d1=d1*0.5,d2=d1*0.9,h=5); color([0.7,0.7,0.7,1]) rotate_extrude($fn=64) difference() { offset(-e,$fn=256) offset(e,$fn=256) if(et==1) { union() { translate([0,h-((d2/2)*1/100*de1)]) scale([1,1/100*de1]) circle(d=d2,$fn=128); translate([0,d1+((d3/2)*1/100*de2)]) scale([1,1/100*de2]) circle(d=d3,$fn=128); } offset(-50,$fn=128) offset(50,$fn=128) { if(et==1) { translate([0,d1+((d3/2)*1/100*de2)]) square([d3/2,(h-d1-+((d3/2)*1/100*de2)-((d2/2)*1/100*de1))]); } translate([0,d1-0.1]) square([d1/2,0.1]); } } if(et==2) { offset(-15) offset(15) { translate([0,h/2+d1/2+e/200]) resize([d2,h-d1-e/100]) circle(d=h-d1-e/100,$fn=128); offset(d3/10) offset(-d3/10) translate([0,d1]) square([d3/2,d3]); } } translate([-d2*100,-(h+d2)*50]) square([d2*100,(h+d2)*100]); } } } module Ampoule2D(h,d1,d2,d3,e,de1,de2,et,o) { translate([0,-d1]) { difference() { offset(-e,$fn=256) offset(e,$fn=256) if(et==1) { union() { translate([0,h-((d2/2)*1/100*de1)]) scale([1,1/100*de1]) circle(d=d2,$fn=128); translate([0,d1+((d3/2)*1/100*de2)]) scale([1,1/100*de2]) circle(d=d3,$fn=128); } offset(-50,$fn=128) offset(50,$fn=128) { if(et==1) { translate([0,d1+((d3/2)*1/100*de2)]) square([d3/2,(h-d1-+((d3/2)*1/100*de2)-((d2/2)*1/100*de1))]); } translate([0,d1-0.1]) square([d1/2,0.1]); } } if(et==2) { offset(-15) offset(15) { translate([0,h/2+d1/2+e/200]) resize([d2,h-d1-e/100]) circle(d=h-d1-e/100,$fn=128); offset(d3/10) offset(-d3/10) translate([0,d1]) square([d3/2,d3]); } } translate([-d2*100,-(h+d2)*50]) square([d2*100,(h+d2)*100]); } mirror() difference() { offset(-e,$fn=256) offset(e,$fn=256) if(et==1) { union() { translate([0,h-((d2/2)*1/100*de1)]) scale([1,1/100*de1]) circle(d=d2,$fn=128); translate([0,d1+((d3/2)*1/100*de2)]) scale([1,1/100*de2]) circle(d=d3,$fn=128); } offset(-50,$fn=128) offset(50,$fn=128) { if(et==1) { translate([0,d1+((d3/2)*1/100*de2)]) square([d3/2,(h-d1-+((d3/2)*1/100*de2)-((d2/2)*1/100*de1))]); } translate([0,d1-0.1]) square([d1/2,0.1]); } } if(et==2) { offset(-15) offset(15) { translate([0,h/2+d1/2+e/200]) resize([d2,h-d1-e/100]) circle(d=h-d1-e/100,$fn=128); offset(d3/10) offset(-d3/10) translate([0,d1]) square([d3/2,d3]); } } translate([-d2*100,-(h+d2)*50]) square([d2*100,(h+d2)*100]); } } }