Adds an `arrayReduce` function to KCL stdlib. Right now, it can only reduce SketchGroup values because my implementation of higher-order KCL functions sucks. But we will generalize it in the future to be able to reduce any type. This simplifies sketching polygons, e.g. ``` fn decagon = (radius) => { let step = (1/10) * tau() let sketch = startSketchAt([ (cos(0) * radius), (sin(0) * radius), ]) return arrayReduce([1..10], sketch, (i, sg) => { let x = cos(step * i) * radius let y = sin(step * i) * radius return lineTo([x, y], sg) }) } ``` Part of #3842
103 lines
2.9 KiB
Markdown
103 lines
2.9 KiB
Markdown
---
|
|
title: "KCL Standard Library"
|
|
excerpt: "Documentation for the KCL standard library for the Zoo Modeling App."
|
|
layout: manual
|
|
---
|
|
|
|
## Table of Contents
|
|
|
|
* [Types](kcl/types)
|
|
* [Known Issues](kcl/KNOWN-ISSUES)
|
|
* [`abs`](kcl/abs)
|
|
* [`acos`](kcl/acos)
|
|
* [`angleToMatchLengthX`](kcl/angleToMatchLengthX)
|
|
* [`angleToMatchLengthY`](kcl/angleToMatchLengthY)
|
|
* [`angledLine`](kcl/angledLine)
|
|
* [`angledLineOfXLength`](kcl/angledLineOfXLength)
|
|
* [`angledLineOfYLength`](kcl/angledLineOfYLength)
|
|
* [`angledLineThatIntersects`](kcl/angledLineThatIntersects)
|
|
* [`angledLineToX`](kcl/angledLineToX)
|
|
* [`angledLineToY`](kcl/angledLineToY)
|
|
* [`arc`](kcl/arc)
|
|
* [`arrayReduce`](kcl/arrayReduce)
|
|
* [`asin`](kcl/asin)
|
|
* [`assert`](kcl/assert)
|
|
* [`assertEqual`](kcl/assertEqual)
|
|
* [`assertGreaterThan`](kcl/assertGreaterThan)
|
|
* [`assertGreaterThanOrEq`](kcl/assertGreaterThanOrEq)
|
|
* [`assertLessThan`](kcl/assertLessThan)
|
|
* [`assertLessThanOrEq`](kcl/assertLessThanOrEq)
|
|
* [`atan`](kcl/atan)
|
|
* [`bezierCurve`](kcl/bezierCurve)
|
|
* [`ceil`](kcl/ceil)
|
|
* [`chamfer`](kcl/chamfer)
|
|
* [`circle`](kcl/circle)
|
|
* [`close`](kcl/close)
|
|
* [`cm`](kcl/cm)
|
|
* [`cos`](kcl/cos)
|
|
* [`e`](kcl/e)
|
|
* [`extrude`](kcl/extrude)
|
|
* [`fillet`](kcl/fillet)
|
|
* [`floor`](kcl/floor)
|
|
* [`ft`](kcl/ft)
|
|
* [`getNextAdjacentEdge`](kcl/getNextAdjacentEdge)
|
|
* [`getOppositeEdge`](kcl/getOppositeEdge)
|
|
* [`getPreviousAdjacentEdge`](kcl/getPreviousAdjacentEdge)
|
|
* [`helix`](kcl/helix)
|
|
* [`hole`](kcl/hole)
|
|
* [`hollow`](kcl/hollow)
|
|
* [`import`](kcl/import)
|
|
* [`inch`](kcl/inch)
|
|
* [`int`](kcl/int)
|
|
* [`lastSegX`](kcl/lastSegX)
|
|
* [`lastSegY`](kcl/lastSegY)
|
|
* [`legAngX`](kcl/legAngX)
|
|
* [`legAngY`](kcl/legAngY)
|
|
* [`legLen`](kcl/legLen)
|
|
* [`line`](kcl/line)
|
|
* [`lineTo`](kcl/lineTo)
|
|
* [`ln`](kcl/ln)
|
|
* [`loft`](kcl/loft)
|
|
* [`log`](kcl/log)
|
|
* [`log10`](kcl/log10)
|
|
* [`log2`](kcl/log2)
|
|
* [`m`](kcl/m)
|
|
* [`max`](kcl/max)
|
|
* [`min`](kcl/min)
|
|
* [`mm`](kcl/mm)
|
|
* [`offsetPlane`](kcl/offsetPlane)
|
|
* [`patternCircular2d`](kcl/patternCircular2d)
|
|
* [`patternCircular3d`](kcl/patternCircular3d)
|
|
* [`patternLinear2d`](kcl/patternLinear2d)
|
|
* [`patternLinear3d`](kcl/patternLinear3d)
|
|
* [`patternTransform`](kcl/patternTransform)
|
|
* [`pi`](kcl/pi)
|
|
* [`polar`](kcl/polar)
|
|
* [`pow`](kcl/pow)
|
|
* [`profileStart`](kcl/profileStart)
|
|
* [`profileStartX`](kcl/profileStartX)
|
|
* [`profileStartY`](kcl/profileStartY)
|
|
* [`revolve`](kcl/revolve)
|
|
* [`segAng`](kcl/segAng)
|
|
* [`segEndX`](kcl/segEndX)
|
|
* [`segEndY`](kcl/segEndY)
|
|
* [`segLen`](kcl/segLen)
|
|
* [`shell`](kcl/shell)
|
|
* [`sin`](kcl/sin)
|
|
* [`sqrt`](kcl/sqrt)
|
|
* [`startProfileAt`](kcl/startProfileAt)
|
|
* [`startSketchAt`](kcl/startSketchAt)
|
|
* [`startSketchOn`](kcl/startSketchOn)
|
|
* [`tan`](kcl/tan)
|
|
* [`tangentialArc`](kcl/tangentialArc)
|
|
* [`tangentialArcTo`](kcl/tangentialArcTo)
|
|
* [`tangentialArcToRelative`](kcl/tangentialArcToRelative)
|
|
* [`tau`](kcl/tau)
|
|
* [`toDegrees`](kcl/toDegrees)
|
|
* [`toRadians`](kcl/toRadians)
|
|
* [`xLine`](kcl/xLine)
|
|
* [`xLineTo`](kcl/xLineTo)
|
|
* [`yLine`](kcl/yLine)
|
|
* [`yLineTo`](kcl/yLineTo)
|
|
* [`yd`](kcl/yd)
|