1// Menger Sponge 2 3// Size of edge of sponge 4D=100; 5// Fractal depth (number of iterations) 6n=3; 7 8echo(version=version()); 9 10module menger() { 11 difference() { 12 cube(D, center=true); 13 for (v=[[0,0,0], [0,0,90], [0,90,0]]) 14 rotate(v) menger_negative(side=D, maxside=D, level=n); 15 } 16} 17 18module menger_negative(side=1, maxside=1, level=1) { 19 l=side/3; 20 cube([maxside*1.1, l, l], center=true); 21 if (level > 1) { 22 for (i=[-1:1], j=[-1:1]) 23 if (i || j) 24 translate([0, i*l, j*l]) 25 menger_negative(side=l, maxside=maxside, level=level-1); 26 } 27} 28 29difference() { 30 rotate([45, atan(1/sqrt(2)), 0]) menger(); 31 translate([0,0,-D]) cube(2*D, center=true); 32} 33 34// Written by Nathan Hellweg, Emmett Lalish and Marius Kintel May 13, 2013 35// 36// To the extent possible under law, the author(s) have dedicated all 37// copyright and related and neighboring rights to this software to the 38// public domain worldwide. This software is distributed without any 39// warranty. 40// 41// You should have received a copy of the CC0 Public Domain 42// Dedication along with this software. 43// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>. 44