module menger_schwamm_neg(iter, x, y, z, w) { union() { translate([x,y,z]){ cube([w/3, w/3, w*1.1], center=true); cube([w/3, w*1.1, w/3], center=true); cube([w*1.1, w/3, w/3], center=true); } if (iter > 1) { for (xo = [-w/3:w/3:w/3]) { for (yo = [-w/3:w/3:w/3]) { for (zo = [-w/3:w/3:w/3]) { menger_schwamm_neg(iter-1, x+xo, y+yo, z+zo, w/3); } } } } } } module menger_schwamm(iter, x, y, z, w) { difference() { translate([x, y, z]) cube(w, center=true); menger_schwamm_neg(iter, x, y, z, w); } } menger_schwamm(1, 0, 0, 0, 3);