Move segment functions to KCL (#7333)
Signed-off-by: Nick Cameron <nrc@ncameron.org>
@ -8,7 +8,7 @@ layout: manual
 | 
			
		||||
Extract the 'x' axis value of the last line segment in the provided 2-d sketch.
 | 
			
		||||
 | 
			
		||||
```kcl
 | 
			
		||||
lastSegX(@sketch: Sketch): number
 | 
			
		||||
lastSegX(@sketch: Sketch): number(Length)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,11 @@ lastSegX(@sketch: Sketch): number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `sketch` | [`Sketch`](/docs/kcl-std/types/std-types-Sketch) | The sketch whose line segment is being queried | Yes |
 | 
			
		||||
| `sketch` | [`Sketch`](/docs/kcl-std/types/std-types-Sketch) | The sketch whose line segment is being queried. | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
[`number`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
[`number(Length)`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Examples
 | 
			
		||||
@ -8,7 +8,7 @@ layout: manual
 | 
			
		||||
Extract the 'y' axis value of the last line segment in the provided 2-d sketch.
 | 
			
		||||
 | 
			
		||||
```kcl
 | 
			
		||||
lastSegY(@sketch: Sketch): number
 | 
			
		||||
lastSegY(@sketch: Sketch): number(Length)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,11 @@ lastSegY(@sketch: Sketch): number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| `sketch` | [`Sketch`](/docs/kcl-std/types/std-types-Sketch) | The sketch whose line segment is being queried | Yes |
 | 
			
		||||
| `sketch` | [`Sketch`](/docs/kcl-std/types/std-types-Sketch) | The sketch whose line segment is being queried. | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
[`number`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
[`number(Length)`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Examples
 | 
			
		||||
@ -8,7 +8,7 @@ layout: manual
 | 
			
		||||
Compute the angle (in degrees) of the provided line segment.
 | 
			
		||||
 | 
			
		||||
```kcl
 | 
			
		||||
segAng(@tag: TagIdentifier): number
 | 
			
		||||
segAng(@tag: tag): number(Angle)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,11 @@ segAng(@tag: TagIdentifier): number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`TagIdentifier`](/docs/kcl-lang/types#TagIdentifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`tag`](/docs/kcl-std/types/std-types-tag) | The line segment being queried by its tag. | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
[`number`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
[`number(Angle)`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Examples
 | 
			
		||||
@ -8,7 +8,7 @@ layout: manual
 | 
			
		||||
Compute the ending point of the provided line segment.
 | 
			
		||||
 | 
			
		||||
```kcl
 | 
			
		||||
segEnd(@tag: TagIdentifier): Point2d
 | 
			
		||||
segEnd(@tag: tag): Point2d
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ segEnd(@tag: TagIdentifier): Point2d
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`TagIdentifier`](/docs/kcl-lang/types#TagIdentifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`tag`](/docs/kcl-std/types/std-types-tag) | The line segment being queried by its tag. | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ layout: manual
 | 
			
		||||
Compute the ending point of the provided line segment along the 'x' axis.
 | 
			
		||||
 | 
			
		||||
```kcl
 | 
			
		||||
segEndX(@tag: TagIdentifier): number
 | 
			
		||||
segEndX(@tag: tag): number(Length)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,11 @@ segEndX(@tag: TagIdentifier): number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`TagIdentifier`](/docs/kcl-lang/types#TagIdentifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`tag`](/docs/kcl-std/types/std-types-tag) | The line segment being queried by its tag. | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
[`number`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
[`number(Length)`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Examples
 | 
			
		||||
@ -8,7 +8,7 @@ layout: manual
 | 
			
		||||
Compute the ending point of the provided line segment along the 'y' axis.
 | 
			
		||||
 | 
			
		||||
```kcl
 | 
			
		||||
segEndY(@tag: TagIdentifier): number
 | 
			
		||||
segEndY(@tag: tag): number(Length)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,11 @@ segEndY(@tag: TagIdentifier): number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`TagIdentifier`](/docs/kcl-lang/types#TagIdentifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`tag`](/docs/kcl-std/types/std-types-tag) | The line segment being queried by its tag. | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
[`number`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
[`number(Length)`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Examples
 | 
			
		||||
@ -8,7 +8,7 @@ layout: manual
 | 
			
		||||
Compute the length of the provided line segment.
 | 
			
		||||
 | 
			
		||||
```kcl
 | 
			
		||||
segLen(@tag: TagIdentifier): number
 | 
			
		||||
segLen(@tag: tag): number(Length)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,11 @@ segLen(@tag: TagIdentifier): number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`TagIdentifier`](/docs/kcl-lang/types#TagIdentifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`tag`](/docs/kcl-std/types/std-types-tag) | The line segment being queried by its tag. | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
[`number`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
[`number(Length)`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Examples
 | 
			
		||||
@ -29,9 +29,16 @@ segLen(@tag: TagIdentifier): number
 | 
			
		||||
```kcl
 | 
			
		||||
exampleSketch = startSketchOn(XZ)
 | 
			
		||||
  |> startProfile(at = [0, 0])
 | 
			
		||||
  |> angledLine(angle = 60, length = 10, tag = $thing)
 | 
			
		||||
  |> angledLine(
 | 
			
		||||
    angle = 60,
 | 
			
		||||
    length = 10,
 | 
			
		||||
    tag = $thing,
 | 
			
		||||
  )
 | 
			
		||||
  |> tangentialArc(angle = -120, radius = 5)
 | 
			
		||||
  |> angledLine(angle = -60, length = segLen(thing))
 | 
			
		||||
  |> angledLine(
 | 
			
		||||
    angle = -60,
 | 
			
		||||
    length = segLen(thing),
 | 
			
		||||
  )
 | 
			
		||||
  |> close()
 | 
			
		||||
 | 
			
		||||
example = extrude(exampleSketch, length = 5)
 | 
			
		||||
@ -8,7 +8,7 @@ layout: manual
 | 
			
		||||
Compute the starting point of the provided line segment.
 | 
			
		||||
 | 
			
		||||
```kcl
 | 
			
		||||
segStart(@tag: TagIdentifier): Point2d
 | 
			
		||||
segStart(@tag: tag): Point2d
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ segStart(@tag: TagIdentifier): Point2d
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`TagIdentifier`](/docs/kcl-lang/types#TagIdentifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`tag`](/docs/kcl-std/types/std-types-tag) | The line segment being queried by its tag. | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ layout: manual
 | 
			
		||||
Compute the starting point of the provided line segment along the 'x' axis.
 | 
			
		||||
 | 
			
		||||
```kcl
 | 
			
		||||
segStartX(@tag: TagIdentifier): number
 | 
			
		||||
segStartX(@tag: tag): number(Length)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,11 @@ segStartX(@tag: TagIdentifier): number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`TagIdentifier`](/docs/kcl-lang/types#TagIdentifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`tag`](/docs/kcl-std/types/std-types-tag) | The line segment being queried by its tag. | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
[`number`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
[`number(Length)`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Examples
 | 
			
		||||
@ -8,7 +8,7 @@ layout: manual
 | 
			
		||||
Compute the starting point of the provided line segment along the 'y' axis.
 | 
			
		||||
 | 
			
		||||
```kcl
 | 
			
		||||
segStartY(@tag: TagIdentifier): number
 | 
			
		||||
segStartY(@tag: tag): number(Length)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,11 @@ segStartY(@tag: TagIdentifier): number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`TagIdentifier`](/docs/kcl-lang/types#TagIdentifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`tag`](/docs/kcl-std/types/std-types-tag) | The line segment being queried by its tag. | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
[`number`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
[`number(Length)`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Examples
 | 
			
		||||
@ -8,7 +8,7 @@ layout: manual
 | 
			
		||||
Returns the angle coming out of the end of the segment in degrees.
 | 
			
		||||
 | 
			
		||||
```kcl
 | 
			
		||||
tangentToEnd(@tag: TagIdentifier): number
 | 
			
		||||
tangentToEnd(@tag: tag): number(Angle)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,11 @@ tangentToEnd(@tag: TagIdentifier): number
 | 
			
		||||
 | 
			
		||||
| Name | Type | Description | Required |
 | 
			
		||||
|----------|------|-------------|----------|
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`TagIdentifier`](/docs/kcl-lang/types#TagIdentifier) | The line segment being queried by its tag | Yes |
 | 
			
		||||
| [`tag`](/docs/kcl-std/types/std-types-tag) | [`tag`](/docs/kcl-std/types/std-types-tag) | The line segment being queried by its tag. | Yes |
 | 
			
		||||
 | 
			
		||||
### Returns
 | 
			
		||||
 | 
			
		||||
[`number`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
[`number(Angle)`](/docs/kcl-std/types/std-types-number) - A number.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Examples
 | 
			
		||||
@ -32,7 +32,10 @@ pillSketch = startSketchOn(XZ)
 | 
			
		||||
  |> startProfile(at = [0, 0])
 | 
			
		||||
  |> line(end = [20, 0])
 | 
			
		||||
  |> tangentialArc(end = [0, 10], tag = $arc1)
 | 
			
		||||
  |> angledLine(angle = tangentToEnd(arc1), length = 20)
 | 
			
		||||
  |> angledLine(
 | 
			
		||||
    angle = tangentToEnd(arc1),
 | 
			
		||||
    length = 20,
 | 
			
		||||
  )
 | 
			
		||||
  |> tangentialArc(end = [0, -10])
 | 
			
		||||
  |> close()
 | 
			
		||||
 | 
			
		||||
@ -47,7 +50,10 @@ pillSketch = startSketchOn(XZ)
 | 
			
		||||
  |> startProfile(at = [0, 0])
 | 
			
		||||
  |> line(end = [0, 20])
 | 
			
		||||
  |> tangentialArc(endAbsolute = [10, 20], tag = $arc1)
 | 
			
		||||
  |> angledLine(angle = tangentToEnd(arc1), length = 20)
 | 
			
		||||
  |> angledLine(
 | 
			
		||||
    angle = tangentToEnd(arc1),
 | 
			
		||||
    length = 20,
 | 
			
		||||
  )
 | 
			
		||||
  |> tangentialArc(end = [-10, 0])
 | 
			
		||||
  |> close()
 | 
			
		||||
 | 
			
		||||
@ -60,7 +66,10 @@ pillExtrude = extrude(pillSketch, length = 10)
 | 
			
		||||
rectangleSketch = startSketchOn(XZ)
 | 
			
		||||
  |> startProfile(at = [0, 0])
 | 
			
		||||
  |> line(end = [10, 0], tag = $seg1)
 | 
			
		||||
  |> angledLine(angle = tangentToEnd(seg1), length = 10)
 | 
			
		||||
  |> angledLine(
 | 
			
		||||
    angle = tangentToEnd(seg1),
 | 
			
		||||
    length = 10,
 | 
			
		||||
  )
 | 
			
		||||
  |> line(end = [0, 10])
 | 
			
		||||
  |> line(end = [-20, 0])
 | 
			
		||||
  |> close()
 | 
			
		||||
@ -73,7 +82,11 @@ rectangleExtrude = extrude(rectangleSketch, length = 10)
 | 
			
		||||
```kcl
 | 
			
		||||
bottom = startSketchOn(XY)
 | 
			
		||||
  |> startProfile(at = [0, 0])
 | 
			
		||||
  |> arc(endAbsolute = [10, 10], interiorAbsolute = [5, 1], tag = $arc1)
 | 
			
		||||
  |> arc(
 | 
			
		||||
       endAbsolute = [10, 10],
 | 
			
		||||
       interiorAbsolute = [5, 1],
 | 
			
		||||
       tag = $arc1,
 | 
			
		||||
     )
 | 
			
		||||
  |> angledLine(angle = tangentToEnd(arc1), length = 20)
 | 
			
		||||
  |> close()
 | 
			
		||||
```
 | 
			
		||||
@ -60,8 +60,8 @@ layout: manual
 | 
			
		||||
  * [`getOppositeEdge`](/docs/kcl-std/functions/std-sketch-getOppositeEdge)
 | 
			
		||||
  * [`getPreviousAdjacentEdge`](/docs/kcl-std/functions/std-sketch-getPreviousAdjacentEdge)
 | 
			
		||||
  * [`involuteCircular`](/docs/kcl-std/involuteCircular)
 | 
			
		||||
  * [`lastSegX`](/docs/kcl-std/lastSegX)
 | 
			
		||||
  * [`lastSegY`](/docs/kcl-std/lastSegY)
 | 
			
		||||
  * [`lastSegX`](/docs/kcl-std/functions/std-sketch-lastSegX)
 | 
			
		||||
  * [`lastSegY`](/docs/kcl-std/functions/std-sketch-lastSegY)
 | 
			
		||||
  * [`line`](/docs/kcl-std/line)
 | 
			
		||||
  * [`loft`](/docs/kcl-std/functions/std-sketch-loft)
 | 
			
		||||
  * [`patternCircular2d`](/docs/kcl-std/functions/std-sketch-patternCircular2d)
 | 
			
		||||
@ -72,19 +72,19 @@ layout: manual
 | 
			
		||||
  * [`profileStartX`](/docs/kcl-std/profileStartX)
 | 
			
		||||
  * [`profileStartY`](/docs/kcl-std/profileStartY)
 | 
			
		||||
  * [`revolve`](/docs/kcl-std/functions/std-sketch-revolve)
 | 
			
		||||
  * [`segAng`](/docs/kcl-std/segAng)
 | 
			
		||||
  * [`segEnd`](/docs/kcl-std/segEnd)
 | 
			
		||||
  * [`segEndX`](/docs/kcl-std/segEndX)
 | 
			
		||||
  * [`segEndY`](/docs/kcl-std/segEndY)
 | 
			
		||||
  * [`segLen`](/docs/kcl-std/segLen)
 | 
			
		||||
  * [`segStart`](/docs/kcl-std/segStart)
 | 
			
		||||
  * [`segStartX`](/docs/kcl-std/segStartX)
 | 
			
		||||
  * [`segStartY`](/docs/kcl-std/segStartY)
 | 
			
		||||
  * [`segAng`](/docs/kcl-std/functions/std-sketch-segAng)
 | 
			
		||||
  * [`segEnd`](/docs/kcl-std/functions/std-sketch-segEnd)
 | 
			
		||||
  * [`segEndX`](/docs/kcl-std/functions/std-sketch-segEndX)
 | 
			
		||||
  * [`segEndY`](/docs/kcl-std/functions/std-sketch-segEndY)
 | 
			
		||||
  * [`segLen`](/docs/kcl-std/functions/std-sketch-segLen)
 | 
			
		||||
  * [`segStart`](/docs/kcl-std/functions/std-sketch-segStart)
 | 
			
		||||
  * [`segStartX`](/docs/kcl-std/functions/std-sketch-segStartX)
 | 
			
		||||
  * [`segStartY`](/docs/kcl-std/functions/std-sketch-segStartY)
 | 
			
		||||
  * [`startProfile`](/docs/kcl-std/startProfile)
 | 
			
		||||
  * [`startSketchOn`](/docs/kcl-std/startSketchOn)
 | 
			
		||||
  * [`subtract2d`](/docs/kcl-std/subtract2d)
 | 
			
		||||
  * [`sweep`](/docs/kcl-std/functions/std-sketch-sweep)
 | 
			
		||||
  * [`tangentToEnd`](/docs/kcl-std/tangentToEnd)
 | 
			
		||||
  * [`tangentToEnd`](/docs/kcl-std/functions/std-sketch-tangentToEnd)
 | 
			
		||||
  * [`tangentialArc`](/docs/kcl-std/tangentialArc)
 | 
			
		||||
  * [`xLine`](/docs/kcl-std/xLine)
 | 
			
		||||
  * [`yLine`](/docs/kcl-std/yLine)
 | 
			
		||||
 | 
			
		||||
@ -25,8 +25,8 @@ This module contains functions for creating and manipulating sketches, and makin
 | 
			
		||||
* [`getOppositeEdge`](/docs/kcl-std/functions/std-sketch-getOppositeEdge)
 | 
			
		||||
* [`getPreviousAdjacentEdge`](/docs/kcl-std/functions/std-sketch-getPreviousAdjacentEdge)
 | 
			
		||||
* [`involuteCircular`](/docs/kcl-std/involuteCircular)
 | 
			
		||||
* [`lastSegX`](/docs/kcl-std/lastSegX)
 | 
			
		||||
* [`lastSegY`](/docs/kcl-std/lastSegY)
 | 
			
		||||
* [`lastSegX`](/docs/kcl-std/functions/std-sketch-lastSegX)
 | 
			
		||||
* [`lastSegY`](/docs/kcl-std/functions/std-sketch-lastSegY)
 | 
			
		||||
* [`line`](/docs/kcl-std/line)
 | 
			
		||||
* [`loft`](/docs/kcl-std/functions/std-sketch-loft)
 | 
			
		||||
* [`patternCircular2d`](/docs/kcl-std/functions/std-sketch-patternCircular2d)
 | 
			
		||||
@ -37,19 +37,19 @@ This module contains functions for creating and manipulating sketches, and makin
 | 
			
		||||
* [`profileStartX`](/docs/kcl-std/profileStartX)
 | 
			
		||||
* [`profileStartY`](/docs/kcl-std/profileStartY)
 | 
			
		||||
* [`revolve`](/docs/kcl-std/functions/std-sketch-revolve)
 | 
			
		||||
* [`segAng`](/docs/kcl-std/segAng)
 | 
			
		||||
* [`segEnd`](/docs/kcl-std/segEnd)
 | 
			
		||||
* [`segEndX`](/docs/kcl-std/segEndX)
 | 
			
		||||
* [`segEndY`](/docs/kcl-std/segEndY)
 | 
			
		||||
* [`segLen`](/docs/kcl-std/segLen)
 | 
			
		||||
* [`segStart`](/docs/kcl-std/segStart)
 | 
			
		||||
* [`segStartX`](/docs/kcl-std/segStartX)
 | 
			
		||||
* [`segStartY`](/docs/kcl-std/segStartY)
 | 
			
		||||
* [`segAng`](/docs/kcl-std/functions/std-sketch-segAng)
 | 
			
		||||
* [`segEnd`](/docs/kcl-std/functions/std-sketch-segEnd)
 | 
			
		||||
* [`segEndX`](/docs/kcl-std/functions/std-sketch-segEndX)
 | 
			
		||||
* [`segEndY`](/docs/kcl-std/functions/std-sketch-segEndY)
 | 
			
		||||
* [`segLen`](/docs/kcl-std/functions/std-sketch-segLen)
 | 
			
		||||
* [`segStart`](/docs/kcl-std/functions/std-sketch-segStart)
 | 
			
		||||
* [`segStartX`](/docs/kcl-std/functions/std-sketch-segStartX)
 | 
			
		||||
* [`segStartY`](/docs/kcl-std/functions/std-sketch-segStartY)
 | 
			
		||||
* [`startProfile`](/docs/kcl-std/startProfile)
 | 
			
		||||
* [`startSketchOn`](/docs/kcl-std/startSketchOn)
 | 
			
		||||
* [`subtract2d`](/docs/kcl-std/subtract2d)
 | 
			
		||||
* [`sweep`](/docs/kcl-std/functions/std-sketch-sweep)
 | 
			
		||||
* [`tangentToEnd`](/docs/kcl-std/tangentToEnd)
 | 
			
		||||
* [`tangentToEnd`](/docs/kcl-std/functions/std-sketch-tangentToEnd)
 | 
			
		||||
* [`tangentialArc`](/docs/kcl-std/tangentialArc)
 | 
			
		||||
* [`xLine`](/docs/kcl-std/xLine)
 | 
			
		||||
* [`yLine`](/docs/kcl-std/yLine)
 | 
			
		||||
 | 
			
		||||
@ -134,6 +134,21 @@ pub const TEST_NAMES: &[&str] = &[
 | 
			
		||||
    "std-sketch-patternLinear2d-1",
 | 
			
		||||
    "std-sketch-patternCircular2d-0",
 | 
			
		||||
    "std-sketch-circleThreePoint-0",
 | 
			
		||||
    "std-sketch-segStart-0",
 | 
			
		||||
    "std-sketch-segStartX-0",
 | 
			
		||||
    "std-sketch-segStartY-0",
 | 
			
		||||
    "std-sketch-segEnd-0",
 | 
			
		||||
    "std-sketch-segEndX-0",
 | 
			
		||||
    "std-sketch-segEndY-0",
 | 
			
		||||
    "std-sketch-lastSegX-0",
 | 
			
		||||
    "std-sketch-lastSegY-0",
 | 
			
		||||
    "std-sketch-segAng-0",
 | 
			
		||||
    "std-sketch-segLen-0",
 | 
			
		||||
    "std-sketch-tangentToEnd-0",
 | 
			
		||||
    "std-sketch-tangentToEnd-1",
 | 
			
		||||
    "std-sketch-tangentToEnd-2",
 | 
			
		||||
    "std-sketch-tangentToEnd-3",
 | 
			
		||||
    "std-sketch-tangentToEnd-4",
 | 
			
		||||
    "std-solid-appearance-0",
 | 
			
		||||
    "std-solid-appearance-1",
 | 
			
		||||
    "std-solid-appearance-2",
 | 
			
		||||
 | 
			
		||||
@ -45,17 +45,6 @@ pub type StdFn = fn(
 | 
			
		||||
 | 
			
		||||
lazy_static! {
 | 
			
		||||
    static ref CORE_FNS: Vec<Box<dyn StdLibFn>> = vec![
 | 
			
		||||
        Box::new(crate::std::segment::SegEnd),
 | 
			
		||||
        Box::new(crate::std::segment::SegEndX),
 | 
			
		||||
        Box::new(crate::std::segment::SegEndY),
 | 
			
		||||
        Box::new(crate::std::segment::SegStart),
 | 
			
		||||
        Box::new(crate::std::segment::SegStartX),
 | 
			
		||||
        Box::new(crate::std::segment::SegStartY),
 | 
			
		||||
        Box::new(crate::std::segment::LastSegX),
 | 
			
		||||
        Box::new(crate::std::segment::LastSegY),
 | 
			
		||||
        Box::new(crate::std::segment::SegLen),
 | 
			
		||||
        Box::new(crate::std::segment::SegAng),
 | 
			
		||||
        Box::new(crate::std::segment::TangentToEnd),
 | 
			
		||||
        Box::new(crate::std::sketch::InvoluteCircular),
 | 
			
		||||
        Box::new(crate::std::sketch::Line),
 | 
			
		||||
        Box::new(crate::std::sketch::XLine),
 | 
			
		||||
@ -352,6 +341,50 @@ pub(crate) fn std_fn(path: &str, fn_name: &str) -> (crate::std::StdFn, StdFnProp
 | 
			
		||||
            |e, a| Box::pin(crate::std::patterns::pattern_circular_2d(e, a)),
 | 
			
		||||
            StdFnProps::default("std::sketch::patternCircular2d"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("sketch", "segEnd") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::segment::segment_end(e, a)),
 | 
			
		||||
            StdFnProps::default("std::sketch::segEnd"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("sketch", "segEndX") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::segment::segment_end_x(e, a)),
 | 
			
		||||
            StdFnProps::default("std::sketch::segEndX"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("sketch", "segEndY") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::segment::segment_end_y(e, a)),
 | 
			
		||||
            StdFnProps::default("std::sketch::segEndY"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("sketch", "segStart") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::segment::segment_start(e, a)),
 | 
			
		||||
            StdFnProps::default("std::sketch::segStart"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("sketch", "segStartX") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::segment::segment_start_x(e, a)),
 | 
			
		||||
            StdFnProps::default("std::sketch::segStartX"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("sketch", "segStartY") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::segment::segment_start_y(e, a)),
 | 
			
		||||
            StdFnProps::default("std::sketch::segStartY"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("sketch", "lastSegX") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::segment::last_segment_x(e, a)),
 | 
			
		||||
            StdFnProps::default("std::sketch::lastSegX"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("sketch", "lastSegY") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::segment::last_segment_y(e, a)),
 | 
			
		||||
            StdFnProps::default("std::sketch::lastSegY"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("sketch", "segLen") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::segment::segment_length(e, a)),
 | 
			
		||||
            StdFnProps::default("std::sketch::segLen"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("sketch", "segAng") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::segment::segment_angle(e, a)),
 | 
			
		||||
            StdFnProps::default("std::sketch::segAng"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("sketch", "tangentToEnd") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::segment::tangent_to_end(e, a)),
 | 
			
		||||
            StdFnProps::default("std::sketch::tangentToEnd"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("appearance", "hexString") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::appearance::hex_string(e, a)),
 | 
			
		||||
            StdFnProps::default("std::appearance::hexString"),
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,6 @@
 | 
			
		||||
//! Functions related to line segments.
 | 
			
		||||
 | 
			
		||||
use anyhow::Result;
 | 
			
		||||
use kcl_derive_docs::stdlib;
 | 
			
		||||
use kittycad_modeling_cmds::shared::Angle;
 | 
			
		||||
 | 
			
		||||
use super::utils::untype_point;
 | 
			
		||||
@ -22,39 +21,6 @@ pub async fn segment_end(exec_state: &mut ExecState, args: Args) -> Result<KclVa
 | 
			
		||||
    args.make_kcl_val_from_point([pt[0].n, pt[1].n], pt[0].ty.clone())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Compute the ending point of the provided line segment.
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// w = 15
 | 
			
		||||
/// cube = startSketchOn(XY)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [w, 0], tag = $line1)
 | 
			
		||||
///   |> line(end = [0, w], tag = $line2)
 | 
			
		||||
///   |> line(end = [-w, 0], tag = $line3)
 | 
			
		||||
///   |> line(end = [0, -w], tag = $line4)
 | 
			
		||||
///   |> close()
 | 
			
		||||
///   |> extrude(length = 5)
 | 
			
		||||
///
 | 
			
		||||
/// fn cylinder(radius, tag) {
 | 
			
		||||
///   return startSketchOn(XY)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> circle(radius = radius, center = segEnd(tag) )
 | 
			
		||||
///   |> extrude(length = radius)
 | 
			
		||||
/// }
 | 
			
		||||
///
 | 
			
		||||
/// cylinder(radius = 1, tag = line1)
 | 
			
		||||
/// cylinder(radius = 2, tag = line2)
 | 
			
		||||
/// cylinder(radius = 3, tag = line3)
 | 
			
		||||
/// cylinder(radius = 4, tag = line4)
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segEnd",
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    },
 | 
			
		||||
    tags = ["sketch"]
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_end(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<[TyF64; 2], KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
    let path = line.path.clone().ok_or_else(|| {
 | 
			
		||||
@ -78,27 +44,6 @@ pub async fn segment_end_x(exec_state: &mut ExecState, args: Args) -> Result<Kcl
 | 
			
		||||
    Ok(args.make_user_val_from_f64_with_type(result))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Compute the ending point of the provided line segment along the 'x' axis.
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [20, 0], tag = $thing)
 | 
			
		||||
///   |> line(end = [0, 5])
 | 
			
		||||
///   |> line(end = [segEndX(thing), 0])
 | 
			
		||||
///   |> line(end = [-20, 10])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///  
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segEndX",
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    },
 | 
			
		||||
    tags = ["sketch"]
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_end_x(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<TyF64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
    let path = line.path.clone().ok_or_else(|| {
 | 
			
		||||
@ -119,28 +64,6 @@ pub async fn segment_end_y(exec_state: &mut ExecState, args: Args) -> Result<Kcl
 | 
			
		||||
    Ok(args.make_user_val_from_f64_with_type(result))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Compute the ending point of the provided line segment along the 'y' axis.
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [20, 0])
 | 
			
		||||
///   |> line(end = [0, 3], tag = $thing)
 | 
			
		||||
///   |> line(end = [-10, 0])
 | 
			
		||||
///   |> line(end = [0, segEndY(thing)])
 | 
			
		||||
///   |> line(end = [-10, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///  
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segEndY",
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    },
 | 
			
		||||
    tags = ["sketch"]
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_end_y(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<TyF64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
    let path = line.path.clone().ok_or_else(|| {
 | 
			
		||||
@ -161,39 +84,6 @@ pub async fn segment_start(exec_state: &mut ExecState, args: Args) -> Result<Kcl
 | 
			
		||||
    args.make_kcl_val_from_point([pt[0].n, pt[1].n], pt[0].ty.clone())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Compute the starting point of the provided line segment.
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// w = 15
 | 
			
		||||
/// cube = startSketchOn(XY)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [w, 0], tag = $line1)
 | 
			
		||||
///   |> line(end = [0, w], tag = $line2)
 | 
			
		||||
///   |> line(end = [-w, 0], tag = $line3)
 | 
			
		||||
///   |> line(end = [0, -w], tag = $line4)
 | 
			
		||||
///   |> close()
 | 
			
		||||
///   |> extrude(length = 5)
 | 
			
		||||
///
 | 
			
		||||
/// fn cylinder(radius, tag) {
 | 
			
		||||
///   return startSketchOn(XY)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> circle( radius = radius, center = segStart(tag) )
 | 
			
		||||
///   |> extrude(length = radius)
 | 
			
		||||
/// }
 | 
			
		||||
///
 | 
			
		||||
/// cylinder(radius = 1, tag = line1)
 | 
			
		||||
/// cylinder(radius = 2, tag = line2)
 | 
			
		||||
/// cylinder(radius = 3, tag = line3)
 | 
			
		||||
/// cylinder(radius = 4, tag = line4)
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segStart",
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    },
 | 
			
		||||
    tags = ["sketch"]
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_start(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<[TyF64; 2], KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
    let path = line.path.clone().ok_or_else(|| {
 | 
			
		||||
@ -217,27 +107,6 @@ pub async fn segment_start_x(exec_state: &mut ExecState, args: Args) -> Result<K
 | 
			
		||||
    Ok(args.make_user_val_from_f64_with_type(result))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Compute the starting point of the provided line segment along the 'x' axis.
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [20, 0], tag = $thing)
 | 
			
		||||
///   |> line(end = [0, 5])
 | 
			
		||||
///   |> line(end = [20 - segStartX(thing), 0])
 | 
			
		||||
///   |> line(end = [-20, 10])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///  
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segStartX",
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    },
 | 
			
		||||
    tags = ["sketch"]
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_start_x(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<TyF64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
    let path = line.path.clone().ok_or_else(|| {
 | 
			
		||||
@ -258,28 +127,6 @@ pub async fn segment_start_y(exec_state: &mut ExecState, args: Args) -> Result<K
 | 
			
		||||
    Ok(args.make_user_val_from_f64_with_type(result))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Compute the starting point of the provided line segment along the 'y' axis.
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [20, 0])
 | 
			
		||||
///   |> line(end = [0, 3], tag = $thing)
 | 
			
		||||
///   |> line(end = [-10, 0])
 | 
			
		||||
///   |> line(end = [0, 20-segStartY(thing)])
 | 
			
		||||
///   |> line(end = [-10, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///  
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segStartY",
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    },
 | 
			
		||||
    tags = ["sketch"]
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_start_y(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<TyF64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
    let path = line.path.clone().ok_or_else(|| {
 | 
			
		||||
@ -300,28 +147,6 @@ pub async fn last_segment_x(exec_state: &mut ExecState, args: Args) -> Result<Kc
 | 
			
		||||
    Ok(args.make_user_val_from_f64_with_type(result))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Extract the 'x' axis value of the last line segment in the provided 2-d
 | 
			
		||||
/// sketch.
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [5, 0])
 | 
			
		||||
///   |> line(end = [20, 5])
 | 
			
		||||
///   |> line(end = [lastSegX(%), 0])
 | 
			
		||||
///   |> line(end = [-15, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "lastSegX",
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        sketch = { docs = "The sketch whose line segment is being queried"},
 | 
			
		||||
    },
 | 
			
		||||
    tags = ["sketch"]
 | 
			
		||||
}]
 | 
			
		||||
fn inner_last_segment_x(sketch: Sketch, args: Args) -> Result<TyF64, KclError> {
 | 
			
		||||
    let last_line = sketch
 | 
			
		||||
        .paths
 | 
			
		||||
@ -346,28 +171,6 @@ pub async fn last_segment_y(exec_state: &mut ExecState, args: Args) -> Result<Kc
 | 
			
		||||
    Ok(args.make_user_val_from_f64_with_type(result))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Extract the 'y' axis value of the last line segment in the provided 2-d
 | 
			
		||||
/// sketch.
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [5, 0])
 | 
			
		||||
///   |> line(end = [20, 5])
 | 
			
		||||
///   |> line(end = [0, lastSegY(%)])
 | 
			
		||||
///   |> line(end = [-15, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "lastSegY",
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        sketch = { docs = "The sketch whose line segment is being queried"},
 | 
			
		||||
    },
 | 
			
		||||
    tags = ["sketch"]
 | 
			
		||||
}]
 | 
			
		||||
fn inner_last_segment_y(sketch: Sketch, args: Args) -> Result<TyF64, KclError> {
 | 
			
		||||
    let last_line = sketch
 | 
			
		||||
        .paths
 | 
			
		||||
@ -390,33 +193,6 @@ pub async fn segment_length(exec_state: &mut ExecState, args: Args) -> Result<Kc
 | 
			
		||||
    Ok(args.make_user_val_from_f64_with_type(result))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Compute the length of the provided line segment.
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> angledLine(
 | 
			
		||||
///     angle = 60,
 | 
			
		||||
///     length = 10,
 | 
			
		||||
///     tag = $thing,
 | 
			
		||||
///   )
 | 
			
		||||
///   |> tangentialArc(angle = -120, radius = 5)
 | 
			
		||||
///   |> angledLine(
 | 
			
		||||
///     angle = -60,
 | 
			
		||||
///     length = segLen(thing),
 | 
			
		||||
///   )
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segLen",
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    },
 | 
			
		||||
    tags = ["sketch"]
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_length(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<TyF64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
    let path = line.path.clone().ok_or_else(|| {
 | 
			
		||||
@ -437,29 +213,6 @@ pub async fn segment_angle(exec_state: &mut ExecState, args: Args) -> Result<Kcl
 | 
			
		||||
    Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, NumericType::degrees())))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Compute the angle (in degrees) of the provided line segment.
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [10, 0])
 | 
			
		||||
///   |> line(end = [5, 10], tag = $seg01)
 | 
			
		||||
///   |> line(end = [-10, 0])
 | 
			
		||||
///   |> angledLine(angle = segAng(seg01), length = 10)
 | 
			
		||||
///   |> line(end = [-10, 0])
 | 
			
		||||
///   |> angledLine(angle = segAng(seg01), length = -15)
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// example = extrude(exampleSketch, length = 4)
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "segAng",
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    },
 | 
			
		||||
    tags = ["sketch"]
 | 
			
		||||
}]
 | 
			
		||||
fn inner_segment_angle(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
    let path = line.path.clone().ok_or_else(|| {
 | 
			
		||||
@ -482,85 +235,6 @@ pub async fn tangent_to_end(exec_state: &mut ExecState, args: Args) -> Result<Kc
 | 
			
		||||
    Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, NumericType::degrees())))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Returns the angle coming out of the end of the segment in degrees.
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// // Horizontal pill.
 | 
			
		||||
/// pillSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [20, 0])
 | 
			
		||||
///   |> tangentialArc(end = [0, 10], tag = $arc1)
 | 
			
		||||
///   |> angledLine(
 | 
			
		||||
///     angle = tangentToEnd(arc1),
 | 
			
		||||
///     length = 20,
 | 
			
		||||
///   )
 | 
			
		||||
///   |> tangentialArc(end = [0, -10])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// pillExtrude = extrude(pillSketch, length = 10)
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// // Vertical pill.  Use absolute coordinate for arc.
 | 
			
		||||
/// pillSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [0, 20])
 | 
			
		||||
///   |> tangentialArc(endAbsolute = [10, 20], tag = $arc1)
 | 
			
		||||
///   |> angledLine(
 | 
			
		||||
///     angle = tangentToEnd(arc1),
 | 
			
		||||
///     length = 20,
 | 
			
		||||
///   )
 | 
			
		||||
///   |> tangentialArc(end = [-10, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// pillExtrude = extrude(pillSketch, length = 10)
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// rectangleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [10, 0], tag = $seg1)
 | 
			
		||||
///   |> angledLine(
 | 
			
		||||
///     angle = tangentToEnd(seg1),
 | 
			
		||||
///     length = 10,
 | 
			
		||||
///   )
 | 
			
		||||
///   |> line(end = [0, 10])
 | 
			
		||||
///   |> line(end = [-20, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// rectangleExtrude = extrude(rectangleSketch, length = 10)
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// bottom = startSketchOn(XY)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> arc(
 | 
			
		||||
///        endAbsolute = [10, 10],
 | 
			
		||||
///        interiorAbsolute = [5, 1],
 | 
			
		||||
///        tag = $arc1,
 | 
			
		||||
///      )
 | 
			
		||||
///   |> angledLine(angle = tangentToEnd(arc1), length = 20)
 | 
			
		||||
///   |> close()
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// ```no_run
 | 
			
		||||
/// circSketch = startSketchOn(XY)
 | 
			
		||||
///   |> circle( center= [0, 0], radius= 3 , tag= $circ)
 | 
			
		||||
///
 | 
			
		||||
/// triangleSketch = startSketchOn(XY)
 | 
			
		||||
///   |> startProfile(at = [-5, 0])
 | 
			
		||||
///   |> angledLine(angle = tangentToEnd(circ), length = 10)
 | 
			
		||||
///   |> line(end = [-15, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
/// ```
 | 
			
		||||
#[stdlib {
 | 
			
		||||
    name = "tangentToEnd",
 | 
			
		||||
    unlabeled_first = true,
 | 
			
		||||
    args = {
 | 
			
		||||
        tag = { docs = "The line segment being queried by its tag"},
 | 
			
		||||
    },
 | 
			
		||||
    tags = ["sketch"]
 | 
			
		||||
}]
 | 
			
		||||
async fn inner_tangent_to_end(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<f64, KclError> {
 | 
			
		||||
    let line = args.get_tag_engine_info(exec_state, tag)?;
 | 
			
		||||
    let path = line.path.clone().ok_or_else(|| {
 | 
			
		||||
 | 
			
		||||
@ -895,3 +895,304 @@ export fn patternCircular2d(
 | 
			
		||||
  /// If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid.
 | 
			
		||||
  useOriginal?: bool = false,
 | 
			
		||||
): [Sketch; 1+] {}
 | 
			
		||||
 | 
			
		||||
/// Compute the ending point of the provided line segment.
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// w = 15
 | 
			
		||||
/// cube = startSketchOn(XY)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [w, 0], tag = $line1)
 | 
			
		||||
///   |> line(end = [0, w], tag = $line2)
 | 
			
		||||
///   |> line(end = [-w, 0], tag = $line3)
 | 
			
		||||
///   |> line(end = [0, -w], tag = $line4)
 | 
			
		||||
///   |> close()
 | 
			
		||||
///   |> extrude(length = 5)
 | 
			
		||||
///
 | 
			
		||||
/// fn cylinder(radius, tag) {
 | 
			
		||||
///   return startSketchOn(XY)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> circle(radius = radius, center = segEnd(tag) )
 | 
			
		||||
///   |> extrude(length = radius)
 | 
			
		||||
/// }
 | 
			
		||||
///
 | 
			
		||||
/// cylinder(radius = 1, tag = line1)
 | 
			
		||||
/// cylinder(radius = 2, tag = line2)
 | 
			
		||||
/// cylinder(radius = 3, tag = line3)
 | 
			
		||||
/// cylinder(radius = 4, tag = line4)
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn segEnd(
 | 
			
		||||
  /// The line segment being queried by its tag.
 | 
			
		||||
  @tag: tag,
 | 
			
		||||
): Point2d {}
 | 
			
		||||
 | 
			
		||||
/// Compute the ending point of the provided line segment along the 'x' axis.
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [20, 0], tag = $thing)
 | 
			
		||||
///   |> line(end = [0, 5])
 | 
			
		||||
///   |> line(end = [segEndX(thing), 0])
 | 
			
		||||
///   |> line(end = [-20, 10])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///  
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn segEndX(
 | 
			
		||||
  /// The line segment being queried by its tag.
 | 
			
		||||
  @tag: tag,
 | 
			
		||||
): number(Length) {}
 | 
			
		||||
 | 
			
		||||
/// Compute the ending point of the provided line segment along the 'y' axis.
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [20, 0])
 | 
			
		||||
///   |> line(end = [0, 3], tag = $thing)
 | 
			
		||||
///   |> line(end = [-10, 0])
 | 
			
		||||
///   |> line(end = [0, segEndY(thing)])
 | 
			
		||||
///   |> line(end = [-10, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///  
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn segEndY(
 | 
			
		||||
  /// The line segment being queried by its tag.
 | 
			
		||||
  @tag: tag,
 | 
			
		||||
): number(Length) {}
 | 
			
		||||
 | 
			
		||||
/// Compute the starting point of the provided line segment.
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// w = 15
 | 
			
		||||
/// cube = startSketchOn(XY)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [w, 0], tag = $line1)
 | 
			
		||||
///   |> line(end = [0, w], tag = $line2)
 | 
			
		||||
///   |> line(end = [-w, 0], tag = $line3)
 | 
			
		||||
///   |> line(end = [0, -w], tag = $line4)
 | 
			
		||||
///   |> close()
 | 
			
		||||
///   |> extrude(length = 5)
 | 
			
		||||
///
 | 
			
		||||
/// fn cylinder(radius, tag) {
 | 
			
		||||
///   return startSketchOn(XY)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> circle( radius = radius, center = segStart(tag) )
 | 
			
		||||
///   |> extrude(length = radius)
 | 
			
		||||
/// }
 | 
			
		||||
///
 | 
			
		||||
/// cylinder(radius = 1, tag = line1)
 | 
			
		||||
/// cylinder(radius = 2, tag = line2)
 | 
			
		||||
/// cylinder(radius = 3, tag = line3)
 | 
			
		||||
/// cylinder(radius = 4, tag = line4)
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn segStart(
 | 
			
		||||
  /// The line segment being queried by its tag.
 | 
			
		||||
  @tag: tag,
 | 
			
		||||
): Point2d {}
 | 
			
		||||
 | 
			
		||||
/// Compute the starting point of the provided line segment along the 'x' axis.
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [20, 0], tag = $thing)
 | 
			
		||||
///   |> line(end = [0, 5])
 | 
			
		||||
///   |> line(end = [20 - segStartX(thing), 0])
 | 
			
		||||
///   |> line(end = [-20, 10])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///  
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn segStartX(
 | 
			
		||||
  /// The line segment being queried by its tag.
 | 
			
		||||
  @tag: tag,
 | 
			
		||||
): number(Length) {}
 | 
			
		||||
 | 
			
		||||
/// Compute the starting point of the provided line segment along the 'y' axis.
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [20, 0])
 | 
			
		||||
///   |> line(end = [0, 3], tag = $thing)
 | 
			
		||||
///   |> line(end = [-10, 0])
 | 
			
		||||
///   |> line(end = [0, 20-segStartY(thing)])
 | 
			
		||||
///   |> line(end = [-10, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///  
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn segStartY(
 | 
			
		||||
  /// The line segment being queried by its tag.
 | 
			
		||||
  @tag: tag,
 | 
			
		||||
): number(Length) {}
 | 
			
		||||
 | 
			
		||||
/// Extract the 'x' axis value of the last line segment in the provided 2-d sketch.
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [5, 0])
 | 
			
		||||
///   |> line(end = [20, 5])
 | 
			
		||||
///   |> line(end = [lastSegX(%), 0])
 | 
			
		||||
///   |> line(end = [-15, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn lastSegX(
 | 
			
		||||
  /// The sketch whose line segment is being queried.
 | 
			
		||||
  @sketch: Sketch,
 | 
			
		||||
): number(Length) {}
 | 
			
		||||
 | 
			
		||||
/// Extract the 'y' axis value of the last line segment in the provided 2-d sketch.
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [5, 0])
 | 
			
		||||
///   |> line(end = [20, 5])
 | 
			
		||||
///   |> line(end = [0, lastSegY(%)])
 | 
			
		||||
///   |> line(end = [-15, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn lastSegY(
 | 
			
		||||
  /// The sketch whose line segment is being queried.
 | 
			
		||||
  @sketch: Sketch,
 | 
			
		||||
): number(Length) {}
 | 
			
		||||
 | 
			
		||||
/// Compute the length of the provided line segment.
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> angledLine(
 | 
			
		||||
///     angle = 60,
 | 
			
		||||
///     length = 10,
 | 
			
		||||
///     tag = $thing,
 | 
			
		||||
///   )
 | 
			
		||||
///   |> tangentialArc(angle = -120, radius = 5)
 | 
			
		||||
///   |> angledLine(
 | 
			
		||||
///     angle = -60,
 | 
			
		||||
///     length = segLen(thing),
 | 
			
		||||
///   )
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// example = extrude(exampleSketch, length = 5)
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn segLen(
 | 
			
		||||
  /// The line segment being queried by its tag.
 | 
			
		||||
  @tag: tag,
 | 
			
		||||
): number(Length) {}
 | 
			
		||||
 | 
			
		||||
/// Compute the angle (in degrees) of the provided line segment.
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// exampleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [10, 0])
 | 
			
		||||
///   |> line(end = [5, 10], tag = $seg01)
 | 
			
		||||
///   |> line(end = [-10, 0])
 | 
			
		||||
///   |> angledLine(angle = segAng(seg01), length = 10)
 | 
			
		||||
///   |> line(end = [-10, 0])
 | 
			
		||||
///   |> angledLine(angle = segAng(seg01), length = -15)
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// example = extrude(exampleSketch, length = 4)
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn segAng(
 | 
			
		||||
  /// The line segment being queried by its tag.
 | 
			
		||||
  @tag: tag,
 | 
			
		||||
): number(Angle) {}
 | 
			
		||||
 | 
			
		||||
/// Returns the angle coming out of the end of the segment in degrees.
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// // Horizontal pill.
 | 
			
		||||
/// pillSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [20, 0])
 | 
			
		||||
///   |> tangentialArc(end = [0, 10], tag = $arc1)
 | 
			
		||||
///   |> angledLine(
 | 
			
		||||
///     angle = tangentToEnd(arc1),
 | 
			
		||||
///     length = 20,
 | 
			
		||||
///   )
 | 
			
		||||
///   |> tangentialArc(end = [0, -10])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// pillExtrude = extrude(pillSketch, length = 10)
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// // Vertical pill.  Use absolute coordinate for arc.
 | 
			
		||||
/// pillSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [0, 20])
 | 
			
		||||
///   |> tangentialArc(endAbsolute = [10, 20], tag = $arc1)
 | 
			
		||||
///   |> angledLine(
 | 
			
		||||
///     angle = tangentToEnd(arc1),
 | 
			
		||||
///     length = 20,
 | 
			
		||||
///   )
 | 
			
		||||
///   |> tangentialArc(end = [-10, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// pillExtrude = extrude(pillSketch, length = 10)
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// rectangleSketch = startSketchOn(XZ)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> line(end = [10, 0], tag = $seg1)
 | 
			
		||||
///   |> angledLine(
 | 
			
		||||
///     angle = tangentToEnd(seg1),
 | 
			
		||||
///     length = 10,
 | 
			
		||||
///   )
 | 
			
		||||
///   |> line(end = [0, 10])
 | 
			
		||||
///   |> line(end = [-20, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
///
 | 
			
		||||
/// rectangleExtrude = extrude(rectangleSketch, length = 10)
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// bottom = startSketchOn(XY)
 | 
			
		||||
///   |> startProfile(at = [0, 0])
 | 
			
		||||
///   |> arc(
 | 
			
		||||
///        endAbsolute = [10, 10],
 | 
			
		||||
///        interiorAbsolute = [5, 1],
 | 
			
		||||
///        tag = $arc1,
 | 
			
		||||
///      )
 | 
			
		||||
///   |> angledLine(angle = tangentToEnd(arc1), length = 20)
 | 
			
		||||
///   |> close()
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// ```kcl
 | 
			
		||||
/// circSketch = startSketchOn(XY)
 | 
			
		||||
///   |> circle(center = [0, 0], radius= 3, tag = $circ)
 | 
			
		||||
///
 | 
			
		||||
/// triangleSketch = startSketchOn(XY)
 | 
			
		||||
///   |> startProfile(at = [-5, 0])
 | 
			
		||||
///   |> angledLine(angle = tangentToEnd(circ), length = 10)
 | 
			
		||||
///   |> line(end = [-15, 0])
 | 
			
		||||
///   |> close()
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn tangentToEnd(
 | 
			
		||||
  /// The line segment being queried by its tag.
 | 
			
		||||
  @tag: tag,
 | 
			
		||||
): number(Angle) {}
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB  | 
| 
		 Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB  | 
| 
		 Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 61 KiB  | 
| 
		 Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB  | 
| 
		 Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB  | 
| 
		 Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB  | 
| 
		 Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB  | 
| 
		 Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB  | 
| 
		 Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB  | 
| 
		 Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB  | 
| 
		 Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB  | 
| 
		 Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB  | 
| 
		 Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB  | 
| 
		 Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB  | 
| 
		 Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB  |