1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-22 14:23:23 +02:00

refactored

This commit is contained in:
Justin Lin
2017-05-14 12:50:52 +08:00
parent b2dc8393b7
commit 5ebf3e18e4
2 changed files with 44 additions and 35 deletions

View File

@@ -0,0 +1,31 @@
function __half_trapezium(radius, h, round_r) =
let(
is_vt = __is_vector(radius),
r1 = is_vt ? radius[0] : radiusm,
r2 = is_vt ? radius[1] : radius,
frags = __frags(round_r),
b_ang = atan2(h, r1 - r2),
b_sector_angle = 180 - b_ang,
b_leng = r1 - round_r / tan(b_ang / 2),
b_round_frags = frags * b_sector_angle / 360,
b_end_angle = -90 + b_sector_angle,
t_sector_angle = b_ang,
t_leng = r2 - round_r * tan(t_sector_angle / 2),
t_round_frags = frags * t_sector_angle / 360,
half_h = h / 2,
br_corner = [
for(pt = __pie_for_rounding(round_r, -90, b_end_angle, b_round_frags))
[pt[0] + b_leng, pt[1] + round_r - half_h]
],
tr_corner = [
for(pt = __pie_for_rounding(round_r, 90 - t_sector_angle, 90, t_round_frags))
[pt[0] + t_leng, pt[1] + h - round_r - half_h]
]
)
concat(
br_corner,
tr_corner
);

View File

@@ -13,41 +13,19 @@
include <__private__/__is_vector.scad>;
include <__private__/__frags.scad>;
include <__private__/__pie_for_rounding.scad>;
include <__private__/__half_trapezium.scad>;
module rounded_cylinder(radius, h, round_r, convexity = 2, center = false) {
is_vt = __is_vector(radius);
r1 = is_vt ? radius[0] : radius;
r2 = is_vt ? radius[1] : radius;
r_corners = __half_trapezium(radius, h, round_r);
function round_frags(sector_angle) = __frags(round_r) * sector_angle / 360;
b_ang = atan2(h, r1 - r2);
b_sector_angle = 180 - b_ang;
b_leng = r1 - round_r / tan(b_ang / 2);
b_round_frags = round_frags(b_sector_angle);
b_end_angle = -90 + b_sector_angle;
t_sector_angle = b_ang;
t_leng = r2 - round_r * tan(t_sector_angle / 2);
t_round_frags = round_frags(t_sector_angle);
b_corner = [
for(pt = __pie_for_rounding(round_r, -90, b_end_angle, b_round_frags))
[pt[0] + b_leng, pt[1] + round_r]
];
t_corner = [
for(pt = __pie_for_rounding(round_r, 90 - t_sector_angle, 90, t_round_frags))
[pt[0] + t_leng, pt[1] + h - round_r]
];
translate(center ? [0, 0, -h/2] : [0, 0, 0]) rotate(180) rotate_extrude(convexity = convexity)
polygon(
concat(
[[0, 0], [b_leng, 0]],
b_corner,
t_corner,
[[t_leng, h], [0, h]]
)
);
translate(center ? [0, 0, 0] : [0, 0, h/2])
rotate(180)
rotate_extrude(convexity = convexity)
polygon(
concat(
[[0, -h/2]],
r_corners,
[[0, h/2]]
)
);
}