Catégories
Liens
De passage au 8Fablab de Crest ou nos acolytes de BrutPop sont en vadrouille…
Essai de boite laser en CP pour les capteurs de la brutbox avec de jolies arrondies.
Le fichier .ps est paramétrique, en l'ouvrant avec un éditeur de texte on peut changer la taille de la boite et des arrondis…
%!PS % % flexbox.ps % A 3 piece flexible box that can be laser cut from semi-rigid materials % % Edited my Tom Speller (@Seithing) % % V1.3 by Tom % change log and updates on thingiverse - http://www.thingiverse.com/thing:619365 % % Originaly % by Brian Dahlem - http://www.thingiverse.com/thing:17240 % based on the simple box - type 2 by FdS - http://www.thingiverse.com/thing:14018 % using the sninge technique from snijlab - http://www.thingiverse.com/thing:12707 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % The following lines define basic information about your box, change as necessary % Define basic measurement units -- don't change put the desiered unit in the unit var below /inch 72 def /cm 28.3465 def /mm 2.83465 def /unit mm def %selects what unit is used in the following vars + the text (selection about) % Define box parameters -- This is the size of the box you want /boxlength 60 unit mul def % long dimension of flat side of the box /boxwidth 60 unit mul def % dimension across the hinge /boxheight 60 unit mul def % short dimension across flat side of the box /cornerradius 15 unit mul def % radius of the hinge. Suggested min 15mm /materialthickness 3 unit mul def % thickness of the material which will become the box walls /tabwidth materialthickness 2 mul def % suggested width of tabs in the joints /fingerTab 0 unit mul def %finger hole for opening box, set to 0 for none. 12 is a good size for a finger /fingerinset 5 unit mul def %offset to move the center of the circle. 5 is a good offset for a finger % Define the laser cutter page size A3 420x290mm /pagewidth 420 unit mul def /pageheight 290 unit mul def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Here down is the code that makes your pretty little box, change only if you dare. % % Warning... it gets ugly ahead % setup the page << /PageSize [pagewidth pageheight] >> setpagedevice % Set the pagesize, only sometimes works? Good enough for gov't /border materialthickness def % Move away from the edge of the material, for that nice scorched edges goodness 0 pageheight translate 1 -1 scale border border translate % 0 - 1 for colour % outside cut colour /outR 0 def /outG 0 def /outB 0 def % hinge cut colour due to the way my laser software works it tries to cut the outside before the inside. % making it different colours mean I can set the cut manauly /hingeR 1 def /hingeG 0 def /hingeB 0 def 0.01 setlinewidth % Setup to make vector cuts with hairline thickness (just enough to see) outR outG outB setrgbcolor % Use black for cutouts, because that makes the most sense % draw a rectangle /box { % Draw a box with a given width and height from the current location /height exch def /width exch def 0 height rlineto width 0 rlineto 0 height neg rlineto width neg 0 rlineto } def % Some basics... /min { 2 copy gt { exch } if pop } bind def /max { 2 copy lt { exch } if pop } bind def /pi 3.14159 def % Define some features of the box /innerradius cornerradius materialthickness sub def % The radius of the corners minus the thickness of the material /tablen materialthickness def % How tall to make tabs /toplen boxlength cornerradius 2 mul sub def % How long is the top / bottom side /frontheight boxheight tablen 2 mul sub def % How tall is the front face, minus tabs /frontwidth boxlength tablen 2 mul sub def % How wide is the front face, minus tabs /sideheight boxheight cornerradius 2 mul sub def % How tall are the sides, not counting hinges /hingelen innerradius 2 div pi mul def % How long is a flattened out hinge (the circumference of 1/4 inner radius) /breaklen materialthickness 2 div def % How long should breaks in the hinge lines be /numhingelines boxwidth 96 div ceiling def % How many segments should there be in a hinge line /winglen toplen 2 div hingelen 2 mul sideheight add add def % How long a wing of the drawing is when drawn out flat %for the tabs at the base (between the wings). /numtabsbase toplen tabwidth div 2 div floor 2 mul 1 add def % How many tabs (odd number) connect the bottom to the front /tabsizebase toplen numtabsbase div def % How big are those tabs %finger tab maths %see if fingerTab is greater then 0. if so add hole fingerTab 0 gt { /x fingerTab fingerinset sub def %work out how far form the edge of the circle the sagitta is /y 2 2 fingerTab mul x mul x 2 exp sub sqrt mul def % the maths that calulates the offset, some how works. /changeangle fingerinset y 2 div atan def %angle to +/- from arc to move the hole /lineloss fingerTab y 2 div sub def % add a little more to the line to compensate for what was lost in moving the circle } { %if finger tab set to 0 set all to 0. don't add hole /x 0 def /y 0 def /changeangle 0 def /lineloss 0 def /fingerinset 0 def } ifelse % Draw 1/2 of the top, one "flap" of the lid /drawflap { newpath toplen 2 div 0 moveto % Start at the end of the flap closest to the body tabwidth 2 mul 0 lineto % draw the edge up to the tab 0 tablen rlineto % cut in a tab tabwidth neg 0 rlineto 0 tablen neg rlineto % and back out to lock it tabwidth neg 0 rlineto fingerinset neg boxwidth 2 div fingerTab 270 changeangle add 90 changeangle sub arc % draw arc for finger hole 0 boxwidth 2 div fingerTab sub lineloss add rlineto % draw the end of the top flap tabwidth 0 rlineto % and draw the locking tabs 0 tablen neg rlineto tabwidth 0 rlineto 0 tablen rlineto toplen 2 div boxwidth lineto % finish by returning to the body end of the flap stroke } def % Draw a hinge line going all the way across the hinge /longline { /linelen boxwidth numhingelines breaklen 2 mul sub numhingelines div def % How long is a segment in a long line? % Draw 1/2 a line to start 0 linelen 2 div rlineto % Fill in the space with full lines 2 1 numhingelines { 0 breaklen 2 mul rmoveto 0 linelen rlineto } for % Draw the last half line to even it out 0 breaklen 2 mul rmoveto 0 linelen 2 div rlineto } def % Draw a hinge line with end caps /shortline { /linelen boxwidth numhingelines 1 sub breaklen 2 mul mul breaklen 2 mul add sub numhingelines div def % Skip a break then fill the space with evenly spaced lines 0 breaklen neg rmoveto 1 1 numhingelines { 0 linelen neg rlineto 0 breaklen 2 mul neg rmoveto } for } def % Draw a flattened out hinge - alternating short and long lines /drawhinge { /minwidth materialthickness def % the minimum width for a hinge section (2 lines) /numbars hingelen minwidth div floor def % the number of hinge sections per hinge /barwidth hingelen numbars div def % the actual width of a hinge section hingeR hingeG hingeB setrgbcolor % Set colour to hinge colour newpath 0 boxwidth moveto % start at the bottom of the hinge and draw a short line shortline 1 1 numbars { % for each of the sections in the hinge /i exch def i barwidth mul barwidth 2 div sub 0 moveto % move to the middle of the section and draw longline % a long line to split the section in half i barwidth mul boxwidth moveto % move to the end of the section and shortline % draw a shortline to connect to the next section } for stroke outR outG outB setrgbcolor % back to black for the outside lines newpath 0 0 moveto % draw the sides of the hinge hingelen 0 rlineto 0 boxwidth rmoveto hingelen neg 0 rlineto stroke } def %draw tabs for bottom of the sides of box (ones between the wings) /drawbasetabs { newpath 0 0 moveto tabsizebase 0 rlineto % draw tabs and slots along the bottom line of the front 1 1 numtabsbase 2 div { 0 tablen rlineto tabsizebase 0 rlineto 0 tablen neg rlineto tabsizebase 0 rlineto } for stroke } def % Draw an edge of the box, using tabs to connect to the front/back if the side is large enough /drawendedge { /numtabs sideheight tabwidth div 2 div ceiling 2 mul 1 add def % how many tabs to connect to front /tabsize sideheight numtabs div def % how big should the tabs be newpath 0 0 moveto % Move to the top of the side tabsize 0 rlineto % draw the first tab 1 1 numtabs 2 div { % if there are more tabs 0 tablen rlineto % draw the tab tabsize 0 rlineto 0 tablen neg rlineto % then return to the side tabsize 0 rlineto % for the slot } for stroke } def % Draw an end of the box horizontally /drawend { gsave drawendedge % Only draw the 2 edges of the end not connected to the hinges sideheight boxwidth translate -1 -1 scale drawendedge grestore } def % Draw a "wing" of the box, consisting of 1/2 the top, 2 hinges and a side /drawwing { % Draw the two hinges before drawing the outline of the wing - use this order for laser cutting betterment gsave toplen 2 div 0 translate % Skip over the flap drawhinge % Draw a hinge hingelen sideheight add 0 translate % Skip over the end/side drawhinge % Draw a hinge grestore gsave % Go back to the beginning of the wing drawflap % Draw the top flap toplen 2 div hingelen add 0 translate % skip over the hinge gsave %draw only the bottom edge as the box sides do the other side sideheight boxwidth translate -1 -1 scale drawendedge grestore grestore } def % Draw the front/back side of the box /drawfront { gsave tablen tablen translate % Connect the front side to the bottom with tabs newpath innerradius frontheight moveto % Start at the bottom, inside of the curved corner tabsizebase 0 rlineto % draw tabs and slots along the bottom line of the front 1 1 numtabsbase 2 div { 0 tablen rlineto tabsizebase 0 rlineto 0 tablen neg rlineto tabsizebase 0 rlineto } for frontwidth innerradius sub frontheight moveto % draw the corner at the bottom right of the front frontwidth innerradius sub frontheight innerradius sub innerradius 90 0 arcn stroke % draw a corner radius then the side connecting one end to the front gsave frontwidth frontheight innerradius sub translate % move to the bottom of the right edge 270 rotate drawendedge % draw the edge connecting the front and an end grestore % draw another corner radius, the side connecting the top flaps to the front, and another corner newpath frontwidth innerradius sub innerradius innerradius 0 270 arcn % draw the top right corner toplen 2 div neg tabwidth 2 mul add 0 rlineto % draw the right half of the top 0 tablen neg rlineto % stick out a tab to grab the top flap tabwidth neg 0 rlineto 0 tablen rlineto % Make a slot to hold both flaps' tabs tabwidth 2 mul neg 0 rlineto 0 tablen neg rlineto % make a tab to grab the other flap tabwidth neg 0 rlineto 0 tablen rlineto innerradius 0 lineto % then finish off the top of this side innerradius innerradius innerradius 270 180 arcn % with a top left corner stroke % draw the last side of the front, connecting the front to another end gsave 0 innerradius translate % below the corner 90 rotate drawendedge % draw the edge connecting with the left end grestore % finish off the front with the last corner radius newpath innerradius frontheight innerradius sub innerradius 180 90 arcn % draw the bottom left corner to finish this side stroke grestore } def % Go ahead and actually draw the box % Draw the two wings - the top flaps and ends gsave 0 boxlength tablen sub translate % line up the wing with the bottom of the box's front side drawwing % draw the wing gsave winglen 0 translate %move to wing middle drawbasetabs %draw tabs between wings 0 boxwidth translate 1 -1 scale %mirror horisontal drawbasetabs %draw bottom tabs fo wings grestore 2 toplen mul sideheight 2 mul add hingelen 4 mul add 0 translate % skip over to the other side of the box -1 1 scale drawwing % and draw the other wing grestore % Draw the front and back of the box, connected up to the wings this also makes the bottom gsave toplen 2 div hingelen add cornerradius sub boxlength translate % line up the front so it will mesh with the wings -90 rotate %rotate it so it sits ontop drawfront % and draw it 0 boxheight hingelen 2 mul add sideheight add toplen add translate % line up the front so it will mesh with the wings 1 -1 scale %scale (mirror) to save having to work with vertical offset drawfront % and draw it grestore % We're done here, lets go home. showpage %%EOF