$fn=4; ofaces = [ [0, 1, 2], [0, 2, 4], [0, 4, 5], [0, 5, 1], [3, 5, 4], [3, 1, 5], [3, 2, 1], [3, 4, 2], ]; edges = [[0, 1], [0, 2], [0, 4], [0, 5], [3, 1], [3, 2], [3, 4], [3, 5], [1, 2], [2, 4], [4, 5], [5, 1]]; module octahedron(center, size) { points = [ center + [l / 2, 0, 0], center + [0, l / 2, 0], center + [0, 0, l / 2], center - [l / 2, 0, 0], center - [0, l / 2, 0], center - [0, 0, l / 2], ]; polyhedron(points=points, faces=ofaces, convexity=1); } module tetrahedron(points) { polyhedron(points=points, faces=[[1, 2, 3],[0, 1, 3],[0, 2, 1],[0, 3, 2]], convexity=1); } function sumv(v, i=0) = (i + 1 == len(v)? v[i]: v[i] + sumv(v, i + 1)); //function sumsqv(v, i=0) = (i + 1 == len(v)? v[i] * v[i]: v[i] * v[i] + sumsqv(v, i + 1)); function length(v) = sqrt( pow(v[0], 2) + pow(v[1], 2) + pow(v[2], 2)); factor=2; module carveout(points, n) { if (0 != n) { assign(center = sumv(points)/len(points)) { difference() { for (face = ofaces) { tetrahedron([center, (points[face[0]] + points[face[1]]) / 2, (points[face[1]] + points[face[2]]) / 2, (points[face[2]] + points[face[0]]) / 2]); } for (segment = edges) { assign(edge = (points[segment[0]] + points[segment[1]]) / 2 - center) { assign(b = acos(edge[2] / length(edge)), c = (edge[0] == 0)? sign(edge[1]) * 90: (atan(edge[1] / edge[0]) + ((edge[0] > 0)? 0: 180))) { //echo(length(edge), b, c); translate(center) rotate([0, b, c]) cylinder(h=length(edge), r=4); } } } } for (point = points) { carveout([(point * (factor - 1) + points[0]) / factor, (point * (factor - 1) + points[1]) / factor, (point * (factor - 1) + points[2]) / factor, (point * (factor - 1) + points[3]) / factor, (point * (factor - 1) + points[4]) / factor, (point * (factor - 1) + points[5]) / factor], n - 1); } } } } module foo(center, size, n) { points = [ center + [l / 2, 0, 0], center + [0, l / 2, 0], center + [0, 0, l / 2], center - [l / 2, 0, 0], center - [0, l / 2, 0], center - [0, 0, l / 2], ]; difference() { //union() { polyhedron(points=points, faces=ofaces, convexity=1); carveout(points, n); } } //a=[[0,0], [1,1]]; //echo(a); //echo(a+[[2,2],[3,3]]); //l = 90; //l=128; scale(1); //l=256; scale(.5); //l=512; scale(.25); //l=1024; scale(.125); l=2048; scale(.0625) //scale(.5) foo([0, 0, 0], l, 5); // this generates the problem file; takes long time to render :( scale(.5) foo([0, 0, 0], l, 2); // this I don't know if it is problem, but renders faster to give an idea about model