Remove some deprecated functions from std (#6531)
Signed-off-by: Nick Cameron <nrc@ncameron.org>
This commit is contained in:
@ -9,7 +9,7 @@ The value of `pi`, Archimedes’ constant (π).
|
|||||||
|
|
||||||
|
|
||||||
```js
|
```js
|
||||||
std::math::PI: number = 3.14159265358979323846264338327950288_
|
std::math::PI: number(_?) = 3.14159265358979323846264338327950288_?
|
||||||
```
|
```
|
||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
@ -18,7 +18,7 @@ std::math::PI: number = 3.14159265358979323846264338327950288_
|
|||||||
circumference = 70
|
circumference = 70
|
||||||
|
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> circle(center = [0, 0], radius = circumference / (2 * PI))
|
|> circle(center = [0, 0], radius = (circumference / (2 * PI)): number(mm))
|
||||||
|
|
||||||
example = extrude(exampleSketch, length = 5)
|
example = extrude(exampleSketch, length = 5)
|
||||||
```
|
```
|
||||||
|
|||||||
@ -178,7 +178,7 @@ t = 0.005 // taper factor [0-1)
|
|||||||
// Defines how to modify each layer of the vase.
|
// Defines how to modify each layer of the vase.
|
||||||
// Each replica is shifted up the Z axis, and has a smoothly-varying radius
|
// Each replica is shifted up the Z axis, and has a smoothly-varying radius
|
||||||
fn transform(replicaId) {
|
fn transform(replicaId) {
|
||||||
scale = r * abs(1 - (t * replicaId)) * (5 + cos(replicaId / 8: number(rad)))
|
scale = r * abs(1 - (t * replicaId)) * (5 + cos((replicaId / 8): number(rad)))
|
||||||
return {
|
return {
|
||||||
translate = [0, 0, replicaId * 10],
|
translate = [0, 0, replicaId * 10],
|
||||||
scale = [scale, scale, 0]
|
scale = [scale, scale, 0]
|
||||||
|
|||||||
@ -74095,34 +74095,6 @@
|
|||||||
"exampleSketch = startSketchOn(-XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)"
|
"exampleSketch = startSketchOn(-XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "e",
|
|
||||||
"summary": "Return the value of Euler’s number `e`.",
|
|
||||||
"description": "**DEPRECATED** use the constant E",
|
|
||||||
"tags": [
|
|
||||||
"math"
|
|
||||||
],
|
|
||||||
"keywordArguments": false,
|
|
||||||
"args": [],
|
|
||||||
"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": true,
|
|
||||||
"examples": [
|
|
||||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 30, length = 2 * e() ^ 2)\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "extrude",
|
"name": "extrude",
|
||||||
"summary": "Extend a 2-dimensional sketch through a third dimension in order to create new 3-dimensional volume, or if extruded into an existing volume, cut into an existing solid.",
|
"summary": "Extend a 2-dimensional sketch through a third dimension in order to create new 3-dimensional volume, or if extruded into an existing volume, cut into an existing solid.",
|
||||||
@ -85429,258 +85401,6 @@
|
|||||||
"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)"
|
"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": "fromCm",
|
|
||||||
"summary": "Converts a number from centimeters to the current default unit.",
|
|
||||||
"description": "*DEPRECATED* prefer using explicit numeric suffixes (e.g., `42cm`) or the `to...` conversion functions.\n\nNo matter what units the current file uses, this function will always return a number equivalent to the input in centimeters.\n\nFor example, if the current file uses inches, `fromCm(1)` will return `0.393701`. If the current file uses millimeters, `fromCm(1)` will return `10`. If the current file uses centimeters, `fromCm(1)` will return `1`.\n\n**Caution**: This function is only intended to be used when you absolutely MUST have different units in your code than the file settings. Otherwise, it is a bad pattern to use this function.\n\nWe merely provide these functions for convenience and readability, as `fromCm(10)` is more readable that your intent is \"I want 10 centimeters\" than `10 * 10`, if the file settings are in millimeters.",
|
|
||||||
"tags": [
|
|
||||||
"units"
|
|
||||||
],
|
|
||||||
"keywordArguments": false,
|
|
||||||
"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,
|
|
||||||
"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": true,
|
|
||||||
"examples": [
|
|
||||||
"totalWidth = fromCm(10)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fromFt",
|
|
||||||
"summary": "Converts a number from feet to the current default unit.",
|
|
||||||
"description": "*DEPRECATED* prefer using explicit numeric suffixes (e.g., `42ft`) or the `to...` conversion functions.\n\nNo matter what units the current file uses, this function will always return a number equivalent to the input in feet.\n\nFor example, if the current file uses inches, `fromFt(1)` will return `12`. If the current file uses millimeters, `fromFt(1)` will return `304.8`. If the current file uses feet, `fromFt(1)` will return `1`.\n\n**Caution**: This function is only intended to be used when you absolutely MUST have different units in your code than the file settings. Otherwise, it is a bad pattern to use this function.\n\nWe merely provide these functions for convenience and readability, as `fromFt(10)` is more readable that your intent is \"I want 10 feet\" than `10 * 304.8`, if the file settings are in millimeters.",
|
|
||||||
"tags": [
|
|
||||||
"units"
|
|
||||||
],
|
|
||||||
"keywordArguments": false,
|
|
||||||
"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,
|
|
||||||
"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": true,
|
|
||||||
"examples": [
|
|
||||||
"totalWidth = fromFt(10)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fromInches",
|
|
||||||
"summary": "Converts a number from inches to the current default unit.",
|
|
||||||
"description": "*DEPRECATED* prefer using explicit numeric suffixes (e.g., `42inch`) or the `to...` conversion functions.\n\nNo matter what units the current file uses, this function will always return a number equivalent to the input in inches.\n\nFor example, if the current file uses inches, `fromInches(1)` will return `1`. If the current file uses millimeters, `fromInches(1)` will return `25.4`.\n\n**Caution**: This function is only intended to be used when you absolutely MUST have different units in your code than the file settings. Otherwise, it is a bad pattern to use this function.\n\nWe merely provide these functions for convenience and readability, as `fromInches(10)` is more readable that your intent is \"I want 10 inches\" than `10 * 25.4`, if the file settings are in millimeters.",
|
|
||||||
"tags": [
|
|
||||||
"units"
|
|
||||||
],
|
|
||||||
"keywordArguments": false,
|
|
||||||
"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,
|
|
||||||
"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": true,
|
|
||||||
"examples": [
|
|
||||||
"totalWidth = fromInches(10)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fromM",
|
|
||||||
"summary": "Converts a number from meters to the current default unit.",
|
|
||||||
"description": "*DEPRECATED* prefer using explicit numeric suffixes (e.g., `42m`) or the `to...` conversion functions.\n\nNo matter what units the current file uses, this function will always return a number equivalent to the input in meters.\n\nFor example, if the current file uses inches, `fromM(1)` will return `39.3701`. If the current file uses millimeters, `fromM(1)` will return `1000`. If the current file uses meters, `fromM(1)` will return `1`.\n\n**Caution**: This function is only intended to be used when you absolutely MUST have different units in your code than the file settings. Otherwise, it is a bad pattern to use this function.\n\nWe merely provide these functions for convenience and readability, as `fromM(10)` is more readable that your intent is \"I want 10 meters\" than `10 * 1000`, if the file settings are in millimeters.",
|
|
||||||
"tags": [
|
|
||||||
"units"
|
|
||||||
],
|
|
||||||
"keywordArguments": false,
|
|
||||||
"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,
|
|
||||||
"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": true,
|
|
||||||
"examples": [
|
|
||||||
"totalWidth = 10 * fromM(10)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fromMm",
|
|
||||||
"summary": "Converts a number from mm to the current default unit.",
|
|
||||||
"description": "*DEPRECATED* prefer using explicit numeric suffixes (e.g., `42mm`) or the `to...` conversion functions.\n\nNo matter what units the current file uses, this function will always return a number equivalent to the input in millimeters.\n\nFor example, if the current file uses inches, `fromMm(1)` will return `1/25.4`. If the current file uses millimeters, `fromMm(1)` will return `1`.\n\n**Caution**: This function is only intended to be used when you absolutely MUST have different units in your code than the file settings. Otherwise, it is a bad pattern to use this function.\n\nWe merely provide these functions for convenience and readability, as `fromMm(10)` is more readable that your intent is \"I want 10 millimeters\" than `10 * (1/25.4)`, if the file settings are in inches.",
|
|
||||||
"tags": [
|
|
||||||
"units"
|
|
||||||
],
|
|
||||||
"keywordArguments": false,
|
|
||||||
"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,
|
|
||||||
"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": true,
|
|
||||||
"examples": [
|
|
||||||
"totalWidth = fromMm(10)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fromYd",
|
|
||||||
"summary": "Converts a number from yards to the current default unit.",
|
|
||||||
"description": "*DEPRECATED* prefer using explicit numeric suffixes (e.g., `42yd`) or the `to...` conversion functions.\n\nNo matter what units the current file uses, this function will always return a number equivalent to the input in yards.\n\nFor example, if the current file uses inches, `fromYd(1)` will return `36`. If the current file uses millimeters, `fromYd(1)` will return `914.4`. If the current file uses yards, `fromYd(1)` will return `1`.\n\n**Caution**: This function is only intended to be used when you absolutely MUST have different units in your code than the file settings. Otherwise, it is a bad pattern to use this function.\n\nWe merely provide these functions for convenience and readability, as `fromYd(10)` is more readable that your intent is \"I want 10 yards\" than `10 * 914.4`, if the file settings are in millimeters.",
|
|
||||||
"tags": [
|
|
||||||
"units"
|
|
||||||
],
|
|
||||||
"keywordArguments": false,
|
|
||||||
"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,
|
|
||||||
"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": true,
|
|
||||||
"examples": [
|
|
||||||
"totalWidth = fromYd(10)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "getCommonEdge",
|
"name": "getCommonEdge",
|
||||||
"summary": "Get the shared edge between two faces.",
|
"summary": "Get the shared edge between two faces.",
|
||||||
@ -85881,48 +85601,6 @@
|
|||||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> angledLine(angle = 60, length = 10)\n |> angledLine(angle = 120, length = 10)\n |> line(end = [-10, 0])\n |> angledLine(angle = 240, length = 10, tag = $referenceEdge)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)\n |> fillet(radius = 3, tags = [getPreviousAdjacentEdge(referenceEdge)])"
|
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> angledLine(angle = 60, length = 10)\n |> angledLine(angle = 120, length = 10)\n |> line(end = [-10, 0])\n |> angledLine(angle = 240, length = 10, tag = $referenceEdge)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)\n |> fillet(radius = 3, tags = [getPreviousAdjacentEdge(referenceEdge)])"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "int",
|
|
||||||
"summary": "Convert a number to an integer.",
|
|
||||||
"description": "DEPRECATED use floor(), ceil(), or round().",
|
|
||||||
"tags": [
|
|
||||||
"convert"
|
|
||||||
],
|
|
||||||
"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": true,
|
|
||||||
"examples": [
|
|
||||||
"n = int(ceil(5 / 2))\nassert(n, isEqualTo = 3, error = \"5/2 = 2.5, rounded up makes 3\")\n// Draw n cylinders.\nstartSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> extrude(length = 5)\n |> patternTransform(\n instances = n,\n transform = fn(id) {\n return { translate = [4 * id, 0, 0] }\n },\n )"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "intersect",
|
"name": "intersect",
|
||||||
"summary": "Intersect returns the shared volume between multiple solids, preserving only overlapping regions.",
|
"summary": "Intersect returns the shared volume between multiple solids, preserving only overlapping regions.",
|
||||||
@ -185998,7 +185676,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)",
|
"// 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 // 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)",
|
"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 + 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 * abs(1 - (t * replicaId)) * (5 + 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)"
|
"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)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -194043,34 +193721,6 @@
|
|||||||
"// Each instance will be shifted along the X axis.\nfn transform(id) {\n return { translate = [4 * id, 0] }\n}\n\n// Sketch 4 circles.\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> patternTransform2d(instances = 4, transform = transform)"
|
"// Each instance will be shifted along the X axis.\nfn transform(id) {\n return { translate = [4 * id, 0] }\n}\n\n// Sketch 4 circles.\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> patternTransform2d(instances = 4, transform = transform)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "pi",
|
|
||||||
"summary": "Return the value of `pi`. Archimedes’ constant (π).",
|
|
||||||
"description": "**DEPRECATED** use the constant PI",
|
|
||||||
"tags": [
|
|
||||||
"math"
|
|
||||||
],
|
|
||||||
"keywordArguments": false,
|
|
||||||
"args": [],
|
|
||||||
"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": true,
|
|
||||||
"examples": [
|
|
||||||
"circumference = 70\n\nexampleSketch = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = circumference / (2 * pi()))\n\nexample = extrude(exampleSketch, length = 5)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "polygon",
|
"name": "polygon",
|
||||||
"summary": "Create a regular polygon with the specified number of sides that is either inscribed or circumscribed around a circle of the specified radius.",
|
"summary": "Create a regular polygon with the specified number of sides that is either inscribed or circumscribed around a circle of the specified radius.",
|
||||||
@ -302826,34 +302476,6 @@
|
|||||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 60, length = 10)\n |> tangentialArc(radius = 10, angle = -120)\n |> angledLine(angle = -60, length = 10)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)"
|
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 60, length = 10)\n |> tangentialArc(radius = 10, angle = -120)\n |> angledLine(angle = -60, length = 10)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "tau",
|
|
||||||
"summary": "Return the value of `tau`. The full circle constant (τ). Equal to 2π.",
|
|
||||||
"description": "**DEPRECATED** use the constant TAU",
|
|
||||||
"tags": [
|
|
||||||
"math"
|
|
||||||
],
|
|
||||||
"keywordArguments": false,
|
|
||||||
"args": [],
|
|
||||||
"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": true,
|
|
||||||
"examples": [
|
|
||||||
"exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 50, length = 10 * tau())\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "translate",
|
"name": "translate",
|
||||||
"summary": "Move a solid or a sketch.",
|
"summary": "Move a solid or a sketch.",
|
||||||
|
|||||||
@ -32,7 +32,7 @@ lugClearance = startSketchOn(lugExtrusion, face = END)
|
|||||||
|
|
||||||
// Create the circular pattern for the lug holes
|
// Create the circular pattern for the lug holes
|
||||||
lugHoles = startSketchOn(lugBase, face = END)
|
lugHoles = startSketchOn(lugBase, face = END)
|
||||||
|> circle(center = [lugSpacing / 2, 0], radius = fromMm(16) / 2)
|
|> circle(center = [lugSpacing / 2, 0], radius = 16mm / 2)
|
||||||
|> patternCircular2d(
|
|> patternCircular2d(
|
||||||
arcDegrees = 360,
|
arcDegrees = 360,
|
||||||
center = [0, 0],
|
center = [0, 0],
|
||||||
|
|||||||
@ -8,11 +8,7 @@
|
|||||||
import lugDiameter, lugHeadLength, lugThreadDiameter, lugLength, lugThreadDepth, lugSpacing from "parameters.kcl"
|
import lugDiameter, lugHeadLength, lugThreadDiameter, lugLength, lugThreadDepth, lugSpacing from "parameters.kcl"
|
||||||
|
|
||||||
customPlane = {
|
customPlane = {
|
||||||
origin = {
|
origin = { x = lugSpacing / 2, y = -30mm, z = 0 },
|
||||||
x = lugSpacing / 2,
|
|
||||||
y = fromMm(-30),
|
|
||||||
z = 0
|
|
||||||
},
|
|
||||||
xAxis = { x = 1, y = 0, z = 0 },
|
xAxis = { x = 1, y = 0, z = 0 },
|
||||||
yAxis = { x = 0, y = -1, z = 0 },
|
yAxis = { x = 0, y = -1, z = 0 },
|
||||||
zAxis = { x = 0, y = 0, z = 1 }
|
zAxis = { x = 0, y = 0, z = 1 }
|
||||||
@ -24,7 +20,7 @@ fn lug(plane, length, diameter) {
|
|||||||
|> angledLine(angle = 70, lengthY = lugHeadLength)
|
|> angledLine(angle = 70, lengthY = lugHeadLength)
|
||||||
|> xLine(endAbsolute = lugDiameter / 2)
|
|> xLine(endAbsolute = lugDiameter / 2)
|
||||||
|> yLine(endAbsolute = lugLength)
|
|> yLine(endAbsolute = lugLength)
|
||||||
|> tangentialArc(angle = 90, radius = fromMm(3))
|
|> tangentialArc(angle = 90, radius = 3mm)
|
||||||
|> xLine(endAbsolute = 0 + .001, tag = $c1)
|
|> xLine(endAbsolute = 0 + .001, tag = $c1)
|
||||||
|> yLine(endAbsolute = lugThreadDepth)
|
|> yLine(endAbsolute = lugThreadDepth)
|
||||||
|> xLine(endAbsolute = lugThreadDiameter)
|
|> xLine(endAbsolute = lugThreadDiameter)
|
||||||
|
|||||||
@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
// Car wheel
|
// Car wheel
|
||||||
export lugCount = 5
|
export lugCount = 5
|
||||||
export lugSpacing = fromMm(114.3)
|
export lugSpacing = 114.3mm
|
||||||
export offset = fromMm(-35)
|
export offset = -35mm
|
||||||
export backSpacing = 6.38
|
export backSpacing = 6.38
|
||||||
export wheelWidth = 9.5
|
export wheelWidth = 9.5
|
||||||
export wheelDiameter = 19
|
export wheelDiameter = 19
|
||||||
@ -16,11 +16,11 @@ export spokeAngle = 0.02
|
|||||||
export spokeThickness = 0.95
|
export spokeThickness = 0.95
|
||||||
|
|
||||||
// Lug Nut
|
// Lug Nut
|
||||||
export lugDiameter = fromMm(24)
|
export lugDiameter = 24mm
|
||||||
export lugHeadLength = lugDiameter * .5
|
export lugHeadLength = lugDiameter * .5
|
||||||
export lugThreadDiameter = lugDiameter / 2 * .85
|
export lugThreadDiameter = lugDiameter / 2 * .85
|
||||||
export lugLength = fromMm(30)
|
export lugLength = 30mm
|
||||||
export lugThreadDepth = lugLength - fromMm(12.7)
|
export lugThreadDepth = lugLength - 12.7mm
|
||||||
|
|
||||||
// Car rotor
|
// Car rotor
|
||||||
export rotorDiameter = 12
|
export rotorDiameter = 12
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
@settings(defaultLengthUnit = in)
|
@settings(defaultLengthUnit = in)
|
||||||
|
|
||||||
// Define parameters
|
// Define parameters
|
||||||
beamLength = fromFt(6)
|
beamLength = 6ft
|
||||||
beamHeight = 4
|
beamHeight = 4
|
||||||
flangeWidth = 2.663
|
flangeWidth = 2.663
|
||||||
flangeThickness = 0.293
|
flangeThickness = 0.293
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
// Define parameters
|
// Define parameters
|
||||||
routerDiameter = 12.7
|
routerDiameter = 12.7
|
||||||
templateDiameter = fromInches(11 / 16)
|
templateDiameter = (11 / 16): number(in)
|
||||||
slateWidthHalf = 41.5 / 2
|
slateWidthHalf = 41.5 / 2
|
||||||
minClampingDistance = 50 + 30
|
minClampingDistance = 50 + 30
|
||||||
templateThickness = 10
|
templateThickness = 10
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
// Define parameters
|
// Define parameters
|
||||||
routerDiameter = 12.7
|
routerDiameter = 12.7
|
||||||
templateDiameter = fromInches(11 / 16)
|
templateDiameter = (11 / 16): number(in)
|
||||||
slateWidthHalf = 41.5 / 2
|
slateWidthHalf = 41.5 / 2
|
||||||
minClampingDistance = 50 + 30
|
minClampingDistance = 50 + 30
|
||||||
templateThickness = 10
|
templateThickness = 10
|
||||||
|
|||||||
@ -25,8 +25,6 @@ fn Gte = (a, b) => { return Not(Lt(a, b)) }
|
|||||||
// Note: it was most concise to encode productions directly in axioms.
|
// Note: it was most concise to encode productions directly in axioms.
|
||||||
// Change them as you need.
|
// Change them as you need.
|
||||||
|
|
||||||
deg = pi()*2 / 360
|
|
||||||
|
|
||||||
fn setSketch = (state, q) => {
|
fn setSketch = (state, q) => {
|
||||||
return {
|
return {
|
||||||
depthMax: state.depthMax,
|
depthMax: state.depthMax,
|
||||||
@ -77,8 +75,8 @@ fn setLength = (state, q) => {
|
|||||||
|
|
||||||
fn Gt2 = (state) => { return setLength(state, state.currentLength * state.factor) }
|
fn Gt2 = (state) => { return setLength(state, state.currentLength * state.factor) }
|
||||||
fn Lt2 = (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(int(state.currentAngle - state.angle), divisor = 360)) }
|
fn Add = (state) => { return setAngle(state, rem(state.currentAngle - state.angle, divisor = 360)) }
|
||||||
fn Sub = (state) => { return setAngle(state, rem(int(state.currentAngle + state.angle), divisor = 360)) }
|
fn Sub = (state) => { return setAngle(state, rem(state.currentAngle + state.angle, divisor = 360)) }
|
||||||
|
|
||||||
// Only necessary to get around recursion limitations...
|
// Only necessary to get around recursion limitations...
|
||||||
fn F = (state, F) => {
|
fn F = (state, F) => {
|
||||||
|
|||||||
@ -1047,7 +1047,7 @@ mod test {
|
|||||||
if let DocData::Const(d) = d {
|
if let DocData::Const(d) = d {
|
||||||
if d.name == "PI" {
|
if d.name == "PI" {
|
||||||
assert!(d.value.unwrap().starts_with('3'));
|
assert!(d.value.unwrap().starts_with('3'));
|
||||||
assert_eq!(d.ty, Some("number".to_owned()));
|
assert_eq!(d.ty, Some("number(_?)".to_owned()));
|
||||||
assert_eq!(d.qual_name, "std::math::PI");
|
assert_eq!(d.qual_name, "std::math::PI");
|
||||||
assert!(d.summary.is_some());
|
assert!(d.summary.is_some());
|
||||||
assert!(!d.examples.is_empty());
|
assert!(!d.examples.is_empty());
|
||||||
|
|||||||
@ -1041,12 +1041,12 @@ impl Node<BinaryExpression> {
|
|||||||
|
|
||||||
let value = match self.operator {
|
let value = match self.operator {
|
||||||
BinaryOperator::Add => {
|
BinaryOperator::Add => {
|
||||||
let (l, r, ty) = NumericType::combine_eq(left, right);
|
let (l, r, ty) = NumericType::combine_eq_coerce(left, right);
|
||||||
self.warn_on_unknown(&ty, "Adding", exec_state);
|
self.warn_on_unknown(&ty, "Adding", exec_state);
|
||||||
KclValue::Number { value: l + r, meta, ty }
|
KclValue::Number { value: l + r, meta, ty }
|
||||||
}
|
}
|
||||||
BinaryOperator::Sub => {
|
BinaryOperator::Sub => {
|
||||||
let (l, r, ty) = NumericType::combine_eq(left, right);
|
let (l, r, ty) = NumericType::combine_eq_coerce(left, right);
|
||||||
self.warn_on_unknown(&ty, "Subtracting", exec_state);
|
self.warn_on_unknown(&ty, "Subtracting", exec_state);
|
||||||
KclValue::Number { value: l - r, meta, ty }
|
KclValue::Number { value: l - r, meta, ty }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,8 @@ use crate::{
|
|||||||
CompilationError, KclError, ModuleId, SourceRange,
|
CompilationError, KclError, ModuleId, SourceRange,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use super::types::UnitType;
|
||||||
|
|
||||||
pub type KclObjectFields = HashMap<String, KclValue>;
|
pub type KclObjectFields = HashMap<String, KclValue>;
|
||||||
|
|
||||||
/// Any KCL value.
|
/// Any KCL value.
|
||||||
@ -299,6 +301,18 @@ impl KclValue {
|
|||||||
KclValue::Plane { .. } => "Plane",
|
KclValue::Plane { .. } => "Plane",
|
||||||
KclValue::Face { .. } => "Face",
|
KclValue::Face { .. } => "Face",
|
||||||
KclValue::Bool { .. } => "boolean (true/false value)",
|
KclValue::Bool { .. } => "boolean (true/false value)",
|
||||||
|
KclValue::Number {
|
||||||
|
ty: NumericType::Unknown,
|
||||||
|
..
|
||||||
|
} => "number(unknown units)",
|
||||||
|
KclValue::Number {
|
||||||
|
ty: NumericType::Known(UnitType::Length(_)),
|
||||||
|
..
|
||||||
|
} => "number(Length)",
|
||||||
|
KclValue::Number {
|
||||||
|
ty: NumericType::Known(UnitType::Angle(_)),
|
||||||
|
..
|
||||||
|
} => "number(Angle)",
|
||||||
KclValue::Number { .. } => "number",
|
KclValue::Number { .. } => "number",
|
||||||
KclValue::String { .. } => "string (text)",
|
KclValue::String { .. } => "string (text)",
|
||||||
KclValue::MixedArray { .. } => "array (list)",
|
KclValue::MixedArray { .. } => "array (list)",
|
||||||
|
|||||||
@ -1295,20 +1295,6 @@ mod tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test(flavor = "multi_thread")]
|
|
||||||
async fn test_warn_on_deprecated() {
|
|
||||||
let text = "p = pi()";
|
|
||||||
let result = parse_execute(text).await.unwrap();
|
|
||||||
let errs = result.exec_state.errors();
|
|
||||||
assert_eq!(errs.len(), 1);
|
|
||||||
assert_eq!(errs[0].severity, crate::errors::Severity::Warning);
|
|
||||||
assert!(
|
|
||||||
errs[0].message.contains("`pi` is deprecated"),
|
|
||||||
"unexpected warning message: {}",
|
|
||||||
errs[0].message
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test(flavor = "multi_thread")]
|
#[tokio::test(flavor = "multi_thread")]
|
||||||
async fn test_execute_fn_definitions() {
|
async fn test_execute_fn_definitions() {
|
||||||
let ast = r#"fn def = (x) => {
|
let ast = r#"fn def = (x) => {
|
||||||
@ -1777,67 +1763,6 @@ let shape = layer() |> patternTransform(instances = 10, transform = transform)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test(flavor = "multi_thread")]
|
|
||||||
async fn test_unit_default() {
|
|
||||||
let ast = r#"const inMm = fromMm(25.4)
|
|
||||||
const inInches = fromInches(1)"#;
|
|
||||||
let result = parse_execute(ast).await.unwrap();
|
|
||||||
assert_eq!(
|
|
||||||
25.4,
|
|
||||||
mem_get_json(result.exec_state.stack(), result.mem_env, "inMm")
|
|
||||||
.as_f64()
|
|
||||||
.unwrap()
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
25.4,
|
|
||||||
mem_get_json(result.exec_state.stack(), result.mem_env, "inInches")
|
|
||||||
.as_f64()
|
|
||||||
.unwrap()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test(flavor = "multi_thread")]
|
|
||||||
async fn test_unit_overriden() {
|
|
||||||
let ast = r#"@settings(defaultLengthUnit = inch)
|
|
||||||
const inMm = fromMm(25.4)
|
|
||||||
const inInches = fromInches(1)"#;
|
|
||||||
let result = parse_execute(ast).await.unwrap();
|
|
||||||
assert_eq!(
|
|
||||||
1.0,
|
|
||||||
mem_get_json(result.exec_state.stack(), result.mem_env, "inMm")
|
|
||||||
.as_f64()
|
|
||||||
.unwrap()
|
|
||||||
.round()
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
1.0,
|
|
||||||
mem_get_json(result.exec_state.stack(), result.mem_env, "inInches")
|
|
||||||
.as_f64()
|
|
||||||
.unwrap()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test(flavor = "multi_thread")]
|
|
||||||
async fn test_unit_overriden_in() {
|
|
||||||
let ast = r#"@settings(defaultLengthUnit = in)
|
|
||||||
const inMm = fromMm(25.4)
|
|
||||||
const inInches = fromInches(2)"#;
|
|
||||||
let result = parse_execute(ast).await.unwrap();
|
|
||||||
assert_eq!(
|
|
||||||
1.0,
|
|
||||||
mem_get_json(result.exec_state.stack(), result.mem_env, "inMm")
|
|
||||||
.as_f64()
|
|
||||||
.unwrap()
|
|
||||||
.round()
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
2.0,
|
|
||||||
mem_get_json(result.exec_state.stack(), result.mem_env, "inInches")
|
|
||||||
.as_f64()
|
|
||||||
.unwrap()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test(flavor = "multi_thread")]
|
#[tokio::test(flavor = "multi_thread")]
|
||||||
async fn test_zero_param_fn() {
|
async fn test_zero_param_fn() {
|
||||||
let ast = r#"const sigmaAllow = 35000 // psi
|
let ast = r#"const sigmaAllow = 35000 // psi
|
||||||
|
|||||||
@ -381,7 +381,8 @@ impl fmt::Display for PrimitiveType {
|
|||||||
match self {
|
match self {
|
||||||
PrimitiveType::Number(NumericType::Known(unit)) => write!(f, "number({unit})"),
|
PrimitiveType::Number(NumericType::Known(unit)) => write!(f, "number({unit})"),
|
||||||
PrimitiveType::Number(NumericType::Unknown) => write!(f, "number(unknown units)"),
|
PrimitiveType::Number(NumericType::Unknown) => write!(f, "number(unknown units)"),
|
||||||
PrimitiveType::Number(_) => write!(f, "number"),
|
PrimitiveType::Number(NumericType::Default { .. }) => write!(f, "number(default units)"),
|
||||||
|
PrimitiveType::Number(NumericType::Any) => write!(f, "number(any units)"),
|
||||||
PrimitiveType::String => write!(f, "string"),
|
PrimitiveType::String => write!(f, "string"),
|
||||||
PrimitiveType::Boolean => write!(f, "bool"),
|
PrimitiveType::Boolean => write!(f, "bool"),
|
||||||
PrimitiveType::Tag => write!(f, "tag"),
|
PrimitiveType::Tag => write!(f, "tag"),
|
||||||
@ -455,7 +456,7 @@ impl NumericType {
|
|||||||
/// Combine two types when we expect them to be equal, erring on the side of less coercion. To be
|
/// Combine two types when we expect them to be equal, erring on the side of less coercion. To be
|
||||||
/// precise, only adjusting one number or the other when they are of known types.
|
/// precise, only adjusting one number or the other when they are of known types.
|
||||||
///
|
///
|
||||||
/// This combinator function is suitable for comparisons or arithmetic where uncertainty should
|
/// This combinator function is suitable for comparisons where uncertainty should
|
||||||
/// be handled by the user.
|
/// be handled by the user.
|
||||||
pub fn combine_eq(a: TyF64, b: TyF64) -> (f64, f64, NumericType) {
|
pub fn combine_eq(a: TyF64, b: TyF64) -> (f64, f64, NumericType) {
|
||||||
use NumericType::*;
|
use NumericType::*;
|
||||||
@ -525,7 +526,9 @@ impl NumericType {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The cases where we check the values for 0.0 are so we don't crash out where a conversion would always be safe
|
||||||
match (&ty, &i.ty) {
|
match (&ty, &i.ty) {
|
||||||
|
(Any, Default { .. }) if i.n == 0.0 => {}
|
||||||
(Any, t) => {
|
(Any, t) => {
|
||||||
ty = t.clone();
|
ty = t.clone();
|
||||||
}
|
}
|
||||||
@ -535,8 +538,8 @@ impl NumericType {
|
|||||||
ty = Known(UnitType::Count);
|
ty = Known(UnitType::Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
(Known(UnitType::Length(l1)), Default { len: l2, .. }) if l1 == l2 => {}
|
(Known(UnitType::Length(l1)), Default { len: l2, .. }) if l1 == l2 || i.n == 0.0 => {}
|
||||||
(Known(UnitType::Angle(a1)), Default { angle: a2, .. }) if a1 == a2 => {}
|
(Known(UnitType::Angle(a1)), Default { angle: a2, .. }) if a1 == a2 || i.n == 0.0 => {}
|
||||||
|
|
||||||
(Default { len: l1, .. }, Known(UnitType::Length(l2))) if l1 == l2 => {
|
(Default { len: l1, .. }, Known(UnitType::Length(l2))) if l1 == l2 => {
|
||||||
ty = Known(UnitType::Length(*l2));
|
ty = Known(UnitType::Length(*l2));
|
||||||
@ -549,6 +552,10 @@ impl NumericType {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ty == Any && !input.is_empty() {
|
||||||
|
ty = input[0].ty.clone();
|
||||||
|
}
|
||||||
|
|
||||||
(result, ty)
|
(result, ty)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -597,6 +604,7 @@ impl NumericType {
|
|||||||
NumericSuffix::Yd => NumericType::Known(UnitType::Length(UnitLen::Yards)),
|
NumericSuffix::Yd => NumericType::Known(UnitType::Length(UnitLen::Yards)),
|
||||||
NumericSuffix::Deg => NumericType::Known(UnitType::Angle(UnitAngle::Degrees)),
|
NumericSuffix::Deg => NumericType::Known(UnitType::Angle(UnitAngle::Degrees)),
|
||||||
NumericSuffix::Rad => NumericType::Known(UnitType::Angle(UnitAngle::Radians)),
|
NumericSuffix::Rad => NumericType::Known(UnitType::Angle(UnitAngle::Radians)),
|
||||||
|
NumericSuffix::Unknown => NumericType::Unknown,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -950,7 +950,7 @@ startSketchOn(XY)
|
|||||||
|
|
||||||
match hover.unwrap().contents {
|
match hover.unwrap().contents {
|
||||||
tower_lsp::lsp_types::HoverContents::Markup(tower_lsp::lsp_types::MarkupContent { value, .. }) => {
|
tower_lsp::lsp_types::HoverContents::Markup(tower_lsp::lsp_types::MarkupContent { value, .. }) => {
|
||||||
assert!(value.contains("foo: number = 42"));
|
assert!(value.contains("foo: number(default units) = 42"));
|
||||||
}
|
}
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
@ -3480,7 +3480,7 @@ startSketchOn(XY)
|
|||||||
|
|
||||||
match hover.unwrap().contents {
|
match hover.unwrap().contents {
|
||||||
tower_lsp::lsp_types::HoverContents::Markup(tower_lsp::lsp_types::MarkupContent { value, .. }) => {
|
tower_lsp::lsp_types::HoverContents::Markup(tower_lsp::lsp_types::MarkupContent { value, .. }) => {
|
||||||
assert!(value.contains("foo: number = 42"));
|
assert!(value.contains("foo: number(default units) = 42"));
|
||||||
}
|
}
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,7 +27,7 @@ mod tokeniser;
|
|||||||
pub(crate) use tokeniser::RESERVED_WORDS;
|
pub(crate) use tokeniser::RESERVED_WORDS;
|
||||||
|
|
||||||
// Note the ordering, it's important that `m` comes after `mm` and `cm`.
|
// Note the ordering, it's important that `m` comes after `mm` and `cm`.
|
||||||
pub const NUM_SUFFIXES: [&str; 9] = ["mm", "cm", "m", "inch", "in", "ft", "yd", "deg", "rad"];
|
pub const NUM_SUFFIXES: [&str; 10] = ["mm", "cm", "m", "inch", "in", "ft", "yd", "deg", "rad", "?"];
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, ts_rs::TS, JsonSchema)]
|
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, ts_rs::TS, JsonSchema)]
|
||||||
#[repr(u32)]
|
#[repr(u32)]
|
||||||
@ -44,6 +44,7 @@ pub enum NumericSuffix {
|
|||||||
Yd,
|
Yd,
|
||||||
Deg,
|
Deg,
|
||||||
Rad,
|
Rad,
|
||||||
|
Unknown,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NumericSuffix {
|
impl NumericSuffix {
|
||||||
@ -60,6 +61,7 @@ impl NumericSuffix {
|
|||||||
match self {
|
match self {
|
||||||
NumericSuffix::None => &[],
|
NumericSuffix::None => &[],
|
||||||
NumericSuffix::Count => b"_",
|
NumericSuffix::Count => b"_",
|
||||||
|
NumericSuffix::Unknown => b"?",
|
||||||
NumericSuffix::Length => b"Length",
|
NumericSuffix::Length => b"Length",
|
||||||
NumericSuffix::Angle => b"Angle",
|
NumericSuffix::Angle => b"Angle",
|
||||||
NumericSuffix::Mm => b"mm",
|
NumericSuffix::Mm => b"mm",
|
||||||
@ -90,6 +92,7 @@ impl FromStr for NumericSuffix {
|
|||||||
"yd" | "yards" => Ok(NumericSuffix::Yd),
|
"yd" | "yards" => Ok(NumericSuffix::Yd),
|
||||||
"deg" | "degrees" => Ok(NumericSuffix::Deg),
|
"deg" | "degrees" => Ok(NumericSuffix::Deg),
|
||||||
"rad" | "radians" => Ok(NumericSuffix::Rad),
|
"rad" | "radians" => Ok(NumericSuffix::Rad),
|
||||||
|
"?" => Ok(NumericSuffix::Unknown),
|
||||||
_ => Err(CompilationError::err(SourceRange::default(), "invalid unit of measure")),
|
_ => Err(CompilationError::err(SourceRange::default(), "invalid unit of measure")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -100,6 +103,7 @@ impl fmt::Display for NumericSuffix {
|
|||||||
match self {
|
match self {
|
||||||
NumericSuffix::None => Ok(()),
|
NumericSuffix::None => Ok(()),
|
||||||
NumericSuffix::Count => write!(f, "_"),
|
NumericSuffix::Count => write!(f, "_"),
|
||||||
|
NumericSuffix::Unknown => write!(f, "_?"),
|
||||||
NumericSuffix::Length => write!(f, "Length"),
|
NumericSuffix::Length => write!(f, "Length"),
|
||||||
NumericSuffix::Angle => write!(f, "Angle"),
|
NumericSuffix::Angle => write!(f, "Angle"),
|
||||||
NumericSuffix::Mm => write!(f, "mm"),
|
NumericSuffix::Mm => write!(f, "mm"),
|
||||||
|
|||||||
@ -419,7 +419,7 @@ mod tests {
|
|||||||
("1.1 abv", true),
|
("1.1 abv", true),
|
||||||
("1", false),
|
("1", false),
|
||||||
(".1", false),
|
(".1", false),
|
||||||
("5?", true),
|
("5!", true),
|
||||||
("5 + 6", true),
|
("5 + 6", true),
|
||||||
("5 + a", true),
|
("5 + a", true),
|
||||||
("5.5", false),
|
("5.5", false),
|
||||||
@ -429,7 +429,7 @@ mod tests {
|
|||||||
assert_eq!(expected, remaining, "`{valid}` expected another token to be {expected}");
|
assert_eq!(expected, remaining, "`{valid}` expected another token to be {expected}");
|
||||||
}
|
}
|
||||||
|
|
||||||
for invalid in ["a", "?", "?5"] {
|
for invalid in ["a", "!", "!5"] {
|
||||||
assert_parse_err(number, invalid);
|
assert_parse_err(number, invalid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -571,33 +571,6 @@ impl Args {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn get_number_with_type(&self) -> Result<TyF64, KclError> {
|
|
||||||
FromArgs::from_args(self, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn get_number_typed(&self, ty: &RuntimeType, exec_state: &mut ExecState) -> Result<f64, KclError> {
|
|
||||||
let Some(arg) = self.args.first() else {
|
|
||||||
return Err(KclError::Semantic(KclErrorDetails {
|
|
||||||
message: "Expected an argument".to_owned(),
|
|
||||||
source_ranges: vec![self.source_range],
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
|
|
||||||
arg.value.coerce(ty, exec_state).map_err(|_| {
|
|
||||||
let actual_type_name = arg.value.human_friendly_type();
|
|
||||||
let message = format!(
|
|
||||||
"This function expected the input argument to be {} but it's actually of type {actual_type_name}",
|
|
||||||
ty.human_friendly_type(),
|
|
||||||
);
|
|
||||||
KclError::Semantic(KclErrorDetails {
|
|
||||||
source_ranges: arg.source_ranges(),
|
|
||||||
message,
|
|
||||||
})
|
|
||||||
})?;
|
|
||||||
|
|
||||||
Ok(TyF64::from_kcl_val(&arg.value).unwrap().n)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) async fn get_adjacent_face_to_tag(
|
pub(crate) async fn get_adjacent_face_to_tag(
|
||||||
&self,
|
&self,
|
||||||
exec_state: &mut ExecState,
|
exec_state: &mut ExecState,
|
||||||
@ -975,6 +948,7 @@ impl<'a> FromKclValue<'a> for crate::execution::Point3d {
|
|||||||
let_field_of!(obj, x, TyF64);
|
let_field_of!(obj, x, TyF64);
|
||||||
let_field_of!(obj, y, TyF64);
|
let_field_of!(obj, y, TyF64);
|
||||||
let_field_of!(obj, z, TyF64);
|
let_field_of!(obj, z, TyF64);
|
||||||
|
// TODO here and below we could use coercing combination.
|
||||||
let (a, ty) = NumericType::combine_eq_array(&[x, y, z]);
|
let (a, ty) = NumericType::combine_eq_array(&[x, y, z]);
|
||||||
return Some(Self {
|
return Some(Self {
|
||||||
x: a[0],
|
x: a[0],
|
||||||
|
|||||||
@ -1,41 +0,0 @@
|
|||||||
//! Conversions between types.
|
|
||||||
|
|
||||||
use kcl_derive_docs::stdlib;
|
|
||||||
|
|
||||||
use crate::{
|
|
||||||
errors::KclError,
|
|
||||||
execution::{ExecState, KclValue},
|
|
||||||
std::Args,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Converts a number to integer.
|
|
||||||
pub async fn int(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
|
||||||
let num = args.get_number_with_type()?;
|
|
||||||
let converted = inner_int(num.n)?;
|
|
||||||
|
|
||||||
Ok(args.make_user_val_from_f64_with_type(num.map_value(converted)))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Convert a number to an integer.
|
|
||||||
///
|
|
||||||
/// DEPRECATED use floor(), ceil(), or round().
|
|
||||||
///
|
|
||||||
/// ```no_run
|
|
||||||
/// n = int(ceil(5/2))
|
|
||||||
/// assert(n, isEqualTo = 3, error = "5/2 = 2.5, rounded up makes 3")
|
|
||||||
/// // Draw n cylinders.
|
|
||||||
/// startSketchOn('XZ')
|
|
||||||
/// |> circle(center = [0, 0], radius = 2 )
|
|
||||||
/// |> extrude(length = 5)
|
|
||||||
/// |> patternTransform(instances = n, transform = fn(id) {
|
|
||||||
/// return { translate = [4 * id, 0, 0] }
|
|
||||||
/// })
|
|
||||||
/// ```
|
|
||||||
#[stdlib {
|
|
||||||
name = "int",
|
|
||||||
tags = ["convert"],
|
|
||||||
deprecated = true,
|
|
||||||
}]
|
|
||||||
fn inner_int(num: f64) -> Result<f64, KclError> {
|
|
||||||
Ok(num)
|
|
||||||
}
|
|
||||||
@ -117,34 +117,6 @@ pub async fn tan(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
|
|||||||
Ok(args.make_user_val_from_f64_with_type(TyF64::count(num.tan())))
|
Ok(args.make_user_val_from_f64_with_type(TyF64::count(num.tan())))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the value of `pi`. Archimedes’ constant (π).
|
|
||||||
pub async fn pi(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
|
||||||
let result = inner_pi()?;
|
|
||||||
|
|
||||||
Ok(args.make_user_val_from_f64_with_type(TyF64::count(result)))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return the value of `pi`. Archimedes’ constant (π).
|
|
||||||
///
|
|
||||||
/// **DEPRECATED** use the constant PI
|
|
||||||
///
|
|
||||||
/// ```no_run
|
|
||||||
/// circumference = 70
|
|
||||||
///
|
|
||||||
/// exampleSketch = startSketchOn("XZ")
|
|
||||||
/// |> circle( center = [0, 0], radius = circumference/ (2 * pi()) )
|
|
||||||
///
|
|
||||||
/// example = extrude(exampleSketch, length = 5)
|
|
||||||
/// ```
|
|
||||||
#[stdlib {
|
|
||||||
name = "pi",
|
|
||||||
tags = ["math"],
|
|
||||||
deprecated = true,
|
|
||||||
}]
|
|
||||||
fn inner_pi() -> Result<f64, KclError> {
|
|
||||||
Ok(std::f64::consts::PI)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Compute the square root of a number.
|
/// Compute the square root of a number.
|
||||||
pub async fn sqrt(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
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 input: TyF64 = args.get_unlabeled_kw_arg_typed("input", &RuntimeType::num_any(), exec_state)?;
|
||||||
@ -747,70 +719,6 @@ fn inner_ln(input: f64) -> f64 {
|
|||||||
input.ln()
|
input.ln()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the value of Euler’s number `e`.
|
|
||||||
pub async fn e(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
|
||||||
let result = inner_e()?;
|
|
||||||
|
|
||||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, NumericType::count())))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return the value of Euler’s number `e`.
|
|
||||||
///
|
|
||||||
/// **DEPRECATED** use the constant E
|
|
||||||
///
|
|
||||||
/// ```no_run
|
|
||||||
/// exampleSketch = startSketchOn("XZ")
|
|
||||||
/// |> startProfile(at = [0, 0])
|
|
||||||
/// |> angledLine(
|
|
||||||
/// angle = 30,
|
|
||||||
/// length = 2 * e() ^ 2,
|
|
||||||
/// )
|
|
||||||
/// |> yLine(endAbsolute = 0)
|
|
||||||
/// |> close()
|
|
||||||
///
|
|
||||||
/// example = extrude(exampleSketch, length = 10)
|
|
||||||
/// ```
|
|
||||||
#[stdlib {
|
|
||||||
name = "e",
|
|
||||||
tags = ["math"],
|
|
||||||
deprecated = true,
|
|
||||||
}]
|
|
||||||
fn inner_e() -> Result<f64, KclError> {
|
|
||||||
Ok(std::f64::consts::E)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return the value of `tau`. The full circle constant (τ). Equal to 2π.
|
|
||||||
pub async fn tau(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
|
||||||
let result = inner_tau()?;
|
|
||||||
|
|
||||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, NumericType::count())))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return the value of `tau`. The full circle constant (τ). Equal to 2π.
|
|
||||||
///
|
|
||||||
/// **DEPRECATED** use the constant TAU
|
|
||||||
///
|
|
||||||
/// ```no_run
|
|
||||||
/// exampleSketch = startSketchOn("XZ")
|
|
||||||
/// |> startProfile(at = [0, 0])
|
|
||||||
/// |> angledLine(
|
|
||||||
/// angle = 50,
|
|
||||||
/// length = 10 * tau(),
|
|
||||||
/// )
|
|
||||||
/// |> yLine(endAbsolute = 0)
|
|
||||||
/// |> close()
|
|
||||||
///
|
|
||||||
/// example = extrude(exampleSketch, length = 5)
|
|
||||||
/// ```
|
|
||||||
#[stdlib {
|
|
||||||
name = "tau",
|
|
||||||
tags = ["math"],
|
|
||||||
deprecated = true,
|
|
||||||
}]
|
|
||||||
fn inner_tau() -> Result<f64, KclError> {
|
|
||||||
Ok(std::f64::consts::TAU)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use pretty_assertions::assert_eq;
|
use pretty_assertions::assert_eq;
|
||||||
|
|||||||
@ -7,7 +7,6 @@ pub mod assert;
|
|||||||
pub mod axis_or_reference;
|
pub mod axis_or_reference;
|
||||||
pub mod chamfer;
|
pub mod chamfer;
|
||||||
pub mod clone;
|
pub mod clone;
|
||||||
pub mod convert;
|
|
||||||
pub mod csg;
|
pub mod csg;
|
||||||
pub mod edge;
|
pub mod edge;
|
||||||
pub mod extrude;
|
pub mod extrude;
|
||||||
@ -25,7 +24,6 @@ pub mod shell;
|
|||||||
pub mod sketch;
|
pub mod sketch;
|
||||||
pub mod sweep;
|
pub mod sweep;
|
||||||
pub mod transform;
|
pub mod transform;
|
||||||
pub mod units;
|
|
||||||
pub mod utils;
|
pub mod utils;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
@ -59,7 +57,6 @@ lazy_static! {
|
|||||||
Box::new(LegAngX),
|
Box::new(LegAngX),
|
||||||
Box::new(LegAngY),
|
Box::new(LegAngY),
|
||||||
Box::new(crate::std::appearance::Appearance),
|
Box::new(crate::std::appearance::Appearance),
|
||||||
Box::new(crate::std::convert::Int),
|
|
||||||
Box::new(crate::std::extrude::Extrude),
|
Box::new(crate::std::extrude::Extrude),
|
||||||
Box::new(crate::std::segment::SegEnd),
|
Box::new(crate::std::segment::SegEnd),
|
||||||
Box::new(crate::std::segment::SegEndX),
|
Box::new(crate::std::segment::SegEndX),
|
||||||
@ -111,9 +108,6 @@ lazy_static! {
|
|||||||
Box::new(crate::std::math::Asin),
|
Box::new(crate::std::math::Asin),
|
||||||
Box::new(crate::std::math::Atan),
|
Box::new(crate::std::math::Atan),
|
||||||
Box::new(crate::std::math::Atan2),
|
Box::new(crate::std::math::Atan2),
|
||||||
Box::new(crate::std::math::Pi),
|
|
||||||
Box::new(crate::std::math::E),
|
|
||||||
Box::new(crate::std::math::Tau),
|
|
||||||
Box::new(crate::std::math::Sqrt),
|
Box::new(crate::std::math::Sqrt),
|
||||||
Box::new(crate::std::math::Abs),
|
Box::new(crate::std::math::Abs),
|
||||||
Box::new(crate::std::math::Rem),
|
Box::new(crate::std::math::Rem),
|
||||||
@ -127,12 +121,6 @@ lazy_static! {
|
|||||||
Box::new(crate::std::math::Log2),
|
Box::new(crate::std::math::Log2),
|
||||||
Box::new(crate::std::math::Log10),
|
Box::new(crate::std::math::Log10),
|
||||||
Box::new(crate::std::math::Ln),
|
Box::new(crate::std::math::Ln),
|
||||||
Box::new(crate::std::units::FromMm),
|
|
||||||
Box::new(crate::std::units::FromInches),
|
|
||||||
Box::new(crate::std::units::FromFt),
|
|
||||||
Box::new(crate::std::units::FromM),
|
|
||||||
Box::new(crate::std::units::FromCm),
|
|
||||||
Box::new(crate::std::units::FromYd),
|
|
||||||
Box::new(crate::std::assert::Assert),
|
Box::new(crate::std::assert::Assert),
|
||||||
Box::new(crate::std::assert::AssertIs),
|
Box::new(crate::std::assert::AssertIs),
|
||||||
Box::new(crate::std::transform::Scale),
|
Box::new(crate::std::transform::Scale),
|
||||||
|
|||||||
@ -1177,6 +1177,12 @@ async fn inner_start_sketch_on(
|
|||||||
}
|
}
|
||||||
SketchData::Plane(plane) => {
|
SketchData::Plane(plane) => {
|
||||||
if plane.value == crate::exec::PlaneType::Uninit {
|
if plane.value == crate::exec::PlaneType::Uninit {
|
||||||
|
if plane.origin.units == UnitLen::Unknown {
|
||||||
|
return Err(KclError::Semantic(KclErrorDetails {
|
||||||
|
message: "Origin of plane has unknown units".to_string(),
|
||||||
|
source_ranges: vec![args.source_range],
|
||||||
|
}));
|
||||||
|
}
|
||||||
let plane = make_sketch_plane_from_orientation(plane.into_plane_data(), exec_state, args).await?;
|
let plane = make_sketch_plane_from_orientation(plane.into_plane_data(), exec_state, args).await?;
|
||||||
Ok(SketchSurface::Plane(plane))
|
Ok(SketchSurface::Plane(plane))
|
||||||
} else {
|
} else {
|
||||||
@ -1272,7 +1278,7 @@ async fn make_sketch_plane_from_orientation(
|
|||||||
pub async fn start_profile(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
pub async fn start_profile(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||||
// let (start, sketch_surface, tag) = args.get_data_and_sketch_surface()?;
|
// let (start, sketch_surface, tag) = args.get_data_and_sketch_surface()?;
|
||||||
let sketch_surface = args.get_unlabeled_kw_arg("startProfileOn")?;
|
let sketch_surface = args.get_unlabeled_kw_arg("startProfileOn")?;
|
||||||
let start: [TyF64; 2] = args.get_kw_arg("at")?;
|
let start: [TyF64; 2] = args.get_kw_arg_typed("at", &RuntimeType::point2d(), exec_state)?;
|
||||||
let tag = args.get_kw_arg_opt(NEW_TAG_KW)?;
|
let tag = args.get_kw_arg_opt(NEW_TAG_KW)?;
|
||||||
|
|
||||||
let sketch = inner_start_profile(sketch_surface, start, tag, exec_state, args).await?;
|
let sketch = inner_start_profile(sketch_surface, start, tag, exec_state, args).await?;
|
||||||
|
|||||||
@ -1,311 +0,0 @@
|
|||||||
//! Functions related to unitsematics.
|
|
||||||
|
|
||||||
use anyhow::Result;
|
|
||||||
use kcl_derive_docs::stdlib;
|
|
||||||
|
|
||||||
use crate::{
|
|
||||||
errors::KclError,
|
|
||||||
execution::{
|
|
||||||
types::{RuntimeType, UnitLen},
|
|
||||||
ExecState, KclValue,
|
|
||||||
},
|
|
||||||
std::{args::TyF64, Args},
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Millimeters conversion factor for current files units.
|
|
||||||
pub async fn from_mm(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
|
||||||
let input = args.get_number_typed(&RuntimeType::known_length(UnitLen::Mm), exec_state)?;
|
|
||||||
let result = inner_from_mm(input, exec_state)?;
|
|
||||||
|
|
||||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(
|
|
||||||
result,
|
|
||||||
exec_state.current_default_units().expect_default_length(),
|
|
||||||
)))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Converts a number from mm to the current default unit.
|
|
||||||
///
|
|
||||||
/// *DEPRECATED* prefer using explicit numeric suffixes (e.g., `42mm`) or the `to...` conversion functions.
|
|
||||||
///
|
|
||||||
/// No matter what units the current file uses, this function will always return a number equivalent
|
|
||||||
/// to the input in millimeters.
|
|
||||||
///
|
|
||||||
/// For example, if the current file uses inches, `fromMm(1)` will return `1/25.4`.
|
|
||||||
/// If the current file uses millimeters, `fromMm(1)` will return `1`.
|
|
||||||
///
|
|
||||||
/// **Caution**: This function is only intended to be used when you absolutely MUST
|
|
||||||
/// have different units in your code than the file settings. Otherwise, it is
|
|
||||||
/// a bad pattern to use this function.
|
|
||||||
///
|
|
||||||
/// We merely provide these functions for convenience and readability, as
|
|
||||||
/// `fromMm(10)` is more readable that your intent is "I want 10 millimeters" than
|
|
||||||
/// `10 * (1/25.4)`, if the file settings are in inches.
|
|
||||||
///
|
|
||||||
/// ```no_run
|
|
||||||
/// totalWidth = fromMm(10)
|
|
||||||
/// ```
|
|
||||||
#[stdlib {
|
|
||||||
name = "fromMm",
|
|
||||||
tags = ["units"],
|
|
||||||
deprecated = true,
|
|
||||||
}]
|
|
||||||
fn inner_from_mm(input: f64, exec_state: &ExecState) -> Result<f64, KclError> {
|
|
||||||
Ok(match exec_state.length_unit() {
|
|
||||||
UnitLen::Mm => input,
|
|
||||||
UnitLen::Inches => measurements::Length::from_millimeters(input).as_inches(),
|
|
||||||
UnitLen::Feet => measurements::Length::from_millimeters(input).as_feet(),
|
|
||||||
UnitLen::M => measurements::Length::from_millimeters(input).as_meters(),
|
|
||||||
UnitLen::Cm => measurements::Length::from_millimeters(input).as_centimeters(),
|
|
||||||
UnitLen::Yards => measurements::Length::from_millimeters(input).as_yards(),
|
|
||||||
UnitLen::Unknown => unreachable!(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Inches conversion factor for current files units.
|
|
||||||
pub async fn from_inches(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
|
||||||
let input = args.get_number_typed(&RuntimeType::known_length(UnitLen::Inches), exec_state)?;
|
|
||||||
let result = inner_from_inches(input, exec_state)?;
|
|
||||||
|
|
||||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(
|
|
||||||
result,
|
|
||||||
exec_state.current_default_units().expect_default_length(),
|
|
||||||
)))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Converts a number from inches to the current default unit.
|
|
||||||
///
|
|
||||||
/// *DEPRECATED* prefer using explicit numeric suffixes (e.g., `42inch`) or the `to...` conversion functions.
|
|
||||||
///
|
|
||||||
/// No matter what units the current file uses, this function will always return a number equivalent
|
|
||||||
/// to the input in inches.
|
|
||||||
///
|
|
||||||
/// For example, if the current file uses inches, `fromInches(1)` will return `1`.
|
|
||||||
/// If the current file uses millimeters, `fromInches(1)` will return `25.4`.
|
|
||||||
///
|
|
||||||
/// **Caution**: This function is only intended to be used when you absolutely MUST
|
|
||||||
/// have different units in your code than the file settings. Otherwise, it is
|
|
||||||
/// a bad pattern to use this function.
|
|
||||||
///
|
|
||||||
/// We merely provide these functions for convenience and readability, as
|
|
||||||
/// `fromInches(10)` is more readable that your intent is "I want 10 inches" than
|
|
||||||
/// `10 * 25.4`, if the file settings are in millimeters.
|
|
||||||
///
|
|
||||||
/// ```no_run
|
|
||||||
/// totalWidth = fromInches(10)
|
|
||||||
/// ```
|
|
||||||
#[stdlib {
|
|
||||||
name = "fromInches",
|
|
||||||
tags = ["units"],
|
|
||||||
deprecated = true,
|
|
||||||
}]
|
|
||||||
fn inner_from_inches(input: f64, exec_state: &ExecState) -> Result<f64, KclError> {
|
|
||||||
match exec_state.length_unit() {
|
|
||||||
UnitLen::Mm => Ok(measurements::Length::from_inches(input).as_millimeters()),
|
|
||||||
UnitLen::Inches => Ok(input),
|
|
||||||
UnitLen::Feet => Ok(measurements::Length::from_inches(input).as_feet()),
|
|
||||||
UnitLen::M => Ok(measurements::Length::from_inches(input).as_meters()),
|
|
||||||
UnitLen::Cm => Ok(measurements::Length::from_inches(input).as_centimeters()),
|
|
||||||
UnitLen::Yards => Ok(measurements::Length::from_inches(input).as_yards()),
|
|
||||||
UnitLen::Unknown => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Feet conversion factor for current files units.
|
|
||||||
pub async fn from_ft(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
|
||||||
let input = args.get_number_typed(&RuntimeType::known_length(UnitLen::Feet), exec_state)?;
|
|
||||||
let result = inner_from_ft(input, exec_state)?;
|
|
||||||
|
|
||||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(
|
|
||||||
result,
|
|
||||||
exec_state.current_default_units().expect_default_length(),
|
|
||||||
)))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Converts a number from feet to the current default unit.
|
|
||||||
///
|
|
||||||
/// *DEPRECATED* prefer using explicit numeric suffixes (e.g., `42ft`) or the `to...` conversion functions.
|
|
||||||
///
|
|
||||||
/// No matter what units the current file uses, this function will always return a number equivalent
|
|
||||||
/// to the input in feet.
|
|
||||||
///
|
|
||||||
/// For example, if the current file uses inches, `fromFt(1)` will return `12`.
|
|
||||||
/// If the current file uses millimeters, `fromFt(1)` will return `304.8`.
|
|
||||||
/// If the current file uses feet, `fromFt(1)` will return `1`.
|
|
||||||
///
|
|
||||||
/// **Caution**: This function is only intended to be used when you absolutely MUST
|
|
||||||
/// have different units in your code than the file settings. Otherwise, it is
|
|
||||||
/// a bad pattern to use this function.
|
|
||||||
///
|
|
||||||
/// We merely provide these functions for convenience and readability, as
|
|
||||||
/// `fromFt(10)` is more readable that your intent is "I want 10 feet" than
|
|
||||||
/// `10 * 304.8`, if the file settings are in millimeters.
|
|
||||||
///
|
|
||||||
/// ```no_run
|
|
||||||
/// totalWidth = fromFt(10)
|
|
||||||
/// ```
|
|
||||||
#[stdlib {
|
|
||||||
name = "fromFt",
|
|
||||||
tags = ["units"],
|
|
||||||
deprecated = true,
|
|
||||||
}]
|
|
||||||
fn inner_from_ft(input: f64, exec_state: &ExecState) -> Result<f64, KclError> {
|
|
||||||
match exec_state.length_unit() {
|
|
||||||
UnitLen::Mm => Ok(measurements::Length::from_feet(input).as_millimeters()),
|
|
||||||
UnitLen::Inches => Ok(measurements::Length::from_feet(input).as_inches()),
|
|
||||||
UnitLen::Feet => Ok(input),
|
|
||||||
UnitLen::M => Ok(measurements::Length::from_feet(input).as_meters()),
|
|
||||||
UnitLen::Cm => Ok(measurements::Length::from_feet(input).as_centimeters()),
|
|
||||||
UnitLen::Yards => Ok(measurements::Length::from_feet(input).as_yards()),
|
|
||||||
UnitLen::Unknown => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Meters conversion factor for current files units.
|
|
||||||
pub async fn from_m(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
|
||||||
let input = args.get_number_typed(&RuntimeType::known_length(UnitLen::M), exec_state)?;
|
|
||||||
let result = inner_from_m(input, exec_state)?;
|
|
||||||
|
|
||||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(
|
|
||||||
result,
|
|
||||||
exec_state.current_default_units().expect_default_length(),
|
|
||||||
)))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Converts a number from meters to the current default unit.
|
|
||||||
///
|
|
||||||
/// *DEPRECATED* prefer using explicit numeric suffixes (e.g., `42m`) or the `to...` conversion functions.
|
|
||||||
///
|
|
||||||
/// No matter what units the current file uses, this function will always return a number equivalent
|
|
||||||
/// to the input in meters.
|
|
||||||
///
|
|
||||||
/// For example, if the current file uses inches, `fromM(1)` will return `39.3701`.
|
|
||||||
/// If the current file uses millimeters, `fromM(1)` will return `1000`.
|
|
||||||
/// If the current file uses meters, `fromM(1)` will return `1`.
|
|
||||||
///
|
|
||||||
/// **Caution**: This function is only intended to be used when you absolutely MUST
|
|
||||||
/// have different units in your code than the file settings. Otherwise, it is
|
|
||||||
/// a bad pattern to use this function.
|
|
||||||
///
|
|
||||||
/// We merely provide these functions for convenience and readability, as
|
|
||||||
/// `fromM(10)` is more readable that your intent is "I want 10 meters" than
|
|
||||||
/// `10 * 1000`, if the file settings are in millimeters.
|
|
||||||
///
|
|
||||||
/// ```no_run
|
|
||||||
/// totalWidth = 10 * fromM(10)
|
|
||||||
/// ```
|
|
||||||
#[stdlib {
|
|
||||||
name = "fromM",
|
|
||||||
tags = ["units"],
|
|
||||||
deprecated = true,
|
|
||||||
}]
|
|
||||||
fn inner_from_m(input: f64, exec_state: &ExecState) -> Result<f64, KclError> {
|
|
||||||
match exec_state.length_unit() {
|
|
||||||
UnitLen::Mm => Ok(measurements::Length::from_meters(input).as_millimeters()),
|
|
||||||
UnitLen::Inches => Ok(measurements::Length::from_meters(input).as_inches()),
|
|
||||||
UnitLen::Feet => Ok(measurements::Length::from_meters(input).as_feet()),
|
|
||||||
UnitLen::M => Ok(input),
|
|
||||||
UnitLen::Cm => Ok(measurements::Length::from_meters(input).as_centimeters()),
|
|
||||||
UnitLen::Yards => Ok(measurements::Length::from_meters(input).as_yards()),
|
|
||||||
UnitLen::Unknown => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Centimeters conversion factor for current files units.
|
|
||||||
pub async fn from_cm(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
|
||||||
let input = args.get_number_typed(&RuntimeType::known_length(UnitLen::Cm), exec_state)?;
|
|
||||||
let result = inner_from_cm(input, exec_state)?;
|
|
||||||
|
|
||||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(
|
|
||||||
result,
|
|
||||||
exec_state.current_default_units().expect_default_length(),
|
|
||||||
)))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Converts a number from centimeters to the current default unit.
|
|
||||||
///
|
|
||||||
/// *DEPRECATED* prefer using explicit numeric suffixes (e.g., `42cm`) or the `to...` conversion functions.
|
|
||||||
///
|
|
||||||
/// No matter what units the current file uses, this function will always return a number equivalent
|
|
||||||
/// to the input in centimeters.
|
|
||||||
///
|
|
||||||
/// For example, if the current file uses inches, `fromCm(1)` will return `0.393701`.
|
|
||||||
/// If the current file uses millimeters, `fromCm(1)` will return `10`.
|
|
||||||
/// If the current file uses centimeters, `fromCm(1)` will return `1`.
|
|
||||||
///
|
|
||||||
/// **Caution**: This function is only intended to be used when you absolutely MUST
|
|
||||||
/// have different units in your code than the file settings. Otherwise, it is
|
|
||||||
/// a bad pattern to use this function.
|
|
||||||
///
|
|
||||||
/// We merely provide these functions for convenience and readability, as
|
|
||||||
/// `fromCm(10)` is more readable that your intent is "I want 10 centimeters" than
|
|
||||||
/// `10 * 10`, if the file settings are in millimeters.
|
|
||||||
///
|
|
||||||
/// ```no_run
|
|
||||||
/// totalWidth = fromCm(10)
|
|
||||||
/// ```
|
|
||||||
#[stdlib {
|
|
||||||
name = "fromCm",
|
|
||||||
tags = ["units"],
|
|
||||||
deprecated = true,
|
|
||||||
}]
|
|
||||||
fn inner_from_cm(input: f64, exec_state: &ExecState) -> Result<f64, KclError> {
|
|
||||||
match exec_state.length_unit() {
|
|
||||||
UnitLen::Mm => Ok(measurements::Length::from_centimeters(input).as_millimeters()),
|
|
||||||
UnitLen::Inches => Ok(measurements::Length::from_centimeters(input).as_inches()),
|
|
||||||
UnitLen::Feet => Ok(measurements::Length::from_centimeters(input).as_feet()),
|
|
||||||
UnitLen::M => Ok(measurements::Length::from_centimeters(input).as_meters()),
|
|
||||||
UnitLen::Cm => Ok(input),
|
|
||||||
UnitLen::Yards => Ok(measurements::Length::from_centimeters(input).as_yards()),
|
|
||||||
UnitLen::Unknown => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Yards conversion factor for current files units.
|
|
||||||
pub async fn from_yd(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
|
||||||
let input = args.get_number_typed(&RuntimeType::known_length(UnitLen::Yards), exec_state)?;
|
|
||||||
let result = inner_from_yd(input, exec_state)?;
|
|
||||||
|
|
||||||
Ok(args.make_user_val_from_f64_with_type(TyF64::new(
|
|
||||||
result,
|
|
||||||
exec_state.current_default_units().expect_default_length(),
|
|
||||||
)))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Converts a number from yards to the current default unit.
|
|
||||||
///
|
|
||||||
/// *DEPRECATED* prefer using explicit numeric suffixes (e.g., `42yd`) or the `to...` conversion functions.
|
|
||||||
///
|
|
||||||
/// No matter what units the current file uses, this function will always return a number equivalent
|
|
||||||
/// to the input in yards.
|
|
||||||
///
|
|
||||||
/// For example, if the current file uses inches, `fromYd(1)` will return `36`.
|
|
||||||
/// If the current file uses millimeters, `fromYd(1)` will return `914.4`.
|
|
||||||
/// If the current file uses yards, `fromYd(1)` will return `1`.
|
|
||||||
///
|
|
||||||
/// **Caution**: This function is only intended to be used when you absolutely MUST
|
|
||||||
/// have different units in your code than the file settings. Otherwise, it is
|
|
||||||
/// a bad pattern to use this function.
|
|
||||||
///
|
|
||||||
/// We merely provide these functions for convenience and readability, as
|
|
||||||
/// `fromYd(10)` is more readable that your intent is "I want 10 yards" than
|
|
||||||
/// `10 * 914.4`, if the file settings are in millimeters.
|
|
||||||
///
|
|
||||||
/// ```no_run
|
|
||||||
/// totalWidth = fromYd(10)
|
|
||||||
/// ```
|
|
||||||
#[stdlib {
|
|
||||||
name = "fromYd",
|
|
||||||
tags = ["units"],
|
|
||||||
deprecated = true,
|
|
||||||
}]
|
|
||||||
fn inner_from_yd(input: f64, exec_state: &ExecState) -> Result<f64, KclError> {
|
|
||||||
match exec_state.length_unit() {
|
|
||||||
UnitLen::Mm => Ok(measurements::Length::from_yards(input).as_millimeters()),
|
|
||||||
UnitLen::Inches => Ok(measurements::Length::from_yards(input).as_inches()),
|
|
||||||
UnitLen::Feet => Ok(measurements::Length::from_yards(input).as_feet()),
|
|
||||||
UnitLen::M => Ok(measurements::Length::from_yards(input).as_meters()),
|
|
||||||
UnitLen::Cm => Ok(measurements::Length::from_yards(input).as_centimeters()),
|
|
||||||
UnitLen::Yards => Ok(input),
|
|
||||||
UnitLen::Unknown => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -6,7 +6,7 @@ use super::args::TyF64;
|
|||||||
use crate::execution::types::{NumericType, UnitLen};
|
use crate::execution::types::{NumericType, UnitLen};
|
||||||
|
|
||||||
pub(crate) fn untype_point(p: [TyF64; 2]) -> ([f64; 2], NumericType) {
|
pub(crate) fn untype_point(p: [TyF64; 2]) -> ([f64; 2], NumericType) {
|
||||||
let (x, y, ty) = NumericType::combine_eq(p[0].clone(), p[1].clone());
|
let (x, y, ty) = NumericType::combine_eq_coerce(p[0].clone(), p[1].clone());
|
||||||
([x, y], ty)
|
([x, y], ty)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -313,6 +313,12 @@ impl Expr {
|
|||||||
}
|
}
|
||||||
Expr::AscribedExpression(e) => {
|
Expr::AscribedExpression(e) => {
|
||||||
let mut result = e.expr.recast(options, indentation_level, ctxt);
|
let mut result = e.expr.recast(options, indentation_level, ctxt);
|
||||||
|
if matches!(
|
||||||
|
e.expr,
|
||||||
|
Expr::BinaryExpression(..) | Expr::PipeExpression(..) | Expr::UnaryExpression(..)
|
||||||
|
) {
|
||||||
|
result = format!("({result})");
|
||||||
|
}
|
||||||
result += ": ";
|
result += ": ";
|
||||||
result += &e.ty.to_string();
|
result += &e.ty.to_string();
|
||||||
result
|
result
|
||||||
|
|||||||
@ -9,11 +9,11 @@ import Point2d from "std::types"
|
|||||||
/// circumference = 70
|
/// circumference = 70
|
||||||
///
|
///
|
||||||
/// exampleSketch = startSketchOn(XZ)
|
/// exampleSketch = startSketchOn(XZ)
|
||||||
/// |> circle(center = [0, 0], radius = circumference / (2 * PI))
|
/// |> circle(center = [0, 0], radius = (circumference / (2 * PI)): number(mm))
|
||||||
///
|
///
|
||||||
/// example = extrude(exampleSketch, length = 5)
|
/// example = extrude(exampleSketch, length = 5)
|
||||||
/// ```
|
/// ```
|
||||||
export PI = 3.14159265358979323846264338327950288_
|
export PI = 3.14159265358979323846264338327950288_?
|
||||||
|
|
||||||
/// The value of Euler’s number `e`.
|
/// The value of Euler’s number `e`.
|
||||||
///
|
///
|
||||||
|
|||||||
@ -398,64 +398,40 @@ description: Result of parsing array_range_expr.kcl
|
|||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
"init": {
|
"init": {
|
||||||
"arguments": [
|
"commentStart": 0,
|
||||||
{
|
"end": 0,
|
||||||
"commentStart": 0,
|
"left": {
|
||||||
"end": 0,
|
|
||||||
"left": {
|
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": "four",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Identifier"
|
|
||||||
},
|
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
|
||||||
"type": "Name",
|
|
||||||
"type": "Name"
|
|
||||||
},
|
|
||||||
"operator": "+",
|
|
||||||
"right": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "1",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 1.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"start": 0,
|
|
||||||
"type": "BinaryExpression",
|
|
||||||
"type": "BinaryExpression"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"callee": {
|
|
||||||
"abs_path": false,
|
"abs_path": false,
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": {
|
"name": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "int",
|
"name": "four",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
"path": [],
|
"path": [],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
|
"type": "Name",
|
||||||
"type": "Name"
|
"type": "Name"
|
||||||
},
|
},
|
||||||
"commentStart": 0,
|
"operator": "+",
|
||||||
"end": 0,
|
"right": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"raw": "1",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 1.0,
|
||||||
|
"suffix": "None"
|
||||||
|
}
|
||||||
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "CallExpression",
|
"type": "BinaryExpression",
|
||||||
"type": "CallExpression"
|
"type": "BinaryExpression"
|
||||||
},
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "VariableDeclarator"
|
"type": "VariableDeclarator"
|
||||||
@ -743,126 +719,78 @@ description: Result of parsing array_range_expr.kcl
|
|||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"endElement": {
|
"endElement": {
|
||||||
"arguments": [
|
"commentStart": 0,
|
||||||
{
|
"end": 0,
|
||||||
"commentStart": 0,
|
"left": {
|
||||||
"end": 0,
|
|
||||||
"left": {
|
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": "five",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Identifier"
|
|
||||||
},
|
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
|
||||||
"type": "Name",
|
|
||||||
"type": "Name"
|
|
||||||
},
|
|
||||||
"operator": "-",
|
|
||||||
"right": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "1",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 1.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"start": 0,
|
|
||||||
"type": "BinaryExpression",
|
|
||||||
"type": "BinaryExpression"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"callee": {
|
|
||||||
"abs_path": false,
|
"abs_path": false,
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": {
|
"name": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "int",
|
"name": "five",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
"path": [],
|
"path": [],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
|
"type": "Name",
|
||||||
"type": "Name"
|
"type": "Name"
|
||||||
},
|
},
|
||||||
"commentStart": 0,
|
"operator": "-",
|
||||||
"end": 0,
|
"right": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"raw": "1",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 1.0,
|
||||||
|
"suffix": "None"
|
||||||
|
}
|
||||||
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "CallExpression",
|
"type": "BinaryExpression",
|
||||||
"type": "CallExpression"
|
"type": "BinaryExpression"
|
||||||
},
|
},
|
||||||
"endInclusive": true,
|
"endInclusive": true,
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"startElement": {
|
"startElement": {
|
||||||
"arguments": [
|
"commentStart": 0,
|
||||||
{
|
"end": 0,
|
||||||
"commentStart": 0,
|
"left": {
|
||||||
"end": 0,
|
|
||||||
"left": {
|
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": "zero",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Identifier"
|
|
||||||
},
|
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
|
||||||
"type": "Name",
|
|
||||||
"type": "Name"
|
|
||||||
},
|
|
||||||
"operator": "+",
|
|
||||||
"right": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "1",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 1.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"start": 0,
|
|
||||||
"type": "BinaryExpression",
|
|
||||||
"type": "BinaryExpression"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"callee": {
|
|
||||||
"abs_path": false,
|
"abs_path": false,
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": {
|
"name": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "int",
|
"name": "zero",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
"path": [],
|
"path": [],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
|
"type": "Name",
|
||||||
"type": "Name"
|
"type": "Name"
|
||||||
},
|
},
|
||||||
"commentStart": 0,
|
"operator": "+",
|
||||||
"end": 0,
|
"right": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"raw": "1",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 1.0,
|
||||||
|
"suffix": "None"
|
||||||
|
}
|
||||||
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "CallExpression",
|
"type": "BinaryExpression",
|
||||||
"type": "CallExpression"
|
"type": "BinaryExpression"
|
||||||
},
|
},
|
||||||
"type": "ArrayRangeExpression",
|
"type": "ArrayRangeExpression",
|
||||||
"type": "ArrayRangeExpression"
|
"type": "ArrayRangeExpression"
|
||||||
|
|||||||
@ -6,12 +6,12 @@ zero = 0
|
|||||||
r2 = [zero..four]
|
r2 = [zero..four]
|
||||||
assert(r2[4], isEqualTo = 4, error = "last element is included")
|
assert(r2[4], isEqualTo = 4, error = "last element is included")
|
||||||
|
|
||||||
five = int(four + 1)
|
five = four + 1
|
||||||
r3 = [zero..five]
|
r3 = [zero..five]
|
||||||
assert(r3[4], isEqualTo = 4, error = "second-to-last element is included")
|
assert(r3[4], isEqualTo = 4, error = "second-to-last element is included")
|
||||||
assert(r3[5], isEqualTo = 5, error = "last element is included")
|
assert(r3[5], isEqualTo = 5, error = "last element is included")
|
||||||
|
|
||||||
r4 = [int(zero + 1) .. int(five - 1)]
|
r4 = [zero + 1 .. five - 1]
|
||||||
assert(r4[0], isEqualTo = 1, error = "first element is 1")
|
assert(r4[0], isEqualTo = 1, error = "first element is 1")
|
||||||
assert(r4[2], isEqualTo = 3, error = "second-to-last element is 3")
|
assert(r4[2], isEqualTo = 3, error = "second-to-last element is 3")
|
||||||
assert(r4[3], isEqualTo = 4, error = "last element is 4")
|
assert(r4[3], isEqualTo = 4, error = "last element is 4")
|
||||||
|
|||||||
@ -10,12 +10,12 @@ zero = 0
|
|||||||
r2 = [zero..four]
|
r2 = [zero..four]
|
||||||
assert(r2[4], isEqualTo = 4, error = "last element is included")
|
assert(r2[4], isEqualTo = 4, error = "last element is included")
|
||||||
|
|
||||||
five = int(four + 1)
|
five = four + 1
|
||||||
r3 = [zero..five]
|
r3 = [zero..five]
|
||||||
assert(r3[4], isEqualTo = 4, error = "second-to-last element is included")
|
assert(r3[4], isEqualTo = 4, error = "second-to-last element is included")
|
||||||
assert(r3[5], isEqualTo = 5, error = "last element is included")
|
assert(r3[5], isEqualTo = 5, error = "last element is included")
|
||||||
|
|
||||||
r4 = [int(zero + 1) .. int(five - 1)]
|
r4 = [zero + 1 .. five - 1]
|
||||||
assert(r4[0], isEqualTo = 1, error = "first element is 1")
|
assert(r4[0], isEqualTo = 1, error = "first element is 1")
|
||||||
assert(r4[2], isEqualTo = 3, error = "second-to-last element is 3")
|
assert(r4[2], isEqualTo = 3, error = "second-to-last element is 3")
|
||||||
assert(r4[3], isEqualTo = 4, error = "last element is 4")
|
assert(r4[3], isEqualTo = 4, error = "last element is 4")
|
||||||
|
|||||||
@ -35,48 +35,24 @@ description: Result of parsing array_range_negative_expr.kcl
|
|||||||
"endInclusive": true,
|
"endInclusive": true,
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"startElement": {
|
"startElement": {
|
||||||
"arguments": [
|
"argument": {
|
||||||
{
|
|
||||||
"argument": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "5",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 5.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"operator": "-",
|
|
||||||
"start": 0,
|
|
||||||
"type": "UnaryExpression",
|
|
||||||
"type": "UnaryExpression"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"callee": {
|
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": {
|
"raw": "5",
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": "int",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Identifier"
|
|
||||||
},
|
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Name"
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 5.0,
|
||||||
|
"suffix": "None"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
|
"operator": "-",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "CallExpression",
|
"type": "UnaryExpression",
|
||||||
"type": "CallExpression"
|
"type": "UnaryExpression"
|
||||||
},
|
},
|
||||||
"type": "ArrayRangeExpression",
|
"type": "ArrayRangeExpression",
|
||||||
"type": "ArrayRangeExpression"
|
"type": "ArrayRangeExpression"
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
xs = [int(-5) .. 5]
|
xs = [-5 .. 5]
|
||||||
assert(xs[0], isEqualTo = -5, error = "first element is -5")
|
assert(xs[0], isEqualTo = -5, error = "first element is -5")
|
||||||
|
|||||||
@ -2,5 +2,5 @@
|
|||||||
source: kcl-lib/src/simulation_tests.rs
|
source: kcl-lib/src/simulation_tests.rs
|
||||||
description: Result of unparsing array_range_negative_expr.kcl
|
description: Result of unparsing array_range_negative_expr.kcl
|
||||||
---
|
---
|
||||||
xs = [int(-5) .. 5]
|
xs = [-5 .. 5]
|
||||||
assert(xs[0], isEqualTo = -5, error = "first element is -5")
|
assert(xs[0], isEqualTo = -5, error = "first element is -5")
|
||||||
|
|||||||
@ -589,38 +589,53 @@ description: Result of parsing computed_var.kcl
|
|||||||
{
|
{
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"left": {
|
"expr": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"raw": "2",
|
"left": {
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 2.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"operator": "*",
|
|
||||||
"right": {
|
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "PI",
|
"raw": "2",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 2.0,
|
||||||
|
"suffix": "None"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"operator": "*",
|
||||||
|
"right": {
|
||||||
|
"abs_path": false,
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"name": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"name": "PI",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Identifier"
|
||||||
|
},
|
||||||
|
"path": [],
|
||||||
|
"start": 0,
|
||||||
|
"type": "Name",
|
||||||
|
"type": "Name"
|
||||||
},
|
},
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Name",
|
"type": "BinaryExpression",
|
||||||
"type": "Name"
|
"type": "BinaryExpression"
|
||||||
},
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "BinaryExpression",
|
"ty": {
|
||||||
"type": "BinaryExpression"
|
"Rad": null,
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"p_type": "Number",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Primitive"
|
||||||
|
},
|
||||||
|
"type": "AscribedExpression",
|
||||||
|
"type": "AscribedExpression"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"callee": {
|
"callee": {
|
||||||
|
|||||||
@ -14,5 +14,5 @@ assert(one, isEqualTo = 1, error = "oops")
|
|||||||
|
|
||||||
assert(PI, isEqualTo = 3, tolerance = 0.2, error = "oops pi")
|
assert(PI, isEqualTo = 3, tolerance = 0.2, error = "oops pi")
|
||||||
|
|
||||||
x = cos(2 * PI)
|
x = cos((2 * PI): number(rad))
|
||||||
assert(x, isEqualTo = 1, tolerance = 0.000001, error = "oops cos")
|
assert(x, isEqualTo = 1, tolerance = 0.000001, error = "oops cos")
|
||||||
|
|||||||
@ -23,7 +23,7 @@ assert(
|
|||||||
error = "oops pi",
|
error = "oops pi",
|
||||||
)
|
)
|
||||||
|
|
||||||
x = cos(2 * PI)
|
x = cos((2 * PI): number(rad))
|
||||||
assert(
|
assert(
|
||||||
x,
|
x,
|
||||||
isEqualTo = 1,
|
isEqualTo = 1,
|
||||||
|
|||||||
@ -309,60 +309,36 @@ description: Result of parsing index_of_array.kcl
|
|||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
"init": {
|
"init": {
|
||||||
"arguments": [
|
|
||||||
{
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"left": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "1",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 1.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"operator": "+",
|
|
||||||
"right": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "0",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 0.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"start": 0,
|
|
||||||
"type": "BinaryExpression",
|
|
||||||
"type": "BinaryExpression"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"callee": {
|
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": "int",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Identifier"
|
|
||||||
},
|
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
|
||||||
"type": "Name"
|
|
||||||
},
|
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
|
"left": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"raw": "1",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 1.0,
|
||||||
|
"suffix": "None"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"operator": "+",
|
||||||
|
"right": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"raw": "0",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 0.0,
|
||||||
|
"suffix": "None"
|
||||||
|
}
|
||||||
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "CallExpression",
|
"type": "BinaryExpression",
|
||||||
"type": "CallExpression"
|
"type": "BinaryExpression"
|
||||||
},
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "VariableDeclarator"
|
"type": "VariableDeclarator"
|
||||||
|
|||||||
@ -14,7 +14,7 @@ assert(result0, isGreaterThanOrEqual = 91, error = "Literal property lookup")
|
|||||||
// Test: computed index.
|
// Test: computed index.
|
||||||
|
|
||||||
|
|
||||||
i = int(1 + 0)
|
i = 1 + 0
|
||||||
result1 = arr[i]
|
result1 = arr[i]
|
||||||
|
|
||||||
assert(result1, isLessThanOrEqual = 91, error = "Computed property lookup")
|
assert(result1, isLessThanOrEqual = 91, error = "Computed property lookup")
|
||||||
|
|||||||
@ -18,7 +18,7 @@ assert(result0, isGreaterThanOrEqual = 91, error = "Literal property lookup")
|
|||||||
// Test: computed index.
|
// Test: computed index.
|
||||||
|
|
||||||
|
|
||||||
i = int(1 + 0)
|
i = 1 + 0
|
||||||
result1 = arr[i]
|
result1 = arr[i]
|
||||||
|
|
||||||
assert(result1, isLessThanOrEqual = 91, error = "Computed property lookup")
|
assert(result1, isLessThanOrEqual = 91, error = "Computed property lookup")
|
||||||
|
|||||||
@ -325,7 +325,7 @@ description: Artifact commands car-wheel-assembly.kcl
|
|||||||
"type": "move_path_pen",
|
"type": "move_path_pen",
|
||||||
"path": "[uuid]",
|
"path": "[uuid]",
|
||||||
"to": {
|
"to": {
|
||||||
"x": 38.099999999999994,
|
"x": 38.1,
|
||||||
"y": 0.0,
|
"y": 0.0,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
}
|
}
|
||||||
@ -350,7 +350,7 @@ description: Artifact commands car-wheel-assembly.kcl
|
|||||||
"x": 0.0,
|
"x": 0.0,
|
||||||
"y": 0.0
|
"y": 0.0
|
||||||
},
|
},
|
||||||
"radius": 38.099999999999994,
|
"radius": 38.1,
|
||||||
"start": {
|
"start": {
|
||||||
"unit": "degrees",
|
"unit": "degrees",
|
||||||
"value": 0.0
|
"value": 0.0
|
||||||
@ -632,7 +632,7 @@ description: Artifact commands car-wheel-assembly.kcl
|
|||||||
"type": "move_path_pen",
|
"type": "move_path_pen",
|
||||||
"path": "[uuid]",
|
"path": "[uuid]",
|
||||||
"to": {
|
"to": {
|
||||||
"x": 38.099999999999994,
|
"x": 38.1,
|
||||||
"y": 0.0,
|
"y": 0.0,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
}
|
}
|
||||||
@ -657,7 +657,7 @@ description: Artifact commands car-wheel-assembly.kcl
|
|||||||
"x": 0.0,
|
"x": 0.0,
|
||||||
"y": 0.0
|
"y": 0.0
|
||||||
},
|
},
|
||||||
"radius": 38.099999999999994,
|
"radius": 38.1,
|
||||||
"start": {
|
"start": {
|
||||||
"unit": "degrees",
|
"unit": "degrees",
|
||||||
"value": 0.0
|
"value": 0.0
|
||||||
@ -1426,7 +1426,7 @@ description: Artifact commands car-wheel-assembly.kcl
|
|||||||
"type": "move_path_pen",
|
"type": "move_path_pen",
|
||||||
"path": "[uuid]",
|
"path": "[uuid]",
|
||||||
"to": {
|
"to": {
|
||||||
"x": 65.14999999999999,
|
"x": 65.15,
|
||||||
"y": 0.0,
|
"y": 0.0,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
}
|
}
|
||||||
@ -1451,7 +1451,7 @@ description: Artifact commands car-wheel-assembly.kcl
|
|||||||
"x": 57.15,
|
"x": 57.15,
|
||||||
"y": 0.0
|
"y": 0.0
|
||||||
},
|
},
|
||||||
"radius": 7.999999999999999,
|
"radius": 8.0,
|
||||||
"start": {
|
"start": {
|
||||||
"unit": "degrees",
|
"unit": "degrees",
|
||||||
"value": 0.0
|
"value": 0.0
|
||||||
@ -2103,7 +2103,7 @@ description: Artifact commands car-wheel-assembly.kcl
|
|||||||
"type": "move_path_pen",
|
"type": "move_path_pen",
|
||||||
"path": "[uuid]",
|
"path": "[uuid]",
|
||||||
"to": {
|
"to": {
|
||||||
"x": 38.099999999999994,
|
"x": 38.1,
|
||||||
"y": 0.0,
|
"y": 0.0,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
}
|
}
|
||||||
@ -13008,7 +13008,7 @@ description: Artifact commands car-wheel-assembly.kcl
|
|||||||
"type": "make_plane",
|
"type": "make_plane",
|
||||||
"origin": {
|
"origin": {
|
||||||
"x": 57.15,
|
"x": 57.15,
|
||||||
"y": -29.999999999999996,
|
"y": -30.0,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
},
|
},
|
||||||
"x_axis": {
|
"x_axis": {
|
||||||
|
|||||||
@ -79,85 +79,85 @@ flowchart LR
|
|||||||
158[Solid2d]
|
158[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path167 [Path]
|
subgraph path167 [Path]
|
||||||
167["Path<br>[1276, 1337, 8]"]
|
167["Path<br>[1276, 1331, 8]"]
|
||||||
168["Segment<br>[1276, 1337, 8]"]
|
168["Segment<br>[1276, 1331, 8]"]
|
||||||
169[Solid2d]
|
169[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path179 [Path]
|
subgraph path179 [Path]
|
||||||
179["Path<br>[1695, 1741, 8]"]
|
179["Path<br>[1689, 1735, 8]"]
|
||||||
180["Segment<br>[1747, 1799, 8]"]
|
180["Segment<br>[1741, 1793, 8]"]
|
||||||
181["Segment<br>[1805, 1878, 8]"]
|
181["Segment<br>[1799, 1872, 8]"]
|
||||||
182["Segment<br>[1884, 1906, 8]"]
|
182["Segment<br>[1878, 1900, 8]"]
|
||||||
183["Segment<br>[1912, 1968, 8]"]
|
183["Segment<br>[1906, 1962, 8]"]
|
||||||
184["Segment<br>[1974, 1981, 8]"]
|
184["Segment<br>[1968, 1975, 8]"]
|
||||||
185[Solid2d]
|
185[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path195 [Path]
|
subgraph path195 [Path]
|
||||||
195["Path<br>[2113, 2159, 8]"]
|
195["Path<br>[2107, 2153, 8]"]
|
||||||
196["Segment<br>[2165, 2217, 8]"]
|
196["Segment<br>[2159, 2211, 8]"]
|
||||||
197["Segment<br>[2223, 2298, 8]"]
|
197["Segment<br>[2217, 2292, 8]"]
|
||||||
198["Segment<br>[2304, 2341, 8]"]
|
198["Segment<br>[2298, 2335, 8]"]
|
||||||
199["Segment<br>[2347, 2403, 8]"]
|
199["Segment<br>[2341, 2397, 8]"]
|
||||||
200["Segment<br>[2409, 2416, 8]"]
|
200["Segment<br>[2403, 2410, 8]"]
|
||||||
201[Solid2d]
|
201[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path212 [Path]
|
subgraph path212 [Path]
|
||||||
212["Path<br>[2897, 2944, 8]"]
|
212["Path<br>[2891, 2938, 8]"]
|
||||||
213["Segment<br>[2952, 3289, 8]"]
|
213["Segment<br>[2946, 3283, 8]"]
|
||||||
214["Segment<br>[3297, 3329, 8]"]
|
214["Segment<br>[3291, 3323, 8]"]
|
||||||
215["Segment<br>[3337, 3678, 8]"]
|
215["Segment<br>[3331, 3672, 8]"]
|
||||||
216["Segment<br>[3686, 3742, 8]"]
|
216["Segment<br>[3680, 3736, 8]"]
|
||||||
217["Segment<br>[3750, 3757, 8]"]
|
217["Segment<br>[3744, 3751, 8]"]
|
||||||
218[Solid2d]
|
218[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path235 [Path]
|
subgraph path235 [Path]
|
||||||
235["Path<br>[2897, 2944, 8]"]
|
235["Path<br>[2891, 2938, 8]"]
|
||||||
236["Segment<br>[2952, 3289, 8]"]
|
236["Segment<br>[2946, 3283, 8]"]
|
||||||
237["Segment<br>[3297, 3329, 8]"]
|
237["Segment<br>[3291, 3323, 8]"]
|
||||||
238["Segment<br>[3337, 3678, 8]"]
|
238["Segment<br>[3331, 3672, 8]"]
|
||||||
239["Segment<br>[3686, 3742, 8]"]
|
239["Segment<br>[3680, 3736, 8]"]
|
||||||
240["Segment<br>[3750, 3757, 8]"]
|
240["Segment<br>[3744, 3751, 8]"]
|
||||||
241[Solid2d]
|
241[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path258 [Path]
|
subgraph path258 [Path]
|
||||||
258["Path<br>[4285, 4380, 8]"]
|
258["Path<br>[4279, 4374, 8]"]
|
||||||
259["Segment<br>[4386, 4419, 8]"]
|
259["Segment<br>[4380, 4413, 8]"]
|
||||||
260["Segment<br>[4425, 4476, 8]"]
|
260["Segment<br>[4419, 4470, 8]"]
|
||||||
261["Segment<br>[4482, 4515, 8]"]
|
261["Segment<br>[4476, 4509, 8]"]
|
||||||
262["Segment<br>[4521, 4571, 8]"]
|
262["Segment<br>[4515, 4565, 8]"]
|
||||||
263["Segment<br>[4577, 4618, 8]"]
|
263["Segment<br>[4571, 4612, 8]"]
|
||||||
264["Segment<br>[4624, 4673, 8]"]
|
264["Segment<br>[4618, 4667, 8]"]
|
||||||
265["Segment<br>[4679, 4712, 8]"]
|
265["Segment<br>[4673, 4706, 8]"]
|
||||||
266["Segment<br>[4718, 4752, 8]"]
|
266["Segment<br>[4712, 4746, 8]"]
|
||||||
267["Segment<br>[4758, 4792, 8]"]
|
267["Segment<br>[4752, 4786, 8]"]
|
||||||
268["Segment<br>[4798, 4850, 8]"]
|
268["Segment<br>[4792, 4844, 8]"]
|
||||||
269["Segment<br>[4856, 4890, 8]"]
|
269["Segment<br>[4850, 4884, 8]"]
|
||||||
270["Segment<br>[4896, 4972, 8]"]
|
270["Segment<br>[4890, 4966, 8]"]
|
||||||
271["Segment<br>[4978, 5011, 8]"]
|
271["Segment<br>[4972, 5005, 8]"]
|
||||||
272["Segment<br>[5017, 5093, 8]"]
|
272["Segment<br>[5011, 5087, 8]"]
|
||||||
273["Segment<br>[5099, 5133, 8]"]
|
273["Segment<br>[5093, 5127, 8]"]
|
||||||
274["Segment<br>[5139, 5213, 8]"]
|
274["Segment<br>[5133, 5207, 8]"]
|
||||||
275["Segment<br>[5219, 5253, 8]"]
|
275["Segment<br>[5213, 5247, 8]"]
|
||||||
276["Segment<br>[5259, 5310, 8]"]
|
276["Segment<br>[5253, 5304, 8]"]
|
||||||
277["Segment<br>[5316, 5378, 8]"]
|
277["Segment<br>[5310, 5372, 8]"]
|
||||||
278["Segment<br>[5384, 5435, 8]"]
|
278["Segment<br>[5378, 5429, 8]"]
|
||||||
279["Segment<br>[5441, 5475, 8]"]
|
279["Segment<br>[5435, 5469, 8]"]
|
||||||
280["Segment<br>[5481, 5514, 8]"]
|
280["Segment<br>[5475, 5508, 8]"]
|
||||||
281["Segment<br>[5520, 5553, 8]"]
|
281["Segment<br>[5514, 5547, 8]"]
|
||||||
282["Segment<br>[5559, 5566, 8]"]
|
282["Segment<br>[5553, 5560, 8]"]
|
||||||
283[Solid2d]
|
283[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path334 [Path]
|
subgraph path334 [Path]
|
||||||
334["Path<br>[713, 753, 11]"]
|
334["Path<br>[693, 733, 11]"]
|
||||||
335["Segment<br>[761, 808, 11]"]
|
335["Segment<br>[741, 788, 11]"]
|
||||||
336["Segment<br>[816, 852, 11]"]
|
336["Segment<br>[796, 832, 11]"]
|
||||||
337["Segment<br>[860, 890, 11]"]
|
337["Segment<br>[840, 870, 11]"]
|
||||||
338["Segment<br>[898, 943, 11]"]
|
338["Segment<br>[878, 917, 11]"]
|
||||||
339["Segment<br>[951, 991, 11]"]
|
339["Segment<br>[925, 965, 11]"]
|
||||||
340["Segment<br>[999, 1034, 11]"]
|
340["Segment<br>[973, 1008, 11]"]
|
||||||
341["Segment<br>[1042, 1080, 11]"]
|
341["Segment<br>[1016, 1054, 11]"]
|
||||||
342["Segment<br>[1088, 1110, 11]"]
|
342["Segment<br>[1062, 1084, 11]"]
|
||||||
343["Segment<br>[1118, 1125, 11]"]
|
343["Segment<br>[1092, 1099, 11]"]
|
||||||
344[Solid2d]
|
344[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path365 [Path]
|
subgraph path365 [Path]
|
||||||
@ -315,16 +315,16 @@ flowchart LR
|
|||||||
164["Sweep Extrusion<br>[1140, 1174, 8]"]
|
164["Sweep Extrusion<br>[1140, 1174, 8]"]
|
||||||
165["Sweep Extrusion<br>[1140, 1174, 8]"]
|
165["Sweep Extrusion<br>[1140, 1174, 8]"]
|
||||||
166["Sweep Extrusion<br>[1140, 1174, 8]"]
|
166["Sweep Extrusion<br>[1140, 1174, 8]"]
|
||||||
170["Sweep Extrusion<br>[1484, 1518, 8]"]
|
170["Sweep Extrusion<br>[1478, 1512, 8]"]
|
||||||
171[Wall]
|
171[Wall]
|
||||||
172["SweepEdge Opposite"]
|
172["SweepEdge Opposite"]
|
||||||
173["SweepEdge Adjacent"]
|
173["SweepEdge Adjacent"]
|
||||||
174["Sweep Extrusion<br>[1484, 1518, 8]"]
|
174["Sweep Extrusion<br>[1478, 1512, 8]"]
|
||||||
175["Sweep Extrusion<br>[1484, 1518, 8]"]
|
175["Sweep Extrusion<br>[1478, 1512, 8]"]
|
||||||
176["Sweep Extrusion<br>[1484, 1518, 8]"]
|
176["Sweep Extrusion<br>[1478, 1512, 8]"]
|
||||||
177["Sweep Extrusion<br>[1484, 1518, 8]"]
|
177["Sweep Extrusion<br>[1478, 1512, 8]"]
|
||||||
178["Plane<br>[1672, 1689, 8]"]
|
178["Plane<br>[1666, 1683, 8]"]
|
||||||
186["Sweep Revolve<br>[1987, 2004, 8]"]
|
186["Sweep Revolve<br>[1981, 1998, 8]"]
|
||||||
187[Wall]
|
187[Wall]
|
||||||
188[Wall]
|
188[Wall]
|
||||||
189[Wall]
|
189[Wall]
|
||||||
@ -332,8 +332,8 @@ flowchart LR
|
|||||||
191["SweepEdge Adjacent"]
|
191["SweepEdge Adjacent"]
|
||||||
192["SweepEdge Adjacent"]
|
192["SweepEdge Adjacent"]
|
||||||
193["SweepEdge Adjacent"]
|
193["SweepEdge Adjacent"]
|
||||||
194["Plane<br>[2090, 2107, 8]"]
|
194["Plane<br>[2084, 2101, 8]"]
|
||||||
202["Sweep Revolve<br>[2422, 2439, 8]"]
|
202["Sweep Revolve<br>[2416, 2433, 8]"]
|
||||||
203[Wall]
|
203[Wall]
|
||||||
204[Wall]
|
204[Wall]
|
||||||
205[Wall]
|
205[Wall]
|
||||||
@ -342,8 +342,8 @@ flowchart LR
|
|||||||
208["SweepEdge Adjacent"]
|
208["SweepEdge Adjacent"]
|
||||||
209["SweepEdge Adjacent"]
|
209["SweepEdge Adjacent"]
|
||||||
210["SweepEdge Adjacent"]
|
210["SweepEdge Adjacent"]
|
||||||
211["Plane<br>[2866, 2889, 8]"]
|
211["Plane<br>[2860, 2883, 8]"]
|
||||||
219["Sweep Extrusion<br>[3805, 3851, 8]"]
|
219["Sweep Extrusion<br>[3799, 3845, 8]"]
|
||||||
220[Wall]
|
220[Wall]
|
||||||
221[Wall]
|
221[Wall]
|
||||||
222[Wall]
|
222[Wall]
|
||||||
@ -358,8 +358,8 @@ flowchart LR
|
|||||||
231["SweepEdge Adjacent"]
|
231["SweepEdge Adjacent"]
|
||||||
232["SweepEdge Opposite"]
|
232["SweepEdge Opposite"]
|
||||||
233["SweepEdge Adjacent"]
|
233["SweepEdge Adjacent"]
|
||||||
234["Plane<br>[2866, 2889, 8]"]
|
234["Plane<br>[2860, 2883, 8]"]
|
||||||
242["Sweep Extrusion<br>[3805, 3851, 8]"]
|
242["Sweep Extrusion<br>[3799, 3845, 8]"]
|
||||||
243[Wall]
|
243[Wall]
|
||||||
244[Wall]
|
244[Wall]
|
||||||
245[Wall]
|
245[Wall]
|
||||||
@ -374,8 +374,8 @@ flowchart LR
|
|||||||
254["SweepEdge Adjacent"]
|
254["SweepEdge Adjacent"]
|
||||||
255["SweepEdge Opposite"]
|
255["SweepEdge Opposite"]
|
||||||
256["SweepEdge Adjacent"]
|
256["SweepEdge Adjacent"]
|
||||||
257["Plane<br>[4262, 4279, 8]"]
|
257["Plane<br>[4256, 4273, 8]"]
|
||||||
284["Sweep Revolve<br>[5572, 5589, 8]"]
|
284["Sweep Revolve<br>[5566, 5583, 8]"]
|
||||||
285[Wall]
|
285[Wall]
|
||||||
286[Wall]
|
286[Wall]
|
||||||
287[Wall]
|
287[Wall]
|
||||||
@ -424,8 +424,8 @@ flowchart LR
|
|||||||
330["SweepEdge Adjacent"]
|
330["SweepEdge Adjacent"]
|
||||||
331["SweepEdge Adjacent"]
|
331["SweepEdge Adjacent"]
|
||||||
332["SweepEdge Adjacent"]
|
332["SweepEdge Adjacent"]
|
||||||
333["Plane<br>[679, 705, 11]"]
|
333["Plane<br>[659, 685, 11]"]
|
||||||
345["Sweep Revolve<br>[1133, 1150, 11]"]
|
345["Sweep Revolve<br>[1107, 1124, 11]"]
|
||||||
346[Wall]
|
346[Wall]
|
||||||
347[Wall]
|
347[Wall]
|
||||||
348[Wall]
|
348[Wall]
|
||||||
|
|||||||
@ -2153,20 +2153,20 @@ description: Operations executed car-wheel-assembly.kcl
|
|||||||
"value": {
|
"value": {
|
||||||
"x": {
|
"x": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"value": 2.25,
|
"value": 57.15,
|
||||||
"ty": {
|
"ty": {
|
||||||
"type": "Known",
|
"type": "Known",
|
||||||
"type": "Length",
|
"type": "Length",
|
||||||
"type": "Inches"
|
"type": "Mm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"y": {
|
"y": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"value": -1.1811023622047243,
|
"value": -30.0,
|
||||||
"ty": {
|
"ty": {
|
||||||
"type": "Known",
|
"type": "Known",
|
||||||
"type": "Length",
|
"type": "Length",
|
||||||
"type": "Inches"
|
"type": "Mm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"z": {
|
"z": {
|
||||||
|
|||||||
@ -143,20 +143,20 @@ description: Variables in memory after executing car-wheel-assembly.kcl
|
|||||||
},
|
},
|
||||||
"lugDiameter": {
|
"lugDiameter": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"value": 0.9449,
|
"value": 24.0,
|
||||||
"ty": {
|
"ty": {
|
||||||
"type": "Known",
|
"type": "Known",
|
||||||
"type": "Length",
|
"type": "Length",
|
||||||
"type": "Inches"
|
"type": "Mm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lugHeadLength": {
|
"lugHeadLength": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"value": 0.4724,
|
"value": 12.0,
|
||||||
"ty": {
|
"ty": {
|
||||||
"type": "Known",
|
"type": "Known",
|
||||||
"type": "Length",
|
"type": "Length",
|
||||||
"type": "Inches"
|
"type": "Mm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lugHolePatternDia": {
|
"lugHolePatternDia": {
|
||||||
@ -174,11 +174,11 @@ description: Variables in memory after executing car-wheel-assembly.kcl
|
|||||||
},
|
},
|
||||||
"lugLength": {
|
"lugLength": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"value": 1.1811,
|
"value": 30.0,
|
||||||
"ty": {
|
"ty": {
|
||||||
"type": "Known",
|
"type": "Known",
|
||||||
"type": "Length",
|
"type": "Length",
|
||||||
"type": "Inches"
|
"type": "Mm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lugNut": {
|
"lugNut": {
|
||||||
@ -187,38 +187,38 @@ description: Variables in memory after executing car-wheel-assembly.kcl
|
|||||||
},
|
},
|
||||||
"lugSpacing": {
|
"lugSpacing": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"value": 4.5,
|
"value": 114.3,
|
||||||
"ty": {
|
"ty": {
|
||||||
"type": "Known",
|
"type": "Known",
|
||||||
"type": "Length",
|
"type": "Length",
|
||||||
"type": "Inches"
|
"type": "Mm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lugThreadDepth": {
|
"lugThreadDepth": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"value": 0.6811,
|
"value": 17.3,
|
||||||
"ty": {
|
"ty": {
|
||||||
"type": "Known",
|
"type": "Known",
|
||||||
"type": "Length",
|
"type": "Length",
|
||||||
"type": "Inches"
|
"type": "Mm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lugThreadDiameter": {
|
"lugThreadDiameter": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"value": 0.4016,
|
"value": 10.2,
|
||||||
"ty": {
|
"ty": {
|
||||||
"type": "Known",
|
"type": "Known",
|
||||||
"type": "Length",
|
"type": "Length",
|
||||||
"type": "Inches"
|
"type": "Mm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"offset": {
|
"offset": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"value": -1.378,
|
"value": -35.0,
|
||||||
"ty": {
|
"ty": {
|
||||||
"type": "Known",
|
"type": "Known",
|
||||||
"type": "Length",
|
"type": "Length",
|
||||||
"type": "Inches"
|
"type": "Mm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rotorDiameter": {
|
"rotorDiameter": {
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
subgraph path2 [Path]
|
subgraph path2 [Path]
|
||||||
2["Path<br>[463, 501, 0]"]
|
2["Path<br>[457, 495, 0]"]
|
||||||
3["Segment<br>[507, 538, 0]"]
|
3["Segment<br>[501, 532, 0]"]
|
||||||
4["Segment<br>[544, 576, 0]"]
|
4["Segment<br>[538, 570, 0]"]
|
||||||
5["Segment<br>[582, 632, 0]"]
|
5["Segment<br>[576, 626, 0]"]
|
||||||
6["Segment<br>[638, 684, 0]"]
|
6["Segment<br>[632, 678, 0]"]
|
||||||
7["Segment<br>[690, 712, 0]"]
|
7["Segment<br>[684, 706, 0]"]
|
||||||
end
|
end
|
||||||
1["Plane<br>[439, 457, 0]"]
|
1["Plane<br>[433, 451, 0]"]
|
||||||
8["Sweep Extrusion<br>[766, 794, 0]"]
|
8["Sweep Extrusion<br>[760, 788, 0]"]
|
||||||
1 --- 2
|
1 --- 2
|
||||||
2 --- 3
|
2 --- 3
|
||||||
2 --- 4
|
2 --- 4
|
||||||
|
|||||||
@ -18,40 +18,16 @@ description: Result of parsing i-beam.kcl
|
|||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
"init": {
|
"init": {
|
||||||
"arguments": [
|
|
||||||
{
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "6",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 6.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"callee": {
|
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": "fromFt",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Identifier"
|
|
||||||
},
|
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
|
||||||
"type": "Name"
|
|
||||||
},
|
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
|
"raw": "6ft",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "CallExpression",
|
"type": "Literal",
|
||||||
"type": "CallExpression"
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 6.0,
|
||||||
|
"suffix": "Ft"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "VariableDeclarator"
|
"type": "VariableDeclarator"
|
||||||
|
|||||||
@ -23,11 +23,11 @@ description: Operations executed i-beam.kcl
|
|||||||
"length": {
|
"length": {
|
||||||
"value": {
|
"value": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"value": 72.0,
|
"value": 6.0,
|
||||||
"ty": {
|
"ty": {
|
||||||
"type": "Known",
|
"type": "Known",
|
||||||
"type": "Length",
|
"type": "Length",
|
||||||
"type": "Inches"
|
"type": "Feet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sourceRange": []
|
"sourceRange": []
|
||||||
|
|||||||
@ -18,11 +18,11 @@ description: Variables in memory after executing i-beam.kcl
|
|||||||
},
|
},
|
||||||
"beamLength": {
|
"beamLength": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"value": 72.0,
|
"value": 6.0,
|
||||||
"ty": {
|
"ty": {
|
||||||
"type": "Known",
|
"type": "Known",
|
||||||
"type": "Length",
|
"type": "Length",
|
||||||
"type": "Inches"
|
"type": "Feet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flangeThickness": {
|
"flangeThickness": {
|
||||||
|
|||||||
@ -148,7 +148,7 @@ description: Artifact commands router-template-cross-bar.kcl
|
|||||||
"segment": {
|
"segment": {
|
||||||
"type": "line",
|
"type": "line",
|
||||||
"end": {
|
"end": {
|
||||||
"x": 22.6313,
|
"x": 22.6312,
|
||||||
"y": -10.0,
|
"y": -10.0,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
},
|
},
|
||||||
@ -182,7 +182,7 @@ description: Artifact commands router-template-cross-bar.kcl
|
|||||||
"segment": {
|
"segment": {
|
||||||
"type": "line",
|
"type": "line",
|
||||||
"end": {
|
"end": {
|
||||||
"x": 32.6313,
|
"x": 32.6312,
|
||||||
"y": 10.9406,
|
"y": 10.9406,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
},
|
},
|
||||||
@ -199,7 +199,7 @@ description: Artifact commands router-template-cross-bar.kcl
|
|||||||
"segment": {
|
"segment": {
|
||||||
"type": "line",
|
"type": "line",
|
||||||
"end": {
|
"end": {
|
||||||
"x": 102.6313,
|
"x": 102.6312,
|
||||||
"y": 10.9406,
|
"y": 10.9406,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
},
|
},
|
||||||
@ -233,7 +233,7 @@ description: Artifact commands router-template-cross-bar.kcl
|
|||||||
"segment": {
|
"segment": {
|
||||||
"type": "line",
|
"type": "line",
|
||||||
"end": {
|
"end": {
|
||||||
"x": 32.6313,
|
"x": 32.6312,
|
||||||
"y": 30.9406,
|
"y": 30.9406,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
},
|
},
|
||||||
@ -250,7 +250,7 @@ description: Artifact commands router-template-cross-bar.kcl
|
|||||||
"segment": {
|
"segment": {
|
||||||
"type": "line",
|
"type": "line",
|
||||||
"end": {
|
"end": {
|
||||||
"x": 32.6313,
|
"x": 32.6312,
|
||||||
"y": 41.8813,
|
"y": 41.8813,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
},
|
},
|
||||||
@ -284,7 +284,7 @@ description: Artifact commands router-template-cross-bar.kcl
|
|||||||
"segment": {
|
"segment": {
|
||||||
"type": "line",
|
"type": "line",
|
||||||
"end": {
|
"end": {
|
||||||
"x": -32.6313,
|
"x": -32.6312,
|
||||||
"y": 0.0,
|
"y": 0.0,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,59 +1,59 @@
|
|||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
subgraph path2 [Path]
|
subgraph path2 [Path]
|
||||||
2["Path<br>[538, 581, 0]"]
|
2["Path<br>[540, 583, 0]"]
|
||||||
3["Segment<br>[587, 640, 0]"]
|
3["Segment<br>[589, 642, 0]"]
|
||||||
4["Segment<br>[646, 757, 0]"]
|
4["Segment<br>[648, 759, 0]"]
|
||||||
5["Segment<br>[763, 816, 0]"]
|
5["Segment<br>[765, 818, 0]"]
|
||||||
6["Segment<br>[822, 869, 0]"]
|
6["Segment<br>[824, 871, 0]"]
|
||||||
7["Segment<br>[875, 971, 0]"]
|
7["Segment<br>[877, 973, 0]"]
|
||||||
8["Segment<br>[977, 1048, 0]"]
|
8["Segment<br>[979, 1050, 0]"]
|
||||||
9["Segment<br>[1054, 1105, 0]"]
|
9["Segment<br>[1056, 1107, 0]"]
|
||||||
10["Segment<br>[1111, 1164, 0]"]
|
10["Segment<br>[1113, 1166, 0]"]
|
||||||
11["Segment<br>[1170, 1239, 0]"]
|
11["Segment<br>[1172, 1241, 0]"]
|
||||||
12["Segment<br>[1245, 1281, 0]"]
|
12["Segment<br>[1247, 1283, 0]"]
|
||||||
13["Segment<br>[1287, 1317, 0]"]
|
13["Segment<br>[1289, 1319, 0]"]
|
||||||
14["Segment<br>[1323, 1353, 0]"]
|
14["Segment<br>[1325, 1355, 0]"]
|
||||||
15["Segment<br>[1359, 1389, 0]"]
|
15["Segment<br>[1361, 1391, 0]"]
|
||||||
16["Segment<br>[1395, 1425, 0]"]
|
16["Segment<br>[1397, 1427, 0]"]
|
||||||
17["Segment<br>[1431, 1460, 0]"]
|
17["Segment<br>[1433, 1462, 0]"]
|
||||||
18["Segment<br>[1466, 1496, 0]"]
|
18["Segment<br>[1468, 1498, 0]"]
|
||||||
19["Segment<br>[1502, 1531, 0]"]
|
19["Segment<br>[1504, 1533, 0]"]
|
||||||
20["Segment<br>[1537, 1566, 0]"]
|
20["Segment<br>[1539, 1568, 0]"]
|
||||||
21["Segment<br>[1572, 1635, 0]"]
|
21["Segment<br>[1574, 1637, 0]"]
|
||||||
22["Segment<br>[1641, 1697, 0]"]
|
22["Segment<br>[1643, 1699, 0]"]
|
||||||
23["Segment<br>[1703, 1710, 0]"]
|
23["Segment<br>[1705, 1712, 0]"]
|
||||||
24[Solid2d]
|
24[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path85 [Path]
|
subgraph path85 [Path]
|
||||||
85["Path<br>[1870, 1914, 0]"]
|
85["Path<br>[1872, 1916, 0]"]
|
||||||
86["Segment<br>[1920, 2000, 0]"]
|
86["Segment<br>[1922, 2002, 0]"]
|
||||||
87["Segment<br>[2006, 2116, 0]"]
|
87["Segment<br>[2008, 2118, 0]"]
|
||||||
88["Segment<br>[2122, 2239, 0]"]
|
88["Segment<br>[2124, 2241, 0]"]
|
||||||
89["Segment<br>[2245, 2301, 0]"]
|
89["Segment<br>[2247, 2303, 0]"]
|
||||||
90["Segment<br>[2307, 2314, 0]"]
|
90["Segment<br>[2309, 2316, 0]"]
|
||||||
91[Solid2d]
|
91[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path107 [Path]
|
subgraph path107 [Path]
|
||||||
107["Path<br>[2475, 2520, 0]"]
|
107["Path<br>[2477, 2522, 0]"]
|
||||||
108["Segment<br>[2526, 2604, 0]"]
|
108["Segment<br>[2528, 2606, 0]"]
|
||||||
109["Segment<br>[2610, 2720, 0]"]
|
109["Segment<br>[2612, 2722, 0]"]
|
||||||
110["Segment<br>[2726, 2843, 0]"]
|
110["Segment<br>[2728, 2845, 0]"]
|
||||||
111["Segment<br>[2849, 2905, 0]"]
|
111["Segment<br>[2851, 2907, 0]"]
|
||||||
112["Segment<br>[2911, 2918, 0]"]
|
112["Segment<br>[2913, 2920, 0]"]
|
||||||
113[Solid2d]
|
113[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path129 [Path]
|
subgraph path129 [Path]
|
||||||
129["Path<br>[3077, 3122, 0]"]
|
129["Path<br>[3079, 3124, 0]"]
|
||||||
130["Segment<br>[3128, 3213, 0]"]
|
130["Segment<br>[3130, 3215, 0]"]
|
||||||
131["Segment<br>[3219, 3329, 0]"]
|
131["Segment<br>[3221, 3331, 0]"]
|
||||||
132["Segment<br>[3335, 3452, 0]"]
|
132["Segment<br>[3337, 3454, 0]"]
|
||||||
133["Segment<br>[3458, 3514, 0]"]
|
133["Segment<br>[3460, 3516, 0]"]
|
||||||
134["Segment<br>[3520, 3527, 0]"]
|
134["Segment<br>[3522, 3529, 0]"]
|
||||||
135[Solid2d]
|
135[Solid2d]
|
||||||
end
|
end
|
||||||
1["Plane<br>[515, 532, 0]"]
|
1["Plane<br>[517, 534, 0]"]
|
||||||
25["Sweep Extrusion<br>[1753, 1783, 0]"]
|
25["Sweep Extrusion<br>[1755, 1785, 0]"]
|
||||||
26[Wall]
|
26[Wall]
|
||||||
27[Wall]
|
27[Wall]
|
||||||
28[Wall]
|
28[Wall]
|
||||||
@ -113,7 +113,7 @@ flowchart LR
|
|||||||
82["SweepEdge Adjacent"]
|
82["SweepEdge Adjacent"]
|
||||||
83["SweepEdge Opposite"]
|
83["SweepEdge Opposite"]
|
||||||
84["SweepEdge Adjacent"]
|
84["SweepEdge Adjacent"]
|
||||||
92["Sweep Extrusion<br>[2358, 2389, 0]"]
|
92["Sweep Extrusion<br>[2360, 2391, 0]"]
|
||||||
93[Wall]
|
93[Wall]
|
||||||
94[Wall]
|
94[Wall]
|
||||||
95[Wall]
|
95[Wall]
|
||||||
@ -128,7 +128,7 @@ flowchart LR
|
|||||||
104["SweepEdge Adjacent"]
|
104["SweepEdge Adjacent"]
|
||||||
105["SweepEdge Opposite"]
|
105["SweepEdge Opposite"]
|
||||||
106["SweepEdge Adjacent"]
|
106["SweepEdge Adjacent"]
|
||||||
114["Sweep Extrusion<br>[2961, 2992, 0]"]
|
114["Sweep Extrusion<br>[2963, 2994, 0]"]
|
||||||
115[Wall]
|
115[Wall]
|
||||||
116[Wall]
|
116[Wall]
|
||||||
117[Wall]
|
117[Wall]
|
||||||
@ -143,7 +143,7 @@ flowchart LR
|
|||||||
126["SweepEdge Adjacent"]
|
126["SweepEdge Adjacent"]
|
||||||
127["SweepEdge Opposite"]
|
127["SweepEdge Opposite"]
|
||||||
128["SweepEdge Adjacent"]
|
128["SweepEdge Adjacent"]
|
||||||
136["Sweep Extrusion<br>[3571, 3601, 0]"]
|
136["Sweep Extrusion<br>[3573, 3603, 0]"]
|
||||||
137[Wall]
|
137[Wall]
|
||||||
138[Wall]
|
138[Wall]
|
||||||
139[Wall]
|
139[Wall]
|
||||||
@ -158,9 +158,9 @@ flowchart LR
|
|||||||
148["SweepEdge Adjacent"]
|
148["SweepEdge Adjacent"]
|
||||||
149["SweepEdge Opposite"]
|
149["SweepEdge Opposite"]
|
||||||
150["SweepEdge Adjacent"]
|
150["SweepEdge Adjacent"]
|
||||||
151["StartSketchOnFace<br>[1825, 1864, 0]"]
|
151["StartSketchOnFace<br>[1827, 1866, 0]"]
|
||||||
152["StartSketchOnFace<br>[2430, 2469, 0]"]
|
152["StartSketchOnFace<br>[2432, 2471, 0]"]
|
||||||
153["StartSketchOnFace<br>[3034, 3071, 0]"]
|
153["StartSketchOnFace<br>[3036, 3073, 0]"]
|
||||||
1 --- 2
|
1 --- 2
|
||||||
2 --- 3
|
2 --- 3
|
||||||
2 --- 4
|
2 --- 4
|
||||||
|
|||||||
@ -54,60 +54,51 @@ description: Result of parsing router-template-cross-bar.kcl
|
|||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
"init": {
|
"init": {
|
||||||
"arguments": [
|
|
||||||
{
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"left": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "11",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 11.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"operator": "/",
|
|
||||||
"right": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "16",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 16.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"start": 0,
|
|
||||||
"type": "BinaryExpression",
|
|
||||||
"type": "BinaryExpression"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"callee": {
|
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": "fromInches",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Identifier"
|
|
||||||
},
|
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
|
||||||
"type": "Name"
|
|
||||||
},
|
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
|
"expr": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"left": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"raw": "11",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 11.0,
|
||||||
|
"suffix": "None"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"operator": "/",
|
||||||
|
"right": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"raw": "16",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 16.0,
|
||||||
|
"suffix": "None"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"start": 0,
|
||||||
|
"type": "BinaryExpression",
|
||||||
|
"type": "BinaryExpression"
|
||||||
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "CallExpression",
|
"ty": {
|
||||||
"type": "CallExpression"
|
"Inch": null,
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"p_type": "Number",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Primitive"
|
||||||
|
},
|
||||||
|
"type": "AscribedExpression",
|
||||||
|
"type": "AscribedExpression"
|
||||||
},
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "VariableDeclarator"
|
"type": "VariableDeclarator"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -85,7 +85,7 @@ description: Artifact commands router-template-slate.kcl
|
|||||||
"path": "[uuid]",
|
"path": "[uuid]",
|
||||||
"to": {
|
"to": {
|
||||||
"x": 0.0,
|
"x": 0.0,
|
||||||
"y": 28.11875,
|
"y": 28.118750000000002,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -149,7 +149,7 @@ description: Artifact commands router-template-slate.kcl
|
|||||||
"type": "line",
|
"type": "line",
|
||||||
"end": {
|
"end": {
|
||||||
"x": 18.8688,
|
"x": 18.8688,
|
||||||
"y": -12.4937,
|
"y": -12.4938,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
},
|
},
|
||||||
"relative": false
|
"relative": false
|
||||||
@ -166,7 +166,7 @@ description: Artifact commands router-template-slate.kcl
|
|||||||
"type": "line",
|
"type": "line",
|
||||||
"end": {
|
"end": {
|
||||||
"x": 30.75,
|
"x": 30.75,
|
||||||
"y": -12.4937,
|
"y": -12.4938,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
},
|
},
|
||||||
"relative": false
|
"relative": false
|
||||||
@ -920,7 +920,7 @@ description: Artifact commands router-template-slate.kcl
|
|||||||
"path": "[uuid]",
|
"path": "[uuid]",
|
||||||
"to": {
|
"to": {
|
||||||
"x": -20.75,
|
"x": -20.75,
|
||||||
"y": -12.493749999999999,
|
"y": -12.49375,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -993,7 +993,7 @@ description: Artifact commands router-template-slate.kcl
|
|||||||
"type": "line",
|
"type": "line",
|
||||||
"end": {
|
"end": {
|
||||||
"x": -20.75,
|
"x": -20.75,
|
||||||
"y": -12.4937,
|
"y": -12.4938,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
},
|
},
|
||||||
"relative": false
|
"relative": false
|
||||||
@ -1270,7 +1270,7 @@ description: Artifact commands router-template-slate.kcl
|
|||||||
"path": "[uuid]",
|
"path": "[uuid]",
|
||||||
"to": {
|
"to": {
|
||||||
"x": 20.75,
|
"x": 20.75,
|
||||||
"y": -12.493749999999999,
|
"y": -12.49375,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1343,7 +1343,7 @@ description: Artifact commands router-template-slate.kcl
|
|||||||
"type": "line",
|
"type": "line",
|
||||||
"end": {
|
"end": {
|
||||||
"x": 20.75,
|
"x": 20.75,
|
||||||
"y": -12.4937,
|
"y": -12.4938,
|
||||||
"z": 0.0
|
"z": 0.0
|
||||||
},
|
},
|
||||||
"relative": false
|
"relative": false
|
||||||
|
|||||||
@ -1,42 +1,42 @@
|
|||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
subgraph path2 [Path]
|
subgraph path2 [Path]
|
||||||
2["Path<br>[537, 580, 0]"]
|
2["Path<br>[539, 582, 0]"]
|
||||||
3["Segment<br>[586, 625, 0]"]
|
3["Segment<br>[588, 627, 0]"]
|
||||||
4["Segment<br>[631, 696, 0]"]
|
4["Segment<br>[633, 698, 0]"]
|
||||||
5["Segment<br>[702, 778, 0]"]
|
5["Segment<br>[704, 780, 0]"]
|
||||||
6["Segment<br>[784, 853, 0]"]
|
6["Segment<br>[786, 855, 0]"]
|
||||||
7["Segment<br>[859, 899, 0]"]
|
7["Segment<br>[861, 901, 0]"]
|
||||||
8["Segment<br>[905, 941, 0]"]
|
8["Segment<br>[907, 943, 0]"]
|
||||||
9["Segment<br>[981, 1011, 0]"]
|
9["Segment<br>[983, 1013, 0]"]
|
||||||
10["Segment<br>[1017, 1046, 0]"]
|
10["Segment<br>[1019, 1048, 0]"]
|
||||||
11["Segment<br>[1052, 1081, 0]"]
|
11["Segment<br>[1054, 1083, 0]"]
|
||||||
12["Segment<br>[1087, 1116, 0]"]
|
12["Segment<br>[1089, 1118, 0]"]
|
||||||
13["Segment<br>[1122, 1189, 0]"]
|
13["Segment<br>[1124, 1191, 0]"]
|
||||||
14["Segment<br>[1195, 1251, 0]"]
|
14["Segment<br>[1197, 1253, 0]"]
|
||||||
15["Segment<br>[1257, 1264, 0]"]
|
15["Segment<br>[1259, 1266, 0]"]
|
||||||
16[Solid2d]
|
16[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path52 [Path]
|
subgraph path52 [Path]
|
||||||
52["Path<br>[1424, 1524, 0]"]
|
52["Path<br>[1426, 1526, 0]"]
|
||||||
53["Segment<br>[1530, 1577, 0]"]
|
53["Segment<br>[1532, 1579, 0]"]
|
||||||
54["Segment<br>[1583, 1695, 0]"]
|
54["Segment<br>[1585, 1697, 0]"]
|
||||||
55["Segment<br>[1701, 1818, 0]"]
|
55["Segment<br>[1703, 1820, 0]"]
|
||||||
56["Segment<br>[1824, 1880, 0]"]
|
56["Segment<br>[1826, 1882, 0]"]
|
||||||
57["Segment<br>[1886, 1893, 0]"]
|
57["Segment<br>[1888, 1895, 0]"]
|
||||||
58[Solid2d]
|
58[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path74 [Path]
|
subgraph path74 [Path]
|
||||||
74["Path<br>[2055, 2154, 0]"]
|
74["Path<br>[2057, 2156, 0]"]
|
||||||
75["Segment<br>[2160, 2206, 0]"]
|
75["Segment<br>[2162, 2208, 0]"]
|
||||||
76["Segment<br>[2212, 2295, 0]"]
|
76["Segment<br>[2214, 2297, 0]"]
|
||||||
77["Segment<br>[2301, 2389, 0]"]
|
77["Segment<br>[2303, 2391, 0]"]
|
||||||
78["Segment<br>[2395, 2451, 0]"]
|
78["Segment<br>[2397, 2453, 0]"]
|
||||||
79["Segment<br>[2457, 2464, 0]"]
|
79["Segment<br>[2459, 2466, 0]"]
|
||||||
80[Solid2d]
|
80[Solid2d]
|
||||||
end
|
end
|
||||||
1["Plane<br>[514, 531, 0]"]
|
1["Plane<br>[516, 533, 0]"]
|
||||||
17["Sweep Extrusion<br>[1307, 1337, 0]"]
|
17["Sweep Extrusion<br>[1309, 1339, 0]"]
|
||||||
18[Wall]
|
18[Wall]
|
||||||
19[Wall]
|
19[Wall]
|
||||||
20[Wall]
|
20[Wall]
|
||||||
@ -71,7 +71,7 @@ flowchart LR
|
|||||||
49["SweepEdge Opposite"]
|
49["SweepEdge Opposite"]
|
||||||
50["SweepEdge Adjacent"]
|
50["SweepEdge Adjacent"]
|
||||||
51["SweepEdge Opposite"]
|
51["SweepEdge Opposite"]
|
||||||
59["Sweep Extrusion<br>[1937, 1969, 0]"]
|
59["Sweep Extrusion<br>[1939, 1971, 0]"]
|
||||||
60[Wall]
|
60[Wall]
|
||||||
61[Wall]
|
61[Wall]
|
||||||
62[Wall]
|
62[Wall]
|
||||||
@ -86,7 +86,7 @@ flowchart LR
|
|||||||
71["SweepEdge Adjacent"]
|
71["SweepEdge Adjacent"]
|
||||||
72["SweepEdge Opposite"]
|
72["SweepEdge Opposite"]
|
||||||
73["SweepEdge Adjacent"]
|
73["SweepEdge Adjacent"]
|
||||||
81["Sweep Extrusion<br>[2507, 2539, 0]"]
|
81["Sweep Extrusion<br>[2509, 2541, 0]"]
|
||||||
82[Wall]
|
82[Wall]
|
||||||
83[Wall]
|
83[Wall]
|
||||||
84[Wall]
|
84[Wall]
|
||||||
@ -101,8 +101,8 @@ flowchart LR
|
|||||||
93["SweepEdge Adjacent"]
|
93["SweepEdge Adjacent"]
|
||||||
94["SweepEdge Opposite"]
|
94["SweepEdge Opposite"]
|
||||||
95["SweepEdge Adjacent"]
|
95["SweepEdge Adjacent"]
|
||||||
96["StartSketchOnFace<br>[1379, 1418, 0]"]
|
96["StartSketchOnFace<br>[1381, 1420, 0]"]
|
||||||
97["StartSketchOnFace<br>[2010, 2049, 0]"]
|
97["StartSketchOnFace<br>[2012, 2051, 0]"]
|
||||||
1 --- 2
|
1 --- 2
|
||||||
2 --- 3
|
2 --- 3
|
||||||
2 --- 4
|
2 --- 4
|
||||||
|
|||||||
@ -54,60 +54,51 @@ description: Result of parsing router-template-slate.kcl
|
|||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
"init": {
|
"init": {
|
||||||
"arguments": [
|
|
||||||
{
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"left": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "11",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 11.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"operator": "/",
|
|
||||||
"right": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "16",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 16.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"start": 0,
|
|
||||||
"type": "BinaryExpression",
|
|
||||||
"type": "BinaryExpression"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"callee": {
|
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": "fromInches",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Identifier"
|
|
||||||
},
|
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
|
||||||
"type": "Name"
|
|
||||||
},
|
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
|
"expr": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"left": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"raw": "11",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 11.0,
|
||||||
|
"suffix": "None"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"operator": "/",
|
||||||
|
"right": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"raw": "16",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 16.0,
|
||||||
|
"suffix": "None"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"start": 0,
|
||||||
|
"type": "BinaryExpression",
|
||||||
|
"type": "BinaryExpression"
|
||||||
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "CallExpression",
|
"ty": {
|
||||||
"type": "CallExpression"
|
"Inch": null,
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"p_type": "Number",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Primitive"
|
||||||
|
},
|
||||||
|
"type": "AscribedExpression",
|
||||||
|
"type": "AscribedExpression"
|
||||||
},
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "VariableDeclarator"
|
"type": "VariableDeclarator"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,61 +1,61 @@
|
|||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
subgraph path2 [Path]
|
subgraph path2 [Path]
|
||||||
2["Path<br>[754, 790, 0]"]
|
2["Path<br>[747, 783, 0]"]
|
||||||
3["Segment<br>[944, 1008, 0]"]
|
3["Segment<br>[937, 1001, 0]"]
|
||||||
4["Segment<br>[944, 1008, 0]"]
|
4["Segment<br>[937, 1001, 0]"]
|
||||||
5["Segment<br>[944, 1008, 0]"]
|
5["Segment<br>[937, 1001, 0]"]
|
||||||
6["Segment<br>[944, 1008, 0]"]
|
6["Segment<br>[937, 1001, 0]"]
|
||||||
7["Segment<br>[944, 1008, 0]"]
|
7["Segment<br>[937, 1001, 0]"]
|
||||||
8["Segment<br>[944, 1008, 0]"]
|
8["Segment<br>[937, 1001, 0]"]
|
||||||
9["Segment<br>[944, 1008, 0]"]
|
9["Segment<br>[937, 1001, 0]"]
|
||||||
10["Segment<br>[944, 1008, 0]"]
|
10["Segment<br>[937, 1001, 0]"]
|
||||||
11["Segment<br>[944, 1008, 0]"]
|
11["Segment<br>[937, 1001, 0]"]
|
||||||
12["Segment<br>[944, 1008, 0]"]
|
12["Segment<br>[937, 1001, 0]"]
|
||||||
13["Segment<br>[944, 1008, 0]"]
|
13["Segment<br>[937, 1001, 0]"]
|
||||||
14["Segment<br>[944, 1008, 0]"]
|
14["Segment<br>[937, 1001, 0]"]
|
||||||
15["Segment<br>[944, 1008, 0]"]
|
15["Segment<br>[937, 1001, 0]"]
|
||||||
16["Segment<br>[944, 1008, 0]"]
|
16["Segment<br>[937, 1001, 0]"]
|
||||||
17["Segment<br>[944, 1008, 0]"]
|
17["Segment<br>[937, 1001, 0]"]
|
||||||
18["Segment<br>[944, 1008, 0]"]
|
18["Segment<br>[937, 1001, 0]"]
|
||||||
19["Segment<br>[944, 1008, 0]"]
|
19["Segment<br>[937, 1001, 0]"]
|
||||||
20["Segment<br>[944, 1008, 0]"]
|
20["Segment<br>[937, 1001, 0]"]
|
||||||
21["Segment<br>[944, 1008, 0]"]
|
21["Segment<br>[937, 1001, 0]"]
|
||||||
22["Segment<br>[944, 1008, 0]"]
|
22["Segment<br>[937, 1001, 0]"]
|
||||||
23["Segment<br>[944, 1008, 0]"]
|
23["Segment<br>[937, 1001, 0]"]
|
||||||
24["Segment<br>[944, 1008, 0]"]
|
24["Segment<br>[937, 1001, 0]"]
|
||||||
25["Segment<br>[944, 1008, 0]"]
|
25["Segment<br>[937, 1001, 0]"]
|
||||||
26["Segment<br>[944, 1008, 0]"]
|
26["Segment<br>[937, 1001, 0]"]
|
||||||
27["Segment<br>[944, 1008, 0]"]
|
27["Segment<br>[937, 1001, 0]"]
|
||||||
28["Segment<br>[944, 1008, 0]"]
|
28["Segment<br>[937, 1001, 0]"]
|
||||||
29["Segment<br>[944, 1008, 0]"]
|
29["Segment<br>[937, 1001, 0]"]
|
||||||
30["Segment<br>[944, 1008, 0]"]
|
30["Segment<br>[937, 1001, 0]"]
|
||||||
31["Segment<br>[944, 1008, 0]"]
|
31["Segment<br>[937, 1001, 0]"]
|
||||||
32["Segment<br>[944, 1008, 0]"]
|
32["Segment<br>[937, 1001, 0]"]
|
||||||
33["Segment<br>[944, 1008, 0]"]
|
33["Segment<br>[937, 1001, 0]"]
|
||||||
34["Segment<br>[944, 1008, 0]"]
|
34["Segment<br>[937, 1001, 0]"]
|
||||||
35["Segment<br>[944, 1008, 0]"]
|
35["Segment<br>[937, 1001, 0]"]
|
||||||
36["Segment<br>[944, 1008, 0]"]
|
36["Segment<br>[937, 1001, 0]"]
|
||||||
37["Segment<br>[944, 1008, 0]"]
|
37["Segment<br>[937, 1001, 0]"]
|
||||||
38["Segment<br>[944, 1008, 0]"]
|
38["Segment<br>[937, 1001, 0]"]
|
||||||
39["Segment<br>[944, 1008, 0]"]
|
39["Segment<br>[937, 1001, 0]"]
|
||||||
40["Segment<br>[944, 1008, 0]"]
|
40["Segment<br>[937, 1001, 0]"]
|
||||||
41["Segment<br>[944, 1008, 0]"]
|
41["Segment<br>[937, 1001, 0]"]
|
||||||
42["Segment<br>[944, 1008, 0]"]
|
42["Segment<br>[937, 1001, 0]"]
|
||||||
43["Segment<br>[944, 1008, 0]"]
|
43["Segment<br>[937, 1001, 0]"]
|
||||||
44["Segment<br>[944, 1008, 0]"]
|
44["Segment<br>[937, 1001, 0]"]
|
||||||
45["Segment<br>[944, 1008, 0]"]
|
45["Segment<br>[937, 1001, 0]"]
|
||||||
46["Segment<br>[944, 1008, 0]"]
|
46["Segment<br>[937, 1001, 0]"]
|
||||||
47["Segment<br>[944, 1008, 0]"]
|
47["Segment<br>[937, 1001, 0]"]
|
||||||
48["Segment<br>[944, 1008, 0]"]
|
48["Segment<br>[937, 1001, 0]"]
|
||||||
49["Segment<br>[944, 1008, 0]"]
|
49["Segment<br>[937, 1001, 0]"]
|
||||||
50["Segment<br>[944, 1008, 0]"]
|
50["Segment<br>[937, 1001, 0]"]
|
||||||
51["Segment<br>[944, 1008, 0]"]
|
51["Segment<br>[937, 1001, 0]"]
|
||||||
52["Segment<br>[1072, 1090, 0]"]
|
52["Segment<br>[1065, 1083, 0]"]
|
||||||
53[Solid2d]
|
53[Solid2d]
|
||||||
end
|
end
|
||||||
1["Plane<br>[731, 748, 0]"]
|
1["Plane<br>[724, 741, 0]"]
|
||||||
54["Sweep Extrusion<br>[1144, 1182, 0]"]
|
54["Sweep Extrusion<br>[1137, 1175, 0]"]
|
||||||
55[Wall]
|
55[Wall]
|
||||||
56[Wall]
|
56[Wall]
|
||||||
57[Wall]
|
57[Wall]
|
||||||
|
|||||||
@ -122,38 +122,53 @@ description: Result of parsing loop_tag.kcl
|
|||||||
"init": {
|
"init": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"left": {
|
"expr": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"raw": "360",
|
"left": {
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 360.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"operator": "/",
|
|
||||||
"right": {
|
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "numSides",
|
"raw": "360",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": {
|
||||||
|
"value": 360.0,
|
||||||
|
"suffix": "None"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"operator": "/",
|
||||||
|
"right": {
|
||||||
|
"abs_path": false,
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"name": {
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"name": "numSides",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Identifier"
|
||||||
|
},
|
||||||
|
"path": [],
|
||||||
|
"start": 0,
|
||||||
|
"type": "Name",
|
||||||
|
"type": "Name"
|
||||||
},
|
},
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Name",
|
"type": "BinaryExpression",
|
||||||
"type": "Name"
|
"type": "BinaryExpression"
|
||||||
},
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "BinaryExpression",
|
"ty": {
|
||||||
"type": "BinaryExpression"
|
"Deg": null,
|
||||||
|
"commentStart": 0,
|
||||||
|
"end": 0,
|
||||||
|
"p_type": "Number",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Primitive"
|
||||||
|
},
|
||||||
|
"type": "AscribedExpression",
|
||||||
|
"type": "AscribedExpression"
|
||||||
},
|
},
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "VariableDeclarator"
|
"type": "VariableDeclarator"
|
||||||
@ -275,64 +290,20 @@ description: Result of parsing loop_tag.kcl
|
|||||||
"right": {
|
"right": {
|
||||||
"arguments": [
|
"arguments": [
|
||||||
{
|
{
|
||||||
|
"abs_path": false,
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"left": {
|
"name": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"left": {
|
"name": "angle",
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": "angle",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Identifier"
|
|
||||||
},
|
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
|
||||||
"type": "Name",
|
|
||||||
"type": "Name"
|
|
||||||
},
|
|
||||||
"operator": "*",
|
|
||||||
"right": {
|
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": "PI",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Identifier"
|
|
||||||
},
|
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
|
||||||
"type": "Name",
|
|
||||||
"type": "Name"
|
|
||||||
},
|
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "BinaryExpression",
|
"type": "Identifier"
|
||||||
"type": "BinaryExpression"
|
|
||||||
},
|
|
||||||
"operator": "/",
|
|
||||||
"right": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "180",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 180.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
"path": [],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "BinaryExpression",
|
"type": "Name",
|
||||||
"type": "BinaryExpression"
|
"type": "Name"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"callee": {
|
"callee": {
|
||||||
@ -404,64 +375,20 @@ description: Result of parsing loop_tag.kcl
|
|||||||
"right": {
|
"right": {
|
||||||
"arguments": [
|
"arguments": [
|
||||||
{
|
{
|
||||||
|
"abs_path": false,
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"left": {
|
"name": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"left": {
|
"name": "angle",
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": "angle",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Identifier"
|
|
||||||
},
|
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
|
||||||
"type": "Name",
|
|
||||||
"type": "Name"
|
|
||||||
},
|
|
||||||
"operator": "*",
|
|
||||||
"right": {
|
|
||||||
"abs_path": false,
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"name": "PI",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Identifier"
|
|
||||||
},
|
|
||||||
"path": [],
|
|
||||||
"start": 0,
|
|
||||||
"type": "Name",
|
|
||||||
"type": "Name"
|
|
||||||
},
|
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "BinaryExpression",
|
"type": "Identifier"
|
||||||
"type": "BinaryExpression"
|
|
||||||
},
|
|
||||||
"operator": "/",
|
|
||||||
"right": {
|
|
||||||
"commentStart": 0,
|
|
||||||
"end": 0,
|
|
||||||
"raw": "180",
|
|
||||||
"start": 0,
|
|
||||||
"type": "Literal",
|
|
||||||
"type": "Literal",
|
|
||||||
"value": {
|
|
||||||
"value": 180.0,
|
|
||||||
"suffix": "None"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
"path": [],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "BinaryExpression",
|
"type": "Name",
|
||||||
"type": "BinaryExpression"
|
"type": "Name"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"callee": {
|
"callee": {
|
||||||
|
|||||||
@ -9,13 +9,13 @@
|
|||||||
radius = 10
|
radius = 10
|
||||||
height = 50
|
height = 50
|
||||||
numSides = 50
|
numSides = 50
|
||||||
angleIncrement = 360 / numSides
|
angleIncrement = (360 / numSides): number(deg)
|
||||||
|
|
||||||
// Function to calculate the coordinates of a point on the circle
|
// Function to calculate the coordinates of a point on the circle
|
||||||
fn calculatePoint(index) {
|
fn calculatePoint(index) {
|
||||||
angle = index * angleIncrement
|
angle = index * angleIncrement
|
||||||
x = radius * cos(angle * PI / 180)
|
x = radius * cos(angle)
|
||||||
y = radius * sin(angle * PI / 180)
|
y = radius * sin(angle)
|
||||||
return [x, y]
|
return [x, y]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -16,13 +16,13 @@ description: Result of unparsing loop_tag.kcl
|
|||||||
radius = 10
|
radius = 10
|
||||||
height = 50
|
height = 50
|
||||||
numSides = 50
|
numSides = 50
|
||||||
angleIncrement = 360 / numSides
|
angleIncrement = (360 / numSides): number(deg)
|
||||||
|
|
||||||
// Function to calculate the coordinates of a point on the circle
|
// Function to calculate the coordinates of a point on the circle
|
||||||
fn calculatePoint(index) {
|
fn calculatePoint(index) {
|
||||||
angle = index * angleIncrement
|
angle = index * angleIncrement
|
||||||
x = radius * cos(angle * PI / 180)
|
x = radius * cos(angle)
|
||||||
y = radius * sin(angle * PI / 180)
|
y = radius * sin(angle)
|
||||||
return [x, y]
|
return [x, y]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user