
1 changed files with 0 additions and 363 deletions
@ -1,363 +0,0 @@
|
||||
|
||||
/*////////////////////////////////////////////////////////////////// |
||||
- FB Aka Heartman/Hearty 2016 - |
||||
- http://heartygfx.blogspot.com - |
||||
- OpenScad Parametric Box - |
||||
- CC BY-NC 3.0 License - |
||||
//////////////////////////////////////////////////////////////////// |
||||
12/02/2016 - Fixed minor bug |
||||
28/02/2016 - Added holes ventilation option |
||||
09/03/2016 - Added PCB feet support, fixed the shell artefact on export mode. |
||||
|
||||
*/////////////////////////// - Info - ////////////////////////////// |
||||
|
||||
// All coordinates are starting as integrated circuit pins. |
||||
// From the top view : |
||||
|
||||
// CoordD <--- CoordC |
||||
// ^ |
||||
// ^ |
||||
// ^ |
||||
// CoordA ---> CoordB |
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////// |
||||
|
||||
|
||||
////////// - Paramètres de la boite - Box parameters - ///////////// |
||||
|
||||
/* [Box dimensions] */ |
||||
// - Longueur - Length |
||||
Length = 120; |
||||
// - Largeur - Width |
||||
Width = 100; |
||||
// - Hauteur - Height |
||||
Height = 30; |
||||
// - Epaisseur - Wall thickness |
||||
Thick = 2;//[2:5] |
||||
|
||||
/* [Box options] */ |
||||
// Pieds PCB - PCB feet (x4) |
||||
PCBFeet = 1;// [0:No, 1:Yes] |
||||
// - Decorations to ventilation holes |
||||
Vent = 1;// [0:No, 1:Yes] |
||||
// - Decoration-Holes width (in mm) |
||||
Vent_width = 1.5; |
||||
// - Text you want |
||||
txt = "Star Tracker"; |
||||
// - Font size |
||||
TxtSize = 3; |
||||
// - Font |
||||
Police ="Arial Black"; |
||||
// - Diamètre Coin arrondi - Filet diameter |
||||
Filet = 2;//[0.1:12] |
||||
// - lissage de l'arrondi - Filet smoothness |
||||
Resolution = 50;//[1:100] |
||||
// - Tolérance - Tolerance (Panel/rails gap) |
||||
m = 0.9; |
||||
|
||||
/* [PCB_Feet--the_board_will_not_be_exported) ] */ |
||||
//All dimensions are from the center foot axis |
||||
// - Coin bas gauche - Low left corner X position |
||||
PCBPosX = 6; |
||||
// - Coin bas gauche - Low left corner Y position |
||||
PCBPosY = 6; |
||||
// - Longueur PCB - PCB Length |
||||
PCBLength = 91.44; |
||||
// - Largeur PCB - PCB Width |
||||
PCBWidth = 71.12; |
||||
// - Heuteur pied - Feet height |
||||
FootHeight = 10; |
||||
// - Diamètre pied - Foot diameter |
||||
FootDia = 8; |
||||
// - Diamètre trou - Hole diameter |
||||
FootHole = 3; |
||||
|
||||
|
||||
/* [STL element to export] */ |
||||
//Coque haut - Top shell |
||||
TShell = 1;// [0:No, 1:Yes] |
||||
//Coque bas- Bottom shell |
||||
BShell = 1;// [0:No, 1:Yes] |
||||
//Panneau arrière - Back panel |
||||
BPanel = 1;// [0:No, 1:Yes] |
||||
//Panneau avant - Front panel |
||||
FPanel = 1;// [0:No, 1:Yes] |
||||
//Texte façade - Front text |
||||
Text = 1;// [0:No, 1:Yes] |
||||
|
||||
|
||||
|
||||
/* [Hidden] */ |
||||
// - Couleur coque - Shell color |
||||
Couleur1 = "Orange"; |
||||
// - Couleur panneaux - Panels color |
||||
Couleur2 = "OrangeRed"; |
||||
// Thick X 2 - making decorations thicker if it is a vent to make sure they go through shell |
||||
Dec_Thick = Vent ? Thick*2 : Thick; |
||||
// - Depth decoration |
||||
Dec_size = Vent ? Thick*2 : 0.8; |
||||
|
||||
//////////////////// Oversize PCB limitation -Actually disabled - //////////////////// |
||||
//PCBL= PCBLength+PCBPosX>Length-(Thick*2+7) ? Length-(Thick*3+20+PCBPosX) : PCBLength; |
||||
//PCBW= PCBWidth+PCBPosY>Width-(Thick*2+10) ? Width-(Thick*2+12+PCBPosY) : PCBWidth; |
||||
PCBL=PCBLength; |
||||
PCBW=PCBWidth; |
||||
//echo (" PCBWidth = ",PCBW); |
||||
|
||||
|
||||
|
||||
/////////// - Boitier générique bord arrondis - Generic Fileted 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 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 |
||||
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); |
||||
} |
||||
} |
||||
|
||||
|
||||
difference(){// 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 |
||||
//if(Thick==1){Thick=2; |
||||
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]); |
||||
} |
||||
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([10+i,Width-Dec_size,1]){ |
||||
cube([Vent_width,Dec_Thick,Height/4]); |
||||
} |
||||
|
||||
|
||||
}// 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]){ |
||||
cylinder(d=2,20); |
||||
} |
||||
} |
||||
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]){ |
||||
cylinder(d=2,20); |
||||
} |
||||
} |
||||
translate([Length-((3*Thick)+5),Width+5,Height/2-4]){ |
||||
rotate([90,0,0]){ |
||||
cylinder(d=2,20); |
||||
} |
||||
} |
||||
}//fin de sides holes |
||||
|
||||
}//fin de difference holes |
||||
}// fin coque |
||||
|
||||
////////////////////////////// - Experiment - /////////////////////////////////////////// |
||||
|
||||
|
||||
///////////////////////////////// - Module Front/Back Panels - ////////////////////////// |
||||
|
||||
module Panels(){//Panels |
||||
color(Couleur2){ |
||||
translate([Thick+m,m/2,m/2]){ |
||||
difference(){ |
||||
translate([0,Thick,Thick]){ |
||||
RoundBox(Length,Width-((Thick*2)+m),Height-((Thick*2)+m));} |
||||
translate([Thick,-5,0]){ |
||||
cube([Length,Width+10,Height]);} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
/////////////////////// - Foot with base filet - ///////////////////////////// |
||||
module foot(FootDia,FootHole,FootHeight){ |
||||
Filet=2; |
||||
color("Orange") |
||||
translate([0,0,Filet-1.5]) |
||||
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); |
||||
} |
||||
}// Fin module foot |
||||
|
||||
module Feet(){ |
||||
//////////////////// - PCB only visible in the preview mode - ///////////////////// |
||||
translate([3*Thick+2,Thick+5,FootHeight+(Thick/2)-0.5]){ |
||||
|
||||
%square ([PCBL+10,PCBW+10]); |
||||
translate([PCBL/2,PCBW/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]){ |
||||
foot(FootDia,FootHole,FootHeight); |
||||
} |
||||
translate([(3*Thick)+PCBL+7,Thick+10,Thick/2]){ |
||||
foot(FootDia,FootHole,FootHeight); |
||||
} |
||||
translate([(3*Thick)+PCBL+7,(Thick)+PCBW+10,Thick/2]){ |
||||
foot(FootDia,FootHole,FootHeight); |
||||
} |
||||
translate([3*Thick+7,(Thick)+PCBW+10,Thick/2]){ |
||||
foot(FootDia,FootHole,FootHeight); |
||||
} |
||||
|
||||
} // Fin du module Feet |
||||
|
||||
|
||||
///////////////////////////////////// - Main - /////////////////////////////////////// |
||||
|
||||
if(BPanel==1) |
||||
//Back Panel |
||||
translate ([-m/2,0,0]){ |
||||
Panels(); |
||||
} |
||||
|
||||
if(FPanel==1) |
||||
//Front Panel |
||||
rotate([0,0,180]){ |
||||
translate([-Length-m/2,-Width,0]){ |
||||
Panels(); |
||||
} |
||||
} |
||||
|
||||
if(Text==1) |
||||
// Front text |
||||
color(Couleur1){ |
||||
translate([Length-(Thick),Thick*4,(Height-(Thick*4+(TxtSize/2)))]){// x,y,z |
||||
rotate([90,0,90]){ |
||||
linear_extrude(height = 0.25){ |
||||
text(txt, font = Police, size = TxtSize, valign ="center", halign ="left"); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
if(BShell==1) |
||||
// Coque bas - Bottom shell |
||||
color(Couleur1){ |
||||
Coque(); |
||||
} |
||||
|
||||
|
||||
if(TShell==1) |
||||
// Coque haut - Top Shell |
||||
color( Couleur1,1){ |
||||
translate([0,Width,Height+0.2]){ |
||||
rotate([0,180,180]){ |
||||
Coque(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
if (PCBFeet==1) |
||||
// Feet |
||||
translate([PCBPosX,PCBPosY,0]){ |
||||
Feet(); |
||||
} |
Loading…
Reference in new issue