Here is the OpenScad code:
$fn=75;
rotate([0,0,78.75]) // Rotate for alternative diagonal position on print bed
rotate([0,0,-39.5]) // Rotate union of it all so it fits on print table diagonally in Slic3r
union(){ // union of it all
union(){ // union of X-beams and base plates
translate([-153,0,0])
union(){ // 13th topmost x-beam support
translate([0,0,16])
cube([10,0.8,32],center=true);
translate([0,0,15.05])
cube([0.8,10,30.1],center=true);
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([-126,0,0])
union(){ // 12th x-beam support
translate([0,0,25])
cube([10,0.8,50],center=true);
translate([0,0,21.85])
cube([0.8,10,43.7],center=true);
// Double base plate
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([-98,0,0])
union(){ // 11th x-beam support
translate([0,0,34])
cube([10,0.8,68],center=true);
translate([0,0,32])
cube([0.8,10,64],center=true);
// Double base plate
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([-72,0,0])
union(){ // 10th x-beam support
translate([0,0,43])
cube([10,0.8,86],center=true);
translate([0,0,41.15])
cube([0.8,10,82.3],center=true);
// Double base plate
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([-47,0,0])
union(){ // 9th x-beam support
translate([0,0,49])
cube([10,0.8,98],center=true);
translate([0,0,47.85])
cube([0.8,10,95.7],center=true);
// Double base plate
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([-33,0,0])
union(){ // 8th x-beam support
translate([0,0,49])
cube([10,0.8,98],center=true);
translate([0,0,48])
cube([0.8,10,96],center=true);
// Double base plate
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([-8,0,0])
union(){ // 7th x-beam support
translate([0,0,42])
cube([10,0.8,84],center=true);
translate([0,0,39.25])
cube([0.8,10,78.5],center=true);
// Double base plate
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([18,0,0])
union(){ // 6th x-beam support
translate([0,0,30])
cube([10,0.8,60],center=true);
translate([0,0,26])
cube([0.8,10,52],center=true);
// Double base plate
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([38,0,0])
union(){ // 5th x-beam support
translate([0,0,19])
cube([10,0.8,38],center=true);
translate([0,0,16.2])
cube([0.8,10,32.4],center=true);
// Double base plate
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([57,0,0])
union(){ // 4th x-beam support
translate([0,0,11])
cube([10,0.8,22],center=true);
translate([0,0,8.75])
cube([0.8,10,17.5],center=true);
// Double base plate
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([72.5,0,0])
union(){ //3rd x-beam support
translate([0,0,6.25])
cube([10,0.8,12.5],center=true);
translate([0,0,4.5])
cube([0.8,10,9],center=true);
// Double base plate
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([83.75,0,0])
union(){ // triple support under base
translate([0,0,3.5])
cube([10,0.8,7],center=true);
translate([0,3,3.5])
cube([10,0.8,7],center=true);
translate([0,-3,3.5])
cube([10,0.8,7],center=true);
translate([-4.5,0,2.9])
cube([0.8,10,5.8],center=true);
// Double base plate
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([95.5,0,0])
union(){ // triple support under base
translate([0,0,1.9])
cube([10,0.8,3.8],center=true);
translate([0,3,1.9])
cube([10,0.8,3.8],center=true);
translate([0,-3,1.9])
cube([10,0.8,3.8],center=true);
translate([-4.5,0,1.25])
cube([0.8,10,2.5],center=true);
union(){
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//
translate([105,0,0])
union(){ // mouse ear without support
linear_extrude(height=0.4){
scale([0.9,1.5,0])
circle(7.5);}
linear_extrude(height=0.2){
scale([0.9,1.5,0])
circle(10);}}}
//union(){ // union of sacrificial first tounge for reusable enclosure to be printed with the fin:
//difference(){ // Making the sacrificial tounge.
//scale([159,34,0.3]) // scale([159,34,0.05]) for 5mm high tounge
//linear_extrude([0,0,0.5])
//circle(1);
//scale([157,32,0.3]) // scale([159,34,0.05]) for 5mm high tounge
//linear_extrude([0,0,0.5])
//circle(1);}}
//difference(){ // Closed bottom plate same size as tounge. Differencing outer diameter of tounge from itself with 0.2mm z difference:
//scale([159,34,0.05])
//linear_extrude([0,0,0.5])
//circle(1);
//translate([0,0,0.2]) // lift otherwise identical scaled circle by 0.2mm to make thin base
//scale([159,34,0.05])
//linear_extrude([0,0,0.5])
//circle(1);
//scale([139,14,0.05]) // smaller inner scaled circle
//linear_extrude([0,0,0.5])
//circle(1);// Removing centre of closed bottom to convert it into a “inverted brim”
//} // End of differencing bottom plate.
translate([112,0,124.7]) // move fin and UTFB into position on supports
//rotate([0,-80.5,0]) // rotate fin and UTFB so trailing edge extreme points are level.
//rotate([0,-75,0]) // Rotate so that print volume height is 197.9mm
//rotate([0,-74.5,0]) // Rotate so that print volume height is 199.1mm
//rotate([0,-74.45,0]) // Rotate so that print volume height is 199.25mm
//rotate([0,-74.2,0]) // Rotate so that print volume height is 199.85mm
rotate([0,-73.85,0]) // Rotate so that print volume height is 199.85mm
rotate([90,0,0]) // rotate fin and UTFB
difference(){ // Differencing threaded rods from fin and UTFB. Includes entire rest of code.
union(){ // Union of fin and plug and UTFB to allow differencing of threaded rod holes. Goes to end of UTFB and includes differencing of BSP and pin holes.
resize([0,240,0], auto=true) // resizes Finfoil fin file to 240mm height.
//import(“/media/p/Data/3D_printing_stuff/finFoils/Wanderfalke_2-1-6-2.stl”); //
//import(“/media/p/Data/3D_printing_stuff/finFoils/Wanderfalke_2_1_4_5_v1.1.1-highres.stl”); // High resolution BLEF
//import(“/media/p/Data/3D_printing_stuff/finFoils/Wanderfalke_2_1_v1.1.1-highres.stl”); // High resolution non-BLEF
import(“/media/p/Data/3D_printing_stuff/finFoils/Wanderfalke_2_1_6_3_HR.stl”); // with 1.3mm minimum thickness
//import(“/media/p/Data/3D_printing_stuff/finFoils/Wanderfalke_2-1-6-4.stl”); // with 1.4mm minimum thickness
//import(“/media/p/Data/3D_printing_stuff/finFoils/INSERTNAMEHERE.stl”); // spare slot for later
color(“blue”) // makes base plate blue in preview
translate([-41.25,-2,0]) // translates base plate
cube([77,4,9.2], center=true); // Disable this base plate when printing fin without UTFB. The base plate purpose is to get rid of gaps between rounded UTFB tab edges and bottom of plug.
translate([-121,-22, -4.5]) // Moves tyhe UTFB. Change translate values to move it in place for different fin base lengths. For Wanderfalke_1-9 use translate([-116.385,-22, -4.5])
rotate([0,0,90]) // rotates the UTFB
union(){ // Union of UTFB to allow importing the entire UTFB-tab into another OpenScad file
difference(){ // To remove the BSP holes by ‘differencing’ the UTFB-Mould from it:
rotate([90,0,0]){ // To rotate the UTFB; It was required to allow 2D printing of outline in an earlier development step:
union(){ // union of UTFB to allow rotating
color(“green”,0.5){ // This makes the fin base green in Preview:
minkowski(){ // Minkowski sum three times to round the base edges:
minkowski(){
minkowski(){
linear_extrude (height = 152.9, centre = false, twist = 0) // Linear Extrude length of the fin base is reduced to compensate for elongation due to Minkowski sum. Actual length after Minkowski was 150mm in initial UTFB versions (height=146); reduced to 135mm (height = 131) in Wanderfalke_1-9-cored_UTFB_2-3.scad. For Wanderfalke_2-1 use height = 148 (first versions had 146 but that makes front of base float above print bed)
polygon(points=[[0,3.1],[0,6.9],[1.5,7.1],[19,7.1],[19,2.9],[1.5,2.9]]); // Polygon points brought closer together to compensate for enlargement due to Minkowski sum. Without Minkowski sum use the actual intended size. // 9.2mm wide fin base with small taper at bottom to ease entry into the fin box. // Use these dimensions instead for 9.2mm fin base without taper: polygon(points=[[0,2.9],[0,7.1],[19,7.1],[19,2.9]]);
cylinder(r=1,h=1); } // 3 cylinders, each rotated differently, to round off the fin base edges with the Minkowski Sum function:
rotate([0,90,0])
cylinder(r=1,h=1); }
rotate([90,0,0])
cylinder(r=1,h=1); }
} // defines end of GREEN color for base:
} // end of union to be rotated
} // end of rotate base
// Cylinders for ball spring plungers etc to be differenced:
translate([7,-6,9.1])
cylinder(h = 20, r = 2.5, center = true); // Hole for aft pin
translate([7,-17,9.1]) // Move cylinder cutout for BSP
cylinder(h = 20, r = 4.1, center = true); // First forward BSP:
translate([7,-17,9.1]) // Move cylinder cutout for BSP
cylinder(h = 1.25, r = 4.35, center = true); // First forward BSP outer wide part:
translate([9,-37,9.1])// Move cylinder cutout for BSP
cylinder(h = 20, r = 4.1, center = true); // 2nd BSP:
translate([9,-37,0])// Move cylinder cutout for BSP
cylinder(h = 1.25, r = 4.35, center = true);// 2nd BSP outer wide part
translate([11,-57,9.1])// Move cylinder cutout for BSP
cylinder(h = 20, r = 4.1, center = true);// 3rd
translate([11,-57,9.1])// Move cylinder cutout for BSP
cylinder(h = 1.25, r = 4.35, center = true);// 3rd wide part
//translate([13,-66,9.1])// Move cylinder cutout for BSP
//cylinder(h = 20, r = 4.1, center = true);// 4th
//translate([13,-83,9.1])// Move cylinder cutout for BSP
//cylinder(h = 20, r = 4.1, center = true);// 5th
translate([11,-90,9.1])// Move cylinder cutout for BSP
cylinder(h = 20, r = 4.1, center = true);// 6th
translate([11,-90,0])// Move cylinder cutout for BSP
cylinder(h = 1.25, r = 4.35, center = true);// 6th wide part
translate([9,-110,9.1])// Move cylinder cutout for BSP
cylinder(h = 20, r = 4.1, center = true);// 7th
translate([9,-110,9.1])// Move cylinder cutout for BSP
cylinder(h = 1.25, r = 4.35, center = true);// 7th wide part
translate([7,-130,9.1])// Move cylinder cutout for BSP
cylinder(h = 20, r = 4.1, center = true);// 8th
translate([7,-130,0])// Move cylinder cutout for BSP
cylinder(h = 1.25, r = 4.35, center = true);// 8th wide part
translate([7,-143,9.1])
cylinder(h = 20, r = 2.5, center = true);// Front pin hole.
} // End of differencing BSP holes from the UTFB.
} // End of union of UTFB to allow importing the entire UTFB-tab into another OpenScad file
} // End of union of fin and plug and UTFB to allow differencing of threaded rod holes. Goes to end of UTFB and includes differencing of BSP and pin holes.
// End of UTFB tab
union(){ // Threaded rods holes and internal stabilisers
// Using high tensile steel screws M5 various lengths, with heads 8.4mm diam x 5mm deep
// Available lengths (including 5mm head, then add 3mm to each to make head disappear): 135mm (5); 105mm (3 only); 95mm (7); 85mm (5); 75mm (1); 65mm (4); 45mm (5); 35mm (5); 25mm (5)
// Using stainless steel rods of 5mm or 6mm diameter, any length.
color (“red”){ // making bolt holes and stabiliser holes red in preview for easier editing
translate([0,0,0]) // Moves the union of threaded rod holes. Change the Z value to “4” to temporarily move rod holes out of fin for editing; set to 1.6 to check if sufficient thickness is left between wall and rod hole.
union(){ // Bolt hole cylinders
//translate([-21,-25,0])
//rotate([-90,0,0])
//union(){ // Union of bolt hole 1 (forward):
//cylinder(h =48, r1 = 2.45, r2 = 2.45, center = true/false);
//cylinder(h = 8, r1 = 3.9, r = 4.2, center = true/false);}
translate([-43,-25,0])
rotate([0,0,-17])
rotate([-90,0,0])
//union(){// Bolt hole 2 for 5mm HTS bolt with head:
//cylinder(h =138, r1 = 2.45, r2 = 2.45, center = true/false);
//cylinder(h = 8, r1 = 3.9, r = 4.2, center = true/false);}
//cylinder(h =190, r1 = 2.95, r2 = 2.95, center = true/false); // Bolt hole 2 for 6mm SS threaded rod:
cylinder(h =27.1, r1 = 2.95, r2 = 2.95, center = true/false); // Bolt hole 2 for 6mm SS threaded rod short sleeve:
translate([-52.25,-25,0])
rotate([0,0,-17])
rotate([-90,0,0])
//union(){// Bolt hole 3 for 5mm HTS bolt with head
//cylinder(h = 138, r1 = 2.45, r2 = 2.45, center = true/false);
//cylinder(h = 8, r1 = 3.9, r = 4.2, center = true/false);}
//cylinder(h = 200, r1 = 2.95, r2 = 2.95, center = true/false); // Bolt hole 3 for 6mm SS threaded rod:
cylinder(h = 27.1, r1 = 2.95, r2 = 2.95, center = true/false); // Bolt hole 3 for 6mm SS threaded rod short sleeve:
translate([-61,-25,0])
rotate([0,0,-17])
rotate([-90,0,0])
//union(){// Bolt hole 4 for HTS bolt with head
//cylinder(h = 138, r1 = 2.45, r = 2.45, center = true/false);
//cylinder(h = 8, r1 = 3.9, r = 4.2, center = true/false);
//cylinder(h = 140, r1 = 2.45, r = 2.45, center = true/false); // Bolt hole 4 for 5mm SS threaded rod
cylinder(h = 27.1, r1 = 2.45, r = 2.45, center = true/false);// Bolt hole 4 for 5mm SS threaded rod short sleeve
translate([-77,-25,0])
rotate([0,0,-17])
rotate([-90,0,0])
//union(){// Bolt hole 5 (aft) for HTS bolt with head:
// cylinder(h = 68, r1 = 2.45, r = 2.45, center = true/false);
//cylinder(h = 8, r1 = 3.9, r = 4.2, center = true/false);
//cylinder(h = 70, r1 = 2.45, r = 2.45, center = true/false); // Bolt hole 5 (aft) for 5mm SS threaded rod :
cylinder(h = 27.1, r1 = 2.45, r = 2.45, center = true/false); // Bolt hole 5 (aft) for 5mm SS threaded rod short sleeve:
}
// End of bolt cylinders
union(){// Internal stabilisers to stop fin walls without infill from warping
translate([-105,220,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // distal 7thA internal stabiliser
translate([-125,220,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // distal 7thB internal stabiliser
translate([-100,200,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // distal 7thC internal stabiliser
translate([-80,182,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); //distal 7thD internal stabiliser
translate([-85,213,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // distal 7thE internal stabiliser
translate([-69,195,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 6thA internal stabiliser
translate([-65,215,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 6thB internal stabiliser
translate([-58,160,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 6thC internal stabiliser
translate([-55,180,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 6thD internal stabiliser
translate([-45,205,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 6thE internal stabiliser
translate([-20,190,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 6thF internal stabiliser
translate([-35,183,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 5thA interal stabiliser
translate([-0,180,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 5thB interal stabiliser
translate([-5,160,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 5thC interal stabiliser
translate([15,165,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 5thD interal stabiliser
translate([-25,158,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 4thA interal stabiliser
translate([-13,135,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 4thB interal stabiliser
translate([-19,115,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 4thC interal stabiliser
translate([-17,174,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 4thD interal stabiliser
translate([-28,132,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 3rdA additional internal stabilisers for use with short bolt cylinders
translate([10,120,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 3rdB additional internal stabilisers for use with short bolt cylinders
translate([16,140,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 3rdC additional internal stabilisers for use with short bolt cylinders
translate([-45,134,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 3rdD additional internal stabilisers for use with short bolt cylinders
translate([-38,150,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 3rdE additional internal stabilisers for use with short bolt cylinders
translate([-32,105,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 3rdF additional internal stabilisers for use with short bolt cylinders
translate([-50,105,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 3rdG additional internal stabilisers for use with short bolt cylinders
translate([5,100,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 3rdH additional internal stabilisers for use with short bolt cylinders
translate([-37,80,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 2ndA additional internal stabilisers for use with short bolt cylinders
translate([-3,80,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 2ndB additional internal stabilisers for use with short bolt cylinders
translate([-62,80,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 2ndC additional internal stabilisers for use with short bolt cylinders
translate([-10,57,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 2ndD additional internal stabilisers for use with short bolt cylinders
translate([-75,57,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 2ndE additional internal stabilisers for use with short bolt cylinders
translate([-44,57,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 2ndF additional internal stabilisers for use with short bolt cylinders
translate([-17,33,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 2ndG additional internal stabilisers for use with short bolt cylinders
translate([-50,82,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 2ndH additional internal stabilisers for use with short bolt cylinders
translate([-49,40,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 1stA proximal additional internal stabilisers for use with short bolt cylinders
translate([-22,12,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 1stB proximal additional internal stabilisers for use with short bolt cylinders
translate([-56,17,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 1stC proximal additional internal stabilisers for use with short bolt cylinders
translate([-96,17,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 1stD proximal additional internal stabilisers for use with short bolt cylinders
translate([-88,37,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 1stE proximal additional internal stabilisers for use with short bolt cylinders
translate([-57,62,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 1stF proximal additional internal stabilisers for use with short bolt cylinders
translate([-75,17,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 1stG proximal additional internal stabilisers for use with short bolt cylinders
translate([-68,37,0])
cylinder(h=20, r1=0.055, r2=0.055, center=true); // 1stH proximal additional internal stabilisers for use with short bolt cylinders
}
// End internal stabilisers instead of infill
}
// End red color
}
// End of union of threaded rods holes and internal stabilisers
}
// End of differencing threaded rods from fin and UTFB
}
// End union of it all