mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-07 07:16:36 +02:00
refactored
This commit is contained in:
45
src/arc.scad
45
src/arc.scad
@@ -15,49 +15,8 @@
|
|||||||
include <__private__/__frags.scad>;
|
include <__private__/__frags.scad>;
|
||||||
include <__private__/__is_vector.scad>;
|
include <__private__/__is_vector.scad>;
|
||||||
include <__private__/__ra_to_xy.scad>;
|
include <__private__/__ra_to_xy.scad>;
|
||||||
|
include <__private__/__shape_arc.scad>;
|
||||||
|
|
||||||
module arc(radius, angle, width, width_mode = "LINE_CROSS") {
|
module arc(radius, angle, width, width_mode = "LINE_CROSS") {
|
||||||
|
polygon(__shape_arc(radius, angle, width, width_mode));
|
||||||
w_offset = width_mode == "LINE_CROSS" ? [width / 2, -width / 2] : (
|
|
||||||
width_mode == "LINE_INWARD" ? [0, -width] : [width, 0]
|
|
||||||
);
|
|
||||||
|
|
||||||
frags = __frags(radius);
|
|
||||||
|
|
||||||
a_step = 360 / frags;
|
|
||||||
half_a_step = a_step / 2;
|
|
||||||
|
|
||||||
angles = __is_vector(angle) ? angle : [0, angle];
|
|
||||||
|
|
||||||
m = floor(angles[0] / a_step) + 1;
|
|
||||||
n = floor(angles[1] / a_step);
|
|
||||||
|
|
||||||
function edge_r_begin(orig_r, a) =
|
|
||||||
let(leng = orig_r * cos(half_a_step))
|
|
||||||
leng / cos(m * a_step - half_a_step - a);
|
|
||||||
|
|
||||||
function edge_r_end(orig_r, a) =
|
|
||||||
let(leng = orig_r * cos(half_a_step))
|
|
||||||
leng / cos((n + 0.5) * a_step - a);
|
|
||||||
|
|
||||||
r_outer = radius + w_offset[0];
|
|
||||||
r_inner = radius + w_offset[1];
|
|
||||||
|
|
||||||
points = concat(
|
|
||||||
// outer arc path
|
|
||||||
[__ra_to_xy(edge_r_begin(r_outer, angles[0]), angles[0])],
|
|
||||||
m > n ? [] : [for(i = [m:n]) __ra_to_xy(r_outer, a_step * i)],
|
|
||||||
angles[1] == a_step * n ? [] : [__ra_to_xy(edge_r_end(r_outer, angles[1]), angles[1])],
|
|
||||||
// inner arc path
|
|
||||||
angles[1] == a_step * n ? [] : [__ra_to_xy(edge_r_end(r_inner, angles[1]), angles[1])],
|
|
||||||
m > n ? [] : [
|
|
||||||
for(i = [m:n])
|
|
||||||
let(idx = (n + (m - i)))
|
|
||||||
__ra_to_xy(r_inner, a_step * idx)
|
|
||||||
|
|
||||||
],
|
|
||||||
[__ra_to_xy(edge_r_begin(r_inner, angles[0]), angles[0])]
|
|
||||||
);
|
|
||||||
|
|
||||||
polygon(points);
|
|
||||||
}
|
}
|
Reference in New Issue
Block a user