Menger Sponge in openJSCAD

Hello All, I have been facing an issue please help me on that.

I’m trying to make a ‘Menger sponge’ in OpenJSCAD

it doesn’t work for more than 1 generation and I have no idea why, you can try and paste the below code in there and fiddle with it yourself if you’d like.

+1 if you can find my mistake without going to OpenJSCAD

function main() {
    var rad = 100;
    var MC = new MCube(rad, [0,0,0]);
    var sponge = [];
    sponge = menger(MC, 2);
    return sponge;
}
function menger(cube, dept){
    if(dept > 0){
        dept--;
        var cubes = [];
        var sponge = [];
        var r = cube.size;
        var q = r/3;
        xPos = cube.pos[0];
        yPos = cube.pos[1];
        zPos = cube.pos[2];
        for(var z = 0;z<3;z++){
            for(var y = 0;y<3;y++){
                for(var x = 0;x<3;x++){
                    cubes.push(new MCube(q,[xPos + (x * q),yPos + (y * q),zPos + (z * q)] ));  
                }
            }
        }
        for(var i = 0;i < cubes.length;i++){
            if(i != 4 && i != 10 && i != 12 && i != 13 && i != 14 && i != 16 && i != 22){
                sponge.push(cubes[i]);
            }
        }
        for(var i = 0;i < sponge.length;i++){
            sponge[i] = menger(sponge[i], dept);
        }
        return unite(sponge);
    }else{
        return cube;
    }
}
function unite(cubes){
    var sponge = cubes.pop().obj;
        for(var i = 0; i < cubes.length;i++){
            sponge = union(sponge, cubes[i].obj );
        }
    return sponge;
}
function MCube(size,pos){
    this.obj = cube({size:size,center:false}).translate(pos);
    this.size = size;
    this.pos = pos;
    this.translate = function(pos){
        this.obj.translate(pos);
    };
}

Hope, I will get answer for this

Thanks
SarahJohn

1 Like