Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion gridfinity_basic_cup.scad
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@ floor_thickness = 0.7;
cavity_floor_radius = -1;// .1
// Efficient floor option saves material and time, but the internal floor is not flat
efficient_floor = "off";//[off,on,rounded,smooth]
// Limit of the efficient floor. -1 will disable the limit, -2 limit to be floor thickness + magnet depth.
efficient_floor_limit = -1; // 0.1
// AKA half pitch. Enable to subdivide bottom pads to allow sub-cell offsets
sub_pitch = 1; //[1:"disabled",2:"half pitch",3:"third pitch",4:"quarter pitch"]
// Removes the internal grid from base the shape
Expand Down Expand Up @@ -356,7 +358,8 @@ gridfinity_cup(
minimumPrintablePadSize=minimum_printable_pad_size,
flatBaseRoundedRadius = flat_base_rounded_radius,
flatBaseRoundedEasyPrint = flat_base_rounded_easyPrint,
alignGrid = [align_grid_x, align_grid_y]
alignGrid = [align_grid_x, align_grid_y],
efficientFloorLimit = efficient_floor_limit
),
wall_thickness=wall_thickness,
vertical_chambers = ChamberSettings(
Expand Down
29 changes: 21 additions & 8 deletions modules/module_gridfinity_cup.scad
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ default_cavity_floor_radius = -1;
default_hole_overhang_remedy = 2;
// Save material with thinner floor
default_efficient_floor = "off";//["off","on","rounded","smooth"]
default_efficient_floor_limit = -1;
// Remove floor to create a spacer
default_spacer = false;
// Half-pitch base pads for offset stacking
Expand Down Expand Up @@ -254,6 +255,7 @@ module gridfinity_cup(
floorThickness = default_floor_thickness,
cavityFloorRadius = default_cavity_floor_radius,
efficientFloor=default_efficient_floor,
efficientFloorLimit = default_efficient_floor_limit,
subPitch=default_sub_pitch,
flatBase=default_flat_base,
spacer=default_spacer),
Expand Down Expand Up @@ -1378,11 +1380,12 @@ module basic_cavity(num_x, num_y, num_z,
cupBase_settings[iCupBase_ScrewSize][iCylinderDimension_Height]);
hasCornerAttachments = magnet_diameter > 0 || screw_depth > 0;
efficientFloorGridHeight = max(magnetCoverHeight,gfBaseHeight())+floor_thickness;
efficient_floor_limit = cupBase_settings[iCupBase_EfficientFloorLimit];
if(env_help_enabled("trace")) echo("basic_cavity", efficient_floor=cupBase_settings[iCupBase_EfficientFloor], efficientFloorGridHeight=efficientFloorGridHeight, floor_thickness=floor_thickness);
difference(){
tz(-fudgeFactor)
cube([num_x*env_pitch().x, num_y*env_pitch().y, efficientFloorGridHeight]);

difference(){
efficient_floor_grid(
num_x, num_y,
Expand All @@ -1393,10 +1396,11 @@ module basic_cavity(num_x, num_y, num_z,
efficientFloorGridHeight=efficientFloorGridHeight,
align_grid = cupBase_settings[iCupBase_AlignGrid],
margins=q);

//Screw and magnet covers required for efficient floor
if(hasCornerAttachments)
gridcopycorners(num_x, num_y, magnetPosition, box_corner_attachments_only)

//Screw magnet covers and Limit required for efficient floor
union(){
if(hasCornerAttachments)
gridcopycorners(num_x, num_y, magnetPosition, box_corner_attachments_only)
let(magnet_size=cupBase_settings[iCupBase_MagnetSize])
EfficientFloorAttachmentCaps(
grid_copy_corner_index = $gcci,
Expand All @@ -1407,9 +1411,18 @@ module basic_cavity(num_x, num_y, num_z,
//if magnet is captive,
wall_thickness =
((cupBase_settings[iCupBase_NormalisedMagnetEasyRelease] == MagnetEasyRelease_inner && cupBase_settings[iCupBase_MagnetCaptiveHeight] == 0)
|| (cupBase_settings[iCupBase_MagnetEasyRelease] != MagnetEasyRelease_off && cupBase_settings[iCupBase_MagnetSideAccess]))
? wall_thickness*2
: wall_thickness );
|| (cupBase_settings[iCupBase_MagnetEasyRelease] != MagnetEasyRelease_off && cupBase_settings[iCupBase_MagnetSideAccess]))
? wall_thickness*2
: wall_thickness );

if(efficient_floor_limit != -1)
{
efficient_floor_limit_height = efficient_floor_limit == -2 ? magnetCoverHeight + floor_thickness + 0.01 : efficient_floor_limit;
cube([num_x*env_pitch().x,num_y*env_pitch().y, efficient_floor_limit_height]);


}
}
}
}
}
Expand Down
15 changes: 10 additions & 5 deletions modules/module_gridfinity_cup_base.scad
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ iCupBase_AlignGrid=17;
iCupBase_MagnetSideAccess=18;
iCupBase_MagnetCrushDepth=19;
iCupBase_MagnetChamfer=20;
iCupBase_EfficientFloorLimit=21;

iCylinderDimension_Diameter=0;
iCylinderDimension_Height=1;
Expand Down Expand Up @@ -108,7 +109,8 @@ function CupBaseSettings(
magnetCrushDepth = 0,
magnetChamfer = 0,
alignGrid = ["near", "near"],
magnetSideAccess = false
magnetSideAccess = false,
efficientFloorLimit = -1
) =
let(
magnetSize =
Expand Down Expand Up @@ -147,13 +149,14 @@ function CupBaseSettings(
alignGrid,
magnetSideAccess,
magnetCrushDepth,
magnetChamfer
magnetChamfer,
efficientFloorLimit
],
validatedResult = ValidateCupBaseSettings(result)
) validatedResult;

function ValidateCupBaseSettings(settings, num_x, num_y) =
assert(is_list(settings) && len(settings) == 21, typeerror_list("CupBase Settings", settings, 19))
assert(is_list(settings) && len(settings) == 22, typeerror_list("CupBase Settings", settings, 19))
assert(is_list(settings[iCupBase_MagnetSize]) && len(settings[iCupBase_MagnetSize])==2, "CupBase Magnet Setting must be a list of length 2")
assert(is_list(settings[iCupBase_CenterMagnetSize]) && len(settings[iCupBase_CenterMagnetSize])==2, "CenterMagnet Magnet Setting must be a list of length 2")
assert(is_list(settings[iCupBase_ScrewSize]) && len(settings[iCupBase_ScrewSize])==2, "ScrewSize Magnet Setting must be a list of length 2")
Expand All @@ -168,6 +171,7 @@ function ValidateCupBaseSettings(settings, num_x, num_y) =
assert(is_num(settings[iCupBase_MagnetCaptiveHeight]), "CupBase Magnet Captive height setting must a number")
assert(is_list(settings[iCupBase_AlignGrid]) && len(settings[iCupBase_AlignGrid])==2, "CupBase AlignGrid Setting must be a list of length 2")
assert(is_bool(settings[iCupBase_MagnetSideAccess]), "CupBase MagnetSideAccess Settings must be a boolean")
assert(is_num(settings[iCupBase_EfficientFloorLimit]), "CupBase EfficientFloorLimit Settings must be a number")
[
settings[iCupBase_MagnetSize],
validateMagnetEasyRelease(settings[iCupBase_MagnetEasyRelease]),
Expand All @@ -189,5 +193,6 @@ function ValidateCupBaseSettings(settings, num_x, num_y) =
settings[iCupBase_AlignGrid],
settings[iCupBase_MagnetSideAccess],
settings[iCupBase_MagnetCrushDepth],
settings[iCupBase_MagnetChamfer]
];
settings[iCupBase_MagnetChamfer],
settings[iCupBase_EfficientFloorLimit]
];
Loading