diff --git a/README.md b/README.md index d9640c0..304fd51 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,10 @@ For inserting magnets, check out [the jig](#jig). - [No Magnets](#no-magnets) - [Press-Fit magnets](#press-fit-magnets) - [Jig](#jig) + - [Release slot](#release-slot) - [Glued magnets](#glued-magnets) - [Rounded corner frame](#rounded-corner-frame) + - [Magnet border](#magnet-border) - [Solid frame](#solid-frame) - [Click Latch](#click-latch) - [ClickGroove](#clickgroove) @@ -185,11 +187,6 @@ Press-fit magnets require no glue. The magnets are simply pressed into the pocke Press-fit magnets -On the bottom side of the plate there is a slot so you can push out any inserted magnet with a screwdriver. - - -Press-fit magnets from below - The layers above and below the magnet can be configured using the `magnet_top` and `magnet_bottom` options. Because the distance to the bin magnets is larger, press-fit magnets make for a weaker connection than glue-in magnets. @@ -230,6 +227,17 @@ Pull the pusher back into its original position to release the baseplate. You ca +### Release slot + +On the bottom side of the plate there is a slot so you can push out any inserted magnet with a screwdriver. + + +Press-fit magnets from below + +The width of this slot can be adjusted with the `magnet_release_width` setting. Setting this to 0 disables the release slot. + +For glue-in magnets, there is a hole instead of a slot. The diameter of the hole is also controlled by `magnet_release_width`. + ### Glued magnets Magnets can also be glued in from the top: @@ -252,6 +260,13 @@ By default, the vertical space for the magnet is not fully filled in to save fil Press-fit magnets +#### Magnet border + +To save filament, you can set a lower `magnet_border`: + + +Magnet border + ### Solid frame Using the `magnet_frame_style` option, you can change the magnet layer to be fully filled in. diff --git a/docs/images/edge-puzzle-full-height.png b/docs/images/edge-puzzle-full-height.png index 7318d10..110f78a 100644 Binary files a/docs/images/edge-puzzle-full-height.png and b/docs/images/edge-puzzle-full-height.png differ diff --git a/docs/images/edge-puzzle-multi.png b/docs/images/edge-puzzle-multi.png index 00af6e9..b1becde 100644 Binary files a/docs/images/edge-puzzle-multi.png and b/docs/images/edge-puzzle-multi.png differ diff --git a/docs/images/magnet-border-1.png b/docs/images/magnet-border-1.png new file mode 100644 index 0000000..0eb1043 Binary files /dev/null and b/docs/images/magnet-border-1.png differ diff --git a/docs/images/magnets-glue-in-bottom.png b/docs/images/magnets-glue-in-bottom.png index bc0a0e6..2fbaa94 100644 Binary files a/docs/images/magnets-glue-in-bottom.png and b/docs/images/magnets-glue-in-bottom.png differ diff --git a/docs/images/magnets-glue-in.png b/docs/images/magnets-glue-in.png index 1621228..a54e905 100644 Binary files a/docs/images/magnets-glue-in.png and b/docs/images/magnets-glue-in.png differ diff --git a/docs/images/magnets-press-fit-below.png b/docs/images/magnets-press-fit-below.png index 229eba4..81e0093 100644 Binary files a/docs/images/magnets-press-fit-below.png and b/docs/images/magnets-press-fit-below.png differ diff --git a/docs/images/magnets-solid.png b/docs/images/magnets-solid.png index 932efe3..ba2ebee 100644 Binary files a/docs/images/magnets-solid.png and b/docs/images/magnets-solid.png differ diff --git a/docs/images/thumb-screw-base-magnet.png b/docs/images/thumb-screw-base-magnet.png index 500a5fb..4a2d3a7 100644 Binary files a/docs/images/thumb-screw-base-magnet.png and b/docs/images/thumb-screw-base-magnet.png differ diff --git a/docs/images/thumb-screw-magnet.png b/docs/images/thumb-screw-magnet.png index 345f754..941bbde 100644 Binary files a/docs/images/thumb-screw-magnet.png and b/docs/images/thumb-screw-magnet.png differ diff --git a/editor.toml b/editor.toml index 6787c03..15c236a 100644 --- a/editor.toml +++ b/editor.toml @@ -11,6 +11,7 @@ description-extra-html = """
For detailed documentation, check the README.
Feb 16: I've turned off magnets by default because most people don't use them. If you've saved a design with magnets, you will have to manually turn them on again below.
Feb 21: The do_half parameters have been superseded by the filler parameters. +
Apr 8: Glue-in magnets now have a release slot, which can be disabled by setting magnet_release_width to 0. @@ -72,6 +73,12 @@ display-condition = {js = "magnets"} display-condition = {js = "magnets"} [model.param-metadata.magnet_bottom] display-condition = {js = "magnets"} +[model.param-metadata.magnet_border] +display-condition = {js = "magnets"} +help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#rounded-corner-frame" +[model.param-metadata.magnet_release_width] +display-condition = {js = "magnets"} +help-link = "https://github.com/yawkat/GridFlock/blob/main/README.md#release-slot" [model.tab-metadata."Intersection Puzzle Connector"] control-boolean = "connector_intersection_puzzle" diff --git a/gridflock.scad b/gridflock.scad index 760c0f9..c10d0f2 100644 --- a/gridflock.scad +++ b/gridflock.scad @@ -23,6 +23,10 @@ magnet_height = 2.25; // 0.25 magnet_top = 0.5; // 0.25 // Floor below the magnet. Not structurally important, should be small to minimize filament use magnet_bottom = 0.75; // 0.25 +// Horizontal strength of the frame holding the magnet in place +magnet_border = 2; // 0.5 +// Width of the magnet release slot +magnet_release_width = 3; // 0.5 /* [Click Latch (Experimental)] */ @@ -217,9 +221,9 @@ assert(!thumbscrews || solid_base > 0 || (magnets && magnet_frame_style == _MAGN $fn=40; // dimensions of the magnet extraction slot -_magnet_extraction_dim = [magnet_diameter/2, magnet_diameter/2+2]; +_magnet_extraction_dim = [magnet_release_width, magnet_diameter/2+2]; // dimensions of the magnet extraction slot in negative mode. This is used to cut out slots out of the edge puzzle connector. This is a bit smaller to make the edge puzzle connector less frail -_magnet_extraction_dim_negative = [magnet_diameter/2, magnet_diameter/2]; +_magnet_extraction_dim_negative = [magnet_release_width, magnet_diameter/2]; // actual height of a gridfinity profile with no extra clearance. // gridfinity rebuilt adds extra clearance at the bottom, we cut that out. This is the height for z>0 @@ -243,7 +247,6 @@ _WEST = 3; // distance of each magnet from the side of the base plate grid cell _magnet_location = 0.25 + 2.15 + 0.8 + 4.8; -_magnet_border = 2; // Distance between edge connector pieces, if multiple configured _edge_puzzle_stagger = edge_puzzle_dim.x + 2; @@ -371,10 +374,10 @@ module cell(unit_size=[1, 1], connector=[false, false, false, false], bottom_cha // round corners if (magnet_frame_style == _MAGNET_ROUND_CORNERS) { each_cell_corner(unit_size) { - total_bounds = _magnet_location + magnet_diameter/2 + _magnet_border; + total_bounds = _magnet_location + magnet_diameter/2 + magnet_border; square([_magnet_location, total_bounds]); square([total_bounds, _magnet_location]); - translate([_magnet_location, _magnet_location]) circle(r=magnet_diameter/2+_magnet_border); + translate([_magnet_location, _magnet_location]) circle(r=magnet_diameter/2+magnet_border); } } // if we have a female edge connector here, add a bar for stability (edge_puzzle_magnet_border) @@ -405,16 +408,24 @@ module cell(unit_size=[1, 1], connector=[false, false, false, false], bottom_cha } else { translate([0, 0, -_magnet_level_height + magnet_bottom]) linear_extrude(magnet_height) { circle(d=magnet_diameter); - if (magnet_style == _MAGNET_PRESS_FIT) rotate([0, 0, rot_slot]) translate([-magnet_diameter/2, 0]) square([magnet_diameter, magnet_diameter/2 + _magnet_border]); + if (magnet_style == _MAGNET_PRESS_FIT) rotate([0, 0, rot_slot]) translate([-magnet_diameter/2, 0]) square([magnet_diameter, magnet_diameter/2 + magnet_border]); } } + // magnet extraction slot if (magnet_style == _MAGNET_PRESS_FIT) { - // magnet extraction slot - rotate([0, 0, rot_slot]) translate([0, 0, -_extra_height]) linear_extrude(_extra_height - _magnet_level_height + magnet_bottom + magnet_height) { - extraction_dim = positive ? _magnet_extraction_dim : _magnet_extraction_dim_negative; - translate([-extraction_dim.x/2, -extraction_dim.y]) square(extraction_dim); - translate([0, -extraction_dim.y]) circle(extraction_dim.x/2); - circle(extraction_dim.x/2); + // horizontal slot + extraction_dim = positive ? _magnet_extraction_dim : _magnet_extraction_dim_negative; + if (extraction_dim.x > 0 && extraction_dim.y > 0) { + rotate([0, 0, rot_slot]) translate([0, 0, -_extra_height]) linear_extrude(_extra_height - _magnet_level_height + magnet_bottom + magnet_height) { + translate([-extraction_dim.x/2, -extraction_dim.y]) square(extraction_dim); + translate([0, -extraction_dim.y]) circle(extraction_dim.x/2); + circle(extraction_dim.x/2); + } + } + } else { + // vertical slot + if (magnet_release_width > 0) { + translate([0, 0, -_extra_height]) cylinder(d=magnet_release_width, h=_extra_height); } } }