module_side = 30; module_inside_diam = 24; module_thickness = 7; epsilon = 0.001; //to make sure the negatives are corrects separate_pieces = 20; //$fn=20; //testing purposes $fn=200; //final rendering module module_plan_cylinder(){ difference(){ cube([module_side+epsilon,module_side+epsilon,module_thickness], center=true); cylinder(module_thickness,d=module_inside_diam, center=true); } } module bi_plan(){ cube([module_side+epsilon,module_side+epsilon,module_thickness], center=true); rotate([90,0,0]) cube([module_side+epsilon,module_side+epsilon,module_thickness], center=true); } module pixel_cylinder(){ module_plan_cylinder(); rotate([90,0,0]) module_plan_cylinder(); } module pixel_sphere(){ difference(){ bi_plan(); sphere(d=module_inside_diam); } } module negative(){ difference(){ cube(module_side, center=true); children(); } } module SeparateChildren(space){ for ( i= [0:1:$children-1]) translate([i*space,0,0]) {children(i);} } module MatrixModule(x_repeat, y_repeat, z_repeat, alternate){ for( i = [0:x_repeat-1] ){ for( j = [0:y_repeat-1] ) { for( k = [0:z_repeat-1] ) { translate([i*module_side, j*module_side, k*module_side]) rotate([0, 0, (((i+j+k)*alternate)%2)*90]) children(); } } } } SeparateChildren(module_side+separate_pieces){ pixel_cylinder(); pixel_sphere(); negative(){pixel_cylinder();} negative(){pixel_sphere();} } //MatrixModule(3,3,3,alternate=1){ // pixel_sphere(); //}