Compare commits
No commits in common. "607fdf8d790df4fc6ec1db9bcc0ab8ca70236450" and "e8dde9987621d11917f6327b8da163d767915488" have entirely different histories.
607fdf8d79
...
e8dde99876
BIN
.Readme.md.swp
BIN
.Readme.md.swp
Binary file not shown.
46
Readme.md
46
Readme.md
@ -10,11 +10,7 @@ The box is designed using library [Fin Base](https://github.com/hrobeers/finbase
|
||||
|
||||

|
||||
|
||||
## Fin profile
|
||||
|
||||
Fin profile is defined using bézier 3 points control
|
||||
|
||||

|
||||
|
||||
## Kitesurf Fins
|
||||
|
||||
@ -24,7 +20,7 @@ Fin profile is defined using bézier 3 points control
|
||||
[Understanding Kitesruf fins](https://24-7boardsports.com/understanding-kitesurf-twintip-board-fins/)
|
||||
|
||||
|
||||
### Measure models
|
||||
## Measure models
|
||||
|
||||
Open web app [at](https://0x00019913.github.io/meshy/) and import it to get the volume.
|
||||
|
||||
@ -35,46 +31,6 @@ To convert 21037 cubic millimeters (mm³) to deciliters (dl), you can use the co
|
||||
Therefore, 21037 cubic millimeters is equivalent to 0.21dl.
|
||||
|
||||
|
||||
### Materials
|
||||
|
||||
|
||||
| Volume | Weight | Fiber Load | Résine |
|
||||
| ------ | ------ | ---------- | ------- |
|
||||
| 100% | x1.4 | 60% | 40% |
|
||||
| 21 cm3 | 29.4g | 17.64 g | 11.76 g |
|
||||
|
||||
|
||||
## Surf fin 10 inch
|
||||
|
||||
|
||||
| Volume | Weight | Fiber Load | Résine |
|
||||
| ------ | ------ | ---------- | ------- |
|
||||
| 100% | x1.4 | 60% | 40% |
|
||||
| 207 cm3 | 290g | 174 g | 116 g |
|
||||
|
||||
#### Pin
|
||||
|
||||
The pin slides into a groove in the US Box fin slot, allowing the fin to move forward or backward to adjust the fin's position for different conditions or board feel.
|
||||
|
||||
US Box require a pin of diameter 4.76mm (3/16 inch) per L 14.28 mm (9/16inch)
|
||||
|
||||
### Screw
|
||||
|
||||
The screw for securing single fins is often 10-32 x ¾” (or 5mm x 19mm).
|
||||
It's usually a slotted screw designed to go through the fin and into the square plate.
|
||||
|
||||
|
||||
- Stainless Steel Longboard Fin Screw & Plate
|
||||
- [3/6Pcs Stainless Steel Surfboard Fin Screw M4 Surf](https://www.aliexpress.com/item/1005005128486923.html) R$30.39
|
||||
- [Copper Pin for 6.5/8/9/9.5/10/12 Inch Surf Fin SUP Fin Water Sports](https://www.aliexpress.com/item/1005003301708931.html) R$ 19.22 + 25.73
|
||||
|
||||
|
||||
### Square Washer (Plate)
|
||||
|
||||
Dimensions: Commonly about ½” x ½” (or 14mm x 14mm), with a thickness of about 0.15" (4mm).
|
||||
This plate spreads the load of the screw over a larger area, ensuring a secure hold.
|
||||
|
||||
|
||||
## Required Material
|
||||
|
||||
- Durcisseur : Correspondant à la résine choisie.
|
||||
|
@ -36,6 +36,7 @@
|
||||
"parts": "all",
|
||||
"piston_depth": "5",
|
||||
"printable": "false",
|
||||
"resin_escape_diameter": "4",
|
||||
"scale_factor": "1",
|
||||
"show_curve_points": "false",
|
||||
"show_debug_layers": "false",
|
||||
@ -82,6 +83,7 @@
|
||||
"pin_dia": "3",
|
||||
"piston_depth": "5",
|
||||
"printable": "true",
|
||||
"resin_escape_diameter": "4",
|
||||
"scale_factor": "1",
|
||||
"screw_dia": "4.5",
|
||||
"screw_pos": "9.5999999999999996",
|
||||
@ -133,6 +135,7 @@
|
||||
"pin_dia": "3",
|
||||
"piston_depth": "5",
|
||||
"printable": "true",
|
||||
"resin_escape_diameter": "4",
|
||||
"scale_factor": "1",
|
||||
"screw_dia": "4.5",
|
||||
"screw_pos": "9.5999999999999996",
|
||||
@ -142,171 +145,6 @@
|
||||
"tab_height": "13",
|
||||
"thick": "9.1999999999999993",
|
||||
"thick_cut": "1"
|
||||
},
|
||||
"New set 4": {
|
||||
"$fn": "64",
|
||||
"base_extra_thickness": "20",
|
||||
"base_tickness": "8",
|
||||
"box_thickness": "9.5999999999999996",
|
||||
"build_box": "false",
|
||||
"build_fin": "false",
|
||||
"build_mold": "true",
|
||||
"draw_profile": "false",
|
||||
"fin_back_angle": "20",
|
||||
"fin_back_height": "30",
|
||||
"fin_back_strength": "30",
|
||||
"fin_back_widthdraw": "20",
|
||||
"fin_base": "130",
|
||||
"fin_counter_angle": "30",
|
||||
"fin_counter_strength": "10",
|
||||
"fin_edge_angle": "30",
|
||||
"fin_edge_strength": "30",
|
||||
"fin_edge_withdraw": "20",
|
||||
"fin_end_angle": "110",
|
||||
"fin_end_strength": "30",
|
||||
"fin_height": "254",
|
||||
"fin_start_angle": "70",
|
||||
"fin_sweep": "25",
|
||||
"fin_thickness": "9",
|
||||
"fin_top_withdraw": "35",
|
||||
"fin_width": "270",
|
||||
"fin_width_tip": "5",
|
||||
"height": "25",
|
||||
"merge_holes_diameter": "6",
|
||||
"mirror_vec": "[1, 1, 0]",
|
||||
"mold_base_height": "10",
|
||||
"mold_extra_width": "15",
|
||||
"mold_part": "top",
|
||||
"mold_piston_height": "10",
|
||||
"mold_top_height": "5",
|
||||
"partition": "high",
|
||||
"parts": "all",
|
||||
"pin_back": "9",
|
||||
"pin_depth": "16.399999999999999",
|
||||
"pin_dia": "3",
|
||||
"piston_depth": "5",
|
||||
"printable": "true",
|
||||
"scale_factor": "1",
|
||||
"screw_dia": "4.5",
|
||||
"screw_pos": "9.5999999999999996",
|
||||
"show_curve_points": "false",
|
||||
"show_debug_layers": "false",
|
||||
"skirt_angle": "80",
|
||||
"start": "[0, 0]",
|
||||
"tab_height": "13",
|
||||
"thick": "9.1999999999999993",
|
||||
"thick_cut": "1"
|
||||
},
|
||||
"New set 5": {
|
||||
"$fn": "64",
|
||||
"base_extra_thickness": "20",
|
||||
"base_tickness": "8",
|
||||
"box_thickness": "9.5999999999999996",
|
||||
"build_box": "false",
|
||||
"build_fin": "true",
|
||||
"build_mold": "false",
|
||||
"draw_profile": "false",
|
||||
"fin_back_angle": "20",
|
||||
"fin_back_height": "30",
|
||||
"fin_back_strength": "30",
|
||||
"fin_back_widthdraw": "20",
|
||||
"fin_base": "130",
|
||||
"fin_counter_angle": "30",
|
||||
"fin_counter_strength": "10",
|
||||
"fin_edge_angle": "30",
|
||||
"fin_edge_strength": "30",
|
||||
"fin_edge_withdraw": "20",
|
||||
"fin_end_angle": "110",
|
||||
"fin_end_strength": "30",
|
||||
"fin_height": "254",
|
||||
"fin_start_angle": "70",
|
||||
"fin_sweep": "25",
|
||||
"fin_thickness": "9",
|
||||
"fin_top_withdraw": "35",
|
||||
"fin_width": "270",
|
||||
"fin_width_tip": "5",
|
||||
"height": "25",
|
||||
"merge_holes_diameter": "6",
|
||||
"mirror_vec": "[1, 1, 0]",
|
||||
"mold_base_height": "10",
|
||||
"mold_extra_width": "15",
|
||||
"mold_part": "all",
|
||||
"mold_piston_height": "10",
|
||||
"mold_top_height": "5",
|
||||
"partition": "none",
|
||||
"parts": "all",
|
||||
"pin_back": "9",
|
||||
"pin_depth": "16.399999999999999",
|
||||
"pin_dia": "3",
|
||||
"piston_depth": "5",
|
||||
"printable": "true",
|
||||
"scale_factor": "1",
|
||||
"screw_dia": "4.5",
|
||||
"screw_pos": "9.5999999999999996",
|
||||
"show_curve_points": "false",
|
||||
"show_debug_layers": "false",
|
||||
"skirt_angle": "80",
|
||||
"start": "[0, 0]",
|
||||
"tab_height": "13",
|
||||
"thick": "9.1999999999999993",
|
||||
"thick_cut": "1",
|
||||
"version": "0.9b"
|
||||
},
|
||||
"New set 6": {
|
||||
"$fn": "64",
|
||||
"base_extra_thickness": "20",
|
||||
"base_tickness": "8",
|
||||
"box_offset": "80",
|
||||
"box_thickness": "9.5999999999999996",
|
||||
"build_box": "false",
|
||||
"build_fin": "false",
|
||||
"build_mold": "false",
|
||||
"draw_profile": "true",
|
||||
"fin_back_angle": "20",
|
||||
"fin_back_height": "30",
|
||||
"fin_back_strength": "30",
|
||||
"fin_back_widthdraw": "20",
|
||||
"fin_base": "130",
|
||||
"fin_counter_angle": "30",
|
||||
"fin_counter_strength": "10",
|
||||
"fin_edge_angle": "30",
|
||||
"fin_edge_strength": "30",
|
||||
"fin_edge_withdraw": "20",
|
||||
"fin_end_angle": "110",
|
||||
"fin_end_strength": "30",
|
||||
"fin_height": "254",
|
||||
"fin_start_angle": "70",
|
||||
"fin_sweep": "25",
|
||||
"fin_thickness": "9",
|
||||
"fin_top_withdraw": "35",
|
||||
"fin_width": "270",
|
||||
"fin_width_tip": "5",
|
||||
"height": "25",
|
||||
"merge_holes_diameter": "6",
|
||||
"mirror_vec": "[1, 1, 0]",
|
||||
"mold_base_height": "10",
|
||||
"mold_extra_width": "15",
|
||||
"mold_part": "all",
|
||||
"mold_piston_height": "10",
|
||||
"mold_top_height": "5",
|
||||
"partition": "none",
|
||||
"parts": "all",
|
||||
"pin_back": "9",
|
||||
"pin_depth": "16.399999999999999",
|
||||
"pin_dia": "3",
|
||||
"piston_depth": "5",
|
||||
"printable": "true",
|
||||
"scale_factor": "1",
|
||||
"screw_dia": "4.5",
|
||||
"screw_pos": "9.5999999999999996",
|
||||
"show_curve_points": "false",
|
||||
"show_debug_layers": "false",
|
||||
"skirt_angle": "80",
|
||||
"start": "[0, 0]",
|
||||
"tab_height": "13",
|
||||
"thick": "9.1999999999999993",
|
||||
"thick_cut": "1",
|
||||
"version": "0.9b"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ mold_extra_width = 15;
|
||||
|
||||
mold_piston_height = 10;
|
||||
|
||||
//resin_escape_diameter = 4;
|
||||
resin_escape_diameter = 4;
|
||||
|
||||
// Diameter for screw holes in mm
|
||||
merge_holes_diameter = 6;
|
||||
@ -134,10 +134,6 @@ pin_back = 9;
|
||||
//thick_cut = 0.001*1000;
|
||||
thick_cut = 1;
|
||||
|
||||
// Offset the box to fit the fin
|
||||
box_offset = 80;
|
||||
|
||||
|
||||
// ---------------------*/
|
||||
/* [Debugging] */
|
||||
// ---------------------*/
|
||||
@ -157,16 +153,12 @@ draw_profile = false;
|
||||
// Rendering parts
|
||||
build_fin = false;
|
||||
build_box = false;
|
||||
build_mold = true;
|
||||
partition = "none"; // [none, low, high]
|
||||
build_mold = true;
|
||||
|
||||
parts = "all"; // [all, top, bottom]
|
||||
|
||||
|
||||
mold_part = "all"; // [all, top, bottom]
|
||||
|
||||
version ="0.9b";
|
||||
|
||||
// Scaling
|
||||
scale_factor = 1.0; // [0.1:0.1:2]
|
||||
|
||||
@ -238,61 +230,125 @@ points = flatten([
|
||||
profile_curve_with_base = translate_path( addBase(asCurve(points,32)),-fin_base/2,0 );
|
||||
profile = translate_path( asCurve(points,32),-fin_base/2,0 );
|
||||
|
||||
//profile_curve_with_base = translate_path( asCurve(points,32),-fin_base/2,0 );
|
||||
//profile_curve_with_base = resample_path(translate_path( asCurve(points,32),-fin_base/2,0 ),64);
|
||||
|
||||
assert(is_path_simple(profile_curve_with_base));
|
||||
|
||||
|
||||
if (show_curve_points)
|
||||
color("Blue")move_copies(profile_curve_with_base) circle($fn=16);
|
||||
|
||||
|
||||
// Draw fin profile
|
||||
if (draw_profile) {
|
||||
//left(425) drawProfile( points, true );
|
||||
|
||||
|
||||
layer0 = expandPath(profile_curve_with_base,-2);
|
||||
layer1 = expandPath(profile_curve_with_base,-8);
|
||||
layer2 = expandPath(profile_curve_with_base,-15);
|
||||
layer3 = expandPath(profile_curve_with_base,-30);
|
||||
layer4 = expandPath(profile_curve_with_base,-40);
|
||||
|
||||
back(10) showDebugPath(layer0);
|
||||
|
||||
|
||||
left(500) {
|
||||
color("Red") polygon(profile_curve_with_base);
|
||||
up(10) polygon(layer0);
|
||||
up(20) color("Yellow") polygon(layer1);
|
||||
up(30) color("Brown") polygon(layer2);
|
||||
}
|
||||
|
||||
layers = [profile_curve_with_base,layer0,layer1,layer2,layer3,layer4];
|
||||
|
||||
left (800) color ("Green") polygon(profile_curve_with_base);
|
||||
|
||||
left (1000) color ("Green") shell(10) polygon(profile_curve_with_base);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// *****************
|
||||
// * Fin Drawing *
|
||||
// *****************
|
||||
if ( build_fin )
|
||||
scale([scale_factor, scale_factor, scale_factor]) {
|
||||
union() {
|
||||
buildCompletFin();
|
||||
left(box_offset) usBox(fin_base+30);
|
||||
}
|
||||
}
|
||||
scale([scale_factor, scale_factor, scale_factor])
|
||||
buildFin( fin_thickness );
|
||||
|
||||
if ( build_box ) {
|
||||
buildBox();
|
||||
}
|
||||
|
||||
/**
|
||||
* Render Mold
|
||||
*/
|
||||
if ( build_mold )
|
||||
difference(){
|
||||
buildMold();
|
||||
if (partition=="low")
|
||||
partitionMask(false);
|
||||
if (partition=="high")
|
||||
partitionMask(true);
|
||||
if ( build_mold ) buildMold();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Build complete fin
|
||||
*/
|
||||
module buildCompletFin() {
|
||||
difference(){
|
||||
buildFin( fin_thickness ); // Fin
|
||||
baseMask(); // Remove extra base
|
||||
buildFin( fin_thickness );
|
||||
//buildBox();
|
||||
// Remove extra base
|
||||
baseMask();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module buildBox() {
|
||||
/*
|
||||
left(80) {
|
||||
xflip() {
|
||||
finfit(fin_base+20, [1,1,0],false,false);
|
||||
}
|
||||
|
||||
//up(20) tab_cut();
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
module buildBoxMold() {
|
||||
|
||||
// To be defined
|
||||
}
|
||||
|
||||
module baseMask() {
|
||||
fwd(OFFSET) cube([fin_base*1.1,base_extra_thickness*1.1,fin_thickness*1.1],anchor=BACK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
module usBoxMask() {
|
||||
left(box_offset)
|
||||
color("Blue")
|
||||
usBox(fin_base+30,thickness = box_thickness+2*OFFSET,drill=false);
|
||||
left(80) color("Blue") usBox(fin_base+30,thickness = box_thickness+2*OFFSET,drill=false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
module bottomSupport() {
|
||||
moldHeight = 10;
|
||||
moldContour = expandPath(profile,mold_extra_width);
|
||||
down(moldHeight)
|
||||
linear_extrude (moldHeight) polygon(moldContour); // bottom support
|
||||
}
|
||||
*/
|
||||
|
||||
module support( part ) {
|
||||
moldHeight = 10;
|
||||
moldContour = expandPath(profile,mold_extra_width);
|
||||
down( (part == "bottom" ? 1 : 0) * moldHeight)
|
||||
linear_extrude (moldHeight) polygon(moldContour); // bottom support
|
||||
}
|
||||
|
||||
/**
|
||||
* Build mold
|
||||
*
|
||||
*/
|
||||
module buildMold() {
|
||||
// Bottom Mold
|
||||
if (mold_part != "top") right( printable ? 120 : 0 ) union() {
|
||||
if (mold_part != "top") {
|
||||
// Fin mold
|
||||
difference() {
|
||||
support(part="bottom");
|
||||
@ -301,8 +357,7 @@ module buildMold() {
|
||||
}
|
||||
// Box mold
|
||||
difference() {
|
||||
left(box_offset)
|
||||
finBoxMold( fin_base+30,part="bottom",skirt=false );
|
||||
left(80) finBoxMold( fin_base+30,part="bottom",skirt=false );
|
||||
// Remove fin
|
||||
buildCompletFin();
|
||||
}
|
||||
@ -310,7 +365,7 @@ module buildMold() {
|
||||
moldSkirt( part="bottom" );
|
||||
}
|
||||
// Top
|
||||
if (mold_part != "bottom") /*up(1* 150)*/ left( printable ? 120 : 0 ) yrot(printable ? 180 : 0 ) union() {
|
||||
if (mold_part != "bottom") up(80) {
|
||||
difference(){
|
||||
support(part="top");
|
||||
usBoxMask();
|
||||
@ -319,37 +374,43 @@ module buildMold() {
|
||||
}
|
||||
// Box mold
|
||||
difference() {
|
||||
left(box_offset)
|
||||
finBoxMold( fin_base+30,part="top",skirt=false );
|
||||
left(80) finBoxMold( fin_base+30,part="top",skirt=false );
|
||||
// Remove fin
|
||||
buildCompletFin();
|
||||
//buildCompletFin();
|
||||
}
|
||||
// Mold skirt
|
||||
difference()
|
||||
{
|
||||
down( fin_thickness * 3 ) moldSkirt( part="top" ); // Inclinded Skirt
|
||||
back(0.65)
|
||||
cube([250,40,9.6],anchor=BACK); // Remove skirt on us box side
|
||||
down( fin_thickness * 3 ) moldSkirt( part="top" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
//up(50) buildCompletFin();
|
||||
|
||||
//left(300) linear_extrude (skirtHeight) polygon(moldSkirtRegion);
|
||||
/*
|
||||
if (mold_part != "top")
|
||||
difference() {
|
||||
case(mold_base_height,true);
|
||||
// Piston
|
||||
down(piston_depth-OFFSET) fwd(20) bottomInsert();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Top Mold
|
||||
if (mold_part != "bottom")
|
||||
up(printable ? 0 : 60) fwd(printable ? fin_height+50 : 0) down(mold_base_height) mirror([0,0,printable ? 1 : 0 ]) {
|
||||
difference() {
|
||||
union() {
|
||||
// case
|
||||
case(mold_top_height,false);
|
||||
// Piston
|
||||
mirror([1,0,0])
|
||||
down(mold_top_height+piston_depth-OFFSET) fwd(20) topPiston();
|
||||
};
|
||||
resin_escape(40);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
module support( part ) {
|
||||
moldHeight = 10;
|
||||
moldContour = expandPath(profile,mold_extra_width);
|
||||
if (part == "bottom") {
|
||||
down( moldHeight )
|
||||
linear_extrude (moldHeight) polygon(moldContour); // bottom support
|
||||
} else if (part == "top") {
|
||||
//linear_extrude (moldHeight) polygon(moldContour); // top support
|
||||
linear_extrude (moldHeight) polygon(profile); // top support
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Build the piston skirt
|
||||
*
|
||||
@ -360,18 +421,32 @@ module moldSkirt( part ){
|
||||
|
||||
box_profile = move([-80,0],profileUS (fin_base+30));
|
||||
finAndBoxProfile = path_merge_collinear(union([box_profile,profile]));
|
||||
moldHeight = fin_thickness * 3;
|
||||
|
||||
up (part=="top" ? moldHeight : 0 )
|
||||
skirt( finAndBoxProfile, side = part ,moldThickness = 3 , angle = skirt_angle, moldDeep = fin_thickness );
|
||||
//if (part == "bottom") {
|
||||
|
||||
skirt( finAndBoxProfile, side = part ,moldThickness = 3 , angle = skirt_angle, moldDeep = fin_thickness );
|
||||
//} else if (part == "top") {
|
||||
|
||||
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
//moldSkirt(part="top");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
module moldJunctionMask(moldThickness = 3,height,angle){
|
||||
|
||||
deviation = opp_ang_to_adj (height,angle);
|
||||
right(moldThickness)
|
||||
left(moldThickness/2)
|
||||
down( OFFSET ) back( moldThickness*1.2 - OFFSET )
|
||||
down(OFFSET)
|
||||
//fwd(60)
|
||||
//back(moldThickness*2-0.5)
|
||||
back(moldThickness*1.2-OFFSET )
|
||||
color("Red")
|
||||
prismoid(
|
||||
size1=[fin_width/2-1.5*moldThickness, moldThickness*3+2*OFFSET],
|
||||
@ -380,7 +455,6 @@ module moldJunctionMask(moldThickness = 3,height,angle){
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
module buildMoldSkirt( height,offset,thickness ) {
|
||||
outside = expandPath(profile,offset);
|
||||
inside = expandPath(profile,offset-thickness);
|
||||
@ -405,27 +479,52 @@ module buildMoldSkirt( height,offset,thickness ) {
|
||||
}
|
||||
|
||||
|
||||
// *****************
|
||||
// * Bottom insert *
|
||||
// *****************
|
||||
module bottomInsert() {
|
||||
debug=true;
|
||||
layer_profile = profile_curve_with_base;
|
||||
skin( [ layer_profile,expandPath(layer_profile,3) ], z=[0,piston_depth], slices=0 )
|
||||
up(OFFSET)
|
||||
buildFinSide(true)
|
||||
;
|
||||
}
|
||||
|
||||
// *****************
|
||||
// * Top piston *
|
||||
// *****************
|
||||
module topPiston() {
|
||||
debug=true;
|
||||
layer_profile = profile_curve_with_base;
|
||||
difference() {
|
||||
skin( [ layer_profile,expandPath(layer_profile,3) ], z=[0,piston_depth], slices=0 );
|
||||
down(OFFSET)
|
||||
buildFinSide(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Build fin
|
||||
*
|
||||
* @param thickness - Thickness of the fin
|
||||
*/
|
||||
module buildFin( thickness ) {
|
||||
union() {
|
||||
if (parts != "bottom" ) buildFinSide( thickness );
|
||||
if (parts != "top" ) buildFinSide( thickness , true );
|
||||
if (parts != "bottom") buildFinSide( thickness );
|
||||
if (parts != "top") buildFinSide( thickness , true );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Build fin side
|
||||
*
|
||||
* @param thickness - Thickness of the surf fin
|
||||
* @param flip - Define it it is top or bottom fin side
|
||||
*
|
||||
* @param flip - Define it it is top or bottom fin side
|
||||
*/
|
||||
module buildFinSide(thickness,flip=false) {
|
||||
|
||||
//profile_curve_with_base1 = subdivide_path (profile_curve_with_base,500);
|
||||
|
||||
//if (false)
|
||||
mirror([0,0,flip ? 1 : 0])
|
||||
color(flip ? "Gray" : "LightGray")
|
||||
ellipse_extrude( thickness / 2 /*,height=2*/,center=false,twist=-7)
|
||||
@ -433,34 +532,14 @@ module buildFinSide(thickness,flip=false) {
|
||||
polygon( profile_curve_with_base);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add base to fin profile
|
||||
*
|
||||
* @param path - Profile of the surf fin
|
||||
*/
|
||||
function addBase(path) = concat(path,[[fin_base,-base_extra_thickness],[0,-base_extra_thickness]]);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Partition mask
|
||||
|
||||
* @param inverse - Side of the cut
|
||||
* @param cut - Cut type
|
||||
*/
|
||||
module partitionMask(inverse = false,cut = "sinewave") {
|
||||
partition_mask(
|
||||
l=fin_width*3, // Length on x axis
|
||||
w=fin_height/2*1.5, // Deepness on y axis
|
||||
h=80, // height on z axis
|
||||
cutpath=cut,
|
||||
inverse=inverse,
|
||||
anchor=FRONT
|
||||
);
|
||||
module resin_escape(length) {
|
||||
color ("Blue") cylinder(h=length, r=resin_escape_diameter/2);
|
||||
}
|
||||
|
||||
|
||||
function addBase(path) = concat(path,[[fin_base,-base_extra_thickness],[0,-base_extra_thickness]]);
|
||||
|
||||
|
||||
/**
|
||||
* Draws a profile based on Bezier path points with optional debug visualization.
|
||||
*
|
||||
@ -474,14 +553,17 @@ module partitionMask(inverse = false,cut = "sinewave") {
|
||||
*/
|
||||
module drawProfile( points,debug = true ){
|
||||
|
||||
text_size=40;
|
||||
|
||||
debugPoint (start, "Start", "Red" ,textSize=text_size , t=[-20,4,0]);
|
||||
debugPoint (top_point, "Top", "Blue" ,textSize=text_size , t=[-5,5,0]);
|
||||
debugPoint (edge_point, "Edge", "Brown" ,textSize=text_size , t=[10,-5,0]);
|
||||
debugPoint (counter_edge_point, "Counter Edge", "Brown" ,textSize=text_size , t=[35,-5,0]);
|
||||
debugPoint (tail_point, "Tail", "Yellow" ,textSize=text_size , t=[8,-5,0]);
|
||||
debugPoint (end_point, "End", "Yellow" ,textSize=text_size , t=[13,4,0]);
|
||||
debugPoint (start, "Start", "Red" );
|
||||
debugPoint (top_point, "Top", "Blue" );
|
||||
debugPoint (edge_point, "Edge", "Brown" );
|
||||
debugPoint (counter_edge_point, "Counter Edge", "Brown" );
|
||||
debugPoint (tail_point, "Tail", "Yellow" );
|
||||
debugPoint (end_point, "End", "Yellow" );
|
||||
|
||||
//pt = [100,0];
|
||||
//pos = bezpath_closest_point(points, pt);
|
||||
//xy = bezpath_points(points,pos[0],pos[1]);
|
||||
|
||||
debug_bezier(points, N=3,width=1.2);
|
||||
}
|
||||
@ -489,19 +571,6 @@ module drawProfile( points,debug = true ){
|
||||
|
||||
|
||||
|
||||
echo ("****************************");
|
||||
echo ("** Build **");
|
||||
echo ("****************************");
|
||||
echo (str("filename :"," surf-fins-10inch-",mold_part,"-",partition,"_",version,".stl"," "));
|
||||
|
||||
// Draw fin profile
|
||||
if (draw_profile) drawProfile(points);
|
||||
|
||||
|
||||
// Show curve points
|
||||
if (show_curve_points)
|
||||
color("Blue")move_copies(profile_curve_with_base) circle($fn=16);
|
||||
|
||||
|
||||
|
||||
|
@ -31,14 +31,12 @@ function handle(point,angle,strength) = [
|
||||
/**
|
||||
* Show Debug point
|
||||
*/
|
||||
module debugPoint(point, id, color,textSize=20,r=1.5,t = [0,0,0]) {
|
||||
module debugPoint(point, id, color,textSize=20,r=1.5) {
|
||||
translate(point) {
|
||||
color(color) sphere(r = r);
|
||||
|
||||
//translate([3, 3, 0.6]) {
|
||||
|
||||
|
||||
translate([textSize/7+t[0], textSize/7+t[1], textSize/10+t[2]]) {
|
||||
translate([textSize/7, textSize/7, textSize/10]) {
|
||||
color("white")
|
||||
scale([0.2, 0.2, 1])
|
||||
linear_extrude(height = 0.1)
|
||||
|
@ -1,6 +1,7 @@
|
||||
|
||||
include <BOSL2/std.scad>
|
||||
include <BOSL2/beziers.scad>
|
||||
include <BOSL2/std.scad>;
|
||||
include <BOSL2/beziers.scad>;
|
||||
|
||||
include <Round-Anything/polyround.scad>
|
||||
|
||||
|
||||
@ -16,6 +17,10 @@ OFFSET=0.01;
|
||||
**/
|
||||
module boxProfileUS( length ,height=23, tabHeight = 8,tabLength = 20, backRounding = 8, backExtra = 10 ) {
|
||||
|
||||
|
||||
echo ("------ height",height);
|
||||
echo ("------ tabHeight",tabHeight);
|
||||
echo ("------ height-tabHeight",height-tabHeight);
|
||||
assert (height-tabHeight,"height-tabHeight should be bigger than 0");
|
||||
|
||||
tabExtra = opp_ang_to_adj(height-tabHeight,45);
|
||||
@ -41,12 +46,7 @@ function profileUS( length,height=23,tabHeight = 8,tabLength = 20, backRounding
|
||||
[ -tabLength , -tabHeight ,1] // 5
|
||||
]);
|
||||
|
||||
/**
|
||||
* US Box
|
||||
*
|
||||
* @param length : Length of the fin base. backExtra and tabLength will be added to have the full length
|
||||
*
|
||||
*/
|
||||
|
||||
module usBox( length, height=23, thickness = 9, tabLength = 20,pinDiameter = 5,pinInset = 8, backExtra = 10,cutReduction = 0.5,screw_diameter=4.5,drill = true, color="Grey" ) {
|
||||
color(color) mirror_copy([0,0,1], offset=-OFFSET) difference() {
|
||||
linear_extrude ( height = thickness/2 ) boxProfileUS( length, tabLength = tabLength, height=height, backExtra=backExtra );
|
||||
@ -69,9 +69,9 @@ module usBoxMold( length, height=23, thickness = 9, moldThickness = 4,tabLength
|
||||
assert (length >0,"length should be bigger than 0");
|
||||
|
||||
moldHeight = thickness + 2 * moldThickness;
|
||||
|
||||
|
||||
skirtHeight = 3 * thickness;
|
||||
echo ("---skirtHeight",skirtHeight);
|
||||
echo ("---part",part);
|
||||
deviation = opp_ang_to_adj (skirtHeight,skirtAngle); // Skirt devitation
|
||||
|
||||
baseInt = profileUS (length);
|
||||
@ -79,66 +79,76 @@ module usBoxMold( length, height=23, thickness = 9, moldThickness = 4,tabLength
|
||||
topInt = offset(baseInt,delta=deviation , chamfer=false, same_length=true );
|
||||
topExt = offset(baseInt,delta=deviation+moldThickness , chamfer=false, same_length=true );
|
||||
|
||||
if ( part == "bottom") {
|
||||
union() {
|
||||
difference() {
|
||||
// Mold
|
||||
down (moldHeight/2)
|
||||
linear_extrude(moldHeight)
|
||||
offset(r= (part=="top" ? 0 : moldThickness))
|
||||
union() {
|
||||
difference() {
|
||||
// Mold
|
||||
{
|
||||
//if ( part == "bottom")
|
||||
|
||||
down (moldHeight/2) linear_extrude(moldHeight)
|
||||
offset(r=moldThickness)
|
||||
boxProfileUS( length, height );
|
||||
|
||||
usBox(length,height,drill=false,color="Red");
|
||||
/*
|
||||
if ( part == "top")
|
||||
|
||||
// Mask Top
|
||||
verticalMask =
|
||||
part == "bottom" ? 0 :
|
||||
part == "top" ? moldHeight :
|
||||
100;
|
||||
debug = false ;
|
||||
|
||||
if (!debug)
|
||||
down( verticalMask )
|
||||
linear_extrude( moldHeight )
|
||||
offset( r = moldThickness*2 )
|
||||
down (moldHeight/2) linear_extrude(moldHeight)
|
||||
offset(r=moldThickness)
|
||||
boxProfileUS( length, height );
|
||||
*/
|
||||
if ( part == "top__" ) {
|
||||
//baseInt = profileUS (length);
|
||||
//baseInt = profileUS (length);
|
||||
//topInt = offset(baseInt,delta=-deviation,chamfer=false,same_length=true);
|
||||
baseInt2 = offset(baseInt,delta=-moldThickness,chamfer=false,same_length=true);
|
||||
topInt2 = offset(baseInt,delta=deviation-moldThickness,chamfer=false,same_length=true);
|
||||
|
||||
difference(){
|
||||
skin([baseInt , topInt ],z=[0,skirtHeight],slices=0);
|
||||
skin([baseInt2 , topInt2 ],z=[thickness/2+moldThickness,skirtHeight+OFFSET],slices=0);
|
||||
}
|
||||
|
||||
/*
|
||||
down (moldHeight/2) linear_extrude(moldHeight)
|
||||
offset(r=moldThickness)
|
||||
boxProfileUS( length, height );
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// US Box to subtract
|
||||
usBox(length,height,drill=false,color="Red");
|
||||
|
||||
// Mask Top
|
||||
verticalMask =
|
||||
part == "bottom" ? 0 :
|
||||
part == "top" ? moldHeight :
|
||||
100;
|
||||
down( verticalMask )
|
||||
linear_extrude( moldHeight )
|
||||
offset( r = moldThickness*2 )
|
||||
boxProfileUS( length, height );
|
||||
|
||||
}
|
||||
|
||||
if ( part == "bottom" ) {
|
||||
//topInt = offset(baseInt,delta=deviation,chamfer=false,same_length=true);
|
||||
if (skirt) difference(){
|
||||
skin([baseExt,topExt],z=[0,skirtHeight],slices=0);
|
||||
skin([baseInt,topInt],z=[0,skirtHeight+OFFSET],slices=0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( part == "top") {
|
||||
difference() {
|
||||
// Top Mold
|
||||
linear_extrude( thickness/2+OFFSET+moldThickness /*moldHeight/2*/ )
|
||||
offset(r=-OFFSET)
|
||||
boxProfileUS( length, height );
|
||||
// Box to subtract
|
||||
usBox(length,height,drill=false,color="Red");
|
||||
if ( part == "top") {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ( false ) {
|
||||
// Bottom
|
||||
down(0) back(0) usBoxMold( 130 ,part="bottom" ,skirt=false );
|
||||
// Top
|
||||
down(-50) back(0) usBoxMold( 130 ,part="top" ,skirt=false );
|
||||
|
||||
down(50) back(0) usBoxMold( 130 ,part="bottom" ,skirt=true );
|
||||
|
||||
|
||||
//down(0) back(0) usBox(130,height=23,drill=false,color="Green");
|
||||
}
|
||||
|
||||
//usBoxMold (130,part="bottom",skirt=false);
|
||||
|
||||
//back (30) usBoxMold (130,part="top",skirt=false);
|
||||
|
||||
|
||||
module finBoxMold( length, finLength=-1, skirtAngle = 80, part="bottom", skirt = true) {
|
||||
@ -150,6 +160,14 @@ module finBoxMold( length, finLength=-1, skirtAngle = 80, part="bottom", skirt =
|
||||
|
||||
}
|
||||
|
||||
//test = profileUS (100);
|
||||
//test2 = offset(test,30);
|
||||
//region1 =
|
||||
//region([test,test2]);
|
||||
//polygon(region1);
|
||||
|
||||
|
||||
|
||||
module thickness_cut(thickness,height) {
|
||||
color("Orange")
|
||||
linear_extrude(thickness)
|
||||
@ -162,13 +180,14 @@ module thickness_cut(thickness,height) {
|
||||
|
||||
|
||||
|
||||
//usBoxMold (130,part="bottom",skirt=false);
|
||||
|
||||
//back (30) usBoxMold (130,part="top",skirt=false);
|
||||
//boxProfileUS( length= 188);
|
||||
|
||||
//down(0) back(0) usBox(130,height=23,drill=false,color="Green");
|
||||
//usBox( 130,drill=false );
|
||||
//usBoxMold( 130,part="top" );
|
||||
|
||||
|
||||
|
||||
if (false )down(50) usBoxMold( 130,part="bottom",skirt=false );
|
||||
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 11 KiB |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user