Initial checkin downloaded from thingiverse

This commit is contained in:
Joel Ebel 2018-05-02 22:05:21 -04:00
parent 028dd4be4b
commit d67ec15e6c
12 changed files with 1047 additions and 0 deletions

3
LICENSE.txt Normal file
View File

@ -0,0 +1,3 @@
The Ultimate box maker (https://www.thingiverse.com/thing:1264391) by Heartman is licensed under the Creative Commons - Attribution - Non-Commercial license.
http://creativecommons.org/licenses/by-nc/3.0/

View File

@ -1,2 +1,4 @@
# Ultimate-Box-Maker
Ultimate Box Maker
This is copied from https://www.thingiverse.com/thing:1264391 under the creative commons license with modifications logged here.

213
README.txt Normal file
View File

@ -0,0 +1,213 @@
.: :,
,:::::::: ::` ::: :::
,:::::::: ::` ::: :::
.,,:::,,, ::`.:, ... .. .:, .:. ..`... ..` .. .:, .. :: .::, .:,`
,:: ::::::: ::, ::::::: `:::::::.,:: ::: ::: .:::::: ::::: :::::: .::::::
,:: :::::::: ::, :::::::: ::::::::.,:: ::: ::: :::,:::, ::::: ::::::, ::::::::
,:: ::: ::: ::, ::: :::`::. :::.,:: ::,`::`::: ::: ::: `::,` ::: :::
,:: ::. ::: ::, ::` :::.:: ::.,:: :::::: ::::::::: ::` :::::: :::::::::
,:: ::. ::: ::, ::` :::.:: ::.,:: .::::: ::::::::: ::` :::::::::::::::
,:: ::. ::: ::, ::` ::: ::: `:::.,:: :::: :::` ,,, ::` .:: :::.::. ,,,
,:: ::. ::: ::, ::` ::: ::::::::.,:: :::: :::::::` ::` ::::::: :::::::.
,:: ::. ::: ::, ::` ::: :::::::`,:: ::. :::::` ::` :::::: :::::.
::, ,:: ``
::::::::
::::::
`,,`
https://www.thingiverse.com/thing:1264391
The Ultimate box maker by Heartman is licensed under the Creative Commons - Attribution - Non-Commercial license.
http://creativecommons.org/licenses/by-nc/3.0/
# Summary
<img src="http://heartygfx.free.fr/Thingiverse/Update.jpg">
The file include now the Panel Maker.
Check below in the <strong><font color="Grey">Experimental area</font></strong> to download it.
<br>
My first try with OpenScad,
the box is fully customizable.
I hope you will enjoy with it, and will show us many boxes made with.
If you play with the <strong><font color="Orange">Fillet</font></strong> value you will go from the sharp to the round sides box
If you want a chanfered box, set <strong><font color="Orange">Resolution</font></strong> to 1.
To export each single piece, just set the other elements to <strong><font color="Orange">No</font></strong> value.
The Top and Bottom Shells are the same,
so it's not necessary to export them two times, except if you use the PCB feet option.
Check the animation below to see how to design your own box.
You can change the text shape with any <a href="http://www.google.com/fonts"> font listed here </a>.
Have fun ;)
<img src="http://heartygfx.free.fr/Thingiverse/Stick_New.png">
- Feb 12 2016
Minor bug fixed on unaligned hole when using more than 2mm thickness.
- March 01 2016
Added the decoration/holes options. (Thanks <a href="http://www.thingiverse.com/Ettie">Ettie</a> for your contribution)
- March 09 2016
Added PCB feet support, fixed the shell artefact on export mode.
- March 01 2018
<strong><font color="Red">It Seems, since few month the online customizer doesn't works, some lib missing. it's not under my hands, ask to makerbot/thingiverse staff.
THE solution is,
downloading the newest - Development Snapshot - release of Openscad software
and activate in the Edit>preference>features menu
and check the "Enable customizer" option.</font></strong> <br>link:
<a href="http://www.openscad.org/downloads.html#snapshots">OpenScad-Customizer</a>
<br><b>
<b>Please, read as well.
The PCB feet dimensions are all starting from the foot axis center.
it's not the circuit board size, holes center only(!)
<br><br>
<img src="http://heartygfx.free.fr/Thingiverse/Feet_Box.jpg">
<br><br>
Check below, some animated pictures showing how to use the Ultimate Box maker online.
<br><br>
# Print Settings
Printer Brand: RepRap
Printer: Home made
Rafts: Doesn't Matter
Supports: Doesn't Matter
Resolution: 0.2mm
Infill: 30%
Notes:
I printed some boxes horizontally or vertically, both without support.
# How I Designed This
## <strong><font color="Orange">Overview & Background:</font></strong>
</br>
The technology called, Stereolithography exists since the 80s.
It allow you to design anything with a monomer polymerization, by deposition of successive layers.
It's at the origin of our FDM printers, developed it's been 20 years.
The STL file format was developed for stereolithography.
Why are we fascinated by this technology?
Because we are witnesses and participants of an industrial revolution.
A total change in the economic paradigm that has developed during the 19 and 20 th century.
We become craftsmen, designers, and take in hand our evolution.
Why am I talking about that?
I think it's a good introduction to show you a perfect demonstration of what we expect from this technology.
Design and answer to their own needs.
The proposed application lets you quickly create a case whose use will be defined by the user, the shape and dimensions will be those you have identified and not that the industry proposes / imposes.
## <strong><font color="Orange">Objective:</font></strong>
</br>
The student will have two objectives with a project like this one:
- Create an application that will be used for future projects , and definitively avoid buying boxes not always appropriate to the needs .
- Learn programming by a quasi - recreational way , since entirely graphic and visual .
- Many other knowledge can be transmitted based on the desire of the teacher to deepen a particular aspect of the design .
## <strong><font color="Orange">Audience</font></strong>
</br>
I'm not familiar with the foreign school grades,
in France, it's around 10/12 years old they begin to learn programming.
So, it can be a nice starting way and support project to learn visually to code.
The presented project was made in two times,
I did the box in the first time,
then I dug more, for the Panel Maker.
Like I said in the begining, I was, myself, learning how OpenScad works,
that will be the same for the students, learning and creating something more complex lesson after lesson. A perfect way to evaluate the level reached.
As an assessment
## <strong><font color="Orange">Skill learned</font></strong>
</br>
- Programmation
- 3D design
- 3D printing
## <strong><font color="Orange">Duration:</font></strong>
</br>
A project like this can be the string to follow throughout all the school year.
# Show me how it works...
</br>
Here is a small demonstration how to use the Customizer to have separate pieces box.
The top and bottom shells are the same, so it's not necessary to make 2 differents stl files.
If the front Panel is without text, then the back and front panels are the same, so again,
just export one.
<br><br><br>
<img src="http://heartygfx.free.fr/BlogImg/Thingiverse/Ultimate_Box.gif">
<font size="1"><i>right click on the animated pic, and choose "view image" to watch it in full size</i></font>
<br><br>
## <strong><font color="Orange">PCB feet</font></strong>
<br>
<img src="http://heartygfx.free.fr/Thingiverse/Feet_Box.gif">
<font size="1">right click on the pic, and choose "view image" to watch it in full size</font>
<br><br>
Enjoy guys, and show us your printed boxes... ;)
# Experimental Area
## <strong><font color="Orange">With Panel Maker</font></strong>
This release include a panel maker.
fully working, just for the moment, I didn't find the good way to present it within the online customizer.
Not easy to make something easy to use...
Anyway, it stay easy to use, through Openscad. with few option, you will be able to create the panel that you need without limitation, or almost...
<br>
<img src="http://heartygfx.free.fr/Thingiverse/Experimental_Box.jpg">
<br><br><br>
<img src="http://heartygfx.free.fr/Thingiverse/Rendu 0002.png">
<br><br>
To build your own panel, you have 4 tools:
   <font size ="4">Cutting shapes</font>
* Square
* Circle
   <font size ="4">Text label</font>
* Linear text
* Circular text
SquareHole (1,20,20,15,10,1); <font size ="2" color="Orange"> //(On/Off, Xpos,Ypos,Length,Width,Fillet)</font>
CylinderHole(1,27,40,8); <font size ="2" color="Orange"> //(On/Off, Xpos, Ypos, Diameter)</font>
LText(1,20,83,"Arial Black",4,"Digital Screen"); <font size ="2" color="Orange"> //(On/Off, Xpos, Ypos, "Font", Size, "Text")</font>
CText(1,93,29,"Arial",4,10,180,0,"ABCD"); <font size ="2" color="Orange">//(On/Off, Xpos, Ypos, "Font", Size, Diameter, Arc(Deg), Starting Angle(Deg),"Text")</font>
<br><br>
<font size="1"><i>right click on the animated pic, and choose "view image" to watch it in full size</i></font>
<img src="http://heartygfx.free.fr/Thingiverse/Box_Panel_Maker.gif">
<br>
You can download the animation and read it with the excellent <a href="https://sourceforge.net/projects/gifviewer/">Gifviewer open source freeware</a>, to pause the animation when needed.
<br><br>
Here you can download <a href="http://heartygfx.free.fr/Thingiverse/U_Box_V104_Test_Cleaned.scad">The Ultimate BOX & PANEL maker</a>.
I hope you will enjoy with.
<br><br><br>

41
attribution_card.html Normal file
View File

@ -0,0 +1,41 @@
<!-- from http://www.thingiverse.com/thing:8174 by whosawhatsis, used with permission -->
<style type="text/css">
#tagback {padding: 50px;background: white;}
.tag {position: relative;border: 1px solid #eeeeee;width: 450px;height: 150px;margin: 0px;padding: 10px 10px 10px 120px;}
.tag .qrcode-sidebar {float: right;margin: 0px;padding: 0px;}
.tag a {color: black;text-decoration: none;}
.tag h1 {font: bold 18px Arial,sans-serif;margin: 0px;padding: 0px;}
.tag h2 {font: 14px Arial,sans-serif;margin: 0px;padding: 0px;}
.tag h3 {font: 12px Courier,monospace;margin: 0px;padding: 0px;}
.tag h4 {font: 9px Arial,sans-serif;position: absolute;bottom: 0px;left: 0px;margin: 0px 150px 0px 0px;padding: 0px;}
.tag h4 div {float: left;margin: 0px 5px 15px 125px;height: 40px;}
.tag h4 div img {height: 40px;}
</style>
<div id="tagback"><div class="tag">
<div class="qrcode-sidebar">
<img src="//chart.apis.google.com/chart?chs=150x150&cht=qr&chl=thingiverse.com/thing:1264391&choe=UTF-8&chld=Q|1">
</div>
<h1>The Ultimate box maker by Heartman</h1>
<h2>Published on January 13, 2016</h2>
<h3>www.thingiverse.com/thing:1264391</h3>
<h4>
<div class="row-fluid cc-licenses">
<span class="span4">
<img src="//www.thingiverse.com/img/cc/chooser_cc.png" />
</span>
<span class="span4">
<img src="//www.thingiverse.com/img/cc/chooser_by.png" />
</span>
<span class="span4">
<img src="//www.thingiverse.com/img/cc/chooser_nc.png" />
</span>
</div>
Creative Commons - Attribution - Non-Commercial<br /></h4>
</div></div>
<script>
window.onload = function(){
document.getElementById('tagback').appendChild(document.getElementById('tagback').firstChild.cloneNode(true));
};
</script>

363
files/U_Box_V103.scad Normal file
View File

@ -0,0 +1,363 @@
/*//////////////////////////////////////////////////////////////////
- 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 = 110;
// - Largeur - Width
Width = 90;
// - Hauteur - Height
Height = 30;
// - Epaisseur - Wall thickness
Thick = 2;//[2:5]
/* [Box options] */
// Pieds PCB - PCB feet (x4)
PCBFeet = 0;// [0:No, 1:Yes]
// - Decorations to ventilation holes
Vent = 0;// [0:No, 1:Yes]
// - Decoration-Holes width (in mm)
Vent_width = 1.5;
// - Text you want
txt = "HeartyGFX";
// - 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 = 7;
// - Coin bas gauche - Low left corner Y position
PCBPosY = 6;
// - Longueur PCB - PCB Length
PCBLength = 70;
// - Largeur PCB - PCB Width
PCBWidth = 50;
// - 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();
}

View File

@ -0,0 +1,425 @@
/*//////////////////////////////////////////////////////////////////
- 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 = 160;
// - Largeur - Width
Width = 170;
// - Hauteur - Height
Height = 100;
// - Epaisseur - Wall thickness
Thick = 2;//[2:5]
/* [Box options] */
// - 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;
// 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;
/* [PCB_Feet] */
//All dimensions are from the center foot axis
// - Coin bas gauche - Low left corner X position
PCBPosX = 7;
// - Coin bas gauche - Low left corner Y position
PCBPosY = 6;
// - Longueur PCB - PCB Length
PCBLength = 70;
// - Largeur PCB - PCB Width
PCBWidth = 50;
// - 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 = 0;// [0:No, 1:Yes]
//Coque bas- Bottom shell
BShell = 1;// [0:No, 1:Yes]
//Panneau avant - Front panel
FPanL = 1;// [0:No, 1:Yes]
//Panneau arrière - Back panel
BPanL = 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;
/////////// - 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 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(){// 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
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 - ///////////////////////////////////////////
/////////////////////// - Foot with base filet - /////////////////////////////
module foot(FootDia,FootHole,FootHeight){
Filet=2;
color(Couleur1)
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 ([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]){
foot(FootDia,FootHole,FootHeight);
}
translate([(3*Thick)+PCBLength+7,Thick+10,Thick/2]){
foot(FootDia,FootHole,FootHeight);
}
translate([(3*Thick)+PCBLength+7,(Thick)+PCBWidth+10,Thick/2]){
foot(FootDia,FootHole,FootHeight);
}
translate([3*Thick+7,(Thick)+PCBWidth+10,Thick/2]){
foot(FootDia,FootHole,FootHeight);
}
} // Fin du module Feet
////////////////////////////////////////////////////////////////////////
////////////////////// <- Holes Panel Manager -> ///////////////////////
////////////////////////////////////////////////////////////////////////
// <- Panel ->
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);
}
}
// <- Circle hole ->
// Cx=Cylinder X position | Cy=Cylinder Y position | Cdia= Cylinder dia | Cheight=Cyl height
module CylinderHole(OnOff,Cx,Cy,Cdia){
if(OnOff==1)
translate([Cx,Cy,-1])
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){
if(OnOff==1)
minkowski(){
translate([Sx+Filet/2,Sy+Filet/2,-1])
cube([Sl-Filet,Sw-Filet,10]);
cylinder(d=Filet,h=10, $fn=100);
}
}
// <- Linear text panel ->
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);
}
}
// <- 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");
}
}
}
}
}
////////////////////// <- New module Panel -> //////////////////////
module FPanL(){
difference(){
color(Couleur2)
Panel(Length,Width,Thick,Filet);
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);
// <- To here ->
}
}
}
color(Couleur1){
translate ([-.5,0,0])
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")
// <- To here ->
}
}
}
/////////////////////////// <- Main part -> /////////////////////////
if(TShell==1)
// Coque haut - Top Shell
color( Couleur1,1){
translate([0,Width,Height+0.2]){
rotate([0,180,180]){
Coque();
}
}
}
if(BShell==1)
// Coque bas - Bottom shell
color(Couleur1){
Coque();
}
// Pied support PCB - PCB feet
if (PCBFeet==1)
// 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();
//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);

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB