diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..634b8be --- /dev/null +++ b/LICENSE.txt @@ -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/ + diff --git a/README.md b/README.md index 30b6297..f0a117e 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..1e3301e --- /dev/null +++ b/README.txt @@ -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 + + +The file include now the Panel Maker. +Check below in the Experimental area to download it. +
+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 Fillet value you will go from the sharp to the round sides box +If you want a chanfered box, set Resolution to 1. + +To export each single piece, just set the other elements to No 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 font listed here . + +Have fun ;) + + + +- Feb 12 2016 +Minor bug fixed on unaligned hole when using more than 2mm thickness. +- March 01 2016 +Added the decoration/holes options. (Thanks Ettie for your contribution) +- March 09 2016 +Added PCB feet support, fixed the shell artefact on export mode. + +- March 01 2018 + 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.
link: +OpenScad-Customizer + +
+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(!) +

+ +

+ +Check below, some animated pictures showing how to use the Ultimate Box maker online. +

+ +# 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 + +## Overview & Background: + +
+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. + +## Objective: + +
+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 . + +## Audience + +
+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 + + + +## Skill learned + +
+- Programmation +- 3D design +- 3D printing + +## Duration: + +
+A project like this can be the string to follow throughout all the school year. + +# Show me how it works... + +
+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. +


+ +right click on the animated pic, and choose "view image" to watch it in full size +

+ + +## PCB feet + +
+ +right click on the pic, and choose "view image" to watch it in full size +

+ + +Enjoy guys, and show us your printed boxes... ;) + +# Experimental Area + +## With Panel Maker + +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... +
+ +


+ +

+ +To build your own panel, you have 4 tools: + +   Cutting shapes +* Square +* Circle + +   Text label +* Linear text +* Circular text + +SquareHole (1,20,20,15,10,1); //(On/Off, Xpos,Ypos,Length,Width,Fillet) +CylinderHole(1,27,40,8); //(On/Off, Xpos, Ypos, Diameter) + +LText(1,20,83,"Arial Black",4,"Digital Screen"); //(On/Off, Xpos, Ypos, "Font", Size, "Text") +CText(1,93,29,"Arial",4,10,180,0,"ABCD"); //(On/Off, Xpos, Ypos, "Font", Size, Diameter, Arc(Deg), Starting Angle(Deg),"Text") +

+ +right click on the animated pic, and choose "view image" to watch it in full size + +
+You can download the animation and read it with the excellent Gifviewer open source freeware, to pause the animation when needed. +

+Here you can download The Ultimate BOX & PANEL maker. +I hope you will enjoy with. +


\ No newline at end of file diff --git a/attribution_card.html b/attribution_card.html new file mode 100644 index 0000000..6332ad5 --- /dev/null +++ b/attribution_card.html @@ -0,0 +1,41 @@ + + + +
+
+ +
+

The Ultimate box maker by Heartman

+

Published on January 13, 2016

+

www.thingiverse.com/thing:1264391

+

+
+ + + + + + + + + +
+ Creative Commons - Attribution - Non-Commercial

+
+ + diff --git a/files/U_Box_V103.scad b/files/U_Box_V103.scad new file mode 100644 index 0000000..0543484 --- /dev/null +++ b/files/U_Box_V103.scad @@ -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(); + } \ No newline at end of file diff --git a/files/U_Box_V104_Test_Cleaned.scad b/files/U_Box_V104_Test_Cleaned.scad new file mode 100644 index 0000000..c0be8f5 --- /dev/null +++ b/files/U_Box_V104_Test_Cleaned.scad @@ -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); \ No newline at end of file diff --git a/images/5c2528d7dc69dc743380f6c7ddb887d5_preview_featured.jpg b/images/5c2528d7dc69dc743380f6c7ddb887d5_preview_featured.jpg new file mode 100644 index 0000000..ff8e481 Binary files /dev/null and b/images/5c2528d7dc69dc743380f6c7ddb887d5_preview_featured.jpg differ diff --git a/images/74d1fa52020ccdc66438833ef1dfb658_preview_featured.jpg b/images/74d1fa52020ccdc66438833ef1dfb658_preview_featured.jpg new file mode 100644 index 0000000..279a51f Binary files /dev/null and b/images/74d1fa52020ccdc66438833ef1dfb658_preview_featured.jpg differ diff --git a/images/7efb17c56cb85ef8a36d71741ac642c0_preview_featured.jpg b/images/7efb17c56cb85ef8a36d71741ac642c0_preview_featured.jpg new file mode 100644 index 0000000..696efba Binary files /dev/null and b/images/7efb17c56cb85ef8a36d71741ac642c0_preview_featured.jpg differ diff --git a/images/9b60c601c6d0bcd0837e3c9c51fbf55f_preview_featured.jpg b/images/9b60c601c6d0bcd0837e3c9c51fbf55f_preview_featured.jpg new file mode 100644 index 0000000..b857199 Binary files /dev/null and b/images/9b60c601c6d0bcd0837e3c9c51fbf55f_preview_featured.jpg differ diff --git a/images/bd4fbbd9aa4da913eb2d5eac3920107e_preview_featured.jpg b/images/bd4fbbd9aa4da913eb2d5eac3920107e_preview_featured.jpg new file mode 100644 index 0000000..5d9548f Binary files /dev/null and b/images/bd4fbbd9aa4da913eb2d5eac3920107e_preview_featured.jpg differ diff --git a/images/dfdf5ceb28a5a7c63daad8bfc72fc554_preview_featured.jpg b/images/dfdf5ceb28a5a7c63daad8bfc72fc554_preview_featured.jpg new file mode 100644 index 0000000..ebfd0c5 Binary files /dev/null and b/images/dfdf5ceb28a5a7c63daad8bfc72fc554_preview_featured.jpg differ