baseLength = 273;
baseWidth = 343;
materialThickness = 3;
boxLength = 67;
boxWidth = 46;
boxHeight = 20; 
widthFittingCount = (ceil(baseWidth/(boxWidth+materialThickness))-1);
lengthFittingCount = (ceil(baseLength/(boxLength+materialThickness))-1);
widthEdge = (baseWidth - (widthFittingCount*(boxWidth+materialThickness)))/2;
lengthEdge = (baseLength - (lengthFittingCount*(boxLength+materialThickness)))/2;
echo(lengthFittingCount);
if(widthEdge>=(materialThickness/2))
{
    difference(){    
        square([baseWidth,baseLength]);
        for (lengthCount = [0:lengthFittingCount-1])
        {
            for (widthCount = [0:widthFittingCount])
            {
                translate([
                widthEdge-0.5*materialThickness+widthCount*(materialThickness+boxWidth),
                (lengthEdge+0.5*materialThickness+lengthCount*(materialThickness+boxLength))+boxLength*0.25,
                0])
                {square([materialThickness,boxLength*0.5]);}; 
            }
		}
		for (lengthCount = [0:lengthFittingCount])
		{
			for (widthCount = [0:widthFittingCount-1])
			{
                translate([
                (widthEdge+0.5*materialThickness+widthCount*(materialThickness+boxWidth))+boxWidth*0.25,
                lengthEdge-0.5*materialThickness+lengthCount*(materialThickness+boxLength),
                0])
                {square([boxWidth*0.5,materialThickness]);};
			}        	
		}
	}
    for (pieceCount = [0:widthFittingCount])
    {
        translate([baseWidth+1+pieceCount*(boxHeight+materialThickness+1),0,0])
        {
            difference()
            {
                union()
                {
                    for (gap = [0:lengthFittingCount-1])
                    {
                        translate([
                        boxHeight,
                        materialThickness+0.25*boxLength+gap*(materialThickness+boxLength),
                        0])
                        {square([materialThickness,boxLength*0.5]);};
                    }
                    square([boxHeight,(materialThickness+boxLength)*lengthFittingCount+materialThickness]);
                }
                for (gap = [0:lengthFittingCount])
                    {
                    translate([
                    0,
                    gap*(materialThickness+boxLength),
                    0])
                    {square([boxHeight*0.5,materialThickness]);};
                }
            }
        };
    }
    
    for (pieceCount = [0:lengthFittingCount])
    {
        translate([baseWidth+1+(widthFittingCount+1)*(boxHeight+materialThickness+1)+pieceCount*(boxHeight+materialThickness+1),0,0])
        {
            difference()
            {
                union()
                {
                    for (gap = [0:widthFittingCount-1])
                    {
                        translate([
                        boxHeight,
                        materialThickness+0.25*boxWidth+gap*(materialThickness+boxWidth),
                        0])
                        {square([materialThickness,boxWidth*0.5]);};
                    }
                    square([boxHeight,(materialThickness+boxWidth)*widthFittingCount+materialThickness]);
                }
                for (gap = [0:widthFittingCount])
                    {
                    translate([
                    boxHeight*0.5,
                    gap*(materialThickness+boxWidth),
                    0])
                    {square([boxHeight*0.5,materialThickness]);};
                }
            }
        };
    }
}