parent
0c9e6e6a0b
commit
b69a6b9a98
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,27 @@ |
||||
/* |
||||
* Star Adventurer Upgrades - 200mm 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. |
||||
*/ |
||||
|
||||
include <_vixen_dovetail_bar.scad>; |
||||
|
||||
// how long the final bar is to be, in mm |
||||
channel_length = 200; // [20:10:200] |
||||
|
||||
flip_upside_down(channel_height) |
||||
make_vixen_dovetail_bar(channel_length); |
@ -0,0 +1,27 @@ |
||||
/* |
||||
* Star Adventurer Upgrades - 240mm 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. |
||||
*/ |
||||
|
||||
include <_vixen_dovetail_bar.scad>; |
||||
|
||||
// how long the final bar is to be, in mm |
||||
channel_length = 240; // [20:10:200] |
||||
|
||||
flip_upside_down(channel_height) |
||||
make_vixen_dovetail_bar(channel_length); |
@ -0,0 +1,128 @@ |
||||
/* |
||||
* 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; |
||||
|
||||
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); |
||||
side_a = calculate_vixen_angular_offset(height, angle); |
||||
|
||||
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 |
||||
]); |
||||
} |
||||
|
||||
function calculate_vixen_angular_offset(height, angle) = |
||||
let (side_c = height / cos(angle)) // echo(side_c); |
||||
sqrt(pow(side_c, 2) - pow(height, 2)); // echo (side_a); |
Loading…
Reference in new issue