This is a collection of assorted astronomy related parts
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.
 

126 lines
3.5 KiB

/*
* Star Adventurer Upgrades - Vixen Dovetail Bar
*
* Copyright (c) 2021 Steve Cross <flip@foxhollow.cc>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
dis_color="#2f99a7";
channel_height = 15; // mm, actual: 15mm
channel_width = 44; // mm, actual: 44 mm
channel_angle = 15; // degrees, actual: 15°
// how long the final bar is to be, in mm
channel_length = 200; // [20:10:200]
punch_hole_offset = 15;
punch_hole_d = 6.75; // actual: 6.35 mm
punch_head_d = 10; // actual: 9.50 mm
punch_head_h = 7.5; // actual: 6.40 mm
punch_slot_count = 4;
$fn = 360;
// flip_upside_down(channel_height)
make_vixen_dovetail_bar(channel_length);
module make_vixen_dovetail_bar(length, width = channel_width)
{
difference() {
make_base_vixen_dovetail_bar(length);
translate([channel_width/2, 0, 0])
make_all_slots();
}
}
module make_all_slots() {
length = (channel_length - (punch_hole_offset * (punch_slot_count+1))) / punch_slot_count;
// echo (length);
for (i = [1:punch_slot_count]) {
translate([
-punch_head_d/2, // shift to offset the width of the slot
(i*punch_hole_offset) + ((i-1)*length), // lay out lengthwise along the bar
0
])
make_dovetail_slot(length);
}
}
module flip_upside_down(height) {
translate([0, 0, height])
mirror([0, 0, 1])
children();
}
module cylinder2(h, d) {
translate([d/2, d/2, 0])
cylinder(h=h, d=d);
}
module make_dovetail_slot(length) {
translate([punch_head_d/2, punch_head_d/2, 0]) {
hull() {
cylinder(h= channel_height + 2, d= punch_hole_d);
// translate([0, length-punch_hole_d/2, 0])
translate([0, length-punch_head_d, 0])
cylinder(h= channel_height + 2, d= punch_hole_d);
}
translate([0, 0, -1])
hull() {
cylinder(h=punch_head_h+1, d=punch_head_d);
// translate([0, length-punch_hole_d/2, 0])
translate([0, length-punch_head_d, 0])
cylinder(h=punch_head_h+1, d=punch_head_d);
}
}
}
module make_base_vixen_dovetail_bar(length, width = channel_width, height = channel_height, angle = channel_angle, oversize = 0) {
// side_a
// ______
// | /
// | /
// | / side_c
// | /
// |/
// angle_a
//
// side_c = side_b / cos(angle_a)
// side_a = sqrt(sq(side_c) - sq(side_b))
//
side_c=height / cos(angle); // echo(side_c);
side_a = sqrt(pow(side_c, 2) - pow(height, 2)); // echo (side_a);
translate([0, length, 0])
rotate([90, 0, 0])
linear_extrude(height = length)
polygon(points=[
// [x, z]
[0, 0], // bottom left
[side_a, height], // top left
[width-side_a+oversize, height], // top right
[width+oversize, 0] // bottom right
]);
}