From 9d4fa6b330b0c9f402961dbdf918042a5bd663ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Dante=20Ursini?= Date: Sun, 19 Jan 2025 22:46:17 -0300 Subject: [PATCH] Bottom mold for 10inch fin --- Surf-Fins-10inch.json | 8 +-- Surf-Fins-10inch.scad | 115 ++++++++++++++++++++++-------------------- lib/chinook.scad | 10 ++-- 3 files changed, 69 insertions(+), 64 deletions(-) diff --git a/Surf-Fins-10inch.json b/Surf-Fins-10inch.json index df4d03c..3c56ef4 100644 --- a/Surf-Fins-10inch.json +++ b/Surf-Fins-10inch.json @@ -5,8 +5,9 @@ "$fn": "64", "base_extra_thickness": "20", "base_tickness": "8", - "build_box": "true", - "build_fin": "true", + "build_box": "false", + "build_fin": "false", + "build_mold": "true", "draw_profile": "false", "fin_back_angle": "20", "fin_back_height": "30", @@ -29,14 +30,13 @@ "merge_holes_diameter": "6", "mold_base_height": "10", "mold_extra_width": "15", - "mold_part": "all", + "mold_part": "bottom", "mold_piston_height": "10", "mold_top_height": "5", "parts": "all", "piston_depth": "5", "printable": "false", "render_drill_template": "false", - "render_mold": "false", "resin_escape_diameter": "4", "scale_factor": "1", "show_curve_points": "false", diff --git a/Surf-Fins-10inch.scad b/Surf-Fins-10inch.scad index 9d6394c..64488b3 100644 --- a/Surf-Fins-10inch.scad +++ b/Surf-Fins-10inch.scad @@ -148,7 +148,7 @@ draw_profile = false; // Rendering parts build_fin = false; build_box = false; -render_mold = true; +build_mold = true; render_drill_template = false; parts = "all"; // [all, top, bottom] @@ -256,59 +256,9 @@ if (draw_profile) { layers = [profile_curve,layer0,layer1,layer2,layer3,layer4]; - - /* - echo ("profile_curve"); - print_path_points (profile_curve); - echo ("layer0"); - print_path_points (layer0); - */ - - - /* - left(200) { - // Turning a VNF into geometry - vnf = skin(layers,slices=0,z=layerHeights(len(layers),fin_thickness),method="fast_distance"); - - //vnf1 = up(50, p=vnf); - //bent1 = vnf_bend(vnf1, axis="X",r=10); - - vnf2 = vnf_hull(vnf); - vnf_polyhedron(vnf2); - - - // Expanded - - //expanded_vnf = vnf_small_offset(vnf,20); - //back(80) vnf_polyhedron(expanded_vnf); - - - back(380) vnf_polyhedron(vnf_sheet(vnf,-30)); - - - //vnf_polyhedron(vnf); - //vnf_wireframe(vnf); - } - */ - //left(365) polygon( profile_curve ); - - //test = round_corners(polygon(profile_curve), radius=20, closed=false, $fn=72); - left (800) color ("Green") polygon(profile_curve); - left (1000) color ("Green") shell(10) polygon(profile_curve); - - /* - convex_offset_extrude( - bottom = os_circle(r=5), - top=os_circle(r=5), - height=10, - offset="delta", - angle=70 - ) - */ - - + left (1000) color ("Green") shell(10) polygon(profile_curve); } @@ -350,22 +300,54 @@ if ( build_fin ) buildFin( fin_thickness ); if ( build_box ) { - left(80) xflip() finfit(fin_base+20, [1,1,0]); + buildBox(); } /** * Render Mold */ -if ( render_mold ) buildMold(); +if ( build_mold ) buildMold(); if ( render_drill_template ) buildDrillTemplate(); +module buildCompletFin() { + union(){ + buildFin( fin_thickness ); + buildBox(); + } +} + + +module buildBox() { + left(80) xflip() + finfit(fin_base+20, [1,1,0],false,false); +} + + /** * Build mold * */ module buildMold() { - // Bottom mold + + moldContour = expandPath(profile_curve,mold_extra_width); + showDebugPath(moldContour); + moldHeight = 10; + skirtHeight = 30; + buildMoldSkirt(skirtHeight,mold_extra_width,3); + + if (mold_part != "top") { + difference() { + union() { + down(moldHeight) linear_extrude (moldHeight) polygon(moldContour); // bottom + back(5) left(95) cube([20+10,25,moldHeight],anchor=BACK+TOP); // Box shell + }; + buildCompletFin(); + } + } + + //left(300) linear_extrude (skirtHeight) polygon(moldSkirtRegion); + /* if (mold_part != "top") difference() { case(mold_base_height,true); @@ -386,6 +368,29 @@ module buildMold() { resin_escape(40); } } + */ +} +module buildMoldSkirt( height,offset,thickness ) { + outside = expandPath(profile_curve,offset); + inside = expandPath(profile_curve,offset-thickness); + down(height) { + // Skirt + linear_extrude (height) difference() { + polygon(outside); + polygon(inside); + }; + difference() { + //union() { + intersection() { + ycopies(30,10,sp=[-100,0,0]) + cube([fin_width*1.3,thickness,height]); + linear_extrude (height) polygon(outside); + }; + up(height) buildCompletFin(); + } + + + } } /** diff --git a/lib/chinook.scad b/lib/chinook.scad index 18541c4..f29f38c 100644 --- a/lib/chinook.scad +++ b/lib/chinook.scad @@ -1,25 +1,25 @@ -module chinook(length) +module chinook(length,screw = true,pin=true) { difference() { base_cube(length); tab_cut(); - screw_cut(); + if (screw) screw_cut(); back_round_cut(length); - pin_cut(length); + if (pin) pin_cut(length); thickness_cut(length, thick/2); thickness_cut(length, -thick/2); } } -module finfit(base_length, mirror_vec) +module finfit(base_length, mirror_vec,screw = true,pin=true) { front_offset = tab_length; length = base_length + tab_length; echo ("length:",length); mirror(mirror_vec) translate([0,-front_offset, 0]) - chinook(length); + chinook( length, screw ,pin ); } module base_cube(BaseLength)