Add dovetails.scad.
This commit is contained in:
parent
af6d973de0
commit
078f9eb929
1 changed files with 76 additions and 0 deletions
76
voussoir/dovetails.scad
Normal file
76
voussoir/dovetails.scad
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
ZFIGHT = 0.001;
|
||||||
|
|
||||||
|
module dovetails(dovetail_width, dovetail_height, count, clearance)
|
||||||
|
{
|
||||||
|
centering = ((count-1) * dovetail_width / 2);
|
||||||
|
for (index=[0:count-1])
|
||||||
|
{
|
||||||
|
x_off = (index * dovetail_width) - centering;
|
||||||
|
translate([x_off, 0])
|
||||||
|
intersection()
|
||||||
|
{
|
||||||
|
trapezoid(
|
||||||
|
upper_width=(dovetail_width * 2 / 3 - clearance),
|
||||||
|
lower_width=(dovetail_width * 1 / 3 - clearance),
|
||||||
|
height=dovetail_height
|
||||||
|
);
|
||||||
|
|
||||||
|
// Masks off the clearance from the top side.
|
||||||
|
translate([0, -clearance/2])
|
||||||
|
square([dovetail_width, dovetail_height - clearance], center=true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module dovetail_block(block_width, block_height, dovetail_width, dovetail_height, clearance=0)
|
||||||
|
{
|
||||||
|
module mask()
|
||||||
|
{
|
||||||
|
square([block_width, block_height], center=true);
|
||||||
|
}
|
||||||
|
module main_block()
|
||||||
|
{
|
||||||
|
w = block_width;
|
||||||
|
h = block_height - (2 * dovetail_height);
|
||||||
|
square([w, h], center=true);
|
||||||
|
}
|
||||||
|
module upper_dovetails()
|
||||||
|
{
|
||||||
|
count = ceil(block_width / dovetail_width);
|
||||||
|
y = (block_height - dovetail_height) / 2;
|
||||||
|
translate([0, y - ZFIGHT])
|
||||||
|
dovetails(dovetail_width, dovetail_height, count, clearance);
|
||||||
|
}
|
||||||
|
module lower_dovetails()
|
||||||
|
{
|
||||||
|
count = ceil(block_width / dovetail_width) + 1;
|
||||||
|
y = (block_height - dovetail_height) / 2;
|
||||||
|
translate([0, -(y - ZFIGHT)])
|
||||||
|
mirror([0, 1])
|
||||||
|
dovetails(dovetail_width, dovetail_height, count, clearance);
|
||||||
|
}
|
||||||
|
intersection()
|
||||||
|
{
|
||||||
|
union()
|
||||||
|
{
|
||||||
|
main_block();
|
||||||
|
upper_dovetails();
|
||||||
|
lower_dovetails();
|
||||||
|
}
|
||||||
|
|
||||||
|
mask();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module trapezoid(upper_width, lower_width, height)
|
||||||
|
{
|
||||||
|
x1 = upper_width / 2;
|
||||||
|
x2 = lower_width / 2;
|
||||||
|
y1 = height / 2;
|
||||||
|
polygon([
|
||||||
|
[-x1, y1],
|
||||||
|
[x1, y1],
|
||||||
|
[x2, -y1],
|
||||||
|
[-x2, -y1]
|
||||||
|
]);
|
||||||
|
}
|
Loading…
Reference in a new issue