9 - cycle of boxes

JORourke, 14 Feb11; 2Mar11

The object is built with its lowerleft corner at {0,0,0}, and all other corners at integer coordinates.  It is hacked together with explicit coordinates; eventually this should be generalized.
The front "face" is built explicitly, and then the other faces are constructed by careful rotation and in one case, translation.  Those are a bit tricky, but you can imagine that it can be done, if done carefully.

front =
{
Cuboid[{0,0,0},{1,1,1}],
Cuboid[{0,0,1},{1,1,2}],
Cuboid[{0,0,2},{1,1,3}],
Cuboid[{0,0,3},{1,1,4}],
Cuboid[{1,0,0},{3,1,1}],
Cuboid[{3,0,0},{4,1,1}],
Cuboid[{1,0,3},{3,1,4}],
Cuboid[{3,0,3},{4,1,4}],
Cuboid[{3,0,1},{4,1,3}]
};
left=Rotate[front,π/2,{0,0,1},{1/2,1/2,0}];
right=Rotate[front,-π/2,{0,0,1},{3+1/2,1/2,0}];
back=Translate[
Rotate[front,π,{0,0,1},{0,0,0}],
{4,4,0}
];

g=Graphics3D[{
Opacity[0.3],
front,left,right,back
}
(*,Axes->True*)
,Boxed->False
];Print[g];

MakeBox[] is slightly more natural...

MakeBox[{x_,y_,z_},{dx_,dy_,dz_}]:=Cuboid[{x,y,z},{x,y,z}+{dx,dy,dz}];

cycle1={
MakeBox[{0,0,0},{1,1,1}],
MakeBox[{1,0,0},{1,1,1}],
MakeBox[{2,0,0},{1,1,1}],
MakeBox[{2,0,1},{1,1,1}],
MakeBox[{2,0,2},{1,1,1}],
MakeBox[{2,0,3},{1,1,1}],
MakeBox[{0,0,1},{1,1,2}],
MakeBox[{0,0,3},{1,1,1}],
MakeBox[{1,0,3},{1,1,1}]
};
cycle2={
MakeBox[{1,1,0},{1,1,1}],
MakeBox[{1,2,0},{1,1,1}],
MakeBox[{1,2,1},{1,1,1}],
MakeBox[{1,2,2},{1,1,1}],
MakeBox[{1,2,3},{1,1,1}],
MakeBox[{1,1,3},{1,1,1}],
MakeBox[{1,-1,3},{1,1,1}],
MakeBox[{1,-2,3},{1,1,1}],
MakeBox[{1,-2,1},{1,1,2}],
MakeBox[{1,-2,0},{1,1,1}],
MakeBox[{1,-1,0},{1,1,1}]

};

g=Graphics3D[{
Opacity[0.3],
cycle1,cycle2
}
(*,Axes->True*)
,Boxed->False
];Print[g];