You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.6 KiB
74 lines
2.6 KiB
// First, include the module
|
|
use <../../pattern.scad>
|
|
|
|
// Define the base shape: a very modern moucharabieh
|
|
module moucharabieh(l = 10, w = 1) {
|
|
// epsilon is an infinitesimally small value that is added to the outter
|
|
// surfaces in order to get rid of the zero thickness artifacts induced
|
|
// by the "difference" operation.
|
|
epsilon = 0.1;
|
|
|
|
difference() {
|
|
// start with a plain square
|
|
square([ l, l ], center=true);
|
|
|
|
// and then dig the holes in it
|
|
union() {
|
|
for(i = [0 : 3]) {
|
|
rotate([ 0, 0, i*90 ])
|
|
union() {
|
|
translate([ l / 2 - w, l / 2 - w])
|
|
square([w + epsilon, w + epsilon]);
|
|
translate([ -l / 2 + 2 * w, l / 2 - w])
|
|
square([ l - 4 * w, w + epsilon ]);
|
|
translate([ -l / 2 + 2 * w, -l / 2 + 2 * w ])
|
|
square([ w, w ]);
|
|
translate([ -l / 2 + 2 * w, -l / 2 + 3 * w, 0 ])
|
|
rotate([ 0, 0, -45 ])
|
|
square([ sqrt(2 * pow(w, 2)), sqrt(pow(l/2 - 3*w, 2) + pow(l / 2 - 3 * w, 2)) - w]);
|
|
polygon(points = [ [ 0, w + sqrt(2 * w) ],
|
|
[ l / 2 - (w + sqrt(2 * w)), l/2],
|
|
[ -l/2 + (w + sqrt(2 * w)), l/2 ] ]);
|
|
}
|
|
}
|
|
rotate([ 0, 0, 45 ]) square([ sqrt(2 * w), sqrt(2 * w) ], center=true);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Instanciate the base shape, once.
|
|
size = 10;
|
|
moucharabieh(l=size);
|
|
|
|
// Define our moves: how the pattern is sprayed
|
|
moves = [
|
|
[ size, 0 ], // For the first move, we will translate on x by two times the radius
|
|
[ 0, size ], // For the second move, we will translate on y by two times the radius
|
|
];
|
|
|
|
// Define the boundaries: the area to spray is defined by a rectangle
|
|
bounding_box = [
|
|
[ 0, 0 ], // Lower left corner
|
|
[ 100, 50 ] // upper right corner
|
|
];
|
|
|
|
translate([ 30, 0, 0 ]) union() {
|
|
// Spray our pattern in the bounding box
|
|
// and extrude it
|
|
linear_extrude(height = 1, center = true)
|
|
spray_pattern(bounding_box, moves)
|
|
moucharabieh(l=size, w=1);
|
|
|
|
// Build a border around the moucharabieh
|
|
border = 5;
|
|
linear_extrude(height = border, center = true) difference() {
|
|
polygon(points = [ bounding_box[0] - [ border, border ],
|
|
[ bounding_box[0].x - border, bounding_box[1].y + border ],
|
|
bounding_box[1] + [ border, border ],
|
|
[ bounding_box[1].x + border, bounding_box[0].y - border ] ]);
|
|
polygon(points = [ bounding_box[0],
|
|
[ bounding_box[0].x, bounding_box[1].y ],
|
|
bounding_box[1],
|
|
[ bounding_box[1].x, bounding_box[0].y ] ]);
|
|
}
|
|
}
|
|
|