2025-02-25 16:10:06 +13:00
|
|
|
|
@no_std
|
2025-03-26 01:59:43 -04:00
|
|
|
|
@settings(defaultLengthUnit = mm)
|
2025-02-20 19:33:21 +13:00
|
|
|
|
|
|
|
|
|
/// The value of `pi`, Archimedes’ constant (π).
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// circumference = 70
|
|
|
|
|
///
|
2025-03-24 21:55:24 +13:00
|
|
|
|
/// exampleSketch = startSketchOn(XZ)
|
2025-04-07 16:13:15 +12:00
|
|
|
|
/// |> circle(center = [0, 0], radius = circumference / (2 * PI))
|
2025-02-20 19:33:21 +13:00
|
|
|
|
///
|
|
|
|
|
/// example = extrude(exampleSketch, length = 5)
|
|
|
|
|
/// ```
|
|
|
|
|
export PI = 3.14159265358979323846264338327950288_
|
|
|
|
|
|
|
|
|
|
/// The value of Euler’s number `e`.
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
2025-03-24 21:55:24 +13:00
|
|
|
|
/// exampleSketch = startSketchOn(XZ)
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// |> startProfileAt([0, 0], %)
|
KCL: Angled line should use keyword args (#5803)
We continue migrating KCL stdlib functions to use keyword arguments. Next up is the `angledLine` family of functions (except `angledLineThatIntersects, which will be a quick follow-up).
Before vs. after:
`angledLine({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, length = 3, tag = $edge)`
`angledLineOfXLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthX = 3, tag = $edge)`
`angledLineOfYLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthY = 3, tag = $edge)`
`angledLineToX({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteX = 3, tag = $edge)`
`angledLineToY({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteY = 3, tag = $edge)`
2025-04-09 14:55:15 -05:00
|
|
|
|
/// |> angledLine(
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// angle = 30,
|
|
|
|
|
/// length = 2 * E ^ 2,
|
KCL: Angled line should use keyword args (#5803)
We continue migrating KCL stdlib functions to use keyword arguments. Next up is the `angledLine` family of functions (except `angledLineThatIntersects, which will be a quick follow-up).
Before vs. after:
`angledLine({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, length = 3, tag = $edge)`
`angledLineOfXLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthX = 3, tag = $edge)`
`angledLineOfYLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthY = 3, tag = $edge)`
`angledLineToX({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteX = 3, tag = $edge)`
`angledLineToY({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteY = 3, tag = $edge)`
2025-04-09 14:55:15 -05:00
|
|
|
|
/// )
|
2025-03-07 22:07:16 -06:00
|
|
|
|
/// |> yLine(endAbsolute = 0)
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// |> close()
|
|
|
|
|
///
|
|
|
|
|
/// example = extrude(exampleSketch, length = 10)
|
|
|
|
|
/// ```
|
|
|
|
|
export E = 2.71828182845904523536028747135266250_
|
|
|
|
|
|
|
|
|
|
/// The value of `tau`, the full circle constant (τ). Equal to 2π.
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
2025-03-24 21:55:24 +13:00
|
|
|
|
/// exampleSketch = startSketchOn(XZ)
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// |> startProfileAt([0, 0], %)
|
KCL: Angled line should use keyword args (#5803)
We continue migrating KCL stdlib functions to use keyword arguments. Next up is the `angledLine` family of functions (except `angledLineThatIntersects, which will be a quick follow-up).
Before vs. after:
`angledLine({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, length = 3, tag = $edge)`
`angledLineOfXLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthX = 3, tag = $edge)`
`angledLineOfYLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthY = 3, tag = $edge)`
`angledLineToX({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteX = 3, tag = $edge)`
`angledLineToY({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteY = 3, tag = $edge)`
2025-04-09 14:55:15 -05:00
|
|
|
|
/// |> angledLine(
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// angle = 50,
|
|
|
|
|
/// length = 10 * TAU,
|
KCL: Angled line should use keyword args (#5803)
We continue migrating KCL stdlib functions to use keyword arguments. Next up is the `angledLine` family of functions (except `angledLineThatIntersects, which will be a quick follow-up).
Before vs. after:
`angledLine({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, length = 3, tag = $edge)`
`angledLineOfXLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthX = 3, tag = $edge)`
`angledLineOfYLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthY = 3, tag = $edge)`
`angledLineToX({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteX = 3, tag = $edge)`
`angledLineToY({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteY = 3, tag = $edge)`
2025-04-09 14:55:15 -05:00
|
|
|
|
/// )
|
2025-03-07 22:07:16 -06:00
|
|
|
|
/// |> yLine(endAbsolute = 0)
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// |> close()
|
|
|
|
|
///
|
|
|
|
|
/// example = extrude(exampleSketch, length = 5)
|
|
|
|
|
/// ```
|
|
|
|
|
export TAU = 6.28318530717958647692528676655900577_
|
|
|
|
|
|
|
|
|
|
/// Compute the cosine of a number (in radians).
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
2025-03-24 21:55:24 +13:00
|
|
|
|
/// exampleSketch = startSketchOn(XZ)
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// |> startProfileAt([0, 0], %)
|
KCL: Angled line should use keyword args (#5803)
We continue migrating KCL stdlib functions to use keyword arguments. Next up is the `angledLine` family of functions (except `angledLineThatIntersects, which will be a quick follow-up).
Before vs. after:
`angledLine({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, length = 3, tag = $edge)`
`angledLineOfXLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthX = 3, tag = $edge)`
`angledLineOfYLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthY = 3, tag = $edge)`
`angledLineToX({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteX = 3, tag = $edge)`
`angledLineToY({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteY = 3, tag = $edge)`
2025-04-09 14:55:15 -05:00
|
|
|
|
/// |> angledLine(
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// angle = 30,
|
|
|
|
|
/// length = 3 / cos(toRadians(30)),
|
KCL: Angled line should use keyword args (#5803)
We continue migrating KCL stdlib functions to use keyword arguments. Next up is the `angledLine` family of functions (except `angledLineThatIntersects, which will be a quick follow-up).
Before vs. after:
`angledLine({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, length = 3, tag = $edge)`
`angledLineOfXLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthX = 3, tag = $edge)`
`angledLineOfYLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthY = 3, tag = $edge)`
`angledLineToX({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteX = 3, tag = $edge)`
`angledLineToY({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteY = 3, tag = $edge)`
2025-04-09 14:55:15 -05:00
|
|
|
|
/// )
|
2025-03-07 22:07:16 -06:00
|
|
|
|
/// |> yLine(endAbsolute = 0)
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// |> close()
|
|
|
|
|
///
|
|
|
|
|
/// example = extrude(exampleSketch, length = 5)
|
|
|
|
|
/// ```
|
|
|
|
|
@(impl = std_rust)
|
2025-03-24 21:55:24 +13:00
|
|
|
|
export fn cos(@num: number(rad)): number(_) {}
|
2025-02-20 19:33:21 +13:00
|
|
|
|
|
|
|
|
|
/// Compute the sine of a number (in radians).
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
2025-03-24 21:55:24 +13:00
|
|
|
|
/// exampleSketch = startSketchOn(XZ)
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// |> startProfileAt([0, 0], %)
|
KCL: Angled line should use keyword args (#5803)
We continue migrating KCL stdlib functions to use keyword arguments. Next up is the `angledLine` family of functions (except `angledLineThatIntersects, which will be a quick follow-up).
Before vs. after:
`angledLine({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, length = 3, tag = $edge)`
`angledLineOfXLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthX = 3, tag = $edge)`
`angledLineOfYLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthY = 3, tag = $edge)`
`angledLineToX({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteX = 3, tag = $edge)`
`angledLineToY({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteY = 3, tag = $edge)`
2025-04-09 14:55:15 -05:00
|
|
|
|
/// |> angledLine(
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// angle = 50,
|
2025-04-09 11:46:54 +12:00
|
|
|
|
/// length = 15 / sin(toRadians(135)),
|
KCL: Angled line should use keyword args (#5803)
We continue migrating KCL stdlib functions to use keyword arguments. Next up is the `angledLine` family of functions (except `angledLineThatIntersects, which will be a quick follow-up).
Before vs. after:
`angledLine({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, length = 3, tag = $edge)`
`angledLineOfXLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthX = 3, tag = $edge)`
`angledLineOfYLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthY = 3, tag = $edge)`
`angledLineToX({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteX = 3, tag = $edge)`
`angledLineToY({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteY = 3, tag = $edge)`
2025-04-09 14:55:15 -05:00
|
|
|
|
/// )
|
2025-03-07 22:07:16 -06:00
|
|
|
|
/// |> yLine(endAbsolute = 0)
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// |> close()
|
|
|
|
|
///
|
|
|
|
|
/// example = extrude(exampleSketch, length = 5)
|
|
|
|
|
/// ```
|
|
|
|
|
@(impl = std_rust)
|
2025-03-24 21:55:24 +13:00
|
|
|
|
export fn sin(@num: number(rad)): number(_) {}
|
2025-02-20 19:33:21 +13:00
|
|
|
|
|
|
|
|
|
/// Compute the tangent of a number (in radians).
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
2025-03-24 21:55:24 +13:00
|
|
|
|
/// exampleSketch = startSketchOn(XZ)
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// |> startProfileAt([0, 0], %)
|
KCL: Angled line should use keyword args (#5803)
We continue migrating KCL stdlib functions to use keyword arguments. Next up is the `angledLine` family of functions (except `angledLineThatIntersects, which will be a quick follow-up).
Before vs. after:
`angledLine({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, length = 3, tag = $edge)`
`angledLineOfXLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthX = 3, tag = $edge)`
`angledLineOfYLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthY = 3, tag = $edge)`
`angledLineToX({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteX = 3, tag = $edge)`
`angledLineToY({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteY = 3, tag = $edge)`
2025-04-09 14:55:15 -05:00
|
|
|
|
/// |> angledLine(
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// angle = 50,
|
|
|
|
|
/// length = 50 * tan(1/2),
|
KCL: Angled line should use keyword args (#5803)
We continue migrating KCL stdlib functions to use keyword arguments. Next up is the `angledLine` family of functions (except `angledLineThatIntersects, which will be a quick follow-up).
Before vs. after:
`angledLine({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, length = 3, tag = $edge)`
`angledLineOfXLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthX = 3, tag = $edge)`
`angledLineOfYLength({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, lengthY = 3, tag = $edge)`
`angledLineToX({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteX = 3, tag = $edge)`
`angledLineToY({angle = 90, length = 3}, %, $edge)`
=> `angledLine(angle = 90, endAbsoluteY = 3, tag = $edge)`
2025-04-09 14:55:15 -05:00
|
|
|
|
/// )
|
2025-03-07 22:07:16 -06:00
|
|
|
|
/// |> yLine(endAbsolute = 0)
|
2025-02-20 19:33:21 +13:00
|
|
|
|
/// |> close()
|
|
|
|
|
///
|
|
|
|
|
/// example = extrude(exampleSketch, length = 5)
|
|
|
|
|
/// ```
|
|
|
|
|
@(impl = std_rust)
|
2025-03-24 21:55:24 +13:00
|
|
|
|
export fn tan(@num: number(rad)): number(_) {}
|
2025-04-08 08:16:43 +12:00
|
|
|
|
|
|
|
|
|
/// Convert polar/sphere (azimuth, elevation, distance) coordinates to
|
|
|
|
|
/// cartesian (x/y/z grid) coordinates.
|
|
|
|
|
///
|
|
|
|
|
/// ```
|
|
|
|
|
/// exampleSketch = startSketchOn(XZ)
|
|
|
|
|
/// |> startProfileAt([0, 0], %)
|
|
|
|
|
/// |> line(end = polar(angle = 30, length = 5), tag = $thing)
|
|
|
|
|
/// |> line(end = [0, 5])
|
|
|
|
|
/// |> line(end = [segEndX(thing), 0])
|
|
|
|
|
/// |> line(end = [-20, 10])
|
|
|
|
|
/// |> close()
|
|
|
|
|
///
|
|
|
|
|
/// example = extrude(exampleSketch, length = 5)
|
|
|
|
|
/// ```
|
|
|
|
|
export fn polar(angle: number(deg), length: number(mm)): [number(mm); 2] {
|
|
|
|
|
// TODO could be done by implicit conversion when UoM coercions are activated.
|
|
|
|
|
rads = toRadians(angle)
|
|
|
|
|
x = length * cos(rads)
|
|
|
|
|
y = length * sin(rads)
|
|
|
|
|
return [x, y]
|
|
|
|
|
}
|