Added extra depth, ability to print front slice
This commit is contained in:
@@ -22,6 +22,7 @@ bead_coping_radius = 10.00; // Semicircle radius for bead groove (measured
|
|||||||
bead_coping_offset_top = 11.00; // Distance from plate top to groove center (tune on wall)
|
bead_coping_offset_top = 11.00; // Distance from plate top to groove center (tune on wall)
|
||||||
flat_upper_ratio = 0.55; // Fraction of plate height that stays flat at the top
|
flat_upper_ratio = 0.55; // Fraction of plate height that stays flat at the top
|
||||||
bottom_taper_depth_ratio = 1.6; // Rear depth at plate bottom = min_wall_thickness * this (outward from flat shelf)
|
bottom_taper_depth_ratio = 1.6; // Rear depth at plate bottom = min_wall_thickness * this (outward from flat shelf)
|
||||||
|
rear_extension = 7.5; // Extra depth toward wall; front face + bead groove stay fixed vs front/top
|
||||||
course_pitch = 165.1;
|
course_pitch = 165.1;
|
||||||
profile_segments = 8;
|
profile_segments = 8;
|
||||||
profile_mode = "curved"; // [curved, stepped]
|
profile_mode = "curved"; // [curved, stepped]
|
||||||
@@ -34,8 +35,9 @@ mount_hole_dia = 4.5;
|
|||||||
mount_hole_x = 0;
|
mount_hole_x = 0;
|
||||||
|
|
||||||
/* [Export] */
|
/* [Export] */
|
||||||
part_mode = "full"; // [full, profile_strip]
|
part_mode = "full"; // [full, profile_strip, front_slice]
|
||||||
profile_strip_width = 20;
|
profile_strip_width = 20;
|
||||||
|
front_slice_depth = 3.5; // [2:0.5:8]
|
||||||
|
|
||||||
/* [Hidden] */
|
/* [Hidden] */
|
||||||
$fn = 64;
|
$fn = 64;
|
||||||
@@ -52,6 +54,9 @@ function projection_z() = siding_projection - rear_clearance;
|
|||||||
|
|
||||||
function face_inset_z() = projection_z() - face_inset_depth;
|
function face_inset_z() = projection_z() - face_inset_depth;
|
||||||
|
|
||||||
|
// Flat rear shelf shifted toward the wall; bead groove keeps absolute depth at face_inset_z.
|
||||||
|
function flat_rear_z() = face_inset_z() - rear_extension;
|
||||||
|
|
||||||
function bead_coping_y_center() = plate_height - bead_coping_offset_top;
|
function bead_coping_y_center() = plate_height - bead_coping_offset_top;
|
||||||
|
|
||||||
// Bottom of flat rear shelf (flat_upper_ratio measured from plate top downward).
|
// Bottom of flat rear shelf (flat_upper_ratio measured from plate top downward).
|
||||||
@@ -59,24 +64,23 @@ function face_y_flat_end() = plate_height * (1 - flat_upper_ratio);
|
|||||||
|
|
||||||
// Rear depth where the bottom taper ends (outward from flat shelf, in wall-thickness units).
|
// Rear depth where the bottom taper ends (outward from flat shelf, in wall-thickness units).
|
||||||
function bottom_rear_z() =
|
function bottom_rear_z() =
|
||||||
face_inset_z() + min_wall_thickness * bottom_taper_depth_ratio;
|
flat_rear_z() + min_wall_thickness * bottom_taper_depth_ratio;
|
||||||
|
|
||||||
// Slow taper from bottom_rear_z at the plate bottom up to the flat shelf.
|
// Slow taper from bottom_rear_z at the plate bottom up to the flat rear shelf.
|
||||||
function lower_curve_z(y) =
|
function lower_curve_z(y) =
|
||||||
let(
|
let(
|
||||||
y1 = face_y_flat_end(),
|
y1 = face_y_flat_end(),
|
||||||
t = y / max(y1, epsilon),
|
t = y / max(y1, epsilon),
|
||||||
ease = pow(sin(t * 90), 1.4),
|
ease = pow(sin(t * 90), 1.4),
|
||||||
z_bottom = bottom_rear_z(),
|
z_bottom = bottom_rear_z(),
|
||||||
z_top = face_inset_z()
|
z_top = flat_rear_z()
|
||||||
)
|
)
|
||||||
z_top + (z_bottom - z_top) * (1 - ease);
|
z_top + (z_bottom - z_top) * (1 - ease);
|
||||||
|
|
||||||
function stepped_rear_z(y) =
|
function stepped_rear_z(y) =
|
||||||
y >= face_y_flat_end() ? face_inset_z() : bottom_rear_z();
|
y >= face_y_flat_end() ? flat_rear_z() : bottom_rear_z();
|
||||||
|
|
||||||
// Concave bead coping on the rear face near the plate top.
|
// Bead coping: fixed depth vs front/top. Flat chord at face_inset_z; arc scoops into plate.
|
||||||
// Flat chord at face_inset_z; arc scoops into the plate (toward the front).
|
|
||||||
function bead_coping_rear_z(y) =
|
function bead_coping_rear_z(y) =
|
||||||
let(
|
let(
|
||||||
r = bead_coping_radius,
|
r = bead_coping_radius,
|
||||||
@@ -84,7 +88,7 @@ function bead_coping_rear_z(y) =
|
|||||||
dy = y - bead_coping_y_center(),
|
dy = y - bead_coping_y_center(),
|
||||||
disc = r * r - dy * dy
|
disc = r * r - dy * dy
|
||||||
)
|
)
|
||||||
disc >= 0 ? shelf + sqrt(disc) : shelf;
|
disc >= 0 ? shelf + sqrt(disc) : flat_rear_z();
|
||||||
|
|
||||||
// Flat top shelf + bead cavity + lower taper.
|
// Flat top shelf + bead cavity + lower taper.
|
||||||
function rear_z_at(y) =
|
function rear_z_at(y) =
|
||||||
@@ -109,7 +113,9 @@ function max_rear_z() =
|
|||||||
let(pts = rear_profile_points())
|
let(pts = rear_profile_points())
|
||||||
max([for (p = pts) p[1]]);
|
max([for (p = pts) p[1]]);
|
||||||
|
|
||||||
function front_z() = max_rear_z() + min_wall_thickness;
|
// Front face anchored to bead groove + min wall (independent of rear_extension).
|
||||||
|
function front_z() =
|
||||||
|
face_inset_z() + bead_coping_radius + min_wall_thickness;
|
||||||
|
|
||||||
function rear_y_min() =
|
function rear_y_min() =
|
||||||
min([for (p = rear_profile_points()) p[1]]);
|
min([for (p = rear_profile_points()) p[1]]);
|
||||||
@@ -170,6 +176,16 @@ module rounded_body(width) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Keep only the front face cap for fit-checking width, height, and hole placement.
|
||||||
|
module front_slice_mask(width) {
|
||||||
|
fz = front_z();
|
||||||
|
translate([plate_height / 2, fz - front_slice_depth / 2, 0])
|
||||||
|
cube(
|
||||||
|
[plate_height + 2 * epsilon, front_slice_depth + 2 * epsilon, width + 2 * epsilon],
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
module adapter_plate() {
|
module adapter_plate() {
|
||||||
width = part_mode == "profile_strip" ? profile_strip_width : plate_width;
|
width = part_mode == "profile_strip" ? profile_strip_width : plate_width;
|
||||||
if (part_mode == "full") {
|
if (part_mode == "full") {
|
||||||
@@ -177,6 +193,14 @@ module adapter_plate() {
|
|||||||
rounded_body(width);
|
rounded_body(width);
|
||||||
mount_holes();
|
mount_holes();
|
||||||
}
|
}
|
||||||
|
} else if (part_mode == "front_slice") {
|
||||||
|
intersection() {
|
||||||
|
difference() {
|
||||||
|
rounded_body(width);
|
||||||
|
mount_holes();
|
||||||
|
}
|
||||||
|
front_slice_mask(width);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
rounded_body(width);
|
rounded_body(width);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user