diff --git a/files/U_Box_V104_Test_Cleaned.scad b/files/U_Box_V104_Test_Cleaned.scad index b6014fc..d976589 100644 --- a/files/U_Box_V104_Test_Cleaned.scad +++ b/files/U_Box_V104_Test_Cleaned.scad @@ -28,27 +28,27 @@ /* [Box dimensions] */ // - Longueur - Length - Length = 160; +Length = 160; // - Largeur - Width - Width = 170; +Width = 170; // - Hauteur - Height - Height = 100; +Height = 100; // - Epaisseur - Wall thickness - Thick = 2;//[2:5] +Thick = 2;//[2:5] /* [Box options] */ // - Diamètre Coin arrondi - Filet diameter - Filet = 2;//[0.1:12] +Filet = 2;//[0.1:12] // - lissage de l'arrondi - Filet smoothness - Resolution = 50;//[1:100] +Resolution = 50;//[1:100] // - Tolérance - Tolerance (Panel/rails gap) - m = 0.9; +m = 0.9; // Pieds PCB - PCB feet (x4) - PCBFeet = 1;// [0:No, 1:Yes] +PCBFeet = 1;// [0:No, 1:Yes] // - Decorations to ventilation holes - Vent = 1;// [0:No, 1:Yes] +Vent = 1;// [0:No, 1:Yes] // - Decoration-Holes width (in mm) - Vent_width = 1.5; +Vent_width = 1.5; @@ -99,133 +99,127 @@ Dec_size = Vent ? Thick*2 : 0.8; /////////// - Boitier générique bord arrondis - Generic rounded box - ////////// -module RoundBox($a=Length, $b=Width, $c=Height){// Cube bords arrondis - $fn=Resolution; - translate([0,Filet,Filet]){ - minkowski (){ - cube ([$a-(Length/2),$b-(2*Filet),$c-(2*Filet)], center = false); - rotate([0,90,0]){ - cylinder(r=Filet,h=Length/2, center = false); - } - } - } - }// End of RoundBox Module +module RoundBox($a=Length, $b=Width, $c=Height) {// Cube bords arrondis + $fn=Resolution; + translate([0,Filet,Filet]) { + minkowski () { + cube ([$a-(Length/2),$b-(2*Filet),$c-(2*Filet)], center = false); + rotate([0,90,0]) { + cylinder(r=Filet,h=Length/2, center = false); + } + } + } +} // End of RoundBox Module ////////////////////////////////// - Module Coque/Shell - ////////////////////////////////// -module Coque(){//Coque - Shell +module Coque() {//Coque - Shell Thick = Thick*2; - difference(){ - difference(){//sides decoration - union(){ - difference() {//soustraction de la forme centrale - Substraction Fileted box - - difference(){//soustraction cube median - Median cube slicer - union() {//union - difference(){//Coque + difference() { + difference() {//sides decoration + union() { + difference() {//soustraction de la forme centrale - Substraction Fileted box + difference() {//soustraction cube median - Median cube slicer + union() {//union + difference() {//Coque RoundBox(); - translate([Thick/2,Thick/2,Thick/2]){ - RoundBox($a=Length-Thick, $b=Width-Thick, $c=Height-Thick); - } - }//Fin diff Coque - difference(){//largeur Rails - translate([Thick+m,Thick/2,Thick/2]){// Rails - RoundBox($a=Length-((2*Thick)+(2*m)), $b=Width-Thick, $c=Height-(Thick*2)); - }//fin Rails - translate([((Thick+m/2)*1.55),Thick/2,Thick/2+0.1]){ // +0.1 added to avoid the artefact - RoundBox($a=Length-((Thick*3)+2*m), $b=Width-Thick, $c=Height-Thick); - } - }//Fin largeur Rails - }//Fin union - translate([-Thick,-Thick,Height/2]){// Cube à soustraire - cube ([Length+100, Width+100, Height], center=false); - } - }//fin soustraction cube median - End Median cube slicer - translate([-Thick/2,Thick,Thick]){// Forme de soustraction centrale - RoundBox($a=Length+Thick, $b=Width-Thick*2, $c=Height-Thick); - } + translate([Thick/2,Thick/2,Thick/2]) { + RoundBox($a=Length-Thick, $b=Width-Thick, $c=Height-Thick); } - - - difference(){// wall fixation box legs - union(){ - translate([3*Thick +5,Thick,Height/2]){ - rotate([90,0,0]){ - $fn=6; - cylinder(d=16,Thick/2); - } - } - - translate([Length-((3*Thick)+5),Thick,Height/2]){ - rotate([90,0,0]){ - $fn=6; - cylinder(d=16,Thick/2); - } - } - + }//Fin diff Coque + difference() {//largeur Rails + translate([Thick+m,Thick/2,Thick/2]) {// Rails + RoundBox($a=Length-((2*Thick)+(2*m)), $b=Width-Thick, $c=Height-(Thick*2)); + }//fin Rails + translate([((Thick+m/2)*1.55),Thick/2,Thick/2+0.1]) { // +0.1 added to avoid the artefact + RoundBox($a=Length-((Thick*3)+2*m), $b=Width-Thick, $c=Height-Thick); + } + }//Fin largeur Rails + }//Fin union + translate([-Thick,-Thick,Height/2]) {// Cube à soustraire + cube ([Length+100, Width+100, Height], center=false); } - translate([4,Thick+Filet,Height/2-57]){ - rotate([45,0,0]){ - cube([Length,40,40]); - } - } - translate([0,-(Thick*1.46),Height/2]){ - cube([Length,Thick*2,10]); - } - } //Fin fixation box legs + }//fin soustraction cube median - End Median cube slicer + translate([-Thick/2,Thick,Thick]) {// Forme de soustraction centrale + RoundBox($a=Length+Thick, $b=Width-Thick*2, $c=Height-Thick); + } + } + + difference() {// wall fixation box legs + union() { + translate([3*Thick +5,Thick,Height/2]) { + rotate([90,0,0]) { + $fn=6; + cylinder(d=16,Thick/2); + } + } + translate([Length-((3*Thick)+5),Thick,Height/2]) { + rotate([90,0,0]) { + $fn=6; + cylinder(d=16,Thick/2); + } + } + } + translate([4,Thick+Filet,Height/2-57]) { + rotate([45,0,0]) { + cube([Length,40,40]); + } + } + translate([0,-(Thick*1.46),Height/2]) { + cube([Length,Thick*2,10]); + } + } //Fin fixation box legs } - union(){// outbox sides decorations + union() {// outbox sides decorations - for(i=[0:Thick:Length/4]){ + for(i=[0:Thick:Length/4]) { - // Ventilation holes part code submitted by Ettie - Thanks ;) - translate([10+i,-Dec_Thick+Dec_size,1]){ - cube([Vent_width,Dec_Thick,Height/4]); + // Ventilation holes part code submitted by Ettie - Thanks ;) + translate([10+i,-Dec_Thick+Dec_size,1]) { + cube([Vent_width,Dec_Thick,Height/4]); } - translate([(Length-10) - i,-Dec_Thick+Dec_size,1]){ - cube([Vent_width,Dec_Thick,Height/4]); + translate([(Length-10) - i,-Dec_Thick+Dec_size,1]) { + cube([Vent_width,Dec_Thick,Height/4]); } - translate([(Length-10) - i,Width-Dec_size,1]){ - cube([Vent_width,Dec_Thick,Height/4]); + translate([(Length-10) - i,Width-Dec_size,1]) { + cube([Vent_width,Dec_Thick,Height/4]); } - translate([10+i,Width-Dec_size,1]){ - cube([Vent_width,Dec_Thick,Height/4]); + translate([10+i,Width-Dec_size,1]) { + cube([Vent_width,Dec_Thick,Height/4]); } - }// fin de for - // } - }//fin union decoration - }//fin difference decoration + }// fin de for + }//fin union decoration + }//fin difference decoration - - union(){ //sides holes - $fn=50; - translate([3*Thick+5,20,Height/2+4]){ - rotate([90,0,0]){ + union() { //sides holes + $fn=50; + translate([3*Thick+5,20,Height/2+4]) { + rotate([90,0,0]) { cylinder(d=2,20); - } } - translate([Length-((3*Thick)+5),20,Height/2+4]){ - rotate([90,0,0]){ + } + translate([Length-((3*Thick)+5),20,Height/2+4]) { + rotate([90,0,0]) { cylinder(d=2,20); - } } - translate([3*Thick+5,Width+5,Height/2-4]){ - rotate([90,0,0]){ + } + translate([3*Thick+5,Width+5,Height/2-4]) { + rotate([90,0,0]) { cylinder(d=2,20); - } } - translate([Length-((3*Thick)+5),Width+5,Height/2-4]){ - rotate([90,0,0]){ + } + translate([Length-((3*Thick)+5),Width+5,Height/2-4]) { + rotate([90,0,0]) { cylinder(d=2,20); - } } - }//fin de sides holes + } + }//fin de sides holes - }//fin de difference holes + }//fin de difference holes }// fin coque ////////////////////////////// - Experiment - /////////////////////////////////////////// @@ -235,52 +229,50 @@ module Coque(){//Coque - Shell /////////////////////// - Foot with base filet - ///////////////////////////// -module foot(FootDia,FootHole,FootHeight){ +module foot(FootDia,FootHole,FootHeight) { Filet=2; color(Couleur1) translate([0,0,Filet-1.5]) - difference(){ + difference() { - difference(){ - //translate ([0,0,-Thick]){ - cylinder(d=FootDia+Filet,FootHeight-Thick, $fn=100); - //} - rotate_extrude($fn=100){ - translate([(FootDia+Filet*2)/2,Filet,0]){ - minkowski(){ - square(10); - circle(Filet, $fn=100); - } - } - } - } - cylinder(d=FootHole,FootHeight+1, $fn=100); - } + difference() { + cylinder(d=FootDia+Filet,FootHeight-Thick, $fn=100); + rotate_extrude($fn=100) { + translate([(FootDia+Filet*2)/2,Filet,0]) { + minkowski() { + square(10); + circle(Filet, $fn=100); + } + } + } + } + cylinder(d=FootHole,FootHeight+1, $fn=100); + } }// Fin module foot -module Feet(){ +module Feet() { //////////////////// - PCB only visible in the preview mode - ///////////////////// - translate([3*Thick+2,Thick+5,FootHeight+(Thick/2)-0.5]){ + translate([3*Thick+2,Thick+5,FootHeight+(Thick/2)-0.5]) { - %square ([PCBLength+10,PCBWidth+10]); - translate([PCBLength/2,PCBWidth/2,0.5]){ - color("Olive") - %text("PCB", halign="center", valign="center", font="Arial black"); - } + %square ([PCBLength+10,PCBWidth+10]); + translate([PCBLength/2,PCBWidth/2,0.5]) { + color("Olive") + %text("PCB", halign="center", valign="center", font="Arial black"); + } } // Fin PCB ////////////////////////////// - 4 Feet - ////////////////////////////////////////// - translate([3*Thick+7,Thick+10,Thick/2]){ + translate([3*Thick+7,Thick+10,Thick/2]) { foot(FootDia,FootHole,FootHeight); } - translate([(3*Thick)+PCBLength+7,Thick+10,Thick/2]){ + translate([(3*Thick)+PCBLength+7,Thick+10,Thick/2]) { foot(FootDia,FootHole,FootHeight); } - translate([(3*Thick)+PCBLength+7,(Thick)+PCBWidth+10,Thick/2]){ + translate([(3*Thick)+PCBLength+7,(Thick)+PCBWidth+10,Thick/2]) { foot(FootDia,FootHole,FootHeight); } - translate([3*Thick+7,(Thick)+PCBWidth+10,Thick/2]){ + translate([3*Thick+7,(Thick)+PCBWidth+10,Thick/2]) { foot(FootDia,FootHole,FootHeight); } @@ -294,96 +286,95 @@ module Feet(){ //////////////////////////////////////////////////////////////////////// // <- Panel -> -module Panel(Length,Width,Thick,Filet){ +module Panel(Length,Width,Thick,Filet) { scale([0.5,1,1]) - minkowski(){ - cube([Thick,Width-(Thick*2+Filet*2+m),Height-(Thick*2+Filet*2+m)]); - translate([0,Filet,Filet]) - rotate([0,90,0]) - cylinder(r=Filet,h=Thick, $fn=100); - } + minkowski() { + cube([Thick,Width-(Thick*2+Filet*2+m),Height-(Thick*2+Filet*2+m)]); + translate([0,Filet,Filet]) + rotate([0,90,0]) + cylinder(r=Filet,h=Thick, $fn=100); + } } // <- Circle hole -> // Cx=Cylinder X position | Cy=Cylinder Y position | Cdia= Cylinder dia | Cheight=Cyl height -module CylinderHole(OnOff,Cx,Cy,Cdia){ +module CylinderHole(OnOff,Cx,Cy,Cdia) { if(OnOff==1) translate([Cx,Cy,-1]) - cylinder(d=Cdia,10, $fn=50); + cylinder(d=Cdia,10, $fn=50); } // <- Square hole -> // Sx=Square X position | Sy=Square Y position | Sl= Square Length | Sw=Square Width | Filet = Round corner -module SquareHole(OnOff,Sx,Sy,Sl,Sw,Filet){ +module SquareHole(OnOff,Sx,Sy,Sl,Sw,Filet) { if(OnOff==1) - minkowski(){ + minkowski() { translate([Sx+Filet/2,Sy+Filet/2,-1]) - cube([Sl-Filet,Sw-Filet,10]); - cylinder(d=Filet,h=10, $fn=100); - } + cube([Sl-Filet,Sw-Filet,10]); + cylinder(d=Filet,h=10, $fn=100); + } } // <- Linear text panel -> -module LText(OnOff,Tx,Ty,Font,Size,Content){ +module LText(OnOff,Tx,Ty,Font,Size,Content) { if(OnOff==1) translate([Tx,Ty,Thick+.5]) - linear_extrude(height = 0.5){ - text(Content, size=Size, font=Font); + linear_extrude(height = 0.5) { + text(Content, size=Size, font=Font); } } // <- Circular text panel-> -module CText(OnOff,Tx,Ty,Font,Size,TxtRadius,Angl,Turn,Content){ - if(OnOff==1) { - Angle = -Angl / len(Content); - translate([Tx,Ty,Thick+.5]) - for (i= [0:len(Content)-1] ){ - rotate([0,0,i*Angle+90+Turn]) - translate([0,TxtRadius,0]) { - linear_extrude(height = 0.5){ - text(Content[i], font = Font, size = Size, valign ="baseline", halign ="center"); - } +module CText(OnOff,Tx,Ty,Font,Size,TxtRadius,Angl,Turn,Content) { + if(OnOff==1) { + Angle = -Angl / len(Content); + translate([Tx,Ty,Thick+.5]) + for (i= [0:len(Content)-1] ) { + rotate([0,0,i*Angle+90+Turn]) + translate([0,TxtRadius,0]) { + linear_extrude(height = 0.5) { + text(Content[i], font = Font, size = Size, valign ="baseline", halign ="center"); } - } - } + } + } + } } ////////////////////// <- New module Panel -> ////////////////////// -module FPanL(){ - difference(){ +module FPanL() { + difference() { color(Couleur2) Panel(Length,Width,Thick,Filet); - - rotate([90,0,90]){ - color(Couleur2){ + rotate([90,0,90]) { + color(Couleur2) { // <- Cutting shapes from here -> - SquareHole (1,20,20,15,10,1); //(On/Off, Xpos,Ypos,Length,Width,Filet) - SquareHole (1,40,20,15,10,1); - SquareHole (1,60,20,15,10,1); - CylinderHole(1,27,40,8); //(On/Off, Xpos, Ypos, Diameter) - CylinderHole(1,47,40,8); - CylinderHole(1,67,40,8); - SquareHole (1,20,50,80,30,3); - CylinderHole(1,93,30,10); - SquareHole (1,120,20,30,60,3); + SquareHole (1,20,20,15,10,1); //(On/Off, Xpos,Ypos,Length,Width,Filet) + SquareHole (1,40,20,15,10,1); + SquareHole (1,60,20,15,10,1); + CylinderHole(1,27,40,8); //(On/Off, Xpos, Ypos, Diameter) + CylinderHole(1,47,40,8); + CylinderHole(1,67,40,8); + SquareHole (1,20,50,80,30,3); + CylinderHole(1,93,30,10); + SquareHole (1,120,20,30,60,3); // <- To here -> - } - } + } + } } - color(Couleur1){ + color(Couleur1) { translate ([-.5,0,0]) - rotate([90,0,90]){ + rotate([90,0,90]) { // <- Adding text from here -> - LText(1,20,83,"Arial Black",4,"Digital Screen");//(On/Off, Xpos, Ypos, "Font", Size, "Text") - LText(1,120,83,"Arial Black",4,"Level"); - LText(1,20,11,"Arial Black",6," 1 2 3"); - CText(1,93,29,"Arial Black",4,10,180,0,"1 . 2 . 3 . 4 . 5 . 6");//(On/Off, Xpos, Ypos, "Font", Size, Diameter, Arc(Deg), Starting Angle(Deg),"Text") + LText(1,20,83,"Arial Black",4,"Digital Screen");//(On/Off, Xpos, Ypos, "Font", Size, "Text") + LText(1,120,83,"Arial Black",4,"Level"); + LText(1,20,11,"Arial Black",6," 1 2 3"); + CText(1,93,29,"Arial Black",4,10,180,0,"1 . 2 . 3 . 4 . 5 . 6");//(On/Off, Xpos, Ypos, "Font", Size, Diameter, Arc(Deg), Starting Angle(Deg),"Text") // <- To here -> - } - } + } + } } @@ -391,35 +382,35 @@ module FPanL(){ if(TShell==1) // Coque haut - Top Shell - color( Couleur1,1){ - translate([0,Width,Height+0.2]){ - rotate([0,180,180]){ - Coque(); - } - } +color( Couleur1,1) { + translate([0,Width,Height+0.2]) { + rotate([0,180,180]) { + Coque(); } + } +} if(BShell==1) // Coque bas - Bottom shell - color(Couleur1){ - Coque(); - } +color(Couleur1) { + Coque(); +} // Pied support PCB - PCB feet if (PCBFeet==1) // Feet - translate([PCBPosX,PCBPosY,0]){ - Feet(); - } +translate([PCBPosX,PCBPosY,0]) { + Feet(); +} // Panneau avant - Front panel <<<<<< Text and holes only on this one. //rotate([0,-90,-90]) if(FPanL==1) - translate([Length-(Thick*2+m/2),Thick+m/2,Thick+m/2]) - FPanL(); +translate([Length-(Thick*2+m/2),Thick+m/2,Thick+m/2]) +FPanL(); //Panneau arrière - Back panel if(BPanL==1) - color(Couleur2) - translate([Thick+m/2,Thick+m/2,Thick+m/2]) - Panel(Length,Width,Thick,Filet); +color(Couleur2) +translate([Thick+m/2,Thick+m/2,Thick+m/2]) +Panel(Length,Width,Thick,Filet);