1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-09-25 05:51:41 +02:00
Files
dotSCAD/src/shape_pie.scad
2020-01-28 20:49:08 +08:00

32 lines
1001 B
OpenSCAD

/**
* shape_pie.scad
*
* @copyright Justin Lin, 2017
* @license https://opensource.org/licenses/lgpl-3.0.html
*
* @see https://openhome.cc/eGossip/OpenSCAD/lib2x-shape_pie.html
*
**/
use <__comm__/__frags.scad>;
use <__comm__/__ra_to_xy.scad>;
function shape_pie(radius, angle) =
let(
a_step = 360 / __frags(radius),
leng = radius * cos(a_step / 2),
angles = is_num(angle) ? [0:angle] : angle,
m = floor(angles[0] / a_step) + 1,
n = floor(angles[1] / a_step),
edge_r_begin = leng / cos((m - 0.5) * a_step - angles[0]),
edge_r_end = leng / cos((n + 0.5) * a_step - angles[1]),
shape_pts = concat(
[[0, 0], __ra_to_xy(edge_r_begin, angles[0])],
m > n ? [] : [
for(i = m; i <= n; i = i + 1)
let(a = a_step * i)
__ra_to_xy(radius, a)
],
angles[1] == a_step * n ? [] : [__ra_to_xy(edge_r_end, angles[1])]
)
) shape_pts;