Build your own fin -"3D printable single fin base"

That was meant to go in another thread…

I have not been able to print a mould for casting of a Universal Tough Fin Base.

Scaled down models seem to work, but full scale always has some problem or another related to the nylon material being so iffy.

I added a filament box full of desiccant and a bowden tube to keep the filament dry on the way to the hot-end, that works well, but the nylon still causes grief.

So I’ve come up with a new strategy: Print a mould to make a mould. I tested a number of filaments for compatibility with Silastomer P40 silicone (because it’s fickle and does not set if there are traces of certain chemicals in anything coming into contact with the silicone). The following all seem compatible, as evidenced by the Silastomer P40 setting without leaving any gooey bits on the filaments:

Tauman T-Glase clear; E3D PLA black; E3D Transparent-PLA orange; E3D ABS red; Prusa PLA orange. I did not test the nylons, I’ve got the s**** with them!

So now I’m printing “UTFB-M-22.0-Star_ZH2-120_PLA-B80-EM1.053_0p05Q-AS.gcode”, shown in one of the pictures below in progress, in black PLA. Note the wave pattern occurring in the first layer, it should not be there, one of the weired things about waves popping up everywhere. I’ve seen that a few times before with other prints, it gets covered over by the following layers with some luck. And it only happens in the first layer.

The file name denotes the Slic3r software setting used to create the .gcode file, and it means this:

UniversalToughFinBase Version 22.0 , Starboard side;

Printer setting Z-Hop with retraction 2mm at 120mm/s;

Filament setting for PLA with bed temperature increased to 80degC and Extrusion Modulator of 1.053;

Print settings: 0.05mm layer height with boxes ticked for Quality improvement and Aligned Seams.

You get the idea, all of these are customised settings that I had to learn to tweak, and I’m by no means certain this print is going to work. It’s going to take at least 24hrs to print I think. See screenshot of Slic3r below.

If this Starboard side prints well, then the Port side will follow. Then, I’ll pour Silastomer P40 into each side and should end up with a very exact and high quality silicone split mould for the UTFB. Unlike silicone (and other) moulds created with clay and plaster of Paris as intermediate steps, this split mould will be split **exactly **at the centre line and will have only negative keys, so that nothing gets in the way when filling the split moulds with whatever material. I’ll print the cylinders to go into the key holes later on, they will get inserted just before closing the mould.

Hope this makes sense.

Below is the OpenScad code for the Starboard side of the “Mould to make a mould”.

// UNTESTED

// OpenScad code for Universal Tough Fin Base Mould (UTFB-M)

// The UTFB has position markers for ball spring plungers to make a snap-in fin.

// Purpose is to create a mould for casting of a silicone mould.

// V22.0 adjusts the height of the walls so it is the same as for the Port side of the mould.

// V 22.3 has explanatory text edits tydied up a little bit.

// Reduce the $fn=15 value to 150 for exporting .STL file but leave it lower when working with it in OpenScad.

$fn=15;  

 

 // This ‘difference’ removes thicknes from the bottom of the mould to save material.

difference(){

 union(){

     

// To remove the BSP markers by ‘differencing’ the UTFB-Mould from it:

difference(){

// To rotate the UTFB; It was required to allow 2D printing of outline in an earlier development step:

rotate([90,0,0]){

    

    

// This makes the fin base green in Preview:

color(“green”,0.25){

    

        

// Minkowski sum three times to round the fin base edges:

  minkowski(){

    minkowski(){

        minkowski(){

           

     // Linear Extrude length of the fin base is reduced to compensate for elongation due to Minkowski sum. Actual length after Minkowski is 150mm:

  linear_extrude (height = 146, centre = false, twist = 0)

        

           

// 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]]);

            

polygon(points=[[0,3.1],[0,6.9],[1.5,7.1],[19,7.1],[19,2.9],[1.5,2.9]]);

// 3 cylinders, each rotated differently, to round off the fin base edges with the Minkowski Sum function:

                       

    cylinder(r=1,h=1); }

         

    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:   

    }

       

    

// This makes the ‘hull’ red in Preview:

 color(“red”, 0.5){

     

     

// The Hull function creates the spine on the fin base, by connecting 4 modified spheres and automatically tapers the edges:    

hull(){

    

    

// This moves the entire ‘hull’ to the right position on the fin tab:

 translate([0,4.5,69.5]){  

        

// Forward + proximal sphere in the hull:

    translate([22.5,0,0]){

    rotate([90,0,0])

resize(newsize=[45,60,9])

sphere(r=10); }

    

// Central 9mm thick sphere in the hull, to make the 9mm area at the base bigger:

     translate([22.5,0,25]){

    rotate([90,0,0])

resize(newsize=[45,60,9])

sphere(r=10); }

    

// Aft + proximal sphere in the hull:

    translate([22.5,0,25]){

    rotate([90,0,0])

resize(newsize=[45,60,4])

sphere(r=10); }

    

    

// Tip sphere in the hull:

translate([130,0,0]){

rotate([90,0,0])

resize(newsize=[75,30,4])

sphere(r=10); }}}}}

// Cutting out cylinders for ball spring plungers:

// First forward BSP:

// Move cylinder cutout for BSP

translate([7,-10,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

    

// 2nd BSP:

// Move cylinder cutout for BSP

translate([9,-28,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 3rd

// Move cylinder cutout for BSP

translate([11,-46,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 4th

// Move cylinder cutout for BSP

translate([13,-64,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75

,  center = true);

// 5th

// Move cylinder cutout for BSP

translate([13,-82,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 6th

// Move cylinder cutout for BSP

translate([11,-100,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 7th

// Move cylinder cutout for BSP

translate([9,-118,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 8th

// Move cylinder cutout for BSP

translate([7,-136,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

}

// The cube covering half the UTFB as base of the mould:

color(“blue”,0.3)

translate([-20,-168,-5])

cube([208,190,9.5]); centre=true;

// Side walls for pouring silicone:

color (“green”)

translate([-20,20,-6])

cube([208,5,21]);

color (“green”)

translate([-20,-173,-6])

cube([208,5,21]);

color (“green”)

translate([-20,-173,-6])

cube([5,195,21]);

color (“green”)

translate([183,-173,-6])

cube([5,195,21]);

 

union(){

    

color (“yellow”)

    

translate([-10,10,-1.5])

cylinder(r=2, h=12);

translate([-10,-30,-1.5])

cylinder(r=2, h=12);

translate([-10,-70,-1.5])

cylinder(r=2, h=12);

translate([-10,-110,-1.5])

cylinder(r=2, h=12);

translate([-10,-150,-1.5])

cylinder(r=2, h=12);

 

translate([30,10,-1.5])

cylinder(r=2, h=12);

translate([30,-150,-1.5])

cylinder(r=2, h=12);

translate([70,10,-1.5])

cylinder(r=2, h=12);

translate([70,-150,-1.5])

cylinder(r=2, h=12);

translate([110,10,-1.5])

cylinder(r=2, h=12);

translate([110,-150,-1.5])

cylinder(r=2, h=12);

translate([150,10,-1.5])

cylinder(r=2, h=12);

translate([150,-150,-1.5])

cylinder(r=2, h=12);

translate([180,10,-1.5])

cylinder(r=2, h=12);

translate([180,-150,-1.5])

cylinder(r=2, h=12);

translate([180,-30,-1.5])

cylinder(r=2, h=12);

translate([180,-110,-1.5])

cylinder(r=2, h=12);

}

}

// This makes the base of the mould thinner

color(“blue”,0.3)

translate([-30,-200,-10])

cube([300,300,9.5]); centre=true;

}




The photo shows the second layer covering the wavy pattern of the first layer.

The first layer took almost one hour to print, and there are 15.5mm x 20layers/mm = 310 layers to be printed.

Later layers will print much faster, due to 15% infill setting and because most of the upper layers is of just empty space between the key cylinders and the mould walls.

Hopefully no power failures…I still don’t have a UPS.

 

You’re relentless ! Great thread.

Aahhh, the benefits of waiting…it gves you time to think and then spot the obvious…

Almost 6 hrs into the print, and nearly half a mm thickness done…that’s when I remembered something I had seen in the Slic3r settings: The layer height can be set differently for different parts of the print.

It is of course rather useless to print the 5mm base plate at 0.05mm layer height, but for the layers containing the actual fin base and keys it will hopefully be appropriate.

So below are the setting I will use for the port part of the mould-mould. It will be about 4 times faster for most of the print, and the exposed surfaces should turn out exactly the same …


Using these ‘Settings’ could also be extremely useful for testing how different parameters affect problematic parts of a print. Setting the layer height to ‘zero’ for everything except the section you want to test will let you save all that time and filament that is wasted until the print reaches the difficult part (an overhang, or the fin tip for examples).

I tweaked the setting a little more:

11hrs into the print, 1.9mm done.

Then I stuffed it up. I set the speed to 300% during the infill and then did not turn it back down fast enough at the end of the layer, before the perimeter printing begins again at the opposite end of the printbed.

300% af whatever travel speed for non-print moves is programmed was too much, there were a few loud noises when the stepper motors lost count, and then the printer did no longer know where the printhead was, printing besides the hitherto perfect print.

Oh well, it will probably still finish earlier if I restart it now with the differential setting for layer heights, rather than letting it continue at this snail’s pace.

The next attempt brought some insights into why the ‘waves’ happen in the first layer. Reducing the ‘Flow’ rate or changing the ‘Live adjust Z’ gets rid of the waves.

Unfortunately, the second layer did not attach to the first layer, I’m not sure why exactly. I had made a new .gcode file for the Starboard part of the mould, and set it to 0.3mm / 0.05mm / 0.2mm / 0.05mm at various levels. I adjusted the ‘Flow’ rate and the ‘Live Z’ value during the first layer. Something caused the mess shown below.

I should have looked at my printing notes Mindmap, which says:

Lessons learned:

    Look at layers in SLIC3R before exporting .gcode / printing.

    Make brim wider to allow live z-axis adjustment visually.

    Print at 0.1mm layer height or more, unless needed.

Anyhow, I changed the settings again, using the more standard 0.20mm layer height, and changing it to 0.10mm for the layers where the curved parts of the ‘fin’ are printed. Printing at 0.05mm layer height often goes wrong for me, it’s at the extreme of the printers capabilities.

 



Here is one for the mills of those who want to remain …

That f**ing printer is taking up all of my spare time. And it pretends to give in when I’m about to use one of my really reliable, big, sturdy tools to smash it to pieces…and then it comes up with a new trick to keep me busy doing it’s tidings…my prrrrintioussssss…

Anywhoo, it’s great fun learning to (be used by) use a new tool (don’t forget this is AI in motion, it’s called ‘REPRAP’ for a reason).

So here is a photo from the 'mould for a silicone mould for the UTFB" from a few weeks ago.

Unfortunately the thing warped, and not just in the bottom layer as shown in the secong photo.

That led to a number of experiments, clogging up the printer nozzle badly at times, and then repairing ‘precccioaussss’ again, and again. And so forth.

Cohen died, and Trump got elected since my last post.

And before I start feeling any more lyrical and create competition for Ambrose, I better get on with it. 

 

 


You do a phenomenal job Mr Mik,  I wondered why you hadn’t posted for a while …

 

So I experimented and obsessed and experimented more, and Ambrose may tell you if I’m turning into Don Quichote or not, but I’m still going.

And it’s great fun. 

I have not surfed in 2 + 1/2 months.

That’s because it’s spring and there are no waves etc etc, not at all because printiouss has taken over my life. No way!

It’s time that we began to laugh, and cry, and laugh, and do it all again…

But you are really such a pretty one…

So now I’m working on making an anti-warp build platform. At least, I managed to get it to print more than half-way through it’s 16mm thickness, and maybe it will finish. It’s not the first attempt, and spotting the impossible parts in such a printing object takes a little practice.

If it works, then I’ll merge the (improved) UTFB mould-mould to the top of the anti-warp plate, and start to print it again.

On the up-side, I found a way to pause (PLA only so far) prints for a long time and then resume, which makes large prints possible without turning into a complete Gollum.

In case you want to have a play with my currently running print file (45hrs and it says 65% done), then plonk the below into OpenScad:

You can place bets on if it’s going to work! 

 

// MrMik anti-warp plate 3.0

// Code for OpenScad

 

// Set $fn=100 for rendering and $fn=10 for previewing and editing.

$fn=10;

// Additional 0.15mm rim for first layer, so that no very small parts ruin the whole print by falling off during printing of the first layer::

difference(){

cube([250,210,0.15]);

translate ([7,7,0])

cube ([236, 196, 0.15]);}

// Cube of 250x210x16mm has everything following later removed from it by the difference command:

difference(){

cube([250,210,16]);

// Union of cylinders stacked 3 high to 16mm:

union(){

    

    

// First layer of cylinders:

translate([0,0,3])

union(){

translate([0,3,0])

rotate([0,90,0]){

// First cylinder moved inward 1mm to prevent gap:

translate([0,1,0])    

cylinder(r=3, h=250);

translate([0,17,0])

cylinder(r=3, h=250);

translate([0,34,0])

cylinder(r=3, h=250);

translate([0,51,0])

cylinder(r=3, h=250);

translate([0,68,0])

cylinder(r=3, h=250);

translate([0,85,0])

cylinder(r=3, h=250);

translate([0,102,0])

cylinder(r=3, h=250);

translate([0,119,0])

cylinder(r=3, h=250);

translate([0,136,0])

cylinder(r=3, h=250);

translate([0,153,0])

cylinder(r=3, h=250);

translate([0,170,0])

cylinder(r=3, h=250);

translate([0,187,0])

cylinder(r=3, h=250);

// Last cylinder moved inward 1mm to prevent gap:

translate([0,203,0])

cylinder(r=3, h=250);

}

 

// Second layer of cylinders:

translate([0,6,4.9])

union(){

 translate([0,3,0])

rotate([0,90,0]){

    

cylinder(r=3, h=250);

translate([0,17,0])

cylinder(r=3, h=250);

translate([0,34,0])

cylinder(r=3, h=250);

translate([0,51,0])

cylinder(r=3, h=250);

translate([0,68,0])

cylinder(r=3, h=250);

translate([0,85,0])

cylinder(r=3, h=250);

translate([0,102,0])

cylinder(r=3, h=250);

translate([0,119,0])

cylinder(r=3, h=250);

translate([0,136,0])

cylinder(r=3, h=250);

translate([0,153,0])

cylinder(r=3, h=250);

translate([0,170,0])

cylinder(r=3, h=250);

translate([0,187,0])

cylinder(r=3, h=250);

}

// Third layer of cylinders:

translate([0,6,4.9])

union(){

 translate([0,3,0])

rotate([0,90,0]){

    

// extra cylinder at centre end:

translate ([0,-11,0])

cylinder(r=3, h=250);

    

cylinder(r=3, h=250);

translate([0,17,0])

cylinder(r=3, h=250);

translate([0,34,0])

cylinder(r=3, h=250);

translate([0,51,0])

cylinder(r=3, h=250);

translate([0,68,0])

cylinder(r=3, h=250);

translate([0,85,0])

cylinder(r=3, h=250);

translate([0,102,0])

cylinder(r=3, h=250);

translate([0,119,0])

cylinder(r=3, h=250);

translate([0,136,0])

cylinder(r=3, h=250);

translate([0,153,0])

cylinder(r=3, h=250);

translate([0,170,0])

cylinder(r=3, h=250);

translate([0,187,0])

cylinder(r=3, h=250);

// End of first set of parallel cylinders

}}}}}

 

// Second set of cylinders being rotated 90degrees relative to first set:

translate([250,0,0]){

rotate([0,0,90]){

    

// Union of cylinders stacked 3 high to 16mm:

union(){

    

    

// First layer of cylinders:

translate([0,0,3])

union(){

 translate([0,3,0])

rotate([0,90,0]){

    

// First cylinder moved 1mm inward to prevent gaps:

translate([0,1,0])

cylinder(r=3, h=250);

translate([0,17,0])

cylinder(r=3, h=250);

translate([0,34,0])

cylinder(r=3, h=250);

translate([0,51,0])

cylinder(r=3, h=250);

translate([0,68,0])

cylinder(r=3, h=250);

translate([0,85,0])

cylinder(r=3, h=250);

translate([0,102,0])

cylinder(r=3, h=250);

translate([0,119,0])

cylinder(r=3, h=250);

translate([0,136,0])

cylinder(r=3, h=250);

translate([0,153,0])

cylinder(r=3, h=250);

translate([0,170,0])

cylinder(r=3, h=250);

translate([0,187,0])

cylinder(r=3, h=250);

translate([0,204,0])

cylinder(r=3, h=250);

translate([0,221,0])

cylinder(r=3, h=250);

translate([0,238,0])

cylinder(r=3, h=250);

}

 

// Second layer of cylinders:

translate([0,6,4.9])

union(){

 translate([0,3,0])

rotate([0,90,0]){

    

cylinder(r=3, h=250);

translate([0,17,0])

cylinder(r=3, h=250);

translate([0,34,0])

cylinder(r=3, h=250);

translate([0,51,0])

cylinder(r=3, h=250);

translate([0,68,0])

cylinder(r=3, h=250);

translate([0,85,0])

cylinder(r=3, h=250);

translate([0,102,0])

cylinder(r=3, h=250);

translate([0,119,0])

cylinder(r=3, h=250);

translate([0,136,0])

cylinder(r=3, h=250);

translate([0,153,0])

cylinder(r=3, h=250);

translate([0,170,0])

cylinder(r=3, h=250);

translate([0,187,0])

cylinder(r=3, h=250);

translate([0,204,0])

cylinder(r=3, h=250);

translate([0,221,0])

cylinder(r=3, h=250);

// Last cylinder moved 1mm inward to prevent gap:

translate([0,237,0])

cylinder(r=3, h=250);

}

// Third layer of cylinders:

translate([0,6,4.9])

union(){

 translate([0,3,0])

rotate([0,90,0]){

    

cylinder(r=3, h=250);

translate([0,17,0])

cylinder(r=3, h=250);

translate([0,34,0])

cylinder(r=3, h=250);

translate([0,51,0])

cylinder(r=3, h=250);

translate([0,68,0])

cylinder(r=3, h=250);

translate([0,85,0])

cylinder(r=3, h=250);

translate([0,102,0])

cylinder(r=3, h=250);

translate([0,119,0])

cylinder(r=3, h=250);

translate([0,136,0])

cylinder(r=3, h=250);

translate([0,153,0])

cylinder(r=3, h=250);

translate([0,170,0])

cylinder(r=3, h=250);

translate([0,187,0])

cylinder(r=3, h=250);

translate([0,204,0])

cylinder(r=3, h=250);

translate([0,221,0])

cylinder(r=3, h=250);

// End of 90degree rotated set of parallel cylinders.

}}}}}}}}

 

The ‘Anti-warp plate’ has warped. Only a little bit, but maybe it’s not even finished bending itself into a new shape.

It was stuck firmly to the print bed except for some small areas around the edges, but after removal (which took easily 10 minutes) there is a little convexity in the bottom surface. Less than a mm. I cannot tell if or how much warping there is on the top, because the surface is too rough. I finished the object with a single layer bridging multiple gaps, that makes for a rough surface. I had planned to print something else on top of it, as one continuous piece, had it worked without warping.

The penny dropped when someone made a joke while I was despondently staring at the 325g of wasted plastic: “You just have to leave it on the printer then, hahaha!”

And that’s what I’m going to do!

I have redesigned the ‘Mould-mould’ so it is extra thin. A 0.5mm thick bottom plate, side walls reduced to 2mm instead of 5mm, and the rest left the same. That thin it will twist badly once it is removed from the print bed. So I plan to leave it on the print bed and pour the silicone into it, then leave it to set thoroughly, and then take it off the printer and print the second half of the mould-mould. 

 

Hey Mik, have you considered making the mould-mould smaller by removing the exta ‘nothing’ by the tip of the UTFB?

Less large flat spots=less warping.

Props for persistance, carry on!

That’s a good point, but I think I need some areas of thick silicone mould to allow application of considerable pressure when I eventually pack it with cloth and resin and then squeeze out the excess resin.

If the rim around the UTFB is too thin, then it will be compressed and the fin base comes out too thin.

For now, I hope the extra thin bottom layer will prevent warping. Note how you can see the writing on the print bed through it. The UTFB has completed printing, it’s just building keys and walls now.

Layer settings are the new 0.15mm Optimal setting in the latest Prusa-Slic3r version of Slic3r, with layer height reduced (via Settings) to 0.05mm from Min Z0.5 to Max z 5.15. That’s where the UTFB surface is located.

 


I’ve done the deed.

 

How to print a silicone split mould.

 

It’s looking promising, just like so many times in the last few months…

 

Must make sure the printer is horizontal for this.

 

The surface resolution with a fin lying on it’s side at 0.05mm layer height is not too bad once you have figured out how to do it. Certainly within the reach of achieving a perfect surface with a touch of sanding and a gloss coat of something compatible with the print material. No idea though how the other side of the fin would print using support material.

Maybe it’s possible to print a ‘cap’ or ‘crown’ that fits onto the UTFB with a bit of the right cement.


Looking good Mik. So, now mirror the data for the mould-mould and do the print for the opposite side?

I have ordered some 3D prints for work using support materials and the results are good, usually just a small change in surface finish where the support material touches the primary material.

I understand where we differ on the pressure thing. I was thinking p=f/a and rigid moulds, you are working with silicones and keeping the cases flat and sealed without distortion. My bad, carry on!

Yes, J, the other mould-mould half will be printed next. 

The Silastomer P40 de-moulded like a charm, only one of the key-cylinders got ripped out. 

The photo of the printed PLA mould-mould shows where it has come off the print bed during de-moulding. Those pale white areas mainly around the keys. I think it all stayed on the print bed (except for 2 very small areas adjacent to the fin tab bottom edge corners) until the silcone had set, and the silicone mould is flat and -as always- impressive in it’s reproduction of fine detail. 

As expected, the PLA mould-mould warped promptly when it was taken off the print bed. Not much, but a couple of mm convexity on the bottom plane.

Possible improvements:

Maybe the bottom plate could be a bit thicker than 0.5mm, that might prevent the corner of the fin tab base from lifting it off the print bed. At 1mm thick, it might not yet cause warping to occur in the corners of the mould-mould. However, I’m printing the Port half of the mould-mould with the same settings at the moment, I think this is just cosmetic and not a show-stopper at this stage.



This is the OpenScad code for the Starboard side: UTFB-MM-24.2b_Star.scad

 

// UNTESTED
// OpenScad code for Universal Tough Fin Base Mould (UTFB-M)

// V 24.2 is for pouring silicone while still on print bed. Base plate made thin and walls made thinner.

// V 24 moves the keys and the UTFB within the mould and is not compatible with earlier versions.
// V 23.0 has maximum size base plate to reduce risk of warping.
// The UTFB has position markers for ball spring plungers to make a snap-in fin.
// Purpose is to create a mould for casting of a silicone mould.
// V22.0 adjusts the height of the walls so it is the same as for the Port side of the mould.
// V 22.3 has explanatory text edits.
// Reduce the $fn=15 value to 150 for exporting .STL file but leave it lower when working with it in OpenScad.

$fn=15;  

 

 

 // Adding base plate

//color(“orange”)

//translate([-41,-179,-10.5])

//cube([250,210,1.5]);

 

 

 // This ‘difference’ removes thickness from the bottom of the mould to save material.

difference(){

 union(){

     

// To remove the BSP markers by ‘differencing’ the UTFB-Mould from it:

difference(){

// To rotate the UTFB; It was required to allow 2D printing of outline in an earlier development step:

rotate([90,0,0]){

    

// To move the entire UTFB up inside the mould, but need to move BSP markers separately.

translate([5,0,0])

    

union(){  

    

// This makes the fin base green in Preview:

    color("green",0.25){

    

        

// Minkowski sum three times to round the fin base edges:

  minkowski(){

    minkowski(){

        minkowski(){

           

     // Linear Extrude length of the fin base is reduced to compensate for elongation due to Minkowski sum. Actual length after Minkowski is 150mm:

  linear_extrude (height = 146, centre = false, twist = 0)

        

           

// 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]]);

            

polygon(points=[[0,3.1],[0,6.9],[1.5,7.1],[19,7.1],[19,2.9],[1.5,2.9]]);

// 3 cylinders, each rotated differently, to round off the fin base edges with the Minkowski Sum function:

                       

    cylinder(r=1,h=1); }

         

    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:   

    }

       

    

// This makes the ‘hull’ red in Preview:

 color(“red”, 0.5){

     

     

// The Hull function creates the spine on the fin base, by connecting 4 modified spheres and automatically tapers the edges:    

hull(){

    

    

// This moves the entire ‘hull’ to the right position on the fin tab:

 translate([0,4.5,69.5]){  

        

// Forward + proximal sphere in the hull:

    translate([22.5,0,0]){

    rotate([90,0,0])

resize(newsize=[45,60,9])

sphere(r=10); }

    

// Central 9mm thick sphere in the hull, to make the 9mm area at the base bigger:

     translate([22.5,0,25]){

    rotate([90,0,0])

resize(newsize=[45,60,9])

sphere(r=10); }

    

// Aft + proximal sphere in the hull:

    translate([22.5,0,25]){

    rotate([90,0,0])

resize(newsize=[45,60,4])

sphere(r=10); }

    

    

// Tip sphere in the hull:

translate([130,0,0]){

rotate([90,0,0])

resize(newsize=[75,30,4])

sphere(r=10); }}}}}

}

// moving BSP markers along with the UTFB inside the mould

translate([5,0,0])

// union to move all BSP markers together

union(){

// Cutting out cylinders for ball spring plungers:

// First forward BSP:

// Move cylinder cutout for BSP

translate([7,-10,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

    

// 2nd BSP:

// Move cylinder cutout for BSP

translate([9,-28,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 3rd

// Move cylinder cutout for BSP

translate([11,-46,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 4th

// Move cylinder cutout for BSP

translate([13,-64,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75

,  center = true);

// 5th

// Move cylinder cutout for BSP

translate([13,-82,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 6th

// Move cylinder cutout for BSP

translate([11,-100,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 7th

// Move cylinder cutout for BSP

translate([9,-118,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 8th

// Move cylinder cutout for BSP

translate([7,-136,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

}

}

// The cube covering half the UTFB as base of the mould:

color(“blue”,0.3)

translate([-20,-168,-5])

cube([208,190,9.5]); centre=true;

// Side walls for pouring silicone:

color (“green”)

translate([-20,20,-6])

cube([208,2,21]);

color ("green")

translate([-20,-170,-6])

cube([208,2,21]);

color ("green")

translate([-20,-170,-6])

cube([2,192,21]);

color ("green")

translate([186,-170,-6])      

cube([2,192,21]);

 
// Key cylinders for both parts of the split mould

union(){

    

color (“yellow”)

// First row below base of UTFB  

translate([-6,10,-1.5])

cylinder(r=2, h=12);

translate([-6,-32,-1.5])

cylinder(r=2, h=12);

translate([-6,-74,-1.5])

cylinder(r=2, h=12);

translate([-6,-116,-1.5])

cylinder(r=2, h=12);

translate([-6,-158,-1.5])

cylinder(r=2, h=12);

// 2nd row

translate([29,10,-1.5])

cylinder(r=2, h=12);

translate([29,-158,-1.5])

cylinder(r=2, h=12);

// 3rd row

translate([68,10,-1.5])

cylinder(r=2, h=12);

translate([68,-158,-1.5])

cylinder(r=2, h=12);

// 4th row

translate([107,10,-1.5])

cylinder(r=2, h=12);

translate([107,-158,-1.5])

cylinder(r=2, h=12);

// 5th row

translate([140,5,-1.5])

cylinder(r=2, h=12);

translate([140,-153,-1.5])

cylinder(r=2, h=12);

// 6th row

translate([160,-10,-1.5])

cylinder(r=2, h=12);

translate([170,-35,-1.5])

cylinder(r=2, h=12);

translate([170,-105,-1.5])

cylinder(r=2, h=12);

translate([160,-135,-1.5])

cylinder(r=2, h=12);

}

}
// This makes the base of the mould thinner

color(“blue”,0.3)

translate([-30,-200,-11])

cube([300,300,15]); centre=true;

}

 

And the Port side: UTFB-MM-24.2b-Port.scad

Sorry I have not cleaned up the OpenScad code, lots of rubbish left in there created while developing it.

It’s pretty clumsy code, but it does the job (provided the two halves actually fit together after printing!)

 
// V24.2b is aimed at pouring silicone while remaining on the print bed

//  base plate made thinner and walls thinner.

// UTFB V 23.0 adds maximum size base plate to V 21.7, to reduce risk of warping.
// V 24 moves the keys and the UTFB within the mould and is not compatible with earlier versions.
// UTFB 20.1 is showing only the UTFB but the below code has all the intructions to make half-UTFB's or moulds out of it.
// Universal Tough Fin Base 19.2 has taken the UTFB out of UTFB-M-A_19.2
// Purpose is to create patterns for silicone mould making.

// v 19.5 adds the markers for BSPs back in

$fn=15;  

 

// Adding base plate

//color(“yellow”)

//translate([-41,-179,8])

//cube([250,210,1.5]);

 

difference(){

 union(){

// To remove the BSP markers by ‘differencing’ the UTFB-Mould from it:

difference(){

// To rotate the UTFB; It was required to allow 2D printing of outline in an earlier development step:

rotate([90,0,0]){

 

// To move the entire UTFB up inside the mould, but need to move BSP markers separately in Starboard part only.

translate([5,0,0])

    

union(){

    

// This makes the fin base green in Preview:

color(“green”,0.25){

    

        

// Minkowski sum three times to round the base edges:

  minkowski(){

    minkowski(){

        minkowski(){

           

          

// Linear Extrude length of the fin base is reduced to compensate for elongation due to Minkowski sum. Actual length after Minkowski is 150mm:

  linear_extrude (height = 146, centre = false, twist = 0)

           

           

// 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]]);

            

polygon(points=[[0,3.1],[0,6.9],[1.5,7.1],[19,7.1],[19,2.9],[1.5,2.9]]);

// 3 cylinders, each rotated differently, to round off the fin base edges with the Minkowski Sum function:

                       

    cylinder(r=1,h=1); }

         

    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:   

    }

       

    

// This makes the ‘hull’ red in Preview:

 color(“red”, 0.5){

     

     

     

// The Hull function creates the spine on the fin base, by connecting 4 modified spheres and automatically tapers the edges:    

hull(){

    

    

// This moves the entire ‘hull’ to the right position on the fin tab:

 translate([0,4.5,69.5]){  

        

// Forward + proximal sphere in the hull:

    translate([22.5,0,0]){

    rotate([90,0,0])

resize(newsize=[45,60,9])

sphere(r=10); }

    

// Central 9mm thick sphere in the hull, to make the 9mm area at the base bigger:

     translate([22.5,0,25]){

    rotate([90,0,0])

resize(newsize=[45,60,9])

sphere(r=10); }

    

// Aft + proximal sphere in the hull:

    translate([22.5,0,25]){

    rotate([90,0,0])

resize(newsize=[45,60,4])

sphere(r=10); }

    

    

// Tip sphere in the hull:

translate([130,0,0]){

rotate([90,0,0])

resize(newsize=[75,30,4])

sphere(r=10); }}}}}

}

// Cutting out cylinders for ball spring plungers:

// First forward BSP:

// Move cylinder cutout for BSP

translate([7,-10,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

    

// 2nd BSP:

// Move cylinder cutout for BSP

translate([9,-28,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 3rd

// Move cylinder cutout for BSP

translate([11,-46,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 4th

// Move cylinder cutout for BSP

translate([13,-64,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75

,  center = true);

// 5th

// Move cylinder cutout for BSP

translate([13,-82,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 6th

// Move cylinder cutout for BSP

translate([11,-100,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 7th

// Move cylinder cutout for BSP

translate([9,-118,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

// 8th

// Move cylinder cutout for BSP

translate([7,-136,9.1])

// cylinder for BSP

cylinder(h = 1, r = 0.75,  center = true);

}
// The cube covering half the UTFB as base of the mould:

color(“blue”,0.3)

translate([-20,-168,4.5])

cube([208,190,9.5]); centre=true;

// Side walls for pouring silicone:

color (“green”)

translate([-20,20,-6])

cube([208,2,20]);

color ("green")

translate([-20,-170,-6])

cube([208,2,20]);

color ("green")

translate([-20,-170,-6])

cube([2,192,20]);

color ("green")

translate([186,-170,-6])

cube([2,192,20]);

// Key cylinders for both parts of the split mould

union(){

    

color (“yellow”)

// First row below base of UTFB  

translate([-6,10,-1.5])

cylinder(r=2, h=12);

translate([-6,-32,-1.5])

cylinder(r=2, h=12);

translate([-6,-74,-1.5])

cylinder(r=2, h=12);

translate([-6,-116,-1.5])

cylinder(r=2, h=12);

translate([-6,-158,-1.5])

cylinder(r=2, h=12);

// 2nd row

translate([29,10,-1.5])

cylinder(r=2, h=12);

translate([29,-158,-1.5])

cylinder(r=2, h=12);

// 3rd row

translate([68,10,-1.5])

cylinder(r=2, h=12);

translate([68,-158,-1.5])

cylinder(r=2, h=12);

// 4th row

translate([107,10,-1.5])

cylinder(r=2, h=12);

translate([107,-158,-1.5])

cylinder(r=2, h=12);

// 5th row

translate([140,5,-1.5])

cylinder(r=2, h=12);

translate([140,-153,-1.5])

cylinder(r=2, h=12);

// 6th row

translate([160,-10,-1.5])

cylinder(r=2, h=12);

translate([170,-35,-1.5])

cylinder(r=2, h=12);

translate([170,-105,-1.5])

cylinder(r=2, h=12);

translate([160,-135,-1.5])

cylinder(r=2, h=12);

}

}

// This makes the base of the mould thinner

color(“blue”,0.3)

translate([-30,-200,5])

cube([300,300,15]); centre=true;

}