Declare std::math in KCL (BREAKING) (#6588)
Declare std::math in KCL Signed-off-by: Nick Cameron <nrc@ncameron.org>
@ -30,24 +30,17 @@ layout: manual
|
||||
* [`Y`](kcl/consts/std-Y)
|
||||
* [`YZ`](kcl/consts/std-YZ)
|
||||
* [`Z`](kcl/consts/std-Z)
|
||||
* [`abs`](kcl/abs)
|
||||
* [`acos`](kcl/acos)
|
||||
* [`angledLine`](kcl/angledLine)
|
||||
* [`angledLineThatIntersects`](kcl/angledLineThatIntersects)
|
||||
* [`appearance`](kcl/appearance)
|
||||
* [`arc`](kcl/arc)
|
||||
* [`asin`](kcl/asin)
|
||||
* [`assert`](kcl/assert)
|
||||
* [`assertIs`](kcl/assertIs)
|
||||
* [`atan`](kcl/atan)
|
||||
* [`atan2`](kcl/atan2)
|
||||
* [`bezierCurve`](kcl/bezierCurve)
|
||||
* [`ceil`](kcl/ceil)
|
||||
* [`circleThreePoint`](kcl/circleThreePoint)
|
||||
* [`clone`](kcl/clone)
|
||||
* [`close`](kcl/close)
|
||||
* [`extrude`](kcl/extrude)
|
||||
* [`floor`](kcl/floor)
|
||||
* [`getCommonEdge`](kcl/getCommonEdge)
|
||||
* [`getNextAdjacentEdge`](kcl/getNextAdjacentEdge)
|
||||
* [`getOppositeEdge`](kcl/getOppositeEdge)
|
||||
@ -61,14 +54,8 @@ layout: manual
|
||||
* [`legAngY`](kcl/legAngY)
|
||||
* [`legLen`](kcl/legLen)
|
||||
* [`line`](kcl/line)
|
||||
* [`ln`](kcl/ln)
|
||||
* [`loft`](kcl/loft)
|
||||
* [`log`](kcl/log)
|
||||
* [`log10`](kcl/log10)
|
||||
* [`log2`](kcl/log2)
|
||||
* [`map`](kcl/map)
|
||||
* [`max`](kcl/max)
|
||||
* [`min`](kcl/min)
|
||||
* [`offsetPlane`](kcl/std-offsetPlane)
|
||||
* [`patternCircular2d`](kcl/patternCircular2d)
|
||||
* [`patternCircular3d`](kcl/patternCircular3d)
|
||||
@ -78,16 +65,13 @@ layout: manual
|
||||
* [`patternTransform2d`](kcl/patternTransform2d)
|
||||
* [`polygon`](kcl/polygon)
|
||||
* [`pop`](kcl/pop)
|
||||
* [`pow`](kcl/pow)
|
||||
* [`profileStart`](kcl/profileStart)
|
||||
* [`profileStartX`](kcl/profileStartX)
|
||||
* [`profileStartY`](kcl/profileStartY)
|
||||
* [`push`](kcl/push)
|
||||
* [`reduce`](kcl/reduce)
|
||||
* [`rem`](kcl/rem)
|
||||
* [`revolve`](kcl/std-revolve)
|
||||
* [`rotate`](kcl/rotate)
|
||||
* [`round`](kcl/round)
|
||||
* [`scale`](kcl/scale)
|
||||
* [`segAng`](kcl/segAng)
|
||||
* [`segEnd`](kcl/segEnd)
|
||||
@ -97,7 +81,6 @@ layout: manual
|
||||
* [`segStart`](kcl/segStart)
|
||||
* [`segStartX`](kcl/segStartX)
|
||||
* [`segStartY`](kcl/segStartY)
|
||||
* [`sqrt`](kcl/sqrt)
|
||||
* [`startProfile`](kcl/startProfile)
|
||||
* [`startSketchOn`](kcl/startSketchOn)
|
||||
* [`subtract`](kcl/subtract)
|
||||
@ -113,9 +96,26 @@ layout: manual
|
||||
* [`math::E`](kcl/consts/std-math-E)
|
||||
* [`math::PI`](kcl/consts/std-math-PI)
|
||||
* [`math::TAU`](kcl/consts/std-math-TAU)
|
||||
* [`math::abs`](kcl/std-math-abs)
|
||||
* [`math::acos`](kcl/std-math-acos)
|
||||
* [`math::asin`](kcl/std-math-asin)
|
||||
* [`math::atan`](kcl/std-math-atan)
|
||||
* [`math::atan2`](kcl/std-math-atan2)
|
||||
* [`math::ceil`](kcl/std-math-ceil)
|
||||
* [`math::cos`](kcl/std-math-cos)
|
||||
* [`math::floor`](kcl/std-math-floor)
|
||||
* [`math::ln`](kcl/std-math-ln)
|
||||
* [`math::log`](kcl/std-math-log)
|
||||
* [`math::log10`](kcl/std-math-log10)
|
||||
* [`math::log2`](kcl/std-math-log2)
|
||||
* [`math::max`](kcl/std-math-max)
|
||||
* [`math::min`](kcl/std-math-min)
|
||||
* [`math::polar`](kcl/std-math-polar)
|
||||
* [`math::pow`](kcl/std-math-pow)
|
||||
* [`math::rem`](kcl/std-math-rem)
|
||||
* [`math::round`](kcl/std-math-round)
|
||||
* [`math::sin`](kcl/std-math-sin)
|
||||
* [`math::sqrt`](kcl/std-math-sqrt)
|
||||
* [`math::tan`](kcl/std-math-tan)
|
||||
* **std::sketch**
|
||||
* [`circle`](kcl/std-sketch-circle)
|
||||
|
||||
@ -178,7 +178,7 @@ t = 0.005 // taper factor [0-1)
|
||||
// Defines how to modify each layer of the vase.
|
||||
// Each replica is shifted up the Z axis, and has a smoothly-varying radius
|
||||
fn transform(replicaId) {
|
||||
scale = r * abs(1 - (t * replicaId)) * (5 + math::cos((replicaId / 8): number(rad)))
|
||||
scale = r * math::abs(1 - (t * replicaId)) * (5 + math::cos((replicaId / 8): number(rad)))
|
||||
return {
|
||||
translate = [0, 0, replicaId * 10],
|
||||
scale = [scale, scale, 0]
|
||||
|
||||
51
docs/kcl/std-math-abs.md
Normal file
45
docs/kcl/std-math-acos.md
Normal file
44
docs/kcl/std-math-asin.md
Normal file
43
docs/kcl/std-math-atan.md
Normal file
@ -0,0 +1,43 @@
|
||||
---
|
||||
title: "std::math::atan"
|
||||
excerpt: "Compute the arctangent of a number."
|
||||
layout: manual
|
||||
---
|
||||
|
||||
Compute the arctangent of a number.
|
||||
|
||||
Consider using `atan2()` instead for the true inverse of tangent.
|
||||
|
||||
```js
|
||||
atan(@num: number(_)): number(rad)
|
||||
```
|
||||
|
||||
|
||||
### Arguments
|
||||
|
||||
| Name | Type | Description | Required |
|
||||
|----------|------|-------------|----------|
|
||||
| `num` | `number(_)` | | Yes |
|
||||
|
||||
### Returns
|
||||
|
||||
`number(rad)`
|
||||
|
||||
|
||||
### Examples
|
||||
|
||||
```js
|
||||
sketch001 = startSketchOn(XZ)
|
||||
|> startProfile(at = [0, 0])
|
||||
|> angledLine(
|
||||
angle = math::atan(1.25),
|
||||
length = 20,
|
||||
)
|
||||
|> yLine(endAbsolute = 0)
|
||||
|> close()
|
||||
|
||||
extrude001 = extrude(sketch001, length = 5)
|
||||
```
|
||||
|
||||
|
||||
|
||||
48
docs/kcl/std-math-atan2.md
Normal file
42
docs/kcl/std-math-ceil.md
Normal file
42
docs/kcl/std-math-floor.md
Normal file
42
docs/kcl/std-math-ln.md
Normal file
48
docs/kcl/std-math-log.md
Normal file
42
docs/kcl/std-math-log10.md
Normal file
42
docs/kcl/std-math-log2.md
Normal file
44
docs/kcl/std-math-max.md
Normal file
44
docs/kcl/std-math-min.md
Normal file
48
docs/kcl/std-math-pow.md
Normal file
47
docs/kcl/std-math-rem.md
Normal file
42
docs/kcl/std-math-round.md
Normal file
44
docs/kcl/std-math-sqrt.md
Normal file
@ -1,90 +1,4 @@
|
||||
[
|
||||
{
|
||||
"name": "abs",
|
||||
"summary": "Compute the absolute value of a number.",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number to compute the absolute value of.",
|
||||
"labelRequired": false
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"myAngle = -120\n\nsketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [8, 0])\n |> angledLine(angle = abs(myAngle), length = 5)\n |> line(end = [-5, 0])\n |> angledLine(angle = myAngle, length = 5)\n |> close()\n\nbaseExtrusion = extrude(sketch001, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "acos",
|
||||
"summary": "Compute the arccosine of a number (in radians).",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number to compute arccosine of.",
|
||||
"labelRequired": false
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = units::toDegrees(acos(0.5)), length = 10)\n |> line(end = [5, 0])\n |> line(endAbsolute = [12, 0])\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "angledLine",
|
||||
"summary": "Draw a line segment relative to the current origin using the polar measure of some angle and distance.",
|
||||
@ -45600,49 +45514,6 @@
|
||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> arc(endAbsolute = [10, 0], interiorAbsolute = [5, 5])\n |> close()\nexample = extrude(exampleSketch, length = 10)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "asin",
|
||||
"summary": "Compute the arcsine of a number (in radians).",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number to compute arcsine of.",
|
||||
"labelRequired": false
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = units::toDegrees(asin(0.5)), length = 20)\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "assert",
|
||||
"summary": "Check a value meets some expected conditions at runtime. Program terminates with an error if conditions aren't met. If you provide multiple conditions, they will all be checked and all must be met.",
|
||||
@ -45893,106 +45764,6 @@
|
||||
"kclIsFun = true\nassertIs(kclIsFun)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "atan",
|
||||
"summary": "Compute the arctangent of a number (in radians).",
|
||||
"description": "Consider using `atan2()` instead for the true inverse of tangent.",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number to compute arctangent of.",
|
||||
"labelRequired": false
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = units::toDegrees(atan(1.25)), length = 20)\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "atan2",
|
||||
"summary": "Compute the four quadrant arctangent of Y and X (in radians).",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "y",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "Y",
|
||||
"labelRequired": true
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "X",
|
||||
"labelRequired": true
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = units::toDegrees(atan2(y = 1.25, x = 2)), length = 20)\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bezierCurve",
|
||||
"summary": "Draw a smooth, continuous, curved line segment from the current origin to the desired (x, y), using a number of control points to shape the curve's shape.",
|
||||
@ -55771,49 +55542,6 @@
|
||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [0, 10])\n |> bezierCurve(control1 = [5, 0], control2 = [5, 10], end = [10, 10])\n |> line(endAbsolute = [10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ceil",
|
||||
"summary": "Compute the smallest integer greater than or equal to a number.",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number to round.",
|
||||
"labelRequired": false
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(endAbsolute = [12, 10])\n |> line(end = [ceil(7.02986), 0])\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "circleThreePoint",
|
||||
"summary": "Construct a circle derived from 3 points.",
|
||||
@ -85358,49 +85086,6 @@
|
||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [-10, 0])\n |> arc(angleStart = 120, angleEnd = -60, radius = 5)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve(control1 = [-3, 0], control2 = [2, 10], end = [-5, 10])\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 10, bidirectionalLength = 50)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "floor",
|
||||
"summary": "Compute the largest integer less than or equal to a number.",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number to round.",
|
||||
"labelRequired": false
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(endAbsolute = [12, 10])\n |> line(end = [floor(7.02986), 0])\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "getCommonEdge",
|
||||
"summary": "Get the shared edge between two faces.",
|
||||
@ -113532,49 +113217,6 @@
|
||||
"triangle = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n // The END argument means it ends at exactly [10, 0].\n // This is an absolute measurement, it is NOT relative to\n // the start of the sketch.\n |> line(endAbsolute = [10, 0])\n |> line(endAbsolute = [0, 10])\n |> line(endAbsolute = [-10, 0], tag = $thirdLineOfTriangle)\n |> close()\n |> extrude(length = 5)\n\nbox = startSketchOn(XZ)\n |> startProfile(at = [10, 10])\n // The 'to' argument means move the pen this much.\n // So, [10, 0] is a relative distance away from the current point.\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0], tag = $thirdLineOfBox)\n |> close()\n |> extrude(length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ln",
|
||||
"summary": "Compute the natural logarithm of the number.",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number to compute the logarithm of.",
|
||||
"labelRequired": false
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [ln(100), 15])\n |> line(end = [5, -6])\n |> line(end = [-10, -10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "loft",
|
||||
"summary": "Create a 3D surface or solid by interpolating between two or more sketches.",
|
||||
@ -126516,148 +126158,6 @@
|
||||
"// Loft a square, a circle, and another circle with options.\nsquareSketch = startSketchOn(XY)\n |> startProfile(at = [-100, 200])\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane(XY, offset = 75))\n |> circle(center = [0, 100], radius = 50)\n\ncircleSketch1 = startSketchOn(offsetPlane(XY, offset = 150))\n |> circle(center = [0, 100], radius = 20)\n\nloft(\n [\n squareSketch,\n circleSketch0,\n circleSketch1\n ],\n baseCurveIndex = 0,\n bezApproximateRational = false,\n tolerance = 0.000001,\n vDegree = 2,\n)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "log",
|
||||
"summary": "Compute the logarithm of the number with respect to an arbitrary base.",
|
||||
"description": "The result might not be correctly rounded owing to implementation details; `log2()` can produce more accurate results for base 2, and `log10()` can produce more accurate results for base 10.",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number to compute the logarithm of.",
|
||||
"labelRequired": false
|
||||
},
|
||||
{
|
||||
"name": "base",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The base of the logarithm.",
|
||||
"labelRequired": true
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [log(100, base = 5), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "log10",
|
||||
"summary": "Compute the base 10 logarithm of the number.",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": false,
|
||||
"args": [
|
||||
{
|
||||
"name": "num",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [log10(100), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "log2",
|
||||
"summary": "Compute the base 2 logarithm of the number.",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number to compute the logarithm of.",
|
||||
"labelRequired": false
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [log2(100), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "map",
|
||||
"summary": "Apply a function to every element of a list.",
|
||||
@ -134118,98 +133618,6 @@
|
||||
"r = 10 // radius\n// Call `map`, using an anonymous function instead of a named one.\ncircles = map(\n [1..3],\n f = fn(id) {\n return startSketchOn(XY)\n |> circle(center = [id * 2 * r, 0], radius = r)\n },\n)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "max",
|
||||
"summary": "Compute the maximum of the given arguments.",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "[number]",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "Array_of_double",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "An array of numbers to compute the maximum of.",
|
||||
"labelRequired": false
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 70, length = max([15, 31, 4, 13, 22]))\n |> line(end = [20, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "min",
|
||||
"summary": "Compute the minimum of the given arguments.",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "[number]",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "Array_of_double",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "An array of numbers to compute the minimum of.",
|
||||
"labelRequired": false
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 70, length = min([15, 31, 4, 13, 22]))\n |> line(end = [20, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "patternCircular2d",
|
||||
"summary": "Repeat a 2-dimensional sketch some number of times along a partial or complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained.",
|
||||
@ -185676,7 +185084,7 @@
|
||||
"// Each instance will be shifted along the X axis,\n// with a gap between the original (at x = 0) and the first replica\n// (at x = 8). This is because `id` starts at 1.\nfn transform(id) {\n return { translate = [4 * (1 + id), 0, 0] }\n}\n\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> extrude(length = 5)\n |> patternTransform(instances = 4, transform = transform)",
|
||||
"fn cube(length, center) {\n l = length / 2\n x = center[0]\n y = center[1]\n p0 = [-l + x, -l + y]\n p1 = [-l + x, l + y]\n p2 = [l + x, l + y]\n p3 = [l + x, -l + y]\n\n return startSketchOn(XY)\n |> startProfile(at = p0)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> line(endAbsolute = p0)\n |> close()\n |> extrude(length = length)\n}\n\nwidth = 20\nfn transform(i) {\n return {\n // Move down each time.\n translate = [0, 0, -i * width],\n // Make the cube longer, wider and flatter each time.\n scale = [\n pow(1.1, exp = i),\n pow(1.1, exp = i),\n pow(0.9, exp = i)\n ],\n // Turn by 15 degrees each time.\n rotation = { angle = 15 * i, origin = \"local\" }\n }\n}\n\nmyCubes = cube(width, [100, 0])\n |> patternTransform(instances = 25, transform = transform)",
|
||||
"fn cube(length, center) {\n l = length / 2\n x = center[0]\n y = center[1]\n p0 = [-l + x, -l + y]\n p1 = [-l + x, l + y]\n p2 = [l + x, l + y]\n p3 = [l + x, -l + y]\n\n return startSketchOn(XY)\n |> startProfile(at = p0)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> line(endAbsolute = p0)\n |> close()\n |> extrude(length = length)\n}\n\nwidth = 20\nfn transform(i) {\n return {\n translate = [0, 0, -i * width],\n rotation = {\n angle = 90 * i,\n // Rotate around the overall scene's origin.\n origin = \"global\"\n }\n }\n}\nmyCubes = cube(width, [100, 100])\n |> patternTransform(instances = 4, transform = transform)",
|
||||
"// Parameters\nr = 50 // base radius\nh = 10 // layer height\nt = 0.005 // taper factor [0-1)\n// Defines how to modify each layer of the vase.\n// Each replica is shifted up the Z axis, and has a smoothly-varying radius\nfn transform(replicaId) {\n scale = r * abs(1 - (t * replicaId)) * (5 + math::cos((replicaId / 8): number(rad)))\n return {\n translate = [0, 0, replicaId * 10],\n scale = [scale, scale, 0]\n }\n}\n// Each layer is just a pretty thin cylinder.\nfn layer() {\n return startSketchOn(XY)\n // or some other plane idk\n |> circle(center = [0, 0], radius = 1, tag = $tag1)\n |> extrude(length = h)\n}\n// The vase is 100 layers tall.\n// The 100 layers are replica of each other, with a slight transformation applied to each.\nvase = layer()\n |> patternTransform(instances = 100, transform = transform)",
|
||||
"// Parameters\nr = 50 // base radius\nh = 10 // layer height\nt = 0.005 // taper factor [0-1)\n// Defines how to modify each layer of the vase.\n// Each replica is shifted up the Z axis, and has a smoothly-varying radius\nfn transform(replicaId) {\n scale = r * math::abs(1 - (t * replicaId)) * (5 + math::cos((replicaId / 8): number(rad)))\n return {\n translate = [0, 0, replicaId * 10],\n scale = [scale, scale, 0]\n }\n}\n// Each layer is just a pretty thin cylinder.\nfn layer() {\n return startSketchOn(XY)\n // or some other plane idk\n |> circle(center = [0, 0], radius = 1, tag = $tag1)\n |> extrude(length = h)\n}\n// The vase is 100 layers tall.\n// The 100 layers are replica of each other, with a slight transformation applied to each.\nvase = layer()\n |> patternTransform(instances = 100, transform = transform)",
|
||||
"fn transform(i) {\n // Transform functions can return multiple transforms. They'll be applied in order.\n return [\n { translate = [30 * i, 0, 0] },\n { rotation = { angle = 45 * i } }\n ]\n}\nstartSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> polygon(\n radius = 10,\n numSides = 4,\n center = [0, 0],\n inscribed = false,\n )\n |> extrude(length = 4)\n |> patternTransform(instances = 3, transform = transform)"
|
||||
]
|
||||
},
|
||||
@ -208795,63 +208203,6 @@
|
||||
"arr = [1, 2, 3, 4]\nnew_arr = pop(arr)\nassert(\n new_arr[0],\n isEqualTo = 1,\n tolerance = 0.00001,\n error = \"1 is the first element of the array\",\n)\nassert(\n new_arr[1],\n isEqualTo = 2,\n tolerance = 0.00001,\n error = \"2 is the second element of the array\",\n)\nassert(\n new_arr[2],\n isEqualTo = 3,\n tolerance = 0.00001,\n error = \"3 is the third element of the array\",\n)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pow",
|
||||
"summary": "Compute the number to a power.",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number to raise.",
|
||||
"labelRequired": false
|
||||
},
|
||||
{
|
||||
"name": "exp",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The power to raise to.",
|
||||
"labelRequired": true
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 50, length = pow(5, exp = 2))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "profileStart",
|
||||
"summary": "Extract the provided 2-dimensional sketch's profile's origin value.",
|
||||
@ -232859,63 +232210,6 @@
|
||||
"// Declare a function that sketches a decagon.\nfn decagon(radius) {\n // Each side of the decagon is turned this many radians from the previous angle.\n stepAngle = (1 / 10 * TAU): number(rad)\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn(XY)\n |> startProfile(at = [\n math::cos(0) * radius,\n math::sin(0) * radius\n ])\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce(\n [1..10],\n initial = startOfDecagonSketch,\n f = fn(i, partialDecagon) {\n // Draw one edge of the decagon.\n x = math::cos(stepAngle * i) * radius\n y = math::sin(stepAngle * i) * radius\n return line(partialDecagon, end = [x, y])\n },\n )\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = ((1/10) * TAU): number(rad)\n plane = startSketchOn(XY)\n startOfDecagonSketch = startProfile(plane, at = [(math::cos(0)*radius), (math::sin(0) * radius)])\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = math::cos(stepAngle * i) * radius\n y = math::sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "rem",
|
||||
"summary": "Compute the remainder after dividing `num` by `div`. If `num` is negative, the result will be too.",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "num",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number which will be divided by `divisor`.",
|
||||
"labelRequired": false
|
||||
},
|
||||
{
|
||||
"name": "divisor",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number which will divide `num`.",
|
||||
"labelRequired": true
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"assert(rem(7, divisor = 4), isEqualTo = 3, error = \"remainder is 3\")\nassert(rem(-7, divisor = 4), isEqualTo = -3, error = \"remainder is -3\")\nassert(rem(7, divisor = -4), isEqualTo = 3, error = \"remainder is 3\")\nassert(rem(6, divisor = 2.5), isEqualTo = 1, error = \"remainder is 1\")\nassert(rem(6.5, divisor = 2.5), isEqualTo = 1.5, error = \"remainder is 1.5\")\nassert(rem(6.5, divisor = 2), isEqualTo = 0.5, error = \"remainder is 0.5\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "rotate",
|
||||
"summary": "Rotate a solid or a sketch.",
|
||||
@ -245921,49 +245215,6 @@
|
||||
"// Translate and rotate a sketch to create a loft.\nsketch001 = startSketchOn(XY)\n\nfn square() {\n return startProfile(sketch001, at = [-10, 10])\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n}\n\nprofile001 = square()\n\nprofile002 = square()\n |> translate(x = 0, y = 0, z = 20)\n |> rotate(axis = [0, 0, 1.0], angle = 45)\n\nloft([profile001, profile002])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "round",
|
||||
"summary": "Round a number to the nearest integer.",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number to round.",
|
||||
"labelRequired": false
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(endAbsolute = [12, 10])\n |> line(end = [round(7.02986), 0])\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "scale",
|
||||
"summary": "Scale a solid or a sketch.",
|
||||
@ -256155,49 +255406,6 @@
|
||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [20, 0])\n |> line(end = [0, 3], tag = $thing)\n |> line(end = [-10, 0])\n |> line(end = [0, 20 - segStartY(thing)])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "sqrt",
|
||||
"summary": "Compute the square root of a number.",
|
||||
"description": "",
|
||||
"tags": [
|
||||
"math"
|
||||
],
|
||||
"keywordArguments": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"description": "The number to compute the square root of.",
|
||||
"labelRequired": false
|
||||
}
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"schema": {
|
||||
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
|
||||
"title": "double",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"required": true,
|
||||
"includeInSnippet": true,
|
||||
"labelRequired": true
|
||||
},
|
||||
"unpublished": false,
|
||||
"deprecated": false,
|
||||
"examples": [
|
||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 50, length = sqrt(2500))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "startProfile",
|
||||
"summary": "Start a new profile at a given point.",
|
||||
|
||||
@ -139,7 +139,7 @@ startSketchOn(motorHousing, face = END)
|
||||
|> extrude(length = -16)
|
||||
|> appearance(color = "#a55e2c")
|
||||
|> fillet(
|
||||
radius = abs(fanSize - mountingHoleSpacing) / 2,
|
||||
radius = math::abs(fanSize - mountingHoleSpacing) / 2,
|
||||
tags = [
|
||||
getNextAdjacentEdge(rectangleSegmentA001),
|
||||
getNextAdjacentEdge(rectangleSegmentB001),
|
||||
|
||||
@ -26,9 +26,9 @@ fn slot(sketch1, start, end, width) {
|
||||
}
|
||||
} else {
|
||||
if end[0] < start[0] {
|
||||
units::toDegrees(atan((end[1] - start[1]) / (end[0] - start[0]))) + 180
|
||||
units::toDegrees(math::atan((end[1] - start[1]) / (end[0] - start[0]))) + 180
|
||||
} else {
|
||||
units::toDegrees( atan((end[1] - start[1]) / (end[0] - start[0])))
|
||||
units::toDegrees( math::atan((end[1] - start[1]) / (end[0] - start[0])))
|
||||
}
|
||||
}
|
||||
dist = sqrt(pow(end[1] - start[1], exp = 2) + pow(end[0] - start[0], exp = 2))
|
||||
|
||||
@ -28,7 +28,7 @@ rs = map(
|
||||
angles = map(
|
||||
rs,
|
||||
f = fn(r) {
|
||||
return units::toDegrees( acos(baseDiameter / 2 / r))
|
||||
return units::toDegrees( math::acos(baseDiameter / 2 / r))
|
||||
},
|
||||
)
|
||||
|
||||
@ -69,8 +69,8 @@ fn leftInvolute(i, sg) {
|
||||
}
|
||||
|
||||
fn rightInvolute(i, sg) {
|
||||
x = rs[i] * math::cos(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
||||
y = -rs[i] * math::sin(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
||||
x = rs[i] * math::cos(-toothAngle + units::toDegrees(math::atan(ys[i] / xs[i])))
|
||||
y = -rs[i] * math::sin(-toothAngle + units::toDegrees(math::atan(ys[i] / xs[i])))
|
||||
return line(sg, endAbsolute = [x, y])
|
||||
}
|
||||
|
||||
@ -95,7 +95,7 @@ keywayWidth = 0.250
|
||||
keywayDepth = keywayWidth / 2
|
||||
holeDiam = 2
|
||||
holeRadius = 1
|
||||
startAngle = asin(keywayWidth / 2 / holeRadius)
|
||||
startAngle = math::asin(keywayWidth / 2 / holeRadius)
|
||||
|
||||
// Sketch the keyway and center hole and extrude
|
||||
keyWay = startSketchOn(body, face = END)
|
||||
|
||||
@ -25,7 +25,7 @@ extrude006 = extrude(sketch006, length = 1)
|
||||
sketch007 = startSketchOn(extrude006, face = END)
|
||||
|> circle(
|
||||
center = [
|
||||
1.75 * math::cos(axisJ1) / abs(math::cos(axisJ1)),
|
||||
1.75 * math::cos(axisJ1) / math::abs(math::cos(axisJ1)),
|
||||
8
|
||||
],
|
||||
radius = 2.75,
|
||||
@ -38,14 +38,14 @@ extrude007 = extrude(sketch007, length = 1.5)
|
||||
sketch008 = startSketchOn(extrude007, face = END)
|
||||
|> circle(
|
||||
center = [
|
||||
1.75 * math::cos(axisJ1) / abs(math::cos(axisJ1)),
|
||||
1.75 * math::cos(axisJ1) / math::abs(math::cos(axisJ1)),
|
||||
6.75
|
||||
],
|
||||
radius = 0.2,
|
||||
)
|
||||
|> patternCircular2d(
|
||||
center = [
|
||||
1.75 * math::cos(axisJ1) / abs(math::cos(axisJ1)),
|
||||
1.75 * math::cos(axisJ1) / math::abs(math::cos(axisJ1)),
|
||||
8
|
||||
],
|
||||
instances = 4,
|
||||
@ -57,7 +57,7 @@ extrude008 = extrude(sketch008, length = 0.2)
|
||||
sketch009 = startSketchOn(extrude007, face = END)
|
||||
|> circle(
|
||||
center = [
|
||||
1.75 * math::cos(axisJ1) / abs(math::cos(axisJ1)),
|
||||
1.75 * math::cos(axisJ1) / math::abs(math::cos(axisJ1)),
|
||||
8
|
||||
],
|
||||
radius = 0.5,
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
|
||||
fn cond(bools) {
|
||||
return fn(a, b) {
|
||||
x = min([max([-1, a-b]), 1]) + 1
|
||||
x = math::min([math::max([-1, a-b]), 1]) + 1
|
||||
return bools[x]
|
||||
}
|
||||
}
|
||||
@ -75,8 +75,8 @@ fn setLength(state, q) {
|
||||
|
||||
fn Gt2(state) { return setLength(state, state.currentLength * state.factor) }
|
||||
fn Lt2(state) { return setLength(state, state.currentLength / state.factor) }
|
||||
fn Add(state) { return setAngle(state, rem(state.currentAngle - state.angle, divisor = 360)) }
|
||||
fn Sub(state) { return setAngle(state, rem(state.currentAngle + state.angle, divisor = 360)) }
|
||||
fn Add(state) { return setAngle(state, math::rem(state.currentAngle - state.angle, divisor = 360)) }
|
||||
fn Sub(state) { return setAngle(state, math::rem(state.currentAngle + state.angle, divisor = 360)) }
|
||||
|
||||
// Only necessary to get around recursion limitations...
|
||||
fn F(state, F) {
|
||||
|
||||
@ -5,7 +5,7 @@ t = 0.005 // taper factor [0-1)
|
||||
// Defines how to modify each layer of the vase.
|
||||
// Each replica is shifted up the Z axis, and has a smoothly-varying radius
|
||||
fn transform(replicaId) {
|
||||
scale = r * abs(1 - (t * replicaId)) * (5 + math::cos((replicaId / 8): number(rad)))
|
||||
scale = r * math::abs(1 - (t * replicaId)) * (5 + math::cos((replicaId / 8): number(rad)))
|
||||
return {
|
||||
translate = [0, 0, replicaId * 10],
|
||||
scale = [scale, scale, 0],
|
||||
|
||||
@ -1307,7 +1307,7 @@ part001 = startSketchOn(XY)
|
||||
|> startProfile(at = [0, 0])
|
||||
|> line(end = [3, 4], tag = $seg01)
|
||||
|> line(end = [
|
||||
min([segLen(seg01), myVar]),
|
||||
math::min([segLen(seg01), myVar]),
|
||||
-legLen(hypotenuse = segLen(seg01), leg = myVar)
|
||||
])
|
||||
"#;
|
||||
@ -1322,7 +1322,7 @@ part001 = startSketchOn(XY)
|
||||
|> startProfile(at = [0, 0])
|
||||
|> line(end = [3, 4], tag = $seg01)
|
||||
|> line(end = [
|
||||
min([segLen(seg01), myVar]),
|
||||
math::min([segLen(seg01), myVar]),
|
||||
legLen(hypotenuse = segLen(seg01), leg = myVar)
|
||||
])
|
||||
"#;
|
||||
@ -1662,7 +1662,7 @@ shape = layer() |> patternTransform(instances = 10, transform = transform)
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn test_math_execute_with_functions() {
|
||||
let ast = r#"myVar = 2 + min([100, -1 + legLen(hypotenuse = 5, leg = 3)])"#;
|
||||
let ast = r#"myVar = 2 + math::min([100, -1 + legLen(hypotenuse = 5, leg = 3)])"#;
|
||||
let result = parse_execute(ast).await.unwrap();
|
||||
assert_eq!(
|
||||
5.0,
|
||||
|
||||
@ -669,8 +669,9 @@ impl NumericType {
|
||||
meta: meta.clone(),
|
||||
}),
|
||||
|
||||
// We don't actually need to coerce, since we just keep the partially-known type with the value.
|
||||
(Default { .. }, Default { .. }) => Ok(KclValue::Number {
|
||||
// If we're coercing to a default, we treat this as coercing to Any since leaving the numeric type unspecified in a coercion situation
|
||||
// means accept any number rather than force the current default.
|
||||
(_, Default { .. }) => Ok(KclValue::Number {
|
||||
value: *value,
|
||||
ty: ty.clone(),
|
||||
meta: meta.clone(),
|
||||
@ -698,16 +699,13 @@ impl NumericType {
|
||||
(Known(_), Known(_)) => Err(val.into()),
|
||||
|
||||
// Known and unknown => we assume the rhs, possibly with adjustment
|
||||
(Known(UnitType::Count), Default { .. }) | (Default { .. }, Known(UnitType::Count)) => {
|
||||
Ok(KclValue::Number {
|
||||
(Default { .. }, Known(UnitType::Count)) => Ok(KclValue::Number {
|
||||
value: *value,
|
||||
ty: Known(UnitType::Count),
|
||||
meta: meta.clone(),
|
||||
})
|
||||
}
|
||||
}),
|
||||
|
||||
(Known(UnitType::Length(l1)), Default { len: l2, .. })
|
||||
| (Default { len: l1, .. }, Known(UnitType::Length(l2))) => {
|
||||
(Default { len: l1, .. }, Known(UnitType::Length(l2))) => {
|
||||
let (value, ty) = l1.adjust_to(*value, *l2);
|
||||
Ok(KclValue::Number {
|
||||
value,
|
||||
@ -716,8 +714,7 @@ impl NumericType {
|
||||
})
|
||||
}
|
||||
|
||||
(Known(UnitType::Angle(a1)), Default { angle: a2, .. })
|
||||
| (Default { angle: a1, .. }, Known(UnitType::Angle(a2))) => {
|
||||
(Default { angle: a1, .. }, Known(UnitType::Angle(a2))) => {
|
||||
let (value, ty) = a1.adjust_to(*value, *a2);
|
||||
Ok(KclValue::Number {
|
||||
value,
|
||||
@ -775,7 +772,7 @@ pub enum UnitType {
|
||||
impl std::fmt::Display for UnitType {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
UnitType::Count => write!(f, "_"),
|
||||
UnitType::Count => write!(f, "Count"),
|
||||
UnitType::Length(l) => l.fmt(f),
|
||||
UnitType::Angle(a) => a.fmt(f),
|
||||
}
|
||||
@ -2034,7 +2031,7 @@ mod test {
|
||||
.as_f64()
|
||||
.unwrap()
|
||||
.round(),
|
||||
25.0
|
||||
1.0
|
||||
);
|
||||
assert_eq!(
|
||||
rads.coerce(&NumericType::default().into(), &mut exec_state)
|
||||
@ -2042,7 +2039,7 @@ mod test {
|
||||
.as_f64()
|
||||
.unwrap()
|
||||
.round(),
|
||||
57.0
|
||||
1.0
|
||||
);
|
||||
}
|
||||
|
||||
@ -2084,14 +2081,19 @@ o = 3mm / 3
|
||||
p = 3_ / 4
|
||||
q = 4inch / 2_
|
||||
|
||||
r = min([0, 3, 42])
|
||||
s = min([0, 3mm, -42])
|
||||
t = min([100, 3in, 142mm])
|
||||
u = min([3rad, 4in])
|
||||
r = math::min([0, 3, 42])
|
||||
s = math::min([0, 3mm, -42])
|
||||
t = math::min([100, 3in, 142mm])
|
||||
u = math::min([3rad, 4in])
|
||||
"#;
|
||||
|
||||
let result = parse_execute(program).await.unwrap();
|
||||
assert_eq!(result.exec_state.errors().len(), 5);
|
||||
assert_eq!(
|
||||
result.exec_state.errors().len(),
|
||||
5,
|
||||
"errors: {:?}",
|
||||
result.exec_state.errors()
|
||||
);
|
||||
|
||||
assert_value_and_type("a", &result, 9.0, NumericType::default());
|
||||
assert_value_and_type("b", &result, 3.0, NumericType::default());
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
//! Functions related to mathematics.
|
||||
|
||||
use anyhow::Result;
|
||||
use kcl_derive_docs::stdlib;
|
||||
|
||||
use crate::{
|
||||
errors::KclError,
|
||||
@ -26,36 +25,11 @@ pub async fn rem(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
|
||||
"Calling `rem` on numbers which have unknown or incompatible units.\n\nYou may need to add information about the type of the argument, for example:\n using a numeric suffix: `42{ty}`\n or using type ascription: `foo(): number({ty})`"
|
||||
));
|
||||
}
|
||||
let remainder = inner_rem(n, d);
|
||||
let remainder = n % d;
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(remainder, ty)))
|
||||
}
|
||||
|
||||
/// Compute the remainder after dividing `num` by `div`.
|
||||
/// If `num` is negative, the result will be too.
|
||||
///
|
||||
/// ```no_run
|
||||
/// assert(rem( 7, divisor = 4), isEqualTo = 3, error = "remainder is 3")
|
||||
/// assert(rem(-7, divisor = 4), isEqualTo = -3, error = "remainder is -3")
|
||||
/// assert(rem( 7, divisor = -4), isEqualTo = 3, error = "remainder is 3")
|
||||
/// assert(rem( 6, divisor = 2.5), isEqualTo = 1, error = "remainder is 1")
|
||||
/// assert(rem( 6.5, divisor = 2.5), isEqualTo = 1.5, error = "remainder is 1.5")
|
||||
/// assert(rem( 6.5, divisor = 2), isEqualTo = 0.5, error = "remainder is 0.5")
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "rem",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
num = {docs = "The number which will be divided by `divisor`."},
|
||||
divisor = {docs = "The number which will divide `num`."},
|
||||
}
|
||||
}]
|
||||
fn inner_rem(num: f64, divisor: f64) -> f64 {
|
||||
num % divisor
|
||||
}
|
||||
|
||||
/// Compute the cosine of a number (in radians).
|
||||
pub async fn cos(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let num: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::angle(), exec_state)?;
|
||||
@ -80,184 +54,48 @@ pub async fn tan(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
|
||||
/// Compute the square root of a number.
|
||||
pub async fn sqrt(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::num_any(), exec_state)?;
|
||||
let result = inner_sqrt(input.n);
|
||||
let result = input.n.sqrt();
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, exec_state.current_default_units())))
|
||||
}
|
||||
|
||||
/// Compute the square root of a number.
|
||||
///
|
||||
/// ```no_run
|
||||
/// exampleSketch = startSketchOn("XZ")
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = 50,
|
||||
/// length = sqrt(2500),
|
||||
/// )
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "sqrt",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "The number to compute the square root of."},
|
||||
}
|
||||
}]
|
||||
fn inner_sqrt(input: f64) -> f64 {
|
||||
input.sqrt()
|
||||
}
|
||||
|
||||
/// Compute the absolute value of a number.
|
||||
pub async fn abs(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::num_any(), exec_state)?;
|
||||
let result = inner_abs(input.n);
|
||||
let result = input.n.abs();
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(input.map_value(result)))
|
||||
}
|
||||
|
||||
/// Compute the absolute value of a number.
|
||||
///
|
||||
/// ```no_run
|
||||
/// myAngle = -120
|
||||
///
|
||||
/// sketch001 = startSketchOn('XZ')
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(end = [8, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = abs(myAngle),
|
||||
/// length = 5,
|
||||
/// )
|
||||
/// |> line(end = [-5, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = myAngle,
|
||||
/// length = 5,
|
||||
/// )
|
||||
/// |> close()
|
||||
///
|
||||
/// baseExtrusion = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "abs",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "The number to compute the absolute value of."},
|
||||
}
|
||||
}]
|
||||
fn inner_abs(input: f64) -> f64 {
|
||||
input.abs()
|
||||
}
|
||||
|
||||
/// Round a number to the nearest integer.
|
||||
pub async fn round(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::num_any(), exec_state)?;
|
||||
let result = inner_round(input.n);
|
||||
let result = input.n.round();
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(input.map_value(result)))
|
||||
}
|
||||
|
||||
/// Round a number to the nearest integer.
|
||||
///
|
||||
/// ```no_run
|
||||
/// sketch001 = startSketchOn('XZ')
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(endAbsolute = [12, 10])
|
||||
/// |> line(end = [round(7.02986), 0])
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "round",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "The number to round."},
|
||||
}
|
||||
}]
|
||||
fn inner_round(input: f64) -> f64 {
|
||||
input.round()
|
||||
}
|
||||
|
||||
/// Compute the largest integer less than or equal to a number.
|
||||
pub async fn floor(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::num_any(), exec_state)?;
|
||||
let result = inner_floor(input.n);
|
||||
let result = input.n.floor();
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(input.map_value(result)))
|
||||
}
|
||||
|
||||
/// Compute the largest integer less than or equal to a number.
|
||||
///
|
||||
/// ```no_run
|
||||
/// sketch001 = startSketchOn('XZ')
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(endAbsolute = [12, 10])
|
||||
/// |> line(end = [floor(7.02986), 0])
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "floor",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "The number to round."},
|
||||
}
|
||||
}]
|
||||
fn inner_floor(input: f64) -> f64 {
|
||||
input.floor()
|
||||
}
|
||||
|
||||
/// Compute the smallest integer greater than or equal to a number.
|
||||
pub async fn ceil(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::num_any(), exec_state)?;
|
||||
let result = inner_ceil(input.n);
|
||||
let result = input.n.ceil();
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(input.map_value(result)))
|
||||
}
|
||||
|
||||
/// Compute the smallest integer greater than or equal to a number.
|
||||
///
|
||||
/// ```no_run
|
||||
/// sketch001 = startSketchOn('XZ')
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(endAbsolute = [12, 10])
|
||||
/// |> line(end = [ceil(7.02986), 0])
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "ceil",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "The number to round."},
|
||||
}
|
||||
}]
|
||||
fn inner_ceil(input: f64) -> f64 {
|
||||
input.ceil()
|
||||
}
|
||||
|
||||
/// Compute the minimum of the given arguments.
|
||||
pub async fn min(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let nums: Vec<TyF64> = args.get_unlabeled_kw_arg_typed(
|
||||
"input",
|
||||
&RuntimeType::Array(Box::new(RuntimeType::num_any()), ArrayLen::None),
|
||||
&RuntimeType::Array(Box::new(RuntimeType::num_any()), ArrayLen::NonEmpty),
|
||||
exec_state,
|
||||
)?;
|
||||
let (nums, ty) = NumericType::combine_eq_array(&nums);
|
||||
@ -267,50 +105,22 @@ pub async fn min(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
|
||||
"Calling `min` on numbers which have unknown or incompatible units.\n\nYou may need to add information about the type of the argument, for example:\n using a numeric suffix: `42{ty}`\n or using type ascription: `foo(): number({ty})`",
|
||||
));
|
||||
}
|
||||
let result = inner_min(nums);
|
||||
|
||||
let mut result = f64::MAX;
|
||||
for num in nums {
|
||||
if num < result {
|
||||
result = num;
|
||||
}
|
||||
}
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, ty)))
|
||||
}
|
||||
|
||||
/// Compute the minimum of the given arguments.
|
||||
///
|
||||
/// ```no_run
|
||||
/// exampleSketch = startSketchOn("XZ")
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = 70,
|
||||
/// length = min([15, 31, 4, 13, 22])
|
||||
/// )
|
||||
/// |> line(end = [20, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "min",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "An array of numbers to compute the minimum of."},
|
||||
}
|
||||
}]
|
||||
fn inner_min(input: Vec<f64>) -> f64 {
|
||||
let mut min = f64::MAX;
|
||||
for num in input.iter() {
|
||||
if *num < min {
|
||||
min = *num;
|
||||
}
|
||||
}
|
||||
|
||||
min
|
||||
}
|
||||
|
||||
/// Compute the maximum of the given arguments.
|
||||
pub async fn max(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let nums: Vec<TyF64> = args.get_unlabeled_kw_arg_typed(
|
||||
"input",
|
||||
&RuntimeType::Array(Box::new(RuntimeType::num_any()), ArrayLen::None),
|
||||
&RuntimeType::Array(Box::new(RuntimeType::num_any()), ArrayLen::NonEmpty),
|
||||
exec_state,
|
||||
)?;
|
||||
let (nums, ty) = NumericType::combine_eq_array(&nums);
|
||||
@ -320,228 +130,60 @@ pub async fn max(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
|
||||
"Calling `max` on numbers which have unknown or incompatible units.\n\nYou may need to add information about the type of the argument, for example:\n using a numeric suffix: `42{ty}`\n or using type ascription: `foo(): number({ty})`",
|
||||
));
|
||||
}
|
||||
let result = inner_max(nums);
|
||||
|
||||
let mut result = f64::MIN;
|
||||
for num in nums {
|
||||
if num > result {
|
||||
result = num;
|
||||
}
|
||||
}
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, ty)))
|
||||
}
|
||||
|
||||
/// Compute the maximum of the given arguments.
|
||||
///
|
||||
/// ```no_run
|
||||
/// exampleSketch = startSketchOn("XZ")
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = 70,
|
||||
/// length = max([15, 31, 4, 13, 22])
|
||||
/// )
|
||||
/// |> line(end = [20, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "max",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "An array of numbers to compute the maximum of."},
|
||||
}
|
||||
}]
|
||||
fn inner_max(input: Vec<f64>) -> f64 {
|
||||
let mut max = f64::MIN;
|
||||
for num in input.iter() {
|
||||
if *num > max {
|
||||
max = *num;
|
||||
}
|
||||
}
|
||||
|
||||
max
|
||||
}
|
||||
|
||||
/// Compute the number to a power.
|
||||
pub async fn pow(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::num_any(), exec_state)?;
|
||||
let exp: TyF64 = args.get_kw_arg_typed("exp", &RuntimeType::count(), exec_state)?;
|
||||
let result = inner_pow(input.n, exp.n);
|
||||
let result = input.n.powf(exp.n);
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, exec_state.current_default_units())))
|
||||
}
|
||||
|
||||
/// Compute the number to a power.
|
||||
///
|
||||
/// ```no_run
|
||||
/// exampleSketch = startSketchOn("XZ")
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = 50,
|
||||
/// length = pow(5, exp = 2),
|
||||
/// )
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "pow",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "The number to raise."},
|
||||
exp = {docs = "The power to raise to."},
|
||||
}
|
||||
}]
|
||||
fn inner_pow(input: f64, exp: f64) -> f64 {
|
||||
input.powf(exp)
|
||||
}
|
||||
|
||||
/// Compute the arccosine of a number (in radians).
|
||||
pub async fn acos(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::count(), exec_state)?;
|
||||
let result = inner_acos(input.n);
|
||||
let result = input.n.acos();
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, NumericType::radians())))
|
||||
}
|
||||
|
||||
/// Compute the arccosine of a number (in radians).
|
||||
///
|
||||
/// ```no_run
|
||||
/// sketch001 = startSketchOn('XZ')
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = units::toDegrees(acos(0.5)),
|
||||
/// length = 10,
|
||||
/// )
|
||||
/// |> line(end = [5, 0])
|
||||
/// |> line(endAbsolute = [12, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "acos",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "The number to compute arccosine of."},
|
||||
}
|
||||
}]
|
||||
fn inner_acos(input: f64) -> f64 {
|
||||
input.acos()
|
||||
}
|
||||
|
||||
/// Compute the arcsine of a number (in radians).
|
||||
pub async fn asin(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::count(), exec_state)?;
|
||||
let result = inner_asin(input.n);
|
||||
let result = input.n.asin();
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, NumericType::radians())))
|
||||
}
|
||||
|
||||
/// Compute the arcsine of a number (in radians).
|
||||
///
|
||||
/// ```no_run
|
||||
/// sketch001 = startSketchOn('XZ')
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = units::toDegrees(asin(0.5)),
|
||||
/// length = 20,
|
||||
/// )
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "asin",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "The number to compute arcsine of."},
|
||||
}
|
||||
}]
|
||||
fn inner_asin(input: f64) -> f64 {
|
||||
input.asin()
|
||||
}
|
||||
|
||||
/// Compute the arctangent of a number (in radians).
|
||||
pub async fn atan(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::count(), exec_state)?;
|
||||
let result = inner_atan(input.n);
|
||||
let result = input.n.atan();
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, NumericType::radians())))
|
||||
}
|
||||
|
||||
/// Compute the arctangent of a number (in radians).
|
||||
///
|
||||
/// Consider using `atan2()` instead for the true inverse of tangent.
|
||||
///
|
||||
/// ```no_run
|
||||
/// sketch001 = startSketchOn('XZ')
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = units::toDegrees(atan(1.25)),
|
||||
/// length = 20,
|
||||
/// )
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "atan",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "The number to compute arctangent of."},
|
||||
}
|
||||
}]
|
||||
fn inner_atan(input: f64) -> f64 {
|
||||
input.atan()
|
||||
}
|
||||
|
||||
/// Compute the four quadrant arctangent of Y and X (in radians).
|
||||
pub async fn atan2(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let y = args.get_kw_arg_typed("y", &RuntimeType::length(), exec_state)?;
|
||||
let x = args.get_kw_arg_typed("x", &RuntimeType::length(), exec_state)?;
|
||||
let (y, x, _) = NumericType::combine_eq_coerce(y, x);
|
||||
let result = inner_atan2(y, x);
|
||||
let result = y.atan2(x);
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, NumericType::radians())))
|
||||
}
|
||||
|
||||
/// Compute the four quadrant arctangent of Y and X (in radians).
|
||||
///
|
||||
/// ```no_run
|
||||
/// sketch001 = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = units::toDegrees(atan2(y = 1.25, x = 2)),
|
||||
/// length = 20,
|
||||
/// )
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "atan2",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = false,
|
||||
args = {
|
||||
y = { docs = "Y"},
|
||||
x = { docs = "X"},
|
||||
}
|
||||
}]
|
||||
fn inner_atan2(y: f64, x: f64) -> f64 {
|
||||
y.atan2(x)
|
||||
}
|
||||
|
||||
/// Compute the logarithm of the number with respect to an arbitrary base.
|
||||
///
|
||||
/// The result might not be correctly rounded owing to implementation
|
||||
@ -550,166 +192,31 @@ fn inner_atan2(y: f64, x: f64) -> f64 {
|
||||
pub async fn log(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::num_any(), exec_state)?;
|
||||
let base: TyF64 = args.get_kw_arg_typed("base", &RuntimeType::count(), exec_state)?;
|
||||
let result = inner_log(input.n, base.n);
|
||||
let result = input.n.log(base.n);
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, exec_state.current_default_units())))
|
||||
}
|
||||
|
||||
/// Compute the logarithm of the number with respect to an arbitrary base.
|
||||
///
|
||||
/// The result might not be correctly rounded owing to implementation
|
||||
/// details; `log2()` can produce more accurate results for base 2,
|
||||
/// and `log10()` can produce more accurate results for base 10.
|
||||
///
|
||||
/// ```no_run
|
||||
/// exampleSketch = startSketchOn("XZ")
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(end = [log(100, base = 5), 0])
|
||||
/// |> line(end = [5, 8])
|
||||
/// |> line(end = [-10, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "log",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "The number to compute the logarithm of."},
|
||||
base = {docs = "The base of the logarithm."},
|
||||
}
|
||||
}]
|
||||
fn inner_log(input: f64, base: f64) -> f64 {
|
||||
input.log(base)
|
||||
}
|
||||
|
||||
/// Compute the base 2 logarithm of the number.
|
||||
pub async fn log2(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::num_any(), exec_state)?;
|
||||
let result = inner_log2(input.n);
|
||||
let result = input.n.log2();
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, exec_state.current_default_units())))
|
||||
}
|
||||
|
||||
/// Compute the base 2 logarithm of the number.
|
||||
///
|
||||
/// ```no_run
|
||||
/// exampleSketch = startSketchOn("XZ")
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(end = [log2(100), 0])
|
||||
/// |> line(end = [5, 8])
|
||||
/// |> line(end = [-10, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "log2",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "The number to compute the logarithm of."},
|
||||
}
|
||||
}]
|
||||
fn inner_log2(input: f64) -> f64 {
|
||||
input.log2()
|
||||
}
|
||||
|
||||
/// Compute the base 10 logarithm of the number.
|
||||
pub async fn log10(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::num_any(), exec_state)?;
|
||||
let result = inner_log10(input.n);
|
||||
let result = input.n.log10();
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, exec_state.current_default_units())))
|
||||
}
|
||||
|
||||
/// Compute the base 10 logarithm of the number.
|
||||
///
|
||||
/// ```no_run
|
||||
/// exampleSketch = startSketchOn("XZ")
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(end = [log10(100), 0])
|
||||
/// |> line(end = [5, 8])
|
||||
/// |> line(end = [-10, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "log10",
|
||||
tags = ["math"],
|
||||
}]
|
||||
fn inner_log10(num: f64) -> f64 {
|
||||
num.log10()
|
||||
}
|
||||
|
||||
/// Compute the natural logarithm of the number.
|
||||
pub async fn ln(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||
let input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::num_any(), exec_state)?;
|
||||
let result = inner_ln(input.n);
|
||||
let result = input.n.ln();
|
||||
|
||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, exec_state.current_default_units())))
|
||||
}
|
||||
|
||||
/// Compute the natural logarithm of the number.
|
||||
///
|
||||
/// ```no_run
|
||||
/// exampleSketch = startSketchOn("XZ")
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(end = [ln(100), 15])
|
||||
/// |> line(end = [5, -6])
|
||||
/// |> line(end = [-10, -10])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "ln",
|
||||
tags = ["math"],
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
input = {docs = "The number to compute the logarithm of."},
|
||||
}
|
||||
}]
|
||||
fn inner_ln(input: f64) -> f64 {
|
||||
input.ln()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_inner_max() {
|
||||
let nums = vec![4.0, 5.0, 6.0];
|
||||
let result = inner_max(nums);
|
||||
assert_eq!(result, 6.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_inner_max_with_neg() {
|
||||
let nums = vec![4.0, -5.0];
|
||||
let result = inner_max(nums);
|
||||
assert_eq!(result, 4.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_inner_min() {
|
||||
let nums = vec![4.0, 5.0, 6.0];
|
||||
let result = inner_min(nums);
|
||||
assert_eq!(result, 4.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_inner_min_with_neg() {
|
||||
let nums = vec![4.0, -5.0];
|
||||
let result = inner_min(nums);
|
||||
assert_eq!(result, -5.0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -104,23 +104,6 @@ lazy_static! {
|
||||
Box::new(crate::std::edge::GetCommonEdge),
|
||||
Box::new(crate::std::sweep::Sweep),
|
||||
Box::new(crate::std::loft::Loft),
|
||||
Box::new(crate::std::math::Acos),
|
||||
Box::new(crate::std::math::Asin),
|
||||
Box::new(crate::std::math::Atan),
|
||||
Box::new(crate::std::math::Atan2),
|
||||
Box::new(crate::std::math::Sqrt),
|
||||
Box::new(crate::std::math::Abs),
|
||||
Box::new(crate::std::math::Rem),
|
||||
Box::new(crate::std::math::Round),
|
||||
Box::new(crate::std::math::Floor),
|
||||
Box::new(crate::std::math::Ceil),
|
||||
Box::new(crate::std::math::Min),
|
||||
Box::new(crate::std::math::Max),
|
||||
Box::new(crate::std::math::Pow),
|
||||
Box::new(crate::std::math::Log),
|
||||
Box::new(crate::std::math::Log2),
|
||||
Box::new(crate::std::math::Log10),
|
||||
Box::new(crate::std::math::Ln),
|
||||
Box::new(crate::std::assert::Assert),
|
||||
Box::new(crate::std::assert::AssertIs),
|
||||
Box::new(crate::std::transform::Scale),
|
||||
@ -176,6 +159,75 @@ pub(crate) fn std_fn(path: &str, fn_name: &str) -> (crate::std::StdFn, StdFnProp
|
||||
|e, a| Box::pin(crate::std::math::tan(e, a)),
|
||||
StdFnProps::default("std::math::tan"),
|
||||
),
|
||||
("math", "acos") => (
|
||||
|e, a| Box::pin(crate::std::math::acos(e, a)),
|
||||
StdFnProps::default("std::math::acos"),
|
||||
),
|
||||
("math", "asin") => (
|
||||
|e, a| Box::pin(crate::std::math::asin(e, a)),
|
||||
StdFnProps::default("std::math::asin"),
|
||||
),
|
||||
("math", "atan") => (
|
||||
|e, a| Box::pin(crate::std::math::atan(e, a)),
|
||||
StdFnProps::default("std::math::atan"),
|
||||
),
|
||||
("math", "atan2") => (
|
||||
|e, a| Box::pin(crate::std::math::atan2(e, a)),
|
||||
StdFnProps::default("std::math::atan2"),
|
||||
),
|
||||
("math", "sqrt") => (
|
||||
|e, a| Box::pin(crate::std::math::sqrt(e, a)),
|
||||
StdFnProps::default("std::math::sqrt"),
|
||||
),
|
||||
|
||||
("math", "abs") => (
|
||||
|e, a| Box::pin(crate::std::math::abs(e, a)),
|
||||
StdFnProps::default("std::math::abs"),
|
||||
),
|
||||
("math", "rem") => (
|
||||
|e, a| Box::pin(crate::std::math::rem(e, a)),
|
||||
StdFnProps::default("std::math::rem"),
|
||||
),
|
||||
("math", "round") => (
|
||||
|e, a| Box::pin(crate::std::math::round(e, a)),
|
||||
StdFnProps::default("std::math::round"),
|
||||
),
|
||||
("math", "floor") => (
|
||||
|e, a| Box::pin(crate::std::math::floor(e, a)),
|
||||
StdFnProps::default("std::math::floor"),
|
||||
),
|
||||
("math", "ceil") => (
|
||||
|e, a| Box::pin(crate::std::math::ceil(e, a)),
|
||||
StdFnProps::default("std::math::ceil"),
|
||||
),
|
||||
("math", "min") => (
|
||||
|e, a| Box::pin(crate::std::math::min(e, a)),
|
||||
StdFnProps::default("std::math::min"),
|
||||
),
|
||||
("math", "max") => (
|
||||
|e, a| Box::pin(crate::std::math::max(e, a)),
|
||||
StdFnProps::default("std::math::max"),
|
||||
),
|
||||
("math", "pow") => (
|
||||
|e, a| Box::pin(crate::std::math::pow(e, a)),
|
||||
StdFnProps::default("std::math::pow"),
|
||||
),
|
||||
("math", "log") => (
|
||||
|e, a| Box::pin(crate::std::math::log(e, a)),
|
||||
StdFnProps::default("std::math::log"),
|
||||
),
|
||||
("math", "log2") => (
|
||||
|e, a| Box::pin(crate::std::math::log2(e, a)),
|
||||
StdFnProps::default("std::math::log2"),
|
||||
),
|
||||
("math", "log10") => (
|
||||
|e, a| Box::pin(crate::std::math::log10(e, a)),
|
||||
StdFnProps::default("std::math::log10"),
|
||||
),
|
||||
("math", "ln") => (
|
||||
|e, a| Box::pin(crate::std::math::ln(e, a)),
|
||||
StdFnProps::default("std::math::ln"),
|
||||
),
|
||||
("sketch", "circle") => (
|
||||
|e, a| Box::pin(crate::std::shapes::circle(e, a)),
|
||||
StdFnProps::default("std::sketch::circle"),
|
||||
|
||||
@ -202,7 +202,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res
|
||||
/// // Defines how to modify each layer of the vase.
|
||||
/// // Each replica is shifted up the Z axis, and has a smoothly-varying radius
|
||||
/// fn transform(replicaId) {
|
||||
/// scale = r * abs(1 - (t * replicaId)) * (5 + math::cos((replicaId / 8): number(rad)))
|
||||
/// scale = r * math::abs(1 - (t * replicaId)) * (5 + math::cos((replicaId / 8): number(rad)))
|
||||
/// return {
|
||||
/// translate = [0, 0, replicaId * 10],
|
||||
/// scale = [scale, scale, 0],
|
||||
|
||||
@ -62,7 +62,7 @@ export TAU = 6.28318530717958647692528676655900577_
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn cos(@num: number(Angle)): number(_) {}
|
||||
export fn cos(@num: number(Angle)): number(Count) {}
|
||||
|
||||
/// Compute the sine of a number.
|
||||
///
|
||||
@ -79,7 +79,7 @@ export fn cos(@num: number(Angle)): number(_) {}
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn sin(@num: number(Angle)): number(_) {}
|
||||
export fn sin(@num: number(Angle)): number(Count) {}
|
||||
|
||||
/// Compute the tangent of a number.
|
||||
///
|
||||
@ -96,7 +96,78 @@ export fn sin(@num: number(Angle)): number(_) {}
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn tan(@num: number(Angle)): number(_) {}
|
||||
export fn tan(@num: number(Angle)): number(Count) {}
|
||||
|
||||
/// Compute the arccosine of a number.
|
||||
///
|
||||
/// ```
|
||||
/// sketch001 = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = math::acos(0.5),
|
||||
/// length = 10,
|
||||
/// )
|
||||
/// |> line(end = [5, 0])
|
||||
/// |> line(endAbsolute = [12, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn acos(@num: number(Count)): number(rad) {}
|
||||
|
||||
/// Compute the arcsine of a number.
|
||||
///
|
||||
/// ```
|
||||
/// sketch001 = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = math::asin(0.5),
|
||||
/// length = 20,
|
||||
/// )
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn asin(@num: number(Count)): number(rad) {}
|
||||
|
||||
/// Compute the arctangent of a number.
|
||||
///
|
||||
/// Consider using `atan2()` instead for the true inverse of tangent.
|
||||
///
|
||||
/// ```no_run
|
||||
/// sketch001 = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = math::atan(1.25),
|
||||
/// length = 20,
|
||||
/// )
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn atan(@num: number(Count)): number(rad) {}
|
||||
|
||||
/// Compute the four quadrant arctangent of Y and X.
|
||||
///
|
||||
/// ```
|
||||
/// sketch001 = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = math::atan2(y = 1.25, x = 2),
|
||||
/// length = 20,
|
||||
/// )
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn atan2(y: number(Length), x: number(Length)): number(rad) {}
|
||||
|
||||
/// Convert polar/sphere (azimuth, elevation, distance) coordinates to
|
||||
/// cartesian (x/y/z grid) coordinates.
|
||||
@ -117,3 +188,241 @@ export fn polar(angle: number(rad), length: number(Length)): Point2d {
|
||||
y = length * sin(angle)
|
||||
return [x, y]
|
||||
}
|
||||
|
||||
/// Compute the remainder after dividing `num` by `div`.
|
||||
/// If `num` is negative, the result will be too.
|
||||
///
|
||||
/// ```
|
||||
/// import rem from "std::math"
|
||||
///
|
||||
/// assert(rem( 7, divisor = 4), isEqualTo = 3, error = "remainder is 3")
|
||||
/// assert(rem(-7, divisor = 4), isEqualTo = -3, error = "remainder is -3")
|
||||
/// assert(rem( 7, divisor = -4), isEqualTo = 3, error = "remainder is 3")
|
||||
/// assert(rem( 6, divisor = 2.5), isEqualTo = 1, error = "remainder is 1")
|
||||
/// assert(rem( 6.5, divisor = 2.5), isEqualTo = 1.5, error = "remainder is 1.5")
|
||||
/// assert(rem( 6.5, divisor = 2), isEqualTo = 0.5, error = "remainder is 0.5")
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn rem(
|
||||
/// The number which will be divided by `divisor`.
|
||||
@num: number,
|
||||
/// The number which will divide `num`.
|
||||
divisor: number,
|
||||
): number {}
|
||||
|
||||
/// Compute the square root of a number.
|
||||
///
|
||||
/// ```
|
||||
/// exampleSketch = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = 50,
|
||||
/// length = sqrt(2500),
|
||||
/// )
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn sqrt(@input: number): number {}
|
||||
|
||||
/// Compute the absolute value of a number.
|
||||
///
|
||||
/// ```
|
||||
/// myAngle = -120
|
||||
///
|
||||
/// sketch001 = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(end = [8, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = math::abs(myAngle),
|
||||
/// length = 5,
|
||||
/// )
|
||||
/// |> line(end = [-5, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = myAngle,
|
||||
/// length = 5,
|
||||
/// )
|
||||
/// |> close()
|
||||
///
|
||||
/// baseExtrusion = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn abs(@input: number): number {}
|
||||
|
||||
/// Round a number to the nearest integer.
|
||||
///
|
||||
/// ```
|
||||
/// sketch001 = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(endAbsolute = [12, 10])
|
||||
/// |> line(end = [math::round(7.02986), 0])
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn round(@input: number): number {}
|
||||
|
||||
/// Compute the largest integer less than or equal to a number.
|
||||
///
|
||||
/// ```
|
||||
/// sketch001 = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(endAbsolute = [12, 10])
|
||||
/// |> line(end = [math::floor(7.02986), 0])
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn floor(@input: number): number {}
|
||||
|
||||
/// Compute the smallest integer greater than or equal to a number.
|
||||
///
|
||||
/// ```
|
||||
/// sketch001 = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(endAbsolute = [12, 10])
|
||||
/// |> line(end = [math::ceil(7.02986), 0])
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// extrude001 = extrude(sketch001, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn ceil(@input: number): number {}
|
||||
|
||||
/// Compute the minimum of the given arguments.
|
||||
///
|
||||
/// ```
|
||||
/// exampleSketch = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = 70,
|
||||
/// length = math::min([15, 31, 4, 13, 22])
|
||||
/// )
|
||||
/// |> line(end = [20, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn min(
|
||||
/// An array of numbers to compute the minimum of.
|
||||
@input: [number; 1+],
|
||||
): number {}
|
||||
|
||||
/// Compute the maximum of the given arguments.
|
||||
///
|
||||
/// ```
|
||||
/// exampleSketch = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = 70,
|
||||
/// length = math::max([15, 31, 4, 13, 22])
|
||||
/// )
|
||||
/// |> line(end = [20, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn max(
|
||||
/// An array of numbers to compute the maximum of.
|
||||
@input: [number; 1+],
|
||||
): number {}
|
||||
|
||||
/// Compute the number to a power.
|
||||
///
|
||||
/// ```
|
||||
/// exampleSketch = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> angledLine(
|
||||
/// angle = 50,
|
||||
/// length = math::pow(5, exp = 2),
|
||||
/// )
|
||||
/// |> yLine(endAbsolute = 0)
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn pow(
|
||||
/// The number to raise.
|
||||
@input: number,
|
||||
/// The power to raise to.
|
||||
exp: number(Count),
|
||||
): number {}
|
||||
|
||||
/// Compute the logarithm of the number with respect to an arbitrary base.
|
||||
///
|
||||
/// The result might not be correctly rounded owing to implementation
|
||||
/// details; `math::log2` can produce more accurate results for base 2,
|
||||
/// and `math::log10` can produce more accurate results for base 10.
|
||||
///
|
||||
/// ```
|
||||
/// exampleSketch = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(end = [math::log(100, base = 5), 0])
|
||||
/// |> line(end = [5, 8])
|
||||
/// |> line(end = [-10, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn log(
|
||||
/// The number to compute the logarithm of.
|
||||
@input: number,
|
||||
/// The base of the logarithm.
|
||||
base: number(Count),
|
||||
): number {}
|
||||
|
||||
/// Compute the base 2 logarithm of the number.
|
||||
///
|
||||
/// ```
|
||||
/// exampleSketch = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(end = [math::log2(100), 0])
|
||||
/// |> line(end = [5, 8])
|
||||
/// |> line(end = [-10, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn log2(@input: number): number {}
|
||||
|
||||
/// Compute the base 10 logarithm of the number.
|
||||
///
|
||||
/// ```
|
||||
/// exampleSketch = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(end = [math::log10(100), 0])
|
||||
/// |> line(end = [5, 8])
|
||||
/// |> line(end = [-10, 0])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn log10(@input: number): number {}
|
||||
|
||||
/// Compute the natural logarithm of the number.
|
||||
///
|
||||
/// ```
|
||||
/// exampleSketch = startSketchOn(XZ)
|
||||
/// |> startProfile(at = [0, 0])
|
||||
/// |> line(end = [math::ln(100), 15])
|
||||
/// |> line(end = [5, -6])
|
||||
/// |> line(end = [-10, -10])
|
||||
/// |> close()
|
||||
///
|
||||
/// example = extrude(exampleSketch, length = 5)
|
||||
/// ```
|
||||
@(impl = std_rust)
|
||||
export fn ln(@input: number): number {}
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
|
||||
export import * from "std::types"
|
||||
export import "std::units"
|
||||
export import PI, E, TAU from "std::math"
|
||||
export import PI, E, TAU, pow, sqrt from "std::math"
|
||||
export import "std::math"
|
||||
export import * from "std::sketch"
|
||||
export import * from "std::solid"
|
||||
|
||||
@ -1,235 +1,235 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph path5 [Path]
|
||||
5["Path<br>[1115, 1165, 0]"]
|
||||
8["Segment<br>[1115, 1165, 0]"]
|
||||
5["Path<br>[1121, 1171, 0]"]
|
||||
8["Segment<br>[1121, 1171, 0]"]
|
||||
220[Solid2d]
|
||||
end
|
||||
subgraph path6 [Path]
|
||||
6["Path<br>[1646, 1683, 0]"]
|
||||
9["Segment<br>[1330, 1368, 0]"]
|
||||
10["Segment<br>[1330, 1368, 0]"]
|
||||
11["Segment<br>[1330, 1368, 0]"]
|
||||
12["Segment<br>[1330, 1368, 0]"]
|
||||
13["Segment<br>[1330, 1368, 0]"]
|
||||
14["Segment<br>[1330, 1368, 0]"]
|
||||
15["Segment<br>[1330, 1368, 0]"]
|
||||
16["Segment<br>[1330, 1368, 0]"]
|
||||
17["Segment<br>[1330, 1368, 0]"]
|
||||
18["Segment<br>[1330, 1368, 0]"]
|
||||
19["Segment<br>[1330, 1368, 0]"]
|
||||
20["Segment<br>[1330, 1368, 0]"]
|
||||
21["Segment<br>[1330, 1368, 0]"]
|
||||
22["Segment<br>[1330, 1368, 0]"]
|
||||
23["Segment<br>[1330, 1368, 0]"]
|
||||
24["Segment<br>[1330, 1368, 0]"]
|
||||
25["Segment<br>[1330, 1368, 0]"]
|
||||
26["Segment<br>[1330, 1368, 0]"]
|
||||
27["Segment<br>[1330, 1368, 0]"]
|
||||
28["Segment<br>[1330, 1368, 0]"]
|
||||
29["Segment<br>[1330, 1368, 0]"]
|
||||
30["Segment<br>[1330, 1368, 0]"]
|
||||
31["Segment<br>[1330, 1368, 0]"]
|
||||
32["Segment<br>[1330, 1368, 0]"]
|
||||
33["Segment<br>[1330, 1368, 0]"]
|
||||
34["Segment<br>[1330, 1368, 0]"]
|
||||
35["Segment<br>[1330, 1368, 0]"]
|
||||
36["Segment<br>[1330, 1368, 0]"]
|
||||
37["Segment<br>[1330, 1368, 0]"]
|
||||
38["Segment<br>[1330, 1368, 0]"]
|
||||
39["Segment<br>[1330, 1368, 0]"]
|
||||
40["Segment<br>[1330, 1368, 0]"]
|
||||
41["Segment<br>[1330, 1368, 0]"]
|
||||
42["Segment<br>[1330, 1368, 0]"]
|
||||
43["Segment<br>[1330, 1368, 0]"]
|
||||
44["Segment<br>[1330, 1368, 0]"]
|
||||
45["Segment<br>[1330, 1368, 0]"]
|
||||
46["Segment<br>[1330, 1368, 0]"]
|
||||
47["Segment<br>[1330, 1368, 0]"]
|
||||
48["Segment<br>[1330, 1368, 0]"]
|
||||
49["Segment<br>[1330, 1368, 0]"]
|
||||
50["Segment<br>[1330, 1368, 0]"]
|
||||
51["Segment<br>[1330, 1368, 0]"]
|
||||
52["Segment<br>[1330, 1368, 0]"]
|
||||
53["Segment<br>[1330, 1368, 0]"]
|
||||
54["Segment<br>[1330, 1368, 0]"]
|
||||
55["Segment<br>[1330, 1368, 0]"]
|
||||
56["Segment<br>[1330, 1368, 0]"]
|
||||
57["Segment<br>[1330, 1368, 0]"]
|
||||
58["Segment<br>[1330, 1368, 0]"]
|
||||
59["Segment<br>[1330, 1368, 0]"]
|
||||
60["Segment<br>[1330, 1368, 0]"]
|
||||
61["Segment<br>[1330, 1368, 0]"]
|
||||
62["Segment<br>[1330, 1368, 0]"]
|
||||
63["Segment<br>[1330, 1368, 0]"]
|
||||
64["Segment<br>[1330, 1368, 0]"]
|
||||
65["Segment<br>[1330, 1368, 0]"]
|
||||
66["Segment<br>[1330, 1368, 0]"]
|
||||
67["Segment<br>[1330, 1368, 0]"]
|
||||
68["Segment<br>[1330, 1368, 0]"]
|
||||
69["Segment<br>[1330, 1368, 0]"]
|
||||
70["Segment<br>[1330, 1368, 0]"]
|
||||
71["Segment<br>[1330, 1368, 0]"]
|
||||
72["Segment<br>[1330, 1368, 0]"]
|
||||
73["Segment<br>[1330, 1368, 0]"]
|
||||
74["Segment<br>[1330, 1368, 0]"]
|
||||
75["Segment<br>[1330, 1368, 0]"]
|
||||
76["Segment<br>[1330, 1368, 0]"]
|
||||
77["Segment<br>[1330, 1368, 0]"]
|
||||
78["Segment<br>[1330, 1368, 0]"]
|
||||
79["Segment<br>[1330, 1368, 0]"]
|
||||
80["Segment<br>[1330, 1368, 0]"]
|
||||
81["Segment<br>[1330, 1368, 0]"]
|
||||
82["Segment<br>[1330, 1368, 0]"]
|
||||
83["Segment<br>[1330, 1368, 0]"]
|
||||
84["Segment<br>[1330, 1368, 0]"]
|
||||
85["Segment<br>[1330, 1368, 0]"]
|
||||
86["Segment<br>[1330, 1368, 0]"]
|
||||
87["Segment<br>[1330, 1368, 0]"]
|
||||
88["Segment<br>[1330, 1368, 0]"]
|
||||
89["Segment<br>[1330, 1368, 0]"]
|
||||
90["Segment<br>[1330, 1368, 0]"]
|
||||
91["Segment<br>[1330, 1368, 0]"]
|
||||
92["Segment<br>[1330, 1368, 0]"]
|
||||
93["Segment<br>[1330, 1368, 0]"]
|
||||
94["Segment<br>[1330, 1368, 0]"]
|
||||
95["Segment<br>[1330, 1368, 0]"]
|
||||
96["Segment<br>[1330, 1368, 0]"]
|
||||
97["Segment<br>[1330, 1368, 0]"]
|
||||
98["Segment<br>[1330, 1368, 0]"]
|
||||
99["Segment<br>[1330, 1368, 0]"]
|
||||
100["Segment<br>[1330, 1368, 0]"]
|
||||
101["Segment<br>[1330, 1368, 0]"]
|
||||
102["Segment<br>[1330, 1368, 0]"]
|
||||
103["Segment<br>[1330, 1368, 0]"]
|
||||
104["Segment<br>[1330, 1368, 0]"]
|
||||
105["Segment<br>[1330, 1368, 0]"]
|
||||
106["Segment<br>[1330, 1368, 0]"]
|
||||
107["Segment<br>[1330, 1368, 0]"]
|
||||
108["Segment<br>[1330, 1368, 0]"]
|
||||
109["Segment<br>[1330, 1368, 0]"]
|
||||
110["Segment<br>[1562, 1592, 0]"]
|
||||
111["Segment<br>[1562, 1592, 0]"]
|
||||
112["Segment<br>[1562, 1592, 0]"]
|
||||
113["Segment<br>[1562, 1592, 0]"]
|
||||
114["Segment<br>[1562, 1592, 0]"]
|
||||
115["Segment<br>[1562, 1592, 0]"]
|
||||
116["Segment<br>[1562, 1592, 0]"]
|
||||
117["Segment<br>[1562, 1592, 0]"]
|
||||
118["Segment<br>[1562, 1592, 0]"]
|
||||
119["Segment<br>[1562, 1592, 0]"]
|
||||
120["Segment<br>[1562, 1592, 0]"]
|
||||
121["Segment<br>[1562, 1592, 0]"]
|
||||
122["Segment<br>[1562, 1592, 0]"]
|
||||
123["Segment<br>[1562, 1592, 0]"]
|
||||
124["Segment<br>[1562, 1592, 0]"]
|
||||
125["Segment<br>[1562, 1592, 0]"]
|
||||
126["Segment<br>[1562, 1592, 0]"]
|
||||
127["Segment<br>[1562, 1592, 0]"]
|
||||
128["Segment<br>[1562, 1592, 0]"]
|
||||
129["Segment<br>[1562, 1592, 0]"]
|
||||
130["Segment<br>[1562, 1592, 0]"]
|
||||
131["Segment<br>[1562, 1592, 0]"]
|
||||
132["Segment<br>[1562, 1592, 0]"]
|
||||
133["Segment<br>[1562, 1592, 0]"]
|
||||
134["Segment<br>[1562, 1592, 0]"]
|
||||
135["Segment<br>[1562, 1592, 0]"]
|
||||
136["Segment<br>[1562, 1592, 0]"]
|
||||
137["Segment<br>[1562, 1592, 0]"]
|
||||
138["Segment<br>[1562, 1592, 0]"]
|
||||
139["Segment<br>[1562, 1592, 0]"]
|
||||
140["Segment<br>[1562, 1592, 0]"]
|
||||
141["Segment<br>[1562, 1592, 0]"]
|
||||
142["Segment<br>[1562, 1592, 0]"]
|
||||
143["Segment<br>[1562, 1592, 0]"]
|
||||
144["Segment<br>[1562, 1592, 0]"]
|
||||
145["Segment<br>[1562, 1592, 0]"]
|
||||
146["Segment<br>[1562, 1592, 0]"]
|
||||
147["Segment<br>[1562, 1592, 0]"]
|
||||
148["Segment<br>[1562, 1592, 0]"]
|
||||
149["Segment<br>[1562, 1592, 0]"]
|
||||
150["Segment<br>[1562, 1592, 0]"]
|
||||
151["Segment<br>[1562, 1592, 0]"]
|
||||
152["Segment<br>[1562, 1592, 0]"]
|
||||
153["Segment<br>[1562, 1592, 0]"]
|
||||
154["Segment<br>[1562, 1592, 0]"]
|
||||
155["Segment<br>[1562, 1592, 0]"]
|
||||
156["Segment<br>[1562, 1592, 0]"]
|
||||
157["Segment<br>[1562, 1592, 0]"]
|
||||
158["Segment<br>[1562, 1592, 0]"]
|
||||
159["Segment<br>[1562, 1592, 0]"]
|
||||
160["Segment<br>[1562, 1592, 0]"]
|
||||
161["Segment<br>[1562, 1592, 0]"]
|
||||
162["Segment<br>[1562, 1592, 0]"]
|
||||
163["Segment<br>[1562, 1592, 0]"]
|
||||
164["Segment<br>[1562, 1592, 0]"]
|
||||
165["Segment<br>[1562, 1592, 0]"]
|
||||
166["Segment<br>[1562, 1592, 0]"]
|
||||
167["Segment<br>[1562, 1592, 0]"]
|
||||
168["Segment<br>[1562, 1592, 0]"]
|
||||
169["Segment<br>[1562, 1592, 0]"]
|
||||
170["Segment<br>[1562, 1592, 0]"]
|
||||
171["Segment<br>[1562, 1592, 0]"]
|
||||
172["Segment<br>[1562, 1592, 0]"]
|
||||
173["Segment<br>[1562, 1592, 0]"]
|
||||
174["Segment<br>[1562, 1592, 0]"]
|
||||
175["Segment<br>[1562, 1592, 0]"]
|
||||
176["Segment<br>[1562, 1592, 0]"]
|
||||
177["Segment<br>[1562, 1592, 0]"]
|
||||
178["Segment<br>[1562, 1592, 0]"]
|
||||
179["Segment<br>[1562, 1592, 0]"]
|
||||
180["Segment<br>[1562, 1592, 0]"]
|
||||
181["Segment<br>[1562, 1592, 0]"]
|
||||
182["Segment<br>[1562, 1592, 0]"]
|
||||
183["Segment<br>[1562, 1592, 0]"]
|
||||
184["Segment<br>[1562, 1592, 0]"]
|
||||
185["Segment<br>[1562, 1592, 0]"]
|
||||
186["Segment<br>[1562, 1592, 0]"]
|
||||
187["Segment<br>[1562, 1592, 0]"]
|
||||
188["Segment<br>[1562, 1592, 0]"]
|
||||
189["Segment<br>[1562, 1592, 0]"]
|
||||
190["Segment<br>[1562, 1592, 0]"]
|
||||
191["Segment<br>[1562, 1592, 0]"]
|
||||
192["Segment<br>[1562, 1592, 0]"]
|
||||
193["Segment<br>[1562, 1592, 0]"]
|
||||
194["Segment<br>[1562, 1592, 0]"]
|
||||
195["Segment<br>[1562, 1592, 0]"]
|
||||
196["Segment<br>[1562, 1592, 0]"]
|
||||
197["Segment<br>[1562, 1592, 0]"]
|
||||
198["Segment<br>[1562, 1592, 0]"]
|
||||
199["Segment<br>[1562, 1592, 0]"]
|
||||
200["Segment<br>[1562, 1592, 0]"]
|
||||
201["Segment<br>[1562, 1592, 0]"]
|
||||
202["Segment<br>[1562, 1592, 0]"]
|
||||
203["Segment<br>[1562, 1592, 0]"]
|
||||
204["Segment<br>[1562, 1592, 0]"]
|
||||
205["Segment<br>[1562, 1592, 0]"]
|
||||
206["Segment<br>[1562, 1592, 0]"]
|
||||
207["Segment<br>[1562, 1592, 0]"]
|
||||
208["Segment<br>[1562, 1592, 0]"]
|
||||
209["Segment<br>[1562, 1592, 0]"]
|
||||
210["Segment<br>[1562, 1592, 0]"]
|
||||
211["Segment<br>[1749, 1847, 0]"]
|
||||
212["Segment<br>[1907, 1914, 0]"]
|
||||
6["Path<br>[1664, 1701, 0]"]
|
||||
9["Segment<br>[1336, 1374, 0]"]
|
||||
10["Segment<br>[1336, 1374, 0]"]
|
||||
11["Segment<br>[1336, 1374, 0]"]
|
||||
12["Segment<br>[1336, 1374, 0]"]
|
||||
13["Segment<br>[1336, 1374, 0]"]
|
||||
14["Segment<br>[1336, 1374, 0]"]
|
||||
15["Segment<br>[1336, 1374, 0]"]
|
||||
16["Segment<br>[1336, 1374, 0]"]
|
||||
17["Segment<br>[1336, 1374, 0]"]
|
||||
18["Segment<br>[1336, 1374, 0]"]
|
||||
19["Segment<br>[1336, 1374, 0]"]
|
||||
20["Segment<br>[1336, 1374, 0]"]
|
||||
21["Segment<br>[1336, 1374, 0]"]
|
||||
22["Segment<br>[1336, 1374, 0]"]
|
||||
23["Segment<br>[1336, 1374, 0]"]
|
||||
24["Segment<br>[1336, 1374, 0]"]
|
||||
25["Segment<br>[1336, 1374, 0]"]
|
||||
26["Segment<br>[1336, 1374, 0]"]
|
||||
27["Segment<br>[1336, 1374, 0]"]
|
||||
28["Segment<br>[1336, 1374, 0]"]
|
||||
29["Segment<br>[1336, 1374, 0]"]
|
||||
30["Segment<br>[1336, 1374, 0]"]
|
||||
31["Segment<br>[1336, 1374, 0]"]
|
||||
32["Segment<br>[1336, 1374, 0]"]
|
||||
33["Segment<br>[1336, 1374, 0]"]
|
||||
34["Segment<br>[1336, 1374, 0]"]
|
||||
35["Segment<br>[1336, 1374, 0]"]
|
||||
36["Segment<br>[1336, 1374, 0]"]
|
||||
37["Segment<br>[1336, 1374, 0]"]
|
||||
38["Segment<br>[1336, 1374, 0]"]
|
||||
39["Segment<br>[1336, 1374, 0]"]
|
||||
40["Segment<br>[1336, 1374, 0]"]
|
||||
41["Segment<br>[1336, 1374, 0]"]
|
||||
42["Segment<br>[1336, 1374, 0]"]
|
||||
43["Segment<br>[1336, 1374, 0]"]
|
||||
44["Segment<br>[1336, 1374, 0]"]
|
||||
45["Segment<br>[1336, 1374, 0]"]
|
||||
46["Segment<br>[1336, 1374, 0]"]
|
||||
47["Segment<br>[1336, 1374, 0]"]
|
||||
48["Segment<br>[1336, 1374, 0]"]
|
||||
49["Segment<br>[1336, 1374, 0]"]
|
||||
50["Segment<br>[1336, 1374, 0]"]
|
||||
51["Segment<br>[1336, 1374, 0]"]
|
||||
52["Segment<br>[1336, 1374, 0]"]
|
||||
53["Segment<br>[1336, 1374, 0]"]
|
||||
54["Segment<br>[1336, 1374, 0]"]
|
||||
55["Segment<br>[1336, 1374, 0]"]
|
||||
56["Segment<br>[1336, 1374, 0]"]
|
||||
57["Segment<br>[1336, 1374, 0]"]
|
||||
58["Segment<br>[1336, 1374, 0]"]
|
||||
59["Segment<br>[1336, 1374, 0]"]
|
||||
60["Segment<br>[1336, 1374, 0]"]
|
||||
61["Segment<br>[1336, 1374, 0]"]
|
||||
62["Segment<br>[1336, 1374, 0]"]
|
||||
63["Segment<br>[1336, 1374, 0]"]
|
||||
64["Segment<br>[1336, 1374, 0]"]
|
||||
65["Segment<br>[1336, 1374, 0]"]
|
||||
66["Segment<br>[1336, 1374, 0]"]
|
||||
67["Segment<br>[1336, 1374, 0]"]
|
||||
68["Segment<br>[1336, 1374, 0]"]
|
||||
69["Segment<br>[1336, 1374, 0]"]
|
||||
70["Segment<br>[1336, 1374, 0]"]
|
||||
71["Segment<br>[1336, 1374, 0]"]
|
||||
72["Segment<br>[1336, 1374, 0]"]
|
||||
73["Segment<br>[1336, 1374, 0]"]
|
||||
74["Segment<br>[1336, 1374, 0]"]
|
||||
75["Segment<br>[1336, 1374, 0]"]
|
||||
76["Segment<br>[1336, 1374, 0]"]
|
||||
77["Segment<br>[1336, 1374, 0]"]
|
||||
78["Segment<br>[1336, 1374, 0]"]
|
||||
79["Segment<br>[1336, 1374, 0]"]
|
||||
80["Segment<br>[1336, 1374, 0]"]
|
||||
81["Segment<br>[1336, 1374, 0]"]
|
||||
82["Segment<br>[1336, 1374, 0]"]
|
||||
83["Segment<br>[1336, 1374, 0]"]
|
||||
84["Segment<br>[1336, 1374, 0]"]
|
||||
85["Segment<br>[1336, 1374, 0]"]
|
||||
86["Segment<br>[1336, 1374, 0]"]
|
||||
87["Segment<br>[1336, 1374, 0]"]
|
||||
88["Segment<br>[1336, 1374, 0]"]
|
||||
89["Segment<br>[1336, 1374, 0]"]
|
||||
90["Segment<br>[1336, 1374, 0]"]
|
||||
91["Segment<br>[1336, 1374, 0]"]
|
||||
92["Segment<br>[1336, 1374, 0]"]
|
||||
93["Segment<br>[1336, 1374, 0]"]
|
||||
94["Segment<br>[1336, 1374, 0]"]
|
||||
95["Segment<br>[1336, 1374, 0]"]
|
||||
96["Segment<br>[1336, 1374, 0]"]
|
||||
97["Segment<br>[1336, 1374, 0]"]
|
||||
98["Segment<br>[1336, 1374, 0]"]
|
||||
99["Segment<br>[1336, 1374, 0]"]
|
||||
100["Segment<br>[1336, 1374, 0]"]
|
||||
101["Segment<br>[1336, 1374, 0]"]
|
||||
102["Segment<br>[1336, 1374, 0]"]
|
||||
103["Segment<br>[1336, 1374, 0]"]
|
||||
104["Segment<br>[1336, 1374, 0]"]
|
||||
105["Segment<br>[1336, 1374, 0]"]
|
||||
106["Segment<br>[1336, 1374, 0]"]
|
||||
107["Segment<br>[1336, 1374, 0]"]
|
||||
108["Segment<br>[1336, 1374, 0]"]
|
||||
109["Segment<br>[1336, 1374, 0]"]
|
||||
110["Segment<br>[1580, 1610, 0]"]
|
||||
111["Segment<br>[1580, 1610, 0]"]
|
||||
112["Segment<br>[1580, 1610, 0]"]
|
||||
113["Segment<br>[1580, 1610, 0]"]
|
||||
114["Segment<br>[1580, 1610, 0]"]
|
||||
115["Segment<br>[1580, 1610, 0]"]
|
||||
116["Segment<br>[1580, 1610, 0]"]
|
||||
117["Segment<br>[1580, 1610, 0]"]
|
||||
118["Segment<br>[1580, 1610, 0]"]
|
||||
119["Segment<br>[1580, 1610, 0]"]
|
||||
120["Segment<br>[1580, 1610, 0]"]
|
||||
121["Segment<br>[1580, 1610, 0]"]
|
||||
122["Segment<br>[1580, 1610, 0]"]
|
||||
123["Segment<br>[1580, 1610, 0]"]
|
||||
124["Segment<br>[1580, 1610, 0]"]
|
||||
125["Segment<br>[1580, 1610, 0]"]
|
||||
126["Segment<br>[1580, 1610, 0]"]
|
||||
127["Segment<br>[1580, 1610, 0]"]
|
||||
128["Segment<br>[1580, 1610, 0]"]
|
||||
129["Segment<br>[1580, 1610, 0]"]
|
||||
130["Segment<br>[1580, 1610, 0]"]
|
||||
131["Segment<br>[1580, 1610, 0]"]
|
||||
132["Segment<br>[1580, 1610, 0]"]
|
||||
133["Segment<br>[1580, 1610, 0]"]
|
||||
134["Segment<br>[1580, 1610, 0]"]
|
||||
135["Segment<br>[1580, 1610, 0]"]
|
||||
136["Segment<br>[1580, 1610, 0]"]
|
||||
137["Segment<br>[1580, 1610, 0]"]
|
||||
138["Segment<br>[1580, 1610, 0]"]
|
||||
139["Segment<br>[1580, 1610, 0]"]
|
||||
140["Segment<br>[1580, 1610, 0]"]
|
||||
141["Segment<br>[1580, 1610, 0]"]
|
||||
142["Segment<br>[1580, 1610, 0]"]
|
||||
143["Segment<br>[1580, 1610, 0]"]
|
||||
144["Segment<br>[1580, 1610, 0]"]
|
||||
145["Segment<br>[1580, 1610, 0]"]
|
||||
146["Segment<br>[1580, 1610, 0]"]
|
||||
147["Segment<br>[1580, 1610, 0]"]
|
||||
148["Segment<br>[1580, 1610, 0]"]
|
||||
149["Segment<br>[1580, 1610, 0]"]
|
||||
150["Segment<br>[1580, 1610, 0]"]
|
||||
151["Segment<br>[1580, 1610, 0]"]
|
||||
152["Segment<br>[1580, 1610, 0]"]
|
||||
153["Segment<br>[1580, 1610, 0]"]
|
||||
154["Segment<br>[1580, 1610, 0]"]
|
||||
155["Segment<br>[1580, 1610, 0]"]
|
||||
156["Segment<br>[1580, 1610, 0]"]
|
||||
157["Segment<br>[1580, 1610, 0]"]
|
||||
158["Segment<br>[1580, 1610, 0]"]
|
||||
159["Segment<br>[1580, 1610, 0]"]
|
||||
160["Segment<br>[1580, 1610, 0]"]
|
||||
161["Segment<br>[1580, 1610, 0]"]
|
||||
162["Segment<br>[1580, 1610, 0]"]
|
||||
163["Segment<br>[1580, 1610, 0]"]
|
||||
164["Segment<br>[1580, 1610, 0]"]
|
||||
165["Segment<br>[1580, 1610, 0]"]
|
||||
166["Segment<br>[1580, 1610, 0]"]
|
||||
167["Segment<br>[1580, 1610, 0]"]
|
||||
168["Segment<br>[1580, 1610, 0]"]
|
||||
169["Segment<br>[1580, 1610, 0]"]
|
||||
170["Segment<br>[1580, 1610, 0]"]
|
||||
171["Segment<br>[1580, 1610, 0]"]
|
||||
172["Segment<br>[1580, 1610, 0]"]
|
||||
173["Segment<br>[1580, 1610, 0]"]
|
||||
174["Segment<br>[1580, 1610, 0]"]
|
||||
175["Segment<br>[1580, 1610, 0]"]
|
||||
176["Segment<br>[1580, 1610, 0]"]
|
||||
177["Segment<br>[1580, 1610, 0]"]
|
||||
178["Segment<br>[1580, 1610, 0]"]
|
||||
179["Segment<br>[1580, 1610, 0]"]
|
||||
180["Segment<br>[1580, 1610, 0]"]
|
||||
181["Segment<br>[1580, 1610, 0]"]
|
||||
182["Segment<br>[1580, 1610, 0]"]
|
||||
183["Segment<br>[1580, 1610, 0]"]
|
||||
184["Segment<br>[1580, 1610, 0]"]
|
||||
185["Segment<br>[1580, 1610, 0]"]
|
||||
186["Segment<br>[1580, 1610, 0]"]
|
||||
187["Segment<br>[1580, 1610, 0]"]
|
||||
188["Segment<br>[1580, 1610, 0]"]
|
||||
189["Segment<br>[1580, 1610, 0]"]
|
||||
190["Segment<br>[1580, 1610, 0]"]
|
||||
191["Segment<br>[1580, 1610, 0]"]
|
||||
192["Segment<br>[1580, 1610, 0]"]
|
||||
193["Segment<br>[1580, 1610, 0]"]
|
||||
194["Segment<br>[1580, 1610, 0]"]
|
||||
195["Segment<br>[1580, 1610, 0]"]
|
||||
196["Segment<br>[1580, 1610, 0]"]
|
||||
197["Segment<br>[1580, 1610, 0]"]
|
||||
198["Segment<br>[1580, 1610, 0]"]
|
||||
199["Segment<br>[1580, 1610, 0]"]
|
||||
200["Segment<br>[1580, 1610, 0]"]
|
||||
201["Segment<br>[1580, 1610, 0]"]
|
||||
202["Segment<br>[1580, 1610, 0]"]
|
||||
203["Segment<br>[1580, 1610, 0]"]
|
||||
204["Segment<br>[1580, 1610, 0]"]
|
||||
205["Segment<br>[1580, 1610, 0]"]
|
||||
206["Segment<br>[1580, 1610, 0]"]
|
||||
207["Segment<br>[1580, 1610, 0]"]
|
||||
208["Segment<br>[1580, 1610, 0]"]
|
||||
209["Segment<br>[1580, 1610, 0]"]
|
||||
210["Segment<br>[1580, 1610, 0]"]
|
||||
211["Segment<br>[1767, 1865, 0]"]
|
||||
212["Segment<br>[1925, 1932, 0]"]
|
||||
219[Solid2d]
|
||||
end
|
||||
subgraph path7 [Path]
|
||||
7["Path<br>[2395, 2486, 0]"]
|
||||
213["Segment<br>[2492, 2519, 0]"]
|
||||
214["Segment<br>[2525, 2553, 0]"]
|
||||
215["Segment<br>[2559, 2587, 0]"]
|
||||
216["Segment<br>[2593, 2716, 0]"]
|
||||
217["Segment<br>[2722, 2834, 0]"]
|
||||
218["Segment<br>[2840, 2847, 0]"]
|
||||
7["Path<br>[2419, 2510, 0]"]
|
||||
213["Segment<br>[2516, 2543, 0]"]
|
||||
214["Segment<br>[2549, 2577, 0]"]
|
||||
215["Segment<br>[2583, 2611, 0]"]
|
||||
216["Segment<br>[2617, 2740, 0]"]
|
||||
217["Segment<br>[2746, 2858, 0]"]
|
||||
218["Segment<br>[2864, 2871, 0]"]
|
||||
221[Solid2d]
|
||||
end
|
||||
1["Plane<br>[168, 185, 0]"]
|
||||
2["Plane<br>[1092, 1109, 0]"]
|
||||
3["Plane<br>[1623, 1640, 0]"]
|
||||
4["StartSketchOnFace<br>[2358, 2389, 0]"]
|
||||
222["Sweep Extrusion<br>[1171, 1199, 0]"]
|
||||
223["Sweep Extrusion<br>[1920, 1948, 0]"]
|
||||
224["Sweep Extrusion<br>[2853, 2882, 0]"]
|
||||
2["Plane<br>[1098, 1115, 0]"]
|
||||
3["Plane<br>[1641, 1658, 0]"]
|
||||
4["StartSketchOnFace<br>[2382, 2413, 0]"]
|
||||
222["Sweep Extrusion<br>[1177, 1205, 0]"]
|
||||
223["Sweep Extrusion<br>[1938, 1966, 0]"]
|
||||
224["Sweep Extrusion<br>[2877, 2906, 0]"]
|
||||
225[Wall]
|
||||
226[Wall]
|
||||
227[Wall]
|
||||
|
||||
@ -1047,7 +1047,15 @@ description: Result of parsing import_async.kcl
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"path": [],
|
||||
"path": [
|
||||
{
|
||||
"commentStart": 0,
|
||||
"end": 0,
|
||||
"name": "math",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
}
|
||||
],
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
@ -2598,7 +2606,15 @@ description: Result of parsing import_async.kcl
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"path": [],
|
||||
"path": [
|
||||
{
|
||||
"commentStart": 0,
|
||||
"end": 0,
|
||||
"name": "math",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
}
|
||||
],
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
@ -2835,7 +2851,15 @@ description: Result of parsing import_async.kcl
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"path": [],
|
||||
"path": [
|
||||
{
|
||||
"commentStart": 0,
|
||||
"end": 0,
|
||||
"name": "math",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
}
|
||||
],
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
@ -4129,7 +4153,15 @@ description: Result of parsing import_async.kcl
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"path": [],
|
||||
"path": [
|
||||
{
|
||||
"commentStart": 0,
|
||||
"end": 0,
|
||||
"name": "math",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
}
|
||||
],
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
|
||||
@ -28,7 +28,7 @@ rs = map([0..cmo], f = fn(i) {
|
||||
|
||||
// Calculate operating pressure angle
|
||||
angles = map(rs, f = fn(r) {
|
||||
return units::toDegrees( acos(baseDiameter / 2 / r))
|
||||
return units::toDegrees( math::acos(baseDiameter / 2 / r))
|
||||
})
|
||||
|
||||
// Calculate the involute function
|
||||
@ -59,8 +59,8 @@ fn leftInvolute(i, sg) {
|
||||
}
|
||||
|
||||
fn rightInvolute(i, sg) {
|
||||
x = rs[i] * math::cos(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
||||
y = -rs[i] * math::sin(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
||||
x = rs[i] * math::cos(-toothAngle + units::toDegrees(math::atan(ys[i] / xs[i])))
|
||||
y = -rs[i] * math::sin(-toothAngle + units::toDegrees(math::atan(ys[i] / xs[i])))
|
||||
return line(sg, endAbsolute = [x, y])
|
||||
}
|
||||
|
||||
@ -89,7 +89,7 @@ keywayWidth = 0.250
|
||||
keywayDepth = keywayWidth / 2
|
||||
holeDiam = 2
|
||||
holeRadius = 1
|
||||
startAngle = asin(keywayWidth / 2 / holeRadius)
|
||||
startAngle = math::asin(keywayWidth / 2 / holeRadius)
|
||||
|
||||
// Sketch the keyway and center hole and extrude
|
||||
keyWay = startSketchOn(body, face = END)
|
||||
|
||||
@ -36,7 +36,7 @@ rs = map(
|
||||
angles = map(
|
||||
rs,
|
||||
f = fn(r) {
|
||||
return units::toDegrees( acos(baseDiameter / 2 / r))
|
||||
return units::toDegrees( math::acos(baseDiameter / 2 / r))
|
||||
},
|
||||
)
|
||||
|
||||
@ -77,8 +77,8 @@ fn leftInvolute(i, sg) {
|
||||
}
|
||||
|
||||
fn rightInvolute(i, sg) {
|
||||
x = rs[i] * math::cos(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
||||
y = -rs[i] * math::sin(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
||||
x = rs[i] * math::cos(-toothAngle + units::toDegrees(math::atan(ys[i] / xs[i])))
|
||||
y = -rs[i] * math::sin(-toothAngle + units::toDegrees(math::atan(ys[i] / xs[i])))
|
||||
return line(sg, endAbsolute = [x, y])
|
||||
}
|
||||
|
||||
@ -103,7 +103,7 @@ keywayWidth = 0.250
|
||||
keywayDepth = keywayWidth / 2
|
||||
holeDiam = 2
|
||||
holeRadius = 1
|
||||
startAngle = asin(keywayWidth / 2 / holeRadius)
|
||||
startAngle = math::asin(keywayWidth / 2 / holeRadius)
|
||||
|
||||
// Sketch the keyway and center hole and extrude
|
||||
keyWay = startSketchOn(body, face = END)
|
||||
|
||||
@ -313,14 +313,14 @@ flowchart LR
|
||||
265["SweepEdge Adjacent"]
|
||||
266["SweepEdge Adjacent"]
|
||||
267["SweepEdge Adjacent"]
|
||||
268["EdgeCut Fillet<br>[5113, 5624, 8]"]
|
||||
269["EdgeCut Fillet<br>[5113, 5624, 8]"]
|
||||
270["EdgeCut Fillet<br>[5113, 5624, 8]"]
|
||||
271["EdgeCut Fillet<br>[5113, 5624, 8]"]
|
||||
272["EdgeCut Fillet<br>[5113, 5624, 8]"]
|
||||
273["EdgeCut Fillet<br>[5113, 5624, 8]"]
|
||||
274["EdgeCut Fillet<br>[5113, 5624, 8]"]
|
||||
275["EdgeCut Fillet<br>[5113, 5624, 8]"]
|
||||
268["EdgeCut Fillet<br>[5113, 5630, 8]"]
|
||||
269["EdgeCut Fillet<br>[5113, 5630, 8]"]
|
||||
270["EdgeCut Fillet<br>[5113, 5630, 8]"]
|
||||
271["EdgeCut Fillet<br>[5113, 5630, 8]"]
|
||||
272["EdgeCut Fillet<br>[5113, 5630, 8]"]
|
||||
273["EdgeCut Fillet<br>[5113, 5630, 8]"]
|
||||
274["EdgeCut Fillet<br>[5113, 5630, 8]"]
|
||||
275["EdgeCut Fillet<br>[5113, 5630, 8]"]
|
||||
276["EdgeCut Fillet<br>[394, 452, 10]"]
|
||||
277["EdgeCut Fillet<br>[394, 452, 10]"]
|
||||
1 --- 8
|
||||
|
||||
@ -3,6 +3,17 @@ source: kcl-lib/src/simulation_tests.rs
|
||||
description: Operations executed bracket.kcl
|
||||
---
|
||||
[
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": "sqrt",
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"planeOrSolid": {
|
||||
@ -341,5 +352,8 @@ description: Operations executed bracket.kcl
|
||||
}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
}
|
||||
]
|
||||
|
||||
@ -608,7 +608,7 @@ flowchart LR
|
||||
83 --- 246
|
||||
83 --- 289
|
||||
90 --- 159
|
||||
90 x--> 193
|
||||
90 x--> 192
|
||||
90 --- 226
|
||||
90 --- 271
|
||||
104 --- 151
|
||||
@ -906,7 +906,7 @@ flowchart LR
|
||||
211 <--x 188
|
||||
212 <--x 188
|
||||
213 <--x 188
|
||||
226 <--x 192
|
||||
226 <--x 193
|
||||
239 <--x 196
|
||||
240 <--x 196
|
||||
241 <--x 196
|
||||
|
||||
@ -1,83 +1,83 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph path6 [Path]
|
||||
6["Path<br>[1017, 1061, 0]"]
|
||||
16["Segment<br>[1069, 1109, 0]"]
|
||||
17["Segment<br>[1117, 1163, 0]"]
|
||||
22["Segment<br>[1171, 1212, 0]"]
|
||||
25["Segment<br>[1220, 1285, 0]"]
|
||||
29["Segment<br>[1293, 1300, 0]"]
|
||||
6["Path<br>[1029, 1073, 0]"]
|
||||
16["Segment<br>[1081, 1121, 0]"]
|
||||
17["Segment<br>[1129, 1175, 0]"]
|
||||
22["Segment<br>[1183, 1224, 0]"]
|
||||
25["Segment<br>[1232, 1297, 0]"]
|
||||
29["Segment<br>[1305, 1312, 0]"]
|
||||
56[Solid2d]
|
||||
end
|
||||
subgraph path7 [Path]
|
||||
7["Path<br>[1017, 1061, 0]"]
|
||||
15["Segment<br>[1069, 1109, 0]"]
|
||||
19["Segment<br>[1117, 1163, 0]"]
|
||||
24["Segment<br>[1171, 1212, 0]"]
|
||||
26["Segment<br>[1220, 1285, 0]"]
|
||||
30["Segment<br>[1293, 1300, 0]"]
|
||||
7["Path<br>[1029, 1073, 0]"]
|
||||
15["Segment<br>[1081, 1121, 0]"]
|
||||
19["Segment<br>[1129, 1175, 0]"]
|
||||
24["Segment<br>[1183, 1224, 0]"]
|
||||
26["Segment<br>[1232, 1297, 0]"]
|
||||
30["Segment<br>[1305, 1312, 0]"]
|
||||
58[Solid2d]
|
||||
end
|
||||
subgraph path8 [Path]
|
||||
8["Path<br>[1017, 1061, 0]"]
|
||||
13["Segment<br>[1069, 1109, 0]"]
|
||||
20["Segment<br>[1117, 1163, 0]"]
|
||||
21["Segment<br>[1171, 1212, 0]"]
|
||||
27["Segment<br>[1220, 1285, 0]"]
|
||||
32["Segment<br>[1293, 1300, 0]"]
|
||||
8["Path<br>[1029, 1073, 0]"]
|
||||
13["Segment<br>[1081, 1121, 0]"]
|
||||
20["Segment<br>[1129, 1175, 0]"]
|
||||
21["Segment<br>[1183, 1224, 0]"]
|
||||
27["Segment<br>[1232, 1297, 0]"]
|
||||
32["Segment<br>[1305, 1312, 0]"]
|
||||
59[Solid2d]
|
||||
end
|
||||
subgraph path9 [Path]
|
||||
9["Path<br>[1017, 1061, 0]"]
|
||||
14["Segment<br>[1069, 1109, 0]"]
|
||||
18["Segment<br>[1117, 1163, 0]"]
|
||||
23["Segment<br>[1171, 1212, 0]"]
|
||||
28["Segment<br>[1220, 1285, 0]"]
|
||||
31["Segment<br>[1293, 1300, 0]"]
|
||||
9["Path<br>[1029, 1073, 0]"]
|
||||
14["Segment<br>[1081, 1121, 0]"]
|
||||
18["Segment<br>[1129, 1175, 0]"]
|
||||
23["Segment<br>[1183, 1224, 0]"]
|
||||
28["Segment<br>[1232, 1297, 0]"]
|
||||
31["Segment<br>[1305, 1312, 0]"]
|
||||
60[Solid2d]
|
||||
end
|
||||
subgraph path10 [Path]
|
||||
10["Path<br>[1464, 1521, 0]"]
|
||||
33["Segment<br>[1527, 1559, 0]"]
|
||||
34["Segment<br>[1565, 1602, 0]"]
|
||||
35["Segment<br>[1608, 1641, 0]"]
|
||||
36["Segment<br>[1647, 1714, 0]"]
|
||||
37["Segment<br>[1720, 1727, 0]"]
|
||||
10["Path<br>[1476, 1533, 0]"]
|
||||
33["Segment<br>[1539, 1571, 0]"]
|
||||
34["Segment<br>[1577, 1614, 0]"]
|
||||
35["Segment<br>[1620, 1653, 0]"]
|
||||
36["Segment<br>[1659, 1726, 0]"]
|
||||
37["Segment<br>[1732, 1739, 0]"]
|
||||
57[Solid2d]
|
||||
end
|
||||
subgraph path11 [Path]
|
||||
11["Path<br>[2760, 2816, 0]"]
|
||||
38["Segment<br>[2822, 2881, 0]"]
|
||||
39["Segment<br>[2887, 2922, 0]"]
|
||||
40["Segment<br>[2928, 2961, 0]"]
|
||||
41["Segment<br>[2967, 3026, 0]"]
|
||||
42["Segment<br>[3032, 3068, 0]"]
|
||||
43["Segment<br>[3074, 3098, 0]"]
|
||||
44["Segment<br>[3104, 3111, 0]"]
|
||||
11["Path<br>[2772, 2828, 0]"]
|
||||
38["Segment<br>[2834, 2893, 0]"]
|
||||
39["Segment<br>[2899, 2934, 0]"]
|
||||
40["Segment<br>[2940, 2973, 0]"]
|
||||
41["Segment<br>[2979, 3038, 0]"]
|
||||
42["Segment<br>[3044, 3080, 0]"]
|
||||
43["Segment<br>[3086, 3110, 0]"]
|
||||
44["Segment<br>[3116, 3123, 0]"]
|
||||
54[Solid2d]
|
||||
end
|
||||
subgraph path12 [Path]
|
||||
12["Path<br>[3706, 3756, 0]"]
|
||||
45["Segment<br>[3762, 3812, 0]"]
|
||||
46["Segment<br>[3818, 3884, 0]"]
|
||||
47["Segment<br>[3890, 3941, 0]"]
|
||||
48["Segment<br>[3947, 4012, 0]"]
|
||||
49["Segment<br>[4018, 4071, 0]"]
|
||||
50["Segment<br>[4077, 4144, 0]"]
|
||||
51["Segment<br>[4150, 4224, 0]"]
|
||||
52["Segment<br>[4230, 4298, 0]"]
|
||||
53["Segment<br>[4304, 4311, 0]"]
|
||||
12["Path<br>[3718, 3768, 0]"]
|
||||
45["Segment<br>[3774, 3824, 0]"]
|
||||
46["Segment<br>[3830, 3896, 0]"]
|
||||
47["Segment<br>[3902, 3953, 0]"]
|
||||
48["Segment<br>[3959, 4024, 0]"]
|
||||
49["Segment<br>[4030, 4083, 0]"]
|
||||
50["Segment<br>[4089, 4156, 0]"]
|
||||
51["Segment<br>[4162, 4236, 0]"]
|
||||
52["Segment<br>[4242, 4310, 0]"]
|
||||
53["Segment<br>[4316, 4323, 0]"]
|
||||
55[Solid2d]
|
||||
end
|
||||
1["Plane<br>[1393, 1410, 0]"]
|
||||
2["Plane<br>[2657, 2699, 0]"]
|
||||
3["Plane<br>[3632, 3658, 0]"]
|
||||
4["StartSketchOnPlane<br>[2643, 2700, 0]"]
|
||||
5["StartSketchOnFace<br>[4468, 4507, 0]"]
|
||||
61["Sweep Extrusion<br>[2332, 2382, 0]"]
|
||||
62["Sweep Extrusion<br>[3145, 3189, 0]"]
|
||||
63["Sweep Extrusion<br>[4367, 4409, 0]"]
|
||||
64["Sweep Extrusion<br>[4644, 4694, 0]"]
|
||||
1["Plane<br>[1405, 1422, 0]"]
|
||||
2["Plane<br>[2669, 2711, 0]"]
|
||||
3["Plane<br>[3644, 3670, 0]"]
|
||||
4["StartSketchOnPlane<br>[2655, 2712, 0]"]
|
||||
5["StartSketchOnFace<br>[4480, 4519, 0]"]
|
||||
61["Sweep Extrusion<br>[2344, 2394, 0]"]
|
||||
62["Sweep Extrusion<br>[3157, 3201, 0]"]
|
||||
63["Sweep Extrusion<br>[4379, 4421, 0]"]
|
||||
64["Sweep Extrusion<br>[4656, 4706, 0]"]
|
||||
65[Wall]
|
||||
66[Wall]
|
||||
67[Wall]
|
||||
@ -156,10 +156,10 @@ flowchart LR
|
||||
140["SweepEdge Adjacent"]
|
||||
141["SweepEdge Adjacent"]
|
||||
142["SweepEdge Adjacent"]
|
||||
143["EdgeCut Fillet<br>[2419, 2560, 0]"]
|
||||
144["EdgeCut Fillet<br>[2419, 2560, 0]"]
|
||||
145["EdgeCut Fillet<br>[3232, 3363, 0]"]
|
||||
146["EdgeCut Fillet<br>[3232, 3363, 0]"]
|
||||
143["EdgeCut Fillet<br>[2431, 2572, 0]"]
|
||||
144["EdgeCut Fillet<br>[2431, 2572, 0]"]
|
||||
145["EdgeCut Fillet<br>[3244, 3375, 0]"]
|
||||
146["EdgeCut Fillet<br>[3244, 3375, 0]"]
|
||||
1 --- 6
|
||||
1 --- 8
|
||||
1 --- 9
|
||||
|
||||
@ -665,7 +665,15 @@ description: Result of parsing food-service-spatula.kcl
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"path": [],
|
||||
"path": [
|
||||
{
|
||||
"commentStart": 0,
|
||||
"end": 0,
|
||||
"name": "math",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
}
|
||||
],
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
@ -875,7 +883,15 @@ description: Result of parsing food-service-spatula.kcl
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"path": [],
|
||||
"path": [
|
||||
{
|
||||
"commentStart": 0,
|
||||
"end": 0,
|
||||
"name": "math",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
}
|
||||
],
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
|
||||
@ -36,6 +36,83 @@ description: Operations executed food-service-spatula.kcl
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": "math::atan",
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": "math::atan",
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": "math::atan",
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": "sqrt",
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": "sqrt",
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": "sqrt",
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": "sqrt",
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
@ -785,6 +862,27 @@ description: Operations executed food-service-spatula.kcl
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
}
|
||||
|
||||
@ -27,9 +27,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": {
|
||||
"commentStart": 1592,
|
||||
"end": 1601,
|
||||
"start": 1592,
|
||||
"commentStart": 1604,
|
||||
"end": 1613,
|
||||
"start": 1604,
|
||||
"type": "TagDeclarator",
|
||||
"value": "backEdge"
|
||||
},
|
||||
@ -90,9 +90,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
-30.0
|
||||
],
|
||||
"tag": {
|
||||
"commentStart": 1592,
|
||||
"end": 1601,
|
||||
"start": 1592,
|
||||
"commentStart": 1604,
|
||||
"end": 1613,
|
||||
"start": 1604,
|
||||
"type": "TagDeclarator",
|
||||
"value": "backEdge"
|
||||
},
|
||||
@ -299,9 +299,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
-30.0
|
||||
],
|
||||
"tag": {
|
||||
"commentStart": 1592,
|
||||
"end": 1601,
|
||||
"start": 1592,
|
||||
"commentStart": 1604,
|
||||
"end": 1613,
|
||||
"start": 1604,
|
||||
"type": "TagDeclarator",
|
||||
"value": "backEdge"
|
||||
},
|
||||
@ -551,9 +551,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": {
|
||||
"commentStart": 4211,
|
||||
"end": 4223,
|
||||
"start": 4211,
|
||||
"commentStart": 4223,
|
||||
"end": 4235,
|
||||
"start": 4223,
|
||||
"type": "TagDeclarator",
|
||||
"value": "gripEdgeTop"
|
||||
},
|
||||
@ -713,9 +713,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
7.0
|
||||
],
|
||||
"tag": {
|
||||
"commentStart": 4211,
|
||||
"end": 4223,
|
||||
"start": 4211,
|
||||
"commentStart": 4223,
|
||||
"end": 4235,
|
||||
"start": 4223,
|
||||
"type": "TagDeclarator",
|
||||
"value": "gripEdgeTop"
|
||||
},
|
||||
@ -1058,9 +1058,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": {
|
||||
"commentStart": 4211,
|
||||
"end": 4223,
|
||||
"start": 4211,
|
||||
"commentStart": 4223,
|
||||
"end": 4235,
|
||||
"start": 4223,
|
||||
"type": "TagDeclarator",
|
||||
"value": "gripEdgeTop"
|
||||
},
|
||||
@ -1220,9 +1220,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
7.0
|
||||
],
|
||||
"tag": {
|
||||
"commentStart": 4211,
|
||||
"end": 4223,
|
||||
"start": 4211,
|
||||
"commentStart": 4223,
|
||||
"end": 4235,
|
||||
"start": 4223,
|
||||
"type": "TagDeclarator",
|
||||
"value": "gripEdgeTop"
|
||||
},
|
||||
@ -1538,9 +1538,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
7.0
|
||||
],
|
||||
"tag": {
|
||||
"commentStart": 4211,
|
||||
"end": 4223,
|
||||
"start": 4211,
|
||||
"commentStart": 4223,
|
||||
"end": 4235,
|
||||
"start": 4223,
|
||||
"type": "TagDeclarator",
|
||||
"value": "gripEdgeTop"
|
||||
},
|
||||
@ -1729,9 +1729,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": {
|
||||
"commentStart": 2863,
|
||||
"end": 2880,
|
||||
"start": 2863,
|
||||
"commentStart": 2875,
|
||||
"end": 2892,
|
||||
"start": 2875,
|
||||
"type": "TagDeclarator",
|
||||
"value": "handleBottomEdge"
|
||||
},
|
||||
@ -1756,9 +1756,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": {
|
||||
"commentStart": 3011,
|
||||
"end": 3025,
|
||||
"start": 3011,
|
||||
"commentStart": 3023,
|
||||
"end": 3037,
|
||||
"start": 3023,
|
||||
"type": "TagDeclarator",
|
||||
"value": "handleTopEdge"
|
||||
},
|
||||
@ -1800,9 +1800,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
3.5
|
||||
],
|
||||
"tag": {
|
||||
"commentStart": 2863,
|
||||
"end": 2880,
|
||||
"start": 2863,
|
||||
"commentStart": 2875,
|
||||
"end": 2892,
|
||||
"start": 2875,
|
||||
"type": "TagDeclarator",
|
||||
"value": "handleBottomEdge"
|
||||
},
|
||||
@ -1863,9 +1863,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
91.3213
|
||||
],
|
||||
"tag": {
|
||||
"commentStart": 3011,
|
||||
"end": 3025,
|
||||
"start": 3011,
|
||||
"commentStart": 3023,
|
||||
"end": 3037,
|
||||
"start": 3023,
|
||||
"type": "TagDeclarator",
|
||||
"value": "handleTopEdge"
|
||||
},
|
||||
@ -2211,9 +2211,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
3.5
|
||||
],
|
||||
"tag": {
|
||||
"commentStart": 2863,
|
||||
"end": 2880,
|
||||
"start": 2863,
|
||||
"commentStart": 2875,
|
||||
"end": 2892,
|
||||
"start": 2875,
|
||||
"type": "TagDeclarator",
|
||||
"value": "handleBottomEdge"
|
||||
},
|
||||
@ -2274,9 +2274,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
91.3213
|
||||
],
|
||||
"tag": {
|
||||
"commentStart": 3011,
|
||||
"end": 3025,
|
||||
"start": 3011,
|
||||
"commentStart": 3023,
|
||||
"end": 3037,
|
||||
"start": 3023,
|
||||
"type": "TagDeclarator",
|
||||
"value": "handleTopEdge"
|
||||
},
|
||||
@ -2536,9 +2536,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": {
|
||||
"commentStart": 4211,
|
||||
"end": 4223,
|
||||
"start": 4211,
|
||||
"commentStart": 4223,
|
||||
"end": 4235,
|
||||
"start": 4223,
|
||||
"type": "TagDeclarator",
|
||||
"value": "gripEdgeTop"
|
||||
},
|
||||
@ -2698,9 +2698,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
7.0
|
||||
],
|
||||
"tag": {
|
||||
"commentStart": 4211,
|
||||
"end": 4223,
|
||||
"start": 4211,
|
||||
"commentStart": 4223,
|
||||
"end": 4235,
|
||||
"start": 4223,
|
||||
"type": "TagDeclarator",
|
||||
"value": "gripEdgeTop"
|
||||
},
|
||||
@ -3370,9 +3370,9 @@ description: Variables in memory after executing food-service-spatula.kcl
|
||||
-30.0
|
||||
],
|
||||
"tag": {
|
||||
"commentStart": 1592,
|
||||
"end": 1601,
|
||||
"start": 1592,
|
||||
"commentStart": 1604,
|
||||
"end": 1613,
|
||||
"start": 1604,
|
||||
"type": "TagDeclarator",
|
||||
"value": "backEdge"
|
||||
},
|
||||
|
||||
@ -1,234 +1,234 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph path4 [Path]
|
||||
4["Path<br>[1441, 1491, 0]"]
|
||||
7["Segment<br>[1441, 1491, 0]"]
|
||||
4["Path<br>[1447, 1497, 0]"]
|
||||
7["Segment<br>[1447, 1497, 0]"]
|
||||
219[Solid2d]
|
||||
end
|
||||
subgraph path5 [Path]
|
||||
5["Path<br>[1972, 2009, 0]"]
|
||||
8["Segment<br>[1656, 1694, 0]"]
|
||||
9["Segment<br>[1656, 1694, 0]"]
|
||||
10["Segment<br>[1656, 1694, 0]"]
|
||||
11["Segment<br>[1656, 1694, 0]"]
|
||||
12["Segment<br>[1656, 1694, 0]"]
|
||||
13["Segment<br>[1656, 1694, 0]"]
|
||||
14["Segment<br>[1656, 1694, 0]"]
|
||||
15["Segment<br>[1656, 1694, 0]"]
|
||||
16["Segment<br>[1656, 1694, 0]"]
|
||||
17["Segment<br>[1656, 1694, 0]"]
|
||||
18["Segment<br>[1656, 1694, 0]"]
|
||||
19["Segment<br>[1656, 1694, 0]"]
|
||||
20["Segment<br>[1656, 1694, 0]"]
|
||||
21["Segment<br>[1656, 1694, 0]"]
|
||||
22["Segment<br>[1656, 1694, 0]"]
|
||||
23["Segment<br>[1656, 1694, 0]"]
|
||||
24["Segment<br>[1656, 1694, 0]"]
|
||||
25["Segment<br>[1656, 1694, 0]"]
|
||||
26["Segment<br>[1656, 1694, 0]"]
|
||||
27["Segment<br>[1656, 1694, 0]"]
|
||||
28["Segment<br>[1656, 1694, 0]"]
|
||||
29["Segment<br>[1656, 1694, 0]"]
|
||||
30["Segment<br>[1656, 1694, 0]"]
|
||||
31["Segment<br>[1656, 1694, 0]"]
|
||||
32["Segment<br>[1656, 1694, 0]"]
|
||||
33["Segment<br>[1656, 1694, 0]"]
|
||||
34["Segment<br>[1656, 1694, 0]"]
|
||||
35["Segment<br>[1656, 1694, 0]"]
|
||||
36["Segment<br>[1656, 1694, 0]"]
|
||||
37["Segment<br>[1656, 1694, 0]"]
|
||||
38["Segment<br>[1656, 1694, 0]"]
|
||||
39["Segment<br>[1656, 1694, 0]"]
|
||||
40["Segment<br>[1656, 1694, 0]"]
|
||||
41["Segment<br>[1656, 1694, 0]"]
|
||||
42["Segment<br>[1656, 1694, 0]"]
|
||||
43["Segment<br>[1656, 1694, 0]"]
|
||||
44["Segment<br>[1656, 1694, 0]"]
|
||||
45["Segment<br>[1656, 1694, 0]"]
|
||||
46["Segment<br>[1656, 1694, 0]"]
|
||||
47["Segment<br>[1656, 1694, 0]"]
|
||||
48["Segment<br>[1656, 1694, 0]"]
|
||||
49["Segment<br>[1656, 1694, 0]"]
|
||||
50["Segment<br>[1656, 1694, 0]"]
|
||||
51["Segment<br>[1656, 1694, 0]"]
|
||||
52["Segment<br>[1656, 1694, 0]"]
|
||||
53["Segment<br>[1656, 1694, 0]"]
|
||||
54["Segment<br>[1656, 1694, 0]"]
|
||||
55["Segment<br>[1656, 1694, 0]"]
|
||||
56["Segment<br>[1656, 1694, 0]"]
|
||||
57["Segment<br>[1656, 1694, 0]"]
|
||||
58["Segment<br>[1656, 1694, 0]"]
|
||||
59["Segment<br>[1656, 1694, 0]"]
|
||||
60["Segment<br>[1656, 1694, 0]"]
|
||||
61["Segment<br>[1656, 1694, 0]"]
|
||||
62["Segment<br>[1656, 1694, 0]"]
|
||||
63["Segment<br>[1656, 1694, 0]"]
|
||||
64["Segment<br>[1656, 1694, 0]"]
|
||||
65["Segment<br>[1656, 1694, 0]"]
|
||||
66["Segment<br>[1656, 1694, 0]"]
|
||||
67["Segment<br>[1656, 1694, 0]"]
|
||||
68["Segment<br>[1656, 1694, 0]"]
|
||||
69["Segment<br>[1656, 1694, 0]"]
|
||||
70["Segment<br>[1656, 1694, 0]"]
|
||||
71["Segment<br>[1656, 1694, 0]"]
|
||||
72["Segment<br>[1656, 1694, 0]"]
|
||||
73["Segment<br>[1656, 1694, 0]"]
|
||||
74["Segment<br>[1656, 1694, 0]"]
|
||||
75["Segment<br>[1656, 1694, 0]"]
|
||||
76["Segment<br>[1656, 1694, 0]"]
|
||||
77["Segment<br>[1656, 1694, 0]"]
|
||||
78["Segment<br>[1656, 1694, 0]"]
|
||||
79["Segment<br>[1656, 1694, 0]"]
|
||||
80["Segment<br>[1656, 1694, 0]"]
|
||||
81["Segment<br>[1656, 1694, 0]"]
|
||||
82["Segment<br>[1656, 1694, 0]"]
|
||||
83["Segment<br>[1656, 1694, 0]"]
|
||||
84["Segment<br>[1656, 1694, 0]"]
|
||||
85["Segment<br>[1656, 1694, 0]"]
|
||||
86["Segment<br>[1656, 1694, 0]"]
|
||||
87["Segment<br>[1656, 1694, 0]"]
|
||||
88["Segment<br>[1656, 1694, 0]"]
|
||||
89["Segment<br>[1656, 1694, 0]"]
|
||||
90["Segment<br>[1656, 1694, 0]"]
|
||||
91["Segment<br>[1656, 1694, 0]"]
|
||||
92["Segment<br>[1656, 1694, 0]"]
|
||||
93["Segment<br>[1656, 1694, 0]"]
|
||||
94["Segment<br>[1656, 1694, 0]"]
|
||||
95["Segment<br>[1656, 1694, 0]"]
|
||||
96["Segment<br>[1656, 1694, 0]"]
|
||||
97["Segment<br>[1656, 1694, 0]"]
|
||||
98["Segment<br>[1656, 1694, 0]"]
|
||||
99["Segment<br>[1656, 1694, 0]"]
|
||||
100["Segment<br>[1656, 1694, 0]"]
|
||||
101["Segment<br>[1656, 1694, 0]"]
|
||||
102["Segment<br>[1656, 1694, 0]"]
|
||||
103["Segment<br>[1656, 1694, 0]"]
|
||||
104["Segment<br>[1656, 1694, 0]"]
|
||||
105["Segment<br>[1656, 1694, 0]"]
|
||||
106["Segment<br>[1656, 1694, 0]"]
|
||||
107["Segment<br>[1656, 1694, 0]"]
|
||||
108["Segment<br>[1656, 1694, 0]"]
|
||||
109["Segment<br>[1888, 1918, 0]"]
|
||||
110["Segment<br>[1888, 1918, 0]"]
|
||||
111["Segment<br>[1888, 1918, 0]"]
|
||||
112["Segment<br>[1888, 1918, 0]"]
|
||||
113["Segment<br>[1888, 1918, 0]"]
|
||||
114["Segment<br>[1888, 1918, 0]"]
|
||||
115["Segment<br>[1888, 1918, 0]"]
|
||||
116["Segment<br>[1888, 1918, 0]"]
|
||||
117["Segment<br>[1888, 1918, 0]"]
|
||||
118["Segment<br>[1888, 1918, 0]"]
|
||||
119["Segment<br>[1888, 1918, 0]"]
|
||||
120["Segment<br>[1888, 1918, 0]"]
|
||||
121["Segment<br>[1888, 1918, 0]"]
|
||||
122["Segment<br>[1888, 1918, 0]"]
|
||||
123["Segment<br>[1888, 1918, 0]"]
|
||||
124["Segment<br>[1888, 1918, 0]"]
|
||||
125["Segment<br>[1888, 1918, 0]"]
|
||||
126["Segment<br>[1888, 1918, 0]"]
|
||||
127["Segment<br>[1888, 1918, 0]"]
|
||||
128["Segment<br>[1888, 1918, 0]"]
|
||||
129["Segment<br>[1888, 1918, 0]"]
|
||||
130["Segment<br>[1888, 1918, 0]"]
|
||||
131["Segment<br>[1888, 1918, 0]"]
|
||||
132["Segment<br>[1888, 1918, 0]"]
|
||||
133["Segment<br>[1888, 1918, 0]"]
|
||||
134["Segment<br>[1888, 1918, 0]"]
|
||||
135["Segment<br>[1888, 1918, 0]"]
|
||||
136["Segment<br>[1888, 1918, 0]"]
|
||||
137["Segment<br>[1888, 1918, 0]"]
|
||||
138["Segment<br>[1888, 1918, 0]"]
|
||||
139["Segment<br>[1888, 1918, 0]"]
|
||||
140["Segment<br>[1888, 1918, 0]"]
|
||||
141["Segment<br>[1888, 1918, 0]"]
|
||||
142["Segment<br>[1888, 1918, 0]"]
|
||||
143["Segment<br>[1888, 1918, 0]"]
|
||||
144["Segment<br>[1888, 1918, 0]"]
|
||||
145["Segment<br>[1888, 1918, 0]"]
|
||||
146["Segment<br>[1888, 1918, 0]"]
|
||||
147["Segment<br>[1888, 1918, 0]"]
|
||||
148["Segment<br>[1888, 1918, 0]"]
|
||||
149["Segment<br>[1888, 1918, 0]"]
|
||||
150["Segment<br>[1888, 1918, 0]"]
|
||||
151["Segment<br>[1888, 1918, 0]"]
|
||||
152["Segment<br>[1888, 1918, 0]"]
|
||||
153["Segment<br>[1888, 1918, 0]"]
|
||||
154["Segment<br>[1888, 1918, 0]"]
|
||||
155["Segment<br>[1888, 1918, 0]"]
|
||||
156["Segment<br>[1888, 1918, 0]"]
|
||||
157["Segment<br>[1888, 1918, 0]"]
|
||||
158["Segment<br>[1888, 1918, 0]"]
|
||||
159["Segment<br>[1888, 1918, 0]"]
|
||||
160["Segment<br>[1888, 1918, 0]"]
|
||||
161["Segment<br>[1888, 1918, 0]"]
|
||||
162["Segment<br>[1888, 1918, 0]"]
|
||||
163["Segment<br>[1888, 1918, 0]"]
|
||||
164["Segment<br>[1888, 1918, 0]"]
|
||||
165["Segment<br>[1888, 1918, 0]"]
|
||||
166["Segment<br>[1888, 1918, 0]"]
|
||||
167["Segment<br>[1888, 1918, 0]"]
|
||||
168["Segment<br>[1888, 1918, 0]"]
|
||||
169["Segment<br>[1888, 1918, 0]"]
|
||||
170["Segment<br>[1888, 1918, 0]"]
|
||||
171["Segment<br>[1888, 1918, 0]"]
|
||||
172["Segment<br>[1888, 1918, 0]"]
|
||||
173["Segment<br>[1888, 1918, 0]"]
|
||||
174["Segment<br>[1888, 1918, 0]"]
|
||||
175["Segment<br>[1888, 1918, 0]"]
|
||||
176["Segment<br>[1888, 1918, 0]"]
|
||||
177["Segment<br>[1888, 1918, 0]"]
|
||||
178["Segment<br>[1888, 1918, 0]"]
|
||||
179["Segment<br>[1888, 1918, 0]"]
|
||||
180["Segment<br>[1888, 1918, 0]"]
|
||||
181["Segment<br>[1888, 1918, 0]"]
|
||||
182["Segment<br>[1888, 1918, 0]"]
|
||||
183["Segment<br>[1888, 1918, 0]"]
|
||||
184["Segment<br>[1888, 1918, 0]"]
|
||||
185["Segment<br>[1888, 1918, 0]"]
|
||||
186["Segment<br>[1888, 1918, 0]"]
|
||||
187["Segment<br>[1888, 1918, 0]"]
|
||||
188["Segment<br>[1888, 1918, 0]"]
|
||||
189["Segment<br>[1888, 1918, 0]"]
|
||||
190["Segment<br>[1888, 1918, 0]"]
|
||||
191["Segment<br>[1888, 1918, 0]"]
|
||||
192["Segment<br>[1888, 1918, 0]"]
|
||||
193["Segment<br>[1888, 1918, 0]"]
|
||||
194["Segment<br>[1888, 1918, 0]"]
|
||||
195["Segment<br>[1888, 1918, 0]"]
|
||||
196["Segment<br>[1888, 1918, 0]"]
|
||||
197["Segment<br>[1888, 1918, 0]"]
|
||||
198["Segment<br>[1888, 1918, 0]"]
|
||||
199["Segment<br>[1888, 1918, 0]"]
|
||||
200["Segment<br>[1888, 1918, 0]"]
|
||||
201["Segment<br>[1888, 1918, 0]"]
|
||||
202["Segment<br>[1888, 1918, 0]"]
|
||||
203["Segment<br>[1888, 1918, 0]"]
|
||||
204["Segment<br>[1888, 1918, 0]"]
|
||||
205["Segment<br>[1888, 1918, 0]"]
|
||||
206["Segment<br>[1888, 1918, 0]"]
|
||||
207["Segment<br>[1888, 1918, 0]"]
|
||||
208["Segment<br>[1888, 1918, 0]"]
|
||||
209["Segment<br>[1888, 1918, 0]"]
|
||||
210["Segment<br>[2075, 2144, 0]"]
|
||||
211["Segment<br>[2204, 2211, 0]"]
|
||||
5["Path<br>[1990, 2027, 0]"]
|
||||
8["Segment<br>[1662, 1700, 0]"]
|
||||
9["Segment<br>[1662, 1700, 0]"]
|
||||
10["Segment<br>[1662, 1700, 0]"]
|
||||
11["Segment<br>[1662, 1700, 0]"]
|
||||
12["Segment<br>[1662, 1700, 0]"]
|
||||
13["Segment<br>[1662, 1700, 0]"]
|
||||
14["Segment<br>[1662, 1700, 0]"]
|
||||
15["Segment<br>[1662, 1700, 0]"]
|
||||
16["Segment<br>[1662, 1700, 0]"]
|
||||
17["Segment<br>[1662, 1700, 0]"]
|
||||
18["Segment<br>[1662, 1700, 0]"]
|
||||
19["Segment<br>[1662, 1700, 0]"]
|
||||
20["Segment<br>[1662, 1700, 0]"]
|
||||
21["Segment<br>[1662, 1700, 0]"]
|
||||
22["Segment<br>[1662, 1700, 0]"]
|
||||
23["Segment<br>[1662, 1700, 0]"]
|
||||
24["Segment<br>[1662, 1700, 0]"]
|
||||
25["Segment<br>[1662, 1700, 0]"]
|
||||
26["Segment<br>[1662, 1700, 0]"]
|
||||
27["Segment<br>[1662, 1700, 0]"]
|
||||
28["Segment<br>[1662, 1700, 0]"]
|
||||
29["Segment<br>[1662, 1700, 0]"]
|
||||
30["Segment<br>[1662, 1700, 0]"]
|
||||
31["Segment<br>[1662, 1700, 0]"]
|
||||
32["Segment<br>[1662, 1700, 0]"]
|
||||
33["Segment<br>[1662, 1700, 0]"]
|
||||
34["Segment<br>[1662, 1700, 0]"]
|
||||
35["Segment<br>[1662, 1700, 0]"]
|
||||
36["Segment<br>[1662, 1700, 0]"]
|
||||
37["Segment<br>[1662, 1700, 0]"]
|
||||
38["Segment<br>[1662, 1700, 0]"]
|
||||
39["Segment<br>[1662, 1700, 0]"]
|
||||
40["Segment<br>[1662, 1700, 0]"]
|
||||
41["Segment<br>[1662, 1700, 0]"]
|
||||
42["Segment<br>[1662, 1700, 0]"]
|
||||
43["Segment<br>[1662, 1700, 0]"]
|
||||
44["Segment<br>[1662, 1700, 0]"]
|
||||
45["Segment<br>[1662, 1700, 0]"]
|
||||
46["Segment<br>[1662, 1700, 0]"]
|
||||
47["Segment<br>[1662, 1700, 0]"]
|
||||
48["Segment<br>[1662, 1700, 0]"]
|
||||
49["Segment<br>[1662, 1700, 0]"]
|
||||
50["Segment<br>[1662, 1700, 0]"]
|
||||
51["Segment<br>[1662, 1700, 0]"]
|
||||
52["Segment<br>[1662, 1700, 0]"]
|
||||
53["Segment<br>[1662, 1700, 0]"]
|
||||
54["Segment<br>[1662, 1700, 0]"]
|
||||
55["Segment<br>[1662, 1700, 0]"]
|
||||
56["Segment<br>[1662, 1700, 0]"]
|
||||
57["Segment<br>[1662, 1700, 0]"]
|
||||
58["Segment<br>[1662, 1700, 0]"]
|
||||
59["Segment<br>[1662, 1700, 0]"]
|
||||
60["Segment<br>[1662, 1700, 0]"]
|
||||
61["Segment<br>[1662, 1700, 0]"]
|
||||
62["Segment<br>[1662, 1700, 0]"]
|
||||
63["Segment<br>[1662, 1700, 0]"]
|
||||
64["Segment<br>[1662, 1700, 0]"]
|
||||
65["Segment<br>[1662, 1700, 0]"]
|
||||
66["Segment<br>[1662, 1700, 0]"]
|
||||
67["Segment<br>[1662, 1700, 0]"]
|
||||
68["Segment<br>[1662, 1700, 0]"]
|
||||
69["Segment<br>[1662, 1700, 0]"]
|
||||
70["Segment<br>[1662, 1700, 0]"]
|
||||
71["Segment<br>[1662, 1700, 0]"]
|
||||
72["Segment<br>[1662, 1700, 0]"]
|
||||
73["Segment<br>[1662, 1700, 0]"]
|
||||
74["Segment<br>[1662, 1700, 0]"]
|
||||
75["Segment<br>[1662, 1700, 0]"]
|
||||
76["Segment<br>[1662, 1700, 0]"]
|
||||
77["Segment<br>[1662, 1700, 0]"]
|
||||
78["Segment<br>[1662, 1700, 0]"]
|
||||
79["Segment<br>[1662, 1700, 0]"]
|
||||
80["Segment<br>[1662, 1700, 0]"]
|
||||
81["Segment<br>[1662, 1700, 0]"]
|
||||
82["Segment<br>[1662, 1700, 0]"]
|
||||
83["Segment<br>[1662, 1700, 0]"]
|
||||
84["Segment<br>[1662, 1700, 0]"]
|
||||
85["Segment<br>[1662, 1700, 0]"]
|
||||
86["Segment<br>[1662, 1700, 0]"]
|
||||
87["Segment<br>[1662, 1700, 0]"]
|
||||
88["Segment<br>[1662, 1700, 0]"]
|
||||
89["Segment<br>[1662, 1700, 0]"]
|
||||
90["Segment<br>[1662, 1700, 0]"]
|
||||
91["Segment<br>[1662, 1700, 0]"]
|
||||
92["Segment<br>[1662, 1700, 0]"]
|
||||
93["Segment<br>[1662, 1700, 0]"]
|
||||
94["Segment<br>[1662, 1700, 0]"]
|
||||
95["Segment<br>[1662, 1700, 0]"]
|
||||
96["Segment<br>[1662, 1700, 0]"]
|
||||
97["Segment<br>[1662, 1700, 0]"]
|
||||
98["Segment<br>[1662, 1700, 0]"]
|
||||
99["Segment<br>[1662, 1700, 0]"]
|
||||
100["Segment<br>[1662, 1700, 0]"]
|
||||
101["Segment<br>[1662, 1700, 0]"]
|
||||
102["Segment<br>[1662, 1700, 0]"]
|
||||
103["Segment<br>[1662, 1700, 0]"]
|
||||
104["Segment<br>[1662, 1700, 0]"]
|
||||
105["Segment<br>[1662, 1700, 0]"]
|
||||
106["Segment<br>[1662, 1700, 0]"]
|
||||
107["Segment<br>[1662, 1700, 0]"]
|
||||
108["Segment<br>[1662, 1700, 0]"]
|
||||
109["Segment<br>[1906, 1936, 0]"]
|
||||
110["Segment<br>[1906, 1936, 0]"]
|
||||
111["Segment<br>[1906, 1936, 0]"]
|
||||
112["Segment<br>[1906, 1936, 0]"]
|
||||
113["Segment<br>[1906, 1936, 0]"]
|
||||
114["Segment<br>[1906, 1936, 0]"]
|
||||
115["Segment<br>[1906, 1936, 0]"]
|
||||
116["Segment<br>[1906, 1936, 0]"]
|
||||
117["Segment<br>[1906, 1936, 0]"]
|
||||
118["Segment<br>[1906, 1936, 0]"]
|
||||
119["Segment<br>[1906, 1936, 0]"]
|
||||
120["Segment<br>[1906, 1936, 0]"]
|
||||
121["Segment<br>[1906, 1936, 0]"]
|
||||
122["Segment<br>[1906, 1936, 0]"]
|
||||
123["Segment<br>[1906, 1936, 0]"]
|
||||
124["Segment<br>[1906, 1936, 0]"]
|
||||
125["Segment<br>[1906, 1936, 0]"]
|
||||
126["Segment<br>[1906, 1936, 0]"]
|
||||
127["Segment<br>[1906, 1936, 0]"]
|
||||
128["Segment<br>[1906, 1936, 0]"]
|
||||
129["Segment<br>[1906, 1936, 0]"]
|
||||
130["Segment<br>[1906, 1936, 0]"]
|
||||
131["Segment<br>[1906, 1936, 0]"]
|
||||
132["Segment<br>[1906, 1936, 0]"]
|
||||
133["Segment<br>[1906, 1936, 0]"]
|
||||
134["Segment<br>[1906, 1936, 0]"]
|
||||
135["Segment<br>[1906, 1936, 0]"]
|
||||
136["Segment<br>[1906, 1936, 0]"]
|
||||
137["Segment<br>[1906, 1936, 0]"]
|
||||
138["Segment<br>[1906, 1936, 0]"]
|
||||
139["Segment<br>[1906, 1936, 0]"]
|
||||
140["Segment<br>[1906, 1936, 0]"]
|
||||
141["Segment<br>[1906, 1936, 0]"]
|
||||
142["Segment<br>[1906, 1936, 0]"]
|
||||
143["Segment<br>[1906, 1936, 0]"]
|
||||
144["Segment<br>[1906, 1936, 0]"]
|
||||
145["Segment<br>[1906, 1936, 0]"]
|
||||
146["Segment<br>[1906, 1936, 0]"]
|
||||
147["Segment<br>[1906, 1936, 0]"]
|
||||
148["Segment<br>[1906, 1936, 0]"]
|
||||
149["Segment<br>[1906, 1936, 0]"]
|
||||
150["Segment<br>[1906, 1936, 0]"]
|
||||
151["Segment<br>[1906, 1936, 0]"]
|
||||
152["Segment<br>[1906, 1936, 0]"]
|
||||
153["Segment<br>[1906, 1936, 0]"]
|
||||
154["Segment<br>[1906, 1936, 0]"]
|
||||
155["Segment<br>[1906, 1936, 0]"]
|
||||
156["Segment<br>[1906, 1936, 0]"]
|
||||
157["Segment<br>[1906, 1936, 0]"]
|
||||
158["Segment<br>[1906, 1936, 0]"]
|
||||
159["Segment<br>[1906, 1936, 0]"]
|
||||
160["Segment<br>[1906, 1936, 0]"]
|
||||
161["Segment<br>[1906, 1936, 0]"]
|
||||
162["Segment<br>[1906, 1936, 0]"]
|
||||
163["Segment<br>[1906, 1936, 0]"]
|
||||
164["Segment<br>[1906, 1936, 0]"]
|
||||
165["Segment<br>[1906, 1936, 0]"]
|
||||
166["Segment<br>[1906, 1936, 0]"]
|
||||
167["Segment<br>[1906, 1936, 0]"]
|
||||
168["Segment<br>[1906, 1936, 0]"]
|
||||
169["Segment<br>[1906, 1936, 0]"]
|
||||
170["Segment<br>[1906, 1936, 0]"]
|
||||
171["Segment<br>[1906, 1936, 0]"]
|
||||
172["Segment<br>[1906, 1936, 0]"]
|
||||
173["Segment<br>[1906, 1936, 0]"]
|
||||
174["Segment<br>[1906, 1936, 0]"]
|
||||
175["Segment<br>[1906, 1936, 0]"]
|
||||
176["Segment<br>[1906, 1936, 0]"]
|
||||
177["Segment<br>[1906, 1936, 0]"]
|
||||
178["Segment<br>[1906, 1936, 0]"]
|
||||
179["Segment<br>[1906, 1936, 0]"]
|
||||
180["Segment<br>[1906, 1936, 0]"]
|
||||
181["Segment<br>[1906, 1936, 0]"]
|
||||
182["Segment<br>[1906, 1936, 0]"]
|
||||
183["Segment<br>[1906, 1936, 0]"]
|
||||
184["Segment<br>[1906, 1936, 0]"]
|
||||
185["Segment<br>[1906, 1936, 0]"]
|
||||
186["Segment<br>[1906, 1936, 0]"]
|
||||
187["Segment<br>[1906, 1936, 0]"]
|
||||
188["Segment<br>[1906, 1936, 0]"]
|
||||
189["Segment<br>[1906, 1936, 0]"]
|
||||
190["Segment<br>[1906, 1936, 0]"]
|
||||
191["Segment<br>[1906, 1936, 0]"]
|
||||
192["Segment<br>[1906, 1936, 0]"]
|
||||
193["Segment<br>[1906, 1936, 0]"]
|
||||
194["Segment<br>[1906, 1936, 0]"]
|
||||
195["Segment<br>[1906, 1936, 0]"]
|
||||
196["Segment<br>[1906, 1936, 0]"]
|
||||
197["Segment<br>[1906, 1936, 0]"]
|
||||
198["Segment<br>[1906, 1936, 0]"]
|
||||
199["Segment<br>[1906, 1936, 0]"]
|
||||
200["Segment<br>[1906, 1936, 0]"]
|
||||
201["Segment<br>[1906, 1936, 0]"]
|
||||
202["Segment<br>[1906, 1936, 0]"]
|
||||
203["Segment<br>[1906, 1936, 0]"]
|
||||
204["Segment<br>[1906, 1936, 0]"]
|
||||
205["Segment<br>[1906, 1936, 0]"]
|
||||
206["Segment<br>[1906, 1936, 0]"]
|
||||
207["Segment<br>[1906, 1936, 0]"]
|
||||
208["Segment<br>[1906, 1936, 0]"]
|
||||
209["Segment<br>[1906, 1936, 0]"]
|
||||
210["Segment<br>[2093, 2162, 0]"]
|
||||
211["Segment<br>[2222, 2229, 0]"]
|
||||
218[Solid2d]
|
||||
end
|
||||
subgraph path6 [Path]
|
||||
6["Path<br>[2692, 2804, 0]"]
|
||||
212["Segment<br>[2810, 2837, 0]"]
|
||||
213["Segment<br>[2843, 2871, 0]"]
|
||||
214["Segment<br>[2877, 2905, 0]"]
|
||||
215["Segment<br>[2911, 3005, 0]"]
|
||||
216["Segment<br>[3011, 3094, 0]"]
|
||||
217["Segment<br>[3100, 3107, 0]"]
|
||||
6["Path<br>[2716, 2828, 0]"]
|
||||
212["Segment<br>[2834, 2861, 0]"]
|
||||
213["Segment<br>[2867, 2895, 0]"]
|
||||
214["Segment<br>[2901, 2929, 0]"]
|
||||
215["Segment<br>[2935, 3029, 0]"]
|
||||
216["Segment<br>[3035, 3118, 0]"]
|
||||
217["Segment<br>[3124, 3131, 0]"]
|
||||
220[Solid2d]
|
||||
end
|
||||
1["Plane<br>[1418, 1435, 0]"]
|
||||
2["Plane<br>[1949, 1966, 0]"]
|
||||
3["StartSketchOnFace<br>[2655, 2686, 0]"]
|
||||
221["Sweep Extrusion<br>[1497, 1525, 0]"]
|
||||
222["Sweep Extrusion<br>[2217, 2245, 0]"]
|
||||
223["Sweep Extrusion<br>[3113, 3142, 0]"]
|
||||
1["Plane<br>[1424, 1441, 0]"]
|
||||
2["Plane<br>[1967, 1984, 0]"]
|
||||
3["StartSketchOnFace<br>[2679, 2710, 0]"]
|
||||
221["Sweep Extrusion<br>[1503, 1531, 0]"]
|
||||
222["Sweep Extrusion<br>[2235, 2263, 0]"]
|
||||
223["Sweep Extrusion<br>[3137, 3166, 0]"]
|
||||
224[Wall]
|
||||
225[Wall]
|
||||
226[Wall]
|
||||
|
||||
@ -886,7 +886,15 @@ description: Result of parsing gear.kcl
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"path": [],
|
||||
"path": [
|
||||
{
|
||||
"commentStart": 0,
|
||||
"end": 0,
|
||||
"name": "math",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
}
|
||||
],
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
@ -2405,7 +2413,15 @@ description: Result of parsing gear.kcl
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"path": [],
|
||||
"path": [
|
||||
{
|
||||
"commentStart": 0,
|
||||
"end": 0,
|
||||
"name": "math",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
}
|
||||
],
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
@ -2642,7 +2658,15 @@ description: Result of parsing gear.kcl
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"path": [],
|
||||
"path": [
|
||||
{
|
||||
"commentStart": 0,
|
||||
"end": 0,
|
||||
"name": "math",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
}
|
||||
],
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
@ -3936,7 +3960,15 @@ description: Result of parsing gear.kcl
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"path": [],
|
||||
"path": [
|
||||
{
|
||||
"commentStart": 0,
|
||||
"end": 0,
|
||||
"name": "math",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
}
|
||||
],
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
|
||||
@ -44,23 +44,23 @@ flowchart LR
|
||||
87[Solid2d]
|
||||
end
|
||||
subgraph path14 [Path]
|
||||
14["Path<br>[865, 1030, 10]"]
|
||||
47["Segment<br>[865, 1030, 10]"]
|
||||
14["Path<br>[865, 1036, 10]"]
|
||||
47["Segment<br>[865, 1036, 10]"]
|
||||
90[Solid2d]
|
||||
end
|
||||
subgraph path15 [Path]
|
||||
15["Path<br>[1239, 1376, 10]"]
|
||||
48["Segment<br>[1239, 1376, 10]"]
|
||||
15["Path<br>[1245, 1388, 10]"]
|
||||
48["Segment<br>[1245, 1388, 10]"]
|
||||
101[Solid2d]
|
||||
end
|
||||
subgraph path16 [Path]
|
||||
16["Path<br>[1688, 1852, 10]"]
|
||||
49["Segment<br>[1688, 1852, 10]"]
|
||||
16["Path<br>[1706, 1876, 10]"]
|
||||
49["Segment<br>[1706, 1876, 10]"]
|
||||
95[Solid2d]
|
||||
end
|
||||
subgraph path17 [Path]
|
||||
17["Path<br>[2077, 2117, 10]"]
|
||||
50["Segment<br>[2077, 2117, 10]"]
|
||||
17["Path<br>[2101, 2141, 10]"]
|
||||
50["Segment<br>[2101, 2141, 10]"]
|
||||
96[Solid2d]
|
||||
end
|
||||
subgraph path18 [Path]
|
||||
@ -158,7 +158,7 @@ flowchart LR
|
||||
1["Plane<br>[201, 218, 8]"]
|
||||
2["Plane<br>[174, 197, 10]"]
|
||||
3["Plane<br>[464, 487, 10]"]
|
||||
4["Plane<br>[2048, 2071, 10]"]
|
||||
4["Plane<br>[2072, 2095, 10]"]
|
||||
5["Plane<br>[222, 245, 11]"]
|
||||
6["Plane<br>[242, 265, 12]"]
|
||||
112["Sweep Extrusion<br>[724, 771, 8]"]
|
||||
@ -174,13 +174,13 @@ flowchart LR
|
||||
122["Sweep Extrusion<br>[2252, 2299, 8]"]
|
||||
123["Sweep Extrusion<br>[277, 315, 10]"]
|
||||
124["Sweep Extrusion<br>[778, 808, 10]"]
|
||||
125["Sweep Extrusion<br>[1044, 1076, 10]"]
|
||||
126["Sweep Extrusion<br>[1599, 1631, 10]"]
|
||||
127["Sweep Extrusion<br>[1599, 1631, 10]"]
|
||||
128["Sweep Extrusion<br>[1599, 1631, 10]"]
|
||||
129["Sweep Extrusion<br>[1599, 1631, 10]"]
|
||||
130["Sweep Extrusion<br>[1866, 1899, 10]"]
|
||||
131["Sweep Extrusion<br>[2119, 2150, 10]"]
|
||||
125["Sweep Extrusion<br>[1050, 1082, 10]"]
|
||||
126["Sweep Extrusion<br>[1617, 1649, 10]"]
|
||||
127["Sweep Extrusion<br>[1617, 1649, 10]"]
|
||||
128["Sweep Extrusion<br>[1617, 1649, 10]"]
|
||||
129["Sweep Extrusion<br>[1617, 1649, 10]"]
|
||||
130["Sweep Extrusion<br>[1890, 1923, 10]"]
|
||||
131["Sweep Extrusion<br>[2143, 2174, 10]"]
|
||||
132["Sweep Extrusion<br>[709, 757, 11]"]
|
||||
133["Sweep Extrusion<br>[895, 928, 11]"]
|
||||
134["Sweep Extrusion<br>[1267, 1297, 11]"]
|
||||
@ -399,8 +399,8 @@ flowchart LR
|
||||
347["EdgeCut Chamfer<br>[777, 1054, 8]"]
|
||||
348["EdgeCut Fillet<br>[1294, 1355, 8]"]
|
||||
349["EdgeCut Fillet<br>[321, 383, 10]"]
|
||||
350["EdgeCut Fillet<br>[1082, 1144, 10]"]
|
||||
351["EdgeCut Fillet<br>[1905, 1967, 10]"]
|
||||
350["EdgeCut Fillet<br>[1088, 1150, 10]"]
|
||||
351["EdgeCut Fillet<br>[1929, 1991, 10]"]
|
||||
352["EdgeCut Fillet<br>[934, 996, 11]"]
|
||||
353["EdgeCut Fillet<br>[1303, 1365, 11]"]
|
||||
354["EdgeCut Fillet<br>[1189, 1251, 12]"]
|
||||
|
||||
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
@ -3,6 +3,17 @@ source: kcl-lib/src/simulation_tests.rs
|
||||
description: Operations executed parametric.kcl
|
||||
---
|
||||
[
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": "sqrt",
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"planeOrSolid": {
|
||||
@ -49,5 +60,8 @@ description: Operations executed parametric.kcl
|
||||
},
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
}
|
||||
]
|
||||
|
||||
@ -3,6 +3,17 @@ source: kcl-lib/src/simulation_tests.rs
|
||||
description: Operations executed parametric_with_tan_arc.kcl
|
||||
---
|
||||
[
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": "sqrt",
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"planeOrSolid": {
|
||||
@ -49,5 +60,8 @@ description: Operations executed parametric_with_tan_arc.kcl
|
||||
},
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
}
|
||||
]
|
||||
|
||||
@ -3,6 +3,17 @@ source: kcl-lib/src/simulation_tests.rs
|
||||
description: Operations executed sketch_on_face_after_fillets_referencing_face.kcl
|
||||
---
|
||||
[
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": "sqrt",
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"planeOrSolid": {
|
||||
@ -193,5 +204,8 @@ description: Operations executed sketch_on_face_after_fillets_referencing_face.k
|
||||
},
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
}
|
||||
]
|
||||
|
||||
@ -347,28 +347,28 @@ describe('testing math operators', () => {
|
||||
expect(mem['myVar']?.value).toBe(12.5)
|
||||
})
|
||||
it('with callExpression at start', async () => {
|
||||
const code = 'myVar = min([4, 100]) + 2'
|
||||
const code = 'myVar = math::min([4, 100]) + 2'
|
||||
const mem = await exe(code)
|
||||
expect(mem['myVar']?.value).toBe(6)
|
||||
})
|
||||
it('with callExpression at end', async () => {
|
||||
const code = 'myVar = 2 + min([4, 100])'
|
||||
const code = 'myVar = 2 + math::min([4, 100])'
|
||||
const mem = await exe(code)
|
||||
expect(mem['myVar']?.value).toBe(6)
|
||||
})
|
||||
it('with nested callExpression', async () => {
|
||||
const code = 'myVar = 2 + min([100, legLen(hypotenuse = 5, leg = 3)])'
|
||||
const code = 'myVar = 2 + math::min([100, legLen(hypotenuse = 5, leg = 3)])'
|
||||
const mem = await exe(code)
|
||||
expect(mem['myVar']?.value).toBe(6)
|
||||
})
|
||||
it('with unaryExpression', async () => {
|
||||
const code = 'myVar = -min([100, 3])'
|
||||
const code = 'myVar = -math::min([100, 3])'
|
||||
const mem = await exe(code)
|
||||
expect(mem['myVar']?.value).toBe(-3)
|
||||
})
|
||||
it('with unaryExpression in callExpression', async () => {
|
||||
const code = 'myVar = min([-legLen(hypotenuse = 5, leg = 4), 5])'
|
||||
const code2 = 'myVar = min([5 , -legLen(hypotenuse = 5, leg = 4)])'
|
||||
const code = 'myVar = math::min([-legLen(hypotenuse = 5, leg = 4), 5])'
|
||||
const code2 = 'myVar = math::min([5 , -legLen(hypotenuse = 5, leg = 4)])'
|
||||
const mem = await exe(code)
|
||||
const mem2 = await exe(code2)
|
||||
expect(mem['myVar']?.value).toBe(-3)
|
||||
@ -394,7 +394,7 @@ describe('testing math operators', () => {
|
||||
const code = [
|
||||
'part001 = startSketchOn(XY)',
|
||||
' |> startProfile(at = [0, 0])',
|
||||
'|> line(end = [-2.21, -legLen(hypotenuse = 5, leg = min([3, 999]))])',
|
||||
'|> line(end = [-2.21, -legLen(hypotenuse = 5, leg = math::min([3, 999]))])',
|
||||
].join('\n')
|
||||
const mem = await exe(code)
|
||||
const sketch = sketchFromKclValue(mem['part001'], 'part001')
|
||||
@ -409,7 +409,7 @@ describe('testing math operators', () => {
|
||||
` |> startProfile(at = [0, 0])`,
|
||||
` |> line(end = [3, 4], tag = $seg01)`,
|
||||
` |> line(end = [`,
|
||||
` min([segLen(seg01), myVar]),`,
|
||||
` math::min([segLen(seg01), myVar]),`,
|
||||
` -legLen(hypotenuse = segLen(seg01), leg = myVar)`,
|
||||
`])`,
|
||||
``,
|
||||
@ -433,7 +433,7 @@ describe('testing math operators', () => {
|
||||
expect((removedUnaryExpMemSketch as Sketch).paths?.[1]?.to).toEqual([6, 8])
|
||||
})
|
||||
it('with nested callExpression and binaryExpression', async () => {
|
||||
const code = 'myVar = 2 + min([100, -1 + legLen(hypotenuse = 5, leg = 3)])'
|
||||
const code = 'myVar = 2 + math::min([100, -1 + legLen(hypotenuse = 5, leg = 3)])'
|
||||
const mem = await exe(code)
|
||||
expect(mem['myVar']?.value).toBe(5)
|
||||
})
|
||||
|
||||