<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.opensourceecology.org/index.php?action=history&amp;feed=atom&amp;title=User%3ADorkmo%2FIdeas%2FBattery%2FSCAD%2F201510</id>
	<title>User:Dorkmo/Ideas/Battery/SCAD/201510 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.opensourceecology.org/index.php?action=history&amp;feed=atom&amp;title=User%3ADorkmo%2FIdeas%2FBattery%2FSCAD%2F201510"/>
	<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=User:Dorkmo/Ideas/Battery/SCAD/201510&amp;action=history"/>
	<updated>2026-04-06T09:19:38Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.13</generator>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=User:Dorkmo/Ideas/Battery/SCAD/201510&amp;diff=131929&amp;oldid=prev</id>
		<title>Dorkmo at 04:02, 5 October 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=User:Dorkmo/Ideas/Battery/SCAD/201510&amp;diff=131929&amp;oldid=prev"/>
		<updated>2015-10-05T04:02:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.opensourceecology.org/index.php?title=User:Dorkmo/Ideas/Battery/SCAD/201510&amp;amp;diff=131929&amp;amp;oldid=131928&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Dorkmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=User:Dorkmo/Ideas/Battery/SCAD/201510&amp;diff=131928&amp;oldid=prev</id>
		<title>Dorkmo: /* tub */</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=User:Dorkmo/Ideas/Battery/SCAD/201510&amp;diff=131928&amp;oldid=prev"/>
		<updated>2015-10-05T01:44:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;tub&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 01:44, 5 October 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l32&quot;&gt;Line 32:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 32:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;spacing = 1.940055;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;spacing = 1.940055;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;space_belowcage=5;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;space_belowcage=5;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;wall_spacers_yn = 0; //1 yes 0 no&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;center_dividers = 0; //1 yes 0 no&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cage_height = &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;65&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cage_height = &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;55&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cage_wall = 7;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cage_wall = 7;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cage_endwall = 2;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cage_endwall = 2;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l46&quot;&gt;Line 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 45:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;wire_holeoffc = 0;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;wire_holeoffc = 0;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cage_lid_depthinto = 7;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cage_lid_depthinto = 7;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cage_divot_height = &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;5.5&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cage_divot_height = &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;4&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;tub_lid_depthinto = 7;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;tub_lid_depthinto = 7;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;tub_divot_height = 5.5;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;tub_divot_height = 5.5;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Dorkmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=User:Dorkmo/Ideas/Battery/SCAD/201510&amp;diff=131927&amp;oldid=prev</id>
		<title>Dorkmo: Created page with &quot;=tub=  *grooves didnt seem to help with cracking in past versions **might tweak   &lt;nowiki&gt;  height = 90; tub_width = 38; tub_length = 88; basethickness = 5; tub_wall = 2; tub_...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=User:Dorkmo/Ideas/Battery/SCAD/201510&amp;diff=131927&amp;oldid=prev"/>
		<updated>2015-10-05T01:27:13Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;=tub=  *grooves didnt seem to help with cracking in past versions **might tweak   &amp;lt;nowiki&amp;gt;  height = 90; tub_width = 38; tub_length = 88; basethickness = 5; tub_wall = 2; tub_...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=tub=&lt;br /&gt;
&lt;br /&gt;
*grooves didnt seem to help with cracking in past versions&lt;br /&gt;
**might tweak&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
height = 90;&lt;br /&gt;
tub_width = 38;&lt;br /&gt;
tub_length = 88;&lt;br /&gt;
basethickness = 5;&lt;br /&gt;
tub_wall = 2;&lt;br /&gt;
tub_outsidewall = 3;&lt;br /&gt;
tub_wallgroovedepth = 2;&lt;br /&gt;
tub_wallgroovewidth = 7.5;&lt;br /&gt;
tub_wallgroovecorners =6;&lt;br /&gt;
tub_wallgrooveshift = 0; //-0.5 1st try, messes up groove matchup&lt;br /&gt;
grooves_yn = 1; //1 yes 0 no&lt;br /&gt;
&lt;br /&gt;
eyelets_rowside = 2;&lt;br /&gt;
eyelets_columnside = 3;&lt;br /&gt;
&lt;br /&gt;
eyelets_belowtop = 10;&lt;br /&gt;
eyelets_walltoceneter = 5;&lt;br /&gt;
eyelets_od = 7;&lt;br /&gt;
eyelets_id = 3;&lt;br /&gt;
eyelets_width = 5;&lt;br /&gt;
&lt;br /&gt;
tubs_rows    = 1;&lt;br /&gt;
tubs_columns = 1;&lt;br /&gt;
&lt;br /&gt;
spacing = 1.940055;&lt;br /&gt;
space_belowcage=5;&lt;br /&gt;
wall_spacers_yn = 0; //1 yes 0 no&lt;br /&gt;
center_dividers = 0; //1 yes 0 no&lt;br /&gt;
cage_height = 55;&lt;br /&gt;
cage_wall = 7;&lt;br /&gt;
cage_endwall = 2;&lt;br /&gt;
cage_base = 4;&lt;br /&gt;
&lt;br /&gt;
mesh_opening = 1.875 ;&lt;br /&gt;
mesh_angle = 50;&lt;br /&gt;
mesh_spacing = 4.1;&lt;br /&gt;
&lt;br /&gt;
wire_diameter = 2;&lt;br /&gt;
wire_holeoffc = 0;&lt;br /&gt;
cage_lid_depthinto = 7;&lt;br /&gt;
cage_divot_height = 5.5;&lt;br /&gt;
tub_lid_depthinto = 7;&lt;br /&gt;
tub_divot_height = 5.5;&lt;br /&gt;
&lt;br /&gt;
//*******************************************&lt;br /&gt;
&lt;br /&gt;
tub_wallgroovewidthactual=((2*(tub_width+(2*tub_outsidewall)-tub_wallgroovecorners))+(2*(tub_length+(2*tub_outsidewall)-tub_wallgroovecorners)))/(2*round(((2*(tub_width+(2*tub_outsidewall)-tub_wallgroovecorners))+(2*(tub_length+(2*tub_outsidewall)-tub_wallgroovecorners)))/(2*tub_wallgroovewidth)));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;groove width=&amp;quot;,tub_wallgroovewidthactual);&lt;br /&gt;
&lt;br /&gt;
echo(tan(45)*(tub_width+(2*tub_outsidewall)-tub_wallgroovecorners)&lt;br /&gt;
-(floor((tub_width+(2*tub_outsidewall)-tub_wallgroovecorners)/tub_wallgroovewidthactual)*tub_wallgroovewidthactual));&lt;br /&gt;
&lt;br /&gt;
echo((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidth*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidth))))-tub_wallgroovewidth);&lt;br /&gt;
&lt;br /&gt;
echo((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidthactual*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual);&lt;br /&gt;
&lt;br /&gt;
echo((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners);&lt;br /&gt;
&lt;br /&gt;
echo((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/tub_wallgroovewidthactual)*tub_wallgroovewidthactual)));&lt;br /&gt;
&lt;br /&gt;
echo(((((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidthactual*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual)+((((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidthactual*floor(((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual))-((2*tub_wallgroovewidthactual)*floor(((((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidthactual*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual)+((((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidthactual*floor(((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual))/(2*tub_wallgroovewidthactual))))));&lt;br /&gt;
&lt;br /&gt;
echo(((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidthactual*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual))&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
union()//eyelets&lt;br /&gt;
{&lt;br /&gt;
difference()//grooves&lt;br /&gt;
{&lt;br /&gt;
union()&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
//tubs&lt;br /&gt;
for (c = [0 : tubs_columns-1])&lt;br /&gt;
 {&lt;br /&gt;
  translate([0,c*(tub_length+tub_wall),0])&lt;br /&gt;
   {&lt;br /&gt;
    for (r = [0 : tubs_rows-1])&lt;br /&gt;
    {&lt;br /&gt;
     translate([r*(tub_width+tub_wall),0,0])&lt;br /&gt;
      {&lt;br /&gt;
       tub();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
//end tubs&lt;br /&gt;
&lt;br /&gt;
//outer walls&lt;br /&gt;
translate([-tub_outsidewall+tub_wall+(tub_wallgroovecorners/2),-tub_outsidewall+tub_wall+(tub_wallgroovecorners/2),0])&lt;br /&gt;
 {&lt;br /&gt;
  difference()&lt;br /&gt;
   {&lt;br /&gt;
       $fn=50;&lt;br /&gt;
       minkowski()&lt;br /&gt;
       {&lt;br /&gt;
    cube(size = [(((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners,(((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners,height-1]);&lt;br /&gt;
    cylinder(r=(tub_wallgroovecorners/2),h=(1));&lt;br /&gt;
   }&lt;br /&gt;
       &lt;br /&gt;
    translate([tub_outsidewall-(tub_wallgroovecorners/2),tub_outsidewall-(tub_wallgroovecorners/2),0])&lt;br /&gt;
     {&lt;br /&gt;
      cube(size = [(((tub_width+tub_wall)*tubs_rows)+tub_wall)-(tub_wall*2),(((tub_length+tub_wall)*tubs_columns)+tub_wall)-(tub_wall*2),height+1]);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
//end outer walls&lt;br /&gt;
&lt;br /&gt;
} //end union&lt;br /&gt;
&lt;br /&gt;
////grooves&lt;br /&gt;
//1&lt;br /&gt;
rotate([0,0,0])&lt;br /&gt;
{&lt;br /&gt;
translate([tub_wall-tub_outsidewall+(tub_wallgroovecorners/2),tub_wall-tub_outsidewall,0])&lt;br /&gt;
{&lt;br /&gt;
if(grooves_yn==1)grooves(tub_wallgroovedepth,tub_wallgroovewidthactual,(((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners,height,0);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//2&lt;br /&gt;
rotate([0,0,90])&lt;br /&gt;
{&lt;br /&gt;
translate([(tub_wall-tub_outsidewall)+(tub_wallgroovecorners/2),-(tub_wall-tub_outsidewall)-(((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall),0])&lt;br /&gt;
{&lt;br /&gt;
if(grooves_yn==1)grooves(tub_wallgroovedepth,tub_wallgroovewidthactual,((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall-tub_wallgroovecorners,height,(((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidthactual*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual))-(tub_wallgrooveshift*1));&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//3&lt;br /&gt;
rotate([0,0,180])&lt;br /&gt;
{&lt;br /&gt;
translate([-(tub_wall-tub_outsidewall)-(tub_wallgroovecorners/2)-((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners),-tub_wall-tub_outsidewall-((((tub_length+tub_wall)*tubs_columns)+tub_wall)-(tub_wall*2)),0])&lt;br /&gt;
{&lt;br /&gt;
if(grooves_yn==1)grooves(tub_wallgroovedepth,tub_wallgroovewidthactual,(((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners,height,((((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidthactual*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual)+((((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidthactual*floor(((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual))-((2*tub_wallgroovewidthactual)*floor(((((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidthactual*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual)+((((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidthactual*floor(((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual))/(2*tub_wallgroovewidthactual)))))-(tub_wallgrooveshift*2));&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//4&lt;br /&gt;
rotate([0,0,270])&lt;br /&gt;
{&lt;br /&gt;
translate([-tub_wall-tub_outsidewall-((((tub_length+tub_wall)*tubs_columns)+tub_wall)-(tub_wall*2))+(tub_wallgroovecorners/2),(tub_wall-tub_outsidewall),0])&lt;br /&gt;
{&lt;br /&gt;
if(grooves_yn==1)grooves(tub_wallgroovedepth,tub_wallgroovewidth,((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall-tub_wallgroovecorners,height,((((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-&lt;br /&gt;
(2*tub_wallgroovewidthactual*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-&lt;br /&gt;
tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual)&lt;br /&gt;
+&lt;br /&gt;
((((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-&lt;br /&gt;
(2*tub_wallgroovewidthactual*floor(((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-&lt;br /&gt;
tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual)&lt;br /&gt;
+&lt;br /&gt;
((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-&lt;br /&gt;
(2*tub_wallgroovewidthactual*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-&lt;br /&gt;
tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual))&lt;br /&gt;
-&lt;br /&gt;
((2*tub_wallgroovewidthactual)&lt;br /&gt;
*&lt;br /&gt;
floor(((((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-&lt;br /&gt;
(2*tub_wallgroovewidthactual*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-&lt;br /&gt;
tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual)&lt;br /&gt;
+&lt;br /&gt;
((((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-&lt;br /&gt;
(2*tub_wallgroovewidthactual*floor(((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-&lt;br /&gt;
tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual)&lt;br /&gt;
+&lt;br /&gt;
((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-&lt;br /&gt;
(2*tub_wallgroovewidthactual*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-&lt;br /&gt;
tub_wallgroovecorners)/(2*tub_wallgroovewidthactual))))-tub_wallgroovewidthactual))&lt;br /&gt;
/&lt;br /&gt;
(2*tub_wallgroovewidthactual)))))-(tub_wallgrooveshift*3)+1.5);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
////end grooves&lt;br /&gt;
} //end difference&lt;br /&gt;
//begin eyelets&lt;br /&gt;
//1 rowside&lt;br /&gt;
translate([(tub_wall-tub_outsidewall),(tub_wall-tub_outsidewall)-eyelets_walltoceneter,height-eyelets_belowtop])&lt;br /&gt;
{&lt;br /&gt;
for (e = [1:eyelets_rowside])&lt;br /&gt;
{&lt;br /&gt;
translate([(((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)/(eyelets_rowside+1)*e,0,0])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,0,180])&lt;br /&gt;
{&lt;br /&gt;
eyelet(eyelets_od,eyelets_id,eyelets_width,tub_wallgroovedepth+eyelets_walltoceneter-(eyelets_od/2));&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//2&lt;br /&gt;
//3&lt;br /&gt;
translate([(tub_wall-tub_outsidewall),((tub_length*tubs_columns)+(tub_wall*(tubs_columns))+tub_wall)+(tub_outsidewall*2),height-eyelets_belowtop])&lt;br /&gt;
{&lt;br /&gt;
for (e = [1:eyelets_rowside])&lt;br /&gt;
{&lt;br /&gt;
translate([(((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)/(eyelets_rowside+1)*e,0,0])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,0,0])&lt;br /&gt;
{&lt;br /&gt;
#eyelet(eyelets_od,eyelets_id,eyelets_width,tub_wallgroovedepth+eyelets_walltoceneter-(eyelets_od/2));&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//4&lt;br /&gt;
&lt;br /&gt;
//end eyelets&lt;br /&gt;
} //end union&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//////end render&lt;br /&gt;
//////begin modules&lt;br /&gt;
&lt;br /&gt;
////tub module&lt;br /&gt;
module tub()&lt;br /&gt;
{&lt;br /&gt;
union()&lt;br /&gt;
{&lt;br /&gt;
//walls&lt;br /&gt;
 difference()&lt;br /&gt;
  {&lt;br /&gt;
   cube(size = [tub_width+(tub_wall*2), tub_length+(tub_wall*2), height], center=false);&lt;br /&gt;
   translate([tub_wall+spacing,tub_wall+spacing,basethickness+spacing])&lt;br /&gt;
    {&lt;br /&gt;
        $fn=50;&lt;br /&gt;
      minkowski()&lt;br /&gt;
        {&lt;br /&gt;
       cube(size = [tub_width-(spacing*2), tub_length-(spacing*2), height-basethickness+1-1], center=false);&lt;br /&gt;
        sphere(r=spacing);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
//end walls&lt;br /&gt;
&lt;br /&gt;
//spheres lock ins&lt;br /&gt;
//1&lt;br /&gt;
      translate([tub_wall,(tub_length*1/4)+tub_wall,height-(((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([1,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          #divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//2&lt;br /&gt;
      translate([tub_wall,(tub_length*3/4)+tub_wall,height-(((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([1,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//3&lt;br /&gt;
      translate([tub_width+tub_wall,(tub_length*1/4)+tub_wall,height-(((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([0,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//4&lt;br /&gt;
      translate([tub_width+tub_wall,(tub_length*3/4)+tub_wall,height-(((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([0,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//5&lt;br /&gt;
      translate([(tub_width*1/2)+tub_wall,tub_wall,height-(((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([0,1,0])&lt;br /&gt;
         {&lt;br /&gt;
          rotate([0,0,90])&lt;br /&gt;
           {&lt;br /&gt;
            #divot_sphere();&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//6&lt;br /&gt;
      translate([(tub_width*1/2)+tub_wall,tub_length+tub_wall,height-(((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([0,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          rotate([0,0,90])&lt;br /&gt;
           {&lt;br /&gt;
            #divot_sphere();&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//end spheres&lt;br /&gt;
&lt;br /&gt;
//begin locks&lt;br /&gt;
&lt;br /&gt;
translate([(spacing/4)+(tub_width*1/4)+tub_wall,tub_length+tub_wall,basethickness+space_belowcage+(((tub_width-(spacing*3))/2)/2)])&lt;br /&gt;
{&lt;br /&gt;
#slidelock(spacing);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
translate([(-spacing/4)+(tub_width*3/4)+tub_wall,tub_length+tub_wall,basethickness+space_belowcage+(((tub_width-(spacing*3))/2)/2)])&lt;br /&gt;
{&lt;br /&gt;
#slidelock(spacing);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
translate([(spacing/4)+(tub_width*1/4)+tub_wall,tub_wall,basethickness+space_belowcage+(((tub_width-(spacing*3))/2)/2)])&lt;br /&gt;
{&lt;br /&gt;
mirror([0,1,0])&lt;br /&gt;
{&lt;br /&gt;
#slidelock(spacing);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
translate([(-spacing/4)+(tub_width*3/4)+tub_wall,tub_wall,basethickness+space_belowcage+(((tub_width-(spacing*3))/2)/2)])&lt;br /&gt;
{&lt;br /&gt;
mirror([0,1,0])&lt;br /&gt;
{&lt;br /&gt;
#slidelock(spacing);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
////upper lock rails&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
translate([(spacing/4)+(tub_width*1/4)+tub_wall,tub_length+tub_wall,cage_height+basethickness+space_belowcage-(((tub_width-(spacing*3))/2)/2)])&lt;br /&gt;
{&lt;br /&gt;
#slidelockupper(spacing);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
translate([(-spacing/4)+(tub_width*3/4)+tub_wall,tub_length+tub_wall,cage_height+basethickness+space_belowcage-(((tub_width-(spacing*3))/2)/2)])&lt;br /&gt;
{&lt;br /&gt;
#slidelockupper(spacing);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
translate([(spacing/4)+(tub_width*1/4)+tub_wall,tub_wall,cage_height+basethickness+space_belowcage-(((tub_width-(spacing*3))/2)/2)])&lt;br /&gt;
{&lt;br /&gt;
mirror([0,1,0])&lt;br /&gt;
{&lt;br /&gt;
#slidelockupper(spacing);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
translate([(-spacing/4)+(tub_width*3/4)+tub_wall,tub_wall,cage_height+basethickness+space_belowcage-(((tub_width-(spacing*3))/2)/2)])&lt;br /&gt;
{&lt;br /&gt;
mirror([0,1,0])&lt;br /&gt;
{&lt;br /&gt;
#slidelockupper(spacing);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//end locks&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
////end tub module&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//divider modules&lt;br /&gt;
module divider()&lt;br /&gt;
 {&lt;br /&gt;
  difference()&lt;br /&gt;
   {&lt;br /&gt;
    union()&lt;br /&gt;
     {&lt;br /&gt;
      cube(size=[spacing-1,spacing+cage_endwall+2,(spacing+cage_endwall+2)*2]);&lt;br /&gt;
      translate([0,0,(spacing+cage_endwall+2)*2])&lt;br /&gt;
       {&lt;br /&gt;
        rotate([0,45,0])&lt;br /&gt;
         {&lt;br /&gt;
          cube(size=[(sin(45)*(spacing-1)),spacing+cage_endwall+2,(sin(45)*(spacing-1))]);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
    translate([0,spacing+cage_endwall+2,-(((spacing+cage_endwall+2)/sin(45))/sin(45))/2])&lt;br /&gt;
     {&lt;br /&gt;
      rotate([45,0,0])&lt;br /&gt;
       {&lt;br /&gt;
        cube(size=[spacing-1,((spacing+cage_endwall+2)/sin(45)),((spacing+cage_endwall+2)/sin(45))]);       &lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
//end divider module&lt;br /&gt;
&lt;br /&gt;
//spacer module&lt;br /&gt;
module tub_spacer(length)&lt;br /&gt;
 {&lt;br /&gt;
translate([-(spacing-1),-length/2,0])&lt;br /&gt;
  {&lt;br /&gt;
  difference()&lt;br /&gt;
   {&lt;br /&gt;
    rotate([0,45,0])&lt;br /&gt;
     {&lt;br /&gt;
      cube(size = [((spacing-1)/sin(45)),length,((spacing-1)/sin(45))]);&lt;br /&gt;
     }&lt;br /&gt;
    translate([-(spacing-1)-0.1,0,-(spacing-1)])&lt;br /&gt;
     {&lt;br /&gt;
      #cube(size = [((spacing-1)/sin(45))/sin(45),length,((spacing-1)/sin(45))/sin(45)]);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
//end spacer&lt;br /&gt;
&lt;br /&gt;
//divot&lt;br /&gt;
module divot_sphere()&lt;br /&gt;
{&lt;br /&gt;
difference()&lt;br /&gt;
{&lt;br /&gt;
translate([(tub_divot_height/2)/sin(45)*sin(45),0,0])&lt;br /&gt;
{&lt;br /&gt;
sphere(r = (tub_divot_height/2)/sin(45));&lt;br /&gt;
}&lt;br /&gt;
translate([(tub_divot_height/2)/sin(45),0,0])&lt;br /&gt;
cube(size = [((tub_divot_height/2)/sin(45)*2),((tub_divot_height/2)/sin(45)*2),((tub_divot_height/2)/sin(45)*2)], center=true);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//end divot module&lt;br /&gt;
&lt;br /&gt;
////groove module&lt;br /&gt;
&lt;br /&gt;
module grooves(tub_wallgroove,groove_width,groove_length,groove_height,groove_shift)&lt;br /&gt;
{&lt;br /&gt;
translate([((cos(45)*((groove_height/sin(45))+((groove_width*sin(45)*sin(45))/cos(45)))))-height/2,-.0001,height/2])&lt;br /&gt;
{&lt;br /&gt;
intersection()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
intersection()&lt;br /&gt;
{&lt;br /&gt;
for(g = [(-(cos(45)*((groove_height/sin(45))+((groove_width*sin(45)*sin(45))/cos(45))))/groove_width/2) : (groove_length/groove_width/2)])&lt;br /&gt;
{&lt;br /&gt;
 translate([(g*groove_width*2)+(groove_width*sin(45)*sin(45)),0,groove_shift])&lt;br /&gt;
  {&lt;br /&gt;
  rotate([0,45,0])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([0,0,45])&lt;br /&gt;
     {&lt;br /&gt;
      #cube(size = [groove_width*sin(45)*sin(45),groove_width*sin(45)*sin(45),((groove_height/sin(45))+((groove_width*sin(45)*sin(45))/cos(45)))+(abs(groove_shift/cos(45)*2))], center=true);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
translate([(-groove_height/2)-(groove_width*sin(45)*sin(45)),0,-groove_height/2])&lt;br /&gt;
{&lt;br /&gt;
#cube(size = [groove_length,tub_wallgroove,groove_height]);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
translate([((-groove_height/2)-(groove_width*sin(45)*sin(45)))+(groove_length/2),0,0])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,0,45])&lt;br /&gt;
{&lt;br /&gt;
cube(size = [groove_length*cos(45),groove_length*cos(45),groove_height],center=true);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 }//end intersection&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
////end groove mdoule&lt;br /&gt;
&lt;br /&gt;
////begin eyelet module&lt;br /&gt;
&lt;br /&gt;
module eyelet(od,id,eyelet_width,standoff)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
translate([-eyelet_width/2,-(od/2)-standoff,-((od)+od)-standoff+(od/2)])//orgin set at the center of hole cylinder&lt;br /&gt;
{&lt;br /&gt;
difference()&lt;br /&gt;
   {&lt;br /&gt;
    union()&lt;br /&gt;
     {&lt;br /&gt;
      translate([0,standoff,standoff])&lt;br /&gt;
       {&lt;br /&gt;
        cube(size=[eyelet_width,od,(od/2)+od]);&lt;br /&gt;
       }&lt;br /&gt;
      translate([0,((od)/2)+standoff,((od/2)+od)+standoff])&lt;br /&gt;
       {&lt;br /&gt;
        rotate([0,90,0])&lt;br /&gt;
         {&lt;br /&gt;
          cylinder(r = od/2,h = eyelet_width, $fn=60);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
      translate([0,0,0])&lt;br /&gt;
       {&lt;br /&gt;
        cube(size=[eyelet_width,(od/2)+standoff,((od)+od)+standoff]);&lt;br /&gt;
       } &lt;br /&gt;
     }&lt;br /&gt;
    translate([-1,eyelet_width+2,-(((eyelet_width+2)/sin(45))/sin(45))/2])&lt;br /&gt;
     {&lt;br /&gt;
      rotate([45,0,0])&lt;br /&gt;
       {&lt;br /&gt;
        #cube(size=[eyelet_width+2,((od+standoff+2)/sin(45)),((eyelet_width+2)/sin(45))]);       &lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
      translate([-1,((od)/2)+standoff,((od/2)+od)+standoff])&lt;br /&gt;
       {&lt;br /&gt;
        rotate([0,90,0])&lt;br /&gt;
         {&lt;br /&gt;
          cylinder(r = id/2,h = eyelet_width+2, $fn=60);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
////end eyelet module&lt;br /&gt;
&lt;br /&gt;
////calculations&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;space above cages for extra fluid is&amp;quot;, height-basethickness-space_belowcage-cage_height-tub_lid_depthinto);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;tub print area x&amp;quot;,((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall);&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;tub print area y&amp;quot;,((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall);&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;tub print area z&amp;quot;,height);&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;cage cavity y&amp;quot;,((tub_width-(spacing*3))/2)-(cage_wall*2));&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;cage cavity x&amp;quot;,(tub_length-(spacing*2))-(cage_endwall*2));&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;cage cavity z&amp;quot;,cage_height-cage_base);&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;powder volume per cage&amp;quot;,((((tub_width-(spacing*3))/2)-(cage_wall*2)))/10*(((tub_length-(spacing*2))-(cage_endwall*2)))/10*(cage_height-cage_base-cage_lid_depthinto)/10,&amp;quot;cm3&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;grams nickle hydroxide per cage&amp;quot;,(((((tub_width-(spacing*3))/2)-(cage_wall*2)))/10*(((tub_length-(spacing*2))-(cage_endwall*2)))/10*(cage_height-cage_base-cage_lid_depthinto)/10)*(4.10),&amp;quot;grams&amp;quot;);//density is 4.10&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;total grams nickle hydroxide&amp;quot;,(((((tub_width-(spacing*3))/2)-(cage_wall*2)))/10*(((tub_length-(spacing*2))-(cage_endwall*2)))/10*(cage_height-cage_base-cage_lid_depthinto)/10)*(4.10)*(tubs_columns*tubs_rows),&amp;quot;grams&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
echo(((((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/tub_wallgroovewidth)-floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/tub_wallgroovewidth))*tub_wallgroovewidth)+tub_wallgroovewidth));&lt;br /&gt;
&lt;br /&gt;
//2&lt;br /&gt;
echo((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidth*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidth))))-tub_wallgroovewidth);&lt;br /&gt;
&lt;br /&gt;
//3&lt;br /&gt;
echo((((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidth*floor(((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidth))))-tub_wallgroovewidth);&lt;br /&gt;
&lt;br /&gt;
//2+3&lt;br /&gt;
echo(((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidth*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidth))))-tub_wallgroovewidth)+((((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidth*floor(((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidth))))-tub_wallgroovewidth));&lt;br /&gt;
&lt;br /&gt;
//(2+3)/absfloor&lt;br /&gt;
echo((2*tub_wallgroovewidth)*floor(((((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidth*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidth))))-tub_wallgroovewidth)+((((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidth*floor(((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidth))))-tub_wallgroovewidth))/(2*tub_wallgroovewidth))));&lt;br /&gt;
&lt;br /&gt;
//3&lt;br /&gt;
echo((((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidth*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidth))))-tub_wallgroovewidth)+((((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidth*floor(((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidth))))-tub_wallgroovewidth))-((2*tub_wallgroovewidth)*floor(((((((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidth*floor(((((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidth))))-tub_wallgroovewidth)+((((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)-(2*tub_wallgroovewidth*floor(((((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall)-tub_wallgroovecorners)/(2*tub_wallgroovewidth))))-tub_wallgroovewidth))/(2*tub_wallgroovewidth)))));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//slidelocking module&lt;br /&gt;
module slidelock(spacing)&lt;br /&gt;
{&lt;br /&gt;
 difference()&lt;br /&gt;
  {&lt;br /&gt;
   translate([0,-spacing,0]) //translate all&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
//left&lt;br /&gt;
     translate([-(spacing/(1-cos(45)))*cos(45),0,-(spacing/(1-cos(45)))*cos(45)])&lt;br /&gt;
      {&lt;br /&gt;
       rotate([0,0,45])&lt;br /&gt;
        {&lt;br /&gt;
         cube(size = [(spacing/sin(45)),(spacing/sin(45)),((spacing/(1-cos(45)))*cos(45)*2)+spacing*2]);&lt;br /&gt;
        }//end rotate left&lt;br /&gt;
      }//end translate left&lt;br /&gt;
&lt;br /&gt;
//right&lt;br /&gt;
      translate([(spacing/(1-cos(45)))*cos(45),0,-(spacing/(1-cos(45)))*cos(45)])&lt;br /&gt;
       {&lt;br /&gt;
        rotate([0,0,45])&lt;br /&gt;
         {&lt;br /&gt;
          cube(size = [(spacing/sin(45)),(spacing/sin(45)),((spacing/(1-cos(45)))*cos(45)*2)+spacing*2]);&lt;br /&gt;
         }//end rotate right&lt;br /&gt;
       }//end translate right&lt;br /&gt;
//bottom&lt;br /&gt;
       translate([(-(spacing/(1-cos(45)))*cos(45))-spacing,0,-(spacing/(1-cos(45)))*cos(45)])&lt;br /&gt;
        {&lt;br /&gt;
         rotate([90,45,90])&lt;br /&gt;
          {&lt;br /&gt;
           cube(size = [(spacing/sin(45)),(spacing/sin(45)),((spacing/(1-cos(45)))*cos(45)*2)+spacing*2]);&lt;br /&gt;
          }//end rotate bottom&lt;br /&gt;
        }//end translate bottom&lt;br /&gt;
//bump&lt;br /&gt;
        translate([(-(spacing/(1-cos(45)))*cos(45))-spacing,spacing*(2/5),((spacing/(1-cos(45)))*cos(45))-spacing*(2/5)])//set bump fraction&lt;br /&gt;
         {&lt;br /&gt;
          rotate([90,45,90])&lt;br /&gt;
           {&lt;br /&gt;
            cube(size = [(spacing/sin(45)),(spacing/sin(45)),((spacing/(1-cos(45)))*cos(45)*2)+spacing*2]);&lt;br /&gt;
           }//end rotate bump&lt;br /&gt;
         }//end translate bump&lt;br /&gt;
       &lt;br /&gt;
     }//end translate all&lt;br /&gt;
&lt;br /&gt;
//trim left&lt;br /&gt;
translate([(-(spacing/(1-cos(45)))*cos(45))-spacing,-spacing*2,(-(spacing/(1-cos(45)))*cos(45))-spacing-1])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,0,45])&lt;br /&gt;
{&lt;br /&gt;
cube(size = [(spacing/sin(45)),(spacing/sin(45)),((spacing/(1-cos(45)))*cos(45)*2)+(spacing*2)+spacing+2]);&lt;br /&gt;
}//end rotate left&lt;br /&gt;
}//end translate left&lt;br /&gt;
&lt;br /&gt;
//trim right&lt;br /&gt;
translate([((spacing/(1-cos(45)))*cos(45))+spacing,-spacing*2,(-(spacing/(1-cos(45)))*cos(45))-spacing-1])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,0,45])&lt;br /&gt;
{&lt;br /&gt;
cube(size = [(spacing/sin(45)),(spacing/sin(45)),((spacing/(1-cos(45)))*cos(45)*2)+(spacing*2)+spacing+2]);&lt;br /&gt;
}//end rotate right&lt;br /&gt;
}//end translate right&lt;br /&gt;
&lt;br /&gt;
//trim back&lt;br /&gt;
translate([0,((spacing/(1-cos(45)))*2)/2,spacing/2])&lt;br /&gt;
{&lt;br /&gt;
cube(size = [((spacing/(1-cos(45)))*2)+1,((spacing/(1-cos(45)))*2),((spacing/(1-cos(45)))*2)+spacing+1], center=true);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}//end difference&lt;br /&gt;
}///end slidelocking module&lt;br /&gt;
&lt;br /&gt;
//slidelocking module&lt;br /&gt;
module slidelockupper(spacing)&lt;br /&gt;
{&lt;br /&gt;
 difference()&lt;br /&gt;
  {&lt;br /&gt;
   translate([0,-spacing,0]) //translate all&lt;br /&gt;
    {&lt;br /&gt;
//left&lt;br /&gt;
     translate([-(spacing/(1-cos(45)))*cos(45),0,-(spacing/(1-cos(45)))*cos(45)])&lt;br /&gt;
      {&lt;br /&gt;
       rotate([0,0,45])&lt;br /&gt;
        {&lt;br /&gt;
         cube(size = [(spacing/sin(45)),(spacing/sin(45)),((spacing/(1-cos(45)))*cos(45)*2)+spacing*2]);&lt;br /&gt;
        }//end rotate left&lt;br /&gt;
      }//end translate left&lt;br /&gt;
//right&lt;br /&gt;
     translate([(spacing/(1-cos(45)))*cos(45),0,-(spacing/(1-cos(45)))*cos(45)])&lt;br /&gt;
      {&lt;br /&gt;
       rotate([0,0,45])&lt;br /&gt;
        {&lt;br /&gt;
         cube(size = [(spacing/sin(45)),(spacing/sin(45)),((spacing/(1-cos(45)))*cos(45)*2)+spacing*2]);&lt;br /&gt;
        }//end rotate right&lt;br /&gt;
      }//end translate right&lt;br /&gt;
    }//end translate all&lt;br /&gt;
//trim left&lt;br /&gt;
   translate([(-(spacing/(1-cos(45)))*cos(45))-spacing,-spacing*2,(-(spacing/(1-cos(45)))*cos(45))-spacing-1])&lt;br /&gt;
    {&lt;br /&gt;
     rotate([0,0,45])&lt;br /&gt;
      {&lt;br /&gt;
       cube(size = [(spacing/sin(45)),(spacing/sin(45)),((spacing/(1-cos(45)))*cos(45)*2)+(spacing*2)+spacing+2]);&lt;br /&gt;
      }//end rotate left&lt;br /&gt;
    }//end translate left&lt;br /&gt;
//trim right&lt;br /&gt;
   translate([((spacing/(1-cos(45)))*cos(45))+spacing,-spacing*2,(-(spacing/(1-cos(45)))*cos(45))-spacing-1])&lt;br /&gt;
    {&lt;br /&gt;
     rotate([0,0,45])&lt;br /&gt;
      {&lt;br /&gt;
       cube(size = [(spacing/sin(45)),(spacing/sin(45)),((spacing/(1-cos(45)))*cos(45)*2)+(spacing*2)+spacing+2]);&lt;br /&gt;
      }//end rotate right&lt;br /&gt;
    }//end translate right&lt;br /&gt;
//trim back&lt;br /&gt;
   translate([0,((spacing/(1-cos(45)))*2)/2,spacing/2])&lt;br /&gt;
    {&lt;br /&gt;
     cube(size = [((spacing/(1-cos(45)))*2)+1,((spacing/(1-cos(45)))*2),((spacing/(1-cos(45)))*2)+spacing+1], center=true);&lt;br /&gt;
//trim bottom&lt;br /&gt;
       translate([0,(-((spacing/(1-cos(45)))*2)/2)-spacing,(-(spacing/(1-cos(45)))*cos(45))-1])&lt;br /&gt;
        {&lt;br /&gt;
         rotate([90,45,90])&lt;br /&gt;
          {&lt;br /&gt;
           #cube(size = [(spacing/sin(45)),(spacing/sin(45)),((spacing/(1-cos(45)))*cos(45)*2)+spacing*2],center=true);&lt;br /&gt;
          }//end rotate bottom&lt;br /&gt;
        }//end translate bottom&lt;br /&gt;
    }&lt;br /&gt;
  }//end difference&lt;br /&gt;
}///end slidelocking module&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//divot by depth module&lt;br /&gt;
module divot_sphere_d()&lt;br /&gt;
 {&lt;br /&gt;
  translate([0,0,0])&lt;br /&gt;
   {&lt;br /&gt;
    difference()&lt;br /&gt;
     {&lt;br /&gt;
      translate([(spacing/(1-cos(45)))*sin(45),0,0])&lt;br /&gt;
       {&lt;br /&gt;
        sphere(r = (spacing/(1-cos(45))));&lt;br /&gt;
       }&lt;br /&gt;
      translate([(spacing/(1-cos(45))),0,0])&lt;br /&gt;
       {&lt;br /&gt;
        cube(size = [((spacing/(1-cos(45)))*2),((spacing/(1-cos(45)))*2),((spacing/(1-cos(45)))*2)], center=true);&lt;br /&gt;
       }       &lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
//end divot module&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//divot by height&lt;br /&gt;
module divot_sphere()&lt;br /&gt;
{&lt;br /&gt;
difference()&lt;br /&gt;
{&lt;br /&gt;
translate([(tub_divot_height/2)/sin(45)*sin(45),0,0])&lt;br /&gt;
{&lt;br /&gt;
sphere(r = (tub_divot_height/2)/sin(45));&lt;br /&gt;
}&lt;br /&gt;
translate([(tub_divot_height/2)/sin(45),0,0])&lt;br /&gt;
cube(size = [((tub_divot_height/2)/sin(45)*2),((tub_divot_height/2)/sin(45)*2),((tub_divot_height/2)/sin(45)*2)], center=true);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//end divot&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dorkmo</name></author>
	</entry>
</feed>