diff --git a/models/core/README.md b/models/core/README.md index aa8f21a..86c6fdb 100644 --- a/models/core/README.md +++ b/models/core/README.md @@ -47,7 +47,7 @@ Open any file in `parts/` with OpenSCAD and use the **Customizer** panel to adju - **`connector.scad`**: Customize dimensions, directions, pull-through axes, feet, and orientation - **`support.scad`**: Customize length and hole configurations -- **`lockpin.scad`**: Customize grip type (standard or no-grip) +- **`lockpin.scad`**: Customize grip type (standard, extended or no-grip) ### Exporting Variants @@ -55,7 +55,7 @@ The `presets/` folder contains modules for batch-exporting all logical variants: - **`connectors.scad`**: Organized collections (standard, feet, pull-through, etc.) - **`supports.scad`**: Various support lengths with different hole configurations -- **`lockpins.scad`**: Standard grip and no-grip variants +- **`lockpins.scad`**: Standard grip, extended and no-grip variants ## 🔧 Core Components @@ -75,6 +75,7 @@ Junction pieces that join supports in multiple directions. ### 3. **Lock Pins** 4mm square pins that secure connectors to supports via tension fit. - Standard grip: Two grip arms for easy insertion/removal +- Extended grip: Two asymmetric grip arms with a dominant outer arm. - No-grip variant: Smooth design for minimal profile - Bidirectional tension hole for secure fit diff --git a/models/core/lib/lockpin.scad b/models/core/lib/lockpin.scad index 7e8a510..ff0769a 100644 --- a/models/core/lib/lockpin.scad +++ b/models/core/lib/lockpin.scad @@ -48,6 +48,7 @@ grip_base_length = grip_thickness_inner + grip_thickness_outer + grip_distance + * Parameters: * grip_type (string, default="standard"): Type of grip for the lock pin. * - "standard": Two grip arms on both sides. + * - "extended": Standard grip with an extended outer arm for improved stability. * - "no_grip": No grip arms. * * Produces: @@ -82,13 +83,14 @@ module lockpin(grip_type = "standard") { * * Creates the grip part of the lock pin. * If grip_type is "no_grip", no grip arms are created. - * If grip_type is "standard", two grip arms are created on both sides. + * If grip_type is "standard", a symmetric two-stage grip is created. + * If grip_type is "extended", standard grip with an extended outer arm for improved stability. * If grip_type is "z_grip", a Z-shaped grip variant is created (not implemented yet). */ module grip(grip_type = "standard") { if (grip_type != "no_grip") { grip_base_dimensions = [lockpin_width_outer, lockpin_height, grip_base_length]; - grip_outer_dimensions = [grip_width, lockpin_height, grip_thickness_outer]; + grip_outer_dimensions = [grip_type == "extended"?grip_width * 1.5:grip_width, lockpin_height, grip_thickness_outer]; grip_inner_dimensions = [grip_width, lockpin_height, grip_thickness_inner]; base_translation = lockpin_prismoid_length + lockpin_endpart_length - lockpin_chamfer - TOLERANCE/2; @@ -96,14 +98,14 @@ module grip(grip_type = "standard") { union() { // Base part of the grip translate([0, 0, -base_translation - grip_base_length / 2]) - cuboid(grip_base_dimensions, chamfer=lockpin_chamfer, except=TOP); + cuboid(grip_base_dimensions, chamfer=lockpin_chamfer, except=TOP); - if(grip_type == "standard") { + if(grip_type == "standard" || grip_type == "extended") { translate([0, 0, -base_translation - grip_base_length + grip_thickness_outer / 2]) - cuboid(grip_outer_dimensions, chamfer=lockpin_chamfer, except=TOP); + cuboid(grip_outer_dimensions, chamfer=lockpin_chamfer, except=TOP); // Inner part of the grip translate([0, 0, -base_translation - grip_base_length + grip_thickness_outer + grip_thickness_inner / 2 + grip_distance]) - cuboid(grip_inner_dimensions, chamfer=lockpin_chamfer, except=TOP); + cuboid(grip_inner_dimensions, chamfer=lockpin_chamfer, except=TOP); } else if (grip_type == "z_grip") { // TODO: Z-Grip variant has only 1 arm on each side but each arm is thicker echo("Z-Grip variant not implemented yet."); diff --git a/models/core/makerworld/connector.scad b/models/core/makerworld/connector.scad index d9bcd5a..a73a253 100644 --- a/models/core/makerworld/connector.scad +++ b/models/core/makerworld/connector.scad @@ -308,7 +308,7 @@ module lockpin(grip_type = "standard") { module grip(grip_type = "standard") { if (grip_type != "no_grip") { grip_base_dimensions = [lockpin_width_outer, lockpin_height, grip_base_length]; - grip_outer_dimensions = [grip_width, lockpin_height, grip_thickness_outer]; + grip_outer_dimensions = [grip_type == "extended"?grip_width * 1.5:grip_width, lockpin_height, grip_thickness_outer]; grip_inner_dimensions = [grip_width, lockpin_height, grip_thickness_inner]; base_translation = lockpin_prismoid_length + lockpin_endpart_length - lockpin_chamfer - TOLERANCE/2; @@ -316,14 +316,14 @@ module grip(grip_type = "standard") { union() { translate([0, 0, -base_translation - grip_base_length / 2]) - cuboid(grip_base_dimensions, chamfer=lockpin_chamfer, except=TOP); + cuboid(grip_base_dimensions, chamfer=lockpin_chamfer, except=TOP); - if(grip_type == "standard") { + if(grip_type == "standard" || grip_type == "extended") { translate([0, 0, -base_translation - grip_base_length + grip_thickness_outer / 2]) - cuboid(grip_outer_dimensions, chamfer=lockpin_chamfer, except=TOP); + cuboid(grip_outer_dimensions, chamfer=lockpin_chamfer, except=TOP); translate([0, 0, -base_translation - grip_base_length + grip_thickness_outer + grip_thickness_inner / 2 + grip_distance]) - cuboid(grip_inner_dimensions, chamfer=lockpin_chamfer, except=TOP); + cuboid(grip_inner_dimensions, chamfer=lockpin_chamfer, except=TOP); } else if (grip_type == "z_grip") { echo("Z-Grip variant not implemented yet."); diff --git a/models/core/makerworld/lockpin.scad b/models/core/makerworld/lockpin.scad index 5dd2a19..a7ceb9c 100644 --- a/models/core/makerworld/lockpin.scad +++ b/models/core/makerworld/lockpin.scad @@ -308,7 +308,7 @@ module lockpin(grip_type = "standard") { module grip(grip_type = "standard") { if (grip_type != "no_grip") { grip_base_dimensions = [lockpin_width_outer, lockpin_height, grip_base_length]; - grip_outer_dimensions = [grip_width, lockpin_height, grip_thickness_outer]; + grip_outer_dimensions = [grip_type == "extended"?grip_width * 1.5:grip_width, lockpin_height, grip_thickness_outer]; grip_inner_dimensions = [grip_width, lockpin_height, grip_thickness_inner]; base_translation = lockpin_prismoid_length + lockpin_endpart_length - lockpin_chamfer - TOLERANCE/2; @@ -316,14 +316,14 @@ module grip(grip_type = "standard") { union() { translate([0, 0, -base_translation - grip_base_length / 2]) - cuboid(grip_base_dimensions, chamfer=lockpin_chamfer, except=TOP); + cuboid(grip_base_dimensions, chamfer=lockpin_chamfer, except=TOP); - if(grip_type == "standard") { + if(grip_type == "standard" || grip_type == "extended") { translate([0, 0, -base_translation - grip_base_length + grip_thickness_outer / 2]) - cuboid(grip_outer_dimensions, chamfer=lockpin_chamfer, except=TOP); + cuboid(grip_outer_dimensions, chamfer=lockpin_chamfer, except=TOP); translate([0, 0, -base_translation - grip_base_length + grip_thickness_outer + grip_thickness_inner / 2 + grip_distance]) - cuboid(grip_inner_dimensions, chamfer=lockpin_chamfer, except=TOP); + cuboid(grip_inner_dimensions, chamfer=lockpin_chamfer, except=TOP); } else if (grip_type == "z_grip") { echo("Z-Grip variant not implemented yet."); diff --git a/models/core/makerworld/support.scad b/models/core/makerworld/support.scad index d5c1c56..b456b57 100644 --- a/models/core/makerworld/support.scad +++ b/models/core/makerworld/support.scad @@ -310,7 +310,7 @@ module lockpin(grip_type = "standard") { module grip(grip_type = "standard") { if (grip_type != "no_grip") { grip_base_dimensions = [lockpin_width_outer, lockpin_height, grip_base_length]; - grip_outer_dimensions = [grip_width, lockpin_height, grip_thickness_outer]; + grip_outer_dimensions = [grip_type == "extended"?grip_width * 1.5:grip_width, lockpin_height, grip_thickness_outer]; grip_inner_dimensions = [grip_width, lockpin_height, grip_thickness_inner]; base_translation = lockpin_prismoid_length + lockpin_endpart_length - lockpin_chamfer - TOLERANCE/2; @@ -318,14 +318,14 @@ module grip(grip_type = "standard") { union() { translate([0, 0, -base_translation - grip_base_length / 2]) - cuboid(grip_base_dimensions, chamfer=lockpin_chamfer, except=TOP); + cuboid(grip_base_dimensions, chamfer=lockpin_chamfer, except=TOP); - if(grip_type == "standard") { + if(grip_type == "standard" || grip_type == "extended") { translate([0, 0, -base_translation - grip_base_length + grip_thickness_outer / 2]) - cuboid(grip_outer_dimensions, chamfer=lockpin_chamfer, except=TOP); + cuboid(grip_outer_dimensions, chamfer=lockpin_chamfer, except=TOP); translate([0, 0, -base_translation - grip_base_length + grip_thickness_outer + grip_thickness_inner / 2 + grip_distance]) - cuboid(grip_inner_dimensions, chamfer=lockpin_chamfer, except=TOP); + cuboid(grip_inner_dimensions, chamfer=lockpin_chamfer, except=TOP); } else if (grip_type == "z_grip") { echo("Z-Grip variant not implemented yet.");