Support Chamfering Magnet Holes

Similar to ljbeal's Pull Request.
However, the implementation is completely different.

https://github.com/kennetek/gridfinity-rebuilt-openscad/pull/144
This commit is contained in:
Arthur Moore 2024-04-21 23:34:23 -04:00
parent f222c262fc
commit 32f91a77ca
2 changed files with 32 additions and 8 deletions

View file

@ -117,6 +117,28 @@ module refined_hole() {
} }
} }
/**
* @brief Create a cone given a radius and an angle.
* @param bottom_radius Radius of the bottom of the cone.
* @param angle Angle as measured from the bottom of the cone.
* @param max_height Optional maximum height. Cone will be cut off if higher.
*/
module cone(bottom_radius, angle, max_height=0) {
assert(bottom_radius > 0);
assert(angle > 0 && angle <= 90);
assert(max_height >=0);
height = tan(angle) * bottom_radius;
if(max_height == 0 || height < max_height) {
// Normal Cone
cylinder(h = height, r1 = bottom_radius, r2 = 0, center = false);
} else {
top_angle = 90 - angle;
top_radius = bottom_radius - tan(top_angle) * max_height;
cylinder(h = max_height, r1 = bottom_radius, r2 = top_radius, center = false);
}
}
/** /**
* @brief Create an options list used to configure bin holes. * @brief Create an options list used to configure bin holes.
* @param refined_hole Use gridfinity refined hole type. Not compatible with "magnet_hole". * @param refined_hole Use gridfinity refined hole type. Not compatible with "magnet_hole".
@ -148,7 +170,6 @@ module block_base_hole(hole_options, o=0) {
if(refined_hole) { if(refined_hole) {
assert(!magnet_hole, "magnet_hole is not compatible with refined_hole"); assert(!magnet_hole, "magnet_hole is not compatible with refined_hole");
} }
assert(chamfer == false, "chamfer is not supported yet");
screw_radius = SCREW_HOLE_RADIUS - (o/2); screw_radius = SCREW_HOLE_RADIUS - (o/2);
magnet_radius = MAGNET_HOLE_RADIUS - (o/2); magnet_radius = MAGNET_HOLE_RADIUS - (o/2);
@ -176,7 +197,7 @@ module block_base_hole(hole_options, o=0) {
} }
if(chamfer) { if(chamfer) {
// Not Implemented Yet cone(magnet_radius + MAGNET_HOLE_CHAMFER_ADDITIONAL_RADIUS, MAGNET_HOLE_CHAMFER_ANGLE, magnet_depth);
} }
} }
@ -189,10 +210,10 @@ module block_base_hole(hole_options, o=0) {
//$fa = 8; //$fa = 8;
//$fs = 0.25; //$fs = 0.25;
//block_base_hole(bundle_hole_options( //block_base_hole(bundle_hole_options(
// refined_hole=true, // refined_hole=false,
// magnet_hole=false, // magnet_hole=true,
// screw_hole=false, // screw_hole=true,
// supportless=false, // supportless=true,
// crush_ribs=false, // crush_ribs=true,
// chamfer=false // chamfer=true
//)); //));

View file

@ -50,6 +50,9 @@ MAGNET_HOLE_CRUSH_RIB_INNER_RADIUS = 5.9 / 2;
// Anything 5 or under produces a hole that is not round. // Anything 5 or under produces a hole that is not round.
MAGNET_HOLE_CRUSH_RIB_COUNT = 8; MAGNET_HOLE_CRUSH_RIB_COUNT = 8;
MAGNET_HOLE_CHAMFER_ADDITIONAL_RADIUS = 0.8;
MAGNET_HOLE_CHAMFER_ANGLE = 45;
// **************************************** // ****************************************
// top edge fillet radius // top edge fillet radius