diff --git a/docs/kcl/abs.md b/docs/kcl/abs.md index 21e399c7c..49e0cd1e1 100644 --- a/docs/kcl/abs.md +++ b/docs/kcl/abs.md @@ -34,7 +34,7 @@ abs(num: number): number myAngle = -120 sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [8, 0]) |> angledLine(angle = abs(myAngle), length = 5) |> line(end = [-5, 0]) diff --git a/docs/kcl/acos.md b/docs/kcl/acos.md index 45a26465b..300415b8f 100644 --- a/docs/kcl/acos.md +++ b/docs/kcl/acos.md @@ -32,7 +32,7 @@ acos(num: number): number ```js sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = toDegrees(acos(0.5)), length = 10) |> line(end = [5, 0]) |> line(endAbsolute = [12, 0]) diff --git a/docs/kcl/angleToMatchLengthX.md b/docs/kcl/angleToMatchLengthX.md index 70efebdbf..e1deaa3a8 100644 --- a/docs/kcl/angleToMatchLengthX.md +++ b/docs/kcl/angleToMatchLengthX.md @@ -34,7 +34,7 @@ angleToMatchLengthX( ```js sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [2, 5], tag = $seg01) |> angledLine(angle = -angleToMatchLengthX(seg01, 7, %), endAbsoluteX = 10) |> close() diff --git a/docs/kcl/angleToMatchLengthY.md b/docs/kcl/angleToMatchLengthY.md index 154892d57..b40daee2a 100644 --- a/docs/kcl/angleToMatchLengthY.md +++ b/docs/kcl/angleToMatchLengthY.md @@ -34,7 +34,7 @@ angleToMatchLengthY( ```js sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [1, 2], tag = $seg01) |> angledLine(angle = angleToMatchLengthY(seg01, 15, %), length = 5) |> yLine(endAbsolute = 0) diff --git a/docs/kcl/angledLine.md b/docs/kcl/angledLine.md index d70629bbf..61c58102c 100644 --- a/docs/kcl/angledLine.md +++ b/docs/kcl/angledLine.md @@ -44,7 +44,7 @@ angledLine( ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(endAbsolute = 15) |> angledLine(angle = 30, length = 15) |> line(end = [8, -10]) diff --git a/docs/kcl/angledLineThatIntersects.md b/docs/kcl/angledLineThatIntersects.md index 3f7a3c1b4..002a6e47a 100644 --- a/docs/kcl/angledLineThatIntersects.md +++ b/docs/kcl/angledLineThatIntersects.md @@ -38,7 +38,7 @@ angledLineThatIntersects( ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [5, 10]) |> line(endAbsolute = [-10, 10], tag = $lineToIntersect) |> line(endAbsolute = [0, 20]) diff --git a/docs/kcl/appearance.md b/docs/kcl/appearance.md index a92ff2513..b6d1a4911 100644 --- a/docs/kcl/appearance.md +++ b/docs/kcl/appearance.md @@ -37,7 +37,7 @@ appearance( ```js // Add color to an extruded solid. exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [10, 0]) |> line(endAbsolute = [0, 10]) |> line(endAbsolute = [-10, 0]) @@ -64,7 +64,7 @@ sketch001 = startSketchOn(XY) // Add color to different solids. fn cube(center) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) + |> startProfile(at = [center[0] - 10, center[1] - 10]) |> line(endAbsolute = [center[0] + 10, center[1] - 10]) |> line(endAbsolute = [center[0] + 10, center[1] + 10]) |> line(endAbsolute = [center[0] - 10, center[1] + 10]) @@ -96,7 +96,7 @@ appearance( // You can set the appearance before or after you shell it will yield the same result. // This example shows setting the appearance _after_ the shell. firstSketch = startSketchOn(XY) - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -113,7 +113,7 @@ shell(firstSketch, faces = [END], thickness = 0.25) // You can set the appearance before or after you shell it will yield the same result. // This example shows setting the appearance _before_ the shell. firstSketch = startSketchOn(XY) - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -130,7 +130,7 @@ shell(firstSketch, faces = [END], thickness = 0.25) // Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern. // This example shows _before_ the pattern. exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 2]) |> line(end = [3, 1]) |> line(end = [0, -4]) @@ -147,7 +147,7 @@ example = extrude(exampleSketch, length = 1) // Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern. // This example shows _after_ the pattern. exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 2]) |> line(end = [3, 1]) |> line(end = [0, -4]) @@ -163,7 +163,7 @@ example = extrude(exampleSketch, length = 1) ```js // Color the result of a 2D pattern that was extruded. exampleSketch = startSketchOn(XZ) - |> startProfileAt([.5, 25], %) + |> startProfile(at = [.5, 25]) |> line(end = [0, 5]) |> line(end = [-1, 0]) |> line(end = [0, -5]) @@ -186,7 +186,7 @@ example = extrude(exampleSketch, length = 1) // Create a path for the sweep. sweepPath = startSketchOn(XZ) - |> startProfileAt([0.05, 0.05], %) + |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) |> tangentialArc(angle = 90, radius = 5) |> line(end = [-3, 0]) diff --git a/docs/kcl/arc.md b/docs/kcl/arc.md index 6252581bc..2f2a2136f 100644 --- a/docs/kcl/arc.md +++ b/docs/kcl/arc.md @@ -44,7 +44,7 @@ arc( ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> arc(angleStart = 0, angleEnd = 280, radius = 16) |> close() @@ -55,7 +55,7 @@ example = extrude(exampleSketch, length = 10) ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> arc(endAbsolute = [10, 0], interiorAbsolute = [5, 5]) |> close() example = extrude(exampleSketch, length = 10) diff --git a/docs/kcl/asin.md b/docs/kcl/asin.md index 2ceeab762..f33607297 100644 --- a/docs/kcl/asin.md +++ b/docs/kcl/asin.md @@ -32,7 +32,7 @@ asin(num: number): number ```js sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = toDegrees(asin(0.5)), length = 20) |> yLine(endAbsolute = 0) |> close() diff --git a/docs/kcl/atan.md b/docs/kcl/atan.md index ae16b2221..cc8a9234b 100644 --- a/docs/kcl/atan.md +++ b/docs/kcl/atan.md @@ -32,7 +32,7 @@ atan(num: number): number ```js sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = toDegrees(atan(1.25)), length = 20) |> yLine(endAbsolute = 0) |> close() diff --git a/docs/kcl/atan2.md b/docs/kcl/atan2.md index 1a31c08c4..cbc19b23a 100644 --- a/docs/kcl/atan2.md +++ b/docs/kcl/atan2.md @@ -36,7 +36,7 @@ atan2( ```js sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = toDegrees(atan2(y = 1.25, x = 2)), length = 20) |> yLine(endAbsolute = 0) |> close() diff --git a/docs/kcl/bezierCurve.md b/docs/kcl/bezierCurve.md index 1665f1ac0..0fee6d023 100644 --- a/docs/kcl/bezierCurve.md +++ b/docs/kcl/bezierCurve.md @@ -38,7 +38,7 @@ bezierCurve( ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> bezierCurve(control1 = [5, 0], control2 = [5, 10], end = [10, 10]) |> line(endAbsolute = [10, 0]) diff --git a/docs/kcl/ceil.md b/docs/kcl/ceil.md index 75fa09657..47807dae5 100644 --- a/docs/kcl/ceil.md +++ b/docs/kcl/ceil.md @@ -32,7 +32,7 @@ ceil(num: number): number ```js sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [12, 10]) |> line(end = [ceil(7.02986), 0]) |> yLine(endAbsolute = 0) diff --git a/docs/kcl/chamfer.md b/docs/kcl/chamfer.md index e7552be83..699a53559 100644 --- a/docs/kcl/chamfer.md +++ b/docs/kcl/chamfer.md @@ -42,7 +42,7 @@ thickness = 1 chamferLength = 2 mountingPlateSketch = startSketchOn(XY) - |> startProfileAt([-width / 2, -length / 2], %) + |> startProfile(at = [-width / 2, -length / 2]) |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1) |> line(endAbsolute = [width / 2, length / 2], tag = $edge2) |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3) @@ -66,7 +66,7 @@ mountingPlate = extrude(mountingPlateSketch, length = thickness) // Sketch on the face of a chamfer. fn cube(pos, scale) { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -81,7 +81,7 @@ part001 = cube([0, 0], 20) |> chamfer(length = 10, tags = [getOppositeEdge(line1)], tag = $chamfer1) sketch001 = startSketchOn(part001, face = chamfer1) - |> startProfileAt([10, 10], %) + |> startProfile(at = [10, 10]) |> line(end = [2, 0]) |> line(end = [0, 2]) |> line(end = [-2, 0]) diff --git a/docs/kcl/clone.md b/docs/kcl/clone.md index 52f1248f6..38fcb6376 100644 --- a/docs/kcl/clone.md +++ b/docs/kcl/clone.md @@ -33,7 +33,7 @@ clone(geometry: GeometryWithImportedGeometry): GeometryWithImportedGeometry ```js // Clone a basic sketch and move it and extrude it. exampleSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [0, 10]) |> line(end = [-10, 0]) @@ -52,7 +52,7 @@ clonedSketch = clone(exampleSketch) exampleSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [0, 10]) |> line(end = [-10, 0]) @@ -70,7 +70,7 @@ clonedPart = clone(myPart) sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> xLine(length = 20) |> yLine(length = -20) |> xLine(length = -20) @@ -90,7 +90,7 @@ loft([sketch001, sketch002]) sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> xLine(length = 20) |> yLine(length = -20) |> xLine(length = -20, tag = $filletTag) @@ -109,7 +109,7 @@ sketch002 = clone(sketch001) sketch001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [0, 10], tag = $sketchingFace) |> line(end = [-10, 0]) @@ -120,7 +120,7 @@ sketch002 = clone(sketch001) |> extrude(length = 5) startSketchOn(sketch002, face = sketchingFace) - |> startProfileAt([1, 1], %) + |> startProfile(at = [1, 1]) |> line(end = [8, 0]) |> line(end = [0, 8]) |> line(end = [-8, 0]) @@ -140,7 +140,7 @@ thickness = 1 filletRadius = 2 mountingPlateSketch = startSketchOn(XY) - |> startProfileAt([-width / 2, -length / 2], %) + |> startProfile(at = [-width / 2, -length / 2]) |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1) |> line(endAbsolute = [width / 2, length / 2], tag = $edge2) |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3) @@ -205,7 +205,7 @@ sketch002 = clone(sketch001) exampleSketch = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -228,7 +228,7 @@ example001 = revolve( // Sketch on the cloned face. // exampleSketch002 = startSketchOn(example002, face = end01) -// |> startProfileAt([4.5, -5], %) +// |> startProfile(at = [4.5, -5]) // |> line(end = [0, 5]) // |> line(end = [5, 0]) // |> line(end = [0, -5]) diff --git a/docs/kcl/close.md b/docs/kcl/close.md index 5d680cdcd..8ce57c07c 100644 --- a/docs/kcl/close.md +++ b/docs/kcl/close.md @@ -32,7 +32,7 @@ close( ```js startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 10]) |> line(end = [10, 0]) |> close() @@ -43,7 +43,7 @@ startSketchOn(XZ) ```js exampleSketch = startSketchOn(-XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [0, 10]) |> close() diff --git a/docs/kcl/consts/std-math-E.md b/docs/kcl/consts/std-math-E.md index 636d755a8..255df2a0d 100644 --- a/docs/kcl/consts/std-math-E.md +++ b/docs/kcl/consts/std-math-E.md @@ -16,7 +16,7 @@ std::math::E: number = 2.71828182845904523536028747135266250_ ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine( angle = 30, length = 2 * E ^ 2, diff --git a/docs/kcl/consts/std-math-TAU.md b/docs/kcl/consts/std-math-TAU.md index 03e09365c..521edbe3f 100644 --- a/docs/kcl/consts/std-math-TAU.md +++ b/docs/kcl/consts/std-math-TAU.md @@ -16,7 +16,7 @@ std::math::TAU: number = 6.28318530717958647692528676655900577_ ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine( angle = 50, length = 10 * TAU, diff --git a/docs/kcl/e.md b/docs/kcl/e.md index 1c86a2aa2..7ae401b60 100644 --- a/docs/kcl/e.md +++ b/docs/kcl/e.md @@ -29,7 +29,7 @@ e(): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 30, length = 2 * e() ^ 2) |> yLine(endAbsolute = 0) |> close() diff --git a/docs/kcl/extrude.md b/docs/kcl/extrude.md index bd2ffde71..43250b12c 100644 --- a/docs/kcl/extrude.md +++ b/docs/kcl/extrude.md @@ -40,7 +40,7 @@ extrude( ```js example = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> arc(angleStart = 120, angleEnd = 0, radius = 5) |> line(end = [5, 0]) @@ -55,7 +55,7 @@ example = startSketchOn(XZ) ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([-10, 0], %) + |> startProfile(at = [-10, 0]) |> arc(angleStart = 120, angleEnd = -60, radius = 5) |> line(end = [10, 0]) |> line(end = [5, 0]) @@ -71,7 +71,7 @@ example = extrude(exampleSketch, length = 10) ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([-10, 0], %) + |> startProfile(at = [-10, 0]) |> arc(angleStart = 120, angleEnd = -60, radius = 5) |> line(end = [10, 0]) |> line(end = [5, 0]) @@ -87,7 +87,7 @@ example = extrude(exampleSketch, length = 20, symmetric = true) ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([-10, 0], %) + |> startProfile(at = [-10, 0]) |> arc(angleStart = 120, angleEnd = -60, radius = 5) |> line(end = [10, 0]) |> line(end = [5, 0]) diff --git a/docs/kcl/fillet.md b/docs/kcl/fillet.md index ccc49958e..3377ac5ec 100644 --- a/docs/kcl/fillet.md +++ b/docs/kcl/fillet.md @@ -43,7 +43,7 @@ thickness = 1 filletRadius = 2 mountingPlateSketch = startSketchOn(XY) - |> startProfileAt([-width / 2, -length / 2], %) + |> startProfile(at = [-width / 2, -length / 2]) |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1) |> line(endAbsolute = [width / 2, length / 2], tag = $edge2) |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3) @@ -70,7 +70,7 @@ thickness = 1 filletRadius = 1 mountingPlateSketch = startSketchOn(XY) - |> startProfileAt([-width / 2, -length / 2], %) + |> startProfile(at = [-width / 2, -length / 2]) |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1) |> line(endAbsolute = [width / 2, length / 2], tag = $edge2) |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3) diff --git a/docs/kcl/floor.md b/docs/kcl/floor.md index ba23ae654..07224d361 100644 --- a/docs/kcl/floor.md +++ b/docs/kcl/floor.md @@ -32,7 +32,7 @@ floor(num: number): number ```js sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [12, 10]) |> line(end = [floor(7.02986), 0]) |> yLine(endAbsolute = 0) diff --git a/docs/kcl/getCommonEdge.md b/docs/kcl/getCommonEdge.md index 421e2b384..1390f7873 100644 --- a/docs/kcl/getCommonEdge.md +++ b/docs/kcl/getCommonEdge.md @@ -32,7 +32,7 @@ getCommonEdge(faces: [TagIdentifier]): Uuid scale = 20 part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) diff --git a/docs/kcl/getNextAdjacentEdge.md b/docs/kcl/getNextAdjacentEdge.md index f09e1bff0..423856a6b 100644 --- a/docs/kcl/getNextAdjacentEdge.md +++ b/docs/kcl/getNextAdjacentEdge.md @@ -28,7 +28,7 @@ getNextAdjacentEdge(edge: TagIdentifier): Uuid ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> angledLine(angle = 60, length = 10) |> angledLine(angle = 120, length = 10) diff --git a/docs/kcl/getOppositeEdge.md b/docs/kcl/getOppositeEdge.md index f879fdf13..3a0014361 100644 --- a/docs/kcl/getOppositeEdge.md +++ b/docs/kcl/getOppositeEdge.md @@ -28,7 +28,7 @@ getOppositeEdge(edge: TagIdentifier): Uuid ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> angledLine(angle = 60, length = 10) |> angledLine(angle = 120, length = 10) diff --git a/docs/kcl/getPreviousAdjacentEdge.md b/docs/kcl/getPreviousAdjacentEdge.md index 75d28bcb6..dfac3c76b 100644 --- a/docs/kcl/getPreviousAdjacentEdge.md +++ b/docs/kcl/getPreviousAdjacentEdge.md @@ -28,7 +28,7 @@ getPreviousAdjacentEdge(edge: TagIdentifier): Uuid ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> angledLine(angle = 60, length = 10) |> angledLine(angle = 120, length = 10) diff --git a/docs/kcl/hole.md b/docs/kcl/hole.md index 7dd404d78..dcb940db2 100644 --- a/docs/kcl/hole.md +++ b/docs/kcl/hole.md @@ -32,7 +32,7 @@ hole( ```js exampleSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 5]) |> line(end = [5, 0]) |> line(end = [0, -5]) @@ -48,7 +48,7 @@ example = extrude(exampleSketch, length = 1) ```js fn squareHoleSketch() { squareSketch = startSketchOn(-XZ) - |> startProfileAt([-1, -1], %) + |> startProfile(at = [-1, -1]) |> line(end = [2, 0]) |> line(end = [0, 2]) |> line(end = [-2, 0]) diff --git a/docs/kcl/hollow.md b/docs/kcl/hollow.md index e39a6f118..5f7b8040c 100644 --- a/docs/kcl/hollow.md +++ b/docs/kcl/hollow.md @@ -33,7 +33,7 @@ hollow( ```js // Hollow a basic sketch. firstSketch = startSketchOn(XY) - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -47,7 +47,7 @@ firstSketch = startSketchOn(XY) ```js // Hollow a basic sketch. firstSketch = startSketchOn(-XZ) - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -62,7 +62,7 @@ firstSketch = startSketchOn(-XZ) // Hollow a sketch on face object. size = 100 case = startSketchOn(-XZ) - |> startProfileAt([-size, -size], %) + |> startProfile(at = [-size, -size]) |> line(end = [2 * size, 0]) |> line(end = [0, 2 * size]) |> tangentialArc(endAbsolute = [-size, size]) diff --git a/docs/kcl/index.md b/docs/kcl/index.md index f8a5f6f1d..dbd0c10eb 100644 --- a/docs/kcl/index.md +++ b/docs/kcl/index.md @@ -103,7 +103,7 @@ layout: manual * [`segStartY`](kcl/segStartY) * [`shell`](kcl/shell) * [`sqrt`](kcl/sqrt) - * [`startProfileAt`](kcl/startProfileAt) + * [`startProfile`](kcl/startProfile) * [`startSketchOn`](kcl/startSketchOn) * [`subtract`](kcl/subtract) * [`sweep`](kcl/sweep) diff --git a/docs/kcl/intersect.md b/docs/kcl/intersect.md index 26c0e9c67..4f4ade569 100644 --- a/docs/kcl/intersect.md +++ b/docs/kcl/intersect.md @@ -36,7 +36,7 @@ intersect( fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) @@ -61,7 +61,7 @@ intersectedPart = intersect([part001, part002]) fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) diff --git a/docs/kcl/involuteCircular.md b/docs/kcl/involuteCircular.md index 72ec5516d..e29ae0a3c 100644 --- a/docs/kcl/involuteCircular.md +++ b/docs/kcl/involuteCircular.md @@ -42,7 +42,7 @@ involuteCircular( a = 10 b = 14 startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> involuteCircular(startRadius = a, endRadius = b, angle = 60) |> involuteCircular( startRadius = a, diff --git a/docs/kcl/lastSegX.md b/docs/kcl/lastSegX.md index 6c07d6a66..42b014ffb 100644 --- a/docs/kcl/lastSegX.md +++ b/docs/kcl/lastSegX.md @@ -28,7 +28,7 @@ lastSegX(sketch: Sketch): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [5, 0]) |> line(end = [20, 5]) |> line(end = [lastSegX(%), 0]) diff --git a/docs/kcl/lastSegY.md b/docs/kcl/lastSegY.md index b03537a08..c28a294d6 100644 --- a/docs/kcl/lastSegY.md +++ b/docs/kcl/lastSegY.md @@ -28,7 +28,7 @@ lastSegY(sketch: Sketch): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [5, 0]) |> line(end = [20, 5]) |> line(end = [0, lastSegY(%)]) diff --git a/docs/kcl/line.md b/docs/kcl/line.md index 970066a5f..a72a20d0b 100644 --- a/docs/kcl/line.md +++ b/docs/kcl/line.md @@ -36,7 +36,7 @@ line( ```js triangle = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) // The END argument means it ends at exactly [10, 0]. // This is an absolute measurement, it is NOT relative to // the start of the sketch. @@ -47,7 +47,7 @@ triangle = startSketchOn(XZ) |> extrude(length = 5) box = startSketchOn(XZ) - |> startProfileAt([10, 10], %) + |> startProfile(at = [10, 10]) // The 'to' argument means move the pen this much. // So, [10, 0] is a relative distance away from the current point. |> line(end = [10, 0]) diff --git a/docs/kcl/ln.md b/docs/kcl/ln.md index dea61a80f..8b5f917bc 100644 --- a/docs/kcl/ln.md +++ b/docs/kcl/ln.md @@ -32,7 +32,7 @@ ln(num: number): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [ln(100), 15]) |> line(end = [5, -6]) |> line(end = [-10, -10]) diff --git a/docs/kcl/loft.md b/docs/kcl/loft.md index f48a36757..86b93d8c2 100644 --- a/docs/kcl/loft.md +++ b/docs/kcl/loft.md @@ -43,7 +43,7 @@ loft( ```js // Loft a square and a triangle. squareSketch = startSketchOn(XY) - |> startProfileAt([-100, 200], %) + |> startProfile(at = [-100, 200]) |> line(end = [200, 0]) |> line(end = [0, -200]) |> line(end = [-200, 0]) @@ -51,7 +51,7 @@ squareSketch = startSketchOn(XY) |> close() triangleSketch = startSketchOn(offsetPlane(XY, offset = 75)) - |> startProfileAt([0, 125], %) + |> startProfile(at = [0, 125]) |> line(end = [-15, -30]) |> line(end = [30, 0]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -65,7 +65,7 @@ loft([squareSketch, triangleSketch]) ```js // Loft a square, a circle, and another circle. squareSketch = startSketchOn(XY) - |> startProfileAt([-100, 200], %) + |> startProfile(at = [-100, 200]) |> line(end = [200, 0]) |> line(end = [0, -200]) |> line(end = [-200, 0]) @@ -90,7 +90,7 @@ loft([ ```js // Loft a square, a circle, and another circle with options. squareSketch = startSketchOn(XY) - |> startProfileAt([-100, 200], %) + |> startProfile(at = [-100, 200]) |> line(end = [200, 0]) |> line(end = [0, -200]) |> line(end = [-200, 0]) diff --git a/docs/kcl/log.md b/docs/kcl/log.md index 6f0d9599e..d0a45c6a4 100644 --- a/docs/kcl/log.md +++ b/docs/kcl/log.md @@ -36,7 +36,7 @@ log( ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [log(100, 5), 0]) |> line(end = [5, 8]) |> line(end = [-10, 0]) diff --git a/docs/kcl/log10.md b/docs/kcl/log10.md index c45649bd4..8703167b9 100644 --- a/docs/kcl/log10.md +++ b/docs/kcl/log10.md @@ -32,7 +32,7 @@ log10(num: number): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [log10(100), 0]) |> line(end = [5, 8]) |> line(end = [-10, 0]) diff --git a/docs/kcl/log2.md b/docs/kcl/log2.md index 302510721..7178c02bb 100644 --- a/docs/kcl/log2.md +++ b/docs/kcl/log2.md @@ -32,7 +32,7 @@ log2(num: number): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [log2(100), 0]) |> line(end = [5, 8]) |> line(end = [-10, 0]) diff --git a/docs/kcl/max.md b/docs/kcl/max.md index 2e4cb7629..990aa09aa 100644 --- a/docs/kcl/max.md +++ b/docs/kcl/max.md @@ -32,7 +32,7 @@ max(args: [number]): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 70, length = max(15, 31, 4, 13, 22)) |> line(end = [20, 0]) |> close() diff --git a/docs/kcl/min.md b/docs/kcl/min.md index efdb4daab..2a32b4605 100644 --- a/docs/kcl/min.md +++ b/docs/kcl/min.md @@ -32,7 +32,7 @@ min(args: [number]): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 70, length = min(15, 31, 4, 13, 22)) |> line(end = [20, 0]) |> close() diff --git a/docs/kcl/modules.md b/docs/kcl/modules.md index 313996aec..7cbfb5f5e 100644 --- a/docs/kcl/modules.md +++ b/docs/kcl/modules.md @@ -73,7 +73,7 @@ There are two common patterns for re‑using geometry: ```kcl fn cube(center) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) + |> startProfile(at = [center[0] - 10, center[1] - 10]) |> line(endAbsolute = [center[0] + 10, center[1] - 10]) |> line(endAbsolute = [center[0] + 10, center[1] + 10]) |> line(endAbsolute = [center[0] - 10, center[1] + 10]) diff --git a/docs/kcl/offsetPlane.md b/docs/kcl/offsetPlane.md new file mode 100644 index 000000000..03964f5b3 --- /dev/null +++ b/docs/kcl/offsetPlane.md @@ -0,0 +1,121 @@ +--- +title: "offsetPlane" +excerpt: "Offset a plane by a distance along its normal." +layout: manual +--- + +Offset a plane by a distance along its normal. + +For example, if you offset the 'XZ' plane by 10, the new plane will be parallel to the 'XZ' plane and 10 units away from it. + +```js +offsetPlane( + plane: PlaneData, + offset: number, +): Plane +``` + + +### Arguments + +| Name | Type | Description | Required | +|----------|------|-------------|----------| +| `plane` | [`PlaneData`](/docs/kcl/types/PlaneData) | The plane (e.g. XY) which this new plane is created from. | Yes | +| `offset` | [`number`](/docs/kcl/types/number) | Distance from the standard plane this new plane will be created at. | Yes | + +### Returns + +[`Plane`](/docs/kcl/types/Plane) + + +### Examples + +```js +// Loft a square and a circle on the `XY` plane using offset. +squareSketch = startSketchOn(XY) + |> startProfile(at = [-100, 200]) + |> line(end = [200, 0]) + |> line(end = [0, -200]) + |> line(end = [-200, 0]) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) + |> close() + +circleSketch = startSketchOn(offsetPlane(XY, offset = 150)) + |> circle(center = [0, 100], radius = 50) + +loft([squareSketch, circleSketch]) +``` + +![Rendered example of offsetPlane 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAGTEElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuup/jWuuuebBPMCZM2cezHO55pprHsy/w3333Xcrz+Xs2bO38kz33XffrVx11VVXXXXVVVdd9b8Flauuuuqqq6666qqr/stcc801DwY4c+bMg6+55poHA5w5c+ZBANdcc82DAa655poHA5w5c+bBANdcc82D+U9033333XrNNdc8mH+D++6771ae6ezZs7cC3HfffbfyTPfdd9+tZ8+efQbAfffddyvA2bNnb73vvvtu5aqrrrrqqquuuuqq/wroQQ96EFddddVVV1111VVX/dtdc801DwY4c+bMg6+55poHnzlz5kEA11xzzYOvueaaB585c+bB11xzzYP5N7p48SL3u3DhAve7ePEiD3ThwgX+o5w8eZLnduLECe538uRJ7nfixAn+Le67775bAc6ePXvrfffddyvAfffdd+vZs2efcd99990K8A//8A+/zVVXXXXVVVddddVV/x7oQQ96EFddddVVV1111VVXvWDXXHPNgwHOnDnz4Bd7sRd7LYAXf/EXf22AF3uxF3ttXgQXL14E4MKFC1y8eBGACxcuAHDx4kUuXrzI/S5cuMDFixf53+bEiRPc7+TJk5w4cYL7nThxgpMnTwJw4sQJAE6ePMmJEyf4l9x33323AvzDP/zDbwP8wz/8w+8A3Hfffbf+wz/8w29z1VVXXXXVVVddddULgx70oAdx1VVXXXXVVVdddRVcc801Dz5z5syDX+zFXuy1AF78xV/8tV/sxV7stXkhLl68CMCFCxe4ePEiFy9e5OLFi1y4cAGApz3taVz1vGxzvxMnTgBw8uRJTpw4wYkTJzh58iQnTpwA4GEPexgvzH333Xfr2bNnb73vvvtu/Yd/+Iffue+++24F+Id/+Iff5qqrrrrqqquuuuoq9KAHPYirrrrqqquuuuqq/0+uueaaB585c+bBL/ZiL/Za11xzzYOvueaaB7/Yi73Ya/MCXLx4kQsXLvC0pz0NgKc+9akAPO1pT+Oq/xonTpwA4MSJE5w8eZKHPvShAJw4cYKHPexhPD/33XffrQD/8A//8Nv/8A//8Dv33XffrWfPnr31vvvuu5Wrrrrqqquuuuqq/z/Qgx70IK666qqrrrrqqqv+r7rmmmse/GIv9mKvfebMmQe9+Iu/+Gu/2Iu92GvzfFy8eJELFy7wtKc9DYCnPvWpPO1pT+Oq/x1OnDjBiRMnOHnyJA996EM5ceIEJ0+e5MSJEzy3++6779azZ8/eet999936D//wD79z33333foP//APv81VV1111VVXXXXV/03oQQ96EFddddVVV1111VX/F1xzzTUPPnPmzINf7MVe7LVe/MVf/LVf7MVe7LV5LhcvXgTgz//8zwF42tOextOe9jT+J7PNVf82J06c4MSJE5w8eZKHPvShnDhxgoc97GE8t/vuu+/Ws2fP3vr3f//3v/0P//APv/MP//APv81VV1111VVXXXXV/w3oQQ96EFddddVVV1111VX/G11zzTUPPnPmzINf7MVe7LVe/MVf/LVf7MVe7LV5LhcvXuTP//zPAXja057G0572NK76n8k2/1VOnDjBwx72MB760Idy4sQJHvawh/FA9913360A//AP//Db//AP//A7v/Vbv/XdXHXVVVddddVVV/3vhB70oAdx1VVXXXXVVVdd9b/FNddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe20e4OLFizztaU/jwoULPO1pT+NpT3saV131ojhx4gQAD33oQ3noQx/KiRMneNjDHsYD3Xfffbf+wz/8w2//1m/91vf8wz/8w29z1VVXXXXVVVdd9b8DetCDHsRVV1111VVXXXXV/1TXXHPNg1/7tV/7va655poHv87rvM578wAXL17kz//8zwH49V//da666j/SiRMneOhDH8rDHvYwTpw4wUMf+lDud9999936D//wD7/9D//wD7/zW7/1W9/NVVddddVVV1111f9c6EEPehBXXXXVVVddddVV/5Ncc801D37t137t93rxF3/x136xF3ux1+aZLl68yMWLF3na057GX/zFX3Dx4kWuek62ueo/x4kTJ3joQx/Kwx72MF7u5V6OB7rvvvtu/a3f+q3v/u3f/u3vue+++27lqquuuuqqq6666n8O9KAHPYirrrrqqquuuuqq/27XXHPNg1/7tV/7vV78xV/8tV/sxV7stXmmixcv8hd/8Rc87WlP42lPexpX/f9hm/+pTpw4wYkTJ3j5l395HvrQh3LixAkA7rvvvlsBfuu3fuu7f/RHf/RzuOqqq6666qqrrvrvhx70oAdx1VVXXXXVVVdd9d/lmmuuefA7vuM7ftbrvM7rvDfPdPHiRf7iL/6Cpz3taTztaU/jqqv+O9jmRXXixAle7uVejpd/+ZfnxIkTANx33323/sM//MNv/8M//MPv/NZv/dZ3c9VVV1111VVXXfXfAz3oQQ/iqquuuuqqq6666r/SNddc8+DXfu3Xfq93eqd3+mye6eLFi/zFX/wFT3va03ja057GVVf9b3XixAle7uVejtd//dfnfvfdd9+tP/qjP/o5//AP//Db9913361cddVVV1111VVX/ddBD3rQg7jqqquuuuqqq676r3DNNdc8+LVf+7Xf653e6Z0+m2e6ePEif/EXf8Fv/MZvcNV/Lttc9V/nxIkTPPShD+XlXu7leOhDHwrAfffdd+s//MM//PaP/uiPfs599913K1ddddVVV1111VX/+dCDHvQgrrrqqquuuuqqq/4zXXPNNQ9+x3d8x896ndd5nffmmX7913+dv/zLv+TixYtcddW/xDb/m504cYKXe7mX4/Vf//UBuO+++279h3/4h9/+0R/90c+57777buWqq6666qqrrrrqPw960IMe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ddVVV/1Luq57742NjbcupRARRASSkMR6veYJT3gCi8WChzzkITzkIQ8B4NZbb+Wqq/69JCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUjiv8Px48d5lVd5Fd72bd8WgKc//el853d+JxcvXsQ2tgGwjW0yk/V6favt3+Gqq6666qqrrrrqhaMcP36cq6666qqrrrrqqn/J1tbWV81msweXUogIIoKIICKICNbrNU984hORxIMf/GAe8pCH8DIv8zLM53NuvfVWrrrqfwtJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQk8fy8zuu8Du/6ru/KQx7yEAB++7d/m5/6qZ8CwDb3sw2AbWyTmYzj+D1cddVVV1111VVXvXDoQQ96EFddddVVV1111VX/ktOnT7vve2qtlFKICCKCiCAiiAgkIYmTJ0/yVm/1VjzoQQ8CYHd3l5/+6Z/m1ltv5ar/Hra56n+W48eP8z7v8z4cP34cgN3dXb7ne76HixcvYpvMxDaZSWaSmbTWaK0xTRNHR0e3Xrp06SFcddVVV1111VVXvXDoQQ96EFddddVVV1111VUvTES89+nTp7+r6zpqrUQEpRQigohAEhGBJCICSUjipV7qpXit13otjh07BsDu7i4//dM/za233spVV70wtvm/6vjx47zN27wND37wgwHY3d3lb/7mb/id3/kdbGMb29gmM8lMbNNaIzNprTFNE8MwcO7cudcBfpurrrrqqquuuuqqFww96EEP4qqrrrrqqquuuuqFWSwW33Xs2LH3rrVSSqGUQkQQEUQEEYEkIgJJSEISkjh+/Dgv9VIvxWu8xmtwv93dXf76r/+a3/7t3+aqq/6nsM1/ptd+7dfmZV7mZTh+/DgAly5d4nd/93f5m7/5GwBsY5vMxDa2yUxsk5lkJplJa41pmhjHkd3d3e8ehuF9uOqqq6666qqrrnrB0IMe9CCuuuqqq6666qqrXpgTJ048fT6fP7jWSimFUgoRQUQgiYggIpCEJCQREUhCEpI4duwYL/mSL8lLvMRLcOzYMQB2d3f567/+a2699VZuvfVWrrrq/5rjx4/z0i/90rz2a78297t06RJ/+7d/y+/93u9hGwDb2MY2tslMbGObzCQzyUwyk8xkmibGceTo6OjW/f39h3DVVVddddVVV131gqEH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tvmPZBvb2OY/km1sY5v/SLaxzX8029jmP5NtbGObq656UR0eHvIP//APALzO67zOe3HVVVddddVV/z4EV1111VVXXfXv9GIv9mKvDfC3f/u3/GexjW1s81/NNraxzX8l29jGNv9VbGMb29jmP5ttbGMb2/xnso1tbPOfwTa2sc1/BtvY5j+abWzzH802tvmPZBvb/EezjW3+s9nGNlf97yWJ/yrPeMYzAHixF3ux137xF3/x1+aqq6666qqr/u0Irrrqqquuuurf4XVe53XeC+Cee+5hf38f2/xns41tbPNfzTa2sY1t/qvYxja2sc1/FdvYxja2+c9mG9vY5j+TbWxjm/8MtrGNbf6j2cY2tvmPZBvb2OY/km1s8x/JNrb5j2Yb2/xns41trrrqhTk8POTs2bMAPPaxj30trrrqqquuuurfjuCqq6666qqr/h3e8R3f8bMBnvrUp3I/29jmv4JtbGOb/w62sY1t/ivZxja2sc1/FdvYxjb/2WxjG9vY5j+LbWxjm/8MtrGNbf6j2cY2tvmPZBvb/EeyjW3+I9nGNv/RbGOb/2y2sc1V/z0k8Z9NEi8KSTw/t956KwCv+7qv+z5cddVVV1111b8dlauuuuqqq676N3qxF3ux177mmmseDLC1tcVLvdRL8T+FJP6/ksT/dZL4304S/5tI4n86SfxvJomr/mW2+e9km/8Mtnlum5ubAJw5c+ZBL/ZiL/ba//AP//DbXHXVVVddddW/HpWrrrrqqquu+jc6e/bsrb/1W7/13a/zOq/z3i/1Ui/FVVddddVVV131H+8f/uEffvvs2bO3ctVVV1111VX/NlSuuuqqq6666t/ovvvuu/W3fuu3vue+++67lauuuuqqq6666j/FP/zDP/zOfffddytXXXXVVVdd9W+DHvSgB3HVVVddddVVV1111VVXXXXVVVddddVVV/2fROWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fxT8CEZzqnPLb9JAAAAAASUVORK5CYII=) + +```js +// Loft a square and a circle on the `XZ` plane using offset. +squareSketch = startSketchOn(XZ) + |> startProfile(at = [-100, 200]) + |> line(end = [200, 0]) + |> line(end = [0, -200]) + |> line(end = [-200, 0]) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) + |> close() + +circleSketch = startSketchOn(offsetPlane(XZ, offset = 150)) + |> circle(center = [0, 100], radius = 50) + +loft([squareSketch, circleSketch]) +``` + +![Rendered example of offsetPlane 1](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAEaS0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV131/8zrvM7rvPeLvdiLvRZXXXXVVVf9v/MP//APv/Nbv/Vb381VV1111VVX/f9B5aqrrrrqqqv+H3md13md9/7wD//w7+Kqq6666qr/l17sxV7stQF+67d+67u56qqrrrrqqv8fqFx11VVXXXXV/yMv9mIv9lo806/92q/x/5Ftrnr+bHPVVVf957DNf7dXfdVX5Zprrnnwi73Yi73W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e/xXs81/NEncTxLPTRIAknh+JHG/48ePc9VVV1111VVX/ZtRueqqq6666qqr/k3uu+++W8+cOfNgng/bSMI2knhutgGQxHOzDYAknpttACTxL7HNA0nihbGNJB7INpK4n20k8S/5kz/5E972bd+WRzziEfzVX/0VtpHE82MbSTw320jiRWEbSTyQbSTxb2EbSfxLNjc3efCDH8w111zDNddcwwMdHh7y9Kc/nbNnz3LffffxL7HN/weHh4cAPP3pT+fpT386m5ubbG5ucubMGa655hquueYatra2eNjDHsZLvuRLcnBwwFOf+lSe+tSn8t/NNv9atnlBbHO/l3/5lwfgH/7hH/i3sM2/hW1s8x9FEv8SSTw/krifJB7o+PHj3Hfffbdy1VVXXXXVVVf9W1C56qqrrrrqqqv+Tc6ePXvr6dOnH8yLwDaSALCNJP4ltgGQxHOzjST+p7rzzju58847ufHGG7nuuuu45557sI0knh/bSOJFYRtJvChsI4kHso0k/rVsIwmAa665hoc85CE85CEP4YEODw95+tOfzj/8wz9w1Yvm8PCQw8ND7rvvPv7hH/6Bzc1NrrnmGh784AdzzTXXsLW1xXXXXcdLvdRLce+993LPPffwlKc8hfvZ5rnZ5rnZ5rnZ5vmxzb+GbZ4f27wgtrnfox71KLa3t9nb2+P222/HNv8VbPPvJQkASdxPEveTxP0kcT9JAEjiuUniuUni7Nmzt3LVVVddddVVV/1bULnqqquuuuqqq/5Hs40knpttACTx72UbSfxHevzjH8+NN97Iy7zMy/BLv/RLANhGEi8q20jiudlGEg9kG0n8W9hGEi/M5uYmD33oQ3nxF39xHujw8JCnP/3p/MM//ANX/fsdHBxwcHDA0572NDY3N7nmmmt4yEMewjXXXMPW1hYPe9jDeKmXeinuuecenvrUp3L33XfzH8k2z49tnh/b/GvZ5oEe9ahHAfBHf/RHvChs8/zY5kVlm/9MkrifJO4niedHEgCSeCBJABw/fpz77rvvVq666qqrrrrqqn8LKlddddVVV1111b/Jfffdd+uZM2f417CNJB7INg8kiedmGwBJPDfbAEjiP5JtJPGC2EYSz802krjzzjsBuP7667nuuuu45557ALCNJJ6bbSTx3GwjiedmG0k8kG0k8UC2kcQD2UYSL4xtJPHiL/7iPPShD2Vzc5P7HR4e8vSnP52///u/518iiavANv9ah4eHPP3pT+fpT386m5ubXHPNNTzkIQ/hmmuu4eEPfzgPf/jDOTg44K//+q95ylOeAoBtnptt/jPY5gWxzfNjmwe64YYbuOGGGwD4h3/4B/69bPPC2MY2/xEk8UCSeCBJ3E8Sz00SAJJ4fiRxv+PHj3Px4kWuuuqqq6666qp/EypXXXXVVVddddW/yX333XfrS7zES/BAtpHEA9lGEs/NNgCSeCDbAEjiudlGEs+PbQAk8aKyDYAk/iW2kcTzYxtJPND+/j5/+qd/yiu+4ivyMi/zMvzSL/0S97ONJJ6bbSTx3Gwjif9MtpEEwObmJg996EN5iZd4CQAODw85PDzk6U9/Ok9/+tM5PDzkRWWbfytJ/E9hm/9Oh4eHPP3pT+fpT386m5ubPOQhD+HFX/zF2dra4tVf/dV56Zd+aZ7ylKfw5Cc/mYODA/4ltnlutnl+bPOvYZsX1aMe9SgA/uEf/oEXxDb/GraxjW1sYxvb2OY/gyTuJ4l/iSSeH0ncTxLP7b777ruVq6666qqrrrrq34LKVVddddVVV131b3L27NlnnDlzhhfENpK4n20kAWAbSbwwtgGQxAPZBkASz49tACTxwthGEv+ZHv/4x/OKr/iKbG9vc91113HPPfdwP9tI4rnZRhLPzTaSeCDbSOKBbCOJB7KNJB7INpJ4oM3NTR760IfyEi/xEtzv8PCQpz/96fz93/89/9Vsc9XzOjw85O///u95+tOfzjXXXMNDHvIQrrnmGl76pV+ahz/84dxzzz08+clP5p577uHfyzbPj22eH9u8ILZ5bo961KMA+KM/+iP+NWzz30kSL4gk7ieJ+0nifpIAkMRzk8Rze/CDH8zv//7vP4OrrrrqqquuuurfgspVV1111VVXXfVvct99993KfwHbSOK52UYSL4htXhhJvCC2kcS/1/7+PnfeeSc33ngjj3jEI7jnnnt4INtI4rnZRhLPzTaSeCDbSOKBbCOJB7KNJJ6fzc1NXuVVXoVrr72W+/393/89T3/60zk8POSq/xls80AHBwccHBzwtKc9jc3NTV7iJV6ChzzkITz84Q/n4Q9/OPfccw9/+Zd/yT333MMD2ea52eZFZZvnxzYviG2e2+u8zusA8LjHPY69vT3+u9jm30sSDySJ+0nifpJ4fiTxgkjiqquuuuqqq676d6Fy1VVXXXXVVVf9m505c4Z/LdtI4l/DNgCSeCDbSOI/km0k8R/lN37jN3jP93xPrr/+ep4f20jiudlGEi8K20jigWwjiRdmY2ODV33VV+Xaa68F4PDwkKc97Wn8/d//Pf8SSVz1H8s2/1aHh4f88R//MX/3d3/HQx7yEF7iJV6C6667jjd90zfl4OCA3/3d3+Wee+7hX8M2/xFs8/w86lGPAuAf/uEf+Lewzb+HbWzzH0USDySJ+0niuUkCQBL3k8T9JHG/48ePc999993KVVddddVVV131b0Hlqquuuuqqq676Nzl79uytAGfOnOHs2bPczzaSeCDbSOK52eYFkcRzs40kHsg2AJL4z2IbSdzPNpJ4Uezv73PnnXdy44038vCHP5ynPOUpPDfbSOK52UYSD2QbSfxb2EYSm5ubvOqrvirXXnstAIeHhzztaU/j7//+73lR2eZFJYn/r2zzX+nw8JC///u/5+lPfzoPechDeImXeAm2trZ40zd9Uw4ODvjd3/1d7r77bh7INs/NNs+PbZ4f2zw/tnl+HvWoRwFwxx13cMcdd/Avsc1/JNv8W0nifpJ4IEm8IJIAkMTzI4n7SeK5nT179lauuuqqq6666qp/CypXXXXVVVddddW/y5kzZzh79izPj20kcT/bSALANpJ4QWwDIIkHso0knpttACTxb2UbSfxH+7M/+zNuvPFGXvZlX5YnP/nJSOK52UYSz802kngg20jigWwjiQeyjSTut7W1xau+6qty7bXXAnB4eMjTnvY0/v7v/57/TLb5jyKJ/2y2+d/u8PCQv//7v+fpT386D3nIQ3iJl3gJtra2eNM3fVOe/OQn85d/+ZccHBzwr2Gb58c2z49tXpCXf/mXB+Bxj3scz49t/rPY5j+SJB5IEveTxPMjCQBJPDdJPNDx48cBuO+++27lqquuuuqqq676t6By1VVXXXXVVVf9m9x33323AtjmP5NtACRxP9sASOK52UYS/1q2kcS/lm0k8cLs7e1x5513cuONN3L99ddz9913I4nnZhtJPDfbSOKBbCOJB7KNJB7INtvb2zz0oQ/lpV7qpQA4PDzkaU97Gn//93/P/za2uer5s81zOzg44O/+7u942tOexkMf+lBe4iVegkc84hFcf/31POlJT+JJT3oSBwcHPJBtXlS2eX5s84I88pGP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w8Pdf/iHf/ids2fPPuPBD37wS29ubh6fzWY8/OEP5ylPeQrr9Zr/KpK46r+Hbf432tnZ4f3f//05duwYAPfdd9+tX/IlX/I2P/qjP/o5XHXVVVddddVVV/33oxw/fpyrrrrqqquuuuqq/wluvfXWv/6zP/uznzk8PNx98Rd/8deezWY8/OEPZzabcccdd/C/hST+v7HN/0c33XQT7/Ee78H9/uEf/uG3P/7jP/5lzp49eytXXXXVVVddddVV/zNQjh8/zlVXXXXVVVddddX/FIeHh7v/8A//8Dtnz559xoMf/OCXPnny5PGbb74ZgDvuuIOrrvqf4lVe5VV44zd+YwDuu+++W7/kS77kbX70R3/0c7jqqquuuuqqq676n4Vy/Phxrrrqqquuuuqqq/6nufXWW//6z/7sz37m8PBw98Vf/MVf++abb+amm27icY97HFdd9d9pZ2eHt3zLt+TFXuzFAPiHf/iH3/74j//4lzl79uytXHXVVVddddVVV/3Pgx70oAdx1VVXXXXVVVdd9T/Z67zO67z3h3/4h38XwN7eHj/6oz/K3t4eV131X21nZ4d3fMd3ZGdnh/vuu+/Wr//6r3+ff/iHf/htrrrqqquuuuqqq/7nQg960IO46qqrrrrqqquu+p/uzJkzD/rcz/3c377mmmsevLe3xz/8wz/wR3/0R1x11X8W2zzQi73Yi/HGb/zGANx33323fuZnfuZrnz179hlcddVVV1111VVX/c9GOX78OFddddVVV1111VX/0x0dHV36sz/7s585PDzcfbmXe7nXvvnmmwG44447uOqqfwvbvCh2dnZ4q7d6K17u5V4OgN/6rd/67s/6rM96naOjo0tcddVVV1111VVX/c9HOX78OFddddVVV1111VX/GxweHu7+wz/8w+8AvPiLv/hr33zzzbzYi70Y9913H3t7e1x1FYBt/qPcfPPNvPVbvzXXXHMNAJ/5mZ/5Or/wC7/wNVx11VVXXXXVVVf970E5fvw4V1111VVXXXXVVf+b/MM//MPv/PZv//b3POQhD3npm2+++cE333wzfd9z++238y+RxFX/+9jmv9qrvMqr8MZv/MbMZjPuu+++Wz/+4z/+ZW699da/5qqrrrrqqquuuup/F8rx48e56qqrrrrqqquu+t/m8PBw9+///u9/+/DwcPflXu7lXvvmm2/mxV/8xTl79ix7e3v8R5PEVf9+tvmfbmdnh/d8z/fk4Q9/OAA/8iM/8tlf+qVf+jaHh4e7XHXVVVddddVVV/3vgx70oAdx1VVXXXXVVVdd9b/ZNddc8+DP+ZzP+a1rrrnmwXt7e/z93/89f/RHf8T/FpL4n8Y2/x+9yqu8Cq/6qq8KwH333Xfr13/917/PP/zDP/w2V1111VVXXXXVVf97UY4fP85VV1111VVXXXXV/2aHh4e7f/Znf/Yzh4eHuy/3ci/32jfffDMv/uIvzmw244477uCqq/4lN998Mx/wAR/AzTffDMCP/MiPfPaXfumXvs3Zs2dv5aqrrrrqqquuuup/N/SgBz2Iq6666qqrrrrqqv8rzpw586CP+IiP+O4Xe7EXe22A22+/nV/+5V9mb2+Pq656bjs7O7zxG78xN998MwD33XffrZ/5mZ/52mfPnn0GV1111VVXXXXVVf83UI4fP85VV1111VVXXXXV/xVHR0eXfuu3fut7AF78xV/8tY8dO8YjHvEIZrMZd9xxB1ddBbCzs8PLvuzL8tZv/dYcO3aM++6779af//mf/+ov/dIvfZujo6NLXHXVVVddddVVV/3fgR70oAdx1VVXXXXVVVdd9X/RNddc8+DXfu3Xfq93eqd3+myAvb09/v7v/54/+qM/4qr/v17lVV6FV33VV+V+P/IjP/LZP/qjP/o5XHXVVVddddVVV/3fhB70oAdx1VVXXXXVVVdd9X/ZmTNnHvQRH/ER3/1iL/Zirw2wt7fHP/zDP/CHf/iHXPX/x80338wbv/Ebs7OzA8B9991362d+5me+9tmzZ5/BVVddddVVV1111f9d6EEPehBXXXXVVVddddVV/x+8zuu8znu/4zu+42ddc801DwbY29vjD//wD/mHf/gHrvrfzzbPz80338wbv/Ebc+zYMQDuu+++W3/0R3/0c37rt37ru7nqqquuuuqqq676vw896EEP4qqrrrrqqquuuur/i2uuuebBL/ZiL/ba7/iO7/hZ11xzzYMB9vb2+MM//EP+4R/+gav+57DNv8eLvdiL8aqv+qocO3YMgPvuu+/W3/qt3/ruH/3RH/0crrrqqquuuuqqq/7/QA960IO46qqrrrrqqquu+v/mzJkzD3qd13md936d13md977mmmseDLC3t8ff//3f84d/+Ie8KCRx1Qtmm/8Or/qqr8qLv/iLs7OzA8B9991362/91m9994/+6I9+DlddddVVV1111VX//6AHPehBXHXVVVddddVVV/1/dc011zz4xV7sxV77Hd/xHT/rmmuueTDApUuX+Id/+Af+/u//nr29Pa76n29nZ4cXf/EX51Vf9VW533333Xfrb/3Wb333j/7oj34OV1111VVXXXXVVf9/oQc96EFcddVVV1111VVX/X93zTXXPPjFXuzFXut1Xud13vvFXuzFXhvg0qVL3HHHHfz93/89t99+O1f9z7Ozs8OLv/iL86qv+qrc77777rv1t37rt777R3/0Rz+Hq6666qqrrrrqqqvQgx70IK666qqrrrrqqquuek4f/uEf/l2v8zqv894806VLl/iHf/gH/vAP/5Cr/nvt7Ozw4i/+4rzYi70Yx44d437/8A//8Ns/8iM/8jn/8A//8NtcddVVV1111VVXXXU/9KAHPYirrrrqqquuuuqqq57XNddc8+DXfu3Xfq/XeZ3Xee9rrrnmwQCXLl3ijjvu4LbbbuMf/uEfuOq/zs7ODi/+4i/Oq77qq3K/++6779bf+q3f+u7f/u3f/p777rvvVq666qqrrrrqqquuem7oQQ96EFddddVVV1111VVXvWDXXHPNg1/sxV7stV/ndV7nvV7sxV7stXmmS5cucfvtt/MP//AP3H777Vz1H29nZ4cXf/EX51Vf9VW5dOkSx44dA+C+++679Ud/9Ec/57d+67e+m6uuuuqqq6666qqrXhj0oAc9iKuuuuqqq6666qqrXjTXXHPNg1/7tV/7vV78xV/8tV/sxV7stXmmvb09brvtNv7hH/6B22+/nav+7XZ2dnjxF39xXvVVX5UHuu+++279rd/6re/+0R/90c/hqquuuuqqq6666qoXFXrQgx7EVVddddVVV1111VX/etdcc82DX/u1X/u9XvzFX/y1X+zFXuy1eaZLly5x++23c/vtt3P77bezt7fHVS/Yzs4OL/7iL87Ozg4v/uIvzgPdd999t/7Wb/3Wd//2b//299x33323ctVVV1111VVXXXXVvxZ60IMexFVXXXXVVVddddVV/z5nzpx50Ou8zuu894u/+Iu/9ou92Iu9Ng9w6dIlbr/9dm6//Xb+4R/+gf/vdnZ2OHbsGDfffDMv9mIvxrFjx3ig++6779bf+q3f+u7f+q3f+u6zZ88+g6uuuuqqq6666qqr/j3Qgx70IK666qqrrrrqqquu+o9zzTXXPPjFXuzFXvvFXuzFXut1Xud13pvncunSJW6//XZuv/129vb2uP322/m/wDbPz7Fjx3ixF3sxAG655RZuvvlmHui+++679ezZs7f+1m/91vf81m/91ndz1VVXXXXVVVddddV/JPSgBz2Iq6666qqrrrrqqqv+c1xzzTUPPnPmzINf7MVe7LVe/MVf/LVf7MVe7LV5Lnt7e1y6dIlLly5x++23c+nSJW6//Xb+tzl27BgAN998Mzs7O9xyyy3cfPPNPD/33Xffrb/1W7/13f/wD//wO//wD//w21x11VVXXXXVVVdd9Z8FPehBD+Kqq6666qqrrrrqqv8aZ86ceZAknTlz5sGv8zqv817XXHPNg1/sxV7stXk+Ll26xN7eHpcuXeL2228H4NKlS9x+++38dzl27BgAOzs73HzzzQDccsst3Hzzzbwg9913363/8A//8Nv33Xffrf/wD//wO//wD//w21x11VVXXXXVVVdd9V8FPehBD+Kqq6666qqrrrrqqv8+Z86cedA111zzkGuuuebBL/ZiL/Za11xzzYNf7MVe7LV5IS5dugTA3t4ely5dAuDSpUvs7e1xv0uXLvGvcezYMQB2dna437Fjxzh27Bg7OzscO3aMf8l999136z/8wz/89n333XfrP/zDP/zOP/zDP/w2V1111VVXXXXVVVf9d0IPetCDuOqqq6666qqrrrrqf5YzZ848SJLOnDnz4GuuuebBL/ZiL/Za11xzzYMBXuzFXuy1+S9233333XrNNdc8+L777rsV4OzZs7f+1m/91vecOXPmQf/wD//wO2fPnr31vvvuu5Wrrrrqqquuuuqqq/6nQQ960IO46qqrrrrqqquuuup/l2uuuebBAGfOnHnQNddc8xCAM2fOPOiaa655MM90zTXXPJh/hfvuu+9WgPvuu+9Wnuns2bPPuO+++55+9uzZZ9x33323ctVVV1111VVXXXXV/zboQQ96EFddddVVV1111VVXXXXVVVddddVVV1111f9JVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4p/BHmuq1YS1y0sAAAAAElFTkSuQmCC) + +```js +// Loft a square and a circle on the `YZ` plane using offset. +squareSketch = startSketchOn(YZ) + |> startProfile(at = [-100, 200]) + |> line(end = [200, 0]) + |> line(end = [0, -200]) + |> line(end = [-200, 0]) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) + |> close() + +circleSketch = startSketchOn(offsetPlane(YZ, offset = 150)) + |> circle(center = [0, 100], radius = 50) + +loft([squareSketch, circleSketch]) +``` + +![Rendered example of offsetPlane 2](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAFq/klEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXV/wnXXHPNgwHOnDnz4H/4h3/4ba666qqrrrrqqquuuuqqq4By/Phxrrrqqquuuuqq/92uueaaB3/TN33T01/xFV/xrd/8zd/8o6+55poH33rrrX9zeHi4y1VXXXXVVVddddVVV131/xnl+PHjXHXVVVddddVV/7t90id90k9dc801D77nnnuO//mf/zmv//qv/9Kv+Iqv+Nabm5vHz549+4zDw8Ndrrrqqquuuuqqq6666qr/jyjHjx/nqquuuuqqq6763+tzP/dzf+vFXuzFXvvixYt81Vd9FU972tP4sz/7M0opx9/qrd7qtV/xFV/xrTc3N4//wz/8w+9w1VVXXXXVVVddddVVV/1/Qzl+/DhXXXXVVVddddX/Tp/7uZ/7Wy/2Yi/22hcvXuSbvumbWK1WAKxWK5761KfyZ3/2Z5RSjr/VW73Va7/O67zOe29ubh7/h3/4h9/hqquuuuqqq6666qqrrvr/gnL8+HGuuuqqq6666qr/fd7xHd/xs17ndV7nvQG+53u+h7vuuosHksRqteKpT30qf/Znf8bp06ePv+EbvuFrv87rvM57b25uHv+Hf/iH3+Gqq6666qqrrrrqqquu+r+Ocvz4ca666qqrrrrqqv9dXuzFXuy1P+IjPuK7Ab75m7+Zpz3taUhCEs9NEsvlkn/4h3/gz/7sz3jkIx95/DVe4zVe+3Ve53Xee3Nz8/g//MM//A5XXXXVVVddddVVV1111f9VlOPHj3PVVVddddVVV/3v8WIv9mKv/bmf+7m/BfCjP/qj/MM//AMPJInnJglJLJdL/vzP/5ynPvWp3Hzzzcdf4zVe47Vf53Ve572Pjo4u3XrrrX/NVVddddVVV1111VVXXfV/DXrQgx7EVVddddVVV131v8M111zz4G/6pm96OsBf/MVf8KM/+qPczzbPzTbPzTb3e/mXf3ne8A3fkJMnT3Lffffd+vVf//Xv8w//8A+/zVVXXXXVVVddddVVV131fwXl+PHjXHXVVVddddVV/zt80id90k9dc801D37a057G937v9/JAknhukpDEA0nifnfddRd///d/z1133cUjHvGI42/6pm/63tdcc82Db7311r85PDzc5aqrrrrqqquuuuqqq676345y/Phxrrrqqquuuuqq//k+93M/97de7MVe7LWf9rSn8a3f+q1I4rlJQhLPTRIPJAlJAKxWK+666y7+/u//ntVqxcu+7Mu+9Gu91mu99UMe8pCXvvXWW//m8PBwl6uuuuqqq6666qqrrrrqfyvK8ePHueqqq6666qqr/mf73M/93N96sRd7sde+ePEiX/u1X8v9JCGJ5yaJ5yYJSTyQJO63Wq146lOfyt///d8TEcdf//Vf/6Vf8RVf8a03NzePnz179hmHh4e7XHXVVVddddVVV1111VX/21COHz/OVVddddVVV131P9c7vuM7ftbrvM7rvDfA93//97O7u8tzk8Rzk4QknpskHkgSkrjfarXiaU97Gn/2Z39GRBx/q7d6q9d+xVd8xbfe3Nw8/g//8A+/w1VXXXXVVVddddVVV131vwnl+PHjXHXVVVddddVV/zO92Iu92Gt/xEd8xHcDfNu3fRtPe9rTAJDEc5OEJJ6bJCTxQJKQxANJ4oFWqxVPe9rT+LM/+zMi4vhbvdVbvfbrvM7rvPfm5ubxf/iHf/gdrrrqqquu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koQkJCEJSUhCEpKQhCQkIYmIQBKSkIQkJBERSEISkpBERCCJiEASkpCEJCICSUQEkogIJBERSCIikIQkIgJJSCIikIQkJBERSEISkpCEJCQhCUkASEISkgCQBIAkACTx3CRxP9sAHB0dcXR0BMB9991364/+6I9+zm/91m99N1ddddVVV1111VVX/W9C5aqrrrrqqquuuuzs2bO3XnPNNQ/e2tpif3+fF5VtJPG/hST+PSRxP0kASOIFkQSAJJ6bJAAkcT9J3E8S95OEJO4nCUlIQhIviCQkIYn7SUISkpCEJCQhCUlIQhKSkIQkIgJJSEISkogIJCEJSUhCEpKICCQREUgiIpBERCCJiEASEYEkJBERSCIikIQkJBERSEISkpCEJCQhCUlIQhKSkASAJAAkASAJAEm8MOM4sr+/T2sNgB/5kR/57B/90R/9HK666qqrrrrqqquu+t+IylVXXXXVVVddddl9991364u92IuxtbXF/waSeG6S+PeQxP0kcT9JvCgkASAJAEkASAJAEgCSeG6SuJ8k7icJSdxPEpKQxANJQhKSkIQkJCEJSUhCEpK4nyQkIQlJSEISkpCEJCQhCUlIIiKQhCQkIYmIQBIRgSQiAklEBJKICCQREUgiIpBERCCJiEASkogIJCGJiEASkpCEJCICSUhCEpKQBIAkJCEJAElIAkAS95PE89Na4/DwkOVyCcB9991369d//de/zz/8wz/8NlddddVVV1111VVX/W9F5aqrrrrqqquuuuy+++67FWB7e5v/SSTxn0US/1aSAJDEv4UkACRxP0ncTxKSuJ8kJPFAkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpBERCAJSUhCEhGBJCICSUQEkogIJBERSCIikEREIImIQBIRgSQiAklIIiKQhCQiAklIIiKQhCQkIQlJSEISkpCEJAAkIQkASQBI4n6SeG4HBwccHBxwvx/5kR/57B/90R/9HK666qqrrrrqqquu+t+OylVXXXXVVVdd9Ry2t7exjST+t5PEA0niBZHE8yOJ+0niBZEEgCQAJAEgCQBJAEjifpIAkMT9JCGJ+0lCEveThCQkIYkXlSQkIQlJSAJAEpKQBIAkJCEJSUhCEpKICCQhCUlIQhKSkIQkJBERSCIikEREIImIQBIRgSQiAklEBJKQREQgCUlE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gkji+ZHECyMJAEk8P5IAkMRzk8T9JPFAknggSUjiRSEJSTyQJCQBIIn7bW9v86AHPYi+7wH4rd/6re/++q//+vfhqquuuuqqq6666qqrrvr3onLVVVddddVVV/2Lzp49e+s111zz4K2tLfb39/mvIIl/K0kASOIFkcTzI4kHksRzk4QkJCEJSUhCEpKQxANJQhL3kwTAbDbj9OnTXH/99QDcd999t37913/9+/zDP/zDb3PVVVddddVVV1111VVX/UegctVVV1111VVX/a8kiX8LSTw3STyQJB5IEv8WkpDE/SQhCYAbb7yRG264gfv9yI/8yGf/6I/+6Odw1VVXXXXVVVddddVVV/1HonLVVVddddVVV/2L/v7v//63X+zFXuy1r7/+eu6++27+o0jiX0MSz00SLwpJPDdJ3E8SDySJB5KEJP4lkpCEJB5IEgCz2YyHPexhbG9vA/AP//APv/31X//173PffffdylVXXXXVVVddddVVV131H43KVVddddVVV131H0YS/1aSeH4k8aKQBIAkACQBIInnJonnRxIPJInnJglJSEISkpCEJCTx3CQhCYCbbrqJm266CYD77rvv1h/90R/9nN/6rd/6bq666qqrrrrqqquuuuqq/yxUrrrqqquuuuqqf9E//MM//A7ADTfcwF/+5V8CIIl/iSQeSBIvCkm8MJL4t5DEc5PEA0nigSTxbyEJSQDs7OzwiEc8gtlsBsCP/MiPfPaP/uiPfg5XXXXVVVddddVVV1111X82KlddddVVV1111f8KknhuknhRSOK5SeJ+knggSTyQJCTxL5GEJCQBMJvNeOQjH8mxY8cAuO+++279+q//+vf5h3/4h9/mqquuuuqqq6666qqrrvqvQOWqq6666qqrrvoXnT179laA7e1t/qNI4j+KJAAkASAJAEm8qCTxL5GEJCQhCUlIQhKSeKBbbrmFBz3oQdzvR37kRz77R3/0Rz+Hq6666qqrrrrqqquuuuq/EpWrrrrqqquuuupfdN99990KsLW1xX8GSdxPEveTxH80SdxPEi+IJCTxrzWfz3n0ox/NsWPHAPiHf/iH3/7Mz/zM1+Gqq6666qqrrrrqqquu+u9A5aqrrrrqqquuepHcd999t15zzTUP3t7eZn9/n+cmiRdGEv8RJPFvIYn7SeJ+krifJJ6bJCTxL5HEgx/8YB784AcDcN9999369V//9e/zD//wD7/NVVddddVVV1111VVXXfXfhcpVV1111VVXXfUiOXv27K3XXHPNg7e2ttjf3+dfIon/KJJ4bpIAkMTzIwkASfxrSOL5kYQkJCEJSUhCEidOnOBlXuZluN+P/MiPfPaP/uiPfg5XXXXVVVddddVVV1111X83KlddddVVV1111b+aJP49JPEvkcS/hiQAJPGCSOJ+krifJB5IEpL4l8zncx772Mdy4sQJAO67775bv/7rv/59/uEf/uG3ueqqq6666qqrrrrqqqv+J6By1VVXXXXVVVe9SP7+7//+t1/sxV7sta+//nruuece/qNI4n6SeGEk8W8hiX+JJJ6bJF6Qhz70oTz0oQ8F4L777rv1t37rt777R3/0Rz+Hq6666qqrrrrqqquuuup/EipXXXXVVVddddV/Okn8R5LEi0ISz00S95PEA0niuUlCEpKQxMbGBi/3ci/HYrEA4B/+4R9++zM/8zNfh6uuuuqqq6666qqrrrrqfyIqV1111VVXXXXVi+Qf/uEffgfghhtu4K/+6q94IEn8Z5HECyIJAEkASAJAEs9NEveTxP0k8UCSeH4WiwU33ngjD3vYwwC47777bv36r//69/mHf/iH3+aqq6666qqrrrrqqquu+p+KylVXXXXVVVdd9R9OEi+IJP4lkviPIol/iSQeSBKSuN+NN97IS7zES3C/H/mRH/nsH/3RH/0crrrqqquuuuqqq6666qr/6ahcddVVV1111VUvkrNnz94KsLW1xX8USdxPEi+MJP41JPHcJHE/STyQJJ7bxsYGL/mSL8nJkycB+Id/+Iff/rqv+7r3Pnv27DO46qqrrrrqqquuuuqqq/43oHLVVVddddVVV/2rbG9v819FEs9NEgCSeH4k8dwk8fxI4oEkcb9HPOIRPOIRjwDgvvvuu/W3fuu3vvtHf/RHP4errrrqqquuuuqqq6666n8TKlddddVVV1111Yvkvvvuu/W+++679Zprrnnw1tYWBwcHvCgk8Z9JEgCSeFFI4oEk8UCnT5/mpV7qpVgsFgD8yI/8yGf/6I/+6Odw1VVXXXXVVVddddVVV/1vROWqq6666qqrrnqR3Xfffbdec801D97e3ubg4AAASTyQJP49JPHcJPFvIYn7SeJ+knggSWxsbHDzzTfzyEc+EoD77rvv1q//+q9/n3/4h3/4ba666qqrrrrqqquuuuqq/62oXHXVVVddddVV/2UkcT9J3E8SLwpJvDCSAJDEv8YjH/lIHvWoR3G/H/mRH/nsH/3RH/0crrrqqquuuuqqq6666qr/7ahcddVVV1111VUvsn/4h3/47Rd/8Rd/7euvv567776b/0ySeEEkASAJAEm8IJK4nyTuJ4mNjQ1e5mVehtOnTwPwD//wD7/99V//9e9z33333cpVV1111VVXXXXVVVdd9X8Blauuuuqqq6666j+NJP67SOKFedSjHsWjH/1oAO67775bf/RHf/Szf+u3fut7uOqqq6666qqrrrrqqqv+L6Fy1VVXXXXVVVe9yP7hH/7htwGuv/56/jNI4rlJ4l9DEs9NEvc7c+YML/uyL8vGxgYAP/IjP/LZP/qjP/o5XHXVVVddddVVV1111VX/F1G56qqrrrrqqqv+zSTxQJJ4QSRxP0ncTxIvCkk8P5IAkMRzk8T9NjY2ePmXf3lOnz4NwH333Xfr13/917/PP/zDP/w2V1111VVXXXXVVVddddX/VVSuuuqqq6666qoX2X333XcrwNbWFv+ZJPGCSAJAEi+qxzzmMTzmMY/hfj/yIz/y2T/6oz/6OVx11VVXXXXVVVddddVV/9dRueqqq6666qqr/tW2t7f5l0jiX0MS/1EkAbCxscHLv/zLc+bMGQD+4R/+4bc/8zM/83W46qqrrrrqqquuuuqqq/6/oHLVVVddddVVV73Izp49+4z77rvv1muuuebBW1tbHB4e8p9JEv8akgDY2NjgwQ9+MI997GMBuO+++279+q//+vf5h3/4h9/mqquuuuqqq6666qqrrvr/hMpVV1111VVXXfWvcvbs2VuvueaaB29vb3N4eMj9JPGCSOJ+krifJJ6bJJ6bJAAkASAJAEkASOJ+Z86c4bVf+7W534/8yI989o/+6I9+DlddddVVV1111VVXXXXV/0dUrrrqqquuuuqqfxNJ/E+yubnJK77iK3LmzBkA7rvvvls/67M+63Xuu+++W7nqqquuuuqqq6666qqr/r+ictVVV1111VVX/av8/d///W+/2Iu92Gtfd9113H333fxHkMRzk8SL6sVe7MV4sRd7MQDuu+++W3/rt37ru3/0R3/0c7jqqquuuuqqq6666qqr/r+jctVVV1111VVX/YeTxL9EEi8KSbwgm5ubvM7rvA6bm5sA/NZv/dZ3f/3Xf/37cNVVV1111VVXXXXVVVdddQWVq6666qqrrrrqX+Xs2bPPALj++uv5q7/6K/4lkrifJF4YSbwgkgCQxObmJg95yEN48Rd/cQDuu+++W7/+67/+ff7hH/7ht7nqqquuuuqqq6666qqrrno2KlddddVVV1111b/KfffddyvPRRL/VR7ykIfwSq/0StzvR37kRz77R3/0Rz+Hq6666qqrrrrqqquuuuqq50Xlqquuuuqqq676Vzl79uytANvb2/xHkMRzk8Rz29zc5JVf+ZW55pprAPiHf/iH3/76r//697nvvvtu5aqrrrrqqquuuuqqq6666vmjctVVV1111VVX/YeSxL9EEi8KSQC8xEu8BC/xEi8BwH333Xfrb/3Wb333j/7oj34OV1111VVXXXXVVVddddVVLxyVq6666qqrrrrqX+W+++679b777rv1mmuuefDW1hYHBwe8IJK4nyReGEk8t2uuuYZXeZVXYXNzE4Af+ZEf+ewf/dEf/Ryuuuqqq6666qqrrrrqqqteNFSuuuqqq6666qp/tbNnz956zTXXPHh7e5vDw0P+o21ubvKSL/mSPPShDwXgvvvuu/Xrv/7r3+cf/uEffpurrrrqqquuuuqqq6666qoXHZWrrrrqqquuuuq/jSSe20u+5Evyki/5ktzvR37kRz77R3/0Rz+Hq6666qqrrrrqqquuuuqqfz0qV1111VVXXXXVv9p9991364u92Itx3XXXcc8993A/SfxLJPH8bG5u8qqv+qpce+21APzDP/zDb3/913/9+9x33323ctVVV1111VVXXXXVVVdd9W9D5aqrrrrqqquu+le77777buVfIIn7SeKFeamXeile8iVfEoD77rvv1q//+q9/n3/4h3/4ba666qqrrrrqqquuuuqqq/59qFx11VVXXXXVVf9qZ8+efQbA9ddfz1//9V/zb3Xttdfyqq/6qmxtbQHwIz/yI5/9oz/6o5/DVVddddVVV1111VVXXXXVfwwqV1111VVXXXXVv9p99913K/8OW1tbvNqrvRrXXnstAPfdd9+tX//1X/8+//AP//DbXHXVVVddddVVV1111VVX/cehctVVV1111VVX/audPXv2VoDt7W3uJ4l/iSRe6qVeipd6qZcC4L777rv1t37rt777R3/0Rz+Hq6666qqrrrrqqquuuuqq/3hUrrrqqquuuuqq/3CSuJ8kALa2tni1V3s1rrvuOgD+4R/+4bc/8zM/83W46qqrrrrqqquuuuqqq676z0Plqquuuuqqq676V7vvvvtuve+++2695pprHry1tcXBwQEvyNbWFg972MN46Zd+aQDuu+++W7/+67/+ff7hH/7ht7nqqquuuuqqq6666qqrrvrPReWqq6666qqrrvo3OXv27K3XXHPNg7e3tzk4OOD5ue6663jjN35j7vcjP/Ijn/2jP/qjn8NVV1111VVXXXXVVVddddV/DSpXXXXVVVddddW/myQeaGtri1d/9VfnuuuuA+C+++679TM/8zNf++zZs8/gqquuuuqqq6666qqrrrrqvw6Vq6666qqrrrrq3+S+++679cVe7MW47rrruOeee7jfy7zMy/DSL/3SANx33323/tZv/dZ3/+iP/ujncNVVV1111VVXXXXVVVdd9V+PylVXXXXVVVdd9W9y33333coDbG1t8SZv8iZsbW0B8Fu/9Vvf/fVf//Xvw1VXXXXVVVddddVVV1111X8fKlddddVVV1111b/J2bNnnwFw/fXXA/AyL/MyANx33323fv3Xf/37/MM//MNvc9VVV1111VVXXXXVVVdd9d+LylVXXXXVVVdd9W9y33333Qpw3XXXcd111wHwIz/yI5/9oz/6o5/DVVddddVVV1111VVXXXXV/wyU48ePc9VVV1111VVX/etJYnNz8/hDHvKQl/6Hf/iH3/6sz/qs1/nTP/3Tn+Gqq6666qqrrrrqqquuuup/DvSgBz2Iq6666qqrrrrq3+51Xud13uu3fuu3voerrrrqqquuuuqqq6666qr/edCDHvQgrrrqqquuuuqqq6666qqrrrrqqquuuuqq/5OoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V/FPwIUVOz/Rm9U3gAAAABJRU5ErkJggg==) + +```js +// Loft a square and a circle on the `-XZ` plane using offset. +squareSketch = startSketchOn(-XZ) + |> startProfile(at = [-100, 200]) + |> line(end = [200, 0]) + |> line(end = [0, -200]) + |> line(end = [-200, 0]) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) + |> close() + +circleSketch = startSketchOn(offsetPlane(-XZ, offset = -150)) + |> circle(center = [0, 100], radius = 50) + +loft([squareSketch, circleSketch]) +``` + +![Rendered example of offsetPlane 3](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAECxUlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV131/8zrvM7rvPeLvdiLvRZXXXXVVVf9v/MP//APv/Nbv/Vb381VV1111VVX/f9B5aqrrrrqqqv+H3md13md9/7wD//w7+Kqq6666qr/l17sxV7stQF+67d+67u56qqrrrrqqv8fqFx11VVXXXXV/yMv9mIv9lo80w/90A/xH0US/50k8e8hif8JJPHvJYn/iSTxv4Ek/jNJ4v8DSfxv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V1111VVX/etdc801D37t137t93rxF3/x136xF3ux1+aZLly4wFOe8hSe8pSn8JSnPIULFy7wopLEv5ck/r0k8R9BEv+SEydO8Aqv8AqcOHGCV3iFV+CB7rvvvlt/67d+67t/+7d/+3vuu+++W7nqqquuuuqqq6666l8LPehBD+Kqq6666qqrrrrqqn+fM2fOPOh1Xud13vvFX/zFX/vFXuzFXpsHuHDhAk95ylN4ylOewp/+6Z/ygkji30MS/16S+PeSxAtz4sQJTp48ycMe9jBe/uVfnpMnT/JA9913362/9Vu/9d2/9Vu/9d1nz559BlddddVVV1111VVX/XugBz3oQVx11VVXXXXVVVdd9R/nmmuuefCLvdiLvfaLvdiLvdbrvM7rvDfP5cKFCzzlKU/hKU95ChcuXOCpT30q/x6S+PeSxL+XJJ6fEydO8Aqv8AoAPOxhD+NhD3sYD3Tffffdevbs2Vt/67d+63t+67d+67u56qqrrrrqqquuuuo/EnrQgx7EVVddddVVV1111VX/Oa655poHnzlz5sEv9mIv9lov/uIv/tov9mIv9to8lwsXLnDhwgUuXLjAU5/6VC5cuMBTnvIU/iWS+PeSxL+XJABOnDgBwMMe9jBOnjzJwx72MB72sIfx/Nx33323/tZv/dZ3/8M//MPv/MM//MNvc9VVV1111VVXXXXVfxb0oAc9iKuuuuqqq6666qqr/mucOXPmQZJ05syZB7/O67zOe11zzTUPfrEXe7HX5vm4cOECFy5c4MKFCzz1qU8F4MKFCzzlKU9BEv8ekvi3OHnyJAAnTpzg4Q9/OAAPe9jDeNjDHsYLct999936D//wD79933333foP//APv/MP//APv81VV1111VVXXXXVVf9V0IMe9CCuuuqqq6666qqrrvrvc+bMmQddc801D7nmmmse/GIv9mKvdc011zz4xV7sxV6bF+LChQsAXLx4kQsXLgBw4cIFLly4wP0uXLjAc5PEC3Ly5EkATpw4wf1OnjzJyZMnOXHiBCdPnuRfct999936D//wD79933333foP//APv/MP//APv81VV1111VVXXXXVVf+d0IMe9CCuuuqqq6666qqrrvqf5cyZMw+SpDNnzjz4mmuuefCLvdiLvdY111zzYIAXe7EXe23+i9133323XnPNNQ++7777bgU4e/bsrb/1W7/1PWfOnHnQP/zDP/zO2bNnb73vvvtu5aqrrrrqqquuuuqq/2nQgx70IK666qqrrrrqqquu+t/lmmuueTDAmTNnHnTNNdc8BODMmTMPuuaaax7MM11zzTUP5l/hvvvuuxXgvvvuu5VnOnv27DPuu+++p589e/YZ9913361cddVVV1111VVXXfW/DXrQgx7EVVddddVVV1111VVXXXXVVVddddVVV131fxKVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6v4h8B8itPbNrYINsAAAAASUVORK5CYII=) + +```js +// A circle on the XY plane +startSketchOn(XY) + |> startProfile(at = [0, 0]) + |> circle(radius = 10, center = [0, 0]) + +// Triangle on the plane 4 units above +startSketchOn(offsetPlane(XY, offset = 4)) + |> startProfile(at = [0, 0]) + |> line(end = [10, 0]) + |> line(end = [0, 10]) + |> close() +``` + +![Rendered example of offsetPlane 4](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAACDrUlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rCK666qqrrrrqqquuuuqqq/4Puuaaax7MVVddddVVV11F5aqrrrrqqquuuuqqq6666v+Ia6655sGv/dqv/V6v8zqv897XXHPNg3/rt37ru++7775bf/RHf/RzuOqqq6666qr/n9CDHvQgrrrqqquuuuqqq6666qqr/je75pprHvyO7/iOn/U6r/M67w3wu7/7u98FMJ/Ptx784Ae/wmd91me9zn333XcrV1111VVXXfX/D3rQgx7EVVddddVVV1111VVXXXXV/zbXXHPNg1/7tV/7vd7pnd7pswF+93d/97t4Pq699tqHT9PUPvMzP/N1uOqqq6666qr/f6hcddVVV1111VVXXXXVVVf9L3HNNdc8+LVf+7Xf63Ve53Xe+5prrnkwwO/+7u9+Fy/EpUuX7nnFV3zFd3id13md9/6t3/qt7+aqq6666qqr/n9BD3rQg7jqqquuuuqqq6666qqrrvqf7JprrnnwO77jO37W67zO67w3wO/+7u9+F/8K8/l868EPfvArfNZnfdbr3Hfffbdy1VVXXXXVVf9/oAc96EFcddVVV1111VVXXXXVVVf9T3PNNdc8+LVf+7Xf653e6Z0+G+B3f/d3v4t/h9d8zdd8n9/6rd/67q//+q9/H6666qqrrrrq/w8qV1111VVXXXXVVVddddVV/0Ncc801D37t137t93qd13md977mmmseDPC7v/u738V/gD/90z/9sdd5ndd573/4h3/4nd/6rd/6bq666qqrrrrq/wf0oAc9iKuuuuqqq6666qqrrrrqqv9O11xzzYNf+7Vf+73e6Z3e6bMBfvd3f/e7+E8wn8+3HvzgB7/Ch3zIhzyEq6666qqrrvr/AT3oQQ/iqquuuuqqq6666qqrrrrqv9o111zz4Nd+7dd+r3d6p3f6bIDf/d3f/S7+C7zma77m+/zWb/3Wd3/913/9+3DVVVddddVV//ehBz3oQVx11VVXXXXVVVddddVVV/1XuOaaax782q/92u/14i/+4q/9Yi/2Yq8N8Lu/+7vfxX+h+Xy+9Yqv+Irv8Jmf+Zmv8w//8A+/zVVXXXXVVVf934Ye9KAHcdVVV1111VVXXXXVVVdd9Z/pmmuuefBrv/Zrv9c7vdM7fTbA7/7u734X/42OHTt23fXXX/+YD/mQD3kIV1111VVXXfV/G3rQgx7EVVddddVVV1111VVXXXXVf7Rrrrnmwa/92q/9Xu/0Tu/02QC/+7u/+138D/Kar/ma7/Nbv/Vb3/31X//178NVV1111VVX/d9F5aqrrrrqqquuuuqqq6666j/INddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe22A3/3d3/0u/gf60z/90x97sRd7sdd+8Rd/8df++7//+9/mqquuuuqqq/5vQg960IO46qqrrrrqqquuuuqqq67697jmmmse/Nqv/drv9U7v9E6fDfC7v/u738X/Atdee+3DT548ecsHf/AHP5irrrrqqquu+r+Jcvz4ca666qqrrrrqqquuuuqqq/61rrnmmge/2Zu92Ud9+Id/+He/0zu902dfuHDh6c94xjP++hnPeMZf87/E4eHhhcc+9rGvDfAP//APv8NVV1111VVX/d+DHvSgB3HVVVddddVVV1111VVXXfWiuOaaax782q/92u/14i/+4q/9Yi/2Yq8N8Lu/+7vfxf9i8/l868EPfvArfP3Xf/37/MM//MNvc9VVV1111VX/t6AHPehBXHXVVVddddVVV1111VVXvTDXXHPNg1/7tV/7vd7pnd7pswF+93d/97v4P+Taa699+IkTJ27+kA/5kIdw1VVXXXXVVf+3UI4fP85VV1111VVXXXXVVVddddVzu+aaax78Zm/2Zh/14R/+4d/9Tu/0Tp994cKFpz/jGc/462c84xl/zf8xh4eHFx772Me+DsA//MM//A5XXXXVVVdd9X8HetCDHsRVV1111VVXXXXVVVddddX93vEd3/GzXvzFX/y1X+zFXuy1AX73d3/3u/h/YD6fbz34wQ9+ha//+q9/n3/4h3/4ba666qqrrrrq/wb0oAc9iKuuuuqqq6666qqrrrrq/7drrrnmwa/92q/9Xu/0Tu/02QC/+7u/+138P3Tttdc+fJqm9pmf+Zmvw1VXXXXVVVf930A5fvw4V1111VVXXXXVVVddddX/P9dcc82D3+zN3uyjPvzDP/y73+md3umzL1y48PRnPOMZf/2MZzzjr/l/qrU2vMzLvMybSdI//MM//DZXXXXVVVdd9b8fetCDHsRVV1111VVXXXXVVVdd9f/HO77jO37WNddc8+DXeZ3XeW+A3/3d3/0urnqW+Xy+9ZCHPOQVP/MzP/O177vvvlu56qqrrrrqqv/d0IMe9CCuuuqqq6666qqrrrrqqv/brrnmmge/9mu/9nu90zu902cD/O7v/u53cdULdO211z58mqb2mZ/5ma/DVVddddVVV/3vRjl+/DhXXXXVVVddddVVV1111f8911xzzYPf7M3e7KM+/MM//Lvf6Z3e6bMvXLjw9Gc84xl//YxnPOOvueqFaq0NL/MyL/NmZ8+efcatt97611x11VVXXXXV/17oQQ96EFddddVVV1111VVXXXXV/x2v8zqv894v9mIv9lqv8zqv894Av/u7v/tdXPWvNp/Ptx784Ae/wmd91me9zn333XcrV1111VVXXfW/E+X48eNcddVVV1111VVXXXXVVf+7XXPNNQ9+szd7s4/63M/93N9+xVd8xbe+/fbb/+oZz3jGXz/jGc/4a676N5mmaXjsYx/7Opubm8f/9E//9Ge46qqrrrrqqv+d0IMe9CCuuuqqq6666qqrrrrqqv99rrnmmge/9mu/9nu9zuu8zntfc801D/7d3/3d7+Kq/1Dz+XzrFV/xFd/hMz/zM1/nH/7hH36bq6666qqrrvrfBz3oQQ/iqquuuuqqq6666qqrrvrf43Ve53Xe+8Ve7MVe63Ve53XeG+B3f/d3v4ur/tMcO3bsuuuvv/4xH/IhH/IQrrrqqquuuup/H/SgBz2Iq6666qqrrrrqqquuuup/tmuuuebBr/3ar/1e7/RO7/TZAL/7u7/7XVz1X+Y1X/M13+e3fuu3vvvrv/7r34errrrqqquu+t8FPehBD+Kqq6666qqrrrrqqquu+p/nmmuuefBrv/Zrv9frvM7rvPc111zzYIDf/d3f/S6u+i83n8+3XvEVX/EdPvMzP/N1/uEf/uG3ueqqq6666qr/PdCDHvQgrrrqqquuuuqqq6666qr/OV7sxV7stV/ndV7nvV7ndV7nvQF+93d/97u46r/dsWPHrrv++usf8yEf8iEP4aqrrrrqqqv+90APetCDuOqqq6666qqrrrrqqqv+e11zzTUPfu3Xfu33eqd3eqfPBvjd3/3d7+Kq/3Fe8zVf831+67d+67u//uu//n246qqrrrrqqv8dqFx11VVXXXXVVVddddVV/y2uueaaB7/2a7/2e73O67zOe19zzTUPBvjd3/3d7+Kq/7H+9E//9Mde7MVe7LVf7MVe7LX/4R/+4be56qqrrrrqqv/50IMe9CCuuuqqq6666qqrrrrqqv8611xzzYPf8R3f8bNe53Ve570Bfvd3f/e7uOp/jWuvvfbhJ06cuPlDPuRDHsJVV1111VVX/c9HOX78OFddddVVV1111VVXXXXVf65rrrnmwW/2Zm/2UZ/7uZ/722/+5m/+0bfffvtfPeMZz/jrZzzjGX/NVf+rHB4eXnjsYx/7OgD/8A//8DtcddVVV1111f9s6EEPehBXXXXVVVddddVVV1111X+8a6655sGv/dqv/V6v8zqv897XXHPNgwF+93d/97u46n+9+Xy+9eAHP/gVvuEbvuF9/v7v//63ueqqq6666qr/udCDHvQgrrrqqquuuuqqq6666qr/ONdcc82DX/u1X/u93umd3umzAX73d3/3u7jq/5xrr7324SdPnrzlgz/4gx/MVVddddVVV/3PRTl+/DhXXXXVVVddddVVV1111b/PNddc8+A3e7M3+6jP/dzP/e03f/M3/+gLFy48/RnPeMZfP+MZz/hrrvo/6fDw8MJjH/vY1wb4h3/4h9/hqquuuuqqq/5nQg960IO46qqrrrrqqquuuuqqq/71rrnmmge/9mu/9nu9zuu8zntfc801Dwb43d/93e/iqv835vP51oMf/OBX+KzP+qzXue++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fcatt97611x11VVXXXXVfx70oAc9iKuuuuqqq6666qqrrvr3uuaaax782q/92u/1Oq/zOu99zTXXPBjgd3/3d7+Lq6666vmaz+dbD37wg1/hsz7rs17nvvvuu5Wrrrrqqquu+s+BHvSgB3HVVVddddVVV1111VX/Vtdcc82D3/Ed3/GzXud1Xue9AX73d3/3u7jqqqteJA960INe+uDg4NJnfuZnvg5XXXXVVVdd9Z8DPehBD+Kqq6666qqrrrrqqqv+Na655poHv/Zrv/Z7vdM7vdNnA/zu7/7ud3HVVVf9q83n861XfMVXfIev//qvf5/f+q3f+m6uuuqqq6666j8eetCDHsRVV1111VVXXXXVVVf9S6655poHv/Zrv/Z7vc7rvM57X3PNNQ8G+N3f/d3v4qqrrvp3mc/nWw9+8INf4bM+67Ne57777ruVq6666qqrrvqPReWqq6666qqrrrrqqqteiGuuuebB7/iO7/hZr/M6r/PeAL/7u7/7XU94whO46qqr/mOsVquDa6655sHv+I7v+Flf//Vf/z5cddVVV1111X8s9KAHPYirrrrqqquuuuqqq656oGuuuebBr/3ar/1e7/RO7/TZAL/7u7/7XVx11VX/aebz+dYrvuIrvsNnfdZnvc7f//3f/zZXXXXVVVdd9R8HPehBD+Kqq6666qqrrrrqqquuueaaB7/2a7/2e73O67zOe19zzTUPBvjd3/3d7+Kqq676L3Hs2LHrbrjhhsd+8Ad/8IO56qqrrrrqqv846EEPehBXXXXVVVddddVVV/3/dc011zz4tV/7td/rnd7pnT4b4Hd/93e/i6uuuuq/xWu+5mu+z2/91m9999d//de/D1ddddVVV131HwM96EEP4qqrrrrqqquuuuqq/5muueaaB/MAZ86ceTAPcM011zyY5+PMmTMP4kXwTu/0Tp8N8Lu/+7vfxVVXXfXfbj6fb73iK77iO3zmZ37m6/zDP/zDb3PVVVddddVV/37oQQ96EFddddVVV1111VVX/ee45pprHgxw5syZB19zzTUPBjhz5syDAK655poHA1xzzTUP5pnOnDnzYIBrrrnmwfwX+N3f/d3v4qqrrvof5dixY9ddf/31j/mQD/mQh3DVVVddddVV/37oQQ96EFddddVVV1111VVXveiuueaaB585c+bB11xzzYPPnDnzIIBrrrnmwddcc82DAc6cOfPga6655sG8EL/7u7/7Xfw3mM/nW6/4iq/4Dlx11VX/o/3Wb/3Wd3/913/9+3DVVVddddVV/37oQQ96EFddddVVV1111VVXXXHNNdc8+MyZMw++5pprHnzmzJkHAbz4i7/4awO82Iu92GvzfPzu7/7ud/G/yIMe9KCX5n+RBz3oQS/DC3Dffffdes011zwY4L777rv17Nmzt95333233nfffbdy1VX/i/3DP/zD7/zDP/zDb3PVVVddddVV/37oQQ96EFddddVVV1111VX/X1xzzTUPPnPmzIOvueaaB585c+ZB11xzzYOvueaaB7/Yi73Ya/N8/O7v/u53cdX/eK/5mq/5PjyX++6779azZ8/eet99990K8A//8A+/c99999169uzZW++7775bueqqq6666qqrrvr/AT3oQQ/iqquuuuqqq6666v+Sa6655sEAL/ZiL/baZ86cedCLv/iLvzbAi73Yi702D/C7v/u738VV/2+85mu+5vvwTPfdd9+tAP/wD//w2wD/8A//8Dv33Xffrf/wD//w21x11VVXXXXVVVf934Ie9KAHcdVVV1111VVXXfW/0TXXXPPgM2fOPPjFXuzFXgvgxV/8xV/7xV7sxV6bB/jd3/3d7+Kqq/4Fr/mar/k+PNPZs2efcd999z39vvvuu/Uf/uEffue+++679ezZs7fed999t3LVVVddddVVV131vw960IMexFVXXXXVVVddddX/ZNdcc82DAV77tV/7vQBe/MVf/LVf7MVe7LV5gN/93d/9Lq666j/Ya77ma74Pz3Tffffdevbs2Vvvu+++W//hH/7hd+67775b/+Ef/uG3ueqqq6666qqrrvqfDT3oQQ/iqquuuuqqq6666n+Ka6655sFnzpx58Iu92Iu91jXXXPPg13md13lvHuB3f/d3v4urrvpv9pqv+ZrvwzPdd999t/7DP/zDb9933323/sM//MPv/MM//MNvc9VVV1111VVXXfU/B3rQgx7EVVddddVVV1111X+Ha6655sFnzpx58Iu92Iu91ou/+Iu/9ou92Iu9Ng/wu7/7u9/FVVf9L/Gar/ma78Mz3Xfffbf+wz/8w2/fd999t/7DP/zD7/zDP/zDb3PVVVddddVVV1313wM96EEP4qqrrrrqqquuuuq/wjXXXPPg137t134vgNd5ndd572uuuebBPNPv/u7vfhdXXfV/zGu+5mu+D89033333foP//APv/0P//APv3Pffffd+g//8A+/zVVXXXXVVVddddV/PvSgBz2Iq6666qqrrrrqqv9o11xzzYPPnDnz4Bd7sRd7rRd/8Rd/7Rd7sRd7bZ7pd3/3d7+Lq676f+o1X/M13wfgvvvuu/Xs2bO33nfffbf+1m/91vf8wz/8w29z1VVXXXXVVVdd9R8PPehBD+Kqq6666qqrrrrq3+uaa6558Iu92Iu99pkzZx704i/+4q/9Yi/2Yq/NM/3u7/7ud3HVVVe9QK/5mq/5PgD33Xffrf/wD//w2//wD//wO7/1W7/13Vx11VVXXXXVVVf9+6EHPehBXHXVVVddddVVV/1rXXPNNQ9+sRd7sdc+c+bMg17ndV7nva+55poHA/zu7/7ud3HVVVf9u7zma77m+wCcPXv2GX//93//W//wD//wO7/1W7/13Vx11VVXXXXVVVf966EHPehBXHXVVVddddVVV/1LrrnmmgefOXPmwS/2Yi/2Wi/+4i/+2i/2Yi/22gC/+7u/+11cddVV/6le8zVf830A7rvvvlv/4R/+4Xd+67d+67v/4R/+4be56qqrrrrqqquu+pehBz3oQVx11VVXXXXVVVc9P9dcc82DX/u1X/u9XvzFX/y1X+zFXuy1AX73d3/3u7jqqqv+W73ma77m+9x33323nj179ta///u//+1/+Id/+J1/+Id/+G2uuuqqq6666qqrnhd60IMexFVXXXXVVVdddRXANddc8+AzZ848+MVe7MVe653e6Z0+m2f63d/93e/iqquu+h/pNV/zNd8H4L777rv1H/7hH377H/7hH37nt37rt76bq6666qqrrrrqqivQgx70IK666qqrrrrqqv+/rrnmmge/9mu/9nu9+Iu/+Gu/2Iu92GsD/O7v/u53cdVVV/2v9Jqv+Zrvc99999169uzZZ/zWb/3Wd9933323/sM//MNvc9VVV1111VVX/X+FHvSgB3HVVVddddVVV/3/cs011zz4tV/7td/rdV7ndd77mmuueTDA7/7u734XV1111f8pr/mar/k+APfdd9+tv/Vbv/Xd//AP//A7//AP//DbXHXVVVddddVV/5+gBz3oQVx11VVXXXXVVf/3XXPNNQ9+7dd+7fd6p3d6p8/mmX73d3/3u7jqqqv+X3jN13zN9wG47777bv2Hf/iH3/6t3/qt7/mHf/iH3+aqq6666qqrrvq/Dj3oQQ/iqquuuuqqq676v+maa6558Gu/9mu/1zu90zt9NsDv/u7vfhdXXXXVVcBrvuZrvs9999136z/8wz/8zm/91m999z/8wz/8NlddddVVV1111f9F6EEPehBXXXXVVVddddX/Hddcc82DX/u1X/u93umd3umzAX73d3/3u7jqqquueiFe8zVf833uu+++W//hH/7ht3/rt37re/7hH/7ht7nqqquuuuqqq/6vQA960IO46qqrrrrqqqv+d7vmmmse/Nqv/drv9Tqv8zrvfc011zwY4Hd/93e/i6uuuuqqf6XXfM3XfJ+zZ88+4zd/8ze/6x/+4R9+5x/+4R9+m6uuuuqqq6666n8z9KAHPYirrrrqqquuuup/n2uuuebBr/3ar/1er/M6r/Pe11xzzYMBfvd3f/e7uOqqq676D/Car/ma7wNw33333fpbv/Vb3/2jP/qjn8NVV1111VVXXfW/EXrQgx7EVVddddVVV131v8c111zz4Hd8x3f8rNd5ndd5b4Df/d3f/S6uuuqqq/4TveZrvub7nD179hl///d//1v/8A//8Du/9Vu/9d1cddVVV1111VX/W6AHPehBXHXVVVddddVV/7Ndc801D37t137t93qnd3qnzwb43d/93e/iqquuuuq/wWu+5mu+z3333Xfrb/3Wb333b//2b3/PfffddytXXXXVVVddddX/ZOhBD3oQV1111VVXXXXV/0yv8zqv894v9mIv9lqv8zqv894Av/u7v/tdXHXVVVf9D/Car/ma7wPwD//wD7/9W7/1W9/zW7/1W9/NVVddddVVV131PxF60IMexFVXXXXVVVdd9T/HNddc8+DXfu3Xfq93eqd3+myA3/3d3/0urrrqqqv+B3vN13zN97nvvvtu/a3f+q3v/u3f/u3vue+++27lqquuuuqqq676nwI96EEP4qqrrrrqqquu+u93zTXXPPgd3/EdP+t1Xud13hvgd3/3d7+Lq6666qr/RV7zNV/zfc6ePfuMv//7v/+t3/qt3/qef/iHf/htrrrqqquuuuqq/27oQQ96EFddddVVV1111X+fd3zHd/ys13md13nva6655sG/+7u/+11cddVVV/0f8Jqv+Zrvc9999936W7/1W9/9oz/6o5/DVVddddVVV1313wU96EEP4qqrrrrqqquu+q91zTXXPPi1X/u13+ud3umdPhvgd3/3d7+Lq6666qr/g17zNV/zfc6ePfuM3/zN3/yuH/3RH/0crrrqqquuuuqq/2roQQ96EFddddVVV1111X+Na6655sGv/dqv/V7v9E7v9NkAv/u7v/tdXHXVVVf9P/Car/ma73Pffffd+lu/9Vvf/du//dvfc999993KVVddddVVV131XwE96EEP4qqrrrrqqquu+s91zTXXPPgd3/EdP+t1Xud13hvgd3/3d7+Lq6666qr/h17zNV/zfe67775b/+Ef/uF3fuu3fuu7/+Ef/uG3ueqqq6666qqr/jOhBz3oQVx11VVXXXXVVf85rrnmmge/4zu+42e9zuu8znv/7u/+7ndx1VVXXXXVs7zma77m+/zDP/zDb//Ij/zI5/zDP/zDb3PVVVddddVVV/1nQA960IO46qqrrrrqqqv+Y11zzTUPfsd3fMfPep3XeZ33/t3f/d3v4qqrrrrqqhfoNV/zNd/nvvvuu/Xrv/7r3+cf/uEffpurrrrqqquuuuo/EuX48eNcddVVV1111VX/Ma655poHf9InfdJPvc/7vM9X33777X/1jGc846+56qqrrrrqhXrGM57x1+fOnbv1vd/7vb/6mmuuefDh4eGls2fP3spVV1111VVXXfUfgXL8+HGuuuqqq6666qp/n2uuuebB7/M+7/NVH/7hH/7dT3jCE37rGc94xl9z1VVXXXXVv8oznvGMv44I3vu93/urr7nmmgcfHh5eOnv27K1cddVVV1111VX/HpTjx49z1VVXXXXVVVf921xzzTUPfrM3e7OP+qRP+qSfvv322//qGc94xl9z1VVXXXXVv8sznvGMv44I3vu93/urr7nmmofceuutf314eLjLVVddddVVV131b4Ee9KAHcdVVV1111VVX/etcc801D37t137t93qnd3qnzwb43d/93e/iqquuuuqq/xSPfvSjX+e3fuu3vvtHf/RHP4errrrqqquuuupfCz3oQQ/iqquuuuqqq6560b3jO77jZ73TO73TZwP87u/+7ndx1VVXXXXVf7rXfM3XfJ/77rvv1t/6rd/67h/90R/9HK666qqrrrrqqhcVetCDHsRVV1111VVXXfUve7EXe7HX/vAP//Dvuuaaax78u7/7u9/FVVddddVV/+Ve8zVf833Onj37jB/5kR/57N/6rd/6bq666qqrrrrqqn8JetCDHsRVV1111VVXXfWCXXPNNQ/+8A//8O96sRd7sdf+3d/93e/iqquuuuqq/3av+Zqv+T7/8A//8Ntf//Vf/z733XffrVx11VVXXXXVVS8I5fjx41x11VVXXXXVVc/fO77jO37WJ33SJ/30E57whN96xjOe8ddcddVVV131P8IznvGMv14ul7vv8A7v8Nmbm5vH/+Ef/uF3uOqqq6666qqrnh/0oAc9iKuuuuqqq6666jm92Iu92Gt/+Id/+Hddc801D/7d3/3d7+Kqq6666qr/sV7zNV/zfc6ePfuM3/zN3/yuH/3RH/0crrrqqquuuuqqB6IcP36cq6666qqrrrrqimuuuebB7/M+7/NV7/u+7/vVf/EXf/FTz3jGM/6aq6666qqr/kd7xjOe8dfnzp17+pu92Zt9zDXXXPPgW2+99W8ODw93ueqqq6666qqrANCDHvQgrrrqqquuuuoqeMd3fMfPeqd3eqfPBvjd3/3d7+Kqq6666qr/dV7zNV/zfe67775bf+u3fuu7f/RHf/RzuOqqq6666qqr0IMe9CCuuuqqq6666v+za6655sEf/uEf/l0v9mIv9tq/+7u/+11cddVVV131v95rvuZrvs8//MM//PbXf/3Xv8999913K1ddddVVV131/xfl+PHjXHXVVVddddX/V6/zOq/z3p/7uZ/7W094whN+6xnPeMZfc9VVV1111f8Jz3jGM/56uVzuvsM7vMNnb25uHv+Hf/iH3+Gqq6666qqr/n+iHD9+nKuuuuqqq676/+aaa6558Cd90if91Ju/+Zt/9O/+7u9+F1ddddVVV/2fdO7cuVvf7M3e7GOuueaaB996661/c3h4uMtVV1111VVX/f9COX78OFddddVVV131/8mLvdiLvfZXfMVX/NU111zz4N/93d/9Lq666qqrrvo/7RnPeMZfv/Zrv/b7vOIrvuJbb21tnfiHf/iH3+aqq6666qqr/v+gHD9+nKuuuuqqq676/+Id3/EdP+ud3umdPvsv/uIvfuoZz3jGX3PVVVddddX/C894xjP++ty5c7e+6Zu+6UcD/MM//MPvcNVVV1111VX/P6AHPehBXHXVVVddddX/dddcc82DP/zDP/y7XuzFXuy1f/d3f/e7uOqqq6666v+t13zN13yf++6779bP+qzPep377rvvVq666qqrrrrq/zbK8ePHueqqq6666qr/y17sxV7stb/iK77ir57whCf81jOe8Yy/5qqrrrrqqv/XnvGMZ/z1uXPnbn2Hd3iHz97c3Dz+D//wD7/DVVddddVVV/3fRTl+/DhXXXXVVVdd9X/VO77jO37WR3zER3z37/7u734XV1111VVXXfUA586du/XN3uzNPkaS/uEf/uG3ueqqq6666qr/m9CDHvQgrrrqqquuuur/mmuuuebBH/7hH/5dL/ZiL/bav/u7v/tdXHXVVVddddUL8Jqv+Zrvc9999936WZ/1Wa9z33333cpVV1111VVX/d9COX78OFddddVVV131f8k111zz4M/5nM/5rYc85CEv/bu/+7vfxVVXXXXVVVe9EM94xjP++rGPfezrvOIrvuJb/9mf/dnPHB4e7nLVVVddddVV/3dQjh8/zlVXXXXVVVf9X/FiL/Zir/0VX/EVf/UXf/EXP/WMZzzjr7nqqquuuuqqF8EznvGMvz537tyt7/AO7/DZm5ubx//hH/7hd7jqqquuuuqq/xsox48f56qrrrrqqqv+L3id13md9/6kT/qkn/rd3/3d7+Kqq6666qqr/g3OnTt365u92Zt9jCT9wz/8w29z1VVXXXXVVf/7UY4fP85VV1111VVX/W/34R/+4d/1Tu/0Tp/9u7/7u9/FVVddddVVV/07POMZz/jrN33TN/1ogH/4h3/4Ha666qqrrrrqfzfK8ePHueqqq6666qr/zT73cz/3t17xFV/xrX/3d3/3u7jqqquuuuqq/wDPeMYz/vrN3uzNPuaaa6558J/+6Z/+DFddddVVV131vxd60IMexFVXXXXVVVf9b/W5n/u5v/ViL/Zir/27v/u738VVV1111VVX/Qd7zdd8zfe57777bv2QD/mQh3DVVVddddVV/zsRXHXVVVddddX/Up/7uZ/7Wy/2Yi/22r/7u7/7XVx11VVXXXXVf4Lf/d3f/a5rrrnmwd/0Td/0dK666qqrrrrqfyeCq6666qqrrvpf5pprrnnw537u5/7Wi73Yi7327/7u734XV1111VVXXfWf6Hd/93e/65prrnnwN3/zN9/KVVddddVVV/3vQ3DVVVddddVV/4tcc801D37t137t93qxF3ux1/7d3/3d7+Kqq6666qqr/gv87u/+7nedOXPmQd/0Td/09GuuuebBXHXVVVddddX/HpTjx49z1VVXXXXVVf9bfNInfdJPvc7rvM57/+7v/u53cdVVV1111VX/hZ7xjGf89WMf+9jXecVXfMW3/rM/+7OfOTw83OWqq6666qqr/udDD3rQg7jqqquuuuqq/w0+93M/97de7MVe7LV/93d/97u46qqrrrrqqv8mr/mar/k+9913360f8iEf8hCuuuqqq6666n8+gquuuuqqq676X+BzP/dzf+vFXuzFXvt3f/d3v4urrrrqqquu+m/0u7/7u991zTXXPPibvumbns5VV1111VVX/c9HOX78OFddddVVV131P9nnfu7n/taLvdiLvfbv/u7vfhdXXXXVVVdd9T/AM57xjL9+7GMf+zrXXHPNg//0T//0Z7jqqquuuuqq/7kox48f56qrrrrqqqv+p/rwD//w73rFV3zFt/7d3/3d7+Kqq6666qqr/gd5xjOe8dev/dqv/T4A//AP//A7XHXVVVddddX/TJTjx49z1VVXXXXVVf8Tvc7rvM57v9M7vdNn/+7v/u53cdVVV1111VX/Az3jGc/46zd7szf7GIB/+Id/+B2uuuqqq6666n8eyvHjx7nqqquuuuqq/2le7MVe7LU/6ZM+6ad+93d/97u46qqrrrrqqv/BnvGMZ/z1K7zCK7zN0dHRpVtvvfWvueqqq6666qr/WSjHjx/nqquuuuqqq/4nueaaax78FV/xFX/1u7/7u9/FVVddddVVV/0vcO7cuVtf67Ve673/7M/+7GcODw93ueqqq6666qr/OdCDHvQgrrrqqquuuup/ks/93M/9rfPnzz+dq6666qqrrvpf5tGPfvTrfMiHfMhDuOqqq6666qr/OQiuuuqqq6666n+Qz/3cz/2tF3uxF3ttrrrqqquuuup/oWuuuebBH/7hH/5dXHXVVVddddX/HJTjx49z1VVXXXXVVf8TvNiLvdhrv9M7vdNn/+7v/u53cdVVV1111VX/Cz3jGc/469d+7dd+H4B/+Id/+B2uuuqqq6666r8f5fjx41x11VVXXXXVf7drrrnmwV/xFV/xV7/7u7/7XVx11VVXXXXV/2LPeMYz/voVXuEV3ubWW2/9m7Nnz97KVVddddVVV/33Qg960IO46qqrrrrqqv9un/u5n/tb58+ffzpXXXXVVVdd9X/Eox/96Nf5kA/5kIdw1VVXXXXVVf+9CK666qqrrrrqv9k7vuM7ftaLvdiLvTZXXXXVVVdd9X/INddc8+B3fMd3/Cyuuuqqq6666r8X5fjx41x11VVXXXXVf5cXe7EXe+2P+IiP+O7f/d3f/S6uuuqqq6666v+QZzzjGX/9Cq/wCm9z6623/s3Zs2dv5aqrrrrqqqv+e6AHPehBXHXVVVddddV/l8/93M/9rfPnzz+dq6666qqrrvo/aD6fbz34wQ9+hQ/5kA95CFddddVVV13134Pgqquuuuqqq/6bvM7rvM57v9iLvdhrc9VVV1111VX/R61Wq4Nrrrnmwa/zOq/z3lx11VVXXXXVfw/0oAc9iKuuuuqqq6767/ATP/ET/t3f/d3v4qqrrrrqqqv+D5vP51sPechDXvGDP/iDH8xVV1111VVX/dcjuOqqq6666qr/Bu/4ju/4WVx11VVXXXXV/wOr1ergzJkzD/rwD//w7+Kqq6666qqr/usRXHXVVVddddV/sWuuuebB7/RO7/TZv/u7v/tdXHXVVVddddX/A3/6p3/6Yy/2Yi/22tdcc82Dueqqq6666qr/WpTjx49z1VVXXXXVVf+V3ud93uerhmHYPzw8vMBVV1111VVX/T8wTdNQSqm33HLLS/7pn/7pz3DVVVddddVV/3UIrrrqqquuuuq/0DXXXPPg13md13nve++99ylcddVVV1111f8jly5duud1Xud13vvFXuzFXpurrrrqqquu+q9DOX78OFddddVVV131X+V93ud9vmoYhv3Dw8MLXHXVVVddddX/I9M0DavV6uD06dO3/Omf/unPcNVVV1111VX/NQiuuuqqq6666r/INddc8+DXeZ3Xee977733KVx11VVXXXXV/0OXLl2658Ve7MVe+5prrnkwV1111VVXXfVfg+Cqq6666qqr/ou84zu+42dx1VVXXXXVVf+PrVarg2uuuebB7/iO7/hZXHXVVVddddV/DSpXXXXVVVdd9V/kdV7ndd77d3/3d7+Lq6666qqrrvp/7E//9E9/7MVe7MVem6uuuuqqq676r0Fw1VVXXXXVVf8FXud1Xue9ueqqq6666qqrWK1WB9dcc82DX+d1Xue9ueqqq6666qr/fARXXXXVVVdd9V/gdV7ndd7rd3/3d7+Lq6666qqrrrqKP/3TP/2x13md13lvrrrqqquuuuo/H8FVV1111VVX/Sd7sRd7sdd+sRd7sdfmqquuuuqqq666bLVaHbzYi73Ya73Yi73Ya3PVVVddddVV/7kIrrrqqquuuuo/2eu8zuu8F1ddddVVV1111fN4sRd7sdfiqquuuuqqq/5zEVx11VVXXXXVf7IXe7EXe+3f/d3f/S6uuuqqq6666qpn+d3f/d3vep3XeZ335qqrrrrqqqv+cxFcddVVV1111X+ya6655sFcddVVV1111VXP45prrnnwi73Yi702V1111VVXXfWfh+Cqq6666qqr/hO9zuu8zntz1VVXXXXVVVe9QC/2Yi/2Wlx11VVXXXXVfx6Cq6666qqrrvpP9GIv9mKv9bu/+7vfxVVXXXXVVVdd9Tx+93d/97te/MVf/LW56qqrrrrqqv88BFddddVVV131n+h1Xud13purrrrqqquuuuoFOnPmzIO56qqrrrrqqv88BFddddVVV131n+TFXuzFXpurrrrqqquuuuqFuuaaax78Yi/2Yq/NVVddddVVV/3nILjqqquuuuqq/yTXXHPNg7nqqquuuuqqq/5FL/ZiL/ZaXHXVVVddddV/DoKrrrrqqquu+k/yYi/2Yq/1u7/7u9/FVVddddVVV131Av3u7/7ud734i7/4a3PVVVddddVV/zkIrrrqqquuuuo/yYu92Iu9NlddddVVV1111VVXXXXVVVf9dyK46qqrrrrqqv8k11xzzYO56qqrrrrqqqv+RWfOnHkwV1111VVXXfWfg8pVV1111VVXXXXVVVddddVV/62uueaaB3PVVVddddVV/zkIrrrqqquuuuo/wYu92Iu9NlddddVVV1111YvsxV7sxV6bq6666qqrrvqPR+Wqq6666qqrrrrqqquuuuqqq6666qqrrvq/iuCqq6666qqr/hNcc801D+aqq6666qqrrnqRXXPNNQ/mqquuuuqqq/7jUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVV/wnOnDnzIK666qqrrrrqqhfZmTNnHsRVV1111VVX/cejctVVV1111VVXXXXVVVddddV/q9/93d/9Lq666qqrrrrqPweVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yqCq6666qqrrrrqqquuuuqqq/5bveZrvub7nD179hlcddVVV1111X88KlddddVVV131n+R3f/d3v4urrrrqqquuuupFcubMmQdx1VVXXXXVVf/xCK666qqrrrrqP8HZs2ef8Zqv+Zrvw1VXXXXVVVdd9SI5e/bsM7jqqquuuuqq/3hUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddV/gvvuu+9WrrrqqquuuuqqF9l99913K1ddddVVV131H4/KVVddddVVV/0nOHv27K1cddVVV1111VUvsrNnz97KVVddddVVV/3Ho3LVVVddddVVV1111VVXXXXVf7v77rvvVq666qqrrrrqPx6Vq6666qqrrvpPcN99991633333cpVV1111VVXXXXVVVddddVV/52oXHXVVVddddV/krNnz97KVVddddVVV131L/qt3/qt7+aqq6666qqr/nMQXHXVVVddddV/kr//+7//ba666qqrrrrqqn/RfffddytXXXXVVVdd9Z+D4Kqrrrrqqqv+k/zDP/zD77zma77m+3DVVVddddVVV71Ar/mar/k+Z8+efQZXXXXVVVdd9Z+DylVXXXXVVVf9Jzl79uytXHXVVVddddVV/6J/+Id/+G2uuuqqq6666j8Hlauuuuqqq676T3Lffffd+g//8A+/zVVXXXXVVVdd9ULdd999t3LVVVddddVV/zmoXHXVVVddddVVV1111VVXXfXf5rd+67e+m6uuuuqqq676z0Nw1VVXXXXVVf+JfuRHfuRzXvM1X/N9uOqqq6666qqrnsdrvuZrvs8//MM//A5XXXXVVVdd9Z+HylVXXXXVVVf9J/qHf/iH3+aqq6666qqrrnqBfuu3fuu7ueqqq6666qr/PFSuuuqqq6666j/ZP/zDP/w2V1111VVXXXXV8/it3/qt7+aqq6666qqr/nMRXHXVVVddddV/st/6rd/6ntd8zdd8H6666qqrrrrqqmd5zdd8zff5h3/4h9/hqquuuuqqq/5zUbnqqquuuuqq/2T/8A//8NtcddVVV1111VXP4x/+4R9+m6uuuuqqq676z0Xlqquuuuqqq/6T3Xfffbf+wz/8w29z1VVXXXXVVVc9y2/91m99z3333XcrV1111VVXXfWfi+Cqq6666qqr/gv8yI/8yOecOnXqIVx11VVXXXXVVbzma77m+/zWb/3Wd3PVVVddddVV//moXHXVVVddddV/gbNnz97KVVddddVVV1112X333XfrP/zDP/w2V1111VVXXfWfj+Cqq6666qqr/gvcd999t/7Wb/3W97zma77m+3DVVVddddVV/4+95mu+5vv86I/+6Odw1VVXXXXVVf81qFx11VVXXXXVf5F/+Id/+O377rvvVq666qqrrrrq/7nf+q3f+m6uuuqqq6666r8GwVVXXXXVVVf9F7nvvvtu/dEf/dHPec3XfM334aqrrrrqqqv+H3rN13zN9/mRH/mRz+aqq6666qqr/utQueqqq6666qr/Qv/wD//w21x11VVXXXXV/2M/+qM/+jlcddVVV1111X8dgquuuuqqq676L3Tffffd+lu/9Vvf/Zqv+Zrvw1VXXXXVVVf9P/Kar/ma7/MjP/Ijn81VV1111VVX/dciuOqqq6666qr/Yj/6oz/6Offdd9+tXHXVVVddddX/Mz/6oz/6OVx11VVXXXXVfy2Cq6666qqrrvovdt999936oz/6o5/zmq/5mu/DVVddddVVV/0/8Jqv+Zrv8/Vf//Xvw1VXXXXVVVf91yO46qqrrrrqqv8Gv/Vbv/Xd//AP//DbXHXVVVddddX/A/fdd9+tv/Vbv/XdXHXVVVddddV/PYKrrrrqqquu+m/y9V//9e/zmq/5mu/DVVddddVVV/0f9pqv+Zrv8/Vf//Xvw1VXXXXVVVf99yC46qqrrrrqqv8m9913362/9Vu/9d2v+Zqv+T5cddVVV1111f9Br/mar/k+v/Vbv/Xd//AP//DbXHXVVVddddV/D4Krrrrqqquu+m/0oz/6o59z33333cpVV1111VVX/R9033333fr1X//178NVV1111VVX/fchuOqqq6666qr/Rvfdd9+tP/qjP/o5r/mar/k+XHXVVVddddX/Ia/5mq/5Pl//9V//Plx11VVXXXXVfy/K8ePHueqqq6666qr/TrfeeutfA7zZm73ZxzzjGc/4a6666qqrrrrqf7nXfM3XfJ/f+q3f+u5f+IVf+Bquuuqqq6666r8X5fjx41x11VVXXXXVf7ezZ88+4yEPechLL5fLXa666qqrrrrqf7nFYnHisz7rs16Hq6666qqrrvrvR3DVVVddddVV/wPcd999t37913/9+7zma77m+3DVVVddddVV/4u95mu+5vt8/dd//ftw1VVXXXXVVf8zUI4fP85VV1111VVX/U9weHi4e/bs2We8wzu8w2c/4xnP+Guuuuqq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/fVf//Xvw1VXXXXVVVf9/4Me9KAHcdVVV1111VX/X11zzTUP/vAP//DverEXe7HX/t3f/d3v4qqrrrrqqv8zXvM1X/N97rvvvlu//uu//n3+4R/+4be56qqrrrrqqv+fKMePH+eqq6666qqr/r86PDzc/Yd/+IffOTw83H2zN3uzj3nGM57x11x11VVXXfW/3mu+5mu+z4/8yI989pd+6Ze+zdmzZ2/lqquuuuqqq/7/Qg960IO46qqrrrrqqqvgmmuuefA7vuM7ftbrvM7rvPfv/u7vfhdXXXXVVVf9r/Oar/ma7/MP//APv/31X//173PffffdylVXXXXVVVddRTl+/DhXXXXVVVdddRUcHh7u3nrrrX9zeHi4+2Zv9mYf86AHPehlnvGMZ/w1V1111VVX/Y/3mq/5mu+zWCxO/PzP//xXf/3Xf/37HB4e7nLVVVddddVVVwGgBz3oQVx11VVXXXXVVc/pmmuuefBrv/Zrv9c7vdM7ffbv/u7vfhdXXXXVVVf9j/War/ma7/MP//APv/2Zn/mZr8NVV1111VVXXfXc0IMe9CCuuuqqq6666qrn75prrnnw53zO5/zWNddc8+Df/d3f/S6uuuqqq676H+M1X/M13+e+++679eu//uvf5x/+4R9+m6uuuuqqq6666vmhHD9+nKuuuuqqq6666vk7PDzc/bM/+7OfOTw83H2zN3uzj3nQgx70Ms94xjP+mquuuuqqq/7bvOZrvub7LBaLEz//8z//1V/6pV/6NmfPnr2Vq6666qqrrrrqBUEPetCDuOqqq6666qqr/mXXXHPNg1/7tV/7vd7pnd7ps3/3d3/3u7jqqquuuuq/3Gu+5mu+z4/8yI989o/+6I9+DlddddVVV1111YsCPehBD+Kqq6666qqrrnrRXXPNNQ/+8A//8O96sRd7sdf+3d/93e/iqquuuuqq/3Sv+Zqv+T7/8A//8Ntf//Vf/z733XffrVx11VVXXXXVVS8q9KAHPYirrrrqqquuuupf75prrnnwh3/4h3/Xi73Yi7327/7u734XV1111VVX/Yd7zdd8zfe57777bv36r//69/mHf/iH3+aqq6666qqrrvrXQg960IO46qqrrrrqqqv+7V7ndV7nvd7xHd/xs6+55poH/+7v/u53cdVVV1111b/ba77ma77Pfffdd+tv/dZvffeP/uiPfg5XXXXVVVddddW/FXrQgx7EVVddddVVV13173PNNdc8+LVf+7Xf63Ve53Xe+5prrnnw7/7u734XV1111VVX/au95mu+5vvcd999t/7Wb/3Wd//oj/7o53DVVVddddVVV/17oQc96EFcddVVV1111VX/Ma655poHv9iLvdhrf/iHf/h3Afzu7/7ud3HVVVddddW/6DVf8zXf57777rv1t37rt777R3/0Rz+Hq6666qqrrrrqPwp60IMexFVXXXXVVVdd9R/rzJkzD3qd13md936d13md977mmmse/Lu/+7vfxVVXXXXVVc/jNV/zNd/nvvvuu/W3fuu3vvtHf/RHP4errrrqqquuuuo/GnrQgx7EVVddddVVV131n+Oaa6558Iu92Iu99ju+4zt+1jXXXPPg3/3d3/0urrrqqquu4jVf8zXf57777rv1t37rt777R3/0Rz+Hq6666qqrrrrqPwt60IMexFVXXXXVVVdd9Z/rmmuuefCLvdiLvdbrvM7rvPeLvdiLvfbv/u7vfhdXXXXVVf8PveZrvub73Hfffbf+1m/91nf/6I/+6Odw1VVXXXXVVVf9Z0MPetCDuOqqq6666qqr/uu8zuu8znu/zuu8znudOXPmwU94whN+i6uuuuqq/wde8zVf833uu+++W3/0R3/0c37rt37ru7nqqquuuuqqq/6roAc96EFcddVVV1111VX/9a655poHv+M7vuNnvc7rvM57A/zu7/7ud3HVVVdd9X/Ia77ma74PwI/8yI989m//9m9/z3333XcrV1111VVXXXXVfzX0oAc9iKuuuuqqq6666r/PNddc8+DXfu3Xfq93eqd3+myA3/3d3/0urrrqqqv+F3vN13zN97nvvvtu/a3f+q3v/tEf/dHP4aqrrrrqqquu+u+EHvSgB3HVVVddddVVV/33u+aaax78Yi/2Yq/9Oq/zOu/1Yi/2Yq/9u7/7u9/FVVddddX/Iq/5mq/5Pvfdd9+tv/Vbv/XdP/qjP/o5XHXVVVddddVV/xOgBz3oQVx11VVXXXXVVf+zXHPNNQ9+x3d8x896ndd5nfcG+N3f/d3v4qqrrrrqf6DXfM3XfB+AH/mRH/nsf/iHf/idf/iHf/htrrrqqquuuuqq/0nQgx70IK666qqrrrrqqv+Zrrnmmge/9mu/9nu9zuu8zntfc801D/7d3/3d7+Kqq6666n+A13zN13yf++6779bf+q3f+u4f/dEf/Ryuuuqqq6666qr/qdCDHvQgrrrqqquuuuqq//le7MVe7LVf53Ve571e53Ve570Bfvd3f/e7uOqqq676L/Sar/ma7wPwIz/yI5/9D//wD7/zD//wD7/NVVddddVVV131Px160IMexFVXXXXVVVdd9b/HNddc8+AXe7EXe+3XeZ3Xea8Xe7EXe22A3/3d3/0urrrqqqv+E7zma77m+wDcd999t/7Wb/3Wd//oj/7o53DVVVddddVVV/1vgh70oAdx1VVXXXXVVVf973TNNdc8+LVf+7Xf63Ve53Xe+5prrnnw7/7u734XV1111VX/AV7zNV/zfe67775bf+u3fuu7f/u3f/t77rvvvlu56qqrrrrqqqv+N0IPetCDuOqqq6666qqr/ve75pprHvyO7/iOn/U6r/M67w3wu7/7u9/FVVddddW/wmu+5mu+z3333Xfrb/3Wb333P/zDP/zOP/zDP/w2V1111VVXXXXV/3boQQ96EFddddVVV1111f8d11xzzYNf7MVe7LVf7MVe7LVe53Ve570Bfvd3f/e7uOqqq656Pl7zNV/zfe67775bf+u3fuu7/+Ef/uF3/uEf/uG3ueqqq6666qqr/i9BD3rQg7jqqquuuuqqq/5vuuaaax585syZB73O67zOe7/O67zOewP87u/+7ndx1VVX/b/2mq/5mu9z33333foP//APv/0P//APv/1bv/Vb38NVV1111VVXXfV/FXrQgx7EVVddddVVV131f98111zz4DNnzjz4dV7ndd7rdV7ndd6bZ/rd3/3d7+Kqq676P+81X/M13+e+++679bd+67e++x/+4R9+5x/+4R9+m6uuuuqqq6666v8D9KAHPYirrrrqqquuuur/lzNnzjzommuuecjrvM7rvNc111zz4Bd7sRd7bYDf/d3f/S6uuuqq/xNe8zVf830A7rvvvlt/67d+67v/4R/+4Xf+4R/+4be56qqrrrrqqqv+v0EPetCDuOqqq6666qqr/n+75pprHvxiL/Zir/U6r/M67/1iL/Zirw3wu7/7u9/FVVdd9b/Ka77ma74PwH333Xfrb/3Wb333b//2b3/PfffddytXXXXVVVddddX/Z+hBD3oQV1111VVXXXXVVfe75pprHvxiL/Zir/1iL/Zir/ViL/Zir33NNdc8GOB3f/d3v4urrrrqf5TXfM3XfB+A++6779Z/+Id/+O377rvv1h/90R/9HK666qqrrrrqqqueDT3oQQ/iqquuuuqqq6666gW55pprHvzar/3a7/XiL/7ir/1iL/Zirw3wu7/7u9/FVVdd9V/uNV/zNd+HZ/qHf/iH3/77v//73/6Hf/iH3/mHf/iH3+aqq6666qqrrrrq+UMPetCDuOqqq6666qqrrnpRXHPNNQ9+sRd7sdd6sRd7sde+5pprHvxiL/Zirw3wu7/7u9/FVVdd9Z/iNV/zNd8H4L777rv1t37rt777H/7hH377H/7hH36Hq6666qqrrrrqqhcNetCDHsRVV1111VVXXXXVv8U111zz4Bd7sRd77Rd7sRd7rWuuuebBL/ZiL/baAL/7u7/7XVx11VX/Jq/5mq/5PgD33Xffrb/1W7/13QA/+qM/+jlcddVVV1111VVX/dugBz3oQVx11VVXXXXVVVf9R7jmmmse/GIv9mKv/WIv9mKvdc011zz4xV7sxV6bZ/rd3/3d7+Kqq656Dq/5mq/5PjzTfffdd+tv/dZvffc//MM//M4//MM//DZXXXXVVVddddVV/zHQgx70IK666qqrrrrqqqv+M1xzzTUPPnPmzINf7MVe7LVe/MVf/LVf7MVe7LV5pt/93d/9Lq666v+Z13zN13wfgPvuu+/Ws2fP3vr3f//3v/0P//APv/MP//APv81VV1111VVXXXXVfw70oAc9iKuuuuqqq6666qr/Ktdcc82DX+zFXuy1X+zFXuy1rrnmmge/2Iu92GvzTL/7u7/7XVx11f8Rr/mar/k+PNN9991362/91m99N8Bv//Zvf8999913K1ddddVVV1111VX/NdCDHvQgrrrqqquuuuqqq/67nDlz5kGS9GIv9mKv/WIv9mKvdc011zz4xV7sxV6bZ/rd3/3d7+Kqq/6He83XfM334Znuu+++W3/rt37ruwH+4R/+4Xf+4R/+4be56qqrrrrqqquu+u+DHvSgB3HVVVddddVVV131P8mZM2cedM011zzkmmuuefCLvdiLvdY111zz4Bd7sRd7bR7gd3/3d7+Lq676L/aar/ma78MD3Hfffbf+1m/91ncD/MM//MPv/MM//MNvc9VVV1111VVXXfU/C3rQgx7EVVddddVVV1111f8G11xzzYPPnDnz4GuuuebBL/ZiL/Za11xzzYNf7MVe7LV5gN/93d/9Lq666t/pNV/zNd+HB7jvvvtu/Yd/+Iffvu+++249e/bsM/7hH/7ht++7775bueqqq6666qqrrvqfDz3oQQ/iqquuuuqqq6666n+ra6655sEAL/ZiL/baZ86cedA111zz4GuuuebBL/ZiL/baPMDv/u7vfhdXXfVcXvM1X/N9eKb77rvvVoB/+Id/+O377rvv1n/4h3/4nbNnz95633333cpVV1111VVXXXXV/17oQQ96EFddddVVV1111VX/F11zzTUPPnPmzIOvueaaB73Yi73YawNcc801D36xF3ux1+a5/O7v/u53cdX/Oa/5mq/5PjyX++6779azZ8/e+vd///e/DfAP//APv/MP//APv81VV1111VVXXXXV/03oQQ96EFddddVVV1111VX/35w5c+ZB11xzzUOuueaaB585c+ZB11xzzYOvueaaB585c+bB11xzzYN5Lr/7u7/7XVz1P85rvuZrvg/P5b777rv17Nmzt95333233nfffbeePXv2Gffdd9+t//AP//DbXHXVVVddddVVV/3/gx70oAdx1VVXXXXVVVddddVzuuaaax4M8GIv9mKvBejFXuzFXgvgmmuuefCZM2ceDHDNNdc8mOfyu7/7u9/FVf9ur/mar/k+PJf77rvvVoCzZ8/eet99991633333Qpw9uzZW++7775nnD179tb77rvvVq666qqrrrrqqquueiD0oAc9iKuuuuqqq6666qqr/vWuueaaBwOcOXPmwddcc82DAJ05c+ZB11xzzYMBrrnmmgcDnDlz5sHXXHPNg/kX/O7v/u538X/Ia77ma74P/4L77rvvVoCzZ8/eCnDffffdet99990KcPbs2Vvvu+++Z5w9e/bW++6771auuuqqq6666qqrrvq3QA960IO46qqrrrrqqquuuuo/3zXXXPNg277mmmseAnDNNdc8mCt85syZBwNcc801D+aZrrnmmgcDnDlz5sE80zXXXPNg/pvdd999t/IAZ8+evZVnuu+++24F+Id/+IffOXPmzIMAzp49+4z77rvvVoCzZ8/eattnz559BlddddVVV1111VVX/VdAD3rQg7jqqquuuuqqq6666n+va6655sE8gG1L0pkzZx7MsxkQz8mAzp49eyvPZNuSxAPcd999t3LVVVddddVVV1111f9W6EEPehBXXXXVVVddddVVV1111VVXXXXVVVddddX/SVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KfwS1lbqCz04iTwAAAABJRU5ErkJggg==) + + diff --git a/docs/kcl/patternCircular2d.md b/docs/kcl/patternCircular2d.md index 76acda360..78f9afdab 100644 --- a/docs/kcl/patternCircular2d.md +++ b/docs/kcl/patternCircular2d.md @@ -40,7 +40,7 @@ patternCircular2d( ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([.5, 25], %) + |> startProfile(at = [.5, 25]) |> line(end = [0, 5]) |> line(end = [-1, 0]) |> line(end = [0, -5]) diff --git a/docs/kcl/patternLinear3d.md b/docs/kcl/patternLinear3d.md index 8d8cec6b9..cfd2258ec 100644 --- a/docs/kcl/patternLinear3d.md +++ b/docs/kcl/patternLinear3d.md @@ -38,7 +38,7 @@ patternLinear3d( ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 2]) |> line(end = [3, 1]) |> line(end = [0, -4]) @@ -54,7 +54,7 @@ example = extrude(exampleSketch, length = 1) // Pattern a whole sketch on face. size = 100 case = startSketchOn(XY) - |> startProfileAt([-size, -size], %) + |> startProfile(at = [-size, -size]) |> line(end = [2 * size, 0]) |> line(end = [0, 2 * size]) |> tangentialArc(endAbsolute = [-size, size]) @@ -85,7 +85,7 @@ patternLinear3d( // Pattern an object on a face. size = 100 case = startSketchOn(XY) - |> startProfileAt([-size, -size], %) + |> startProfile(at = [-size, -size]) |> line(end = [2 * size, 0]) |> line(end = [0, 2 * size]) |> tangentialArc(endAbsolute = [-size, size]) diff --git a/docs/kcl/patternTransform.md b/docs/kcl/patternTransform.md index c04ec1744..ca9f60c89 100644 --- a/docs/kcl/patternTransform.md +++ b/docs/kcl/patternTransform.md @@ -102,7 +102,7 @@ fn cube(length, center) { p3 = [l + x, -l + y] return startSketchOn(XY) - |> startProfileAt(p0, %) + |> startProfile(at = p0) |> line(endAbsolute = p1) |> line(endAbsolute = p2) |> line(endAbsolute = p3) @@ -140,7 +140,7 @@ fn cube(length, center) { p3 = [l + x, -l + y] return startSketchOn(XY) - |> startProfileAt(p0, %) + |> startProfile(at = p0) |> line(endAbsolute = p1) |> line(endAbsolute = p2) |> line(endAbsolute = p3) @@ -204,7 +204,7 @@ fn transform(i) { ] } startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> polygon( radius = 10, numSides = 4, diff --git a/docs/kcl/pow.md b/docs/kcl/pow.md index 410a206aa..262afdf9c 100644 --- a/docs/kcl/pow.md +++ b/docs/kcl/pow.md @@ -36,7 +36,7 @@ pow( ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 50, length = pow(5, 2)) |> yLine(endAbsolute = 0) |> close() diff --git a/docs/kcl/profileStart.md b/docs/kcl/profileStart.md index 7674019c2..0b8e93e6d 100644 --- a/docs/kcl/profileStart.md +++ b/docs/kcl/profileStart.md @@ -28,7 +28,7 @@ profileStart(profile: Sketch): [number] ```js sketch001 = startSketchOn(XY) - |> startProfileAt([5, 2], %) + |> startProfile(at = [5, 2]) |> angledLine(angle = 120, length = 50, tag = $seg01) |> angledLine(angle = segAng(seg01) + 120, length = 50) |> line(end = profileStart(%)) diff --git a/docs/kcl/profileStartX.md b/docs/kcl/profileStartX.md index 120bdbdab..573f7a1d1 100644 --- a/docs/kcl/profileStartX.md +++ b/docs/kcl/profileStartX.md @@ -28,7 +28,7 @@ profileStartX(profile: Sketch): number ```js sketch001 = startSketchOn(XY) - |> startProfileAt([5, 2], %) + |> startProfile(at = [5, 2]) |> angledLine(angle = -26.6, length = 50) |> angledLine(angle = 90, length = 50) |> angledLine(angle = 30, endAbsoluteX = profileStartX(%)) diff --git a/docs/kcl/profileStartY.md b/docs/kcl/profileStartY.md index 808fc9f0b..7766edfc9 100644 --- a/docs/kcl/profileStartY.md +++ b/docs/kcl/profileStartY.md @@ -28,7 +28,7 @@ profileStartY(profile: Sketch): number ```js sketch001 = startSketchOn(XY) - |> startProfileAt([5, 2], %) + |> startProfile(at = [5, 2]) |> angledLine(angle = -60, length = 14) |> angledLine(angle = 30, endAbsoluteY = profileStartY(%)) ``` diff --git a/docs/kcl/reduce.md b/docs/kcl/reduce.md index 72daa620d..7175fa17c 100644 --- a/docs/kcl/reduce.md +++ b/docs/kcl/reduce.md @@ -93,7 +93,7 @@ fn decagon(radius) { // Start the decagon sketch at this point. startOfDecagonSketch = startSketchOn(XY) - |> startProfileAt([cos(0) * radius, sin(0) * radius], %) + |> startProfile(at = [cos(0) * radius, sin(0) * radius]) // Use a `reduce` to draw the remaining decagon sides. // For each number in the array 1..10, run the given function, @@ -112,7 +112,7 @@ fn decagon(radius) { fn decagon(radius): stepAngle = (1/10) * TAU plane = startSketchOn('XY') - startOfDecagonSketch = startProfileAt([(cos(0)*radius), (sin(0) * radius)], plane) + startOfDecagonSketch = startProfile(plane, at = [(cos(0)*radius), (sin(0) * radius)]) // Here's the reduce part. partialDecagon = startOfDecagonSketch diff --git a/docs/kcl/rotate.md b/docs/kcl/rotate.md index 82ac771b8..778b0c70d 100644 --- a/docs/kcl/rotate.md +++ b/docs/kcl/rotate.md @@ -63,7 +63,7 @@ rotate( // Create a path for the sweep. sweepPath = startSketchOn(XZ) - |> startProfileAt([0.05, 0.05], %) + |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) |> tangentialArc(angle = 90, radius = 5) |> line(end = [-3, 0]) @@ -88,7 +88,7 @@ sweepSketch = startSketchOn(XY) // Create a path for the sweep. sweepPath = startSketchOn(XZ) - |> startProfileAt([0.05, 0.05], %) + |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) |> tangentialArc(angle = 90, radius = 5) |> line(end = [-3, 0]) @@ -113,7 +113,7 @@ sweepSketch = startSketchOn(XY) // Create a path for the sweep. sweepPath = startSketchOn(XZ) - |> startProfileAt([0.05, 0.05], %) + |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) |> tangentialArc(angle = 90, radius = 5) |> line(end = [-3, 0]) @@ -150,7 +150,7 @@ cube sketch001 = startSketchOn(XY) -rectangleSketch = startProfileAt([-200, 23.86], sketch001) +rectangleSketch = startProfile(sketch001, at = [-200, 23.86]) |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -160,7 +160,7 @@ rectangleSketch = startProfileAt([-200, 23.86], sketch001) circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63) sketch002 = startSketchOn(YZ) -sweepPath = startProfileAt([0, 0], sketch002) +sweepPath = startProfile(sketch002, at = [0, 0]) |> yLine(length = 231.81) |> tangentialArc(radius = 80, angle = -90) |> xLine(length = 384.93) @@ -178,7 +178,7 @@ rotate(parts, axis = [0, 0, 1.0], angle = 90) sketch001 = startSketchOn(XY) fn square() { - return startProfileAt([-10, 10], sketch001) + return startProfile(sketch001, at = [-10, 10]) |> xLine(length = 20) |> yLine(length = -20) |> xLine(length = -20) diff --git a/docs/kcl/round.md b/docs/kcl/round.md index d1b03e5d3..9d7a6f9c9 100644 --- a/docs/kcl/round.md +++ b/docs/kcl/round.md @@ -32,7 +32,7 @@ round(num: number): number ```js sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [12, 10]) |> line(end = [round(7.02986), 0]) |> yLine(endAbsolute = 0) diff --git a/docs/kcl/scale.md b/docs/kcl/scale.md index ed3196a30..c8be9dceb 100644 --- a/docs/kcl/scale.md +++ b/docs/kcl/scale.md @@ -47,7 +47,7 @@ scale( // Create a path for the sweep. sweepPath = startSketchOn(XZ) - |> startProfileAt([0.05, 0.05], %) + |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) |> tangentialArc(angle = 90, radius = 5) |> line(end = [-3, 0]) @@ -84,7 +84,7 @@ cube sketch001 = startSketchOn(XY) -rectangleSketch = startProfileAt([-200, 23.86], sketch001) +rectangleSketch = startProfile(sketch001, at = [-200, 23.86]) |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -94,7 +94,7 @@ rectangleSketch = startProfileAt([-200, 23.86], sketch001) circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63) sketch002 = startSketchOn(YZ) -sweepPath = startProfileAt([0, 0], sketch002) +sweepPath = startProfile(sketch002, at = [0, 0]) |> yLine(length = 231.81) |> tangentialArc(radius = 80, angle = -90) |> xLine(length = 384.93) diff --git a/docs/kcl/segAng.md b/docs/kcl/segAng.md index f3a9051f5..d2a8e8d3c 100644 --- a/docs/kcl/segAng.md +++ b/docs/kcl/segAng.md @@ -28,7 +28,7 @@ segAng(tag: TagIdentifier): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [5, 10], tag = $seg01) |> line(end = [-10, 0]) diff --git a/docs/kcl/segEnd.md b/docs/kcl/segEnd.md index a9f0925a8..f7458ba65 100644 --- a/docs/kcl/segEnd.md +++ b/docs/kcl/segEnd.md @@ -29,7 +29,7 @@ segEnd(tag: TagIdentifier): [number] ```js w = 15 cube = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [w, 0], tag = $line1) |> line(end = [0, w], tag = $line2) |> line(end = [-w, 0], tag = $line3) @@ -39,7 +39,7 @@ cube = startSketchOn(XY) fn cylinder(radius, tag) { return startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> circle(radius = radius, center = segEnd(tag)) |> extrude(length = radius) } diff --git a/docs/kcl/segEndX.md b/docs/kcl/segEndX.md index 01f623a77..853c8c5b6 100644 --- a/docs/kcl/segEndX.md +++ b/docs/kcl/segEndX.md @@ -28,7 +28,7 @@ segEndX(tag: TagIdentifier): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [20, 0], tag = $thing) |> line(end = [0, 5]) |> line(end = [segEndX(thing), 0]) diff --git a/docs/kcl/segEndY.md b/docs/kcl/segEndY.md index 01788f8f0..6949947c7 100644 --- a/docs/kcl/segEndY.md +++ b/docs/kcl/segEndY.md @@ -28,7 +28,7 @@ segEndY(tag: TagIdentifier): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [20, 0]) |> line(end = [0, 3], tag = $thing) |> line(end = [-10, 0]) diff --git a/docs/kcl/segLen.md b/docs/kcl/segLen.md index 8387ad564..a059a1ab4 100644 --- a/docs/kcl/segLen.md +++ b/docs/kcl/segLen.md @@ -28,7 +28,7 @@ segLen(tag: TagIdentifier): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 60, length = 10, tag = $thing) |> tangentialArc(angle = -120, radius = 5) |> angledLine(angle = -60, length = segLen(thing)) diff --git a/docs/kcl/segStart.md b/docs/kcl/segStart.md index 73a4b7f04..e7ac4e07b 100644 --- a/docs/kcl/segStart.md +++ b/docs/kcl/segStart.md @@ -29,7 +29,7 @@ segStart(tag: TagIdentifier): [number] ```js w = 15 cube = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [w, 0], tag = $line1) |> line(end = [0, w], tag = $line2) |> line(end = [-w, 0], tag = $line3) @@ -39,7 +39,7 @@ cube = startSketchOn(XY) fn cylinder(radius, tag) { return startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> circle(radius = radius, center = segStart(tag)) |> extrude(length = radius) } diff --git a/docs/kcl/segStartX.md b/docs/kcl/segStartX.md index b897155c4..685f732ae 100644 --- a/docs/kcl/segStartX.md +++ b/docs/kcl/segStartX.md @@ -28,7 +28,7 @@ segStartX(tag: TagIdentifier): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [20, 0], tag = $thing) |> line(end = [0, 5]) |> line(end = [20 - segStartX(thing), 0]) diff --git a/docs/kcl/segStartY.md b/docs/kcl/segStartY.md index 4e2d7d664..3056bca85 100644 --- a/docs/kcl/segStartY.md +++ b/docs/kcl/segStartY.md @@ -28,7 +28,7 @@ segStartY(tag: TagIdentifier): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [20, 0]) |> line(end = [0, 3], tag = $thing) |> line(end = [-10, 0]) diff --git a/docs/kcl/shell.md b/docs/kcl/shell.md index f0e999664..314b66f1c 100644 --- a/docs/kcl/shell.md +++ b/docs/kcl/shell.md @@ -35,7 +35,7 @@ shell( ```js // Remove the end face for the extrusion. firstSketch = startSketchOn(XY) - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -51,7 +51,7 @@ shell(firstSketch, faces = [END], thickness = 0.25) ```js // Remove the start face for the extrusion. firstSketch = startSketchOn(-XZ) - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -67,7 +67,7 @@ shell(firstSketch, faces = [START], thickness = 0.25) ```js // Remove a tagged face and the end face for the extrusion. firstSketch = startSketchOn(XY) - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0], tag = $myTag) @@ -83,7 +83,7 @@ shell(firstSketch, faces = [myTag], thickness = 0.25) ```js // Remove multiple faces at once. firstSketch = startSketchOn(XY) - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0], tag = $myTag) @@ -100,7 +100,7 @@ shell(firstSketch, faces = [myTag, END], thickness = 0.25) // Shell a sketch on face. size = 100 case = startSketchOn(-XZ) - |> startProfileAt([-size, -size], %) + |> startProfile(at = [-size, -size]) |> line(end = [2 * size, 0]) |> line(end = [0, 2 * size]) |> tangentialArc(endAbsolute = [-size, size]) @@ -125,7 +125,7 @@ shell(case, faces = [START], thickness = 5) // Shell a sketch on face object on the end face. size = 100 case = startSketchOn(XY) - |> startProfileAt([-size, -size], %) + |> startProfile(at = [-size, -size]) |> line(end = [2 * size, 0]) |> line(end = [0, 2 * size]) |> tangentialArc(endAbsolute = [-size, size]) @@ -153,7 +153,7 @@ shell(thing1, faces = [END], thickness = 5) size = 100 case = startSketchOn(XY) - |> startProfileAt([-size, -size], %) + |> startProfile(at = [-size, -size]) |> line(end = [2 * size, 0]) |> line(end = [0, 2 * size]) |> tangentialArc(endAbsolute = [-size, size]) diff --git a/docs/kcl/sqrt.md b/docs/kcl/sqrt.md index 81d05b9e0..8bba0f94a 100644 --- a/docs/kcl/sqrt.md +++ b/docs/kcl/sqrt.md @@ -32,7 +32,7 @@ sqrt(num: number): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 50, length = sqrt(2500)) |> yLine(endAbsolute = 0) |> close() diff --git a/docs/kcl/startProfile.md b/docs/kcl/startProfile.md new file mode 100644 index 000000000..dc5291ec6 --- /dev/null +++ b/docs/kcl/startProfile.md @@ -0,0 +1,74 @@ +--- +title: "startProfile" +excerpt: "Start a new profile at a given point." +layout: manual +--- + +Start a new profile at a given point. + + + +```js +startProfile( + sketchSurface: SketchSurface, + at: [number], + tag?: TagDeclarator, +): Sketch +``` + + +### Arguments + +| Name | Type | Description | Required | +|----------|------|-------------|----------| +| `sketchSurface` | [`SketchSurface`](/docs/kcl/types/SketchSurface) | What to start the profile on | Yes | +| `at` | [`[number]`](/docs/kcl/types/number) | Where to start the profile. An absolute point. | Yes | +| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Tag this first starting point | No | + +### Returns + +[`Sketch`](/docs/kcl/types/Sketch) + + +### Examples + +```js +exampleSketch = startSketchOn(XZ) + |> startProfile(at = [0, 0]) + |> line(end = [10, 0]) + |> line(end = [0, 10]) + |> line(end = [-10, 0]) + |> close() + +example = extrude(exampleSketch, length = 5) +``` + +![Rendered example of startProfile 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAFToklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddX/IC/2Yi/22tdcc82D3/Ed3/GzuOqqq6666qr/ZX7rt37ruwF+9Ed/9HO46qqrrrrqqv8ZqFx11VVXXXXV/xDv+I7v+Flv+IZv+Nm/+Zu/yc/93M9x1VVXPZttrrrqX2Kbq/57nThx4rPf/u3fHoAf/dEf/Ryuuuqqq6666r8fetCDHsRVV1111VVX/Xe65pprHvzhH/7h33XDDTe89nd8x3ewu7vLVVdd9T+bba76/8E2V/3rnDhxgvd///dnHMdbP+uzPut17rvvvlu56qqrrrrqqv8+lOPHj3PVVVddddVV/11e7MVe7LW/4iu+4q/+/u///sE/+IM/yGq14qqrrvqfTxKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSVz1X0sSkpCEJCQhCUlIQhKS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sM0DScI2DyQJ2zyQJGwDIIn/DJKwzQNJwjYPJAnbPJAkbHM/SfxHk4RtHkgStnkgSdhGEv8RJGGbB5KEbQAk8a8hCds8kCRscz9JvKgkYZsHkoRtJPHCSMI2DyQJ2wBI4l9DErYBkMQLIgnbPJAk/i0k8aKSxL+FJF5UkrCNJP61JPFvJQnbAEjiP4MkbPNAkrBN13UA3Hfffbdy1VVXXXXVVf990IMe9CCuuuqqq6666r/bN33TNz2dq6666qqrrvo/5kM+5EMewlVXXXXVVVf990IPetCDuOqqq6666qqrrrrqqquuuuqqq6666qqr/k+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r+IfAYf4H6R1Hj7xAAAAAElFTkSuQmCC) + +```js +exampleSketch = startSketchOn(-XZ) + |> startProfile(at = [10, 10]) + |> line(end = [10, 0]) + |> line(end = [0, 10]) + |> line(end = [-10, 0]) + |> close() + +example = extrude(exampleSketch, length = 5) +``` + +![Rendered example of startProfile 1](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAFET0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddX/IC/2Yi/22tdcc82D3/Ed3/GzuOqqq6666qr/ZX7rt37ruwF+9Ed/9HO46qqrrrrqqv8ZqFx11VVXXXXV/xDv+I7v+Flv+IZv+Nm/8Ru/wc/8zM9w1f99krjqqhdEEldd9b/N8ePHP/t1X/d1AfjRH/3Rz+Gqq6666qqr/vuhBz3oQVx11VVXXXXVf6drrrnmwR/+4R/+XYvF4rW/7du+jX8tSVz1n0MSV/3fJImrrrrqP8fx48d5u7d7OzY3N2/9rM/6rNe57777buWqq6666qqr/vtQjh8/zlVXXXXVVVf9d3mxF3ux1/6Kr/iKv/q7v/u7B//ET/wEkpCEJCQhCUlIQhKSkIQkJCGJq0ASkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIYmr/uNJQhKSkIQkJCEJSUhCEpKQ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uuqqq6666l/jmmuuefCHf/iHf9fGxsZrf+d3fidXvWgkcdV/H0lcddX/NZK46v++48eP89Iv/dI89rGPvfWzPuuzXue+++67lauuuuqqq6560aEHPehBXHXVVVddddWL6nVe53Xe+8M//MO/6zd/8zf5rd/6Lf6vk8RV//kkcdVV/xqSuOqq/29e+7Vfm8c+9rG3/tZv/dZ3/+iP/ujncNVVV1111VUvGvSgBz2Iq6666qqrrnpRfPiHf/h3vczLvMx7/+RP/iRPf/rT+Z9MElf9x5LEVf+3SeKqq676n+348eO893u/N7/yK7/y2T/6oz/6OVx11VVXXXXVvww96EEP4qqrrrrqqqtemGuuuebBH/7hH/5dGxsbr/2d3/md/GeTxFX/PpK46n8PSVx11VVXvaiOHz/OS7/0S/PYxz721s/6rM96nfvuu+9WrrrqqquuuuoFoxw/fpyrrrrqqquuekFe53Ve570/93M/97f+/u///sE/9VM/xb9EEpKQhCQkIQlJSEISkpCEJCQhCUlIQhL/H0lCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkMRV/zaSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSVx11VVX/WusVituvfVWNjc3j7/jO77jW29ubh7/h3/4h9/hqquuuuqqq54/9KAHPYirrrrqqquuen4+93M/97duvPHG1/7Jn/xJbr31Vq56TpK46r+OJK666j+TJK666n+b48eP817v9V78yq/8ymf/6I/+6Odw1VVXXXXVVc8LPehBD+Kqq6666qqrHuiaa6558Od8zuf81uHh4YO/67u+i/9rJHHVfzxJXPX/kySuuuqq/z7Hjx/npV7qpXjsYx9762d91me9zn333XcrV1111VVXXfVslOPHj3PVVVddddVV93ud13md9/7cz/3c3/rTP/3T4z/1Uz/F/zSSkIQkJCEJSUhCEpKQhCQkIQlJSEISkrgKJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhJX/deQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlcddVV/71WqxXPeMYz2NzcPP6O7/iOb725uXn8H/7hH36Hq6666qqrrroCPehBD+Kqq6666qqrAD73cz/3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AEn8Z7DN/STxn8k2DySJ/0q2eW6S+J/KNi+MJK666v8z21wFW1tbANx33323ctVVV1111VVXEFx11VVXXXXVM/393//9bwNsbW1hm/8otrHNfxTb2OY/km1s8x/NNrb5j2Yb29jmP4ttbGOb/wq2sY1t/rvYxja2sY1t/rewjW1sYxvb2MY2trHNVVf9b2Ab29jGNraxjW1sYxvb2MY2trHNVVdsbW0BcN99993KVVddddVVV11BcNVVV1111VXPdPbs2WcA3HDDDQDY5j+SbWzzH8U2tvmPZBvb/EezjW3+M9jGNrb5z2Ib29jmv4JtbGMb2/x3so1tbGMb2/xvZRvb2MY2trGNbWxjG9tcddW/l21sYxvb2MY2trGNbWxjG9vYxja2uerfZ2trC4CzZ88+g6uuuuqqq666gspVV1111VVXPdN99913K8/FNgCS+I9iG0n8R7ENgCT+o9jmfpL4j2Kb+0niP5pt7ieJ/wy2eSBJ/GezzQNJ4r+TbZ6bJP6vsM2/hiSu+r/DNlf973XttdcCcN99993KVVddddVVV11B5aqrrrrqqque6ezZs7cCbG9v89xsAyCJ/wi2AZDEfxTbAEjiP5JtACTxH8k2AJL4z2AbAEn8Z7LN/STxX8E2DySJ/262eX4k8X+dbf69JHHVv55trrrq+Tl79uytXHXVVVddddUVVK666qqrrrrqme67775bAba3t3lBbAMgif8ItgGQxH8U2wBI4j+SbQAk8R/JNveTxH8029xPEv+ZbHM/SfxXsc0DSeJ/Cts8P5K46tlsc9VVV/37bW1tAXDffffdylVXXXXVVVddQXDVVVddddVVD/AP//APvw1www038MLYxjb/UWxjm/9ItrGNbf4j2cY2/xlsY5v/LLaxjW3+s9nGNraxzX8l29jGNraxzf80trGNbWxjG9tcddVVV/1bXXvttQDcd999t3LVVVddddVVz0blqquuuuqqq/4dbAMgif8ItgGQxH8k2wBI4j+Kbe4nif9ItrmfJP4z2OZ+kvjPZpv7SeK/mm0eSBL/E9nmBZHEVVddddULsrW1BcA//MM//DZXXXXVVVdd9WwEV1111VVXXfUAf//3f//bANdffz3/Grb5j2Qb2/xHs41t/qPZxjb/GWxjG9v8Z7GNbWzzX8E2trGNbf472MY2trGNbf6ns41tbGMb29jGNra56qqrrrrqqquuuuqq54PKVVddddVVVz0f29vb/GvZBkAS/1FsAyCJ/0i2AZDEfyTb3E8S/9FsAyCJ/yy2uZ8k/ivY5n6S+O9imweSxP8mtnlhJHHVVVf933XdddcB8A//8A+/w1VXXXXVVVc9G5WrrrrqqquueoB/+Id/+B2A7e1t/q1sAyCJ/yi2AZDEfyTbAEjiP5ptACTxH80295PEfxbb3E8S/xVs80CS+O9im+cmif+tbPMvkcRVV1111VVXXXXVVf+nULnqqquuuuqqBzh79uytANvb2/x72QZAEv9RbAMgif9ItgGQxH802wBI4j+Dbe4nif8strmfJP6r2OaBJPHfyTbPjyT+L7DNi0oSV1111f8c1157LQD/8A//8NtcddVVV1111bNRueqqq6666qr/ZLYBkMR/FNvcTxL/UWxzP0n8R7LN/STxn8E295PEfxbbPJAk/qvY5oEk8T+BbZ6bJP4vs82/liSuuuqq/xxbW1sA3Hfffbdy1VVXXXXVVc9G5aqrrrrqqqse4L777rv1vvvuu/Waa6558NbWFgcHB/xHsQ2AJP4j2QZAEv+RbAMgif9otgGQxH8W2wBI4j+bbe4nif9KtnkgSfxPYZvnRxL/X9nmP4IkrvrfxTZXgST+M2xtbXHVVVddddVVLwCVq6666qqrrnouZ8+evfWaa6558Pb2Nvv7+wBI4j+KbQAk8R/JNgCS+I9kGwBJ/Eezzf0k8Z/BNveTxH8229xPEv/VbPNAkvifxjbPjySuetHY5qqr/jeyzX8ESTzQtddeC8A//MM//DZXXXXVVVdd9ZwIrrrqqquuuuq53HfffbcCbG9vcz/b2OY/km1s8x/NNrb5j2Yb29jmP4NtbGOb/yy2sY1t/ivYxja2sc1/B9vYxja2sc3/VLaxjW1sYxvb2Oaqq6666oFsYxvb2OZ+9913361cddVVV1111XOictVVV1111VXP5b777rsVYHt7m+dmGwBJ/EexDYAk/iPZBkAS/9FsAyCJ/wy2AZDEfxbb3E8S/xVscz9J/HexzQNJ4n8627wgkrjqqqv+f9vc3ATgvvvuu5Wrrrrqqquuek5Urrrqqquuuuq5/MM//MPvANxwww28ILaRxH8k2wBI4j+SbQAk8R/NNgCS+M9gm/tJ4j+Lbe4nif8KtnkgSfx3sc1zk8T/FrZ5QSRx1VVX/d+3tbUFwNmzZ5/BVVddddVVVz0nKlddddVVV131Amxvb/PC2AZAEv+RbAMgif9ItgGQxH8029xPEv8ZbHM/Sfxnsc39JPFfxTYPJIn/TrZ5bpL438Y2/xJJXHXVVf+7XXfddQD8wz/8w29z1VVXXXXVVc+JylVXXXXVVVc9l7Nnz97Kv4JtACTxH8k2AJL4j2Sb+0niP5ptACTxn8U2AJL4z2Sb+0niv5Jt7ieJ/wls89wk8b+dbf4lkrjqqquuuuqqq6666n8lKlddddVVV131XO67775bAba3t9ne3mZ/f58XhW0AJPEfyTYAkviPZhsASfxHs839JPGfwTb3k8R/Jts8kCT+q9jmgSTxP4Vtnpsk/q+xzYtKElddddV/ra2tLQDuu+++W7nqqquuuuqq50Rw1VVXXXXVVc/HP/zDP/w2wPb2Nv9atrHNfzTb2OY/g21s85/FNrb5z2Qb29jmv4JtbGOb/2q2sY1tbPM/jW1sYxvb2Ob/E9vYxja2sY1tbGMb29jGNra56qqr/n2uu+46AP7hH/7hd7jqqquuuuqq50Xlqquuuuqqq/6T2AZAEv+RbAMgif9otgGQxH8G29xPEv9ZbHM/Sfxns839JPFfzTYPJIn/aWzz/Eji/zvb/HtI4qqr/j/b2toC4L777ruVq6666qqrrnpeBFddddVVV131fPz93//9bwPccMMN/HvZxjb/0WxjG9v8R7ONbWzzn8U2tvnPZhvb2Oa/gm1sYxvb/HewjW1sYxvb/E9lG9vYxja2sc1VLzrb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW2uuup/i83NTQDuu+++p3PVVVddddVVz4vKVVddddVVVz0fZ8+efQbA9vY2/1FsAyCJ/2i2AZDEfzTbAEjiP4Nt7ieJ/0y2AZDEfxXb3E8S/11s80CS+J/MNi+IJK76z2eb/w0kcdX/b1tbWwCcPXv2GVx11VVXXXXV86Jy1VVXXXXVVc/HfffddyvA9vY2/9FsAyCJ/2i2AZDEfzTbAEjiP4ttACTxn8k295PEfxXbPJAk/rvY5rlJ4n8D27wgkrjq/xfb/G8liav+/ba2tgA4e/bsrVx11VVXXXXV86Jy1VVXXXXVVc/H2bNnbwXY3t7GNgCS+I9kGwBJ/EezDYAk/qPZ5n6S+M9gm/tJ4j+TbR5IEv9VbHM/Sfx3s80DSeJ/G9u8IJK46qr/SWzzH00S/99sbW0BcN99993KVVddddVVVz0vKlddddVVV131fNx33323Amxvb3M/2wBI4j+SbQAk8R/NNgCS+M9gGwBJ/Gexzf0k8Z/NNveTxH8V2zyQJP672ea5SeJ/K9u8MJK46qr/7WzzryWJ/822trYAuO+++27lqquuuuqqq54XwVVXXXXVVVe9APfdd9+tADfccAMPZBvb/EezjW3+M9jGNv9ZbGMb2/xnso1tbPNfwTa2sc1/NdvYxja2+Z/CNraxjW1s83+FbWxjG9vYxja2sY1trrrq/yLb2MY2trGNbWxjG9v8T7W1tQXAfffddytXXXXVVVdd9fwRXHXVVVddddULcPbs2Vt5IWxjm/9otrHNfwbb2MY2/1lsY5v/bLaxzX8V29jGNv8dbGMb29jmfxLb2MY2trHN/1W2sY1tbGMb29jGNraxzVVX/V9jG9vYxja2sY1tbPPf5brrrgPgH/7hH36bq6666qqrrnr+CK666qqrrrrqBbjvvvtuBbjhhht4YWxjm/9otrHNfxbb2OY/i21sY5v/TLaxjW3+q9jGNrb572Ib29jGNv/T2MY2trGNbWzz/4VtbGMb29jGNraxjW1sY5urrvq/wDa2sY1tbGObq6666qqrrvofgMpVV1111VVXvQD33Xffrfwr2AZAEv+RbAMgif8MtgGQxH8W2wBI4j+Tbe4nif8KtrmfJP672OaBJPE/kW2emyT+P7PNv5YkrrrqfwPbPDdJ/Ee59tprAfiHf/iH3+Gqq6666qqrnj+Cq6666qqrrnoB/uEf/uF3AG688Ub+NWxjm/9otrGNbf4z2MY2tvnPYhvb2OY/m21sY5v/KraxjW1s89/JNraxjW3+J7ONbWxjG9vY5qoXzDa2sY1tbGMb29jGNraxjW1sYxvbXHXVfzfb2MY2trHNVVddddVVV/0nonLVVVddddVVL8DZs2dvBdje3ubfwjYAkviPZhsASfxnsA2AJP6z2AZAEv/ZbHM/SfxXsc39JPHfyTYPJIn/6Wzzgkjiqn8b2/xHkMRVV/1Hsc0DSeJFcd111wHwD//wD7/NVVddddVVVz1/VK666qqrrrrqP5ltACTxH802AJL4z2AbAEn8Z7HN/STxn80295PEfxXbPJAk/jvZ5rlJ4n8L2zw/krjqv4Zt/iNJ4qqr7mebB5LE87O1tQXAfffddytXXXXVVVdd9fwRXHXVVVddddULcN99991633333bq9vc329jb/XraxzX8G29jmP4ttbGOb/0y2sY1t/ivYxja2+a9mG9vY5n8K29jGNrb538g2trGNbWxjG9vY5qr/uWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2V/3fYRvb2Oaqq6666qqr/pUIrrrqqquuuuqFOHv27K0A29vb/EexjW3+M9jGNv+ZbGOb/2y2sc1/FdvYxjb/1WxjG9vY5n8K29jGNraxzf92trGNbWxjG9vY5qr/e2xjG9vYxja2sY1tbGMb29jGNraxjW1sY5ur/mexjW2uvfZaAP7hH/7ht7nqqquuuuqqF4zgqquuuuqqq16I++6771aA7e1t/qPZxjb/GWxjm/9MtrHNfzbb2MY2/1VsYxvb/HewjW1sY5v/SWxjG9vYxjb/V9jGNraxjW1sYxvbXPX/l21sYxvb2MY2trGNbWxjG9vYxjZX/efa2toC4L777ruVq6666qqrrnrBqFx11VVXXXXVC3HffffdCrC9vc1/FtsASOI/mm3uJ4n/DLa5nyT+M9nmfpL4r2Cb+0niv4NtHkgS/5PY5rlJ4v8a2/xLJHHVVfezzb+GJK560W1tbQFw33333cpVV1111VVXvWBUrrrqqquuuuqFOHv27DMAbrjhBmwDIIn/DLYBkMR/BtsASOI/i20AJPGfzTb3k8R/BdvcTxL/XWzzQJL4n8Y2z00S/9fZ5l8iiauuen5s8y+RxFVXbG1tAXD27NlncNVVV1111VUvGJWrrrrqqquueiHuu+++W3kutgGQxH8G2wBI4j+DbQAk8Z/FNveTxH822wBI4r+KbR5IEv9dbPNAkvifyDbPjyT+P7HNi0oSV131QLZ5QSTx/8l1110HwH333XcrV1111VVXXfWCUbnqqquuuuqqF+Ls2bO3Auzs7PDcbAMgif8MtgGQxH8G29xPEv9ZbAMgif9strmfJP4r2eZ+kvjvZJsHksT/ZLZ5fiTx/51tXlSSuOr/N9u8IJL4v+rs2bO3ctVVV1111VUvGJWrrrrqqquueiHuu+++WwG2t7d5QWwDIIn/DLYBkMR/FtsASOI/i23uJ4n/bLa5nyT+K9nmfpL472abB5LE/wa2eX4kcdXzss2/hiSu+v/DNs9NEv+bbW1tAXDffffdylVXXXXVVVe9YARXXXXVVVdd9S/4h3/4h98GuOGGG3hhbGOb/yy2sc1/JtvY5j+bbWxjm/8KtrGNbf6r2cY2trHN/wS2sY1tbPO/jW1sYxvb2MY2V/3r2MY2trGNbWxjG9vYxja2sY1tbHPV/x22sY1tbGOb/y2uu+46AO67775bueqqq6666qoXjspVV1111VVX/QezDYAk/jPYBkAS/1lscz9J/GeyDYAk/ivY5n6S+K9mm/tJ4n8C2zw3SfxvY5vnRxJX/cexzb+WJK7638E2z00S/9NsbW0B8A//8A+/zVVXXXXVVVe9cARXXXXVVVdd9S/4+7//+98GuPHGG/nXsI1t/rPYxja2+c9kG9v8Z7ONbWzzX8U2trHNfwfb2MY2tvmfxDa2sY1t/jezjW1sYxvb2MY2V/3XsI1tbGMb29jGNraxjW1sYxvb2Oaq/xlsYxvb2Oaqq6666qqr/pehctVVV1111VUvou3tbf4tbAMgif8stgGQxH8W2wBI4j+bbe4nif8KtrmfJP472OaBJPE/hW2emyT+t7PNCyOJq/772OZfSxJX/eeyzf0k8d/huuuuA+Af/uEffoerrrrqqquueuGoXHXVVVddddW/4B/+4R9+B2B7e5t/D9sASOI/i20AJPGfxTb3k8R/NtsASOK/im3uJ4n/LrZ5IEn8T2Kb5yaJ/0ts84JI4qr/eWzzopLEVf8+tnkgSVx11VVXXXXV/zBUrrrqqquuuupfcPbs2VsBdnZ2+I9gm/tJ4j+DbQAk8Z/JNgCS+M9mm/tJ4r+KbR5IEv9dbHM/SfxPZJvnJon/i2zzL5HEVf9z2eZFIYmrXjS2uZ8k/rNcd911APzDP/zDb3PVVVddddVVLxyVq6666qqrrvpvZBsASfxnsM39JPGfxTb3k8R/NtvcTxL/lWxzP0n8d7HNA0nifyrbPDdJ/H9gmxdGElf9z2ebf4kkrnpOtrmfJP4jbW1tAXDffffdylVXXXXVVVe9cARXXXXVVVdd9S+47777br3vvvtu3d7eZnt7m/8MtrHNfybb2OY/m21s81/FNraxzX8129jGNv/dbGMb29jmfzrb2MY2trGNbf6/sY1tbGMb29jGNraxjW2u+p/PNraxjW1sYxvbXAW2sc1/hK2tLa666qqrrrrqX4Hgqquuuuqqq14EZ8+evRVge3sb2/xnsY1t/jPZxjb/2WxjG9v8V7GNbWzzX802trHN/wS2sY1tbPO/hW1sYxvb2MY2/9/Zxja2sY1tbGMb29jmqv+5bGMb29jGNraxzf83trGNbf6trrvuOgD+4R/+4be56qqrrrrqqn8ZwVVXXXXVVVe9CO67775bAba3twGwjW3+s9jGNv+ZbGMb2/xns41tbPNfxTa2sc1/NdvYxja2+Z/ANraxjW1s87+JbWxjG9vY5qrnZBvb2MY2trGNbWxjG9tc9T+LbWxjG9vYxjb/H9jGNv9W9913361cddVVV1111b+MylVXXXXVVVe9CO67775bAba3t3kg2wBI4j+DbQAk8Z/JNgCS+M9mGwBJ/Fexzf0k8V/NNveTxP8UtnkgSfxvYpsXRBJXPX+2eVFJ4qr/HrZ5bpL4v8g2AJJ4UWxtbQFw33333cpVV1111VVX/csIrrrqqquuuupF8A//8A+/A3DjjTfy/NjGNv9ZbGOb/2y2sc1/BdvYxjb/lWxjG9v8d7CNbWxjm/9JbGMb29jmfzPb2MY2trGNba7617GNbWxjG9vYxja2sY1trvqvYRvb2MY2tvm/xDa2+ZdsbW0BcPbs2Wdw1VVXXXXVVf8yKlddddVVV131r7Czs8MLYxsASfxnsM39JPGfxTb3k8R/NtsASOK/km3uJ4n/DrZ5IEn8T2Gb5yaJ/81s8/xI4qp/O9u8KCRx1X8s2zyQJP63sw2AJJ6f6667DoB/+Id/+G2uuuqqq6666l9G5aqrrrrqqqteBGfPnr2VfwXbAEjiP4ttACTxn8k2AJL4z2ab+0niv5Jt7ieJ/y62uZ8k/qexzXOTxP92tnlBJHHVfwzbvCgkcdW/jW0eSBL/W9kGQBJXXXXVVVdd9e9A5aqrrrrqqqteBPfdd9+tANvb22xvb7O/v8+LwjYAkvjPYhsASfxnss39JPGfzTb3k8R/JdvcTxL/XWzzQJL4n8g2z00S/1fY5oWRxFX/sWzzL5HEVf8y2zyQJP63sQ2AJAC2trYAuO+++27lqquuuuqqq/5lBFddddVVV131IvqHf/iH3wbY2dnhX8s2tvnPZBvb/FewjW3+q9jGNrb5r2Yb29jmv5ttbGMb2/xPZhvb2MY2tvm/yja2sY1tbGMb21z1n8c2trGNbWxjG9vYxjZXPS/b2MY2tvnfxDbXXXcdAP/wD//wO1x11VVXXXXVi4bKVVddddVVV/0Xsg2AJP6z2OZ+kvjPZJv7SeK/gm0AJPFfzTb3k8R/N9s8kCT+J7PNc5PE/2W2eWEkcdV/Htu8MJL4/84295PE/3Sbm5sA3Hfffbdy1VVXXXXVVS8agquuuuqqq656Ef393//9bwPccMMN/HvZxjb/2Wxjm/8KtrHNfxXb2MY2/x1sYxvb2OZ/AtvYxja2+d/ANraxjW1s8/+JbWxjG9vYxja2sc1V/7lsYxvb2MY2trHN/0e2sY1t/qfa2toC4L777ns6V1111VVXXfWioXLVVVddddVVL6KzZ88+A2BnZ4f/KLYBkMR/JtsASOI/m23uJ4n/Cra5nyT+O9jmfpL4n8A2DySJ/w1s89wk8f+RbV4YSVz1n8M2z48k/j+wzf0k8T/F9vY2AGfPnn0GV1111VVXXfWioXLVVVddddVVL6L77rvvVoDt7W3+o9kGQBL/mWxzP0n8Z7MNgCT+q9jmfpL472Cb+0nifwrbPJAk/rewzfMjif/PbPMvkcRV/3Fs8/xI4v8q2wBI4r/b1tYWAGfPnr2Vq6666qqrrnrRULnqqquuuuqqF9HZs2dvBdjZ2eE/i20AJPGfzTYAkvjPZpv7SeK/im3uJ4n/DrZ5IEn8T2GbB5LE/za2eX4kcdUVtnlhJHHVv59tnpsk/i+xzf0k8d9ha2sLgPvuu+9WrrrqqquuuupFQ+Wqq6666qqrXkT33XffrQDb29vYRhL/WWxzP0n8Z7INgCT+K9jmfpL4r2Kb+0niv4tt7ieJ/0ls89wk8b+RbZ4fSVz1nGzzL5HEVf96tnlukvi/wDYAkvivtLW1BcB99913K1ddddVVV131oiG46qqrrrrqqn+F++6771aAG2+8EdvY5j+bbWzzn802trHNfxXb2Oa/mm1sY5v/TraxjW1s8z+RbWxjG9v8b2cb29jGNraxzVUvnG1sYxvb2MY2trHNVS8629jGNraxzf9mtrHNf4WtrS0A7rvvvlu56qqrrrrqqhcdwVVXXXXVVVf9K5w9e/ZWnottbPOfzTa2+a9gG9v8V7GNbWzzX802trHNfzfb2MY2tvmfyDa2sY1tbPN/gW1sYxvb2MY2trnqX2Yb29jGNraxjW1sc9ULZxvb2MY2/xvZxjb/ma677joA/uEf/uG3ueqqq6666qoXHcFVV1111VVX/Svcd999twLceOONPDfb2OY/m21s81/BNraxzX8V29jGNv/VbGMb2/xPYBvb2OZ/MtvYxja2+b/GNraxjW1sY5urXnS2sY1tbGMb29jGNlc9J9vYxja2+d/ENra56qqrrrrqqv9BqFx11VVXXXXVv8J99913K/8C2wBI4j+Tbe4nif9stgGQxH8V2wBI4r+abe4nif9utnkgSfxPZZvnJon/a2zzgkjiqhedbV4QSfx/Z5sHksT/dLYBkMR/lOuvvx6Af/iHf/gdrrrqqquuuupFR+Wqq6666qqr/hX+4R/+4XcAbrzxRv4ltrmfJP4z2QZAEv/ZbHM/SfxXsM39JPFfzTYPJIn/brZ5IEn8T2ab5yaJ/6ts84JI4qoXnW1eEEn8f2Sb+0nifzLbAEjiqquuuuqqq/6bULnqqquuuuqqf4WzZ8/eCrC9vc2/hm0AJPGfyTYAkvivYBsASfxXsc39JPHfwTb3k8T/BLZ5IEn8T2eb5yaJ/+ts84JI4qoXnW1eEEn8f2Cb+0nifyrbSOLf47rrrgPgH/7hH36bq6666qqrrnrRUbnqqquuuuqq/0K2AZDEfybbAEjiv4Jt7ieJ/yq2uZ8k/jvY5n6S+J/CNg8kif8NbPP8SOL/A9u8IJK46kVnm+dHEv9X2eZ+kvifxjYAkvi32NraAuC+++67lauuuuqqq6560RFcddVVV1111b/Cfffdd+t99913687ODtvb2/xb2cY2/9lsYxvb/FexjW3+q9nGNrb572Ib29jGNv+T2MY2trHN/za2sY1tbGOb/29sYxvb2MY2trGNba560djGNraxjW1s83+NbWxjm/9pbGObq6666qqrrvovQnDVVVddddVV/0pnz569FWBnZ4d/L9vY5r+CbWzzX8U2trHNfzXb2MY2/51sYxvb/E9jG9vYxjb/G9nGNraxjW3+P7ONbWxjG9vYxjZX/ctsYxvb2MY2/1fYxja2+Z/ENi+q6667DoB/+Id/+G2uuuqqq6666l+H4Kqrrrrqqqv+le67775bAba3t/mPYhvb/FewjW1s81/FNrb572Ab29jmv5NtbGMb2/xPYxvb2MY2/1vZxja2sY1tbPP/nW1sYxvb2MY2trnqBbONbWxjG9v8b2cb2/xPYZsXxdbWFgD33XffrVx11VVXXXXVvw6Vq6666qqrrvpXuu+++24F2NnZ4T+abQAk8V/BNgCS+K9gm/tJ4r+abe4nif9OtrmfJP6nsc1zk8T/VrZ5fiTx/51tXhhJXPVstnkgSfxvZBsASfx3sw2AJF6Qra0tAO67775bueqqq6666qp/HSpXXXXVVVdd9a909uzZZwDceOON/Gexzf0k8Z/NNgCS+K9im/tJ4r+abe4nif9OtnkgSfxPZJsHksT/drZ5fiRx1RW2eUEk8f+dbR5IEv+b2OZ+kvjvZBtJPD/b29sAnD179hlcddVVV1111b8Olauuuuqqq676V7rvvvtu5b+QbQAk8Z/NNveTxH8V2wBI4r+Dbe4nif9utrmfJP6nss1zk8T/BbZ5fiRx1bPZ5vmRxP9XtnkgSfxvYRsASfx3sY0kntt1110HwH333XcrV1111VVXXfWvQ+Wqq6666qqr/pXOnj17K8D29ja2kcR/BdsASOK/gm0AJPFfxTb3k8R/B9vcTxL/3WzzQJL4n8w2DySJ/0ts8/xI4qpns80LIon/T2zzQJL4n842AJL472AbAEk8t7Nnz97KVVddddVVV/3rULnqqquuuuqqf6X77rvvVoCdnR0AbAMgif8KtgGQxH8F29xPEv9VbHM/Sfx3sM39JPE/gW0eSBL/k9nmuUni/xrbPD+SuOo52eb5kcT/B7Z5IEn8T2UbAEn8d7CNJAC2trYAuO+++27lqquuuuqqq/51CK666qqrrrrq3+Af/uEffhvgxhtv5H62sc1/FdvYxjb/VWxjm/9qtrGNbf672MY2tvmfxDa2sY1t/jewjW1sYxvb/F9lG9vYxja2sY1trnpOtrGNbWxjG9v8X2cb29jmfyrb2Oa/g22uu+46AO67775bueqqq6666qp/PSpXXXXVVVdd9R/MNgCS+K9iGwBJ/Fewzf0k8V/JNveTxH8H2zyQJP6nsM0DSeJ/A9s8N0n8X2ab50cSVz2bbZ4fSfxfY5v7SeJ/GtsASOK/0tbWFgD/8A//8NtcddVVV1111b8ewVVXXXXVVVf9G/z93//9bwPceOONvCC2sc1/JdvY5r+SbWzz38E2trHNfyfb2MY2/9PYxja2sc3/JraxjW1sY5v/D2xjG9vYxja2sc1Vz2Yb29jGNrb5v8Q2trHN/zS2ueqqq6666qr/RahcddVVV1111b/Dzs4O/xLbAEjiv4pt7ieJ/wq2uZ8k/qvZBkAS/51scz9J/E9jmweSxP8mtnlukvj/wjbPjySuAts8N0n8b2eb+0nifwLbAEjiP9t1110HwD/8wz/8DlddddVVV131r0flqquuuuqqq/4N/uEf/uF3AHZ2dnhR2eZ+kvivYhsASfxXsc39JPFfyTb3k8R/J9s8kCT+p7HNA0nifxvbPD+S+P/CNi+IJP4/s81zk8T/Vra5nyT+u9kGQBJXXXXVVVdd9T8Ulauuuuqqq676Nzh79uytANvb2/xb2AZAEv9VbHM/SfxXsQ2AJP6r2eZ+kvjvZpv7SeJ/Its8kCT+t7LNc5PE/ze2eX4k8f+VbZ6bJP63sQ2AJP672UYS/xmuu+46AP7hH/7ht7nqqquuuuqqfz0qV1111VVXXfXvsLOzw7+HbQAk8V/JNgCS+K9im/tJ4r+abe4nif9utnkgSfxPZJsHksT/ZrZ5bpL4/8g2z48k/j+yzQNJ4n8L29xPEv9dbCOJ/2jb29sA3Hfffbdy1VVXXXXVVf96BFddddVVV131b3Dffffdet99990KsLOzw7+XbWzzX802tvmvZhvb2Oa/g21sY5v/KWxjG9v8T2Yb29jGNrb53842trGNbWxjm/+vbGMb29jGNraxzf8ntrGNbWzzv4VtbPPfxTa2+Y+ytbXFVVddddVVV/07EVx11VVXXXXVv9HZs2dvBdje3uY/im1s81/NNraxzX8129jmv4ttbGMb2/xPYBvb2MY2/9PZxja2sc3/FbaxjW1sYxvb/H9mG9vYxja2sc3/B7axjW1s8z+dbWzz38U2/xGuv/56AP7hH/7ht7nqqquuuuqqfxuCq6666qqrrvo3uu+++24F2NnZ4T+abWxjm/9qtrHNfzXb2MY2/51sYxvb/E9hG9vYxjb/09nGNraxjW3+L7GNbWxjG9vY5v8z29jGNraxzf91trGNbf4ns41t/jvYxjb/Ee67775bueqqq6666qp/GypXXXXVVVdd9W9033333Qqwvb3NfybbAEjiv5Jt7ieJ/0q2uZ8k/rvY5n6S+J/CNveTxP8GtnkgSfxfY5vnJon/r2zz/Eji/xrbPJAk/qexDYAk/qvZRhL/Ftdddx0A9913361cddVVV1111b8Nlauuuuqqq676N/qHf/iH3wG48cYb+a9gGwBJ/FezDYAk/qvZ5n6S+O9im/tJ4n8K2zyQJP43sM1zk8T/NbZ5fiTx/5Vtnpsk/i+xzf0k8T+JbQAk8V/JNpL4tzp79uwzuOqqq6666qp/GypXXXXVVVdd9e+0s7ODbQAk8Z/NNveTxH8l29xPEv/VbAMgif9OtrmfJP4nsc0DSeJ/C9s8N0n8X2Sb50cS/x/Z5rlJ4v8C29xPEv9T2AZAEv9VbCOJf43rr78egH/4h3/4ba666qqrrrrq34bKVVddddVVV/0bnT179laei20AJPFfwTYAkvivZhsASfxXs839JPHfyTYPJIn/SWzzQJL438Q2z00S/1fZ5vmRxP83tnlukvjfzDb3k8T/BLYBkMR/BdtI4qqrrrrqqqv+C1G56qqrrrrqqn+j++6771aAnZ0ddnZ22Nvb4362AZDEfwXbAEjiv5pt7ieJ/2q2uZ8k/rvZ5n6S+J/GNg8kif9tbPPcJPF/mW2eH0n8f2Kb5yaJ/41scz9J/HezjST+K9gGQBL/kq2tLQDuu+++W7nqqquuuuqqfxuCq6666qqrrvp3+Id/+IffBtje3ub5sY1t/qvYxja2+e9gG9vY5r+DbWxjm/8JbGMb2/xPZRvb2MY2/1vZxja2sY1t/j+wjW1sYxvb2Ob/E9vYxja2+d/INrb572Yb2/xXsc0Lc9111wHwD//wD7/DVVddddVVV/3bUbnqqquuuuqq/wK2AZDEfxXbAEjiv4NtACTx38E295PEfzfbPJAk/ieyzQNJ4n8r2zw3Sfx/YJvnJon/D2zzQJL438I295PEfxfbAEjiP5ttJPH8bG9vA3DffffdylVXXXXVVVf92xFcddVVV1111b/D3//93/82wE033cSLwja2sc1/FdvY5r+LbWxjm/8utrGNbf6nsI1tbPM/mW1sYxvb/G9nG9vYxja2+f/CNraxjW1sY5v/62xjG9vY5n8L29jmv5Nt/ivY5vnZ2toC4L777ns6V1111VVXXfVvR+Wqq6666qqr/h3Onj37DICdnR3+tWwDIIn/Cra5nyT+O9jmfpL472Cb+0nifwLbPJAk/qeyzXOTxP9mtnlukvj/wjbPjyT+L7LNA0nifzLb3E8S/9VsAyCJ/0y2kcQDbW1tAXD27NlncNVVV1111VX/dlSuuuqqq6666t/hvvvuuxVge3ubfyvbAEjiv4ptACTx38U2AJL472Kb+0nifwrb3E8S/9PZ5oEk8b+dbZ4fSfx/YZvnJon/a2zzQJL4n8o2AJL4r2YbSfxnso0k7re1tQXA2bNnb+Wqq6666qqr/u2oXHXVVVddddW/w9mzZ28F2NnZ4d/LNgCS+K9im/tJ4r+Dbe4nif8utrmfJP6nsM0DSeJ/Ots8N0n8X2Cb5yaJ/y9s89wk8X+Jbe4nif+JbAMgif9KtgGQxH+F7e1tAO67775bueqqq6666qp/OypXXXXVVVdd9e9w33333Qqws7PDfxTb3E8S/1VsAyCJ/y62uZ8k/rvY5oEk8T+FbR5IEv8b2OaBJPF/hW2eH0n8f2Cb5yaJ/wts80CS+J/ENgCS+K9kG0n8Z7CNJAC2trYAuO+++27lqquuuuqqq/7tCK666qqrrrrq3+m+++67FeDGG2/kP5ptbPNfyTa2sc1/J9vYxjb/3WxjG9v8T2Mb29jGNv9b2MY2trGNbf6vsY1tbGMb2/x/YRvb2MY2tvm/wDa2sc3/JLaxzX8l2/xnsc3W1hYA9913361cddVVV1111b8PwVVXXXXVVVf9O509e/ZW/pPZxjb/1Wxjm/9utrHN/wS2sY1t/ieyjW1s87+NbWxjG9v8X2Qb29jGNrb5/8I2trGNbWzzv5ltbGOb/ylsY5v/KraxzX+G6667DoB/+Id/+G2uuuqqq6666t+H4Kqrrrrqqqv+nf7+7//+twFuuukm/rPZxja2+a9kG9vY5r+TbWxjm/8JbGMb2/xPZBvb2MY2/9vYxja2sY1t/i+yjW1sYxvb2Ob/A9vYxja2+d/KNraxzf8EtrHNfxXbXHXVVVddddX/YFSuuuqqq6666j+Ibf4r2QZAEv+VbAMgif9OtrmfJP672eaBJPE/jW0eSBL/29jmuUni/yLbPDdJ/F9mm+cmif9NbAMgif9utgGQxH8220jiP8r1118PwD/8wz/8DlddddVVV13170Nw1VVXXXXVVf9O//AP//A7ADfddBO2sc1/JdvY5r+abWxjm/9utrGNbf6nsI1tbPM/lW1sYxvb/G9lG9vYxjb/l9nGNraxjW3+r7ONbWxjm/8tbGMb2/x3s81/BdtcddVVV1111f9AVK666qqrrrrq3+ns2bO3Auzs7HA/2wBI4r+Kbe4nif9KtrmfJP472eZ+kvifwDb3k8T/VLZ5IEn8b2Sb5yaJ/6ts8/xI4v8i2zyQJP6ns839JPHfwTYAkvjPZBtJ/Htdf/31APzDP/zDb3PVVVddddVV/z5Urrrqqquuuuo/kW3uJ4n/KrYBkMR/NdsASOK/m23uJ4n/CWzzQJL4n8o2DySJ/61s89wk8X+ZbZ6bJP6vsc0DSeJ/MtsASOK/g20AJPGfxTaS+PfY2toC4L777ruVq6666qqrrvr3Ibjqqquuuuqqf6f77rvv1vvuu+/WnZ0ddnZ2eEFsY5v/SraxzX8H29jGNv8T2MY2tvmfxDa2sc3/dLaxjW1s87+dbWxjG9vY5v8629jGNraxzf81trGNbf4ns41t/rvY5j+Tba666qqrrrrqfwiCq6666qqrrvoPcPbs2VsBdnZ2+JfYxjb/lWxjG9v8d7CNbWzzP4FtbGOb/0lsYxvb2OZ/OtvYxja2sc3/draxjW1sY5v/62xjG9vYxjb/V9jGNraxzf9EtrGNbf6r2cY2/1ls829x/fXXA/AP//APv81VV1111VVX/fsRXHXVVVddddV/gPvuu+9WgJ2dHV5UtrHNfzXb2Oa/i21s8z+FbWxjm/9pbGMb2/xvYRvb2MY2/xfYxja2sY1t/q+zjW1sYxvb/F9gG9vY5n8i29jmv5pt/rPY5l9ra2sLgPvuu+9Wrrrqqquuuurfj8pVV1111VVX/Qe47777bgXY3t7mX8s295PEfxXb3E8S/9Vscz9J/E9gm/tJ4n8S2zyQJP43sM0DSeL/Ats8N0n8X2abB5LE/2a2uZ8k/iexDYAk/qvYRhL/GWwjiRfV1tYWAPfdd9+tXHXVVVddddW/H8FVV1111VVX/Qf4h3/4h98BuOmmm/j3sI1t/qvZxjb/XWxjG9v8T2Eb29jGNv/T2MY2trHN/xa2sY1tbGOb/ytsYxvb2MY2/5fZxja2sY1t/reyjW1s8z+JbWzzX8U2tvnPYJsX1fb2NgBnz559BlddddVVV13170flqquuuuqqq/4Hsg2AJP4r2eZ+kvjvYJv7SeJ/CtvcTxL/09jmfpL438Q2DySJ/yts89wk8X+VbR5IEv/b2OZ+kvifwDYAkvivYBtJ/EezjST+Jddffz0A9913361cddVVV1111b8flauuuuqqq676D3D27NlbAXZ2dviPZJv7SeK/km0AJPHfxTYAkvifxDb3k8T/NLZ5IEn8b2Kb5yaJ/yts89wk8X+RbZ6bJP63sM39JPHfzTYAkvjPZhsASfxHso0kXhRnz569lauuuuqqq67696Ny1VVXXXXVVf8B7rvvvlsBdnZ2+M9iGwBJ/Feyzf0k8d/BNveTxP8ktrmfJP4nss0DSeJ/G9s8kCT+L7HNc5PE/0W2eSBJ/G9gm/tJ4r+TbQAk8Z/NNpL4j2QbSbwgW1tbANx33323ctVVV1111VX/fgRXXXXVVVdd9R/kH/7hH34b4KabbuI/k21s89/BNrb572Qb29jmfxrb2MY2tvmfyja2sY1t/jeyjW1sYxvb/F9jG9vYxja2+b/INraxjW3+N7CNbWzz38k2/xVs8x/NNs/P9ddfD8B99913K1ddddVVV131H4PKVVddddVVV/0vZZv7SeK/km3uJ4n/Lra5nyT+p7HN/STxP5VtHkgS/xvZ5oEk8X+NbZ6bJP4vsc39JPE/nW0AJPHfwTYAkvjPZBtJ/EeyjSQeaGtrC4B/+Id/+G2uuuqqq6666j8GwVVXXXXVVVf9B/n7v//73wa48cYb+a9mG9v8d7CNbWzz38k2trHN/0S2sY1t/qezjW1sY5v/rWxjG9vYxjb/F9nGNraxjW3+r7CNbWxjm//JbGMb2/x3sI1t/jPZ5j+aba666qqrrrrqPxmVq6666qqrrvoPtrOzg20AJPFfyTYAkvjvYBsASfx3ss39JPE/jW0eSBL/k9nmgSTxv5Vtnpsk/q+xzXOTxP92tnkgSfxPZBsASfxXs40k/rPYBkAS/1FsIwmA66+/HoB/+Id/+B2uuuqqq6666j8Glauuuuqqq676D/IP//APvwOws7PD/WxzP0n8V7HN/STxX80295PEfyfb3E8S/xPZ5n6S+J/ONg8kif/NbPNAkvi/yDYPJIn/7WxzP0n8T2MbAEn8V7INgCT+s9hGElddddVVV131vwCVq6666qqrrvoPcvbs2VsBdnZ2eH5sAyCJ/0q2AZDEfwfb3E8S/51scz9J/E9kmweSxP90tnkgSfxvZpvnJon/a2zz3CTxv5Vt7ieJ/0lscz9J/FexDYAk/jPYRhL/EWwjieuuuw6Af/iHf/htrrrqqquuuuo/BpWrrrrqqquu+g+2s7PDC2MbAEn8V7LN/STx38E2AJL472ab+0nifyrb3E8S/xvY5oEk8b+dbZ6bJP6vsc0DSeJ/I9vcTxL/k9gGQBL/VWwjif8MtpHEfwTbbG9vA3DffffdylVXXXXVVVf9xyC46qqrrrrqqv8g991336333XffrQA7Ozv8S2xjm/8OtrHNfxfb2MY2/xPYxja2+Z/MNraxjW3+t7CNbWxjG9v8X2Ab29jGNrb5v8Y2trGNbf43so1tbGOb/ylsY5v/Krb5z2Kb/whbW1tcddVVV1111X8Cgquuuuqqq676D3T27NlbAXZ2dnhR2cY2tvmvZhvb2Oa/i21sY5v/CWxjG9v8T2cb29jGNv+b2MY2trHN/xW2sY1tbPN/jW1sYxvb2OZ/G9vYxjb/E9jGNv8VbGOb/wy2+fe6/vrrAfiHf/iH3+aqq6666qqr/uMQXHXVVVddddV/oPvuu+9WgJ2dHf4tbGOb/w62sc1/J9vYxjb/E9jGNrb538A2trHN/za2sY1tbPN/hW1sYxvb2Ob/GtvYxja2+d/ENrb5n8A2tvmvYJv/DLb5j3DffffdylVXXXXVVVf9x6Fy1VVXXXXVVf+B7rvvvlsBdnZ2+PewDYAk/qvZ5n6S+O9im/tJ4r+bbR5IEv+T2eaBJPG/iW0eSBL/V9jmuUni/wrbPJAk/qezzf0k8d/JNgCS+M9kGwBJ/EeyjST+La6//noA7rvvvlu56qqrrrrqqv84VK666qqrrrrqP9A//MM//A7ATTfdxH8E29xPEv/VbAMgif9OtgGQxP8UtrmfJP6ns80DSeJ/E9s8N0n8X2GbB5LE/xW2uZ8k/qezzf0k8d/FNpL4z2YbSfxHso0k/q3Onj37DK666qqrrrrqPw6Vq6666qqrrvpPsLOzw3802wBI4r+abe4nif8utrmfJP6nsM39JPG/gW0eSBL/29jmgSTxf4Vtnpsk/rezzQNJ4n8y2wBI4r+DbQAk8Z/JNpL4j2QbSfxrXH/99QD8wz/8w29z1VVXXXXVVf9xqFx11VVXXXXVf6CzZ8/eyn8y2wBI4r+Dbe4nif8utrmfJP6nsM39JPG/hW3uJ4n/jWzz3CTxf4VtHkgS/9vZ5oEk8T+Rbe4nif9qtgGQxH8W20jiP5JtJPGi2t7e5qqrrrrqqqv+ExBcddVVV1111X+g++6771aAnZ0ddnZ2+M9kG9vY5r+LbWzz3802trHN/yS2sY1tbPO/hW1sYxvb/G9mG9vYxjb/l9jGNraxjW3+t7ONbWzzP5VtbPPfwTa2+c9iG9v8d7vvvvtu5aqrrrrqqqv+4xBcddVVV1111X+wv//7v/9tgJ2dHf6r2MY2/11sYxvb/HezjW1s8z+NbWxjm/9NbGMb29jmfzPb2MY2trHN/yW2sY1tbPO/mW1sYxvb/E9jG9v8d7DNfybb/EexzYvi+uuvB+Af/uEffoerrrrqqquu+o9F5aqrrrrqqqv+k9jmv5pt7ieJ/w62uZ8k/jvZ5n6S+J/ENg8kif8tbPNAkvjfzDYPJIn/K2zz3CTxv5Ft7ieJ/ylscz9J/FexDYAk/jPYRhL/EWwjiRdma2sLgPvuu+9Wrrrqqquuuuo/FsFVV1111VVX/Qf7h3/4h98GuOmmm7CNbf472MY2/51sY5v/CWxjG9v8T2Qb29jmfxvb2MY2tvnfzja2sY1tbPN/iW1sYxvb/G9kG9vY5n8S29jmv5Jt/rPY5j+KbV6Y7e1tAO67776nc9VVV1111VX/sahcddVVV1111X+ws2fP3gpw7Ngx7mcbAEn8V7PN/STx38E295PEfzfb3E8S/9PY5n6S+N/GNg8kif/tbPNAkvi/wjYPJIn/TWxzP0n8T2AbAEn8V7ANgCT+o9lGEv8RbCOJ52drawuAs2fPPoOrrrrqqquu+o9F5aqrrrrqqqv+g9133323Auzs7PDcbAMgif8OtgGQxH8X29xPEv/dbHM/SfxPY5sHksT/NrZ5IEn8b2ebB5LE/xW2eSBJ/G9hm/tJ4r+bbQAk8V/BNpL4j2YbSfxHsI0kntv29jYAZ8+evZWrrrrqqquu+o9F5aqrrrrqqqv+g9133323Auzs7PCC2OZ+kvivZpv7SeK/i20AJPE/gW3uJ4n/iWzzQJL438Y2z00S/5vZ5rlJ4v8C2zyQJP43sM39JPHfyTYAkvjPZhsASfxHso0k/rNsbW0BcN99993KVVddddVVV/3HonLVVVddddVV/8HOnj37DICdnR1eFLYBkMR/B9sASOK/i23uJ4n/CWzzQJL4n8g295PE/1a2eSBJ/G9nmweSxP8FtnkgSfxPZxsASfx3sg2AJP6z2UYS/5FsI4l/L9tI4oG2t7cBuO+++27lqquuuuqqq/5jEVx11VVXXXXVf4L77rvvVoCbbrqJF5VtbPPfxTa2sc1/J9vYxjb/k9jGNrb5n8o2trGNbf43s41tbGOb/wtsYxvb2MY2/xfYxja2+Z/ONraxzX8n29jmP5tt/qPZ5j+Cbe63tbUFwH333XcrV1111VVXXfUfj+Cqq6666qqr/hOcPXv2Vv6NbGMb2/x3sY1t/rvZxja2+Z/ENraxzf9ktrGNbf63s41tbGOb/ytsYxvb2OZ/O9vYxja2+Z/MNraxzX8X29jmP5NtbPMfyTb/EWwDcP311wPwD//wD7/NVVddddVVV/3HI7jqqquuuuqq/wR///d//9sAN910E/8etrHNfxfb2MY2/91sYxvb/E9iG9vY5n8y29jGNrb53842trGNbf6vsI1tbGOb/+1sYxvb/E9mG9v8d7HNfzbb/EeyzVVXXXXVVVf9L0Hlqquuuuqqq/4XsM39JPHfwTYAkvjvZpv7SeJ/CtvcTxL/k9nmgSTxv5ltnpsk/rezzXOTxP9GtnkgSfxPY5v7SeK/km0AJPGfxTaS+I9iG0n8e9jm+uuvB+Af/uEffoerrrrqqquu+o9HcNVVV1111VX/Cf7hH/7hdwBuvvlm/qPZxjb/XWxjG9v8T2Ab29jmfxLb2MY2tvmfzja2sY1t/i+wjW1sY5v/K2xjG9vY5n8r29jGNv8T2cY2/9VsY5v/LLaxzX8U21x11VVXXXXV/3BUrrrqqquuuuo/wdmzZ28F2NnZ4T+LbQAk8d/FNveTxH8329xPEv+T2OZ+kvifzjYPJIn/7WzzQJL4v8A2DySJ/21scz9J/E9iGwBJ/FeyjST+s9hGEv8RbCOJf6vrr78egH/4h3/4ba666qqrrrrqPx6Vq6666qqrrvpfzjb3k8R/F9sASOJ/AtvcTxL/k9jmfpL438A295PE/wW2eSBJ/F9gmweSxP8mtrmfJP6nsA2AJP6r2AZAEv8ZbCOJ/wi2kcS/xfb2NgD33XffrVx11VVXXXXVfzyCq6666qqrrvpPcN99991633333bqzs8POzg7/VWxjm/9OtrGNbf6nsI1tbPM/jW1sYxvb/G9gG9vYxjb/V9jGNraxjW3+L7CNbWxjm/9NbGMb2/xPYRvb2Oa/im1s85/BNv9RbHPVVVddddVV/wMRXHXVVVddddV/krNnz94KsLOzw38129jGNv+dbGMb2/xPYRvb2OZ/ItvYxjb/W9jGNraxzf8ltrGNbWzzf4FtbGMb2/xvYRvb2OZ/CtvY5r+Kbf4z2OY/im3+Na6//noA/uEf/uG3ueqqq6666qr/HARXXXXVVVdd9Z/kvvvuuxVgZ2cH2/x3sY1t/rvZxja2+Z/CNraxzf9EtrGNbWzzv4VtbGMb2/xfYhvb2MY2/xfYxja2sc3/BraxjW3+J7CNbf4r2MY2/9Fs8x/FNi+q7e1tAO67775bueqqq6666qr/HFSuuuqqq6666j/JfffddyvAzs4OALYBkMR/B9vcTxL/nWwDIIn/KWxzP0n8T2Sb+0nifwvbPJAk/q+wzQNJ4n8729xPEv/T2eZ+kvjvZBsASfxns40k/iPZRhL/lba2tgC47777buWqq6666qqr/nNQueqqq6666qr/JP/wD//wOwA33XQTD2Sb+0niv4NtACTx38k295PE/xS2uZ8k/ieyzQNJ4n8L2zyQJP6vsM1zk8T/VrZ5IEn8T2ab+0niv4ttACTxn8k2kviPZBtJ/HvZRhL/ku3tbQDOnj37DK666qqrrrrqPweVq6666qqrrvpvZBsASfx3sM39JPHfyTb3k8T/FLa5nyT+p7LN/STxv4ltHkgS/5fY5oEk8b+Vbe4nif/JbAMgif8utgGQxH8W2wBI4j+KbQAk8e9hG0m8MNdffz0A9913361cddVVV1111X8OKlddddVVV131n+Ts2bO3Ahw7dox/iW0AJPHfxTYAkvjvZpv7SeJ/CtvcTxL/U9nmgSTxv4ltHkgS/5fY5oEk8b+RbR5IEv8T2eZ+kvjvYBtJ/GeyjST+I9lGEv8etpHEv+Ts2bO3ctVVV1111VX/OahcddVVV1111X+S++6771aAnZ0dXlS2uZ8k/jvY5n6S+O9mm/tJ4n8K29xPEv+T2eaBJPG/iW0eSBL/l9jmgSTxv5Ft7ieJ/4lsAyCJ/2q2AZDEfxbbAEjiP4ptJPHvYRtJPD/b29sA3Hfffbdy1VVXXXXVVf85CK666qqrrrrqP9E//MM//DbAzTffzL+WbWzz38k2trHN/wS2sc3/NLaxjW1s8z+dbWxjm/+NbGMb29jm/xrb2MY2tvnfyDa2sY1t/qexjW1s81/NNrb5z2Sb/0i2+c9w/fXXA3DffffdylVXXXXVVVf956Fy1VVXXXXVVf/D2eZ+kvjvYhsASfx3s839JPE/jW3uJ4n/yWzzQJL438Y2DySJ/0ts80CS+N/GNveTxP8ktgGQxH8l2wBI4j+DbSTxH8U2kvi3so0kHmh7exuAf/iHf/htrrrqqquuuuo/D8FVV1111VVX/Sf6+7//+98GuOmmm/iPYBvb/HeyjW1s8z+BbWxjm/+JbGMb2/xvYBvb2MY2/xvZxja2sc3/NbaxjW1s87+NbWxjm/9JbGOb/2q2+c9im/9Itvn3sM1VV1111VVX/TegctVVV1111VX/BXZ2dviPZBsASfx3ss39JPHfzTb3k8T/NLa5nyT+N7DN/STxv5FtHkgS/5fY5oEk8b+Fbe4nif8JbAMgif8qtgGQxH802wBI4n8C20gC4PrrrwfgH/7hH36Hq6666qqrrvrPQ+Wqq6666qqr/hP9wz/8w+8AHDt2jP8MtrmfJP472QZAEv8T2OZ+kvifxjYPJIn/6WzzQJL438g2DySJ/0tscz9J/G9hm/tJ4r+bbe4nif8KtpHEfwbbSOLfyzaS+I+wvb3NVVddddVVV/0XoHLVVVddddVV/4nOnj17K8DOzg7/2WwDIIn/Tra5nyT+J7DN/STxP5Ft7ieJ/w1s80CS+N/INs9NEv8X2OaBJPG/gW3uJ4n/brYBkMR/NtsASOI/mm0k8e9lG0n8W9lGEltbWwD8wz/8w29z1VVXXXXVVf95qFx11VVXXXXVf4GdnR3+q9jmfpL472Sb+0nifwLb3E8S/xPZ5oEk8b+BbR5IEv9b2eaBJPF/gW0eSBL/09kGQBL/3WwDIIn/bLaRxH8020ji38s2kvi3ss329jYA9913361cddVVV1111X8egquuuuqqq676T3Tffffdet99990KsLOzw38129jmfwLb2OZ/EtvYxjb/k9nGNrb538Q2trGNbf43s41tbGOb/ytsYxvb/E9nG9vY5r+bbWzzn802tvmPZpv/CLb5t9re3uaqq6666qqr/osQXHXVVVddddV/srNnz94KsLOzw38X29jGNv/dbGMb2/xPYhvb2OZ/MtvYxjb/29jGNrb53842trGNbf4vsI1tbGOb/8lsYxvb/HeyjW3+s9nmP5pt/iPY5t/i+uuvB+C3fuu3vpurrrrqqquu+s9FcNVVV1111VX/ye67775bAXZ2drCNbf472cY2/xPYxja2+Z/ENraxzf9ktrGNbWzzv4ltbGMb2/xvZxvb2MY2/xfYxja2+Z/MNrb572Sb/2y2sc1/JNv8R7DNVVddddVVV/0PRuWqq6666qqr/pPdd999twLs7OxwP9vcTxL/HWxzP0n8d7PN/STxP4VtHkgS/1PZ5n6S+N/ENg8kif/NbPNAkvjfzDYPJIn/aWxzP0n8V7MNgCT+M9lGEv9RbCOJfy/bSOJFdcMNNwBw33333cpVV1111VVX/eciuOqqq6666qr/ZP/wD//wOwA333wzz49tbPPfyTa2sc3/BLaxjW3+p7GNbWzzP5ltbGMb2/xvYxvb2MY2/9vZxja2+b/ANraxzf9EtrHNfwfb2OY/k23+I9nGNv8dzp49+wyuuuqqq6666j8Xlauuuuqqq676L3Ls2DFeGNsASOK/k20AJPE/gW0AJPE/jW3uJ4n/yWzzQJL438Q2DySJ/61s80CS+N/MNveTxP8ktrmfJP4r2QZAEv8ZbAMgif8otpHEv5VtJPGiuP766wH4h3/4h9/mqquuuuqqq/5zUbnqqquuuuqq/2Rnz569lX8F29xPEv9dbHM/Sfx3s839JPE/jW3uJ4n/6WxzP0n8b2ObB5LE/1a2eSBJ/G9lm/tJ4n8S2wBI4r+SbQAk8Z/BNpL4j2IbSfxb2UYS/5Lt7W2uuuqqq6666r8IwVVXXXXVVVf9J7vvvvtuBdjZ2WFnZ4d/DdvY5r+bbWzzP4VtbGOb/4lsYxvb/G9gG9vYxjb/G9nGNraxzf9mtrGNbWzzv5VtbGOb/0lsY5v/arb5z2Kb/0i2+fewzYvqvvvuu5Wrrrrqqquu+s9FcNVVV1111VX/Bf7+7//+twGOHTvGv4VtbGOb/062sY1t/qewjW1s8z+RbWxjG9v8b2Ab29jmfyvb2MY2tvnfzDa2sY1t/jeyjW1s8z+FbWzzX8k2tvnPYBvb/Eexzb+HbV6Q66+/HoB/+Id/+B2uuuqqq6666j8flauuuuqqq676X8Y2AJL472Sb+0nifwLb3E8S/xPZ5n6S+J/ONg8kif+NbPNAkvjfyjb3k8T/Nra5nyT+u9nmfpL4r2AbSfxnsI0k/ifb3t4G4L777ruVq6666qqrrvrPR3DVVVddddVV/wX+4R/+4bcBbrrpJv6j2MY2/xPYxjb/k9jGNrb5n8o2trHN/xa2sY1tbPO/lW1sYxvb/G9lG9vYxjb/29jGNrb5n8A2tvmvYBvb/GewzX8E2/x72Ob52d7eBuC+++57OlddddVVV131n4/KVVddddVVV/0XOHv27K0Ax44d4z+abe4nif9OtrmfJP6nsM39JPE/kW0eSBL/G9jmfpL438o295PE/1a2eSBJ/G9hm/tJ4r+TbQAk8Z/NNgCS+I9kG0n8e9lGEv9WtpHEA21vbwNw9uzZZ3DVVVddddVV//moXHXVVVddddV/gfvuu+9WgJ2dHf4z2QZAEv/dbHM/SfxPYZv7SeJ/KtvcTxL/G9jmgSTxv5FtHkgS/1vZ5n6S+N/CNgCS+O9kGwBJ/GezjST+I9lGEv9etpHEv5VtJHG/ra0tAM6ePXsrV1111VVXXfWfj8pVV1111VVX/Re47777bgU4duwY/xVscz9J/Hezzf0k8T+Fbe4nif+pbHM/SfxvYZsHksT/RrZ5IEn8b2Sb+0nifwPb3E8S/11sAyCJ/0y2AZDEfxTbAEji38M2kviPsL29DcB99913K1ddddVVV131n4/KVVddddVVV/0XOHv27DMAdnZ2+K9mGwBJ/E9gGwBJ/E9im/tJ4n8q2zyQJP63sM0DSeJ/I9s8kCT+t7HNA0nifzrbAEjiv4ttACTxn8k2kviPZBtJ/HvYRhL/FraRBMD29jYA9913361cddVVV1111X8+gquuuuqqq676L/IP//APvw1w880389/BNraxzf8EtrGNbf6nsY1tbPM/nW1sY5v/bWxjG9v8b2Yb29jGNv8b2cY2tvmfzja2sc1/F9v8Z7PNfzTb/HvZ5t/KNtvb2wDcd999t3LVVVddddVV/zWoXHXVVVddddV/Mdv8d7PN/STx380295PE/yS2uZ8k/iezzQNJ4n8L2zyQJP63ss0DSeJ/E9vcTxL/k9kGQBL/1WwDIIn/LLYBkMR/FNtI4t/DNpL4t7j++usB+Id/+Iff5qqrrrrqqqv+axBcddVVV1111X+Rv//7v/9tgJtvvhnb2MY2/91sY5v/KWxjG9v8T2Mb29jmfwPb2MY2/9vYxja2sc3/ZraxjW3+t7GNbWzzP5ltbGOb/2q2sc1/Jtv8R7LNv5dtrrrqqquuuup/CSpXXXXVVVdd9d/MNgCS+O9km/tJ4n8C29xPEv+T2OaBJPE/mW0eSBL/m9jmgSTxv5FtHkgS/1vY5oEk8T+RbQAk8V/JNgCS+M9gG0n8R7GNJP49bCOJf43rr78egH/4h3/4Ha666qqrrrrqvwaVq6666qqrrvov8g//8A+/A3DzzTfz/NjmfpL472QbAEn8T2EbAEn8T2Sb+0nifzrb3E8S/9vY5oEk8b+RbR5IEv9b2OZ+kvifxjYAkvivZBtJ/GewDYAk/iPYRhJXXXXVVVdd9X8clauuuuqqq676L3L27NlbAXZ2dviX2AZAEv+dbHM/SfxPYJv7SeJ/ItvcTxL/09nmgSTxv41t7ieJ/61scz9J/G9hm/tJ4n8S2wBI4r+KbQAk8Z/BNpL4j2AbSfxb2UYSL6obbrgBgH/4h3/4ba666qqrrrrqvwaVq6666qqrrvofzDYAkvjvZpv7SeJ/AtvcTxL/E9nmfpL438A295PE/za2eSBJ/G9kmweSxP8GtgGQxP8ktrmfJP4r2AZAEv/RbCOJ/wi2kcS/lW0k8aLY3t4G4L777ruVq6666qqrrvqvQXDVVVddddVV/0Xuu+++W++7775bjx07xs7ODv8atrGNbf4nsI1t/iexjW1s8z+VbWxjm/8tbGMb29jmfyPb2MY2tvnfyja2sc3/BraxjW3+p7GNbf6r2OY/g21s8x/BNv8etrnqqquuuuqq/6EIrrrqqquuuuq/0NmzZ28FOHbsGP9WtrHN/wS2sY1t/iexjW1s8z+VbWxjG9v8b2Eb29jmfyvb2MY2tvnfyDa2sY1t/qezjW1s8z+JbWzzX8E2tvnPYJv/CLb597DNC3PDDTcA8A//8A+/zVVXXXXVVVf91yG46qqrrrrqqv9C9913360AOzs7/HvZxja2+Z/ANraxzf8ktrGNbf4ns41tbPO/hW1sYxvb/G9lG9vY5n8r29jGNv/T2cY2tvmfwja2+a9gm/8MtvmPYJv/LNvb2wDcd999t3LVVVddddVV/3WoXHXVVVddddV/ofvuu+9WgGPHjvEfyTYAkvifwDYAkvifxDb3k8T/VLa5nyT+t7DNA0nifxvbPJAk/rexzQNJ4n8q2wBI4n8C2wBI4j+TbQAk8R/JNpL497KNJP4tbCOJ52drawuA++6771auuuqqq6666r8Olauuuuqqq676L/QP//APvwNw880385/BNveTxH8329xPEv+T2OZ+kvifyjYPJIn/LWxzP0n8b2SbB5LE/za2uZ8k/ieyzf0k8d/NNgCS+M9kG0n8R7KNJP69bCOJfwvbSOK5bW9vA3D27NlncNVVV1111VX/dahcddVVV1111f9RtgGQxP8EtrmfJP4nsc39JPE/mW3uJ4n/LWzzQJL438g295PE/za2uZ8k/ieyDYAk/rvZRhL/mWwDIIn/KLaRxL+XbSTxb2EbSTzQDTfcAMB99913K1ddddVVV131X4fKVVddddVVV/0XOnv27K0AOzs7/Fexzf0k8T+Bbe4nif9JbHM/SfxPZpv7SeJ/E9vcTxL/G9nmgSTxv4lt7ieJ/2lscz9J/HexDYAk/jPZRhL/UWwDIIl/D9tI4j/S2bNnb+Wqq6666qqr/utQueqqq6666qr/Qvfdd9+tAMeOHeO/g20AJPE/hW0AJPE/jW3uJ4n/yWzzQJL438I2DySJ/41s80CS+N/CNveTxP80tgGQxH8X2wBI4j+LbQAk8R/FNpL497CNJP61bCOJ+21vbwNw33333cpVV1111VVX/dchuOqqq6666qr/Yv/wD//w2wA333wz/11sYxvb/E9hG9vY5n8i29jGNv8b2MY2tvnfxja2sY1t/reyjW1s87+JbWxjm/9pbGMb2/x3sY1t/jPZ5j+Sbf672AbghhtuAOC+++67lauuuuqqq676r0Xlqquuuuqqq/6b2MY2kvjvZJv7SeJ/AtvcTxL/09jmfpL4n842DySJ/01scz9J/G9kmweSxP8GtrmfJP4nsQ2AJP472AZAEv8ZbCOJ/yi2kcS/lW0k8W9hm62tLQD+4R/+4be56qqrrrrqqv9aBFddddVVV131X+zv//7vfxvg5ptvBsA2tvmfwDa2+Z/ENraxzf9EtrGNbWzzv4FtbGOb/21sYxvb2OZ/K9vYxjb/W9jGNrb5n8Q2tvnvYpv/LLaxzX8U2/x72Obfant7m6uuuuqqq676b0Llqquuuuqqq/6bHDt2jAeyDYAk/rvZ5n6S+J/CNveTxP9EtrmfJP6ns839JPG/jW0eSBL/29jmgSTxP51t7ieJ/wlsAyCJ/2q2AZDEfwbbSOI/gm0k8W9lG0n8a21vbwPwD//wD7/DVVddddVVV/3XonLVVVddddVV/8X+4R/+4XcAjh07xvNjm/tJ4r+bbQAk8T+Jbe4nif+JbHM/SfxPZ5sHksT/Nra5nyT+N7LN/STxP51t7ieJ/262uZ8k/ivZBkAS/9FsI4n/CLaRxL+VbSTxr7G9vc1VV1111VVX/TehctVVV1111VX/xc6ePXsrwLFjx/iX2AZAEv/dbHM/SfxPYhsASfxPZZv7SeJ/A9vcTxL/29jmgSTxv41tHkgS/5PZ5n6S+O9mGwBJ/FeyjST+o9lGEv8RbCOJfyvbSOJFtb29DcA//MM//DZXXXXVVVdd9V+LylVXXXXVVVf9N9nZ2eFFZZv7SeK/m23uJ4n/KWxzP0n8T2Wb+0nifwPbPJAk/rexzQNJ4n8b29xPEv+T2QZAEv/dbAMgif8qtgGQxH8k2wBI4t/LNpL4t7KNJF4U29vbANx33323ctVVV1111VX/tQiuuuqqq6666r/Yfffdd+t99913K8CxY8f417KNbf6nsI1t/qexjW1s8z+ZbWxjm/9NbGMb2/xvZRvb2OZ/I9vYxjb/k9nGNrb572Yb2/xXss1/Btv8R7DNf7bt7W2uuuqqq6666r8RwVVXXXXVVVf9Nzh79uytADs7O/xb2cY2tvmfwDa2sc3/NLaxjW3+J7ONbWxjm/8tbGMb29jmfyPb2MY2tvnfxja2sc3/ZLaxjW3+O9nGNv9VbGOb/2i2+Y9gm38r2/xLbrjhBgB+67d+67u56qqrrrrqqv96BFddddVVV1313+C+++67FeDYsWP8R7CNbf6nsI1tbPM/jW1sY5v/6WxjG9v8b2Ib29jmfyvb2MY2/9vYxja2+Z/MNrb572Qb2/xXsc1/NNv8R7DNv5Vtrrrqqquuuup/MCpXXXXVVVdd9d/gvvvuuxVgZ2eH/0i2uZ8k/iewzf0k8T+Jbe4nif/JbHM/SfxvYZsHksT/NrZ5IEn8b2GbB5LE/zS2uZ8k/jvYBkAS/9lsAyCJ/yi2kcS/l20k8W9hG0k8PzfccAMA9913361cddVVV1111X89gquuuuqqq676b/AP//APvwNwyy238J/FNrb5n8Q2tvmfyDa2sc3/dLaxjW1s87+JbWxjG9v8b2Qb29jmfxvb2MY2/xPZxjb/XWzzX8U2/5FsY5t/L9v8Zzl79uwzuOqqq6666qr/elSuuuqqq6666r/Rzs4O/9lscz9J/E9gm/tJ4n8a29xPEv/T2eZ+kvjfxDb3k8T/NrZ5IEn8b2Gb+0nifxLbAEjiv5ptACTxn802AJL4j2IbSfx72EYS/1q2kcRzu+GGGwD4h3/4h9/mqquuuuqqq/7rUbnqqquuuuqq/wZnz569lf8GtgGQxP8UtrmfJP6nsc39JPE/nW3uJ4n/TWzzQJL438Y295PE/xa2uZ8k/qewzf0k8V/JNgCS+M9mG0n8R7GNJP49bCOJfy3bSOKBtre3ueqqq6666qr/RgRXXXXVVVdd9d/gvvvuuxXg2LFjHDt2jP9qtrGNbf4nsY1tbPM/kW1sY5v/DWxjG9vY5n8b29jGNv8b2cY2trHN/xa2sY1t/iexjW3+q9nGNv/ZbPMfyTb/XWzz/Nx33323ctVVV1111VX/9Qiuuuqqq6666r/J3//93/82wM7ODv+dbGMb2/xPYhvb2OZ/ItvYxja2+d/ANraxzf82trGNbWzzv5FtbGOb/y1sY5v/SWxjm/9qtrHNfybb2OY/im3+PWzz73XDDTcA8A//8A+/w1VXXXXVVVf996By1VVXXXXVVf/NdnZ2+J/CNgCS+J/ENgCS+J/KNveTxP90trmfJP63sc39JPG/jW3uJ4n/6WxzP0n8T2AbAEn8V7KNJP4z2UYS/xFsI4l/K9tI4l/LNpLY3t4G4L777ruVq6666qqrrvrvQXDVVVddddVV/03+4R/+4bcBjh07hm1sY5v/CWxjG9v8T2Ib29jmfzLb2MY2/xvYxja2sc3/NraxjW1s87+NbWxjG9v8T2cb29jmfwLb2Oa/km1s85/JNv9RbPPvYZt/C9tsb28DcN999z2dq6666qqrrvrvQeWqq6666qqr/pucPXv2VoBjx47xQLYBkMT/BLYBkMT/JLa5nyT+p7LN/STxv4Ft7ieJ/21scz9J/G9jm/tJ4n8y29xPEv+dbHM/SfxXsA2AJP4z2EYS/xFsI4l/K9tI4l9re3sbgLNnzz6Dq6666qqrrvrvQeWqq6666qqr/pvcd999twLs7Ozw/NjmfpL472ab+0nifxLb3E8S/1PZ5n6S+N/ANg8kif9NbPNAkvjfxDb3k8T/ZLYBkMR/N9sASOK/gm0k8Z/BNgCS+PeyjST+rWwjiX+N7e1tAM6ePXsrV1111VVXXfXfg8pVV1111VVX/Te57777bgU4duwY/xLbAEjifwLb3E8S/5PY5n6S+J/KNveTxP8WtrmfJP63sc39JPG/iW3uJ4n/qWxzP0n8d7INgCT+s9kGQBL/GWwjiX8v20ji38o2knhRbW9vA3DffffdylVXXXXVVVf996By1VVXXXXVVf9Nzp49+wyAY8eO8aKyzf0k8T+BbQAk8T+Nbe4nif+pbHM/SfxvYZv7SeJ/G9s8kCT+t7DN/STxP5VtACTx38k2AJL4z2YbSfxnsI0k/r1sI4n/Ctvb2wDcd999t3LVVVddddVV/z0Irrrqqquuuuq/0T/8wz/8NsDNN9/Mv5ZtbPM/hW1sY5v/iWxjG9v8T2Yb29jGNv9b2MY2trHN/0a2sY1t/jexjW1sY5v/iWxjG9v8d7KNbf6z2cY2/xls8x/BNv9WtnlRbG9vA3DffffdylVXXXXVVVf996Fy1VVXXXXVVf/L2eZ+kvifwDb3k8T/NLa5nyT+J7PN/STxv4Vt7ieJ/21s80CS+N/CNveTxP80tgGQxH8X20jiP5ttJPEfzTYAkvj3sI0k/i1sI4kX5oYbbgDgH/7hH36bq6666qqrrvrvQ3DVVVddddVV/43+/u///rcBbrnlFv4j2MY2/5PYxja2+Z/INraxzf90trGNbf43sY1tbGOb/41sYxvb/G9iG9vY5n8a29jGNv8dbGOb/2y2sc1/Btv8e9nm38o2V1111VVXXfW/AJWrrrrqqquu+j/INveTxP8UtgGQxP9EtrmfJP4ns839JPG/iW3uJ4n/bWxzP0n8b2EbAEn8T2MbAEn8V7MNgCT+M9lGEv/RbCOJfw/bSOLfwjaSeH5uvPFGAP7hH/7hd7jqqquuuuqq/z5Urrrqqquuuuq/0T/8wz/8DsDNN9/MfxbbAEjifwrb3E8S/xPZ5n6S+J/MNg8kif8tbPNAkvjfxDYPJIn/6WxzP0n8T2IbAEn8V7MNgCT+s9gGQBL/kWwjiX8P20jiqquuuuqqq/4PonLVVVddddVV/43Onj17K8CxY8f4z2ab+0nifwrb3E8S/xPZ5n6S+J/ONveTxP8mtrmfJP63sc39JPE/nW3uJ4n/KWxzP0n8V7INgCT+s9hGEv+RbCOJfw/bSOJfyzaSeG433HADAP/wD//w21x11VVXXXXVfx8qV1111VVXXfXf7L777rt1Nps9+NVe7dW46tkkcdV/LElc9d9DElf9+0ji/xpJ/E8kif8I29vbANx33323ctVVV1111VX/fdCDHvQgrrrqqquuuuq/2zd90zc9nauuuuqqq676P+ZDPuRDHsJVV1111VVX/fdCD3rQg7jqqquuuuqqq6666qqrrrrqqquuuuqqq/5PonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q/iHwFenYalbh0N6wAAAABJRU5ErkJggg==) + +```js +exampleSketch = startSketchOn(-XZ) + |> startProfile(at = [-10, 23]) + |> line(end = [10, 0]) + |> line(end = [0, 10]) + |> line(end = [-10, 0]) + |> close() + +example = extrude(exampleSketch, length = 5) +``` + +![Rendered example of startProfile 2](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAEqLklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddX/IC/2Yi/22tdcc82D3/Ed3/GzuOqqq6666qr/ZX7rt37ruwF+9Ed/9HO46qqrrrrqqv8ZqFx11VVXXXXV/xDv+I7v+Flv9EZv9Nm/9Vu/xfd///fzf5ltrrrqv5ptrrrqfxrb/B/z2e///u8PwI/+6I9+DlddddVVV1313w896EEP4qqrrrrqqqv+O11zzTUP/vAP//Dv2tjYeO3v+q7v4qr/22xz1f8vtrnqP5Ztrnpetvmf4MSJE7ze670eN910062f9Vmf9Tr33XffrVx11VVXXXXVfx/K8ePHueqqq6666qr/Li/2Yi/22l/xFV/xV//wD//w4J/6qZ/iqv/7JCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhJX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ffeP/uiPfg5XXXXVVVf9f4Ue9KAHcdVVV1111f8/11xzzYM//MM//Ltuuumm1/65n/s5nvGMZ3DVVf+f2Oaq/1tsc9W/jm3+P7PN/2W2OX78OO/93u/NnXfe+duf+Zmf+TpcddVVV131/xF60IMexFVXXXXVVf+/XHPNNQ/+nM/5nN+65557HvxzP/dzXHXVVf/9bHPV/0y2ueqFs83/N7b53+L48eO81Eu9FI997GNv/azP+qzXue+++27lqquuuuqq/0/Qgx70IK666qqrrvr/4x3f8R0/653e6Z0++/u///u57bbbuOq/nm2uuup/Ettc9V/LNlc9J9v8f2Kb/2qv9VqvxWMf+9hbf+u3fuu7f/RHf/RzuOqqq6666v8L9KAHPYirrrrqqqv+77vmmmse/OEf/uHfddNNN73293//93Pp0iWuuuq/k22u+v/HNlf9x7PNVWCb/+ts8+9x/Phx3uu93os777zztz/zMz/zdbjqqquuuur/A/SgBz2Iq6666qqr/m97sRd7sdf+8A//8O+65557HvzzP//zXHXVVf86trnqfwfbXPXvY5v/j2zzf5lt7nf8+HFe6qVeisc+9rG3fv3Xf/37/MM//MNvc9VVV1111f9llOPHj3PVVVddddX/Xe/4ju/4WR/xER/x3T/1Uz91/M/+7M+46qqr/vUkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhiav+ZZKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSfx/IglJSEISkpCEJCQhCUlIQhKSkIQkJCGJ/40kIQlJSEISkpCEJCQhCUlIQhKSkIQk/qeThCQksV6vecYznsHm5ubxN3uzN3vtzc3N4//wD//wO1x11VVXXfV/FXrQgx7EVVddddVV//dcc801D/7wD//w77rpppte+wd+4Ae4dOkSV/3fY5urrvrPZpur/uPZ5qoXzDb/X9jmv8vx48d5z/d8T+68887f/vqv//r3ue+++27lqquuuuqq/2vQgx70IK666qqrrvq/5cVe7MVe+3M/93N/6/d+7/f4/d//fa666v8C21z1f5dtrvq3s81Vz8k2/9fZ5j/C8ePHeamXeike85jH3Pr1X//17/MP//APv81VV1111VX/l6AHPehBXHXVVVdd9X/HO77jO37W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AEn8d7GNJP4nsA2AJK666v8D2/xrbW1tAXDffffdylVXXXXVVVf9xyO46qqrrrrqqv8E991336333Xffrdvb22xvbwNgG9vY5n8q29jGNv/T2MY2tvmfxDa2sc3/BLaxzX832/x3so1t/qewzVVXXXXVVVddddVV/y0Irrrqqquuuuo/ydmzZ28F2Nra4rnZxja2+Z/KNrb5n8g2trHN/yS2sc3/BLaxzX8n29jmv5Nt/qewzVX/90niqhfdddddB8A//MM//DZXXXXVVVdd9Z+D4Kqrrrrqqqv+k9x33323Amxvb/PC2MY2tvmfyDa2sc3/RLaxjW3+p7CNbWzz3802tvnvZBvb/Hexzf8UtrnqqquebWtrC4D77rvvVq666qqrrrrqPweVq6666qqrrvpPct99990KsLW1xYvKNveTxP80trmfJP6nsQ2AJP6nsA2AJP472QZAEv9dbCOJ/w62AZDEfzfbSOKqq66Cra0tAO67775bueqqq6666qr/HARXXXXVVVdd9Z/kH/7hH34H4IYbbuDfwja2sc3/RLaxjW3+p7GNbWzzP4VtbPPfzTa2+e9iG9v8d7HN/wS2ueqqq2B7exuAs2fPPoOrrrrqqquu+s9B5aqrrrrqqqv+F7DN/STxP41t7ieJ/0lscz9J/Hezzf0k8d/FNgCS+O9gG0n8d7CNJP672UYSV131/9l1110HwH333XcrV1111VVXXfWfg8pVV1111VVX/Sc5e/bsrQBbW1v8R7LN/STxP41t7ieJ/0lsAyCJ/wlsAyCJ/y62AZDEfzXbAEjiv5ptJPHfzTaSuOqq/wts82919uzZW7nqqquuuuqq/xxUrrrqqquuuuo/yX333XcrwPb2Nv9ZbAMgif+JbHM/SfxPYZv7SeK/m20AJPHfxTYAkvivZhtJ/FezDYAkrrrqP5IkbHPVv2xrawuA++6771auuuqqq6666j8HwVVXXXXVVVf9J/qHf/iH3wa4/vrr+c9kG9vY5n8q29jmfxrb2OZ/AtvY5r+TbWzzX802tvnvYJv/Tra56qr/j6677joA7rvvvlu56qqrrrrqqv88BFddddVVV131f4xtbGOb/4lsYxvb/E9iG9vY5r+bbWzz38k2/x1s89/BNv+dbHPVVf/fbG1tAfAP//APv81VV1111VVX/echuOqqq6666qr/RH//93//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Ele96CTx7yGJ/0iS+K8mif9sknhutvmvIgnb/HtJwjb/GpKwzX8WSdjmuuuuA+Af/uEffoerrrrqqquu+u9DcNVVV1111VX/jf7hH/7hdwBuvPFG/ivZxjb/E9jGNv9dbPNfxTb/WWzzH8k2/1PY5n8bSfxfIIn/KpKQhCT+u0hCEpKQxH82SfxHkMS/liT+NSRx1VVXXXXVVf9LEVx11VVXXXXVf6OzZ8/eCrC9vc1/B9vY5n8C29jGNv/VbGOb/wq2+c9im/9ItvmPYJur/mtI4j+KJP6zSUISkvifSBKSkMR/FklI4r+DJP41JPGiksR1110HwD/8wz/8NlddddVVV13134fKVVddddVVV/03u++++25dLBYPftSjHsX/BJL4n0IS/5dJ4n8DSfx7SeK/kyT+LSTxX00S/90k8Z9JEv9b2eY/i23+q9nmP8vW1hYA9913361cddVVV1111X8f9KAHPYirrrrqqquu+u/2Td/0TU/nqquuuuqqq/6P+ZAP+ZCHcNVVV1111VX/vdCDHvQgrrrqqquuuuqqq6666qqrrrrqqquuuuqq/5OoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q/hHzyEWaYyTPEQAAAAASUVORK5CYII=) + + diff --git a/docs/kcl/startProfileAt.md b/docs/kcl/startProfileAt.md deleted file mode 100644 index 6bff891f9..000000000 --- a/docs/kcl/startProfileAt.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: "startProfileAt" -excerpt: "Start a new profile at a given point." -layout: manual ---- - -Start a new profile at a given point. - - - -```js -startProfileAt( - to: [number], - sketchSurface: SketchSurface, - tag?: TagDeclarator, -): Sketch -``` - - -### Arguments - -| Name | Type | Description | Required | -|----------|------|-------------|----------| -| `to` | [`[number]`](/docs/kcl/types/number) | | Yes | -| `sketchSurface` | [`SketchSurface`](/docs/kcl/types/SketchSurface) | A sketch type. | Yes | -| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No | - -### Returns - -[`Sketch`](/docs/kcl/types/Sketch) - - -### Examples - -```js -exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) - |> line(end = [10, 0]) - |> line(end = [0, 10]) - |> line(end = [-10, 0]) - |> close() - -example = extrude(exampleSketch, length = 5) -``` - -![Rendered example of startProfileAt 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAFToklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddX/IC/2Yi/22tdcc82D3/Ed3/GzuOqqq6666qr/ZX7rt37ruwF+9Ed/9HO46qqrrrrqqv8ZqFx11VVXXXXV/xDv+I7v+Flv+IZv+Nm/+Zu/yc/93M9x1VVXPZttrrrqX2Kbq/57nThx4rPf/u3fHoAf/dEf/Ryuuuqqq6666r8fetCDHsRVV1111VVX/Xe65pprHvzhH/7h33XDDTe89nd8x3ewu7vLVVdd9T+bba76/8E2V/3rnDhxgvd///dnHMdbP+uzPut17rvvvlu56qqrrrrqqv8+lOPHj3PVVVddddVV/11e7MVe7LW/4iu+4q/+/u///sE/+IM/yGq14qqrrvqfTxKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSVz1X0sSkpCEJCQhCUlIQhKS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sM0DScI2DyQJ2zyQJGwDIIn/DJKwzQNJwjYPJAnbPJAkbHM/SfxHk4RtHkgStnkgSdhGEv8RJGGbB5KEbQAk8a8hCds8kCRscz9JvKgkYZsHkoRtJPHCSMI2DyQJ2wBI4l9DErYBkMQLIgnbPJAk/i0k8aKSxL+FJF5UkrCNJP61JPFvJQnbAEjiP4MkbPNAkrBN13UA3Hfffbdy1VVXXXXVVf990IMe9CCuuuqqq6666r/bN33TNz2dq6666qqrrvo/5kM+5EMewlVXXXXVVVf990IPetCDuOqqq6666qqrrrrqqquuuuqqq6666qqr/k+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r+IfAYf4H6R1Hj7xAAAAAElFTkSuQmCC) - -```js -exampleSketch = startSketchOn(-XZ) - |> startProfileAt([10, 10], %) - |> line(end = [10, 0]) - |> line(end = [0, 10]) - |> line(end = [-10, 0]) - |> close() - -example = extrude(exampleSketch, length = 5) -``` - -![Rendered example of startProfileAt 1](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAFET0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddX/IC/2Yi/22tdcc82D3/Ed3/GzuOqqq6666qr/ZX7rt37ruwF+9Ed/9HO46qqrrrrqqv8ZqFx11VVXXXXV/xDv+I7v+Flv+IZv+Nm/8Ru/wc/8zM9w1f99krjqqhdEEldd9b/N8ePHP/t1X/d1AfjRH/3Rz+Gqq6666qqr/vuhBz3oQVx11VVXXXXVf6drrrnmwR/+4R/+XYvF4rW/7du+jX8tSVz1n0MSV/3fJImrrrrqP8fx48d5u7d7OzY3N2/9rM/6rNe57777buWqq6666qqr/vtQjh8/zlVXXXXVVVf9d3mxF3ux1/6Kr/iKv/q7v/u7B//ET/wEkpCEJCQhCUlIQhKSkIQkJCGJq0ASkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIYmr/uNJQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCElddddV/ntVqxdOf/nRKKcff6Z3e6a03NzeP/8M//MPvcNVVV1111VX/PdCDHvQgrrrqqquuuuq/wzu+4zt+1hu+4Rt+9o//+I/z9Kc/nf8PJHHV/xySuOqq/80kcdX/bA95yEN427d9W37lV37ls3/0R3/0c7jqqquuuuqq/3roQQ96EFddddVVV131X+maa6558Id/+Id/12KxeO1v//Zv5386SVz1X0cSV131ryGJq676n+z48eO87uu+LjfeeOOtn/VZn/U69913361cddVVV1111X8dyvHjx7nqqquuuuqq/yov9mIv9tpf8RVf8Vd/93d/9+Cf+Imf4D+LJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIYmrnpMkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkMRV/zNIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkrjqqv/pVqsVd999N6WU4+/0Tu/01pubm8f/4R/+4Xe46qqrrrrqqv8alOPHj3PVVVddddVV/xXe8R3f8bPe/d3f/bu///u/n7/8y7/k+ZGEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCSuAklIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJK76zyMJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSOKqq676j7Varbj11lt50pOedPwd3uEdXns+n/MP//APv8NVV1111VVX/edDD3rQg7jqqquuuuqq/0zXXHPNgz/8wz/8uzY2Nl7727/927nqeUniqv85JHHVVVe9cJK46t/m+PHjvM7rvA433njjrZ/1WZ/1Ovfdd9+tXHXVVVddddV/Hsrx48e56qqrrrrqqv8sL/ZiL/baX/EVX/FXf/d3f/fgn/iJn+D/CklIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkrjqRSMJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSVz1/4MkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQxFX/dqvVinvuuYdSyvF3fMd3fOvNzc3j//AP//A7XHXVVVddddV/DvSgBz2Iq6666qqrrvrP8I7v+I6f9YZv+Iaf/RM/8RM8/elP57+bJK76zyOJq/7/kcRVV131b3f8+HHe933fl1/5lV/57B/90R/9HK666qqrrrrqPx560IMexFVXXXXVVVf9R7rmmmse/OEf/uHftbGx8drf/u3fzr+XJK76jyOJq/73ksRVV131f8vx48d5mZd5GV7sxV7s1s/6rM96nfvuu+9Wrrrqqquuuuo/DuX48eNcddVVV1111X+UF3uxF3vtr/iKr/irv/u7v3vwT/zETyAJSUhCEpKQhCQkIQlJSEISkpCEJCQhif/PJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhJX/ftJQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCGJq6666v+e1WrFrbfeyubm5vF3fMd3fOvNzc3j//AP//A7XHXVVVddddV/DPSgBz2Iq6666qqrrvqP8I7v+I6f9YZv+Iaf/ZM/+ZM8/elP5/8jSVz130MSV13130USV131H+H48eO8z/u8D7/yK7/y2T/6oz/6OVx11VVXXXXVvx960IMexFVXXXXVVVf9e1xzzTUP/vAP//Dv2tjYeO3v+I7v4H8bSVz1n0sSV111P0lcddVVL9jx48d56Zd+aV7sxV7s1s/6rM96nfvuu+9WrrrqqquuuurfjnL8+HGuuuqqq6666t/qdV7ndd77cz/3c3/r7//+7x/8kz/5k/xXkoQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJK56NklIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJK76rycJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJK666qoXbrVaceutt7K5uXn8Hd/xHd96c3Pz+D/8wz/8DlddddVVV131b4Me9KAHcdVVV1111VX/Fh/+4R/+XS/90i/93j/5kz/J05/+dP41JHHVv50krvqfTRJXXXXVVf9ex48f533e5334lV/5lc/+0R/90c/hqquuuuqqq/710IMe9CCuuuqqq6666l/jmmuuefCHf/iHf9fGxsZrf+d3fidXvWgkcdV/H0lcddX/NZK46v++48eP89Iv/dI89rGPvfWzPuuzXue+++67lauuuuqqq6560aEHPehBXHXVVVddddWL6nVe53Xe+8M//MO/6zd/8zf5rd/6Lf6vk8RV//kkcdVV/xqSuOqq/29e+7Vfm8c+9rG3/tZv/dZ3/+iP/ujncNVVV1111VUvGvSgBz2Iq6666qqrrnpRfPiHf/h3vczLvMx7/+RP/iRPf/rT+Z9MElf9x5LEVf+3SeKqq676n+348eO893u/N7/yK7/y2T/6oz/6OVx11VVXXXXVvww96EEP4qqrrrrqqqtemGuuuebBH/7hH/5dGxsbr/2d3/md/GeTxFX/PpK46n8PSVx11VVXvaiOHz/OS7/0S/PYxz721s/6rM96nfvuu+9WrrrqqquuuuoFoxw/fpyrrrrqqquuekFe53Ve570/93M/97f+/u///sE/9VM/xb9EEpKQhCQkIQlJSEISkpCEJCQhCUlIQhL/H0lCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkMRV/zaSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSVx11VVX/WusVituvfVWNjc3j7/jO77jW29ubh7/h3/4h9/hqquuuuqqq54/9KAHPYirrrrqqquuen4+93M/97duvPHG1/7Jn/xJbr31Vq56TpK46r+OJK666j+TJK666n+b48eP817v9V78yq/8ymf/6I/+6Odw1VVXXXXVVc8LPehBD+Kqq6666qqrHuiaa6558Od8zuf81uHh4YO/67u+i/9rJHHVfzxJXPX/kySuuuqq/z7Hjx/npV7qpXjsYx9762d91me9zn333XcrV1111VVXXfVslOPHj3PVVVddddVV93ud13md9/7cz/3c3/rTP/3T4z/1Uz/F/zSSkIQkJCEJSUhCEpKQhCQkIQlJSEISkrgKJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhJX/deQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlcddVV/71WqxXPeMYz2NzcPP6O7/iOb725uXn8H/7hH36Hq6666qqrrroCPehBD+Kqq6666qqrAD73cz/3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AEn8Z7DN/STxn8k2DySJ/0q2eW6S+J/KNi+MJK666v8z21wFW1tbANx33323ctVVV1111VVXEFx11VVXXXXVM/393//9bwNsbW1hm/8otrHNfxTb2OY/km1s8x/NNrb5j2Yb29jmP4ttbGOb/wq2sY1t/rvYxja2sY1t/rewjW1sYxvb2MY2trHNVVf9b2Ab29jGNraxjW1sYxvb2MY2trHNVVdsbW0BcN99993KVVddddVVV11BcNVVV1111VXPdPbs2WcA3HDDDQDY5j+SbWzzH8U2tvmPZBvb/EezjW3+M9jGNrb5z2Ib29jmv4JtbGMb2/x3so1tbGMb2/xvZRvb2MY2trGNbWxjG9tcddW/l21sYxvb2MY2trGNbWxjG9vYxja2uerfZ2trC4CzZ88+g6uuuuqqq666gspVV1111VVXPdN99913K8/FNgCS+I9iG0n8R7ENgCT+o9jmfpL4j2Kb+0niP5pt7ieJ/wy2eSBJ/GezzQNJ4r+TbZ6bJP6vsM2/hiSu+r/DNlf973XttdcCcN99993KVVddddVVV11B5aqrrrrqqque6ezZs7cCbG9v89xsAyCJ/wi2AZDEfxTbAEjiP5JtACTxH8k2AJL4z2AbAEn8Z7LN/STxX8E2DySJ/262eX4k8X+dbf69JHHVv55trrrq+Tl79uytXHXVVVddddUVVK666qqrrrrqme67775bAba3t3lBbAMgif8ItgGQxH8U2wBI4j+SbQAk8R/JNveTxH8029xPEv+ZbHM/SfxXsc0DSeJ/Cts8P5K46tlsc9VVV/37bW1tAXDffffdylVXXXXVVVddQXDVVVddddVVD/AP//APvw1www038MLYxjb/UWxjm/9ItrGNbf4j2cY2/xlsY5v/LLaxjW3+s9nGNraxzX8l29jGNraxzf80trGNbWxjG9tcddVVV/1bXXvttQDcd999t3LVVVddddVVz0blqquuuuqqq/4dbAMgif8ItgGQxH8k2wBI4j+Kbe4nif9ItrmfJP4z2OZ+kvjPZpv7SeK/mm0eSBL/E9nmBZHEVVddddULsrW1BcA//MM//DZXXXXVVVdd9WwEV1111VVXXfUAf//3f//bANdffz3/Grb5j2Qb2/xHs41t/qPZxjb/GWxjG9v8Z7GNbWzzX8E2trGNbf472MY2trGNbf6ns41tbGMb29jG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FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q/iHwFenYalbh0N6wAAAABJRU5ErkJggg==) - -```js -exampleSketch = startSketchOn(-XZ) - |> startProfileAt([-10, 23], %) - |> line(end = [10, 0]) - |> line(end = [0, 10]) - |> line(end = [-10, 0]) - |> close() - -example = extrude(exampleSketch, length = 5) -``` - -![Rendered example of startProfileAt 2](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAEqLklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddX/IC/2Yi/22tdcc82D3/Ed3/GzuOqqq6666qr/ZX7rt37ruwF+9Ed/9HO46qqrrrrqqv8ZqFx11VVXXXXV/xDv+I7v+Flv9EZv9Nm/9Vu/xfd///fzf5ltrrrqv5ptrrrqfxrb/B/z2e///u8PwI/+6I9+DlddddVVV1313w896EEP4qqrrrrqqqv+O11zzTUP/vAP//Dv2tjYeO3v+q7v4qr/22xz1f8vtrnqP5Ztrnpetvmf4MSJE7ze670eN910062f9Vmf9Tr33XffrVx11VVXXXXVfx/K8ePHueqqq6666qr/Li/2Yi/22l/xFV/xV//wD//w4J/6qZ/iqv/7JCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhJX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ffeP/uiPfg5XXXXVVVf9f4Ue9KAHcdVVV1111f8/11xzzYM//MM//Ltuuumm1/65n/s5nvGMZ3DVVf+f2Oaq/1tsc9W/jm3+P7PN/2W2OX78OO/93u/NnXfe+duf+Zmf+TpcddVVV131/xF60IMexFVXXXXVVf+/XHPNNQ/+nM/5nN+65557HvxzP/dzXHXVVf/9bHPV/0y2ueqFs83/N7b53+L48eO81Eu9FI997GNv/azP+qzXue+++27lqquuuuqq/0/Qgx70IK666qqrrvr/4x3f8R0/653e6Z0++/u///u57bbbuOq/nm2uuup/Ettc9V/LNlc9J9v8f2Kb/2qv9VqvxWMf+9hbf+u3fuu7f/RHf/RzuOqqq6666v8L9KAHPYirrrrqqqv+77vmmmse/OEf/uHfddNNN73293//93Pp0iWuuuq/k22u+v/HNlf9x7PNVWCb/+ts8+9x/Phx3uu93os777zztz/zMz/zdbjqqquuuur/A/SgBz2Iq6666qqr/m97sRd7sdf+8A//8O+65557HvzzP//zXHXVVf86trnqfwfbXPXvY5v/j2zzf5lt7nf8+HFe6qVeisc+9rG3fv3Xf/37/MM//MNvc9VVV1111f9llOPHj3PVVVddddX/Xe/4ju/4WR/xER/x3T/1Uz91/M/+7M+46qqr/vUkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhiav+ZZKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSfx/IglJSEISkpCEJCQhCUlIQhKSkIQkJCGJ/40kIQlJSEISkpCEJCQhCUlIQhKSkIQk/qeThCQksV6vecYznsHm5ubxN3uzN3vtzc3N4//wD//wO1x11VVXXfV/FXrQgx7EVVddddVV//dcc801D/7wD//w77rpppte+wd+4Ae4dOkSV/3fY5urrvrPZpur/uPZ5qoXzDb/X9jmv8vx48d5z/d8T+68887f/vqv//r3ue+++27lqquuuuqq/2vQgx70IK666qqrrvq/5cVe7MVe+3M/93N/6/d+7/f4/d//fa666v8C21z1f5dtrvq3s81Vz8k2/9fZ5j/C8ePHeamXeike85jH3Pr1X//17/MP//APv81VV1111VX/l6AHPehBXHXVVVdd9X/HO77jO37WG7/xG3/2z//8z3Pbbbdx1VVX/dewzVX/c9nmqheNba4C2/xfZZvn50EPehBv8iZvcutv/dZvffeP/uiPfg5XXXXVVVf9X4Ee9KAHcdVVV1111f9+11xzzYM//MM//Ltuuumm1/6BH/gBLl26xFVXXfX/i22u+q9jm6ueP9v8f2ab/62OHz/Oe7zHe3DnnXf+9td//de/z3333XcrV1111VVX/W+HHvSgB3HVVVddddX/bi/2Yi/22p/7uZ/7W7//+7/P7//+73PVVS8K21x11b+Hba76j2Wbq66wzf83tvmf4Pjx47zkS74kj3nMY2790R/90c/5rd/6re/mqquuuuqq/83Qgx70IK666qqrrvrf6x3f8R0/643f+I0/+xd+4Re47bbbuOqq/89sc9X/Lba56l/PNv/f2eb/C9v8Z3jQgx7EG7/xG9/6W7/1W9/9oz/6o5/DVVddddVV/1uhBz3oQVx11VVXXfW/zzXXXPPgD//wD/+u7e3t1/6FX/gFLl26xFVXXfU/l22u+p/FNle9cLb5/8g2/x/Y5l9y/Phx3vIt35LFYnHrZ33WZ73OfffddytXXXXVVVf9b0M5fvw4V1111VVX/e/yYi/2Yq/9FV/xFX/1pCc96cG/8Au/wHq95qqrrvqfTRKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSVz1/ElCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQk/q+RhCQkIQlJSEISkpCEJCQhCUlIQhKSkMT/RpKQhCQkIQlJSEISkpCEJCQhCUlI4n8TSUhCEpKQhCQkIQlJrNdrbrvtNkopx9/hHd7hrY+Oji7deuutf81VV1111VX/m6AHPehBXHXVVVdd9b/HO77jO37WG7/xG3/2L/7iL3Lbbbdx1VX/FWxz1VUvKttc9R/DNleBbf6vs83/dA960IN45Vd+5Vv/8i//8rt/9Ed/9HO46qqrrrrqfwv0oAc9iKuuuuqqq/7nu+aaax784R/+4d+1vb392j/0Qz/EVVdd9a9nm6v+97PNVf86tvn/yjb/l9nmv9Lx48d5i7d4CxaLxa2f9Vmf9Tr33XffrVx11VVXXfU/HeX48eNcddVVV131P9uLvdiLvfZXfMVX/NWTnvSkB//iL/4iV1111b+NJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUjiqn89SUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQk/i+ThCQkIQlJSEISkpCEJCQhCUlIQhKSkMT/VpKQhCQkIQlJSEISkpCEJCQhCUlI4n8DSUhCEpKQhCQkIQlJSEISkpDEv8dqteK2226jlHL8Hd7hHd56c3Pz+D/8wz/8DlddddVVV/1PRjl+/DhXXXXVVVf9z/WO7/iOn/We7/me3/1TP/VT/P3f/z1XXXXV/y2SkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUjiquckCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkvi/RBKSkIQkJCEJSUhCEpKQhCQkIQlJSEIS/9tIQhKSkIQkJCEJSUhCEpKQhCQkIYn/ySQhCUlIQhKSkIQkJCEJSUhCEg+0Wq14xjOewblz546/6Zu+6WvP53P+4R/+4Xe46qqrrrrqfyr0oAc9iKuuuuqqq/7nueaaax784R/+4d+1vb392j/8wz/MVVf9T2ebq656fmxz1b+fbf6/s83/dbb53+TYsWO85mu+Jtddd92tn/VZn/U69913361cddVVV131Pw160IMexFVXXXXVVf/z/MRP/IQBbrvtNq666qqrrrrqqn8f21z1n+P48eMcO3aM++6779bP+qzPep377rvvVq666qqrrvqfhMpVV1111VX/47zYi73Ya9933323XnPNNQ++5ZZbuOqqq6666qqrrvrf4MVe7MVe+7777vturrrqqquu+p+EylVXXXXVVf/jXHPNNQ++5pprHrxarXj84x/Pc5PEv0QS/x6SeGEk8YJI4t9CEi+IJF4QSfxrSeL5kcTzI4l/LUk8P5J4fiTxryGJ50cSz48k/jUk8YJI4vmRxL+WJF4QSbwwkvj3ksSLQhL/WpK46tls869lm3+Jbf69bPOC2Ob5sc2/lm2em22eH9u8qGzz3Gzz/NjmRWGb52ab52abF4Vtnpttnh/bvChs89xs89xs86KyzXOzzfNjm38N2zw32zw/tvnXss3zY5vnxzb/FrZ5bg9/+MO55pprHsxVV1111VX/E1G56qqrrrrqf5z77rvvVoDVasXu7i7PjyT+JZJ4YSTxwkjihZHECyKJF0YSL4gkXhBJPD+SeEEk8fxI4gWRxPMjiedHEs+PJJ4fSTw/knh+JPH8SOIFkcTzI4nnRxLPjyReEEk8P5J4QSTxgkjiBZHECyOJF0YSLwpJvKgk8W8hif/LbPNvYZsXlW3+JbZ5YWzzgtjmBbHN82Ob58c2z49tnh/bPD+2eW62eX5s89xs89xs8/zY5rnZ5rnZ5rnZ5rnZ5rnZ5rnZ5vmxzXOzzXOzzXOzzfNjm+dmm+dmm+fHNs+PbZ4f2zw32zw/tnl+bPOC2Ob5sc3zY5sXxDYviG1emPvuu+9Wrrrqqquu+p+GylVXXXXVVf/jnD179laA+XzOC2IbAEm8ILaRxAtiG0m8ILaRxAtiG0k8P7YBkMTzYxtJPD+2kcTzYxtJPDfbAEjiudlGEs/NNgCSeG62kcRzs40knpttACTxQLYBkMQD2QZAEg9kGwBJPJBtACTxQLYBkMRzsw2AJB7INgCSeCDbAEjigWwDIInnZhsASTyQbQAk8dxsAyCJ52YbAEk8N9vcTxLPzTb3k8Rzs80DSeL5sc0DSeIFsc1zk8S/xDYvjCT+J7PNv5dt/jVs8y+xzb/ENi+IbV4Q27wgtnl+bPP82Ob5sc3zY5vnZpvnxzbPj22em22em22em22em22eH9s8N9s8N9s8N9s8N9s8P7Z5brZ5brZ5brZ5fmzz3Gzz/Njm+bHN82Ob52ab58c2/1q2eX5s869lmxfENi/IYrEA4OzZs7dy1VVXXXXV/zRUrrrqqquu+h/nvvvuuxVgPp/zL7GNJF4Q20jiBbENgCSeH9sASOL5sQ2AJJ4f20ji+bGNJJ4f20ji+bGNJJ4f20jiudkGQBLPzTaSeG62AZDEA9kGQBLPzTaSeG62kcRzs40knpttACTxQLYBkMQD2QZAEs/NNpJ4brYBkMQD2QZAEg9kGwBJPDfbAEjigWxzP0k8kG0AJPHcbHM/STw329xPEs/NNveTxPNjm/tJ4gWxzQNJ4oWxzfMjiReVbf6vsM2/hW1eFLb5l9jmhbHNC2KbF8Q2z49tnh/bPD+2eX5s8/zY5rnZ5vmxzXOzzfNjm+dmm+dmm+dmm+dmm+fHNs/NNs/NNs/NNs+PbZ6bbZ6bbZ4f2zw32zw/tnl+bPP82Oa52eb5sc0LYpvnxzbPj21eENs8P7Z5QWzzgthmsVgAcN99993KVVddddVV/9MQXHXVVVdd9T/SP/zDP/w2wLFjx7DNC2ObF8Y2tnlhbPPC2OaFsc0LYpsXxDa2eX5sY5vnxza2eX5s84LY5vmxjW2eH9s8P7Z5fmxjm+dmG9s8N9vY5vmxzfNjm+fHNrZ5braxzfNjm+fHNrZ5braxzfNjG9s8P7axzXOzjW1s8/zYxjYviG1s84LYxja2eUFsYxvb2OaFsY1tbGMb27wobGMb29jGNraxzf92trGNbWxjG9vY5kVhG9vYxja2eUFsYxvb2Ob5sY1tbGOb58c2trHNc7ONbWzz3GxjG9s8N9vY5rnZxjbPzTa2eW62sc1zs41tnpttnpttbPPcbPPcbGObB7KNbZ6bbZ6bbZ6bbZ6bbWzz3Gzz3Gzz3Gzz3Gxjm+dmm+dmm+fHNs/NNs+PbZ4f2zw/tnlutnl+bPOC2Ob5sc3zY5sXxDbPj21eENu8ILZZLBYA3Hfffbdy1VVXXXXV/0RUrrrqqquu+l/BNpJ4QWwDIIkXxDaSeEFsI4kXxDaSeEFsI4nnxzYAknh+bCOJ58c2knh+bCOJ52YbAEk8N9tI4vmxjSSem20k8dxsAyCJ52YbSTw320jiudkGQBIPZBsASTyQbQAk8dxsI4nnZhsASTyQbQAk8dxsAyCJB7INgCSem20AJPHcbAMgiedmm/tJ4oFscz9JPDfbPJAknpttHkgSz49tHkgSL4xtnpskXlS2eVFJ4r+Cbf6j2eZfyzYvCtv8S2zzwtjmBbHNC2Kb58c2z49tnh/bPD+2eX5s8/zY5rnZ5vmxzXOzzXOzzXOzzfNjm+dmm+dmm+fHNs/NNs/NNs+PbZ6bbZ4f2zw32zw/tnl+bPP82Oa52eb5sc0LYpvnxzbPj21eENv8a9nmBbENwMmTJwH4h3/4h9/mqquuuuqq/4kIrrrqqquu+h/p7//+738b4MSJE9zPNv8S27wwtnlhbGObF8Q2L4xtbPOC2OYFsc0LYpsXxDYviG2eH9vY5vmxzfNjG9s8P7Z5fmxjm+dmG9s8P7Z5fmxjm+dmG9s8N9vY5vmxjW2em21s8/zYxjbPzTa2sc1zs41tbPPcbGMb2zw/trHN82Mb29jmBbGNbWzzgtjGNraxzQtiG9vYxja2+ZfYxja2sY1tbGObfw/b2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2Obfwza2sY1tbGObf4ltbGMb29jmBbGNbWxjmxfENraxzfNjG9vY5rnZxja2eW62sY1tnpttbPPcbGOb52Yb2zw329jmudnGNs/NNrZ5brZ5braxzQPZxjbPzTbPzTbPzTa2eW62eW62eW62sc1zs81zs81zs41tnpttnpttbPPcbPP82Ob5sc3zY5vnZpvnxzYviG2eH9s8P7Z5QWzzgtjmqquuuuqq/9OoXHXVVVdd9b+KbQAk8YLYRhIviG0AJPGC2EYSz49tACTxgthGEs+PbSTx/NgGQBLPzTYAknhutgGQxHOzDYAknpttJPHcbAMgiedmG0k8N9sASOK52UYSz802AJJ4INsASOK52UYSz802AJJ4INsASOK52QZAEg9kGwBJPDfbAEjiudkGQBLPzTYAknhutgGQxHOzzf0k8dxscz9JPD+2uZ8kXhDbPJAkXhDbPDdJvChs8y+RxP9EtvmPYJt/Ddu8KGzzL7HNC2ObF8Q2L4htnh/bPD+2eX5s8/zY5vmxzfNjm+dmm+fHNs/NNs+PbZ6bbZ6bbZ4f2zw32zw32zw/tnlutnl+bPPcbPP82Ob5sc3zY5vnZpvnxzbPj21eENs8P7Z5fmzzgtjmBbHNC2KbF8Q29zt16hQA//AP//A7XHXVVVdd9T8Rlauuuuqqq/5H+od/+IffATh+/DjPj20k8YLYBkASL4htJPGC2EYSL4htJPGC2EYSz49tACTx/NhGEs+PbSTx/NhGEs+PbSTx3GwDIInnZhtJPDfbAEjiudlGEs/NNgCSeG62kcRzsw2AJB7INgCSeG62kcRzsw2AJJ6bbQAk8UC2AZDEc7MNgCSem20AJPHcbAMgiedmm/tJ4rnZ5n6SeG62uZ8knh/bPJAkXhDbPJAkXhjbPD+S+Neyzf8Ftvm3sM2Lyjb/Etu8MLZ5QWzzgtjmBbHN82Ob58c2z49tnh/bPD+2eX5s89xs8/zY5rnZ5vmxzXOzzXOzzfNjm+dmm+fHNs/NNs+PbZ6bbZ4f2zw/tnl+bPPcbPP82Ob5sc0LYpvnxzbPj21eENu8ILZ5QWzzgtjmqquuuuqq/1WoXHXVVVdd9T/S2bNnbwVYLBa8ILaRxAtjG0m8ILaRxAtiGwBJPD+2kcQLYhsASTw/tpHE82MbAEk8N9sASOK52QZAEs/NNgCSeG62kcRzsw2AJJ6bbQAk8UC2AZDEc7MNgCQeyDYAknhutpHEc7MNgCQeyDYAknhutgGQxHOzDYAkHsg2AJJ4brYBkMRzsw2AJJ6bbe4niedmm/tJ4rnZ5n6SeG62eSBJPD+2eSBJvCC2eW6S+JfY5oWRxP9mtvn3sM2/hm3+Jbb5l9jmhbHNC2KbF8Q2z49tnh/bPD+2eUFs89xs8/zY5vmxzXOzzfNjm+dmm+fHNs/NNs/NNs+PbZ6bbZ4f2zw32zw/tnl+bPP82Oa52eb5sc3zY5vnxzYviG2eH9s8P7Z5QWzzgtjmBbHNC2Kb53by5EkA/uEf/uG3ueqqq6666n8iKlddddVVV/2vZhsASbwgtpHEC2IbAEm8ILaRxPNjGwBJvCC2kcTzYxsASTw/tpHE82MbSTw/tpHE82MbSTw32wBI4rnZRhLPj20k8dxsAyCJ52YbSTw32wBI4oFsAyCJ52YbAEk8kG0AJPHcbAMgiedmGwBJPJBt7ieJB7LN/STxQLa5nySem20AJPH82AZAEs+Pbe4niefHNveTxAtimweSxAtjm+cmiX8N27yoJPGfzTb/WWzzr2WbF4Vt/iW2eWFs84LY5gWxzQtim+fHNs+PbV4Q2zw/tnlutnl+bPP82Oa52eb5sc1zs83zY5vnZpvnxzbPzTbPj22em22eH9s8N9u8ILZ5brZ5fmzz/Njm+bHNC2Kb58c2z49tXhDbvCC2eUFs84LY5vlZLBYA3Hfffbdy1VVXXXXV/0RUrrrqqquu+h/pvvvuu/W+++679ZprrnnwbDZjvV7zwthGEi+IbQAk8YLYRhIviG0k8YLYRhIviG0k8YLYRhLPj20k8fzYBkASz802AJJ4braRxPNjG0k8N9sASOK52QZAEs/NNpJ4brYBkMRzs40knpttACTx3GwjiedmGwBJPDfbAEjiudkGQBLPzTYAknhutgGQxHOzDYAknptt7ieJ52ab+0ni+bHN/STx/NjmgSTxgtjmuUnihbHNCyKJfw/b/E9nm38r27yobPOisM0LY5sXxjYviG1eENs8P7Z5QWzz/Njm+bHN82Ob52ab58c2z49tnpttnh/bPDfbPD+2eW62eX5s89xs8/zY5vmxzXOzzfNjm+fHNs+PbZ4f2zw/tnlBbPP82OZfyzYviG1eENu8ILa56qqrrrrqfy0qV1111VVX/Y919uzZW6+55poHLxYLVqsVknhhbCOJF8Y2knhBbCOJF8Q2AJJ4fmwDIInnxzYAknh+bCOJ58c2AJJ4fmwjiefHNpJ4brYBkMRzsw2AJJ6bbQAk8dxsI4nnZhsASTw320jiudkGQBLPzTYAkngg2wBI4rnZBkASz802AJJ4brYBkMRzsw2AJJ6bbQAk8dxscz9JPDfb3E8Sz80295PE82ObB5LE82ObB5LEC2Ob5yaJF4Vt/iWS+J/KNv9RbPOvYZsXhW3+JbZ5YWzzgtjmBbHNC2KbF8Q2z49tnh/bPD+2eX5s89xs8/zY5vmxzXOzzfNjm+dmm+fHNs+PbZ6bbZ4f2zw32zw/tnl+bPP82Ob5sc3zY5vnxzYviG2eH9u8ILZ5fmzzgtjmBbHNC2KbF+TGG28E4B/+4R9+m6uuuuqqq/6nonLVVVddddX/WPfdd9+tL/ZiL8Z8PgfANpJ4YWwDIIkXxDaSeEFsAyCJF8Q2knhBbCOJF8Q2knh+bAMgiefHNpJ4fmwjiefHNpJ4fmwjiefHNpJ4fmwjiedmGwBJPDfbAEjigWwDIInnZhsASTw320jiudkGQBLPzTYAknhutgGQxHOzDYAknpttACTx3GxzP0k8N9sASOL5sc39JPHcbPNAknh+bHM/SbwgtnluknhhbPP8SOJfyzb/l9jm38I2Lyrb/Ets88LY5oWxzQtimxfENs+PbV4Q2zw/tnl+bPP82Ob5sc3zY5vnZpvnxzbPzTbPj22eH9s8N9s8P7Z5fmzz3Gzz/Njm+bHN82Ob58c2z49tnh/bvCC2eX5s84LY5vmxzQtimxfENi+IbV4U9913361cddVVV131PxWVq6666qqr/se67777bgWYz+fczzYAknhhbCOJF8Q2AJJ4QWwjiRfENpJ4QWwjiRfENgCSeH5sI4nnxzYAknhutgGQxHOzDYAknpttACTx3GwDIInnZhsASTw320ji+bGNJJ6bbQAk8dxsAyCJB7INgCSem20AJPHcbAMgiedmGwBJPDfbAEjiudnmfpJ4brYBkMRzs839JPH82OZ+knh+bHM/STw/tnkgSbwwtnlukviX2OaFkcT/drb597LNv4ZtXhS2eWFs88LY5oWxzQtim+fHNi+IbZ4f2zw/tnl+bPP82Ob5sc3zY5vnZpvnxzbPj22em22eH9s8P7Z5brZ5fmzz/Njm+bHN82Ob58c2z49tnh/bvCC2eX5s84LY5vmxzQtimxfENi+IbV4Y2ywWCwDuu+++W7nqqquuuup/KipXXXXVVVf9j/UP//APvwNw4sQJnv70p/NAtpHEC2MbSbwwtpHEC2IbSbwgtgGQxPNjGwBJvCC2kcTzYxsASTw/tpHE82MbSTw/tpHE82MbAEk8N9tI4vmxjSSem20AJPHcbAMgiedmGwBJPDfbSOK52QZAEs/NNgCSeG62AZDEc7MNgCSem23uJ4nnZhsASTw329xPEs/NNveTxPNjm/tJ4vmxzf0k8YLY5oEk8S+xzXOTxL+GbV5UkvivYpv/DLb5t7DNi8I2/xLb/Ets84LY5gWxzQtimxfENs+PbV4Q2zw/tnl+bPPcbPP82Ob5sc3zY5vnZpvnxzbPj22em22eH9s8P7Z5fmzz/Njm+bHN82Ob58c2z49tXhDbPD+2eUFs8/zY5gWxzQtimxfENi+MbQAWiwUAZ8+efQZXXXXVVVf9T0Xlqquuuuqq/7VsI4kXxjYAknhBbCOJF8Q2AJJ4QWwjiRfENpJ4QWwjiRfENpJ4fmwDIInnZhsASTw32wBI4vmxjSSem20AJPHcbAMgiedmGwBJPDfbAEjiudlGEs/NNgCSeG62AZDEc7MNgCSem20AJPHcbAMgiefHNgCSeG62uZ8knptt7ieJ52ab+0ni+bHN/STx/NjmgSTxgtjmuUniX2KbF0QS/x62+d/CNv9WtnlR2eZFYZt/iW1eGNu8ILZ5QWzzgtjm+bHNC2Kb58c2z49tnh/bPD+2eW62eX5s8/zY5vmxzXOzzfNjm+fHNs+PbZ6bbV4Q2zw/tnl+bPP82Ob5sc3zY5sXxDYviG2eH9u8ILZ5QWzzgtjmhbHN/U6dOgXAP/zDP/w2V1111VVX/U9F5aqrrrrqqv+xzp49eyvAYrHgBbENgCReGNtI4gWxDYAkXhDbSOIFsQ2AJJ4f2wBI4vmxDYAknh/bAEji+bGNJJ4f20ji+bENgCSem20AJPHcbAMgiedmGwBJPDfbSOL5sY0knpttACTx3GwDIInnZhsASTw32wBI4rnZBkASz802AJJ4fmwDIInnxzYAknh+bAMgiefHNveTxPNjmweSxPNjmweSxAtjm+cmiReVbV4YSfxvYJv/KLb517DNi8o2/xLbvDC2eWFs84LY5gWxzfNjmxfENs+PbZ4f2zw/tnl+bPP82Ob5sc1zs83zY5vnxzbPj22em22eH9s8P7Z5QWzz/Njm+bHN82Ob58c2z49tXhDbvCC2eX5s84LY5gWxzb+Vba666qqrrvpfh8pVV1111VX/Y9133323Asznc/4ltpHEC2MbSbwwtpHEC2IbAEm8ILaRxAtiG0m8ILaRxAtiG0k8P7aRxPNjGwBJPD+2kcTzYxtJPD+2kcTzYxtJPDfbAEjiudkGQBLPzTYAknhutgGQxHOzDYAknpttACTx3GwDIInnZpv7SeK52eZ+knhutrmfJJ6bbe4niefHNveTxAtim/tJ4gWxzXOTxAtjm+dHEv9atvmPJIn72ea/k23+LWzzorLNi8I2L4xtXhjbvCC2eWFs8/zY5gWxzfNjm+fHNs+PbZ4f2zw/tnl+bPP82Ob5sc3zY5vnZpvnxzbPj22eH9s8P7Z5fmzz/NjmBbHN82Ob58c2L4htXhDbPD+2eUFs84LY5oWxzQtim+e2WCwAuO+++27lqquuuuqq/6kIrrrqqquu+h/tH/7hH34b4Pjx4/xLbGObF8Y2tnlhbPMvsc0LY5sXxjYvjG1s84LY5gWxjW1eENu8ILaxzfNjG9s8P7axzfNjG9s8P7axzfNjG9s8P7axzfNjG9s8P7axzfNjG9s8P7axzQtiG9u8ILaxzQtiG9u8ILaxjW1eENvYxja2eUFsYxvb2OZfYhvb2MY2tnlR2MY2trGNbWxjG9v8V7CNbWzzX8E2trGNbWxjG9u8KGxjG9vYxjYvjG1sYxvbvCC2sY1tbPP82MY2tnl+bGMb2zw/trHN82Mb29jmudnGNs+PbWzz3Gxjm+fHNs+PbZ4f2zw/tnl+bPPcbGOb52Yb2zw329jmudnm+bHN82Ob58c2z49tnh/bPD+2eUFs8/zY5vmxzQtim+fHNrZ5fmzzgtjmBbHNC2ObF8Q2z+3kyZMA/MM//MNvc9VVV1111f9kVK666qqrrvpfwzYAknhhbCOJF8Y2knhBbAMgiRfENpJ4QWwDIInnxzYAknhBbCOJ58c2AJJ4fmwjiefHNgCSeH5sI4nnxzaSeH5sAyCJ52YbAEk8N9sASOK52QZAEs/NNgCSeG62AZDEc7MNgCSem20AJPHcbHM/STw32wBI4vmxzf0k8dxscz9JPD+2uZ8kXhDb3E8SL4htHkgS/xLbPDdJ/GvY5kUhif9OtvnPYJt/Ldu8qGzzL7HNv8Q2L4htXhjbvCC2eUFs8/zY5gWxzfNjm+fHNs+PbZ4f2zw/tnl+bPP82Ob5sc3zY5vnxzbPj22eH9s8P7Z5fmzz/NjmBbHN82ObF8Q2z49tXhDbvCC2eUFs88LY5gWxzfOzsbEBwH333XcrV1111VVX/U9GcNVVV1111f9of//3f//bACdOnOB+tvmX2OZfYpt/iW1eGNvY5oWxzQtjmxfGNrZ5QWzzgtjGNi+IbV4Q29jm+bGNbV4Q27wgtnlBbPOC2MY2z49tbPP82MY2z49tbPP82MY2L4htbPP82MY2tnlBbGMb2zw/trGNbV4Q29jGNrZ5QWxjG9vY5oWxjW1sYxvbvChsYxvb2MY2trHNv4dtbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxzb+XbWxjG9vYxjYvCtvYxja2eWFsYxvb2OYFsY1tbPOC2MY2tnl+bGObF8Q2tnl+bGOb58c2tnlutrHN82Mb2zw329jmudnGNs/NNrZ5braxzXOzjW2em21s89xsY5vnZhvbPDfb2Oa52cY2z802tnl+bPP82Ob5sc3zY5sXxDbPj21eENs8P7Z5QWzzgtjmBbHNC2ObF8Q2L8hiseCqq6666qr/FahcddVVV131v8J8PueBbCOJF8Y2AJJ4QWwDIIkXxDYAknhBbCOJF8Q2AJJ4fmwDIIkXxDaSeH5sAyCJ58c2AJJ4brYBkMTzYxtJPD+2AZDEc7MNgCSem20AJPHcbAMgiefHNpJ4fmwDIInnZhsASTw32wBI4rnZ5n6SeG62AZDE82MbAEm8ILYBkMTzY5v7SeIFsc39JPGC2OaBJPHC2Oa5SeJFZZsXRhL/G9nmP4pt/jVs86Kyzb/ENi+MbV4Y27wwtnlBbPP82OYFsc3zY5sXxDbPj22eH9s8P7Z5fmzz/Njm+bHN82Ob58c2z49tnh/bvCC2eX5s8/zY5gWxzfNjmxfENs+PbV4Q27wgtnlBbPPC2OYFsc0Ls1gsAPiHf/iH3+Gqq6666qr/yahcddVVV131P9o//MM//A7AYrHgudkGQBIvjG0k8cLYRhIvjG0k8YLYBkASL4htJPGC2EYSL4htACTx/NhGEi+IbSTx/NgGQBLPzTYAknh+bCOJ58c2AJJ4brYBkMRzsw2AJJ6bbQAk8fzYBkASz802AJJ4brYBkMTzYxsASTw329xPEs/NNveTxPNjm/tJ4vmxzf0k8YLY5oEk8YLY5oEk8S+xzfMjiX8t2/xrSeI/km3+K9jm38I2LyrbvChs88LY5l9imxfENi+IbV4Q27wgtnl+bPOC2Ob5sc3zY5vnxzbPj22eH9s8P7Z5QWzz/Njm+bHN82Ob58c2L4htnh/bPD+2eUFs84LY5vmxzQtimxfENi+IbV4Y27wgtnlhbLNYLLjqqquuuup/BSpXXXXVVVf9j3b27NlbAebzOS+IbSTxwtgGQBIviG0AJPGC2AZAEi+IbSTxgtgGQBLPj20AJPGC2EYSz49tACTx/NgGQBLPj20k8fzYBkASz802AJJ4fmwjiefHNgCSeG62AZDEc7MNgCSeH9sASOK52QZAEs/NNveTxHOzDYAknh/bAEji+bHN/STx/NjmfpJ4fmzzQJJ4QWxzP0m8MLZ5bpJ4UdjmBZHEfxTb/E9lm38P2/xr2OZFYZt/iW3+JbZ5YWzzgtjmBbHNC2KbF8Q2z49tnh/bvCC2eX5s8/zY5vmxzfNjm+fHNs+PbZ4f27wgtnl+bPP82OYFsc3zY5sXxDbPj21eENu8ILZ5QWzzgtjmhbHNC2KbF8Y2ABsbGwD8wz/8w29z1VVXXXXV/2RUrrrqqquu+l9hsVjwwthGEv8S20jihbGNJF4Y20jiBbENgCReENtI4gWxjSReENsASOL5sQ2AJJ4f20ji+bENgCSeH9tI4vmxDYAknpttACTx/NhGEs+PbQAk8dxsAyCJ58c2AJJ4brYBkMTzYxsASTw329xPEs/NNveTxPNjGwBJvCC2uZ8kXhDb3E8SL4htnpskXhjbPDdJ/GvY5l8iif/JbPMfyTb/WrZ5UdnmX2KbF4VtXhDbvDC2eUFs84LY5gWxzfNjmxfENs+PbZ4f2zw/tnlBbPP82Ob5sc3zY5vnxzYviG2eH9s8P7Z5QWzz/NjmBbHN82ObF8Q2L4htXhDbvCC2eWFs84LY5oWxzf0WiwUA9913361cddVVV131PxmVq6666qqr/ke77777br3vvvtuveaaax584sQJLl68yAtiGwBJvDC2kcQLYxsASbwgtpHEC2MbSbwgtpHEC2IbAEm8ILaRxAtiG0k8P7YBkMTzYxtJPD+2AZDE82MbSTw/tgGQxHOzDYAknh/bAEjiudkGQBLPj20AJPHcbAMgiefHNgCSeH5sAyCJ58c295PEc7PN/STxgtjmfpJ4QWzzQJJ4YWzzQJL4l9jmBZHEv4Vt/i+yzb+VbV5UtnlR2OZFYZsXxjYvjG1eENu8ILZ5QWzz/NjmBbHN82ObF8Q2z49tnh/bPD+2eX5s84LY5vmxzfNjmxfENs+PbZ4f27wgtnlBbPP82OYFsc0LYpsXxDYviG1eGNu8ILZ5YWxzv8ViAcB99913K1ddddVVV/1PR+Wqq6666qr/8c6ePXvrNddc82Db2EYSL4xtJPHC2AZAEi+MbSTxgtgGQBIviG0AJPH82AZAEi+IbSTxgtgGQBLPj20AJPH82EYSz49tACTx/NgGQBLPzTYAknh+bAMgiedmGwBJPD+2AZDEc7MNgCSeH9sASOK52QZAEs+PbQAk8fzY5n6SeH5sAyCJ58c295PEC2KbB5LEC2KbB5LEC2Ob5yaJF5VtXhBJ/F9jm/8ItvnXss2LwjYvCtu8MLZ5YWzzwtjmBbHNC2Kb58c2L4htXhDbPD+2eX5s8/zY5gWxzfNjm+fHNs+PbV4Q2zw/tnlBbPP82OYFsc3zY5sXxDYviG1eENu8ILZ5QWzzwtjmBbHNC2ObBzp16hQA//AP//DbXHXVVVdd9T8dwVVXXXXVVf/j3XfffbcCnDhxAgDb/EtsY5t/iW3+Jbb5l9jmX2KbF8Y2L4xtbPPC2OaFsc0LYhvbvCC2sc0LYpsXxDa2eUFs84LYxjYviG1s8/zYxjYviG1s8/zYxja2eX5sYxvbvCC2sc0LYhvb2OYFsY1tbPMvsY1tbPMvsY1tbGObF4VtbGMb29jGNv9atrGNbWxjG9vYxja2sY1t/rvZxja2sY1tbGMb29jGNv9atrGNbWxjG9v8S2xjG9vYxjYvjG1sY5sXxja2sc0LYhvbvCC2sc3zYxvb2Ob5sY1tnh/b2Ob5sc3zYxvbPD+2sc1zs41tnh/bPD+2eX5sY5vnZhvbPD+2eX5s84LY5vmxzQtim+fHNi+IbZ4f27wgtnlBbPOC2OYFsc0LYpsXxjYviG1eGNtcddVVV131vxqVq6666qqr/se77777buW52EYS/xLbSOKFsQ2AJF4Q2wBI4gWxDYAkXhDbAEji+bENgCReENtI4gWxDYAknh/bAEji+bENgCSeH9tI4vmxDYAknh/bAEjiudkGQBLPj20AJPH82AZAEs/NNgCSeH5sAyCJ58c2AJJ4fmwDIInnxzb3k8TzY5v7SeL5sc0DSeIFsc0DSeKFsc1zk8SLwjbPjyT+vWzzv5lt/j1s869hmxeVbf4ltnlhbPPC2OYFsc0LY5sXxDbPj21eENu8ILZ5fmzz/NjmBbHN82Ob58c2L4htnh/bvCC2eX5s84LY5vmxzQtimxfENi+IbV4Q27wgtnlBbPPC2OYFsc0LY5vn59SpUwDcd999t3LVVVddddX/dFSuuuqqq676H+8f/uEffgfg5MmTPO1pT+N+tgGQxAtjGwBJvDC2kcQLYxtJvDC2kcQLYxtJvCC2AZDE82MbAEm8ILaRxAtiG0m8ILaRxPNjGwBJPD+2AZDE82MbSTw/tgGQxPNjGwBJPD+2AZDEc7MNgCSeH9sASOL5sQ2AJJ4f29xPEs+Pbe4niefHNveTxAtim/tJ4oWxzQNJ4l9im+cmiReVbV4YSfxvZ5v/KLb517LNi8o2LwrbvDC2+ZfY5gWxzQtjmxfENs+PbV4Q27wgtnl+bPOC2Ob5sc0LYpvnxzbPj21eENu8ILZ5fmzzgtjm+bHNC2KbF8Q2L4htXhDbvCC2eUFs88LY5gWxzQtjm3/J2bNnn8FVV1111VX/01G56qqrrrrqf435fM7zYxtJ/EtsI4kXxjYAknhBbAMgiRfENgCSeEFsAyCJF8Q2knhBbCOJF8Q2AJJ4fmwDIInnxzYAknh+bAMgiefHNgCSeG62AZDE82MbAEk8P7YBkMTzYxsASTw329xPEs/NNveTxHOzzf0k8fzYBkASL4ht7ieJ58c295PEC2KbB5LEC2Ob5yaJf4ltnh9J/GvZ5t9CEv8ZbPNfwTb/Vrb517DNi8I2/xLbvDC2eWFs84LY5oWxzQtim+fHNi+IbV4Q2zw/tnlBbPP82Ob5sc0LYpsXxDbPj21eENs8P7Z5QWzzgtjmBbHNC2KbF8Q2L4htXhDbvDC2eUFs88LY5oU5efIkAP/wD//w21x11VVXXfU/HZWrrrrqqqv+xzt79uyt/AtsAyCJF8Y2kviX2EYSL4xtJPHC2EYSL4xtJPGC2AZAEs+PbQAk8YLYBkASz49tACTx/NgGQBLPj20AJPH82EYSz49tACTx/NgGQBLPj20AJPH82AZAEs+PbQAk8fzYBkASz49tACTx/NjmfpJ4QWwDIIkXxDb3k8QLY5sHksS/xDYPJIkXlW1eEEn8R7LN/3S2+feyzb+WbV5UtvmX2OaFsc2/xDYviG1eENu8MLZ5QWzz/NjmBbHNC2Kb58c2L4htnh/bvCC2eX5s84LY5vmxzQtimxfENi+IbZ4f27wgtnlhbPOC2OYFsc0LY5sXxDYvjG1eGNtsbGxw1VVXXXXV/xpUrrrqqquu+h/vvvvuu/W+++679ZprrnnwYrFguVzygthGEi+MbQAk8cLYBkASL4htACTxgtgGQBIviG0AJPGC2EYSL4htACTxgthGEi+IbSTxgthGEi+IbSTx/NgGQBLPj20AJPH82AZAEs+PbQAk8fzYBkASz49tACTx/NgGQBLPj23uJ4nnxzb3k8TzY5sHksTzY5sHksQLY5sHksS/xDbPjyT+NWzzL5HE/xa2+Y9mm38L27yobPOisM2/xDYvjG1eGNu8ILZ5YWzzgtjm+bHNC2KbF8Q2z49tXhDbvCC2eX5s84LY5gWxzfNjmxfENi+IbZ4f27wgtnlBbPOC2OaFsc0LYpsXxjYviG1eGNu8MLZ5oPvuu+9Wrrrqqquu+p+OylVXXXXVVf8rnD179tZrrrnmwfP5nOVyyQtjGwBJvDC2kcS/xDaSeGFsI4kXxjaSeGFsI4kXxDYAknhBbCOJF8Q2AJJ4fmwDIInnxzYAknh+bAMgiefHNgCSeH5sAyCJ58c2AJJ4fmwDIInnxzYAknh+bAMgiefHNveTxPNjm/tJ4vmxzf0k8YLY5n6SeEFs80CSeGFs80CSeFHZ5vmRxL+Vbf4/sM2/h23+NWzzorDNv8Q2/xLbvDC2eUFs88LY5gWxzQtim+fHNi+IbV4Q2zw/tnlBbPOC2OYFsc3zY5sXxDYviG2eH9u8ILZ5QWzzgtjmBbHNC2ObF8Q2L4xtXhDbvDC2eWFsA3Dq1CkA/uEf/uG3ueqqq6666n8DKlddddVVV/2vMp/PsY0k/iW2kcQLYxsASbwwtpHEC2MbAEm8ILYBkMQLYhsASbwgtpHEC2IbAEm8ILYBkMTzYxsASTw/tgGQxPNjGwBJPD+2AZDE82MbAEk8P7YBkMTzYxsASTw/tgGQxPNjm/tJ4vmxDYAkXhDbAEjiBbHN/STxgtjmfpJ4YWxzP0n8S2zz3CTxr2GbF0QS/1/Y5j+Cbf61bPOiss2/xDb/Etu8MLZ5YWzzgtjmhbHNC2KbF8Q2z49tXhDbvCC2eUFs8/zY5gWxzQtimxfENs+PbV4Q27wgtnlBbPOC2OYFsc0LYpsXxjYvjG1eENu8MLZ5YWxzv8ViAcB99913K1ddddVVV/1vQHDVVVddddX/Cn//93//2wCLxQIA27wobPOisM2/xDa2+ZfY5l9im3+JbV4Y29jmhbHNv8Q2L4xtXhjb2OYFsY1tXhDb2OYFsY1tXhDb2OYFsY1tXhDb2OaFsY1tXhDb2MY2L4htbGObF8Y2trHNC2Mb29jGNi+MbWxjG9vY5kVhG9vYxja2+beyjW1sYxvb2MY2trGNbf4ns41tbGMb29jGNraxjW3+LWxjG9vYxjYvCtvYxja2eWFsYxvb2OYFsY1tbPOC2MY2tnlBbGObF8Q2tnl+bGObF8Q2tnl+bGOb58c2tnl+bPOC2Ob5sY1tnh/b2Ob5sc0LYpvnxza2eX5sY5vnxzYviG1eENu8ILZ5QWzzgtjmBbHNC2ObF8Q2tnlBbPPC2OaFsc0DbWxsAHDffffdylVXXXXVVf8bULnqqquuuup/hbNnzz4D4MSJE9zPNgCSeGFsAyCJF8Y2AJJ4YWwjiRfGNgCSeEFsAyCJF8Q2AJJ4QWwDIInnxzYAknhBbAMgiefHNgCSeEFsI4kXxDYAknh+bAMgiefHNgCSeH5sAyCJ58c2AJJ4fmxzP0k8P7a5nySeH9vcTxLPj23uJ4kXxDb3k8QLY5v7SeJfYpsHksSLwjbPjyT+I9jm/zLb/FvZ5l/LNi8K2/xLbPMvsc0LY5sXxjYvjG1eENu8ILZ5QWzzgtjmBbHN82ObF8Q2L4htXhDbvCC2eUFs84LY5vmxzQtjmxfENi+IbV4Q27wwtnlBbPPC2OaFsc0LY5vntlgsADh79uwzuOqqq6666n8DKlddddVVV/2vcN99993KC2AbSfxLbCOJf4ltJPHC2AZAEi+MbSTxwthGEi+MbSTxwthGEi+IbQAk8YLYBkASz49tACTx/NgGQBIviG0k8YLYBkASz49tACTx/NgGQBLPj23uJ4nnxzYAknhBbAMgiRfENgCSeEFscz9JvCC2eSBJvCC2eSBJ/Ets89wk8aKyzQsjif8vbPMfwTb/WrZ5UdnmRWGbF8Y2/xLbvDC2eWFs84LY5gWxzQtimxfENi+IbV4Q27wgtnlBbPOC2Ob5sc0LYpsXxDYviG1eENu8ILZ5YWzzgtjmhbHNC2KbF8Y2L4xtXhjbPD8bGxsA3Hfffbdy1VVXXXXV/wZUrrrqqquu+l/h7NmztwIsFgueH9sASOKFsQ2AJF4Y2wBI4oWxDYAkXhDbAEjiBbENgCReENsASOIFsQ2AJF4Q20jihbGNJF4Q2wBI4vmxDYAknh/bAEjiBbENgCSeH9sASOL5sQ2AJF4Q2wBI4vmxzf0k8fzY5n6SeH5scz9JvCC2uZ8kXhjb3E8SL4xtHkgSLwrbPDdJ/FvY5kUhif+pbPOfwTb/VrZ5UdnmRWGbF4VtXhjb/Ets84LY5oWxzQtimxfENi+IbV4Q27wgtnlBbPOC2OYFsc0LYpsXxDYviG1eENu8ILZ5QWzzwtjmBbHNC2ObF8Q2L4xtXhjbvDC2eUEWiwUAZ8+evZWrrrrqqqv+N6By1VVXXXXV/wr33XffrQCLxYIXxjaS+JfYRhL/EttI4l9iG0m8MLaRxAtjGwBJvCC2AZDEC2IbSbwgtgGQxAtiGwBJvCC2AZDE82MbAEk8P7YBkMQLYhsASTw/tgGQxPNjm/tJ4vmxDYAkXhDbAEjiBbENgCReENvcTxIviG3uJ4kXxjYPJIkXxjbPTRIvCtu8IJL497LN/1W2+fewzb+WbV4UtnlR2OZfYpsXxjYvjG1eGNu8ILZ5YWzzgtjmBbHNC2KbF8Q2L4htXhDbvCC2eUFs84LY5gWxzQtimxfENi+IbV4Y27wgtnlhbPPC2OaFsc0LY5sXZmNjA4D77rvvVq666qqrrvrfgOCqq6666qr/Nf7hH/7htwFOnDjBC2Mb2/xLbGObf4ltbPMvsY1tXhjb2OZfYpt/iW1eGNvY5oWxjW1eGNvY5oWxzQtjG9u8ILaxzQtjG9u8ILaxzQtjG9u8ILaxjW1eENvYxjYviG1sY5sXxja2sc0LYxvb2MY2/xLb2MY2tnlR2MY2trGNbf61bGMb29jGNraxzf8HtrGNbWxjG9vYxjb/GraxjW1sY5sXhW1sYxvbvDC2sY1tXhjb2MY2L4htbGObF8Q2tnlBbGObF8Q2tnl+bGObF8Q2tnl+bGOb58c2tnl+bGOb58c2tnl+bGOb58c2tnl+bGOb58c2tnl+bGOb58c2tnlBbPOC2OYFsc0LY5sXxDYvjG1eGNu8MLZ5YWzzwiwWCwDuu+++W7nqqquuuup/CypXXXXVVVf9n2UbSfxLbCOJf4ltJPEvsY0kXhjbAEjiBbENgCReENsASOIFsQ2AJF4Q20jihbENgCSeH9sASOIFsQ2AJJ4f2wBI4gWxDYAknh/bAEjiBbENgCReENsASOIFsQ2AJF4Q29xPEi+Ibe4niRfGNveTxL/ENg8kiReFbZ4fSfxr2eZFJYn/SWzzn8k2/1a2+dewzYvCNv8S2/xLbPMvsc0LY5sXxDYvjG1eENu8ILZ5QWzzgtjmhbHNC2KbF8Q2L4htXhDbvCC2eUFs88LY5gWxzQtjmxfENi+MbV4Y27wwtnlhbPMvOXXqFAD/8A//8NtcddVVV131vwXBVVddddVV/2v8/d///W8DnDhxAtu8KGxjm3+JbWzzL7GNbf4ltrHNv8Q2/xLb/EtsY5sXxjYvjG1s8y+xzQtjG9u8MLaxzQtiG9u8MLaxzQtiG9vY5gWxjW1eGNvY5oWxjW1s88LYxja2eWFsYxvb/EtsYxvb2OZFYRvb2MY2tvnXsI1tbGMb29jmP4ptbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb/EewjW1sYxvb2MY2Lyrb2MY2trHNv8Q2trGNbV4Y29jGNi+MbWzzwtjGNi+IbWxjm+fHNraxzfNjG9u8ILaxzfNjG9u8ILZ5QWzzgtjmBbGNbZ4f29jm+bGNbV4Q27wgtnlBbPOC2OYFsY1tXhDbvCC2sc0LYpsXxjYvjG1eGNu8MLb5l9jmqquuuuqq/5WoXHXVVVdd9b+WbSTxorCNJP4ltpHEv8Q2AJJ4YWwjiRfGNgCSeEFsAyCJF8Y2knhBbAMgiRfENgCSeEFsAyCJF8Q2AJJ4QWwDIInnxzYAknhBbAMgiRfENgCSeH5scz9JPD+2uZ8kXhDb3E8SL4ht7ieJF8Q2DySJF8Y2DySJF4Vtnpsk/jVs88JI4v8y2/xHsc2/hW3+NWzzorDNv8Q2/xLbvDC2eWFs88LY5gWxzQtjmxfENi+IbV4Y27wgtnlBbPOC2OYFsc0LY5sXxDYviG1eGNu8ILZ5YWzzwtjmhbHNC2ObF8Y2/xLbAJw6dQqAf/iHf/gdrrrqqquu+t+CylVXXXXVVf9r/MM//MPvAJw8eZKnPvWpANgGQBL/EtsASOKFsQ2AJP4ltpHEC2MbAEm8MLaRxAtjGwBJvCC2AZDEC2IbAEm8ILYBkMQLYhsASbwgtgGQxAtiGwBJPD+2AZDEC2IbAEm8ILYBkMQLYhsASbwgtrmfJF4Q29xPEi+Ibe4niRfGNveTxL/ENg8kiReVbZ6bJP6tbPOiksR/N9v8V7DNv5Vt/jVs86Kyzb/ENv8S2/xLbPPC2OaFsc0LYpsXxjYviG1eGNu8ILZ5QWzzwtjmBbHNC2KbF8Q2L4htXhjbvCC2eWFs88LY5oWxzQtjmxfGNi+Mbf4ltrnqqquuuup/NSpXXXXVVVf9r3H27NlbARaLBc/NNpJ4UdhGEv8S2wBI4oWxDYAkXhjbSOKFsQ2AJF4Y20jihbENgCReENsASOIFsQ2AJF4Q2wBI4gWxDYAkXhDbAEji+bENgCReENsASOIFsQ2AJF4Q29xPEi+IbQAk8cLYBkASL4xt7ieJF8Y2DySJf4ltnpskXlS2eUEk8R/FNv+X2Obfyzb/Wrb517DNi8I2/xLbvDC2+ZfY5oWxzQtimxfGNi+MbV4Q27wwtnlBbPOC2OYFsc0LY5sXxDYviG1eGNu8ILZ5YWzzwtjmBbHNC2Obf4ltXhjb/Ets80CnTp0C4B/+4R9+m6uuuuqqq/63oHLVVVddddX/GbYBkMS/xDYAkviX2EYS/xLbSOKFsQ2AJF4Y2wBI4gWxDYAkXhjbSOKFsY0kXhjbSOKFsQ2AJF4Q2wBI4gWxDYAknh/b3E8Sz49t7ieJ58c295PEC2IbAEm8ILa5nyReENs8kCReENs8kCReGNs8kCReFLZ5bpL417LNCyOJ/6ts8x/JNv8WtvnXsM2Lyjb/Etv8S2zzL7HNC2ObF8Y2L4htXhjbvCC2eWFs84LY5oWxzQtimxfENi+IbV4Y27wgtnlhbPPC2OYFsc0LY5sXxjb/Etu8MLb5l9jmuW1sbABw33333cpVV1111VX/W1C56qqrrrrqf4377rvv1vvuu+/Wa6655sGLxYLlcsnzYxsASfxLbCOJf4ltACTxwtgGQBIvjG0AJPHC2EYSL4xtACTxgtgGQBIviG0AJPGC2AZAEi+MbQAk8YLYBkASL4htACTxgtgGQBIviG0AJPGC2AZAEi+Ibe4niRfENveTxAtjm/tJ4oWxzf0k8S+xzXOTxIvCNs+PJP6tbPOvIYn/Trb5r2Cbfyvb/GvZ5kVlm3+JbV4UtnlhbPPC2OaFsc0LY5sXxjYviG1eGNu8MLZ5QWzzgtjmhbHNC2KbF8Y2L4htXhjbvCC2eWFs88LY5oWxzb/ENi+Mbf4ltrnqqquuuur/DCpXXXXVVVf9r3L27Nlbr7nmmgcvFguWyyUvjG0k8S+xDYAk/iW2kcS/xDaS+JfYRhIvjG0AJPHC2EYSL4xtACTxgtgGQBIviG0AJPHC2AZAEi+IbQAk8YLYBkASL4htACTxgtgGQBIviG3uJ4kXxDb3k8QLYpv7SeKFsc39JPHC2OaBJPGisM0DSeJfwzbPjyT+o9nm/wrb/Eewzb+WbV5UtnlR2eZfYpt/iW1eGNu8MLZ5YWzzwtjmhbHNC2ObF8Q2L4htXhjbvCC2eWFs84LY5oWxzQtimxfGNi+MbV4Y27wwtnlhbPMvsc2/xDbPz8033wzAP/zDP/w2V1111VVX/W9C5aqrrrrqqv9V7rvvvltf7MVejMViwYvCNgCS+JfYRhL/EtsASOKFsQ2AJF4Y2wBI4oWxDYAkXhDbAEjihbENgCReENsASOIFsQ2AJF4Y2wBI4gWxDYAkXhDbAEjiBbENgCReENvcTxIviG0AJPHC2AZAEi+Mbe4niRfGNveTxL/ENg8kiReFbZ6bJP61bPMvkcT/Vbb5j2abfwvb/GvY5kVlm3+Jbf4ltvmX2OaFsc0LY5sXxjYvjG1eGNu8ILZ5YWzzgtjmhbHNC2KbF8Y2L4htXhjbvDC2eWFs88LY5oWxzQtjm3+Jbf4ltvmX3Hfffbdy1VVXXXXV/yZUrrrqqquu+l/lvvvuuxVgPp9jG0m8KGwjiX+JbQAk8S+xjST+JbYBkMQLYxsASbwwtpHEC2MbAEm8MLaRxAtjGwBJvCC2AZDEC2MbAEm8ILYBkMQLYhsASbwgtgGQxAtjGwBJvCC2uZ8kXhDb3E8SL4xt7ieJF8Y2DySJf4ltHkgSLyrbPD+S+PewzYtKEv/dbPNfwTb/Hrb517LNi8o2Lwrb/Ets8y+xzQtjmxfGNi+MbV4Y27wwtnlhbPOC2OaFsc0LYpsXxjYvjG1eENu8MLZ5YWzzwtjmhbHNC2ObF8Y2/xLbvDC2+ZcsFgsA7rvvvlu56qqrrrrqfxMqV1111VVX/a/yD//wD78DcPLkSQBsAyCJf4ltACTxL7ENgCReGNsASOJfYhtJ/EtsI4kXxjYAknhhbAMgiRfENgCSeGFsAyCJF8Q2AJJ4YWwDIIkXxDYAknhBbAMgiRfENveTxAtim/tJ4gWxzf0k8YLY5n6SeGFscz9J/Ets80CS+JfY5rlJ4l/DNi+IJP4j2eb/Gtv8e9nm38I2LyrbvKhs8y+xzb/ENv8S27wwtnlhbPPC2OaFsc0LY5sXxjYviG1eGNu8MLZ5QWzzwtjmhbHNC2KbF8Y2L4xt/iW2eWFs8y+xzQtjmxfFxsYGAGfPnn0GV1111VVX/W9C5aqrrrrqqv8TbCOJF4VtJPGisI0k/iW2AZDEC2MbAEm8MLYBkMQLYxsASbwwtpHEC2MbAEm8MLaRxAtjGwBJvDC2AZDEC2IbAEm8ILa5nyReENsASOKFsQ2AJF4Y2wBI4oWxzf0k8cLY5oEk8S+xzQNJ4kVhm+cmiX8L27wwkvi/zjb/kWzzb2Wbfw3bvKhs86Kwzb/ENv8S27wwtnlhbPPC2OZfYpsXxDYvjG1eGNu8ILZ5YWzzwtjmBbHNC2ObF8Y2L4xtXhjb/Ets88LY5l9imxfGNi8K25w6dQqAf/iHf/htrrrqqquu+t+EylVXXXXVVf+rnD179laAxWLBc7MNgCT+JbYBkMS/xDYAkviX2EYS/xLbAEjihbENgCReGNsASOIFsQ2AJF4Y2wBI4gWxDYAkXhjbAEjihbENgCReENsASOKFsQ2AJF4Q29xPEi+Ibe4niRfENveTxAtjm/tJ4l9im/tJ4kVhmweSxIvKNs+PJP49bPOiksT/BLb5r2Kbfw/b/GvZ5kVlmxeFbV4UtnlhbPMvsc0LY5sXxjb/Etu8MLZ5YWzzgtjmhbHNC2ObF8Q2L4xtXhjbvDC2eWFs88LY5oWxzb/ENi+Mbf4ltnlR2Oaqq6666qr/1ahcddVVV131v8p99913K8BiseAFsY0kXhS2kcSLwjaS+JfYBkAS/xLbSOJfYhtJ/EtsI4kXxjYAknhhbAMgiRfENgCSeGFsAyCJF8Y2AJJ4QWwDIIkXxjYAknhhbAMgiRfGNgCSeGFscz9JvDC2eSBJvDC2eSBJvChs89wk8a9hm+dHEv/RbPN/kW3+I9jm38I2/xq2eVHY5kVhm3+Jbf4ltnlhbPMvsc0LY5sXxjYvjG1eGNu8ILZ5YWzzwtjmhbHNC2ObF8Y2L4xtXhjbvDC2+ZfY5oWxzb/ENi8K29xvY2MDgPvuu+9Wrrrqqquu+t+E4Kqrrrrqqv91/uEf/uG3AU6ePMkLYhvbvChsY5sXhW1s86KwjW3+Jbaxzb/ENrb5l9jGNv8S29jmX2Ib27wwtrHNv8Q2tvmX2MY2L4xtbGObF8Y2trHNC2Mb29jmhbGNbWzzL7GNbWzzorCNbWzzorCNbWxjm38N29jGNraxzb+FbWxjG9vYxja2sc3/N7axjW1sYxvb2Obfwja2sY1tbPOiso1tbGObf4ltbGMb27wwtrGNbV4Y29jGNi+MbWzzwtjGNi+IbWzzwtjGNi+IbWzzgtjGNi+IbWzzgtjGNi+IbV4Y27wgtrHNC2Ib27wgtrHNC2Ib27wgtrHNC2ObF8Y2L4xtbPPC2OZfYpsXhW3ud+rUKQD+4R/+4Xe46qqrrrrqfxsqV1111VVX/Z9mG0m8KGwDIIl/iW0AJPEvsY0k/iW2AZDEC2MbAEm8MLYBkMQLYxsASbwwtpHEC2MbAEm8MLYBkMQLYxsASbwwtgGQxAtjGwBJvDC2AZDEC2Ob+0nihbHN/STxL7HNA0niX2KbB5LEv4Ztnpsk/j1s86KSxP9EtvmvYJt/D9v8a9nmRWWbF5Vt/iW2+ZfY5l9im3+JbV4Y27wwtnlhbPPC2OaFsc0LY5sXxjYvjG1eGNu8MLZ5YWzzwtjmX2KbF8Y2/xLb/Ets86KwzQNtbGwAcN99993KVVddddVV/9sQXHXVVVdd9b/O3//93/82wMmTJ3lR2MY2LyrbvKhs86KwjW1eFLZ5UdjGNv8S29jmX2Ib27wwtrHNv8Q2tvmX2MY2/xLb2OZfYhvb/EtsY5t/iW1sY5t/iW1sY5t/iW1sYxvbvChsYxvbvKhsYxvb2MY2/1q2sY1tbGMb29jmP5ptbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2/9FsYxvb2MY2tvnXso1tbGObF4VtbGMb2/xLbGMb2/xLbGMb27wwtrHNC2Mb27wwtrHNC2Mb27wgtrHNC2ObF8Y2L4xtXhjbvDC2eWFs88LY5oWxzQtjmxfGNi+Mbf4ltnlhbPMvsc2/xDb/EtvY5rltbGxw1VVXXXXV/1pUrrrqqquu+l/n7NmzzwBYLBbYRhIvCtsASOJfYhsASfxLbAMgiX+JbQAk8cLYBkAS/xLbSOJfYhsASbwwtpHEC2MbAEm8MLYBkMQLYxsASbwwtrmfJF4Q29xPEi+Ibe4niRfGNveTxAtjm/tJ4l9im/tJ4l9imweSxIvKNs9NEv8WtnlBJPH/lW3+o9nm38o2/xq2eVHZ5kVhmxeFbf4ltvmX2OZfYpsXxjYvjG1eGNu8MLZ5YWzzwtjmhbHNC2ObF8Y2/xLbvDC2eWFs8y+xzb/ENv8S2/xLbPOCbGxsAPAP//APv81VV1111VX/21C56qqrrrrqf5377rvvVoDFYgGAbQAk8aKwjSReFLYBkMS/xDYAkviX2EYS/xLbAEjihbENgCT+JbaRxAtjGwBJvDC2AZDEC2MbAEm8MLYBkMS/xDYAknhhbAMgiRfGNveTxAtjGwBJ/Etscz9J/Etscz9JvChs89wk8aKyzfMjiX8r27yoJPG/gW3+s9nm38M2/xa2eVHZ5kVhmxeFbf4ltvmX2OZFYZsXxjYvjG1eGNu8MLb5l9jmhbHNC2ObF8Y2L4xtXhjb/Ets88LY5l9im3+Jbf4ltvmX2OaFWSwWXHXVVVdd9b8Wlauuuuqqq/7XOXv27K0Ai8WCB7KNJF4UtgGQxIvCNpJ4UdhGEv8S2wBI4l9iGwBJvDC2AZDEC2MbAEm8MLYBkMQLYxsASbwwtgGQxAtjGwBJ/EtsAyCJF8Y295PEC2MbAEm8MLa5nyT+Jba5nyT+JbZ5IEm8qGzzQJL417LN8yOJ/0i2+f/GNv8RbPNvYZt/Ddu8qGzzorDNv8Q2/xLbvChs88LY5oWxzb/ENi+MbV4Y27wwtnlhbPPC2OZfYpsXxjYvjG3+Jbb5l9jmhbHNv8Q2Lwrb/Es2NjYA+Id/+Iff5qqrrrrqqv9tqFx11VVXXfW/1mKx4LnZBkASLwrbSOJFYRsASfxLbAMgiX+JbQAk8S+xjST+JbYBkMQLYxsASbwwtgGQxAtjGwBJvDC2AZDEC2Ob+0nihbHN/STxwtgGQBIvjG3uJ4kXxjb3k8S/xDYPJIl/iW0eSBIvKts8N0n8W9jmBZHEVVfY5j+Sbf6tbPOvZZsXlW1eFLZ5UdjmX2Kbf4lt/iW2+ZfY5oWxzQtjmxfGNv8S27wwtnlhbPPC2OZfYpsXxjb/Etu8MLb5l9jmX2KbF4VtXhQbGxsA3Hfffbdy1VVXXXXV/zYEV1111VVX/a9z33333XrffffdCnDy5EmeH9u8qGxjmxeVbWzzorCNbV4UtrHNv8Q2tnlR2MY2/xLb2OZfYhvb/EtsY5t/iW1sY5t/iW1s86KwjW3+JbaxjW3+JbaxjW3+JbaxjW1eVLaxjW1eVLaxjW1s869lG9vYxja2+feyjW1sYxvb2MY2trGNbf43s41tbGMb29jGNraxjW3+PWxjG9vYxjb/GraxjW1s86KwjW1sY5t/iW1sY5sXxja2sc0LYxvb2OaFsY1tXhjb2OaFsY1tXhjb2OYFsY1tXhjbvDC2eWFsY5sXxDa2eWFs88LY5oWxjW1eGNu8MLaxzQtjm3+Jbf4ltnlR2OZfYpvFYgHAfffddytXXXXVVVf9b0Tlqquuuuqq/5XOnj176zXXXPNgXgjbAEjiRWEbAEm8KGwjiReFbSTxorCNJP4ltgGQxL/ENgCSeGFsAyCJF8Y2AJJ4YWwDIIl/iW0AJPHC2AZAEv8S2wBI4l9iGwBJ/Etscz9JvDC2eSBJ/Ets80CSeFHY5rlJ4l/DNs+PJP4j2eY/giReVLb5n8Y2/xFs829hm38N27yobPOisM2Lwjb/Etv8S2zzL7HNC2Obf4ltXhjb/Ets88LY5oWxzb/ENi+Mbf4ltnlhbPMvsc2/xDb/Etu8KGzzL7ENwOnTpwH4h3/4h9/mqquuuuqq/40Irrrqqquu+l/pvvvuuxXg5MmT/EtsY5sXlW1eVLaxzYvCNrZ5UdjGNi8K29jmRWGbF4VtbPMvsY1t/iW2sY1t/iW2sc2/xDa2sc2/xDa2sc2/xDa2sc2Lwja2sc2Lwja2sc2Lyja2sY1t/jVsYxvb2MY2/xa2sY1tbGMb29jmv5NtbGMb29jGNraxjW1sY5v/LraxjW1sYxvb2Obfwja2sY1tbPOiso1tbGObF4VtbGObf4ltbGObF8Y2trHNC2Mb29jmhbGNbV4Y29jmhbGNbV4Y27wwtrHNC2ObF8Y2tnlBbGObF8Y2L4xtbPPC2OaFsY1tXhjb/Ets8y+xzb/ENi8K2/xLbHPVVVddddX/GVSuuuqqq676X+m+++67lX8l20jiRWEbAEm8KGwDIIl/iW0AJPEvsQ2AJP4ltgGQxAtjGwBJ/EtsAyCJF8Y2AJL4l9gGQBIvjG0AJPEvsQ2AJP4ltrmfJF4Y29xPEv8S29xPEv8S29xPEi8q2zyQJP41bPPcJPFvZZt/iST+L7LNfybb/HvY5l/LNv8atnlR2eZFYZsXhW3+Jbb5l9jmX2KbF8Y2/xLbvDC2+ZfY5oWxzb/ENi+Mbf4ltvmX2OZfYpt/iW3+JbZ5UdjmX2KbBzp16hQA9913361cddVVV131vxGVq6666qqr/lf6h3/4h98BOHnyJLaRxIvCNgCSeFHYBkASLwrbSOJFYRsASfxLbAMgiX+JbQAk8cLYBkAS/xLbAEjihbENgCT+JbYBkMQLY5v7SeKFsQ2AJF4UtgGQxL/ENveTxL/ENveTxL/ENg8kiReVbR5IEv9atnl+JPEfwTb/FpL4r2Kb/y62+Y9gm38L2/xr2OZFZZsXhW1eVLb5l9jmX2Kbf4lt/iW2eWFs8y+xzQtjm3+JbV4Y2/xLbPMvsc0LY5t/iW3+Jbb5l9jmRWGbF4VtXpCzZ88+g6uuuuqqq/43onLVVVddddX/SmfPnr0VYGNjAwDbSOJFZRsASbwobCOJF4VtACTxorCNJF4UtpHEi8I2kviX2AZAEv8S2wBI4oWxDYAk/iW2AZDEv8Q2AJJ4YWxzP0n8S2xzP0n8S2xzP0n8S2xzP0m8KGzzQJJ4UdnmuUni38I2z48k/ivY5v8S2/xHsc2/lW3+tWzzorLNi8o2LwrbvChs8y+xzb/ENv8S27wwtvmX2OZfYpsXxjb/Etv8S2zzwtjmX2Kbf4lt/iW2+ZfY5kVhmxeFbZ6f06dPA/AP//APv81VV1111VX/G1G56qqrrrrq/wzbAEjiRWUbSbwobAMgiReFbQAk8S+xDYAk/iW2AZDEv8Q2AJL4l9gGQBL/EtsASOKFsc39JPHC2AZAEv8S2wBI4l9iGwBJvChscz9J/Etscz9J/Ets80CSeFHY5oEk8a9hm+cmiX8r27wwkvj/yDb/GWzz72GbfwvbvKhs86KyzYvKNi8K2/xLbPMvsc2/xDb/Etu8MLb5l9jmX2KbF8Y2/xLb/Ets8y+xzb/ENv8S2/xLbPOisM2LwjYvyMbGBlddddVVV/2vRuWqq6666qr/le67775b77vvvluvueaaBy8WC5bLJfezDYAkXhS2AZDEi8I2AJJ4UdgGQBL/EtsASOJfYhsASfxLbAMgiX+JbQAk8S+xDYAk/iW2AZDEC2Ob+0nihbHN/STxwtjmfpJ4UdgGQBIvCtvcTxIvCtvcTxIvKts8kCT+tWzz3CTxH8E2/xqS+J/KNv+VbPPvZZt/C9v8a9jmX8M2Lyrb/Ets86Kwzb/ENv8S2/xLbPMvsc2/xDYvjG3+Jbb5l9jmX2KbF8Y2/xLbvChs8y+xzYvCNi8K27wo7rvvvlu56qqrrrrqfyMqV1111VVX/a919uzZW6+55poHLxYLlsslz802knhR2QZAEi8K2wBI4kVhG0m8KGwDIIl/iW0AJPEvsQ2AJP4ltgGQxL/ENgCS+JfYBkAS/xLbAEjiX2IbAEn8S2xzP0n8S2xzP0m8KGxzP0m8KGzzQJJ4UdnmuUniX8s2L4gk/rPY5v8b2/xHsc2/lW3+NWzzr2GbF5VtXhS2eVHY5l9im3+Jbf4ltvmX2OZfYpt/iW1eGNv8S2zzL7HNv8Q2/xLb/Ets86KwzYvCNi8K27wwp0+fBuAf/uEffpurrrrqqqv+t6Jy1VVXXXXV/3obGxtcuHCB58c2AJJ4UdlGEi8q20jiRWEbAEm8KGwDIIl/iW0AJPEvsQ2AJP4ltgGQxL/ENgCS+JfYBkAS/xLbAEjiX2Kb+0niX2IbAEm8KGxzP0m8KGxzP0m8qGzzQJL417DNc5PEv5VtXhBJXPWcbPOfwTb/Hrb517LNv4Zt/jVs86KwzYvCNv8S2/xLbPMvsc2/xDb/Etv8S2zzL7HNv8Q2/xLb/Ets8y+xzb/ENv8S27yobPMvsc2LYrFYAHDffffdylVXXXXVVf9bEVx11VVXXfW/1t///d//NsBiseBfYhvbvKhsY5sXlW1s86KyjW1eVLZ5UdnGNi8K29jmRWEb27wobGObF4VtbPOisI1tbPOisI1tXhS2sY1tXlS2sY1tXlS2sY1tbPOvYRvb2MY2/xa2sY1tbGOb/wi2sY1tbGMb29jGNraxzf8VtrGNbWxjG9vYxja2+Y9gG9vYxja2+deyjW1sY5sXlW1sY5sXhW1sY5sXhW1sY5sXxja2sc0LYxvb2OaFsY1tXhjb2OZfYpt/iW3+Jbb5l9jmhbGNbV4Y29jmhbGNbV4Y29jmX2Kbf4lt/iW2eVHYxjb/Etu8KGyzsbEBwH333XcrV1111VVX/W9F5aqrrrrqqv+1zp49+wyAkydP8qKyjSReVLYBkMSLwjYAknhR2AZAEv8S2wBI4kVhGwBJ/EtsAyCJf4ltACTxL7ENgCT+Jba5nyT+JbYBkMS/xDb3k8S/xDb3k8SLwjYPJIkXhW0eSBIvKts8kCT+LWzz/EjiP5pt/r0k8e9hm/9pbPMfxTb/Frb517LNv4ZtXlS2eVHY5kVhm3+JbV4UtvmX2OZfYpt/iW3+Jbb5l9jmX2Kbf4lt/iW2eVHY5l9imxeFbV4UtnlR2AZgY2MDgLNnzz6Dq6666qqr/reictVVV1111f9a99133638G9gGQBIvKttI4kVlGwBJvChsAyCJf4ltACTxorANgCT+JbYBkMS/xDYAkviX2OZ+kviX2AZAEv8S29xPEv8S2wBI4kVhm/tJ4kVlm/tJ4kVlm/tJ4l/DNs9NEv9WtnlBJPHfxTb/G9nmP5pt/j1s869lm38t27wobPOiss2Lwjb/Etu8KGzzL7HNv8Q2/xLb/Ets8y+xzYvCNv8S2/xLbPMvsc2LwjYvCtu8KGzzorDN/TY2NgC47777buWqq6666qr/rahcddVVV131v9bZs2dvBdjY2MA2AJJ4UdkGQBIvCtsASOJFZRtJvKhsI4kXhW0AJPGisA2AJP4ltgGQxL/ENgCSeFHYBkAS/xLbAEjiRWEbAEn8S2xzP0m8KGxzP0m8qGxzP0m8qGzzQJL417LNc5PEv5dtXhhJ/H9jm/9Mtvn3ss2/hW3+tWzzorLNi8o2Lwrb/Ets86Kwzb/ENi8K2/xLbPMvsc2/xDb/Etv8S2zzorDNv8Q2LwrbvChs86KwzYvCNg+0sbEBwNmzZ2/lqquuuuqq/62oXHXVVVdd9b/WfffddyvAYrHgfrYBkMSLyjaSeFHZBkASLwrbAEjiRWEbAEm8KGwDIIkXhW0AJPEvsQ2AJP4ltrmfJP4ltgGQxL/ENveTxL/ENveTxL/ENveTxIvCNveTxIvKNg8kiReVbZ6bJP61bPP8SOI/im3+NSTxP41t/jvY5j+Kbf4tbPNvYZsXlW1eVLZ5UdjmRWGbF4Vt/iW2eVHY5l9im3+Jbf4ltnlR2OZfYpt/iW1eFLb5l9jmRWWbF4VtXhS2eW4bGxsA3Hfffbdy1VVXXXXV/1YEV1111VVX/a/2D//wD78NcOrUKR7INv8atrHNv4ZtbPOiso1tXlS2sc2Lyja2eVHZxjYvCtvY5kVlG9u8KGxjmxeVbWzzorKNbV5UtrGNbV5UtrGNbf61bGMb29jmX8s2trGNbf49bGMb29jGNrb5r2Ab29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2tvnPZhvb2MY2trHNv5VtbGMb29jmX8M2trHNv4ZtbGObF4VtbPOisI1t/iW2sc2/xDa2+ZfYxjb/Etv8S2xjmxfGNrb5l9jmX2Kbf4ltbPMvsc2/xDb/EtvY5l9imxeFbWzzL7GNbV4UtnluGxsbANx33323ctVVV1111f9mVK666qqrrvo/yzYAknhR2QZAEi8q2wBI4kVhGwBJvChsAyCJF4VtACTxorANgCT+JbYBkMSLwjYAkviX2OZ+kviX2OZ+kviX2OZ+knhR2OZ+knhR2OaBJPGvYZv7SeJfyzbPTRL/HrZ5YSRx1fNnm/8Mtvn3ss2/lW3+NWzzorLNi8o2LwrbvChs86Kwzb/ENi8K2/xLbPMvsc2Lwjb/Etu8KGzzL7HNi8I2LwrbvChs86KwzQty+vRpAP7hH/7ht7nqqquuuup/M4Krrrrqqqv+V/v7v//73wY4efIkL4htbPOvYRvb/GvY5l/DNrZ5UdnGNi8q29jmRWUb27wobGObF5VtbPOiso1tXlS2sc2Lyja2sc2Lyja2sc2/hm1sY5t/LdvYxja2sc2/hW1sYxvb2OY/km1sYxvb2MY2trGNbf6vsY1tbGMb29jGNraxjW3+I9jGNraxjW3+LWxjG9vY5l/DNraxjW1eFLaxjW1eFLaxzYvCNrb5l9jGNv8S29jmX2Ib27wwtrHNv8Q2tnlhbGObf4lt/iW2sc2/xDb/EtvY5l9im3+JbWzzorDNi8I2LwrbXHXVVVdd9f8Clauuuuqqq/7fsI0k/jVsI4kXlW0AJPGisg2AJF4UtgGQxIvCNgCSeFHYBkAS/xLb3E8S/xLb3E8S/xLb3E8S/xLb3E8SLwrb3E8SLwrb3E8SLyrbPJAk/rVs80CS+LewzfMjif8Mtvn3ksR/FNv8T2Sb/yi2+fewzb+Wbf41bPOiss2LyjYvCtu8KGzzorDNv8Q2Lwrb/Ets86Kwzb/ENi8K2/xLbPOisM2LyjYvCtu8KGzzLzl9+jQA//AP//A7XHXVVVdd9b8Zlauuuuqqq/5X+4d/+IffATh16hRPfvKT+ZfYBkASLyrbAEjiRWUbAEm8qGwjiReVbQAk8aKwDYAkXhS2AZDEi8I2AJJ4UdgGQBIvCtsASOJFYZv7SeJFYZv7SeJFYZv7SeJfwzb3k8S/hW2emyT+rWzzgkjiv5Nt/i+wzX802/x72ebfwjb/Grb517DNi8I2LyrbvChs86KwzYvCNv8S27wobPMvsc2Lwjb/Etu8KGzzorDNi8I2LyrbvChsc9VVV1111f8rVK666qqrrvpf7ezZs7cCbGxs8K9hGwBJvKhsAyCJF5VtACTxorANgCReVLYBkMSLwjYAknhR2AZAEi8K2wBI4kVhGwBJvChscz9JvChsAyCJF5Vt7ieJF4VtHkgSLyrbPJAk/q1s89wk8e9lmxdGEleBbf4z2eY/gm3+rWzzr2Gbfw3bvKhs86KyzYvCNi8K27wobPMvsc2LwjYvCtv8S2zzorDNi8I2LwrbvChs86KwzYvKNi8K25w+fRqAf/iHf/htrrrqqquu+t+MylVXXXXVVf8n2MY2kvjXsA2AJF5UtgGQxIvKNgCSeFHYBkASLyrbAEjiRWEbAEm8KGwDIIkXhW0AJPGisM39JPGisA2AJF4UtrmfJF5UtrmfJF5UtrmfJP41bPNAkvj3sM1zk8R/JNu8qCTxv4lt/jvY5j+Sbf4tbPNvYZt/Ddu8qGzzorLNi8I2LwrbvChs86Kwzb/ENi8K27wobPOisM2/xDYvCtu8qGzzorDNi8I2LyrbAGxsbABw33333cpVV1111VX/m1G56qqrrrrqf7X77rvv1vvuu+/Wa6655sGLxYLlcgmAJP41bCOJfw3bAEjiRWUbAEm8KGwDIIkXlW0AJPGisA2AJF4UtgGQxIvCNveTxIvCNgCSeFHY5n6SeFHY5n6SeFHZ5n6SeFHZ5oEk8a9hm+cmiX8P2zw/kvjPZpurns02/9Fs8+9hm38L2/xr2OZFZZsXlW1eVLZ5UdjmRWGbF4VtXhS2eVHY5l9imxeFbV4UtnlR2OZFZZsXhW1eFLZ5UdkGYGNjg6uuuuqqq/7PILjqqquuuup/vbNnz94KsLGxwf1sY5t/DdvY5l/LNrb517DNv4ZtbPOvYRvbvKhsY5sXlW1sY5sXlW1s86KyjW1s86KyjW3+NWxjG9v8a9jGNrb517KNbWxjm38L29jGNrb5j2Ib29jGNraxjW2u+rezjW1sYxvb2MY2/xFsYxvb2OZfyza2sY1tXlS2sY1tbPOisI1tbPOisI1tXhS2sc2Lwja2+ZfYxjb/EtvY5l9iG9v8S2xjm3+JbWzzL7HNi8I2LwrbvChs86KwjW1eFLZ5UdjmRWWb+50+fRqAf/iHf/htrrrqqquu+t+OylVXXXXVVf/r3Xfffbe+2Iu9GIvFgudmG0n8a9gGQBL/GraRxIvKNgCSeFHZBkASLyrbAEjiRWEbAEm8qGwDIIkXhW0AJPGisg2AJF4UtrmfJF5UtrmfJF5UtnkgSfxr2OaBJPGvZZvnRxL/UWzzL5HE/ze2+a9km/8Itvm3sM2/lm3+NWzzr2GbF5VtXhS2eVHY5kVhmxeFbV4UtnlR2OZFYZsXhW1eFLZ5UdnmRWGbF5VtXhS2eUHuu+++W7nqqquuuup/OypXXXXVVVf9r3fffffdCrCxscHzYxsASfxr2AZAEi8q2wBI4kVlGwBJvKhsAyCJF5VtACTxorANgCReVLYBkMSLwjb3k8SLwjb3k8SLwjb3k8SLyjb3k8S/hm3uJ4l/Lds8kCT+rWzz3CTxn8U2/1qS+J/ENv9T2OY/im3+rWzzr2Wbfy3bvKhs86KyzYvKNi8K27yobPOisM2LwjYvCtu8KGzzorDNi8I2LyrbvChs86KyzYvCNs/PxsYGAPfdd9+tXHXVVVdd9b8dlauuuuqqq/7X+4d/+IffATh16hQvjG0AJPGvYRsASbyobAMgiReVbQAk8aKyDYAkXlS2AZDEi8I295PEi8I2AJJ4UdkGQBIvKtsASOJFZZv7SeJFZZv7SeJfwzYPJIl/Lds8kCT+PWzz/Ejiv4Nt/r+zzX8k2/x72Obfwjb/Wrb517DNi8o2LyrbvKhs86KwzYvCNi8K27wobPOisM2LwjYvCtu8qGzzorLNi8I2LyrbvCCbm5sAnD179hlcddVVV131vx2Vq6666qqr/t+xDYAk/jVsAyCJF5VtACTxorINgCReVLYBkMSLyjYAknhR2QZAEi8K29xPEi8K29xPEi8K29xPEi8q29xPEi8q29xPEv9atnkgSfxr2ea5SeLfyzYviCSu+vexzX8W2/x72ebfwjb/Wrb517LNi8o2LyrbvKhs86KwzYvCNi8K27yobPOisM2LwjYvCtu8qGzzorDNi8o2LyrbvDCnT58G4B/+4R9+m6uuuuqqq/63o3LVVVddddX/emfPnr0VYLFY8K9hGwBJ/GvYRhL/GrYBkMSLyjYAknhR2QZAEi8q2wBI4kVlGwBJvKhsAyCJF5VtACTxorLN/STxorLN/STxorLNA0niX8s2DySJfwvbPDdJ/Eexzb9EEv9f2ea/im3+I9jm38o2/xa2+dewzb+GbV5UtnlR2eZFYZsXlW1eFLZ5UdjmRWGbF4VtXlS2eVHZ5kVhmxeVbV5Utrnqqquuuur/FSpXXXXVVVf9r3fffffdCrCxscG/hW0k8a9hGwBJ/GvYBkASLyrbAEjiRWUbAEm8qGwDIIkXlW0AJPGisg2AJF5UtrmfJF5UtrmfJF5UtrmfJP41bHM/Sfxb2OaBJPFvZZvnRxL/GWzzryGJ/6ls89/NNv+RbPPvYZt/C9v8a9jmX8M2/xq2eVHZ5kVhmxeVbV4UtnlR2OZFZZsXhW1eFLZ5UdnmRWWbF5VtXhS2eVFtbGwAcN99993KVVddddVV/9sRXHXVVVdd9X/CP/zDP/w2wMmTJ7HNv5ZtbPOvZRvb/GvZxjb/Graxzb+GbWzzr2Eb29jmRWUb29jmRWUb29jmX8M2tvnXso1t/rVsYxvb/GvZxja2sc2/lW1sYxvb/EewjW1sYxvb2Oa/mm1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2+a9kG9vYxja2sc2/l21sYxvb/GvZxja2sc2/hm1sY5sXlW1s86KyjW1eFLaxjW1eFLaxzb/ENrZ5UdjGNv8S29jmRWGbF4VtbPMvsY1tXhS2eVHZ5kVlmxeFbWzzorDNi+rUqVMA/MM//MPvcNVVV1111f8FVK666qqrrvo/yTYAkvjXsA2AJP41bAMgiX8N2wBI4kVlGwBJvKhsAyCJfw3bAEjiRWUbAEm8qGwDIIkXlW3uJ4kXlW3uJ4l/DdvcTxL/WrZ5IEn8W9jmuUniP4JtXhBJXPVvZ5v/TLb5j2Cbfyvb/GvZ5l/DNv8atnlR2eZFZZsXlW1eVLZ5UdjmRWWbF4VtXhS2+dewzYvCNi8q27yobPOiss3m5iYA9913361cddVVV131fwHBVVddddVV/yf8/d///W8DnDp1igeyjW3+tWxjm38t29jmX8s2tvnXsI1t/jVsYxvb/GvYxjb/Graxzb+GbWxjm38N29jGNv8atrGNbf61bGMb29jm38I2trGNbf49bGMb29jGNv/RbGMb29jGNraxjW1s8/+VbWxjG9vYxja2sY1t/iPZxja2sY1t/q1sYxvb2OZfwza2sY1tXlS2sY1tXlS2sc2Lyja2eVHYxjYvCtvY5kVhG9u8KGxjm3+JbWzzorCNbf4ltrHNi8I2Lyrb2OZFYZsXlW1eVLZ5UdkGYGNjg6uuuuqqq/5PoXLVVVddddX/CWfPnn0GwMbGBs+PbQAk8a9hGwBJ/GvYBkAS/xq2AZDEi8o2AJL417ANgCReVLYBkMSLyjb3k8SLyjb3k8SLyjb3k8SLyjb3k8S/lm3uJ4l/C9s8kCT+PWzz/EjiP4tt/rUk8T+Nbf6nsM1/JNv8e9jm38I2/1q2+deyzYvKNi8q27yobPOiss2LyjYvCtu8qGzzorLNi8o2LyrbvChs869hmxeVbe63sbEBwD/8wz/8NlddddVVV/1fQOWqq6666qr/E+67775bATY2NnhhbCOJfy3bAEjiX8M2AJL417ANgCReVLYBkMS/hm0AJPGiss39JPGisg2AJP41bAMgiX8N29xPEi8q2zyQJP41bPNAkvi3sM1zk8S/l22eH0n8d7DNVWCb/wy2+feyzb+Fbf4tbPOvYZt/Ddu8qGzzr2GbF4VtXlS2eVHZ5kVhmxeVbV5UtnlR2eZFZZsXlW3+NWzzQBsbG1x11VVXXfV/CpWrrrrqqqv+Tzh79uytAIvFgn+JbQAk8a9lGwBJ/GvYBkAS/xq2AZDEi8o295PEi8o2AJL417ANgCReVLa5nyReVLa5nyT+NWwDIIl/LdvcTxL/WrZ5IEn8W9nmgSTxH8U2L4gkrvr3sc1/Ntv8R7DNv5Vt/i1s869lm38N27yobPOvYZsXlW1eFLZ5UdnmRWWbF5VtXlS2eVHZ5kVlmxeVbV5Utnl+Njc3AfiHf/iH3+aqq6666qr/C6hcddVVV131f8rGxgYvKtsASOJfyzYAkvjXsA2AJP41bAMgiX8N2wBI4kVlGwBJ/GvYBkAS/xq2AZDEv4Zt7ieJF5Vt7ieJfy3b3E8S/xa2eSBJ/FvZ5vmRxH8k2/xLJPH/mW3+K9nmP4pt/j1s829hm38t2/xr2eZFZZt/Ddu8qGzzorLNi8o2LwrbvKhs869hmxeVbV5UtnlR2eZFZZsXZGNjA4D77rvvVq666qqrrvq/gMpVV1111VX/J9x333233nfffbdec801Dz516hTnz5/nRWUbAEn8a9kGQBL/GrYBkMS/hm0AJPGvYRsASbyobHM/SbyobHM/SbyobHM/Sfxr2AZAEv8atnkgSfxr2OaBJPFvYZsHksS/l22emyT+M9nmX0sS/1PZ5n8K2/xHss2/l23+LWzzb2Gbfw3b/GvY5l/DNi8q27yobPOiss2LyjYvKtu8qGzzorLNi8o2Lyrb/GvY5gXZ2NgA4L777ruVq6666qqr/q+gctVVV1111f8ZZ8+evfWaa655MP9GtgGQxL+WbSTxr2UbAEn8a9gGQBL/GrYBkMS/hm0AJPGvYRsASfxr2AZAEv8atrmfJP61bHM/Sfxr2eaBJPFvYZvnJol/L9s8P5L472Kbq57NNv8ZbPPvZZt/K9v8W9jmX8s2/xq2+dewzYvKNi8q27yobPOiss2Lyjb/GrZ5UdnmRWWbF5Vt/jVs88KcOXMGgH/4h3/4ba666qqrrvq/guCqq6666qr/M+67775bAU6dOoVt/q1sY5t/LdvY5t/CNrb517KNbf61bGObfy3b2OZfyza2sc2/hm1sY5t/LdvYxjb/FraxjW3+rWxjG9v8e9nGNraxzX8k29jGNraxjW1sY5ur/mPZxja2sY1tbGOb/wi2sY1tbGObfyvb2MY2/1q2sY1t/jVsYxvbvKhsYxvbvKhsY5sXlW1s86KwjW1eFLaxzYvCNrZ5UdnmRWWbF5VtbPOisI1tXlS2eVHZ5kVlG9tcddVVV131/xKVq6666qqr/s+47777buUBbAMgiX8L2wBI4l/DNgCS+NeyDYAk/jVsAyCJfw3bAEjiX8M295PEv4ZtACTxr2Gb+0niX8M295PEv5Zt7ieJfwvbPJAk/j1s89wk8Z/BNi+MJK66wjb/1WzzH8U2/x62+beyzb+Wbf41bPOvYZt/Ddv8a9jmRWWbF5VtXlS2+dewzYvKNi8q2/xr2OZFZZsX1enTpwG47777buWqq6666qr/K6hcddVVV131f8Y//MM//A7AqVOneCDbAEji38I2AJL417ANgCT+tWwDIIl/DdsASOJfwzb3k8S/hm0AJPGvYZv7SeJfwzb3k8S/hm3uJ4l/Lds8kCT+LWzzQJL497LN8yOJ/0y2+deQxP8mtvmfwDb/0Wzz72Wbfyvb/GvZ5l/LNv8atvnXsM2/hm1eVLZ5UdnmRWWbfw3b/GvY5kVlmxeVbf41bPNvcfbs2Wdw1VVXXXXV/xVUrrrqqquu+j/j7NmztwJsbGzw/NhGEv9WtgGQxL+GbQAk8a9lGwBJ/GvY5n6S+NewDYAk/jVscz9J/GvYBkAS/1q2AZDEv5Zt7ieJfwvbPJAk/i1s89wk8R/BNs+PJP472OaqF8w2/1ls8x/BNv9Wtvm3sM2/lm3+NWzzr2Gbfw3bvKhs869hmxeVbf41bPOiss2Lyjb/Grb517DNi8o2AGfOnAHgH/7hH36bq6666qqr/q+gctVVV1111f8rtgGQxL+VbSTxr2UbAEn8a9kGQBL/WrYBkMS/hm0AJPGvZRsASfxr2OZ+kvjXsM39JPGvZZsHksS/hW3uJ4l/D9s8N0n8R7HNCyKJq/5z2eY/k23+o9jm38M2/xa2+deyzb+Wbf41bPOvYZt/Ddu8qGzzorLNv4Zt/jVs86Kyzb+GbV5UtvnXsM39NjY2uOqqq6666v8cKlddddVVV/2fcd99991633333XrNNdc8eGNjg6OjI14Q2wBI4t/CNgCS+NeyDYAk/rVsAyCJfy3bAEjiX8M295PEv4ZtACTxr2Wb+0niX8M295PEv4Vt7ieJfwvbPJAk/r1s89wk8R/NNi+MJK564WzzX8k2/1Fs8+9lm38L2/xb2OZfyzb/Grb517DNv4ZtXlS2+dewzb+GbV5UtvnXsM2Lyjb/Grb517DN83PffffdylVXXXXVVf9XULnqqquuuur/lLNnz956zTXXPHixWHB0dMS/xDYAkvi3sA2AJP61bHM/Sfxr2AZAEv9atgGQxL+WbQAk8a9hm/tJ4l/LNgCS+Neyzf0k8W9hm/tJ4t/KNg8kif8ItnlukvjPZJsXlST+r7DN/wS2+Y9km/8Itvm3ss2/hW3+tWzzr2Gbfw3b/GvY5l/DNi8q2/xr2OZfwzYvKtv8a9jmX8M2/xq2eaAzZ84A8A//8A+/zVVXXXXVVf+XULnqqquuuur/pI2NDc6fP8+LyjYAkvi3sA2AJP4tbAMgiX8N29xPEv8atgGQxL+WbQAk8a9lm/tJ4l/DNveTxL+Wbe4niX8L2zyQJP6tbPPcJPEfwTbPjyT+q9nmP4sknptt/q+wzX8G2/xHsM2/h23+LWzzr2Wbfy3b/GvY5l/DNv8atnlR2eZfyzYvKtv8a9jmX8M2Lyrb/GvY5vnZ2NgA4L777ruVq6666qqr/i8huOqqq6666v+Uv//7v/9tgI2NDf4tbGObfyvb2Obfyja2+bewjW3+tWxjG9v8a9nGNrb5t7CNbf4tbGMb2/xb2MY2trHNv5VtbGMb2/x72cY2trHNfzTb2MY2trGNbf63so1tbGMb2/xvYxvb2MY2trGNbf6j2MY2trHNv4dtbGObfwvb2MY2/xq2sY1t/jVsY5t/DdvY5kVlG9u8qGxjmxeVbWzzorLNv4ZtbPOiss2Lyja2eVHZxjYvKtv8a9jmBdnY2ADgvvvuu5Wrrrrqqqv+L6Fy1VVXXXXV/ylnz559BsCpU6ewjST+LWwDIIl/C9sASOLfwjYAkvjXsg2AJP61bAMgiX8t2wBI4l/LNveTxL+Wbe4niX8L29xPEv9WtnkgSfx72Oa5SeI/mm1eGElc9W9nm/8qtvmPZJt/L9v8W9nm38I2/1q2+dewzb+Gbf41bPOvYZt/Ldu8qGzzr2Gbfw3b/GvY5l/DNi/M5uYmAGfPnn0GV1111VVX/V9C5aqrrrrqqv9T7rvvvlt5ANsASOLfwjYAkvi3sM39JPGvZRsASfxr2QZAEv9atgGQxL+Wbe4niX8t29xPEv9atrmfJP4tbHM/Sfx72OaBJPHvZZvnJon/TLZ5UUji/xvb/HexzX802/xHsM2/lW3+LWzzr2Wbfy3b/GvY5l/LNi8q2/xr2eZfwzb/GrZ5UdnmX8M2/1q2+ZecOXMGgPvuu+9Wrrrqqquu+r+EylVXXXXVVf+nnD179laAjY0NHsg2AJL4t7ANgCT+rWwDIIl/LdsASOJfyzYAkvjXss39JPGvZRsASfxb2AZAEv8WtrmfJP4tbPNAkvj3sM0DSeI/gm2eH0n8V7LNv4Uk/rvZ5n8y2/xnsM1/BNv8e9jm38o2/1q2+deyzb+Wbf41bPOvYZt/Ddv8a9jmX8M2/xq2+dewzb+Gbf61zp49eytXXXXVVVf9X0Llqquuuuqq/1Puu+++WwE2NjZ4fmwDIIl/C9sASOLfyjYAkvjXsg2AJP61bHM/Sfxr2QZAEv9atrmfJP61bHM/Sfxb2OZ+kvi3ss0DSeLfwzYPJIn/SLZ5fiTxP4ltrrrCNv+ZbPMfxTb/Hrb5t7LNv4Vt/rVs869lm38N2/xr2OZfyzb/Grb517DNv4Zt/jVs869hm3+NjY0NAO67775bueqqq6666v8Sgquuuuqqq/7P+Yd/+IffBjh9+jQviG1s829lG9v8e9jGNv8WtrHNv5VtbPNvYRvb2Obfwja2sc2/hW1sY5t/K9vYxja2+fewjW1s8x/BNraxjW1s85/BNraxjW1sYxvbXPWfzza2sY1tbGMb2/xHs41tbGObfy/b2MY2/xa2sY1t/rVsYxvb/GvYxja2+dewjW3+NWxjmxeVbWzzorKNbf41bGObF5VtbPOiso1tXlS2sc2Lyja2+dewzb/GYrEA4L777ruVq6666qqr/q+hctVVV1111f9rtgGQxL+FbQAk8W9lGwBJ/GvZ5n6S+NeyDYAk/i1sAyCJfwvbAEji38I295PEv5Vt7ieJfyvbPJAk/iPY5rlJ4j+Lbf4lkrjqBbPNfwfb/Eezzb+Xbf49bPNvYZt/C9v8a9nmX8M2/1q2+dewzb+Wbf41bPOvYZt/Ddv8a9jmX8s2Z86cAeAf/uEffpurrrrqqqv+ryG46qqrrrrq/5y///u//22AU6dO8aKyjW3+rWxjm38P29jm38o2tvm3sI1tbPNvYRvb2Obfwja2sc2/lW1sY5t/D9vYxjb/XraxjW1s8x/JNraxjW1s81/JNraxjW1sYxvb2MY2trHN/xW2sY1tbGMb29jGNraxjW3+K9jGNraxjW3+I9jGNraxzb+VbWxjm38L29jGNv9atrHNv4ZtbGObfw3b2OZFZRvb/GvYxjb/Grb517CNbV5UtrHNi8o2tvnXsM2/hm3+tWxz1VVXXXXV/3lUrrrqqquuuuoBbAMgiX8L2wBI4t/KNgCS+LewDYAk/i1sAyCJfwvbAEji38I295PEv4Vt7ieJfyvbPJAk/j1s89wk8R/FNs+PJP472eaqfzvb/GeyzX8U2/x72Obfyjb/Frb517LNv5Zt/rVs869lm38N2/xr2eZfwzb/Grb517LNv4ZtHujMmTMA/MM//MPvcNVVV1111f81BFddddVVV/2f8w//8A+/A3D69Gn+rWxjm38r29jm38M2tvm3so1tbPNvYRvb2Obfwja2sc2/lW1sY5t/K9vYxja2+fewjW1sY5v/CLaxjW1s85/BNraxjW1sYxvbXPU/h21sYxvb2MY2/9FsYxvb2Obfwza2sY1t/i1sYxvb/FvYxjb/Wraxzb+GbWzzr2Eb2/xr2MY2/xq2sc2/hm3+NWxjmxeVbWzzr2Gbfw3b2OZfwzZXXXXVVVf9v0Llqquuuuqq/3POnj17K8DGxga2kcS/lW0AJPFvYRsASfxb2eZ+kvi3sA2AJP4tbAMgiX8L29xPEv8WtrmfJP6tbHM/Sfx72OZ+kviPYJvnJon/LLZ5YSRx1X8M2/xXs81/NNv8e9nm38M2/xa2+bewzb+Wbf61bPNvYZt/Ddv8a9nmX8M2/xq2+deyzb+WbZ6fM2fOAPAP//APv81VV1111VX/11C56qqrrrrq/zzbAEji38o2AJL4t7ANgCT+PWwDIIl/C9sASOLfwjb3k8S/hW0AJPFvZZv7SeLfyjb3k8S/h20eSBL/UWzz3CTxX8E2/xJJ/H9nm/9utvnPYJv/CLb597DNv5Vt/i1s869lm38t2/xb2OZfyzb/Grb517LNv4Zt/rVs869hmxdmc3MTgPvuu+9Wrrrqqquu+r+GylVXXXXVVf/n3Hfffbfed999t15zzTUP3tjY4OjoCADbAEji38o2AJL4t7DN/STxb2UbAEn8W9jmfpL4t7ANgCT+LWxzP0n8W9nmfpL4t7LNA0ni38M2DySJ/0i2eX4k8V/NNv9akvifzDb/k9nmP4tt/qPY5t/LNv9Wtvm3sM2/lm3+LWzzr2Wbfy3b/GvZ5l/DNv9atvnXsM2/lm1emI2NDa666qqrrvo/jcpVV1111VX/J509e/bWa6655sEbGxscHR3xQLYBkMS/lW0AJPFvZRsASfxb2QZAEv9WtgGQxL+Fbe4niX8L29xPEv9WtrmfJP49bHM/Sfx72ea5SeI/mm2eH0n8T2Kbq/5ltvnPZpv/SLb597LNv5Vt/q1s869lm38L2/xr2eZfyzb/Wrb517LNv4Zt/rVs869lm3/JmTNnAPiHf/iH3+aqq6666qr/iwiuuuqqq676P+m+++67FWBjY4MXxDa2+fewjW3+PWxjm38P29jGNv9WtrHNv4dtbPPvYRvb2Obfwza2sc2/l21sYxvb/EexjW1sY5v/TLaxjW1sYxvb2Oaq/362sY1tbGMb2/xnsI1tbGObfy/b2MY2tvm3so1tbPNvYRvb/GvZxja2+dewjW3+tWxjm38t2/xr2eZfwza2+dewjW3+NWzzr2Wbfw3b2OZf47777ruVq6666qqr/i+ictVVV1111f9J9913360AGxsb/EtsAyCJfyvbAEji38o2AJL497ANgCT+LWxzP0n8W9jmfpL4t7LN/STxb2Wb+0ni38s2DySJ/wi2eW6S+M9mmxdGElf9+9jmv4Nt/jPY5j+Cbf49bPNvZZt/C9v8W9jm38I2/1q2+deyzb+Wbf41bPOvZZt/Ldv8a2xubgJw33333cpVV1111VX/F1G56qqrrrrq/6R/+Id/+B2A06dP86KyDYAk/q1sAyCJfyvbAEji38M2AJL4t7INgCT+rWxzP0n8W9nmfpL4t7LNA0ni38s2DySJ/yi2eX4k8V/FNv8SSfx/ZJv/KWzzn8U2/1Fs8+9hm38P2/xb2Obfwjb/Frb517LNv5Zt/rVs869lm38t2/xr2eZfa2NjA4CzZ88+g6uuuuqqq/4vonLVVVddddVVz8U2AJL4t7LN/STxb2Gb+0ni38o295PEv4Vt7ieJfyvb3E8S/1a2uZ8k/j1scz9J/EewzQNJ4j+abZ6bJP672ObfShL/3Wzzv4lt/jPZ5j+Sbf69bPNvZZt/K9v8W9jm38I2/1q2+deyzb+Wbf61bPOvZZt/Ldv8W9jmzJkzAPzDP/zDb3PVVVddddX/RVSuuuqqq676P+ns2bO3AmxsbPBvZRsASfx72AZAEv9WtgGQxL+HbQAk8W9lm/tJ4t/KNgCS+Pewzf0k8e9hmweSxH8E2zyQJP4z2Ob5kcT/ZLa56vmzzX8F2/xHss1/BNv8e9jm38o2/xa2+bewzb+Fbf61bPOvZZt/Ldv8a9nmX8s2/1q2ueqqq6666v8NKlddddVVV/2fdN99990KsLGxgW0k8W9lm/tJ4t/KNgCS+LeyDYAk/j1scz9J/FvZBkAS/1a2uZ8k/j1scz9J/HvZ5oEk8R/BNs9NEv9ZbPOCSOKq/362+a9km/9otvmPYJt/D9v8W9nm38o2/xa2+bewzb+Wbf61bPOvZZt/C9v8a9nmX8s2D7S5uQnAfffddytXXXXVVVf9X0Rw1VVXXXXV/1n/8A//8NsAp0+fxja2+feyjW3+PWxjm38P29jGNv9etrHNv4dtbGObfw/b2MY2/162sY1t/qPYxja2+Y9mG9vYxja2+a9gG9vYxja2sY1tbHPVfwzb2MY2trGNbWxjm/9MtrGNbWxjm/8ItrGNbWzz72Eb29jm38o2tvm3sI1t/i1sY5t/LdvY5l/LNrb517CNbf61bPOvZZt/LdvY5l/DNrb517LNA505cwaAf/iHf/gdrrrqqquu+r+KylVXXXXVVf+v2AZAEv8etgGQxL+VbQAk8e9hGwBJ/HvY5n6S+Leyzf0k8W9lm/tJ4t/DNg8kiX8v2zyQJP6j2ea5SeK/km1eFJL4/8g2/5PY5j+Tbf6j2Obfyzb/Hrb5t7DNv4dt/rVs829hm38t2/xr2ebfwjb/Wrb517LN87O5uQnAfffddytXXXXVVVf9X0Vw1VVXXXXV/1l///d//9sAp0+f5rnZxjb/Xraxzb+HbWxjm38P29jmP4JtbPPvZRvb/HvZxja2+Y9gG9vY5j+KbWxjG9vY5j+DbWxjG9vYxjb/3WxjG9vYxja2sY1tbGMb29jGNraxjW3+O9nGNraxjW1sYxvb2MY2trGNbWxjm/9OtrGNbWxjm/9otrGNbWzz72Ub29jm38o2trHNv4VtbGObfy3b2Obfyja2+dewjW3+tWxjm38t2/xr2eZfyza2+deyzb+WbV6QjY0Nrrrqqquu+j+PylVXXXXVVf9nnT179hkAm5ubvCC2AZDEv4dtACTx72EbAEn8W9nmfpL497DN/STxb2Wb+0ni38M295PEv5dtHkgS/1Fs80CS+M9im+dHEv8b2Oaq5882/1Vs8x/NNv9etvn3ss2/lW3+PWzzb2Gbfy3b/FvY5l/LNv8WtvnXss2/hW1emM3NTQD+4R/+4be56qqrrrrq/yoqV1111VVX/Z9133333QqwsbHBv8Q2AJL497ANgCT+PWwDIIl/D9sASOLfyzYAkvj3sM39JPHvYZsHksS/l20eSBL/UWzz3CTxn8k2L4gkrvqfwzb/1WzzH802/1Fs8+9hm38P2/x72Obfwjb/Frb517LNv4Vt/rVs829hm38t27woNjc3ueqqq6666v88KlddddVVV/2fdfbs2VsBNjY2eFHZBkAS/x62uZ8k/q1scz9J/FvZ5n6S+Pewzf0k8e9hm/tJ4t/LNveTxH8E29xPEv/RbPNAkvivYpsXRhJX/cexzX8n2/xnsc1/FNv8e9nm38M2/1a2+beyzb+Fbf4tbPOvZZt/C9v8a9nm38I2L6qNjQ0A/uEf/uG3ueqqq6666v8qKlddddVVV/2fdd99990KsLGxwb+WbQAk8e9lGwBJ/HvYBkAS/x62AZDEv5dt7ieJfw/b3E8S/162uZ8k/iPY5oEk8R/NNs+PJP6r2eZfIomrwDb/k9jmP5Nt/iPZ5t/LNv8etvn3sM2/lW3+LWzzb2Gbfwvb/GvZ5t/CNv8WtvnX2NzcBOC+++67lauuuuqqq/6vonLVVVddddX/affdd9+t11xzzYNPnz7NuXPn+Neyzf0k8e9hGwBJ/HvYBkAS/x62uZ8k/r1scz9J/HvY5n6S+PeyzQNJ4j+CbR5IEv9ZbPPcJPHfzTb/VpL4n8Y2/9vY5j+bbf6j2eY/gm3+PWzz72Gbfyvb/FvY5t/CNv8Wtvm3sM2/hW3+tWzzr7W5uQnAfffddytXXXXVVVf9X0blqquuuuqq/9POnj176zXXXPNg/gPYBkAS/x62AZDEv4dt7ieJfw/bAEjiP4JtACTx72Wb+0niP4Jt7ieJ/yi2eW6S+M9im+dHEv8b2OaqF51t/qvY5j+Dbf4j2Obfyzb/Hrb5t7LNv4Vt/q1s829hm38t2/xb2Obfwjb/FqdPnwbgH/7hH36bq6666qqr/i8juOqqq6666v+0++6771aA06dPY5v/CLaxzb+XbWxjm38v29jm38s2trHNfwTb2MY2/xFsYxvb/EexjW1sY5v/aLaxjW1s81/BNraxjW1sYxvbXPU/n21sYxvb2MY2/5lsYxvb2OY/im1sYxvb/HvYxja2+beyjW1s829lG9v8W9jGNv8Wtvm3sI1t/rVsY5t/Ldv8W9jm38I2/1q2sc1VV1111VX/b1C56qqrrrrq/7T77rvvVh7ANgCS+PeyDYAk/r1sAyCJfw/b3E8S/x62AZDEfwTb3E8S/162uZ8k/qPY5oEk8R/JNs9NEv9VbPOCSOKq/xq2+e9km/8stvmPYpv/CLb597LNv5Vt/q1s829hm38L2/xb2Obfwjb/Frb5t7DN/a655hoA/uEf/uF3uOqqq6666v8yKlddddVVV/2f9g//8A+/A3D69GkeyDb3k8S/h20AJPHvZRsASfx72QZAEv8etrmfJP4j2OZ+kvj3ss0DSeI/im3uJ4n/DLZ5bpL4r2abF4UkrnrBbPM/iW3+M9nmP5Jt/iPY5t/LNv8etvm3ss2/hW3+rWzzb2Gbfwvb/FvY5t/CNlddddVVV/2/ROWqq6666qr/086ePXsrwObmJi+IbQAk8e9hm/tJ4t/DNveTxL+Hbe4niX8P29xPEv8RbHM/SfxHsM39JPEfxTbPTRL/GWzz/Ejiv5tt/jUk8b+Zbf63sM1/Bdv8R7LNfwTb/Eewzb+Hbf6tbPNvZZt/C9v8W9jm38I2/xa2+bewzfNz5swZAP7hH/7ht7nqqquuuur/MipXXXXVVVdd9Uy2AZDEv5dtACTx72UbAEn8e9kGQBL/Xra5nyT+I9jmfpL4j2CbB5LEfyTbPJAk/jPZ5rlJ4n8y21z1H882/1Vs8x/NNv9RbPMfwTb/Hrb5t7LNv5Vt/i1s829lm38L2/xb2ObfwjYvyObmJlddddVVV/2/QHDVVVddddX/affdd9+t9913360bGxtsbGzworCNbf4j2MY2/xFsY5v/CLaxjW3+I9jGNv+RbGMb2/xHso1tbPOfwTa2sY1t/ivYxja2sY1tbGObq/73s41tbGMb29jmP5NtbGMb2/xHsY1tbPPvZRvb2Obfwza2sc2/lW1s829hG9v8W9jGNv8Wtvm3sI1t/rVsY5t/C9v8W9jmRXHffffdylVXXXXVVf+XEVx11VVXXfV/3tmzZ28F2NjY4F/DNrb5j2Ab29jm38s2trHNfwTb2OY/gm1sY5v/SLaxjW3+I9nGNraxzX8G29jGNraxzX8l29jGNraxjW1sc9X/HLaxjW1sYxvb2OY/m21sYxvb2OY/km1sY5t/L9vYxjb/Xraxzb+VbWxjm38L29jm38I2tvm3sI1t/rVsY5t/C9v8W9jGNv9atrHNC3PmzBkA/uEf/uG3ueqqq6666v86KlddddVVV/2/sbm5yblz5/jXsg2AJP4j2AZAEv9etgGQxL+Xbe4niX8v29xPEv9RbPNAkviPYpsHksR/Bts8N0n8V7PNCyOJq/5j2OZ/Ctv8Z7LNfyTb/Eeyzb+Hbf49bPNvZZt/K9v8W9nm38I2/1a2+bewzYtic3MTgPvuu+9Wrrrqqquu+r+O4Kqrrrrqqv/z/v7v//63ATY2Nvj3sI1tbPMfwTa2+Y9gG9vY5j+CbWxjm/8ItrGNbf6j2cY2tvmPZhvb2MY2/5lsYxvb2MY2/91sYxvb2MY2trGNbWxjG9v8f2Ub29jGNraxjW1sYxvb/HexjW1sYxvb/GewjW1s8x/FNrb5j2Ab29jm38o2tvm3so1t/q1s829lm38L29jm38I2/xa2sc2/hW1eVJubmwDcd999t3LVVVddddX/dVSuuuqqq676P+/s2bPPADh9+jT/UWwDIIl/L9vcTxL/XrYBkMR/BNsASOI/gm3uJ4n/SLa5nyT+o9nmgSTxn8k2z48k/qexzb+HJP472Ob/Ctv8V7HNfwbb/Eeyzb+Xbf49bPPvYZt/K9v8W9nm38I2/1a2+bewzb/W5uYmAGfPnn0GV1111VVX/V9H5aqrrrrqqv/z7rvvvlt5JtsASOI/gm0AJPEfwTYAkvj3ss39JPHvZZv7SeI/gm3uJ4n/SLZ5IEn8R7PNA0niv4Jtnh9J/G9lm6teNLb5r2ab/wy2+Y9mm38v2/x72ebfwzb/Vrb5t7LNv5Vt/i1s829lm3+LM2fOAHDffffdylVXXXXVVf/XUbnqqquuuur/vLNnz94KsLm5yf1scz9J/HvZ5n6S+PeyDYAk/iPYBkAS/xFscz9J/Eewzf0k8R/NNg8kif9otnlukvivYpvnRxJX/e9jm/8utvnPYpv/aLb5j2Cbfy/b/HvY5t/KNv9Wtvm3ss2/lW3+rWzzb2Gb+509e/ZWrrrqqquu+r+OylVXXXXVVf/n3XfffbcCbGxs8PzYBkAS/xFsAyCJfy/b3E8S/162uZ8k/iPY5n6S+I9gm/tJ4j+Dbe4nif8stnkgSfxXs80LI4mr/nvY5n8C2/xnss1/Btv8R7DNv5dt/j1s829lm38P2/xb2ebfwjb/Vrb5t7INwObmJgD33XffrVx11VVXXfV/HcFVV1111VX/L/zDP/zDbwOcOXOGF8Q2tvmPYhvb/EexjW3+o9jGNrb5j2Ib29jmP4ptbGMb2/xnsI1tbGOb/0y2sY1tbGOb/262sY1tbGMb29jGNra56l/PNraxjW1sYxvb2MY2/x1sYxvb2MY2/xlsYxvb/EeyjW1s8+9hG9vY5t/DNrb5t7KNbf6tbPNvZRvb/FvYxjb/Frb5t7LNv4VtbANwzTXXAHDffffdylVXXXXVVf8fULnqqquuuuqq52IbAEn8R7DN/STx72Wb+0niP4JtACTxH8U295PEfxTb3E8S/xls80CS+M9km+dHEv9T2OZFJYn/q2zzv4lt/qvY5j+Lbf6j2Obfyzb/Xrb597DNv5Vt/q1s829lm38r2/xb2eaBNjY2APiHf/iH3+aqq6666qr/Dwiuuuqqq676f+Hv//7vfxvg9OnTvKhsY5v/SLaxzX8U29jmP4ptbGOb/0i2sY1t/iPZxja2+c9kG9vYxjb/VWxjG9vYxjb/G9jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sY5v/yWxjG9vYxjb/mWxjG9vY5j+abWxjm38v29jGNv8etrHNv4dtbPNvZRvb/FvZ5t/KNv9Wtvm3ss2/lW2uuuqqq676f4/KVVddddVVV/0LbHM/SfxHsA2AJP4j2OZ+kviPYJv7SeI/im3uJ4n/KLZ5IEn8Z7HNc5PEfwXbPD+SuOr/B9v8d7DNfzbb/EeyzX8E2/x72ebfwzb/Hrb5t7LNv5Vt/q1s829lmxfkmmuuAeAf/uEffoerrrrqqqv+PyC46qqrrrrq/4V/+Id/+B2AM2fO8O9hG9v8R7GNbWzzH8U2trHNfxTb2MY2/5FsYxvb/EezjW1sY5v/bLaxjW1s81/NNraxjW1sYxvbXPW/k21sYxvb2MY2/1VsYxvb2OY/i21sY5v/CLaxjW3+vWxjm38P29jm38o2tvm3so1t/q1s829lm38r2/xb2eaqq6666qqrHoDKVVddddVV/y+cPXv2VoDNzU3+I9gGQBL/UWwDIIn/KLYBkMR/FNvcTxL/UWxzP0n8R7PN/STxn802z00S/x1s88JI4qr/Hrb5n8I2/1Vs8x/JNv9RbPMfwTb/Hrb597DNv4dt/q1s829lm38P2/xLrrnmGgD+4R/+4be56qqrrrrq/wMqV1111VVX/b9iG9tI4j+Cbe4nif8ItrmfJP4j2OZ+kviPYpv7SeI/im3uJ4n/aLZ5IEn8V7DNc5PEfzfb/EskcdW/jm3+J7PNfxXb/GewzX8U2/xHsM2/h23+PWzz72Gbfw/b/FvZ5t/KNi+qzc1NAO67775bueqqq6666v8DKlddddVVV/2/cN99991633333XrNNdc8eGNjg6OjIwAk8R/FNgCS+I9iGwBJ/EexDYAk/iPZBkAS/5Fs80CS+I9mmweSxH8V2zw3SfxPY5t/DUn8X2Sb/41s81/NNv8ZbPMfxTb/EWzz72Wbfy/b/HvY5t/KNv8etvm3ss2LanNzk6uuuuqqq/7foXLVVVddddX/G2fPnr31mmuuefDm5iZHR0cA2AZAEv9RbAMgif8otrmfJP4j2OZ+kviPYpv7SeI/mm3uJ4n/DLZ5IEn8V7LN8yOJ/y1sc9V/D9v8d7DNfxbb/EeyzX8E2/x72ebfyzb/Hrb597DNv5Vt/q1s8691zTXXAPAP//APv81VV1111VX/XxBcddVVV131/8Z99913K8DGxgbPzTa2sc1/FNvYxjb/kWxjm/9ItrGNbf4j2cY2trHNfzTb2MY2tvnPYhvb2MY2/11sYxvb2MY2trnq/yfb2MY2trGNbf6r2MY2trHNfzTb2MY2/xFsYxvb/HvZxjb/Hraxzb+HbWzzb2Ub2/xb2cY2/1a2+beyzb/HfffddytXXXXVVVf9f0Hlqquuuuqq/zfuu+++WwE2Nzd5YWwDIIn/KLYBkMR/FNvcTxL/UWxzP0n8R7LN/STxH80295PEfxbbPDdJ/HexzQsiiav+d7PN/xS2+c9km/9otvmPYpt/L9v8e9nm38M2/x62+fewzb+Hbf6tNjY2ALjvvvtu5aqrrrrqqv8vqFx11VVXXfX/xj/8wz/8DsCZM2d4UdgGQBL/UWxzP0n8R7ENgCT+I9nmfpL4j2Sb+0niP5ptHkgS/5ls80CS+J/ANi+IJK76n8E2/9PY5r+Cbf6j2eY/im3+I9jm38s2/162+fewzb+Hbf6tbPPvYZvNzU0Azp49+wyuuuqqq676/4LKVVddddVVV/0LbHM/SfxHsQ2AJP6j2OZ+kviPZJv7SeI/km3uJ4n/DLZ5IEn8Z7LNc5PE/yS2+ZdI4qp/H9v8b2Cb/wq2+c9gm/9ItvmPYJt/L9v8e9nm38M2/x62+fewzb+Vbe53zTXXAPAP//APv81VV1111VX/X1C56qqrrrrq/42zZ8/eCrCxscG/lW0AJPEfxTb3k8R/FNvcTxL/kWwDIIn/aLa5nyT+s9jmgSTxn802z00S/5PZ5l9DEv8f2OZ/O9v8V7HNfxbb/EeyzX8E2/xHsM2/h23+vWzz72Gbfyvb/HvY5qqrrrrqqv/3qFx11VVXXfX/xn333XcrwObmJhsbGxwdHfFvZRsASfxHsg2AJP4j2eZ+kviPYpv7SeI/mm0eSBL/WWzzQJL4r2Cb50cS/xvZ5j+aJP69bPP/mW3+q9nmP4tt/iPZ5j+Kbf4j2Obfwzb/Xrb597DNv4dt/j1s89w2NzcBuO+++27lqquuuuqq/y8Irrrqqquu+n/lH/7hH34bYHNzk/8ItrGNbf4j2cY2tvmPZhvb/EezjW1sY5v/DLaxjW3+s9nGNraxzX8129jGNraxjW3+P7KNbWxjG9vYxja2sY1tbGMb29jGNraxzf8XtrGNbWxjG9v8V7CNbWxjm/9otrGNbf6j2MY2/xFsY5t/L9vY5t/DNv8etrHNv5VtbPNvZRvb/FvZxjbP7ZprrgHgH/7hH36Hq6666qqr/j+hctVVV1111f9LtvmPZhsASfxHsg2AJP4j2eZ+kviPZpv7SeI/mm0eSBL/mWzzQJL472Cb50cSV/3/Ypv/Trb5z2ab/2i2+Y9km/8Itvn3ss2/l23+PWzz72Gbfw/bvCCbm5sA3Hfffbdy1VVXXXXV/ycEV1111VVX/b/y93//978NcObMGWxjm/9otrGNbf4j2cY2tvmPZhvb2OY/g21sY5v/LLaxjW3+K9jGNraxjW3+O9nGNraxjW1sY5ur/veyjW1sYxvb2MY2/9VsYxvb2OY/i21sY5v/SLaxzX8E29jGNv9etrHNv4dtbPPvYRvb/FvZxjb/Vraxzb+VbWzzwmxubnLVVVddddX/S1Suuuqqq676f+Xs2bPPANjc3OR+trmfJP4j2QZAEv+RbHM/SfxHss39JPEfzTb3k8R/Bts8kCT+K9jmgSTxP4FtXhhJXPXfxzb/E9nmv4pt/jPY5j+Sbf6j2Obfyzb/Xrb597LNv4dt/j1s86LY3NwE4B/+4R9+m6uuuuqqq/4/oXLVVVddddX/K/fdd9+tAJubmzw/tgGQxH8k29xPEv+RbAMgif9otrmfJP6j2eZ+kvjPYpsHksR/Bds8N0n8T2Obf4kkrvrXs83/Frb5r2Kb/yy2+Y9mm/8otvn3ss2/l23+vWzz72Gbfy/bvKg2NzcBOHv27K1cddVVV131/wmVq6666qqr/l85e/bsrQAbGxu8MLYBkMR/NNsASOI/km3uJ4n/aLa5nyT+o9nmgSTxn8U2DySJ/yq2eX4k8T+Zbf41JPF/kW3+L7DNfzXb/GeyzX8k2/xHss2/l23+I9jm38s2/x62+fewzb/W5uYmAPfdd9+tXHXVVVdd9f8Jlauuuuqqq/5fue+++24F2Nzc5EVhm/tJ4j+Sbe4nif9ItrmfJP6j2eZ+kvjPYJv7SeI/k20eSBL/1Wzz3CTxv5VtrvqfwTb/XWzzn8k2/9Fs8x/FNv9RbPPvZZt/L9v8e9jm38s2/xabm5sA3Hfffbdy1VVXXXXV/ycEV1111VVX/b9z33333Qpw5swZ/jVsY5v/DLaxzX8G29jGNv8ZbGMb2/xnsY1tbPNfwTa2sY1t/rvYxja2sY1tbHPVVS+IbWxjG9vY5r+SbWxjG9v8Z7CNbWzzH8k2tvmPYBvb/EewjW3+PWxjm38P29jm38M2/x62sc2/xebmJgD33XffrVx11VVXXfX/DcFVV1111VX/75w9e/ZW/h1sYxvb/EezjW1s85/BNrb5z2Ib29jmP4ttbGMb2/xXsI1tbGMb2/x3so1tbGMb29jGNlf9/2Ab29jGNraxzX8129jGNrb5z2Ib29jmP5JtbGOb/wi2sc1/BNvY5t/DNrb597LNv4dtbPPvYZt/jzNnzgDwD//wD7/NVVddddVV/98QXHXVVVdd9f/OfffddyvAmTNn+PeyjW3+M9jGNv8ZbGMb2/xnsY1tbPOfyTa2sY1t/qvYxja2sc3/FLaxjW1sYxvb2Oaq/11sYxvb2MY2trHNfxfb2MY2tvnPZBvb2OY/mm1s8x/FNrb5j2Ab2/x72ebfyza2+fewzb+HbWzz72Gbq6666qqr/l+jctVVV1111f8799133638B7PN/STxH8k295PEfzTb3E8S/xlscz9J/GeyzQNJ4r+CbZ6bJP4nsc0LI4mr/uvY5n862/xXss1/Ftv8R7PNfxTb/Eewzb+Xbf69bPPvZZt/L9sAXHvttQD8wz/8w+9w1VVXXXXV/zdUrrrqqquu+n/nH/7hH34H4MyZM/xnsA2AJP6j2eZ+kviPZpv7SeI/g20eSBL/mWxzP0n8V7LNc5PE/1S2eVFI4qoXzjb/G9nmv5pt/rPY5j+abf4j2eY/gm3+I9jm38s2/162+fewzVVXXXXVVVc9E5Wrrrrqqqv+3zl79uytAJubm9gGQBL/0WxzP0n8R7MNgCT+M9jmfpL4z2Kb+0niP5NtHkgS/9Vs89wk8b+Jbf4tJPG/kW3+L7LNfwfb/GezzX802/xHss1/BNv8R7DNv5dt/r1s8+9lm+d2zTXXAPAP//APv81VV1111VX/31C56qqrrrrqKsA2AJL4z2AbAEn8R7PN/STxn8E295PEfxbb3E8S/9ls80CS+O9gm+dHEv+X2Oaq/x62+e9km/9stvnPYJv/SLb5j2Cb/wi2+Y9gm38v2/x72OYF2dzcBOC+++67lauuuuqqq/6/Ibjqqquuuur/nfvuu+/W++6779bNzU02Nzd5INvYxjb/GWxjG9v8Z7CNbWzzn8U2trHNfybb2MY2tvmvYBvb2MY2tvnvZBvb2MY2trHNVVe9MLaxjW1sY5v/araxjW1s85/FNraxzX8k29jGNv9RbGOb/wi2+Y9gm38v29jm38M2tvn3sM1VV1111VVXvQAEV1111VVX/b909uzZWwE2NjZ4QWxjm/8strHNfxbb2MY2/1lsYxvb/GezjW1s81/JNraxjW3+J7CNbWxjG9vYxjZX/f9hG9vYxja2sc1/F9vYxjb/mWxjG9v8R7ONbf4j2cY2/xFsY5t/L9vY5t/DNrb597LNv5dtXphrrrkGgH/4h3/4ba666qqrrvr/iMpVV1111VX/r21ubnL27FleGNvcTxL/0WxzP0n8Z7DN/STxn8E295PEfybbPJAk/qvY5rlJ4n8K27wgkrjqfxfb/E9lm/8qtvnPZJv/SLb5j2Sb/wi2+Y9gm38v2/x72eZFsbm5CcB99913K1ddddVVV/1/RHDVVVddddX/S3//93//2wCbm5v8a9jGNv9ZbGMb2/xnsY1t/jPZxja2sc1/NtvYxja2+a9mG9vYxja2+Z/INraxjW1sYxvb2MY2V/3Xso1tbGMb29jGNrb5n8Q2trGNbf6z2cY2tvnPYBvb2OY/im1s8x/FNrb597KNbf69bGObfy/b/HvZ5kW1ubkJwH333XcrV1111VVX/X9E5aqrrrrqqv+Xzp49+wyAM2fO8G9hm/tJ4j+DbQAk8Z/BNveTxH8m29xPEv/ZbPNAkvivZpvnJon/6WzzopDEVS+cbf63ss1/B9v8Z7PNfzTb/EeyzX8U2/xHsM2/l23+vWzzr7W1tQXA2bNnn8FVV1111VX/H1G56qqrrrrq/6X77rvvVv6D2AZAEv8ZbHM/SfxnsM39JPGfyTb3k8R/Bds8kCT+O9jmuUnifyPb/FtI4n8j2/xfZpv/Lrb5z2ab/wy2+Y9km/8otvmPYJv/CLb597LNv8U111wDwH333XcrV1111VVX/X9E5aqrrrrqqv+Xzp49eyvA5uYm/1Fscz9J/Gewzf0k8Z/BNveTxH8m2zyQJP4r2OaBJPHfxTbPTRL/V9nmqv9etvnvZpv/bLb5z2Kb/0i2+Y9im/8ItvmPYJt/L9v8Rzh79uytXHXVVVdd9f8Rlauuuuqqq/5fuu+++24F2Nzc5D+DbQAk8Z/FNgCS+M9im/tJ4j+bbe4nif8qtnkgSfx3ss3zI4mrrvrXsM3/BLb5r2Kb/wy2+Y9mm/8otvmPYpt/L9v8R7DNv9fm5iYA9913361cddVVV131/xHBVVddddVV/2/9wz/8w28DnDlzhv8strGNbf6z2MY2tvnPZBvb2MY2/9lsYxvb2Oa/km1sYxvb/E9hG9vYxja2sY1trvr/zTa2sY1tbGOb/062sY1t/rPZxja2+Y9mG9v8R7KNbf4j2MY2/xFsY5t/L9v8e9nGNv9eZ86cAeC+++67lauuuuqqq/6/onLVVVddddVVgG3uJ4n/DLa5nyT+M9jmfpL4z2Sb+0niP5tt7ieJ/0q2eW6S+J/ENi+IJK76v8E2/1PZ5r+Sbf4z2eY/mm3+I9nmP4Jt/iPY5j+Cbf69bAOwtbUFwD/8wz/8NlddddVVV/1/RXDVVVddddX/W3//93//2wBnzpzhgWxjm/9MtrHNfybb2MY2/9lsYxvb/FewjW1sY5v/DraxjW1sY5v/qWxjG9vYxja2sY1trvqfwza2sY1tbGMb29jmfxLb2MY2tvmvYBvb2OY/g21sY5v/SLaxzX8U29jmP4Jt/iPY5j+Cbf69bHPVVVddddVVD0Dlqquuuuqqq14A29xPEv8ZbHM/Sfxnsc39JPGfyTb3k8R/Bds8kCT+O9jmuUnifzrbvCgkcdW/j23+t7LNfwfb/GezzX8G2/xHss1/FNv8R7DNfwTb/EewzQNdc801APzDP/zD73DVVVddddX/VwRXXXXVVVf9v/UP//APvwNwzTXX8C+xjW3+M9nGNrb5z2Qb29jmP5ttbGOb/0q2sY1tbPPfyTa2sY1tbPO/lW1sYxvb2MY2trGNbWxjG9v8f2Ab29jGNraxjW1sYxvb2MY2/1vYxja2sY1t/ivZxja2+c9iG9vY5j+SbWxjm/8otrHNfwTb2OY/gm3+I9jm38s2trnqqquuuuqq54PKVVddddVV/2+dPXv2VoDNzU1eVLa5nyT+s9gGQBL/mWxzP0n8Z7LNA0niv4ptHkgS/51s89wk8X+Nba7638E2/91s81/BNv8ZbPMfzTb/UWzzH8U2/xFs8x/BNi/ItddeC8A//MM//DZXXXXVVVf9f0Xlqquuuuqqq/6NbAMgif8strmfJP4z2eZ+kvjPZpv7SeK/km0eSBL/3Wzz/Ejiqqv+I9nmfwLb/FexzX8W2/xHs81/JNv8R7DNfxTb/HvZ5l+yubkJwH333XcrV1111VVX/X9FcNVVV1111f9b991336333XffrZubm2xubvJvZRvb2OY/k21sY5v/bLaxjW3+K9jGNraxzX8129jGNrb5n8Q2trGNbWxjm6uu+pfYxja2sY1tbPPfyTa2sc1/NtvYxjb/GWxjm/9ItrHNfxTb2OY/gm3+I9jGNv9etvmXbG5uctVVV1111VUAwVVXXXXVVf+vnT179laAzc1N/iPYxja2+c9kG9vY5j+bbWxjm/8qtrGNbf472MY2trGNbf6nsY1tbGMb29jGNlf9/2Mb29jGNrb5n8A2trGNbf4r2MY2/1lsY5v/SLaxzX8U29jmP4JtbPMfwTb/EWzzorj22msB+Id/+Iff5qqrrrrqqv/PCK666qqrrvp/7b777rsVYHNzk/9otrHNfzbb2MY2/9lsYxvb/FexjW1sY5v/LraxjW1s8z+ZbWxjG9vYxja2uep/L9vYxja2sY1tbPM/iW1sY5v/KraxjW3+M9jGNrb5j2Qb2/xHsY1t/qPY5j+CbWzz72Ub2/xr3Xfffbdy1VVXXXXV/2dUrrrqqquu+n/tvvvuuxVgY2OD/yy2uZ8k/jPZ5n6S+M9kmweSxH8F2zyQJP472Oa5SeJ/Otv8SyRx1X892/xvZJv/Drb5z2ab/wy2+Y9mm/8otvmPYpv/CLb519rc3ATgvvvuu5Wrrrrqqqv+PyO46qqrrrrq/7V/+Id/+B2Aa665Btv8Z7ONbWzzn802tvmvYhvb2Oa/km1sYxvb/HeyjW1sYxvb/G9kG9vYxja2sY1tbGMb21z1orONbWxjG9vYxja2sc3/FraxjW1s81/JNraxzX8m29jmP5ptbPMfyTa2+Y9gG9v8R7CNbf69bGObf4vNzU0Azp49+wyuuuqqq676/4zKVVddddVVVz2Abe4nif9MtgGQxH8m29xPEv8VbHM/SfxXss0DSeK/k22emyT+L7DNv4Uk/jezzf8XtvnvZpv/Crb5z2Kb/2i2+Y9km/8otvmPYJt/j2uvvRaAf/iHf/htrrrqqquu+v+MylVXXXXVVf+vnT179laAzc1NnpttACTxn8k295PEfybb3E8S/xVs80CS+K9kmweSxH832zw/kvj/wDZX/c9km/8JbPNfxTb/WWzzH802/5Fs8x/FNv8RbHPVVVddddVV/4GoXHXVVVdd9f/afffddyvA5uYmm5ubHB4e8txscz9J/Geyzf0k8Z/JNg8kif8KtrmfJP6r2eaBJPE/hW2eH0lcddV/NNv8T2Kb/yq2+c9km/9otvmPZJv/KLb5j2Kb/wi22dzcBOC+++67lauuuuqqq/4/I7jqqquuuur/vX/4h3/4bYDNzU3+JbaxjW3+s9nGNrb5r2Ab29jmv4ptbGMb2/x3sI1tbGOb/4lsYxvb2MY2trnqqheVbWxjG9vY5r+bbWxjG9v8V7CNbf6z2MY2/5FsY5v/SLb5j2Kb/wi2sc1/BNtce+21APzDP/zD73DVVVddddX/d1Suuuqqq6666t/INgCS+M9mGwBJ/Fewzf0k8V/FNveTxH8H2zw3SfxPZJsXRBJX/f9jm//JbPNfzTb/mWzzn8E2/9Fs8x/FNv9RbPMfwTb329zcBOC+++67lauuuuqqq/6/I7jqqquuuur/vb//+7//bYBrrrmGfwvb2MY2/9lsYxvb/FexjW1s81/JNraxjW3+O9nGNraxzf8GtrGNbWxjG9vY5qr/3WxjG9vYxja2sc3/NLaxjW1s81/FNraxzX8W29jmP5ptbPMfyTa2+Y9im/8otvmPYJsH2tzc5KqrrrrqqqueicpVV1111VX/7509e/YZAJubm/x72eZ+kvjPZJv7SeK/gm3uJ4n/SrZ5IEn8d7HNc5PE/xa2+ZdI4qr/Prb538o2/11s85/NNv9ZbPMfyTb/kWzzH8U2/1Fs89y2trYA+Id/+Iff5qqrrrrqqv/vqFx11VVXXfX/3n333XcrwObmJv+RbAMgif9strmfJP4r2OZ+kvivZpv7SeK/m22emyT+t7LNi0ISV/3r2Ob/Etv8d7LNfwXb/GexzX802/xHss1/FNv8R7DNC7K5uQnA2bNnb+Wqq6666qr/76hcddVVV131/97Zs2dvBdjc3OQ/g23uJ4n/bLa5nyT+K9jmgSTxX8k2DySJ/wls89wk8X+Jbf4tJPF/gW3+v7HNfzfb/FewzX8m2/xHs81/JNv8R7HNfxTbvDBbW1sA3Hfffbdy1VVXXXXV/3dUrrrqqquu+n/vvvvuuxVgc3OT/2y2uZ8k/rPZ5n6S+K9im/tJ4r+abR5IEv9T2Ob5kcT/J7a56n8+2/xPYZv/Krb5z2Sb/2i2+Y9km/9ItvmPYJsXxebmJgD33XffrVx11VVXXfX/HcFVV1111VVXAffdd9+tAGfOnME2/xVsY5v/KraxjW3+K9nGNraxzX8H29jGNraxzf80trGNbWxjm6uu+q9mG9vYxjb/3WxjG9v8V7CNbf6z2MY2/5FsY5v/SLb5j2Ib2/xHsM2LYnNzE4D77rvvVq666qqrrroKCK666qqrrroKOHv27K08gG1s81/BNraxzX8V29jGNv/VbGMb2/x3so1tbGOb/4lsYxvb2MY2trHNVVf9e9nGNraxjW3+J7CNbWzzX8E2trHNfxbb2OY/mm3+I9nGNv9RbPMfxTYvqmuvvRaAf/iHf/htrrrqqquuugoIrrrqqquuugq47777bgW45ppreCDb2MY2/xVsYxvb/FexjW1s81/NNraxjW3+O9nGNraxzf90trGNbWxjG9tcddVzs41tbGMb29jmfwrb2MY2tvmvYhvb/GexjW1s8x/NNrb5j2Ib2/xHsY1t/iPYxjZXXXXVVVdd9e9A5aqrrrrqqquA++6771b+Bba5nyT+s9nmfpL4r2CbB5LEfyXb3E8S/51s89wk8T+dbV4QSVz1f5dt/rewzX8H2/xns81/Ftv8R7PNfyTb/Eexzb/FtddeC8A//MM//A5XXXXVVVddBQRXXXXVVVddBfzDP/zD7wBce+21vChsY5v/KraxjW3+K9nGNrb5r2Yb29jGNv8T2MY2trHN/za2sY1tbGMb29jGNlf9z2cb29jGNraxjW3+J7ONbWxjm/9qtrHNfybb2OY/g21s8x/JNrb5j2Ib2/xHsI1trrrqqquuuuo/CJWrrrrqqquuAs6ePXsrwObmJv8atrmfJP4r2OZ+kvivYpv7SeK/mm0eSBL/3Wzz3CTxv5VtXhSSuOo/h23+r7DNfyfb/FewzX8W2/xHs81/NNv8R7HNv9e1114LwD/8wz/8NlddddVVV10FVK666qqrrrrqP4ht7ieJ/wq2uZ8k/qvY5n6S+O9gmweSxP8Etnlukvi/xDYvKklcBbb5v842/91s81/FNv9ZbPOfwTb/kWzzH8k2/xE2NzcBuO+++27lqquuuuqqq4DKVVddddVVVwH33Xffrffdd9+t11xzzYM3Nzc5PDzk38M2AJL4r2Kb+0niv4ptHkgS/x1s80CS+J/CNs+PJP6vs81/BEn8d7HNVc/LNv8T2Oa/km3+s9jmP4Nt/qPZ5j+Kbf6j2Oaqq6666qqrnguVq6666qqrrnqms2fP3nrNNdc8eHNzk8PDQ/4j2OZ+kvivYpv7SeK/km3uJ4n/LrZ5IEn8T2Ob5yaJq56Xba7672Wb/0ls81/FNv/ZbPMfzTb/0WzzH8k2/1Fsc+211wLwD//wD7/NVVddddVVV11B5aqrrrrqqquey+bmJv8ZbHM/SfxXsc39JPFfyTYPJIn/LrZ5IEn8T2Sb50cSV131X8U2/xPZ5r+Sbf6z2eY/g23+I9nmP5Jt/qPY5n6bm5sA3Hfffbdy1VVXXXXVVVcQXHXVVVddddUz/f3f//1vA2xubvKfzTa2sc1/JdvYxjb/HWxjG9v8d7ONbWxjm//pbGMb29jGNra56qp/L9vYxja2sc3/JLaxjW3+q9jGNv+ZbGOb/2i2sc1/JNv8R7LNfxTbPNDW1hYA9913361cddVVV1111RVUrrrqqquuuuqZzp49+wyAa665BttI4r+Cbe4nif8qtrmfJP6r2eaBJPHfyTbPTRL/09nmBZHEVVc9kG3+p7PNfwfb/FewzX8G2/xHs81/JNv8R7LNc9vc3ATg7Nmzz+Cqq6666qqrrqBy1VVXXXXVVc9033333coD2AZAEv9VbHM/SfxXsc39JPHfwTb3k8T/BLZ5IEn8b2KbF0QSV/3fZZv/TWzz38U2/xVs85/FNv/RbPMfyTb/UWzzglx77bUA3Hfffbdy1VVXXXXVVVdQueqqq6666qpnOnv27K0AW1tbPJBt7ieJ/yq2uZ8k/qvY5oEk8V/NNg8kif8JbPPcJPG/kW1eGElc9T+bbf43s81/J9v8V7DNfxbb/EezzX8k2/xHss2L4uzZs7dy1VVXXXXVVVdQueqqq6666qpnuu+++24F2Nzc5AWxzf0k8V/FNgCS+K9mm/tJ4r+DbR5IEv9T2Oa5SeJ/O9u8KCRx1X8O2/xfYpv/brb5r2Kb/yy2+c9gm/9ItvmPZJt/ydbWFgD33XffrVx11VVXXXXVFQRXXXXVVVdd9QD/8A//8NsA11xzDf8S29jmv5JtbGOb/w62sY1t/jvZxja2sc3/NLaxjW1sY5v/q2xjG9vYxja2sY1tbGMb29jmKrCNbWxjG9vYxja2sY1t/i+wjW1s89/FNraxzX8F29jmP4NtbPMfzTa2+Y9km/8otrHNv+Taa68F4L777ruVq6666qqrrno2KlddddVVV13172Sb+0niv4pt7ieJ/2q2eSBJ/HexzQNJ4n8a2zw3Sfx/Y5t/L0n8d7LNVc+fbf6nsM1/Fdv8Z7LNfwbb/EezzX8k27yoNjc3AfiHf/iH3+aqq6666qqrno3gqquuuuqqqx7g7//+738b4Nprr+Xfwja2sc1/JdvYxja2+e9gG9vY5r+bbWxjG9v8T2Ub29jGNraxzVUvnG1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trHNVc9mG9vYxjb/3WxjG9v8V7CNbf4z2eY/g23+o9nmP4ptbHPVVVddddVV/wGoXHXVVVddddXzsbm5yb+Xbe4nif9KtrmfJP6r2eZ+kvjvZpsHksT/ZLZ5bpK46qr/brb5n8Y2/9Vs85/NNv8ZbPMfzTb/kWzzb3HttdcC8A//8A+/w1VXXXXVVVc9G5WrrrrqqquueoB/+Id/+B2Azc1N/iPZ5n6S+K9km/tJ4r+abR5IEv/dbPNAkvifzjYviCSuuuo/mm3+J7PNfzXb/GezzX8W2/xHs81/JNtcddVVV1111X8wKlddddVVV131AGfPnr0VYGtri/8stgGQxH8129xPEv8dbPNAkvjvZpvnJon/LWzz/EjiqqteFLb538A2/x1s85/NNv9ZbPMfzTb/kWzz73XttdcC8A//8A+/zVVXXXXVVVc9G5Wrrrrqqquu+m9im/tJ4r+abe4nif8utrmfJP6nsM0DSeJ/G9u8IJK46v8n2/xvYpv/Lrb5z2ab/yy2+c9gm/9ItvmPsLW1BcB99913K1ddddVVV131bARXXXXVVVdd9QD33Xffrffdd9+tm5ubbG5u8l/FNraxzX8H29jGNv+dbGMb29jmfxLb2MY2trHN/2a2sY1tbGMb29jGNlf972Yb29jGNraxjW3+N7CNbWzzX802trHNfybb2OY/i23+o9nGNv+RbPMfYXNzk6uuuuqqq656AQiuuuqqq6666rmcPXv2VoDNzU1s81/NNraxzX8H29jGNrb572Qb29jGNv/T2MY2trGNbf6vsI1tbGMb29jGNraxzVX/vWxjG9vYxja2sc3/NraxjW1s89/BNrb5r2Cb/yy2sc1/NNv8R7KNbf6jXHvttQD8wz/8w29z1VVXXXXVVc+J4Kqrrrrqqquey3333XcrwObmJgC2sY1t/qvZxja2+e9iG9vY5r+bbWxjG9v8T2Qb29jGNv+X2cY2trGNbWxjG9vYxjZX/dvYxja2sY1tbGMb2/xvZxvb2Oa/k21s81/BNrb5z2Ab2/xHs41t/iPZ5j/LfffddytXXXXVVVdd9ZyoXHXVVVddddVzue+++24F2Nzc5LnZ5n6S+K9km/tJ4r+Dbe4nif9utrmfJP4nss3zI4n/L2zzryWJ/2ts8/+dbf4nsM1/Jdv8Z7LNfwbb/EeyzX8G22xubgJw33333cpVV1111VVXPScqV1111VVXXfVc/uEf/uF3AK699lr+7u/+jhfENveTxH8l29xPEv8dbPNAkvjvZJsHksT/ZLZ5bpK46grbXPW/n23+J7HNfyXb/GeyzX8G2/xHs81/NNvcb2trC4CzZ88+g6uuuuqqq656TlSuuuqqq6666gXY2triRWWb+0niv5Jt7ieJ/y62uZ8k/rvZ5rlJ4n8y2zw3SVx11f8Wtvmfxjb/1Wzzn8k2/1ls8x/NNv/RbPNA1157LQD/8A//8NtcddVVV1111XOictVVV1111VXP5ezZs7fy72AbAEn8V7PN/STx38U2DySJ/wls80CS+J/ONs+PJK666r+bbf6nss1/Ndv8Z7PNfwbb/EezzX8G21x11VVXXXXVvwKVq6666qqrrnou9913360Am5ubbG5ucnh4yL+Fbe4nif9qtnkgSfx3sc39JPE/hW0eSBL/W9jm+ZHEVVf9Z7HN/2S2+e9gm/9stvnPYpv/aLb5j2abF2RrawuA++6771auuuqqq6666jkRXHXVVVddddXz8Q//8A+/DbC1tcV/BNvYxjb/XWxjG9v8d7KNbWxjm/9JbGMb29jmfyPb2MY2trGNbWxz1VX/GraxjW1sY5v/iWxjG9v8V7ONbf4z2cY2/xlsY5v/SLaxzX8027wg1157LQD/8A//8DtcddVVV1111fOictVVV1111VX/xWxzP0n8d7DN/STx38k295PE/yS2eW6S+N/KNi+IJK76/8s2/5vY5r+Tbf6z2eY/k23+o9nmP4NtXpitrS0A7rvvvlu56qqrrrrqqudFcNVVV1111VXPx9///d//NsA111zDfybb2MY2/11sYxvb/HezjW1sY5v/iWxjG9vYxjb/F9jGNraxjW1sYxvbXPV/g21sYxvb2MY2/1vYxjb/HWxjG9v8Z7PNfxbb2OY/mm3+o9nGNv+Szc1NAO67776nc9VVV1111VXPi8pVV1111VVXPR9nz559BsDW1hb/VWxzP0n8d7DNA0niv5NtHkgS/xPZ5oEk8X+NbV4YSVz1P4Nt/i+xzX8n2/xXsc1/Ftv8Z7DNfwbbvKi2trYAOHv27DO46qqrrrrqqudF5aqrrrrqqquej/vuu+9WgM3NTf472OZ+kvjvYpv7SeK/m20eSBL/E9nmuUni/zLbvCgkcdW/n23+L7PNfzfb/FexzX8m2/xnsM1/Btv8a2xtbQFw9uzZW7nqqquuuuqq50Xlqquuuuqqq56Ps2fP3gqwubmJbe4nif9qtrmfJP672OZ+kvifwDYPJIn/qWzz3CTx/41t/jUk8f+Fbf6/ss3/FLb5r2Kb/0y2+c9gm/8stvnX2tzcBOC+++67lauuuuqqq656XlSuuuqqq6666vm47777bgXY2trigWxzP0n8V7PN/STx38U2DySJ/wls80CS+J/MNs9NElc9m23+M0jiP4Jtrvq3sc3/JLb5r2Sb/0y2+c9gm/8Mtvm32traAuC+++67lauuuuqqq656XgRXXXXVVVdd9QLcd999twJce+21PD+2sc1/F9vYxjb/3WxjG9v8T2Ib29jGNv8b2MY2trGNbWxz1X8s29jGNraxjW1sYxvb2MY2trGNbWxjG9vY5qp/HdvYxjb/E9jGNrb5r2Ib2/xnsY1t/jPY5j+Dbf6ttra2ALjvvvtu5aqrrrrqqqueP4KrrrrqqquuegHOnj17Ky8C29jGNv9dbGMb2/x3s41tbGOb/0lsYxvb2OZ/E9vYxja2sY1trrrqfzLb2MY2tvmfwja2+a9kG9v8Z7LNfwbb2OY/g23+Pa699loA/uEf/uG3ueqqq6666qrnj+Cqq6666qqrXoD77rvvVoBrr72WF5VtbGOb/y62sY1t/iewjW1s8z+NbWxjG9v8b2Qb29jGNra56qr/LraxjW1s8z+NbWzzX8k2tvnPZBvb/GewzX8G29jmqquuuuqqq/4LULnqqquuuuqqF+C+++67lX8H29xPEv8dbPNAkvjvZJsHksT/JLZ5bpL438Y2L4gkrrrqP4pt/qezzX8H2/xXsM1/Btv8Z7HNf5Rrr70WgH/4h3/4Ha666qqrrrrq+aNy1VVXXXXVVS/AP/zDP/wOwLXXXsu/l23uJ4n/Lra5nyT+u9nmfpL4n8g2DySJ/81s8/xI4qqrXhjb/G9im/8OtvmvYJv/LLb5z2Kbq6666qqrrvovRuWqq6666qqrXoCzZ8/eCrC5ucl/JNvcTxL/XWxzP0n8d7PNA0nifyLbPJAk/i+wzQsiiav+f7HN/0a2+e9im/8KtvnPZJv/DLb5j2aba6+9FoB/+Id/+G2uuuqqq6666vmjctVVV1111VX/jWxzP0n8d7HN/STxP4FtHkgS/xPZ5rlJ4v8S27wwkrjqfy/b/G9nm/8utvmvYpv/LLb5z2Kb/2i2Adja2gLgvvvuu5Wrrrrqqquuev4IrrrqqquuuuoFuO+++2697777bt3a2mJzc5P/bLaxjW3+O9nGNraxzf8UtrGNbWzzP5ltbGMb29jm/zLb2MY2trGNbWxjG9tc9d/PNraxjW1sY5v/rWxjG9v8d7HNfwXb2OY/i23+s9jmP5JtbHPVVVddddVV/woEV1111VVXXfVCnD179laAra0t/ivZxja2+e9mG9vY5n8S29jGNrb5n842trGNbWzz/4ltbGMb29jGNraxjW2u+vexjW1sYxvb2MY2tvm/wDa2sc1/J9vY5r+Cbf6z2MY2/1ls8x/JNg907bXXAvAP//APv81VV1111VVXvWAEV1111VVXXfVC3HfffbcCbG5u8t/FNraxzX8329jGNrb5n8Q2trGNbf43sI1tbGMb2/x/Zhvb2MY2trGNbWxjG9vYxjb/n9jGNraxjW1sYxvb2Ob/KtvYxjb/3Wxjm/8KtrHNfxbb/GexjW3+I9nmuW1tbQFw33333cpVV1111VVXvWBUrrrqqquuuuqFuO+++24F2Nzc5H8C29xPEv/dbHM/SfxPYpsHksT/BrZ5bpK46nnZ5j+SJP6j2eaqfz3b/E9im/8qtvnPZJv/TLb5j2ab52drawuA++6771auuuqqq6666gUjuOqqq6666qoX4uzZs88AuO6667CNbWzzP4FtbGOb/wlsYxvb/E9kG9vYxjb/m9jGNraxjW2u+o9nG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trnqRWcb29jmfwrb2Oa/im3+M9nmP5Nt/qPZ5gXZ2toC4OzZs8/gqquuuuqqq14wKlddddVVV131Qtx333238nzY5n6S+O9mm/tJ4r+bbR5IEv/T2OaBJPG/iW2eH0lcddX/Frb5n8Y2/9Vs85/NNv9ZbPMfzTb/kmuvvRaA++6771auuuqqq6666gWjctVVV1111VUvxNmzZ28F2Nzc5AWxzf0k8d/NNg8kif9utnkgSfxPY5sHksT/RrZ5bpK46qr/CWzzP5Vt/qvZ5j+bbf4z2eY/mm3+Nc6ePXsrV1111VVXXfWCUbnqqquuuuqqF+K+++67FWBra4sXhW3uJ4n/CWxzP0n8T2Cb+0nifyLbPJAk/reyzfMjiauu+s9mm//JbPPfwTb/2Wzzn8k2/9Fs86La2toC4L777ruVq6666qqrrnrBCK666qqrrrrqX/AP//APvw1w7bXX8q9hG9vY5n8K29jGNv9T2MY2trHN/1S2sY1tbGOb/+1sYxvb2MY2trHNVVf9W9nGNraxzf9UtrHNfzXb2OY/k21s85/FNrb5j2abF9W1114LwH333XcrV1111VVXXfXCUbnqqquuuuqq/wK2uZ8k/iewzf0k8T+Fbe4nif/JbPNAkvi/wjbPjySuuuqBbPO/iW3+O9jmv4Jt/jPZ5j+Dbf41tra2APiHf/iH3+aqq6666qqrXjiCq6666qqrrvoX/P3f//1vA1x77bX8R7CNbWzzP4VtbGMb2/xPYRvb2MY2/9PZxja2sY1t/q+xjW1sYxvb2MY2V/3fZxvb2MY2tvnfwDa2sc1/B9v8Z7ONbf4z2eY/mm1sc9VVV1111VX/iahcddVVV1111Ytoa2uL/2i2uZ8k/qewzf0k8T+FbR5IEv/T2eaBJPF/lW1eGElc9b+Hbf63s81/J9v8V7DNfzbb/Eezzb/VddddB8A//MM//A5XXXXVVVdd9cJRueqqq6666qp/wT/8wz/8DsDW1hb/mWxzP0n8T2Gb+0nifxLbPJAk/qezzXOTxP8HtnlhJHHVfz3b/F9jm/9OtvmvYpv/TLb5z2Cbq6666qqrrvovQuWqq6666qqr/gVnz569FWBzc5P/Kra5nyT+p7DNA0nifxLbPJAk/jewzXOTxP83tnlRSOKqfz3b/F9mm/9utvmvYpv/bLb5z2Cbf69rr70WgH/4h3/4ba666qqrrrrqhaNy1VVXXXXVVf/D2eZ+kvifxDb3k8T/NLZ5IEn8b2Gb5yaJq8A2LypJ/H9gm/+vbPM/gW3+q9jmP5tt/jPY5j/C1tYWAPfdd9+tXHXVVVddddULR+Wqq6666qqr/gX33Xffrffdd9+t11xzzYO3trY4ODjgv4tt7ieJ/0ls80CS+J/GNg8kif9NbPPcJHHVC2ab/wiS+M9mm6teNLb5n8I2/1Vs85/NNv8ZbPMfZWtri6uuuuqqq676VyC46qqrrrrqqhfB2bNnbwXY2NjANrb572Yb29jmfyLb2MY2/1PZxja2sc3/RraxjW1sY5ur/uPZxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vY5qoXzja2sc3/BLaxzX8V2/xns81/Btv8R7r22msB+Id/+Iff5qqrrrrqqqv+ZQRXXXXVVVdd9SK47777bgXY2trifraxjW3+u9nGNrb5n8g2trGNbf6nso1tbGOb/61sYxvb2MY2V131v5VtbPM/hW1s81/FNrb5z2ab/wy2+c9y33333cpVV1111VVX/cuoXHXVVVddddWL4L777rsVYGtri+fHNveTxH8n29xPEv8T2eZ+kvifyjYPJIn/rWzz/Ejiqqv+p7HN/zS2+a9mm/8KtvnPYJv/aLbZ3NwE4L777ruVq6666qqrrvqXUbnqqquuuuqqF8E//MM//A7Atddey7/ENveTxH8n2zyQJP6nsc0DSeJ/Kts8kCT+t7PNc5PEVVf9V7PN/1S2+a9km/8KtvnPYpv/aLYB2NraAuDs2bPP4Kqrrrrqqqv+ZVSuuuqqq6666l9ha2uLfw3b3E8S/91scz9J/E9km/tJ4n8y2zyQJP4vsM3zI4mrrvqPZJv/yWzzX802/xVs85/BNv/RbPNA1113HQD/8A//8NtcddVVV1111b+MylVXXXXVVVe9CM6ePXsr/062uZ8k/rvZ5n6S+J/INg8kif/JbPPcJPF/hW2eH0lcddWLwjb/G9jmv5pt/qvY5j+Dbf6j2eaqq6666qqr/p2oXHXVVVddddWL4L777rsVYGtri62tLQ4ODvj3sM39JPHfzTb3k8T/VLZ5IEn8T2ebB5LE/zW2eX4kcdX/b7b538Q2/x1s81/FNv8ZbPMfzTbPz9bWFgD33XffrVx11VVXXXXVv4zgqquuuuqqq15E//AP//DbAJubm/xHso1tbPM/gW1sYxvb/E9mG9vYxjb/G9jGNraxjW3+r7KNbWxjG9vYxjZX/d9lG9vY5n8L29jmv4Nt/ivYxjb/GWzzH802z891110HwD/8wz/8DlddddVVV131oqFy1VVXXXXVVf+D2OZ+kvifwDb3k8T/ZLa5nyT+t7DNA0ni/zrbvCCSuOp/B9v8b2ab/y62+a9im/8stvmPZpsXZGtrC4D77rvvVq666qqrrrrqRUNw1VVXXXXVVS+iv//7v/9tgOuuu47/CraxjW3+p7CNbWxjm//JbGMb29jmfxPb2MY2trHN/ye2sY1tbGMb29jGNlf997CNbWxjG9v8b2Ub2/x3sc1/Fdv8Z7HNfzTbvDCbm5sA3HfffU/nqquuuuqqq140VK666qqrrrrqRXT27NlnAGxtbfFfzTb3k8T/FLa5nyT+J7PNA0nifxPbPJAk/r+yzQsjiav+fWzzf5Ft/jvZ5r+Sbf6z2OY/mm3+JVtbWwCcPXv2GVx11VVXXXXVi4bKVVddddVVV72I7rvvvlsBNjc3+e9km/tJ4n8K29xPEv/T2eaBJPG/iW2emySuAtu8KCTx/5lt/r+wzX832/xXsc1/Ftv8Z7DNi2JrawuAs2fP3spVV1111VVXvWioXHXVVVddddWL6OzZs7cCbG1tYRtJ/Hezzf0k8T+FbR5IEv/T2eaBJPG/jW2emySuev5s868hif8NbHPVFbb572ab/0q2+c9im/8MtnlRbW1tAXDffffdylVXXXXVVVe9aKhcddVVV1111YvovvvuuxVga2sLANvcTxL/3WxzP0n8T2Kb+0nifwPbPJAk/jeyzXOTxFX/era56n8+2/xPYZv/Srb5z2Kb/wy2+dfY2toC4L777ruVq6666qqrrnrREFx11VVXXXXVv8J99913K8B1113HA9nGNrb5n8A2trGNbf4nsY1tbGOb/y1sYxvb2OZ/M9vYxja2sc1VV/1vZxvb/E9gG9v8V7LNfxbb/Gewzb/G1tYWAPfdd9+tXHXVVVddddWLjuCqq6666qqr/hXOnj17K/8C29jGNv9T2MY2tvmfxja2sc3/JraxjW1s87+dbWxjG9vY5qqr/jewjW3+p7DNfyXb2OY/i23+M9jmX+u6664D4B/+4R9+m6uuuuqqq6560RFcddVVV1111b/CfffddyvAtddey4vCNraxzf8UtrGNbf6nsY1tbGOb/01sYxvb2Ob/AtvYxja2sc1VV/1PYBvb2OZ/CtvY5r+Sbf4z2eY/g22uuuqqq6666r8Qlauuuuqqq676V7jvvvtu5d/INveTxP8EtrmfJP6nsc0DSeJ/C9s8kCT+L7DNc5PEVVf9V7DN/0S2+a9mm/9MtvnPYJt/q2uvvRaAf/iHf/gdrrrqqquuuupFR3DVVVddddVV/wr/8A//8DsA1113Hf8etrGNbf6nsI1tbGOb/4lsYxvb/G9jG9vYxjb/l9jGNraxjW1sc9VV/xFsYxvb/E9jG9v8V7PNfybb/GewzVVXXXXVVVf9N6By1VVXXXXVVf8KZ8+evRVga2uL/yi2uZ8k/qewzf0k8T+NbR5IEv+b2Oa5SeL/Ets8N0lcddWLwjb/U9nmv4tt/jPZ5j+Dbf69rrvuOgD+4R/+4be56qqrrrrqqhcdlauuuuqqq676H8Q295PE/xS2uZ8k/ieyzQNJ4n8b2zyQJP6vsc3zI4mrrrLN/3S2+e9gm/9stvnPYJv/CFtbWwDcd999t3LVVVddddVVLzqCq6666qqrrvpXuO+++2697777bt3a2mJra4v/TLaxjW3+J7GNbWxjm/+pbGMb2/xvZRvb2MY2/5fZxja2sY1tbHPV/322sY1t/iezjW3+O9jmP5NtbPOfwTZXXXXVVVdd9d+M4Kqrrrrqqqv+lc6ePXsrwNbWFv9VbGMb2/xPYxvb2OZ/KtvYxja2+d/KNraxjW3+P7CNbWxjG9vY5qr/3WxjG9v8b2Cb/y62+c9km/8stvmPct111wHwD//wD7/NVVddddVVV/3rEFx11VVXXXXVv9J99913K8DW1hb/HWxjG9v8T2Mb29jmfzLb2MY2tvnfyja2sY1tbPP/hW1sYxvb2MY2V/3PZBvb2MY2/1vYxjb/XWzzn8k2/1ls8x9pc3MTgPvuu+9Wrrrqqquuuupfh8pVV1111VVX/Svdd999twJsbm7y380295PE/yS2eSBJ/E9lm/tJ4n8z2zyQJP4/sc0LIomr/mvY5n8z2/x3s81/Jtv8Z7HNfyTbbG1tAXDffffdylVXXXXVVVf96xBcddVVV1111b/S2bNnnwFw3XXXYZv/KWxjG9vY5n8a29jGNv+T2cY2trHN/3a2sY1tbPP/mW1sYxvb2MY2trnq38c2trGNbf43s81/J9vY5j+Tbf6z2OY/km0Atra2ADh79uwzuOqqq6666qp/HSpXXXXVVVdd9a9033333coD2OZ+kvifwjb3k8T/JLZ5IEn8T2WbB5LE/2a2eW6S+P/ONi+IJK56Ntv8X2Sb/262+c9mm/8stvnPct111wFw33333cpVV1111VVX/etQueqqq6666qp/pbNnz94KsLW1xXOzzf0k8T+Fbe4nif9pbHM/SfxPZpsHksT/drZ5IElc9Wy2eVFI4v8K2/x/Ypv/brb5z2ab/yy2+Y9mm+d29uzZW7nqqquuuuqqfx0qV1111VVXXfWvdN99990KsLW1xQtjm/tJ4n8K29xPEv/T2OaBJPE/mW0eSBL/29nmuUniqhfONv8akvjvYJurrrDN/wS2+c9mm/8stvmPZpsH2traAuC+++67lauuuuqqq6761yG46qqrrrrqqn+Df/iHf/htgOuuu44XhW1sY5v/SWxjG9v8T2Ub29jmfwPb2MY2tvm/wja2sY1trvr3s41tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jmKrCNbf4nsM1/Ntv8Z7HNfzTbPNB1110HwH333XcrV1111VVXXfWvR+Wqq6666qqr/ovZ5n6S+J/CNg8kif9pbPNAkvifzjb3k8T/FbZ5IElcddX/dLb5n8I2/xVs85/FNv/RbPPctra2APiHf/iH3+aqq6666qqr/vUIrrrqqquuuurf4O///u9/G+C6667j38M2trHN/zS2sY1t/qeyjW1s87+BbWxjG9v8X2Ib29jGNra56qr/SWzzP4Vt/ivY5j+Lbf6j2eaqq6666qqr/hNQueqqq6666qp/h62tLf6j2OZ+kvifxDb3k8T/RLZ5IEn8T2ebB5LE/yW2eSBJXHXVfzXb/E9im/8KtvnPYpv/aLZ5Qa677joA/uEf/uF3uOqqq6666qp/PSpXXXXVVVdd9W/wD//wD78DsLW1xX8G29xPEv+T2OaBJPE/kW3uJ4n/DWzzQJL4v8Q2z00SV131n8E2/9PY5r+Cbf6z2OY/mm2uuuqqq6666j8Rlauuuuqqq676Nzh79uytAFtbW/xns839JPE/jW3uJ4n/iWzzQJL438A2DySJ/2ts89wkcdVV/1a2+Z/INv8VbPOfxTb/0WzzL7nuuusA+Id/+Iff5qqrrrrqqqv+9ahcddVVV1111b/D1tYW/5Vscz9J/E9jm/tJ4n8q2zyQJP43sM0DSeL/Its8kCSuuupfYpv/qWzzX8E2/1ls899la2sLgPvuu+9Wrrrqqquuuupfj+Cqq6666qqr/g3uu+++W++7775bAba2tvjvYBvb2MY2/9PYxja2sc3/ZLaxjW3+N7GNbWzzf5ltbGMb29jmqqvuZxvb/E9lm/8Ktvnfxjb/kq2tLa666qqrrrrq34ngqquuuuqqq/6Nzp49eyvA1tYW/xPYxja2+Z/INraxzf9ktrGNbWzzv4VtbGMb2/xfZxvb2MY2V/3/Yxvb/E9lG9v8V7DNfybb/EezzYviuuuuA+Af/uEffpurrrrqqquu+rchuOqqq6666qp/o/vuu+9WgM3NTf6nsY1tbPM/kW1sY5v/6WxjG9v8b2Ib29jGNv/X2cY2trGNba76v8k2tvmfzDb/V9jmP5pt/rXuu+++W7nqqquuuuqqfxsqV1111VVXXfVvdN99990KsLW1hW3uJ4n/SWxzP0n8T2ObB5LE/1S2eSBJ/G9hmweSxP91tnlukrjqfyfb/G9gm/9KtvnPYpv/aLb517juuusAuO+++27lqquuuuqqq/5tCK666qqrrrrq3+gf/uEffgfg+uuv54FsYxvb/E9jG9vY5n8q29jGNv/T2cY2tvnfxja2sY1t/r+wjW1sYxvbXPU/l21sY5v/DWzzX8k2/1ls8x/NNv9WZ8+efQZXXXXVVVdd9W9D5aqrrrrqqqv+nba2tnhBbHM/SfxPYpv7SeJ/ItvcTxL/k9nmgSTxv4lt7ieJ/09s89wkcdV/H9v8b2Ob/0q2+c9im/8prrvuOgD+4R/+4be56qqrrrrqqn8bKlddddVVV131b3T27Nlb+Vewzf0k8T+JbR5IEv/T2OaBJPE/mW3uJ4n/TWzzQJL4/8Y2z00SV/3nsc3/Vrb5r2Sb/21sc9VVV1111VX/TQiuuuqqq6666t/ovvvuuxVga2uLra0t/jVsYxvb/E9kG9vY5n8q29jGNv/T2cY2trHN/za2sY1tbPP/lW1sYxvb2Oaqfz/b2OZ/K9v8V7LNfybb/Eezzb/V1tYWAPfdd9+tXHXVVVddddW/DcFVV1111VVX/Tv8wz/8w28DbG1t8W9lG9vY5n8i29jGNv9T2cY2trHN/3S2sY1tbPO/jW1sYxvb/H9mG9vYxja2ueqFs41tbGOb/81s81/JNv+ZbPMfzTb/Vtdddx0A//AP//A7XHXVVVddddW/HZWrrrrqqquu+h/ENveTxP80trmfJP6nss39JPE/nW3uJ4n/bWxzP0n8f2eb50cS/1/Z5v8a2/xXss1/Jtv8T7O1tQXAfffddytXXXXVVVdd9W9HcNVVV1111VX/Dn//93//2wDXXXcd/9FsYxvb/E9kG9vYxjb/U9nGNrb538A2trGNbf63sY1tbGObq57NNraxjW1sYxvb/F9jG9vYxjb/l9jGNv+X2OY/g23+Pba2tgC47777ns5VV1111VVX/dtRueqqq6666qp/h7Nnzz4DYHt7m/9MtnkgSfxPY5v7SeJ/Its8kCT+p7PN/STxv41t7ieJq54/27wgkvifzDb/X9jmv4Nt/rexzb/X1tYWAGfPnn0GV1111VVXXfVvR+Wqq6666qqr/h3uu+++WwG2trb4r2Sb+0nifxrb3E8S/1PZ5n6S+J/ONveTxP82tnkgSVz1L7PNi0IS/xlscxXY5r+Dbf4z2eY/mm3+I2xtbQFw9uzZW7nqqquuuuqqfzsqV1111VVXXfXvcPbs2VsBtra2+O9im/tJ4n8a29xPEv9T2eaBJPE/mW0eSBL/29jmgSRx1b+dba76z2Gb/w62+c9km//Jtra2ALjvvvtu5aqrrrrqqqv+7ahcddVVV1111b/DfffddyvA1tYW/xPY5n6S+J/GNg8kif+pbHM/SfxPZ5v7SeJ/I9vcTxJXXfU/gW3+O9jmP5Nt/jPY5j/K1tYWAPfdd9+tXHXVVVddddW/HcFVV1111VVX/Tvdd999twJcd911/E9iG9vY5n8q29jGNv+T2cY2tvnfwDa2sY1t/jeyjW1sc9VV/11sc9WLzjb/Uba2tgC47777buWqq6666qqr/n0Irrrqqquuuurf6ezZs7cC2MY2tvmfxja2sc3/VLaxjW3+J7ONbWxjm/8NbGMb2/xvZBvb2MY2V131X8E2/11s85/JNv/TXXfddQD8wz/8w29z1VVXXXXVVf8+BFddddVVV1317/T3f//3vw1w/fXXcz/b2MY2/9PYxja2+Z/KNraxzf90trGNbf43sI1tbPO/lW1sY5urrvrPYJv/Lrb5z2Sb/wy2+Y9km6uuuuqqq676D0Llqquuuuqqq/6T2eZ+kvifxDYPJIn/aWzzQJL4n8o295PE/3S2uZ8k/jeyzQNJ4qqr/j1s89/FNv8b2eY/km2uv/56AP7hH/7hd7jqqquuuuqqfx8qV1111VVXXfXv9A//8A+/A3DdddfxL7HN/STxP41t7ieJ/4lscz9J/E9lm/tJ4n862zyQJP43ss39JHHVVf8atvm/zDZXXXXVVVdd9f8Qlauuuuqqq676dzp79uytANvb2/xr2OZ+kvifxjb3k8T/RLa5nyT+p7LNA0nifzrb3E8S/xvZ5n6SuOqqF8Y2/51s85/JNv8ZbPMfyTYA1113HQD/8A//8NtcddVVV1111b8Plauuuuqqq676H8A295PE/zS2uZ8k/ieyzf0k8T+Zbe4nif/pbHM/SfxvZJv7SeKqqx7INv+dbPO/kW3+I9nmfltbWwDcd999t3LVVVddddVV/z4EV1111VVXXfXvdN99991633333bq1tcXW1hb/XraxjW3+J7KNbWzzP5VtbGMb2/xPZhvb2OZ/A9vYxjb/W9nGNra56irb/HeyzX8221x11VVXXXXV/2MEV1111VVXXfUf4OzZs7cCbG1t8R/JNraxzf9EtrGNbf4ns41tbPM/mW1sY5v/DWxjG9v8b2Ub29jGNlf9/2Kbq/5tbPMfyTb3u+666wD4h3/4h9/mqquuuuqqq/79CK666qqrrrrqP8B99913K8D29jb/WWxjG9v8T2Qb29jGNv9T2cY2tvmfzDa2sc3/BraxjW3+N7ONbWxz1f9ttvnvZpv/bLb5n842D7S1tQXAfffddytXXXXVVVdd9e9H5aqrrrrqqqv+A9x33323AmxtbfFfwTb3k8T/RLa5nyT+J7LN/STxP5Vt7ieJ/+lscz9J/G9lm/tJ4qr/O2zz/4Ft/jPY5j/T1tYWAPfdd9+tXHXVVVddddW/H5Wrrrrqqquu+g/wD//wD78DcN111/FfzTb3k8T/RLa5nyT+J7LN/STxP5Vt7ieJ/+lscz9J/G9lm/tJ4qr/nWzzP4Vt/jeyzX8k2zy37e1tAM6ePfsMrrrqqquuuurfj8pVV1111VVX/R9im/tJ4n8i29xPEv8T2eZ+kvifyjb3k8T/dLYBkMT/Zra5nySu+t/BNv9T2OY/m23+t7ruuusAuO+++27lqquuuuqqq/79qFx11VVXXXXVf4CzZ8/eCrC9vc3/FLa5nyT+J7LN/STxP5Ft7ieJ/6lscz9J/E9mm/tJ4n8z2wBI4qr/uWxz1b+fbf4j2eaFOXv27K1cddVVV1111b8flauuuuqqq676D3DffffdCrC1tcX/RLa5nyT+J7LN/STxP5FtHkgS/xPZ5n6S+J/MNveTxP9WtrmfJK76n8M2/5PY5j+bbf4329raAuC+++67lauuuuqqq6769yO46qqrrrrqqv8g//AP//DbANdddx22sc3/RLaxjW3+p7KNbWzzP5ltbGOb/6lsYxvb/E9nG9v8b2cb29jmqv9etrnqP4Zt/iPZ5vm57rrrALjvvvtu5aqrrrrqqqv+Y1C56qqrrrrqqv9EtrmfJP6nsc0DSeJ/Gts8kCT+J7LN/STxP5Ft7ieJ/6lscz9J/G9mm/tJ4qr/Orb5n8Y2/9ls87/Z1tYWAP/wD//w21x11VVXXXXVfwyCq6666qqrrvoP8vd///e/DXDdddfx/NjGNrb5n8o2trHN/1S2sY1t/qeyjW1s8z+VbWzzP51tbGOb/+1sYxvbXPWfyzZX/cexzX8k21x11VVXXXXVfyEqV1111VVXXfUfbHt7m3+Jbe4nif+JbHM/SfxPZJv7SeJ/ItvcTxL/09jmfpL4n8w2AJL43842AJK46j+Wbf4nss1/Ntv8b3f99dcD8A//8A+/w1VXXXXVVVf9x6By1VVXXXXVVf9B/uEf/uF3ALa2tvjXsM39JPE/kW3uJ4n/iWxzP0n8T2QbAEn8T2Sb+0nifyrb3E8S/5vZ5n6SuOrfxzZX/c9mm6uuuuqqq676L0blqquuuuqqq/6DnD179laA7e1t/q1scz9J/E9km/tJ4n8i29xPEv/T2OZ+kvifyDYAkvifzDYAkvjfzjb3k8RV/zq2+Z/KNv9b2ea/0nXXXQfAP/zDP/w2V1111VVXXfUfg8pVV1111VVX/Qfb2triP4Jt7ieJ/4lscz9J/E9km/tJ4n8a29xPEv/T2OZ+kvifyjYAkvi/wDYAkrjqX2ab/+9s8z+dbf4lW1tbANx33323ctVVV1111VX/MQiuuuqqq6666j/Ifffdd+t99913K8DW1hb/kWxjG9v8T2Ub29jmfyrb2MY2/xPZxja2+Z/INrb5n8w2tvm/wja2sc1Vz59t/iezzf9WtvmvtLW1xVVXXXXVVVf9JyC46qqrrrrqqv9AZ8+evRVge3ub/yy2sY1t/qeyjW1s8z+VbWxjm/+JbGMb2/xPYxvb2OZ/KtvYxjb/V9jGNlc9m22uAtv8T2ebf8l1110HwD/8wz/8NlddddVVV131H4fgqquuuuqqq/4D3XfffbcCbG1t8V/BNraxzf9UtrGNbf6nso1tbPM/kW1s8z+RbWzzP5ltbPN/hW1sY5v/z2zzP51trvrXu++++27lqquuuuqqq/7jULnqqquuuuqq/0D33XffrQBbW1v8V7PNA0nifxrb3E8S/xPZ5n6S+J/ENveTxP8ktrmfJP4nsg2AJP6vsA2AJP4/sc1V/7ls8x/FNi+K66+/HoD77rvvVq666qqrrrrqPw7BVVddddVVV/0H+od/+IffAbj++uv572Yb29jmfyLb2MY2/1PZxjb/E9nGNrb5n8Y2tvmfyja2+b/ENraxzf91trnq2Wzzf83Zs2efwVVXXXXVVVf9x6Fy1VVXXXXVVf8Jtre3+Z/ENveTxP80trmfJP6nsc39JPE/jW0AJPE/iW0AJPE/kW0AJPF/iW0AJPF/jW3+t7DN/1a2+e9w3XXXAfAP//APv81VV1111VVX/cehctVVV1111VX/gc6ePXsrgG3+p7LN/STxP41t7ieJ/2lscz9J/E9im/tJ4n8K2wBI4n8i2wBI4v8S29xPEv/b2eaq/31s86La2triqquuuuqqq/4TEFx11VVXXXXVf6D77rvvVoDt7W02NzexjW3+p7KNbWzzP5FtbGOb/4lsYxvb/E9jG9v8T2Ib29jmfyLb2Ob/ItvY5n8r21z1/8d99913K1ddddVVV131H4fgqquuuuqqq/6D/f3f//1vA2xvb3M/29jGNv9T2cY2tvmfyDa2sc3/RLaxzf80trGNbf4nsY1t/ieyjW3+L7KNbWzzv4Vtrnr+bPN/xXXXXQfAP/zDP/wOV1111VVXXfUfi8pVV1111VVX/Rezzf0k8T+Rbe4nif9pbHM/SfxPYpv7SeJ/EtsASOJ/CtsASOJ/GttI4v8q2wBI4n8q2/xvZJv/rWzzH8U2L6qtrS0A7rvvvlu56qqrrrrqqv9YBFddddVVV131H+wf/uEffhvg+uuv519iG9vY5n8q29jGNv8T2cY2tvmfxja2sc3/JLaxzf8ktrHN/zS2sc3/ZbaxjW3+J7HNVf9/bG1tAXDfffc9nauuuuqqq676j0Xlqquuuuqqq/6DnT179laAra0t/jVscz9J/E9km/tJ4n8a29xPEv+T2AZAEv9T2AZAEv9T2AZAEv+T2AZAEv+X2QZAEv9dbHPV/z/b29sAnD179hlcddVVV1111X8sKlddddVVV131H+y+++67FWB7e5t/K9vcTxL/E9nmfpL4n8Y295PE/xS2uZ8k/iewzf0k8T+BbQAk8T+JbSTxf51t7ieJ/yq2uer/Btv8a2xtbQFw9uzZW7nqqquuuuqq/1hUrrrqqquuuuo/2H333XcrwNbWFv8RbHM/SfxPZJv7SeJ/GtsASOJ/EtvcTxL/E9gGQBL/E9hGEv+T2AZAEv8f2AZAEv+ZbHPVi842/9Fs899la2sLgPvuu+9Wrrrqqquuuuo/FpWrrrrqqquu+g929uzZZwBsb2/zH80295PE/0S2AZDE/zS2uZ8k/iexDYAk/iewDYAk/rvZBkAS/5PYRhL/X9jmfpL4j2Kbq67a2toC4L777ruVq6666qqrrvqPRXDVVVddddVV/wnuu+++WwGuv/56/rPYxja2+Z/INraxzf9EtrGNbf4nsY1t/qewjW3+J7CNbf4nsY1t/r+xjW1s829lG9v8X2Obq/51tra2ALjvvvtu5aqrrrrqqqv+4xFcddVVV1111X+Cs2fP3sp/IdvYxjb/E9nGNrb5n8g2trHN/xS2sY1t/iewjW3+J7CNbf4nsc3/V7axjW1s88LYxja2uer/Ltv8a1x33XUA/MM//MNvc9VVV1111VX/8Qiuuuqqq6666j/B3//93/82wPXXX89/NdvYxjb/E9nGNrb5n8g2tvmfxDa2+Z/ANrb5n8A2/5PYxjb/39nGNraxjW1sY5urrrrqqquuuuqq/wZUrrrqqquuuur/MNvcTxL/09jmfpL4n8Q295PE/wS2AZDEfzfbAEjiv5NtACTxP4VtJHHVVf+b2Oa/y/XXXw/AP/zDP/wOV1111VVXXfUfj8pVV1111VVX/Sf4h3/4h98BuP766/mfwjb3k8T/NLa5nyT+J7ENgCT+J7DN/STx38k2AJL472QbSfxPYRtJXHXVVVddddVVV131347KVVddddVVV/0nOHv27K0AW1tb/E9km/tJ4n8a29xPEv9T2OZ+kvifwDYAkvjvZBsASfx3sQ2AJP4nsI0krrrqqhfuuuuuA+Af/uEffpurrrrqqquu+o9H5aqrrrrqqqv+k9kGQBL/E9nmfpL4n8Y2AJL4n8Q2AJL4n8A2AJL472QbAEn8d7GNJP4nsA2AJK666v8D2/xrbW1tAXDffffdylVXXXXVVVf9xyO46qqrrrrqqv8E991336333Xffrdvb22xvbwNgG9vY5n8q29jGNv/T2MY2tvmfxDa2sc3/BLaxzX832/x3so1t/qewzVVXXXXVVVddddVV/y0Irrrqqquuuuo/ydmzZ28F2Nra4rnZxja2+Z/KNrb5n8g2trHN/yS2sc3/BLaxzX8n29jmv5Nt/qewzVX/90niqhfdddddB8A//MM//DZXXXXVVVdd9Z+D4Kqrrrrqqqv+k9x33323Amxvb/PC2MY2tvmfyDa2sc3/RLaxjW3+p7CNbWzz3802tvnvZBvb/Hexzf8UtrnqqquebWtrC4D77rvvVq666qqrrrrqPweVq6666qqrrvpPct99990KsLW1xYvKNveTxP80trmfJP6nsQ2AJP6nsA2AJP472QZAEv9dbCOJ/w62AZDEfzfbSOKqq66Cra0tAO67775bueqqq6666qr/HARXXXXVVVdd9Z/kH/7hH34H4IYbbuDfwja2sc3/RLaxjW3+p7GNbWzzP4VtbPPfzTa2+e9iG9v8d7HN/wS2ueqqq2B7exuAs2fPPoOrrrrqqquu+s9B5aqrrrrqqqv+F7DN/STxP41t7ieJ/0lscz9J/Hezzf0k8d/FNgCS+O9gG0n8d7CNJP672UYSV131/9l1110HwH333XcrV1111VVXXfWfg8pVV1111VVX/Sc5e/bsrQBbW1v8R7LN/STxP41t7ieJ/0lsAyCJ/wlsAyCJ/y62AZDEfzXbAEjiv5ptJPHfzTaSuOqq/wts82919uzZW7nqqquuuuqq/xxUrrrqqquuuuo/yX333XcrwPb2Nv9ZbAMgif+JbHM/SfxPYZv7SeK/m20AJPHfxTYAkvivZhtJ/FezDYAkrrrqP5IkbHPVv2xrawuA++6771auuuqqq6666j8HwVVXXXXVVVf9J/qHf/iH3wa4/vrr+c9kG9vY5n8q29jmfxrb2OZ/AtvY5r+TbWzzX802tvnvYJv/Tra56qr/j6677joA7rvvvlu56qqrrrrqqv88BFddddVVV131f4xtbGOb/4lsYxvb/E9iG9vY5r+bbWzz38k2/x1s89/BNv+dbHPVVf/fbG1tAfAP//APv81VV1111VVX/echuOqqq6666qr/RH//93//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Ele96CTx7yGJ/0iS+K8mif9sknhutvmvIgnb/HtJwjb/GpKwzX8WSdjmuuuuA+Af/uEffoerrrrqqquu+u9DcNVVV1111VX/jf7hH/7hdwBuvPFG/ivZxjb/E9jGNv9dbPNfxTb/WWzzH8k2/1PY5n8bSfxfIIn/KpKQhCT+u0hCEpKQxH82SfxHkMS/liT+NSRx1VVXXXXVVf9LEVx11VVXXXXVf6OzZ8/eCrC9vc1/B9vY5n8C29jGNv/VbGOb/wq2+c9im/9ItvmPYJur/mtI4j+KJP6zSUISkvifSBKSkMR/FklI4r+DJP41JPGiksR1110HwD/8wz/8NlddddVVV13134fKVVddddVVV/03u++++25dLBYPftSjHsX/BJL4n0IS/5dJ4n8DSfx7SeK/kyT+LSTxX00S/90k8Z9JEv9b2eY/i23+q9nmP8vW1hYA9913361cddVVV1111X8f9KAHPYirrrrqqquu+u/2Td/0TU/nqquuuuqqq/6P+ZAP+ZCHcNVVV1111VX/vdCDHvQgrrrqqquuuuqqq6666qqrrrrqqquuuuqq/5OoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q/hHzyEWaYyTPEQAAAAASUVORK5CYII=) - - diff --git a/docs/kcl/startSketchOn.md b/docs/kcl/startSketchOn.md index 5de8dac39..39f9ec281 100644 --- a/docs/kcl/startSketchOn.md +++ b/docs/kcl/startSketchOn.md @@ -40,7 +40,7 @@ startSketchOn( ```js exampleSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [0, 10]) |> line(end = [-10, 0]) @@ -49,7 +49,7 @@ exampleSketch = startSketchOn(XY) example = extrude(exampleSketch, length = 5) exampleSketch002 = startSketchOn(example, face = END) - |> startProfileAt([1, 1], %) + |> startProfile(at = [1, 1]) |> line(end = [8, 0]) |> line(end = [0, 8]) |> line(end = [-8, 0]) @@ -58,7 +58,7 @@ exampleSketch002 = startSketchOn(example, face = END) example002 = extrude(exampleSketch002, length = 5) exampleSketch003 = startSketchOn(example002, face = END) - |> startProfileAt([2, 2], %) + |> startProfile(at = [2, 2]) |> line(end = [6, 0]) |> line(end = [0, 6]) |> line(end = [-6, 0]) @@ -74,7 +74,7 @@ example003 = extrude(exampleSketch003, length = 5) exampleSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [0, 10]) |> line(end = [-10, 0]) @@ -83,7 +83,7 @@ exampleSketch = startSketchOn(XY) example = extrude(exampleSketch, length = 5, tagEnd = $end01) exampleSketch002 = startSketchOn(example, face = end01) - |> startProfileAt([1, 1], %) + |> startProfile(at = [1, 1]) |> line(end = [8, 0]) |> line(end = [0, 8]) |> line(end = [-8, 0]) @@ -92,7 +92,7 @@ exampleSketch002 = startSketchOn(example, face = end01) example002 = extrude(exampleSketch002, length = 5, tagEnd = $end02) exampleSketch003 = startSketchOn(example002, face = end02) - |> startProfileAt([2, 2], %) + |> startProfile(at = [2, 2]) |> line(end = [6, 0]) |> line(end = [0, 6]) |> line(end = [-6, 0]) @@ -105,7 +105,7 @@ example003 = extrude(exampleSketch003, length = 5) ```js exampleSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [0, 10], tag = $sketchingFace) |> line(end = [-10, 0]) @@ -114,7 +114,7 @@ exampleSketch = startSketchOn(XY) example = extrude(exampleSketch, length = 10) exampleSketch002 = startSketchOn(example, face = sketchingFace) - |> startProfileAt([1, 1], %) + |> startProfile(at = [1, 1]) |> line(end = [8, 0]) |> line(end = [0, 8]) |> line(end = [-8, 0]) @@ -123,7 +123,7 @@ exampleSketch002 = startSketchOn(example, face = sketchingFace) example002 = extrude(exampleSketch002, length = 10) exampleSketch003 = startSketchOn(example002, face = sketchingFace002) - |> startProfileAt([-8, 12], %) + |> startProfile(at = [-8, 12]) |> line(end = [0, 6]) |> line(end = [6, 0]) |> line(end = [0, -6]) @@ -136,7 +136,7 @@ example003 = extrude(exampleSketch003, length = 5) ```js exampleSketch = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -149,7 +149,7 @@ exampleSketch = startSketchOn(XY) example = revolve(exampleSketch, axis = Y, angle = 180) exampleSketch002 = startSketchOn(example, face = END) - |> startProfileAt([4.5, -5], %) + |> startProfile(at = [4.5, -5]) |> line(end = [0, 5]) |> line(end = [5, 0]) |> line(end = [0, -5]) @@ -165,7 +165,7 @@ example002 = extrude(exampleSketch002, length = 5) exampleSketch = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -183,7 +183,7 @@ example = revolve( ) exampleSketch002 = startSketchOn(example, face = end01) - |> startProfileAt([4.5, -5], %) + |> startProfile(at = [4.5, -5]) |> line(end = [0, 5]) |> line(end = [5, 0]) |> line(end = [0, -5]) @@ -201,7 +201,7 @@ a1 = startSketchOn({ yAxis = { x = 0, y = 1, z = 0 }, zAxis = { x = 0, y = 0, z = 1 } }) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [100.0, 0]) |> yLine(length = -100.0) |> xLine(length = -100.0) diff --git a/docs/kcl/std-helix.md b/docs/kcl/std-helix.md index 8924150e9..fd0058632 100644 --- a/docs/kcl/std-helix.md +++ b/docs/kcl/std-helix.md @@ -62,7 +62,7 @@ springSketch = startSketchOn(YZ) ```js // Create a helix around an edge. helper001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $edge001) helixPath = helix( diff --git a/docs/kcl/std-math-cos.md b/docs/kcl/std-math-cos.md index b66777c18..01bb55d08 100644 --- a/docs/kcl/std-math-cos.md +++ b/docs/kcl/std-math-cos.md @@ -28,7 +28,7 @@ cos(@num: number(Angle)): number(_) ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine( angle = 30, length = 3 / cos(30deg), diff --git a/docs/kcl/std-math-polar.md b/docs/kcl/std-math-polar.md index 007847eb7..fc6d4d1d6 100644 --- a/docs/kcl/std-math-polar.md +++ b/docs/kcl/std-math-polar.md @@ -33,7 +33,7 @@ polar( ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = polar(angle = 30, length = 5), tag = $thing) |> line(end = [0, 5]) |> line(end = [segEndX(thing), 0]) diff --git a/docs/kcl/std-math-sin.md b/docs/kcl/std-math-sin.md index f152443be..56cdaaacd 100644 --- a/docs/kcl/std-math-sin.md +++ b/docs/kcl/std-math-sin.md @@ -28,7 +28,7 @@ sin(@num: number(Angle)): number(_) ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine( angle = 50, length = 15 / sin(135deg), diff --git a/docs/kcl/std-math-tan.md b/docs/kcl/std-math-tan.md index b684285fe..cc7e90f26 100644 --- a/docs/kcl/std-math-tan.md +++ b/docs/kcl/std-math-tan.md @@ -28,7 +28,7 @@ tan(@num: number(Angle)): number(_) ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine( angle = 50, length = 50 * tan((1/2): number(rad)), diff --git a/docs/kcl/std-offsetPlane.md b/docs/kcl/std-offsetPlane.md index 4187950db..820e6be25 100644 --- a/docs/kcl/std-offsetPlane.md +++ b/docs/kcl/std-offsetPlane.md @@ -34,7 +34,7 @@ offsetPlane( ```js // Loft a square and a circle on the `XY` plane using offset. squareSketch = startSketchOn(XY) - |> startProfileAt([-100, 200], %) + |> startProfile(at = [-100, 200]) |> line(end = [200, 0]) |> line(end = [0, -200]) |> line(end = [-200, 0]) @@ -52,7 +52,7 @@ loft([squareSketch, circleSketch]) ```js // Loft a square and a circle on the `XZ` plane using offset. squareSketch = startSketchOn(XZ) - |> startProfileAt([-100, 200], %) + |> startProfile(at = [-100, 200]) |> line(end = [200, 0]) |> line(end = [0, -200]) |> line(end = [-200, 0]) @@ -70,7 +70,7 @@ loft([squareSketch, circleSketch]) ```js // Loft a square and a circle on the `YZ` plane using offset. squareSketch = startSketchOn(YZ) - |> startProfileAt([-100, 200], %) + |> startProfile(at = [-100, 200]) |> line(end = [200, 0]) |> line(end = [0, -200]) |> line(end = [-200, 0]) @@ -88,7 +88,7 @@ loft([squareSketch, circleSketch]) ```js // Loft a square and a circle on the `-XZ` plane using offset. squareSketch = startSketchOn(-XZ) - |> startProfileAt([-100, 200], %) + |> startProfile(at = [-100, 200]) |> line(end = [200, 0]) |> line(end = [0, -200]) |> line(end = [-200, 0]) @@ -106,12 +106,12 @@ loft([squareSketch, circleSketch]) ```js // A circle on the XY plane startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> circle( radius = 10, center = [0, 0] ) // Triangle on the plane 4 units above startSketchOn(offsetPlane(XY, offset = 4)) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [0, 10]) |> close() diff --git a/docs/kcl/std-revolve.md b/docs/kcl/std-revolve.md index 9e2d51dcb..eca37c700 100644 --- a/docs/kcl/std-revolve.md +++ b/docs/kcl/std-revolve.md @@ -53,7 +53,7 @@ revolve( ```js part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -81,7 +81,7 @@ sketch001 = startSketchOn(XY) ```js part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -97,7 +97,7 @@ part001 = startSketchOn(XY) ```js part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -109,7 +109,7 @@ part001 = startSketchOn(XY) |> revolve(axis = Y, angle = 180) part002 = startSketchOn(part001, face = END) - |> startProfileAt([4.5, -5], %) + |> startProfile(at = [4.5, -5]) |> line(end = [0, 5]) |> line(end = [5, 0]) |> line(end = [0, -5]) @@ -121,7 +121,7 @@ part002 = startSketchOn(part001, face = END) ```js box = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 20]) |> line(end = [20, 0]) |> line(end = [0, -20]) @@ -140,7 +140,7 @@ sketch001 = startSketchOn(box, face = END) ```js box = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 20]) |> line(end = [20, 0]) |> line(end = [0, -20], tag = $revolveAxis) @@ -159,7 +159,7 @@ sketch001 = startSketchOn(box, face = END) ```js box = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 20]) |> line(end = [20, 0]) |> line(end = [0, -20], tag = $revolveAxis) @@ -179,7 +179,7 @@ sketch001 = startSketchOn(box, face = END) ```js sketch001 = startSketchOn(XY) - |> startProfileAt([10, 0], %) + |> startProfile(at = [10, 0]) |> line(end = [5, -5]) |> line(end = [5, 5]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -200,14 +200,14 @@ part001 = revolve( // Revolve two sketches around the same axis. sketch001 = startSketchOn(XY) -profile001 = startProfileAt([4, 8], sketch001) +profile001 = startProfile(sketch001, at = [4, 8]) |> xLine(length = 3) |> yLine(length = -3) |> xLine(length = -3) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() -profile002 = startProfileAt([-5, 8], sketch001) +profile002 = startProfile(sketch001, at = [-5, 8]) |> xLine(length = 3) |> yLine(length = -3) |> xLine(length = -3) @@ -226,7 +226,7 @@ revolve( // Revolve around a path that has not been extruded. profile001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 20], tag = $revolveAxis) |> line(end = [20, 0]) |> line(end = [0, -20]) @@ -243,7 +243,7 @@ sketch001 = startSketchOn(XY) // Revolve around a path that has not been extruded or closed. profile001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 20], tag = $revolveAxis) |> line(end = [20, 0]) @@ -258,7 +258,7 @@ sketch001 = startSketchOn(XY) // Symmetrically revolve around a path. profile001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 20], tag = $revolveAxis) |> line(end = [20, 0]) @@ -273,7 +273,7 @@ sketch001 = startSketchOn(XY) // Bidirectional revolve around a path. profile001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 20], tag = $revolveAxis) |> line(end = [20, 0]) diff --git a/docs/kcl/std-sketch-circle.md b/docs/kcl/std-sketch-circle.md index 6999cbaf9..9c47159ee 100644 --- a/docs/kcl/std-sketch-circle.md +++ b/docs/kcl/std-sketch-circle.md @@ -46,7 +46,7 @@ example = extrude(exampleSketch, length = 5) ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([-15, 0], %) + |> startProfile(at = [-15, 0]) |> line(end = [30, 0]) |> line(end = [0, 30]) |> line(end = [-30, 0]) diff --git a/docs/kcl/std-sketch-mirror2d.md b/docs/kcl/std-sketch-mirror2d.md index 7055b6a67..966816aaa 100644 --- a/docs/kcl/std-sketch-mirror2d.md +++ b/docs/kcl/std-sketch-mirror2d.md @@ -35,7 +35,7 @@ mirror2d( ```js // Mirror an un-closed sketch across the Y axis. sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 10], %) + |> startProfile(at = [0, 10]) |> line(end = [15, 0]) |> line(end = [-7, -3]) |> line(end = [9, -1]) @@ -54,7 +54,7 @@ example = extrude(sketch001, length = 10) ```js // Mirror a un-closed sketch across the Y axis. sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 8.5], %) + |> startProfile(at = [0, 8.5]) |> line(end = [20, -8.5]) |> line(end = [-20, -8.5]) |> mirror2d(axis = Y) @@ -67,11 +67,11 @@ example = extrude(sketch001, length = 10) ```js // Mirror a un-closed sketch across an edge. helper001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $edge001) sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 8.5], %) + |> startProfile(at = [0, 8.5]) |> line(end = [20, -8.5]) |> line(end = [-20, -8.5]) |> mirror2d(axis = edge001) @@ -84,7 +84,7 @@ sketch001 = startSketchOn(XZ) ```js // Mirror an un-closed sketch across a custom axis. sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 8.5], %) + |> startProfile(at = [0, 8.5]) |> line(end = [20, -8.5]) |> line(end = [-20, -8.5]) |> mirror2d( @@ -101,7 +101,7 @@ example = extrude(sketch001, length = 10) ```js // Sketch on the face of a mirrored sketch, that has been extruded. sketch0011 = startSketchOn(XY) - |> startProfileAt([6.77, 0], %) + |> startProfile(at = [6.77, 0]) |> yLine(length = 1.27) |> tangentialArc(endAbsolute = [5.96, 2.37]) |> tangentialArc(endAbsolute = [-6.2, 2.44]) diff --git a/docs/kcl/std-toDegrees.md b/docs/kcl/std-toDegrees.md index c8c95b878..53a7d393f 100644 --- a/docs/kcl/std-toDegrees.md +++ b/docs/kcl/std-toDegrees.md @@ -28,7 +28,7 @@ toDegrees(@num: number(deg)): number(deg) ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine( angle = 50, length = 70 * cos(toDegrees((PI/4): number(rad))), diff --git a/docs/kcl/std-toRadians.md b/docs/kcl/std-toRadians.md index 8301d00d4..6a2164b84 100644 --- a/docs/kcl/std-toRadians.md +++ b/docs/kcl/std-toRadians.md @@ -28,7 +28,7 @@ toRadians(@num: number(rad)): number(rad) ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine( angle = 50, length = 70 * cos(toRadians(45)), diff --git a/docs/kcl/std.json b/docs/kcl/std.json index 172043112..6f87323c6 100644 --- a/docs/kcl/std.json +++ b/docs/kcl/std.json @@ -38,7 +38,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "myAngle = -120\n\nsketch001 = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [8, 0])\n |> angledLine(angle = abs(myAngle), length = 5)\n |> line(end = [-5, 0])\n |> angledLine(angle = myAngle, length = 5)\n |> close()\n\nbaseExtrusion = extrude(sketch001, length = 5)" + "myAngle = -120\n\nsketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [8, 0])\n |> angledLine(angle = abs(myAngle), length = 5)\n |> line(end = [-5, 0])\n |> angledLine(angle = myAngle, length = 5)\n |> close()\n\nbaseExtrusion = extrude(sketch001, length = 5)" ] }, { @@ -80,7 +80,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "sketch001 = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = toDegrees(acos(0.5)), length = 10)\n |> line(end = [5, 0])\n |> line(endAbsolute = [12, 0])\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" + "sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = toDegrees(acos(0.5)), length = 10)\n |> line(end = [5, 0])\n |> line(endAbsolute = [12, 0])\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" ] }, { @@ -14676,7 +14676,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> yLine(endAbsolute = 15)\n |> angledLine(angle = 30, length = 15)\n |> line(end = [8, -10])\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> yLine(endAbsolute = 15)\n |> angledLine(angle = 30, length = 15)\n |> line(end = [8, -10])\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" ] }, { @@ -24452,7 +24452,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(endAbsolute = [5, 10])\n |> line(endAbsolute = [-10, 10], tag = $lineToIntersect)\n |> line(endAbsolute = [0, 20])\n |> angledLineThatIntersects(angle = 80, intersectTag = lineToIntersect, offset = 10)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(endAbsolute = [5, 10])\n |> line(endAbsolute = [-10, 10], tag = $lineToIntersect)\n |> line(endAbsolute = [0, 20])\n |> angledLineThatIntersects(angle = 80, intersectTag = lineToIntersect, offset = 10)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" ] }, { @@ -32589,15 +32589,15 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Add color to an extruded solid.\nexampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(endAbsolute = [10, 0])\n |> line(endAbsolute = [0, 10])\n |> line(endAbsolute = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)\n // There are other options besides 'color', but they're optional.\n |> appearance(color = '#ff0000')", + "// Add color to an extruded solid.\nexampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(endAbsolute = [10, 0])\n |> line(endAbsolute = [0, 10])\n |> line(endAbsolute = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)\n // There are other options besides 'color', but they're optional.\n |> appearance(color = '#ff0000')", "// Add color to a revolved solid.\nsketch001 = startSketchOn(XY)\n |> circle(center = [15, 0], radius = 5)\n |> revolve(angle = 360, axis = Y)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", - "// Add color to different solids.\nfn cube(center) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - 10, center[1] - 10], %)\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\nexample0 = cube([0, 0])\nexample1 = cube([20, 0])\nexample2 = cube([40, 0])\n\nappearance(\n [example0, example1],\n color = '#ff0000',\n metalness = 50,\n roughness = 50,\n)\nappearance(\n example2,\n color = '#00ff00',\n metalness = 50,\n roughness = 50,\n)", - "// You can set the appearance before or after you shell it will yield the same result.\n// This example shows setting the appearance _after_ the shell.\nfirstSketch = startSketchOn(XY)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\nshell(firstSketch, faces = [END], thickness = 0.25)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", - "// You can set the appearance before or after you shell it will yield the same result.\n// This example shows setting the appearance _before_ the shell.\nfirstSketch = startSketchOn(XY)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)\n\nshell(firstSketch, faces = [END], thickness = 0.25)", - "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _before_ the pattern.\nexampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)", - "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _after_ the pattern.\nexampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", - "// Color the result of a 2D pattern that was extruded.\nexampleSketch = startSketchOn(XZ)\n |> startProfileAt([.5, 25], %)\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d(\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true,\n )\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", - "// Color the result of a sweep.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> appearance(color = \"#ff0000\", metalness = 50, roughness = 50)", + "// Add color to different solids.\nfn cube(center) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\nexample0 = cube([0, 0])\nexample1 = cube([20, 0])\nexample2 = cube([40, 0])\n\nappearance(\n [example0, example1],\n color = '#ff0000',\n metalness = 50,\n roughness = 50,\n)\nappearance(\n example2,\n color = '#00ff00',\n metalness = 50,\n roughness = 50,\n)", + "// You can set the appearance before or after you shell it will yield the same result.\n// This example shows setting the appearance _after_ the shell.\nfirstSketch = startSketchOn(XY)\n |> startProfile(at = [-12, 12])\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\nshell(firstSketch, faces = [END], thickness = 0.25)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", + "// You can set the appearance before or after you shell it will yield the same result.\n// This example shows setting the appearance _before_ the shell.\nfirstSketch = startSketchOn(XY)\n |> startProfile(at = [-12, 12])\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)\n\nshell(firstSketch, faces = [END], thickness = 0.25)", + "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _before_ the pattern.\nexampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)", + "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _after_ the pattern.\nexampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", + "// Color the result of a 2D pattern that was extruded.\nexampleSketch = startSketchOn(XZ)\n |> startProfile(at = [.5, 25])\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d(\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true,\n )\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", + "// Color the result of a sweep.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfile(at = [0.05, 0.05])\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> appearance(color = \"#ff0000\", metalness = 50, roughness = 50)", "// Change the appearance of an imported model.\n\n\nimport \"tests/inputs/cube.sldprt\" as cube\n\ncube\n |> appearance(color = \"#ff0000\", metalness = 50, roughness = 50)" ] }, @@ -45594,8 +45594,8 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> arc(angleStart = 0, angleEnd = 280, radius = 16)\n |> close()\nexample = extrude(exampleSketch, length = 10)", - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> arc(endAbsolute = [10, 0], interiorAbsolute = [5, 5])\n |> close()\nexample = extrude(exampleSketch, length = 10)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> arc(angleStart = 0, angleEnd = 280, radius = 16)\n |> close()\nexample = extrude(exampleSketch, length = 10)", + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> arc(endAbsolute = [10, 0], interiorAbsolute = [5, 5])\n |> close()\nexample = extrude(exampleSketch, length = 10)" ] }, { @@ -45637,7 +45637,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "sketch001 = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = toDegrees(asin(0.5)), length = 20)\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" + "sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = toDegrees(asin(0.5)), length = 20)\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" ] }, { @@ -45929,7 +45929,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "sketch001 = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = toDegrees(atan(1.25)), length = 20)\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" + "sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = toDegrees(atan(1.25)), length = 20)\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" ] }, { @@ -45986,7 +45986,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "sketch001 = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = toDegrees(atan2(y = 1.25, x = 2)), length = 20)\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" + "sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = toDegrees(atan2(y = 1.25, x = 2)), length = 20)\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" ] }, { @@ -55764,7 +55764,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 10])\n |> bezierCurve(control1 = [5, 0], control2 = [5, 10], end = [10, 10])\n |> line(endAbsolute = [10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [0, 10])\n |> bezierCurve(control1 = [5, 0], control2 = [5, 10], end = [10, 10])\n |> line(endAbsolute = [10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" ] }, { @@ -55806,7 +55806,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "sketch001 = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(endAbsolute = [12, 10])\n |> line(end = [ceil(7.02986), 0])\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" + "sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(endAbsolute = [12, 10])\n |> line(end = [ceil(7.02986), 0])\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" ] }, { @@ -64033,8 +64033,8 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Chamfer a mounting plate.\nwidth = 20\nlength = 10\nthickness = 1\nchamferLength = 2\n\nmountingPlateSketch = startSketchOn(XY)\n |> startProfileAt([-width / 2, -length / 2], %)\n |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)\n |> line(endAbsolute = [width / 2, length / 2], tag = $edge2)\n |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)\n |> close(tag = $edge4)\n\nmountingPlate = extrude(mountingPlateSketch, length = thickness)\n |> chamfer(\n length = chamferLength,\n tags = [\n getNextAdjacentEdge(edge1),\n getNextAdjacentEdge(edge2),\n getNextAdjacentEdge(edge3),\n getNextAdjacentEdge(edge4)\n ],\n )", - "// Sketch on the face of a chamfer.\nfn cube(pos, scale) {\n sg = startSketchOn(XY)\n |> startProfileAt(pos, %)\n |> line(end = [0, scale])\n |> line(end = [scale, 0])\n |> line(end = [0, -scale])\n\n return sg\n}\n\npart001 = cube([0, 0], 20)\n |> close(tag = $line1)\n |> extrude(length = 20)\n // We tag the chamfer to reference it later.\n |> chamfer(length = 10, tags = [getOppositeEdge(line1)], tag = $chamfer1)\n\nsketch001 = startSketchOn(part001, face = chamfer1)\n |> startProfileAt([10, 10], %)\n |> line(end = [2, 0])\n |> line(end = [0, 2])\n |> line(end = [-2, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n |> extrude(length = 10)" + "// Chamfer a mounting plate.\nwidth = 20\nlength = 10\nthickness = 1\nchamferLength = 2\n\nmountingPlateSketch = startSketchOn(XY)\n |> startProfile(at = [-width / 2, -length / 2])\n |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)\n |> line(endAbsolute = [width / 2, length / 2], tag = $edge2)\n |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)\n |> close(tag = $edge4)\n\nmountingPlate = extrude(mountingPlateSketch, length = thickness)\n |> chamfer(\n length = chamferLength,\n tags = [\n getNextAdjacentEdge(edge1),\n getNextAdjacentEdge(edge2),\n getNextAdjacentEdge(edge3),\n getNextAdjacentEdge(edge4)\n ],\n )", + "// Sketch on the face of a chamfer.\nfn cube(pos, scale) {\n sg = startSketchOn(XY)\n |> startProfile(at = pos)\n |> line(end = [0, scale])\n |> line(end = [scale, 0])\n |> line(end = [0, -scale])\n\n return sg\n}\n\npart001 = cube([0, 0], 20)\n |> close(tag = $line1)\n |> extrude(length = 20)\n // We tag the chamfer to reference it later.\n |> chamfer(length = 10, tags = [getOppositeEdge(line1)], tag = $chamfer1)\n\nsketch001 = startSketchOn(part001, face = chamfer1)\n |> startProfile(at = [10, 10])\n |> line(end = [2, 0])\n |> line(end = [0, 2])\n |> line(end = [-2, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n |> extrude(length = 10)" ] }, { @@ -77354,15 +77354,15 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Clone a basic sketch and move it and extrude it.\nexampleSketch = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nclonedSketch = clone(exampleSketch)\n |> scale(x = 1.0, y = 1.0, z = 2.5)\n |> translate(x = 15.0, y = 0, z = 0)\n |> extrude(length = 5)", - "// Clone a basic solid and move it.\n\n\nexampleSketch = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nmyPart = extrude(exampleSketch, length = 5)\nclonedPart = clone(myPart)\n |> translate(x = 25.0)", - "// Translate and rotate a cloned sketch to create a loft.\n\n\nsketch001 = startSketchOn(XY)\n |> startProfileAt([-10, 10], %)\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20)\n |> close()\n\nsketch002 = clone(sketch001)\n |> translate(x = 0, y = 0, z = 20)\n |> rotate(axis = [0, 0, 1.0], angle = 45)\n\nloft([sketch001, sketch002])", - "// Translate a cloned solid. Fillet only the clone.\n\n\nsketch001 = startSketchOn(XY)\n |> startProfileAt([-10, 10], %)\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20, tag = $filletTag)\n |> close()\n |> extrude(length = 5)\n\nsketch002 = clone(sketch001)\n |> translate(x = 0, y = 0, z = 20)\n |> fillet(radius = 2, tags = [getNextAdjacentEdge(filletTag)])", - "// You can reuse the tags from the original geometry with the cloned geometry.\n\n\nsketch001 = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10], tag = $sketchingFace)\n |> line(end = [-10, 0])\n |> close()\n\nsketch002 = clone(sketch001)\n |> translate(x = 10, y = 20, z = 0)\n |> extrude(length = 5)\n\nstartSketchOn(sketch002, face = sketchingFace)\n |> startProfileAt([1, 1], %)\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close(tag = $sketchingFace002)\n |> extrude(length = 10)", - "// You can also use the tags from the original geometry to fillet the cloned geometry.\n\n\nwidth = 20\nlength = 10\nthickness = 1\nfilletRadius = 2\n\nmountingPlateSketch = startSketchOn(XY)\n |> startProfileAt([-width / 2, -length / 2], %)\n |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)\n |> line(endAbsolute = [width / 2, length / 2], tag = $edge2)\n |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)\n |> close(tag = $edge4)\n\nmountingPlate = extrude(mountingPlateSketch, length = thickness)\n\nclonedMountingPlate = clone(mountingPlate)\n |> fillet(\n radius = filletRadius,\n tags = [\n getNextAdjacentEdge(edge1),\n getNextAdjacentEdge(edge2),\n getNextAdjacentEdge(edge3),\n getNextAdjacentEdge(edge4)\n ],\n )\n |> translate(x = 0, y = 50, z = 0)", + "// Clone a basic sketch and move it and extrude it.\nexampleSketch = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nclonedSketch = clone(exampleSketch)\n |> scale(x = 1.0, y = 1.0, z = 2.5)\n |> translate(x = 15.0, y = 0, z = 0)\n |> extrude(length = 5)", + "// Clone a basic solid and move it.\n\n\nexampleSketch = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nmyPart = extrude(exampleSketch, length = 5)\nclonedPart = clone(myPart)\n |> translate(x = 25.0)", + "// Translate and rotate a cloned sketch to create a loft.\n\n\nsketch001 = startSketchOn(XY)\n |> startProfile(at = [-10, 10])\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20)\n |> close()\n\nsketch002 = clone(sketch001)\n |> translate(x = 0, y = 0, z = 20)\n |> rotate(axis = [0, 0, 1.0], angle = 45)\n\nloft([sketch001, sketch002])", + "// Translate a cloned solid. Fillet only the clone.\n\n\nsketch001 = startSketchOn(XY)\n |> startProfile(at = [-10, 10])\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20, tag = $filletTag)\n |> close()\n |> extrude(length = 5)\n\nsketch002 = clone(sketch001)\n |> translate(x = 0, y = 0, z = 20)\n |> fillet(radius = 2, tags = [getNextAdjacentEdge(filletTag)])", + "// You can reuse the tags from the original geometry with the cloned geometry.\n\n\nsketch001 = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> line(end = [0, 10], tag = $sketchingFace)\n |> line(end = [-10, 0])\n |> close()\n\nsketch002 = clone(sketch001)\n |> translate(x = 10, y = 20, z = 0)\n |> extrude(length = 5)\n\nstartSketchOn(sketch002, face = sketchingFace)\n |> startProfile(at = [1, 1])\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close(tag = $sketchingFace002)\n |> extrude(length = 10)", + "// You can also use the tags from the original geometry to fillet the cloned geometry.\n\n\nwidth = 20\nlength = 10\nthickness = 1\nfilletRadius = 2\n\nmountingPlateSketch = startSketchOn(XY)\n |> startProfile(at = [-width / 2, -length / 2])\n |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)\n |> line(endAbsolute = [width / 2, length / 2], tag = $edge2)\n |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)\n |> close(tag = $edge4)\n\nmountingPlate = extrude(mountingPlateSketch, length = thickness)\n\nclonedMountingPlate = clone(mountingPlate)\n |> fillet(\n radius = filletRadius,\n tags = [\n getNextAdjacentEdge(edge1),\n getNextAdjacentEdge(edge2),\n getNextAdjacentEdge(edge3),\n getNextAdjacentEdge(edge4)\n ],\n )\n |> translate(x = 0, y = 50, z = 0)", "// Create a spring by sweeping around a helix path from a cloned sketch.\n\n// Create a helix around the Z axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 4,\n length = 10,\n radius = 5,\n axis = Z,\n)\n\nspringSketch = startSketchOn(YZ)\n |> circle(center = [0, 0], radius = 1)\n\n// Create a spring by sweeping around the helix path.\nsweepedSpring = clone(springSketch)\n |> translate(x = 100)\n |> sweep(path = helixPath)", "// A donut shape from a cloned sketch.\nsketch001 = startSketchOn(XY)\n |> circle(center = [15, 0], radius = 5)\n\nsketch002 = clone(sketch001)\n |> translate(z = 30)\n |> revolve(angle = 360, axis = Y)", - "// Sketch on the end of a revolved face by tagging the end face.\n// This shows the cloned geometry will have the same tags as the original geometry.\n\n\nexampleSketch = startSketchOn(XY)\n |> startProfileAt([4, 12], %)\n |> line(end = [2, 0])\n |> line(end = [0, -6])\n |> line(end = [4, -6])\n |> line(end = [0, -6])\n |> line(end = [-3.75, -4.5])\n |> line(end = [0, -5.5])\n |> line(end = [-2, 0])\n |> close()\n\nexample001 = revolve(\n exampleSketch,\n axis = Y,\n angle = 180,\n tagEnd = $end01,\n)\n\n// example002 = clone(example001)\n// |> translate(x = 0, y = 20, z = 0)\n\n\n// Sketch on the cloned face.\n// exampleSketch002 = startSketchOn(example002, face = end01)\n// |> startProfileAt([4.5, -5], %)\n// |> line(end = [0, 5])\n// |> line(end = [5, 0])\n// |> line(end = [0, -5])\n// |> close()\n\n\n// example003 = extrude(exampleSketch002, length = 5)", + "// Sketch on the end of a revolved face by tagging the end face.\n// This shows the cloned geometry will have the same tags as the original geometry.\n\n\nexampleSketch = startSketchOn(XY)\n |> startProfile(at = [4, 12])\n |> line(end = [2, 0])\n |> line(end = [0, -6])\n |> line(end = [4, -6])\n |> line(end = [0, -6])\n |> line(end = [-3.75, -4.5])\n |> line(end = [0, -5.5])\n |> line(end = [-2, 0])\n |> close()\n\nexample001 = revolve(\n exampleSketch,\n axis = Y,\n angle = 180,\n tagEnd = $end01,\n)\n\n// example002 = clone(example001)\n// |> translate(x = 0, y = 20, z = 0)\n\n\n// Sketch on the cloned face.\n// exampleSketch002 = startSketchOn(example002, face = end01)\n// |> startProfile(at = [4.5, -5])\n// |> line(end = [0, 5])\n// |> line(end = [5, 0])\n// |> line(end = [0, -5])\n// |> close()\n\n\n// example003 = extrude(exampleSketch002, length = 5)", "// Clone an imported model.\n\n\nimport \"tests/inputs/cube.sldprt\" as cube\n\nmyCube = cube\n\nclonedCube = clone(myCube)\n |> translate(x = 1020)\n |> appearance(color = \"#ff0000\", metalness = 50, roughness = 50)" ] }, @@ -82314,8 +82314,8 @@ "unpublished": false, "deprecated": false, "examples": [ - "startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 10])\n |> line(end = [10, 0])\n |> close()\n |> extrude(length = 10)", - "exampleSketch = startSketchOn(-XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" + "startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 10])\n |> line(end = [10, 0])\n |> close()\n |> extrude(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)" ] }, { @@ -82343,7 +82343,7 @@ "unpublished": false, "deprecated": true, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 30, length = 2 * e() ^ 2)\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" + "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)" ] }, { @@ -93603,10 +93603,10 @@ "unpublished": false, "deprecated": false, "examples": [ - "example = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> arc(angleStart = 120, angleEnd = 0, radius = 5)\n |> line(end = [5, 0])\n |> line(end = [0, 10])\n |> bezierCurve(control1 = [-10, 0], control2 = [2, 10], end = [-5, 10])\n |> line(end = [-5, -2])\n |> close()\n |> extrude(length = 10)", - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([-10, 0], %)\n |> arc(angleStart = 120, angleEnd = -60, radius = 5)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve(control1 = [-3, 0], control2 = [2, 10], end = [-5, 10])\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)", - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([-10, 0], %)\n |> arc(angleStart = 120, angleEnd = -60, radius = 5)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve(control1 = [-3, 0], control2 = [2, 10], end = [-5, 10])\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 20, symmetric = true)", - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([-10, 0], %)\n |> arc(angleStart = 120, angleEnd = -60, radius = 5)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve(control1 = [-3, 0], control2 = [2, 10], end = [-5, 10])\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 10, bidirectionalLength = 50)" + "example = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> arc(angleStart = 120, angleEnd = 0, radius = 5)\n |> line(end = [5, 0])\n |> line(end = [0, 10])\n |> bezierCurve(control1 = [-10, 0], control2 = [2, 10], end = [-5, 10])\n |> line(end = [-5, -2])\n |> close()\n |> extrude(length = 10)", + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [-10, 0])\n |> arc(angleStart = 120, angleEnd = -60, radius = 5)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve(control1 = [-3, 0], control2 = [2, 10], end = [-5, 10])\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)", + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [-10, 0])\n |> arc(angleStart = 120, angleEnd = -60, radius = 5)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve(control1 = [-3, 0], control2 = [2, 10], end = [-5, 10])\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 20, symmetric = true)", + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [-10, 0])\n |> arc(angleStart = 120, angleEnd = -60, radius = 5)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve(control1 = [-3, 0], control2 = [2, 10], end = [-5, 10])\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 10, bidirectionalLength = 50)" ] }, { @@ -103459,8 +103459,8 @@ "unpublished": false, "deprecated": false, "examples": [ - "width = 20\nlength = 10\nthickness = 1\nfilletRadius = 2\n\nmountingPlateSketch = startSketchOn(XY)\n |> startProfileAt([-width / 2, -length / 2], %)\n |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)\n |> line(endAbsolute = [width / 2, length / 2], tag = $edge2)\n |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)\n |> close(tag = $edge4)\n\nmountingPlate = extrude(mountingPlateSketch, length = thickness)\n |> fillet(\n radius = filletRadius,\n tags = [\n getNextAdjacentEdge(edge1),\n getNextAdjacentEdge(edge2),\n getNextAdjacentEdge(edge3),\n getNextAdjacentEdge(edge4)\n ],\n )", - "width = 20\nlength = 10\nthickness = 1\nfilletRadius = 1\n\nmountingPlateSketch = startSketchOn(XY)\n |> startProfileAt([-width / 2, -length / 2], %)\n |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)\n |> line(endAbsolute = [width / 2, length / 2], tag = $edge2)\n |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)\n |> close(tag = $edge4)\n\nmountingPlate = extrude(mountingPlateSketch, length = thickness)\n |> fillet(\n radius = filletRadius,\n tolerance = 0.000001,\n tags = [\n getNextAdjacentEdge(edge1),\n getNextAdjacentEdge(edge2),\n getNextAdjacentEdge(edge3),\n getNextAdjacentEdge(edge4)\n ],\n )" + "width = 20\nlength = 10\nthickness = 1\nfilletRadius = 2\n\nmountingPlateSketch = startSketchOn(XY)\n |> startProfile(at = [-width / 2, -length / 2])\n |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)\n |> line(endAbsolute = [width / 2, length / 2], tag = $edge2)\n |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)\n |> close(tag = $edge4)\n\nmountingPlate = extrude(mountingPlateSketch, length = thickness)\n |> fillet(\n radius = filletRadius,\n tags = [\n getNextAdjacentEdge(edge1),\n getNextAdjacentEdge(edge2),\n getNextAdjacentEdge(edge3),\n getNextAdjacentEdge(edge4)\n ],\n )", + "width = 20\nlength = 10\nthickness = 1\nfilletRadius = 1\n\nmountingPlateSketch = startSketchOn(XY)\n |> startProfile(at = [-width / 2, -length / 2])\n |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)\n |> line(endAbsolute = [width / 2, length / 2], tag = $edge2)\n |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)\n |> close(tag = $edge4)\n\nmountingPlate = extrude(mountingPlateSketch, length = thickness)\n |> fillet(\n radius = filletRadius,\n tolerance = 0.000001,\n tags = [\n getNextAdjacentEdge(edge1),\n getNextAdjacentEdge(edge2),\n getNextAdjacentEdge(edge3),\n getNextAdjacentEdge(edge4)\n ],\n )" ] }, { @@ -103502,7 +103502,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "sketch001 = startSketchOn(XZ)\n |> startProfileAt([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)" ] }, { @@ -103810,7 +103810,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Get an edge shared between two faces, created after a chamfer.\n\n\nscale = 20\npart001 = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [0, scale])\n |> line(end = [scale, 0])\n |> line(end = [0, -scale])\n |> close(tag = $line0)\n |> extrude(length = 20, tagEnd = $end0)\n // We tag the chamfer to reference it later.\n |> chamfer(length = 10, tags = [getOppositeEdge(line0)], tag = $chamfer0)\n\n// Get the shared edge between the chamfer and the extrusion.\ncommonEdge = getCommonEdge(faces = [chamfer0, end0])\n\n// Chamfer the shared edge.\n// TODO: uncomment this when ssi for fillets lands\n// chamfer(part001, length = 5, tags = [commonEdge])" + "// Get an edge shared between two faces, created after a chamfer.\n\n\nscale = 20\npart001 = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [0, scale])\n |> line(end = [scale, 0])\n |> line(end = [0, -scale])\n |> close(tag = $line0)\n |> extrude(length = 20, tagEnd = $end0)\n // We tag the chamfer to reference it later.\n |> chamfer(length = 10, tags = [getOppositeEdge(line0)], tag = $chamfer0)\n\n// Get the shared edge between the chamfer and the extrusion.\ncommonEdge = getCommonEdge(faces = [chamfer0, end0])\n\n// Chamfer the shared edge.\n// TODO: uncomment this when ssi for fillets lands\n// chamfer(part001, length = 5, tags = [commonEdge])" ] }, { @@ -103858,7 +103858,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([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 = [getNextAdjacentEdge(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 = [getNextAdjacentEdge(referenceEdge)])" ] }, { @@ -103906,7 +103906,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([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 = [getOppositeEdge(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 = [getOppositeEdge(referenceEdge)])" ] }, { @@ -103954,7 +103954,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([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)])" ] }, { @@ -108902,8 +108902,8 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 5])\n |> line(end = [5, 0])\n |> line(end = [0, -5])\n |> close()\n |> hole(circle(center = [1, 1], radius = .25), %)\n |> hole(circle(center = [1, 4], radius = .25), %)\n\nexample = extrude(exampleSketch, length = 1)", - "fn squareHoleSketch() {\n squareSketch = startSketchOn(-XZ)\n |> startProfileAt([-1, -1], %)\n |> line(end = [2, 0])\n |> line(end = [0, 2])\n |> line(end = [-2, 0])\n |> close()\n return squareSketch\n}\n\nexampleSketch = startSketchOn(-XZ)\n |> circle(center = [0, 0], radius = 3)\n |> hole(squareHoleSketch(), %)\nexample = extrude(exampleSketch, length = 1)" + "exampleSketch = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [0, 5])\n |> line(end = [5, 0])\n |> line(end = [0, -5])\n |> close()\n |> hole(circle(center = [1, 1], radius = .25), %)\n |> hole(circle(center = [1, 4], radius = .25), %)\n\nexample = extrude(exampleSketch, length = 1)", + "fn squareHoleSketch() {\n squareSketch = startSketchOn(-XZ)\n |> startProfile(at = [-1, -1])\n |> line(end = [2, 0])\n |> line(end = [0, 2])\n |> line(end = [-2, 0])\n |> close()\n return squareSketch\n}\n\nexampleSketch = startSketchOn(-XZ)\n |> circle(center = [0, 0], radius = 3)\n |> hole(squareHoleSketch(), %)\nexample = extrude(exampleSketch, length = 1)" ] }, { @@ -113879,9 +113879,9 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Hollow a basic sketch.\nfirstSketch = startSketchOn(XY)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n |> hollow(thickness = 0.25)", - "// Hollow a basic sketch.\nfirstSketch = startSketchOn(-XZ)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n |> hollow(thickness = 0.5)", - "// Hollow a sketch on face object.\nsize = 100\ncase = startSketchOn(-XZ)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, face = END)\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nhollow(case, thickness = 0.5)" + "// Hollow a basic sketch.\nfirstSketch = startSketchOn(XY)\n |> startProfile(at = [-12, 12])\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n |> hollow(thickness = 0.25)", + "// Hollow a basic sketch.\nfirstSketch = startSketchOn(-XZ)\n |> startProfile(at = [-12, 12])\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n |> hollow(thickness = 0.5)", + "// Hollow a sketch on face object.\nsize = 100\ncase = startSketchOn(-XZ)\n |> startProfile(at = [-size, -size])\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, face = END)\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nhollow(case, thickness = 0.5)" ] }, { @@ -118758,8 +118758,8 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Intersect two cubes using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\nintersectedPart = intersect([part001, part002])", - "// Intersect two cubes using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n// This is the equivalent of: intersect([part001, part002])\nintersectedPart = part001 & part002" + "// Intersect two cubes using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\nintersectedPart = intersect([part001, part002])", + "// Intersect two cubes using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n// This is the equivalent of: intersect([part001, part002])\nintersectedPart = part001 & part002" ] }, { @@ -130129,7 +130129,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "a = 10\nb = 14\nstartSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> involuteCircular(startRadius = a, endRadius = b, angle = 60)\n |> involuteCircular(\n startRadius = a,\n endRadius = b,\n angle = 60,\n reverse = true,\n )" + "a = 10\nb = 14\nstartSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> involuteCircular(startRadius = a, endRadius = b, angle = 60)\n |> involuteCircular(\n startRadius = a,\n endRadius = b,\n angle = 60,\n reverse = true,\n )" ] }, { @@ -131821,7 +131821,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [5, 0])\n |> line(end = [20, 5])\n |> line(end = [lastSegX(%), 0])\n |> line(end = [-15, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [5, 0])\n |> line(end = [20, 5])\n |> line(end = [lastSegX(%), 0])\n |> line(end = [-15, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -133513,7 +133513,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [5, 0])\n |> line(end = [20, 5])\n |> line(end = [0, lastSegY(%)])\n |> line(end = [-15, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [5, 0])\n |> line(end = [20, 5])\n |> line(end = [0, lastSegY(%)])\n |> line(end = [-15, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -141854,7 +141854,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "triangle = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n // The END argument means it ends at exactly [10, 0].\n // This is an absolute measurement, it is NOT relative to\n // the start of the sketch.\n |> line(endAbsolute = [10, 0])\n |> line(endAbsolute = [0, 10])\n |> line(endAbsolute = [-10, 0], tag = $thirdLineOfTriangle)\n |> close()\n |> extrude(length = 5)\n\nbox = startSketchOn(XZ)\n |> startProfileAt([10, 10], %)\n // The 'to' argument means move the pen this much.\n // So, [10, 0] is a relative distance away from the current point.\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0], tag = $thirdLineOfBox)\n |> close()\n |> extrude(length = 5)" + "triangle = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n // The END argument means it ends at exactly [10, 0].\n // This is an absolute measurement, it is NOT relative to\n // the start of the sketch.\n |> line(endAbsolute = [10, 0])\n |> line(endAbsolute = [0, 10])\n |> line(endAbsolute = [-10, 0], tag = $thirdLineOfTriangle)\n |> close()\n |> extrude(length = 5)\n\nbox = startSketchOn(XZ)\n |> startProfile(at = [10, 10])\n // The 'to' argument means move the pen this much.\n // So, [10, 0] is a relative distance away from the current point.\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0], tag = $thirdLineOfBox)\n |> close()\n |> extrude(length = 5)" ] }, { @@ -141896,7 +141896,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [ln(100), 15])\n |> line(end = [5, -6])\n |> line(end = [-10, -10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [ln(100), 15])\n |> line(end = [5, -6])\n |> line(end = [-10, -10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -154835,9 +154835,9 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Loft a square and a triangle.\nsquareSketch = startSketchOn(XY)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ntriangleSketch = startSketchOn(offsetPlane(XY, offset = 75))\n |> startProfileAt([0, 125], %)\n |> line(end = [-15, -30])\n |> line(end = [30, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\nloft([squareSketch, triangleSketch])", - "// Loft a square, a circle, and another circle.\nsquareSketch = startSketchOn(XY)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane(XY, offset = 75))\n |> circle(center = [0, 100], radius = 50)\n\ncircleSketch1 = startSketchOn(offsetPlane(XY, offset = 150))\n |> circle(center = [0, 100], radius = 20)\n\nloft([\n squareSketch,\n circleSketch0,\n circleSketch1\n])", - "// Loft a square, a circle, and another circle with options.\nsquareSketch = startSketchOn(XY)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane(XY, offset = 75))\n |> circle(center = [0, 100], radius = 50)\n\ncircleSketch1 = startSketchOn(offsetPlane(XY, offset = 150))\n |> circle(center = [0, 100], radius = 20)\n\nloft(\n [\n squareSketch,\n circleSketch0,\n circleSketch1\n ],\n baseCurveIndex = 0,\n bezApproximateRational = false,\n tolerance = 0.000001,\n vDegree = 2,\n)" + "// Loft a square and a triangle.\nsquareSketch = startSketchOn(XY)\n |> startProfile(at = [-100, 200])\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ntriangleSketch = startSketchOn(offsetPlane(XY, offset = 75))\n |> startProfile(at = [0, 125])\n |> line(end = [-15, -30])\n |> line(end = [30, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\nloft([squareSketch, triangleSketch])", + "// Loft a square, a circle, and another circle.\nsquareSketch = startSketchOn(XY)\n |> startProfile(at = [-100, 200])\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane(XY, offset = 75))\n |> circle(center = [0, 100], radius = 50)\n\ncircleSketch1 = startSketchOn(offsetPlane(XY, offset = 150))\n |> circle(center = [0, 100], radius = 20)\n\nloft([\n squareSketch,\n circleSketch0,\n circleSketch1\n])", + "// Loft a square, a circle, and another circle with options.\nsquareSketch = startSketchOn(XY)\n |> startProfile(at = [-100, 200])\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane(XY, offset = 75))\n |> circle(center = [0, 100], radius = 50)\n\ncircleSketch1 = startSketchOn(offsetPlane(XY, offset = 150))\n |> circle(center = [0, 100], radius = 20)\n\nloft(\n [\n squareSketch,\n circleSketch0,\n circleSketch1\n ],\n baseCurveIndex = 0,\n bezApproximateRational = false,\n tolerance = 0.000001,\n vDegree = 2,\n)" ] }, { @@ -154892,7 +154892,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [log(100, 5), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [log(100, 5), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -154934,7 +154934,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [log10(100), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [log10(100), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -154976,7 +154976,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [log2(100), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [log2(100), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -162479,7 +162479,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 70, length = max(15, 31, 4, 13, 22))\n |> line(end = [20, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 70, length = max(15, 31, 4, 13, 22))\n |> line(end = [20, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -162524,7 +162524,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 70, length = min(15, 31, 4, 13, 22))\n |> line(end = [20, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 70, length = min(15, 31, 4, 13, 22))\n |> line(end = [20, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -173779,7 +173779,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([.5, 25], %)\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d(\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true,\n )\n\nexample = extrude(exampleSketch, length = 1)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [.5, 25])\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d(\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true,\n )\n\nexample = extrude(exampleSketch, length = 1)" ] }, { @@ -205946,9 +205946,9 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)", - "// Pattern a whole sketch on face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close(%)\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, face = END)\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n // We pass in the \"case\" here since we want to pattern the whole sketch.\n// And the case was the base of the sketch.\npatternLinear3d(\n case,\n axis = [1, 0, 0],\n distance = 250,\n instances = 2,\n)", - "// Pattern an object on a face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close(%)\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We pass in `thing1` here with `useOriginal` since we want to pattern just this object on the face.\npatternLinear3d(\n thing1,\n axis = [1, 0, 0],\n distance = size,\n instances = 2,\n useOriginal = true,\n)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)", + "// Pattern a whole sketch on face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfile(at = [-size, -size])\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close(%)\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, face = END)\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n // We pass in the \"case\" here since we want to pattern the whole sketch.\n// And the case was the base of the sketch.\npatternLinear3d(\n case,\n axis = [1, 0, 0],\n distance = 250,\n instances = 2,\n)", + "// Pattern an object on a face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfile(at = [-size, -size])\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close(%)\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We pass in `thing1` here with `useOriginal` since we want to pattern just this object on the face.\npatternLinear3d(\n thing1,\n axis = [1, 0, 0],\n distance = size,\n instances = 2,\n useOriginal = true,\n)" ] }, { @@ -213991,10 +213991,10 @@ "examples": [ "// Each instance will be shifted along the X axis.\nfn transform(id) {\n return { translate = [4 * id, 0, 0] }\n}\n\n// Sketch 4 cylinders.\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 |> startProfileAt(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 = [pow(1.1, i), pow(1.1, i), pow(0.9, i)],\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 |> startProfileAt(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 // Move down each time.\n translate = [0, 0, -i * width],\n // Make the cube longer, wider and flatter each time.\n scale = [pow(1.1, i), pow(1.1, i), pow(0.9, i)],\n // Turn by 15 degrees each time.\n rotation = { angle = 15 * i, origin = \"local\" }\n }\n}\n\nmyCubes = cube(width, [100, 0])\n |> patternTransform(instances = 25, transform = transform)", + "fn cube(length, center) {\n l = length / 2\n x = center[0]\n y = center[1]\n p0 = [-l + x, -l + y]\n p1 = [-l + x, l + y]\n p2 = [l + x, l + y]\n p3 = [l + x, -l + y]\n\n return startSketchOn(XY)\n |> startProfile(at = p0)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> line(endAbsolute = p0)\n |> close()\n |> extrude(length = length)\n}\n\nwidth = 20\nfn transform(i) {\n return {\n translate = [0, 0, -i * width],\n rotation = {\n angle = 90 * i,\n // Rotate around the overall scene's origin.\n origin = \"global\"\n }\n }\n}\nmyCubes = cube(width, [100, 100])\n |> patternTransform(instances = 4, transform = transform)", "// Parameters\nr = 50 // base radius\nh = 10 // layer height\nt = 0.005 // taper factor [0-1)\n// Defines how to modify each layer of the vase.\n// Each replica is shifted up the Z axis, and has a smoothly-varying radius\nfn transform(replicaId) {\n scale = r * abs(1 - (t * replicaId)) * (5 + 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 |> startProfileAt([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)" ] }, { @@ -237192,7 +237192,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = pow(5, 2))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 50, length = pow(5, 2))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -238889,7 +238889,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "sketch001 = startSketchOn(XY)\n |> startProfileAt([5, 2], %)\n |> angledLine(angle = 120, length = 50, tag = $seg01)\n |> angledLine(angle = segAng(seg01) + 120, length = 50)\n |> line(end = profileStart(%))\n |> close()\n |> extrude(length = 20)" + "sketch001 = startSketchOn(XY)\n |> startProfile(at = [5, 2])\n |> angledLine(angle = 120, length = 50, tag = $seg01)\n |> angledLine(angle = segAng(seg01) + 120, length = 50)\n |> line(end = profileStart(%))\n |> close()\n |> extrude(length = 20)" ] }, { @@ -240581,7 +240581,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "sketch001 = startSketchOn(XY)\n |> startProfileAt([5, 2], %)\n |> angledLine(angle = -26.6, length = 50)\n |> angledLine(angle = 90, length = 50)\n |> angledLine(angle = 30, endAbsoluteX = profileStartX(%))" + "sketch001 = startSketchOn(XY)\n |> startProfile(at = [5, 2])\n |> angledLine(angle = -26.6, length = 50)\n |> angledLine(angle = 90, length = 50)\n |> angledLine(angle = 30, endAbsoluteX = profileStartX(%))" ] }, { @@ -242273,7 +242273,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "sketch001 = startSketchOn(XY)\n |> startProfileAt([5, 2], %)\n |> angledLine(angle = -60, length = 14)\n |> angledLine(angle = 30, endAbsoluteY = profileStartY(%))" + "sketch001 = startSketchOn(XY)\n |> startProfile(at = [5, 2])\n |> angledLine(angle = -60, length = 14)\n |> angledLine(angle = 30, endAbsoluteY = profileStartY(%))" ] }, { @@ -261194,7 +261194,7 @@ "examples": [ "// This function adds two numbers.\nfn add(a, b) {\n return a + b\n}\n\n// This function adds an array of numbers.\n// It uses the `reduce` function, to call the `add` function on every\n// element of the `arr` parameter. The starting value is 0.\nfn sum(arr) {\n return reduce(arr, 0, add)\n}\n\n/* The above is basically like this pseudo-code:\nfn sum(arr):\n sumSoFar = 0\n for i in arr:\n sumSoFar = add(sumSoFar, i)\n return sumSoFar */\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum([1, 2, 3]),\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)", "// This example works just like the previous example above, but it uses\n// an anonymous `add` function as its parameter, instead of declaring a\n// named function outside.\narr = [1, 2, 3]\nsum = reduce(arr, 0, fn(i, result_so_far) {\n return i + result_so_far\n})\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum,\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)", - "// Declare a function that sketches a decagon.\nfn decagon(radius) {\n // Each side of the decagon is turned this many radians from the previous angle.\n stepAngle = 1 / 10 * TAU\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn(XY)\n |> startProfileAt([cos(0) * radius, sin(0) * radius], %)\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce([1..10], startOfDecagonSketch, fn(i, partialDecagon) {\n // Draw one edge of the decagon.\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n return line(partialDecagon, end = [x, y])\n })\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = (1/10) * TAU\n plane = startSketchOn('XY')\n startOfDecagonSketch = startProfileAt([(cos(0)*radius), (sin(0) * radius)], plane)\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()" + "// Declare a function that sketches a decagon.\nfn decagon(radius) {\n // Each side of the decagon is turned this many radians from the previous angle.\n stepAngle = 1 / 10 * TAU\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn(XY)\n |> startProfile(at = [cos(0) * radius, sin(0) * radius])\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce([1..10], startOfDecagonSketch, fn(i, partialDecagon) {\n // Draw one edge of the decagon.\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n return line(partialDecagon, end = [x, y])\n })\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = (1/10) * TAU\n plane = startSketchOn('XY')\n startOfDecagonSketch = startProfile(plane, at = [(cos(0)*radius), (sin(0) * radius)])\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()" ] }, { @@ -274251,12 +274251,12 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Rotate a pipe with roll, pitch, and yaw.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> rotate(roll = 10, pitch = 10, yaw = 90)", - "// Rotate a pipe with just roll.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> rotate(roll = 10)", - "// Rotate a pipe about an axis with an angle.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> rotate(axis = [0, 0, 1.0], angle = 90)", + "// Rotate a pipe with roll, pitch, and yaw.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfile(at = [0.05, 0.05])\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> rotate(roll = 10, pitch = 10, yaw = 90)", + "// Rotate a pipe with just roll.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfile(at = [0.05, 0.05])\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> rotate(roll = 10)", + "// Rotate a pipe about an axis with an angle.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfile(at = [0.05, 0.05])\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> rotate(axis = [0, 0, 1.0], angle = 90)", "// Rotate an imported model.\n\n\nimport \"tests/inputs/cube.sldprt\" as cube\n\ncube\n |> rotate(axis = [0, 0, 1.0], angle = 9)", - "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc(radius = 80, angle = -90)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Rotate the sweeps.\nrotate(parts, axis = [0, 0, 1.0], angle = 90)", - "// Translate and rotate a sketch to create a loft.\nsketch001 = startSketchOn(XY)\n\nfn square() {\n return startProfileAt([-10, 10], sketch001)\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n}\n\nprofile001 = square()\n\nprofile002 = square()\n |> translate(x = 0, y = 0, z = 20)\n |> rotate(axis = [0, 0, 1.0], angle = 45)\n\nloft([profile001, profile002])" + "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfile(sketch001, at = [-200, 23.86])\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfile(sketch002, at = [0, 0])\n |> yLine(length = 231.81)\n |> tangentialArc(radius = 80, angle = -90)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Rotate the sweeps.\nrotate(parts, axis = [0, 0, 1.0], angle = 90)", + "// Translate and rotate a sketch to create a loft.\nsketch001 = startSketchOn(XY)\n\nfn square() {\n return startProfile(sketch001, at = [-10, 10])\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n}\n\nprofile001 = square()\n\nprofile002 = square()\n |> translate(x = 0, y = 0, z = 20)\n |> rotate(axis = [0, 0, 1.0], angle = 45)\n\nloft([profile001, profile002])" ] }, { @@ -274298,7 +274298,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "sketch001 = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(endAbsolute = [12, 10])\n |> line(end = [round(7.02986), 0])\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" + "sketch001 = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(endAbsolute = [12, 10])\n |> line(end = [round(7.02986), 0])\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" ] }, { @@ -284083,9 +284083,9 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Scale a pipe.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> scale(z = 2.5)", + "// Scale a pipe.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfile(at = [0.05, 0.05])\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> scale(z = 2.5)", "// Scale an imported model.\n\n\nimport \"tests/inputs/cube.sldprt\" as cube\n\ncube\n |> scale(y = 2.5)", - "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc(radius = 80, angle = -90)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Scale the sweep.\nscale(parts, z = 0.5)" + "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfile(sketch001, at = [-200, 23.86])\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfile(sketch002, at = [0, 0])\n |> yLine(length = 231.81)\n |> tangentialArc(radius = 80, angle = -90)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Scale the sweep.\nscale(parts, z = 0.5)" ] }, { @@ -284133,7 +284133,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [5, 10], tag = $seg01)\n |> line(end = [-10, 0])\n |> angledLine(angle = segAng(seg01), length = 10)\n |> line(end = [-10, 0])\n |> angledLine(angle = segAng(seg01), length = -15)\n |> close()\n\nexample = extrude(exampleSketch, length = 4)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> line(end = [5, 10], tag = $seg01)\n |> line(end = [-10, 0])\n |> angledLine(angle = segAng(seg01), length = 10)\n |> line(end = [-10, 0])\n |> angledLine(angle = segAng(seg01), length = -15)\n |> close()\n\nexample = extrude(exampleSketch, length = 4)" ] }, { @@ -284191,7 +284191,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "w = 15\ncube = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [w, 0], tag = $line1)\n |> line(end = [0, w], tag = $line2)\n |> line(end = [-w, 0], tag = $line3)\n |> line(end = [0, -w], tag = $line4)\n |> close()\n |> extrude(length = 5)\n\nfn cylinder(radius, tag) {\n return startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> circle(radius = radius, center = segEnd(tag))\n |> extrude(length = radius)\n}\n\ncylinder(1, line1)\ncylinder(2, line2)\ncylinder(3, line3)\ncylinder(4, line4)" + "w = 15\ncube = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [w, 0], tag = $line1)\n |> line(end = [0, w], tag = $line2)\n |> line(end = [-w, 0], tag = $line3)\n |> line(end = [0, -w], tag = $line4)\n |> close()\n |> extrude(length = 5)\n\nfn cylinder(radius, tag) {\n return startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> circle(radius = radius, center = segEnd(tag))\n |> extrude(length = radius)\n}\n\ncylinder(1, line1)\ncylinder(2, line2)\ncylinder(3, line3)\ncylinder(4, line4)" ] }, { @@ -284239,7 +284239,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0], tag = $thing)\n |> line(end = [0, 5])\n |> line(end = [segEndX(thing), 0])\n |> line(end = [-20, 10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [20, 0], tag = $thing)\n |> line(end = [0, 5])\n |> line(end = [segEndX(thing), 0])\n |> line(end = [-20, 10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -284287,7 +284287,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0])\n |> line(end = [0, 3], tag = $thing)\n |> line(end = [-10, 0])\n |> line(end = [0, segEndY(thing)])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [20, 0])\n |> line(end = [0, 3], tag = $thing)\n |> line(end = [-10, 0])\n |> line(end = [0, segEndY(thing)])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -284335,7 +284335,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 60, length = 10, tag = $thing)\n |> tangentialArc(angle = -120, radius = 5)\n |> angledLine(angle = -60, length = segLen(thing))\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 60, length = 10, tag = $thing)\n |> tangentialArc(angle = -120, radius = 5)\n |> angledLine(angle = -60, length = segLen(thing))\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -284393,7 +284393,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "w = 15\ncube = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [w, 0], tag = $line1)\n |> line(end = [0, w], tag = $line2)\n |> line(end = [-w, 0], tag = $line3)\n |> line(end = [0, -w], tag = $line4)\n |> close()\n |> extrude(length = 5)\n\nfn cylinder(radius, tag) {\n return startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> circle(radius = radius, center = segStart(tag))\n |> extrude(length = radius)\n}\n\ncylinder(1, line1)\ncylinder(2, line2)\ncylinder(3, line3)\ncylinder(4, line4)" + "w = 15\ncube = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [w, 0], tag = $line1)\n |> line(end = [0, w], tag = $line2)\n |> line(end = [-w, 0], tag = $line3)\n |> line(end = [0, -w], tag = $line4)\n |> close()\n |> extrude(length = 5)\n\nfn cylinder(radius, tag) {\n return startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> circle(radius = radius, center = segStart(tag))\n |> extrude(length = radius)\n}\n\ncylinder(1, line1)\ncylinder(2, line2)\ncylinder(3, line3)\ncylinder(4, line4)" ] }, { @@ -284441,7 +284441,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0], tag = $thing)\n |> line(end = [0, 5])\n |> line(end = [20 - segStartX(thing), 0])\n |> line(end = [-20, 10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [20, 0], tag = $thing)\n |> line(end = [0, 5])\n |> line(end = [20 - segStartX(thing), 0])\n |> line(end = [-20, 10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -284489,7 +284489,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0])\n |> line(end = [0, 3], tag = $thing)\n |> line(end = [-10, 0])\n |> line(end = [0, 20 - segStartY(thing)])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [20, 0])\n |> line(end = [0, 3], tag = $thing)\n |> line(end = [-10, 0])\n |> line(end = [0, 20 - segStartY(thing)])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -290962,13 +290962,13 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Remove the end face for the extrusion.\nfirstSketch = startSketchOn(XY)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\n// Remove the end face for the extrusion.\nshell(firstSketch, faces = [END], thickness = 0.25)", - "// Remove the start face for the extrusion.\nfirstSketch = startSketchOn(-XZ)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\n// Remove the start face for the extrusion.\nshell(firstSketch, faces = [START], thickness = 0.25)", - "// Remove a tagged face and the end face for the extrusion.\nfirstSketch = startSketchOn(XY)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0], tag = $myTag)\n |> close()\n |> extrude(length = 6)\n\n// Remove a tagged face for the extrusion.\nshell(firstSketch, faces = [myTag], thickness = 0.25)", - "// Remove multiple faces at once.\nfirstSketch = startSketchOn(XY)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0], tag = $myTag)\n |> close()\n |> extrude(length = 6)\n\n// Remove a tagged face and the end face for the extrusion.\nshell(firstSketch, faces = [myTag, END], thickness = 0.25)", - "// Shell a sketch on face.\nsize = 100\ncase = startSketchOn(-XZ)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, face = END)\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We put \"case\" in the shell function to shell the entire object.\nshell(case, faces = [START], thickness = 5)", - "// Shell a sketch on face object on the end face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, face = END)\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We put \"thing1\" in the shell function to shell the end face of the object.\nshell(thing1, faces = [END], thickness = 5)", - "// Shell sketched on face objects on the end face, include all sketches to shell\n// the entire object.\n\n\nsize = 100\ncase = startSketchOn(XY)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, face = END)\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We put \"thing1\" and \"thing2\" in the shell function to shell the end face of the object.\nshell([thing1, thing2], faces = [END], thickness = 5)" + "// Remove the end face for the extrusion.\nfirstSketch = startSketchOn(XY)\n |> startProfile(at = [-12, 12])\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\n// Remove the end face for the extrusion.\nshell(firstSketch, faces = [END], thickness = 0.25)", + "// Remove the start face for the extrusion.\nfirstSketch = startSketchOn(-XZ)\n |> startProfile(at = [-12, 12])\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\n// Remove the start face for the extrusion.\nshell(firstSketch, faces = [START], thickness = 0.25)", + "// Remove a tagged face and the end face for the extrusion.\nfirstSketch = startSketchOn(XY)\n |> startProfile(at = [-12, 12])\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0], tag = $myTag)\n |> close()\n |> extrude(length = 6)\n\n// Remove a tagged face for the extrusion.\nshell(firstSketch, faces = [myTag], thickness = 0.25)", + "// Remove multiple faces at once.\nfirstSketch = startSketchOn(XY)\n |> startProfile(at = [-12, 12])\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0], tag = $myTag)\n |> close()\n |> extrude(length = 6)\n\n// Remove a tagged face and the end face for the extrusion.\nshell(firstSketch, faces = [myTag, END], thickness = 0.25)", + "// Shell a sketch on face.\nsize = 100\ncase = startSketchOn(-XZ)\n |> startProfile(at = [-size, -size])\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, face = END)\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We put \"case\" in the shell function to shell the entire object.\nshell(case, faces = [START], thickness = 5)", + "// Shell a sketch on face object on the end face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfile(at = [-size, -size])\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, face = END)\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We put \"thing1\" in the shell function to shell the end face of the object.\nshell(thing1, faces = [END], thickness = 5)", + "// Shell sketched on face objects on the end face, include all sketches to shell\n// the entire object.\n\n\nsize = 100\ncase = startSketchOn(XY)\n |> startProfile(at = [-size, -size])\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, face = END)\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We put \"thing1\" and \"thing2\" in the shell function to shell the end face of the object.\nshell([thing1, thing2], faces = [END], thickness = 5)" ] }, { @@ -291010,39 +291010,16 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = sqrt(2500))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 50, length = sqrt(2500))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { - "name": "startProfileAt", + "name": "startProfile", "summary": "Start a new profile at a given point.", "description": "", "tags": [], - "keywordArguments": false, + "keywordArguments": true, "args": [ - { - "name": "to", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_2_of_TyF64", - "type": "array", - "items": { - "$ref": "#/components/schemas/TyF64" - }, - "maxItems": 2, - "minItems": 2, - "definitions": { - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, { "name": "sketchSurface", "type": "SketchSurface", @@ -291179,10 +291156,6 @@ } ], "definitions": { - "TyF64": { - "type": "number", - "format": "double" - }, "ArtifactId": { "type": "string", "format": "uuid" @@ -292767,11 +292740,1625 @@ } } ] + }, + "TyF64": { + "type": "number", + "format": "double" } } }, "required": true, "includeInSnippet": true, + "description": "What to start the profile on", + "labelRequired": false + }, + { + "name": "at", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_TyF64", + "type": "array", + "items": { + "$ref": "#/components/schemas/TyF64" + }, + "maxItems": 2, + "minItems": 2, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "units", + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] + } + } + } + ] + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sectional", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "description": "The units of the solid.", + "allOf": [ + { + "$ref": "#/components/schemas/UnitLen" + } + ] + }, + "sectional": { + "description": "Is this a sectional solid?", + "type": "boolean" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interiorAbsolute kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (endAbsolute kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "$ref": "#/components/schemas/TyF64" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "$ref": "#/components/schemas/TyF64" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "TyF64": { + "type": "number", + "format": "double" + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Where to start the profile. An absolute point.", "labelRequired": true }, { @@ -292787,10 +294374,6 @@ ], "nullable": true, "definitions": { - "TyF64": { - "type": "number", - "format": "double" - }, "ArtifactId": { "type": "string", "format": "uuid" @@ -294375,10 +295958,15 @@ } } ] + }, + "TyF64": { + "type": "number", + "format": "double" } } }, "required": false, + "description": "Tag this first starting point", "labelRequired": true } ], @@ -296049,9 +297637,9 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)", - "exampleSketch = startSketchOn(-XZ)\n |> startProfileAt([10, 10], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)", - "exampleSketch = startSketchOn(-XZ)\n |> startProfileAt([-10, 23], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)", + "exampleSketch = startSketchOn(-XZ)\n |> startProfile(at = [10, 10])\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)", + "exampleSketch = startSketchOn(-XZ)\n |> startProfile(at = [-10, 23])\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { @@ -301341,12 +302929,12 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)\n\nexampleSketch002 = startSketchOn(example, face = END)\n |> startProfileAt([1, 1], %)\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5)\n\nexampleSketch003 = startSketchOn(example002, face = END)\n |> startProfileAt([2, 2], %)\n |> line(end = [6, 0])\n |> line(end = [0, 6])\n |> line(end = [-6, 0])\n |> close()\n\nexample003 = extrude(exampleSketch003, length = 5)", - "// Sketch on the end of an extruded face by tagging the end face.\n\n\nexampleSketch = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5, tagEnd = $end01)\n\nexampleSketch002 = startSketchOn(example, face = end01)\n |> startProfileAt([1, 1], %)\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5, tagEnd = $end02)\n\nexampleSketch003 = startSketchOn(example002, face = end02)\n |> startProfileAt([2, 2], %)\n |> line(end = [6, 0])\n |> line(end = [0, 6])\n |> line(end = [-6, 0])\n |> close()\n\nexample003 = extrude(exampleSketch003, length = 5)", - "exampleSketch = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10], tag = $sketchingFace)\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)\n\nexampleSketch002 = startSketchOn(example, face = sketchingFace)\n |> startProfileAt([1, 1], %)\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close(tag = $sketchingFace002)\n\nexample002 = extrude(exampleSketch002, length = 10)\n\nexampleSketch003 = startSketchOn(example002, face = sketchingFace002)\n |> startProfileAt([-8, 12], %)\n |> line(end = [0, 6])\n |> line(end = [6, 0])\n |> line(end = [0, -6])\n |> close()\n\nexample003 = extrude(exampleSketch003, length = 5)", - "exampleSketch = startSketchOn(XY)\n |> startProfileAt([4, 12], %)\n |> line(end = [2, 0])\n |> line(end = [0, -6])\n |> line(end = [4, -6])\n |> line(end = [0, -6])\n |> line(end = [-3.75, -4.5])\n |> line(end = [0, -5.5])\n |> line(end = [-2, 0])\n |> close()\n\nexample = revolve(exampleSketch, axis = Y, angle = 180)\n\nexampleSketch002 = startSketchOn(example, face = END)\n |> startProfileAt([4.5, -5], %)\n |> line(end = [0, 5])\n |> line(end = [5, 0])\n |> line(end = [0, -5])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5)", - "// Sketch on the end of a revolved face by tagging the end face.\n\n\nexampleSketch = startSketchOn(XY)\n |> startProfileAt([4, 12], %)\n |> line(end = [2, 0])\n |> line(end = [0, -6])\n |> line(end = [4, -6])\n |> line(end = [0, -6])\n |> line(end = [-3.75, -4.5])\n |> line(end = [0, -5.5])\n |> line(end = [-2, 0])\n |> close()\n\nexample = revolve(\n exampleSketch,\n axis = Y,\n angle = 180,\n tagEnd = $end01,\n)\n\nexampleSketch002 = startSketchOn(example, face = end01)\n |> startProfileAt([4.5, -5], %)\n |> line(end = [0, 5])\n |> line(end = [5, 0])\n |> line(end = [0, -5])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5)", - "a1 = startSketchOn({\n origin = { x = 0, y = 0, z = 0 },\n xAxis = { x = 1, y = 0, z = 0 },\n yAxis = { x = 0, y = 1, z = 0 },\n zAxis = { x = 0, y = 0, z = 1 }\n })\n |> startProfileAt([0, 0], %)\n |> line(end = [100.0, 0])\n |> yLine(length = -100.0)\n |> xLine(length = -100.0)\n |> yLine(length = 100.0)\n |> close()\n |> extrude(length = 3.14)" + "exampleSketch = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)\n\nexampleSketch002 = startSketchOn(example, face = END)\n |> startProfile(at = [1, 1])\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5)\n\nexampleSketch003 = startSketchOn(example002, face = END)\n |> startProfile(at = [2, 2])\n |> line(end = [6, 0])\n |> line(end = [0, 6])\n |> line(end = [-6, 0])\n |> close()\n\nexample003 = extrude(exampleSketch003, length = 5)", + "// Sketch on the end of an extruded face by tagging the end face.\n\n\nexampleSketch = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5, tagEnd = $end01)\n\nexampleSketch002 = startSketchOn(example, face = end01)\n |> startProfile(at = [1, 1])\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5, tagEnd = $end02)\n\nexampleSketch003 = startSketchOn(example002, face = end02)\n |> startProfile(at = [2, 2])\n |> line(end = [6, 0])\n |> line(end = [0, 6])\n |> line(end = [-6, 0])\n |> close()\n\nexample003 = extrude(exampleSketch003, length = 5)", + "exampleSketch = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0])\n |> line(end = [0, 10], tag = $sketchingFace)\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)\n\nexampleSketch002 = startSketchOn(example, face = sketchingFace)\n |> startProfile(at = [1, 1])\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close(tag = $sketchingFace002)\n\nexample002 = extrude(exampleSketch002, length = 10)\n\nexampleSketch003 = startSketchOn(example002, face = sketchingFace002)\n |> startProfile(at = [-8, 12])\n |> line(end = [0, 6])\n |> line(end = [6, 0])\n |> line(end = [0, -6])\n |> close()\n\nexample003 = extrude(exampleSketch003, length = 5)", + "exampleSketch = startSketchOn(XY)\n |> startProfile(at = [4, 12])\n |> line(end = [2, 0])\n |> line(end = [0, -6])\n |> line(end = [4, -6])\n |> line(end = [0, -6])\n |> line(end = [-3.75, -4.5])\n |> line(end = [0, -5.5])\n |> line(end = [-2, 0])\n |> close()\n\nexample = revolve(exampleSketch, axis = Y, angle = 180)\n\nexampleSketch002 = startSketchOn(example, face = END)\n |> startProfile(at = [4.5, -5])\n |> line(end = [0, 5])\n |> line(end = [5, 0])\n |> line(end = [0, -5])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5)", + "// Sketch on the end of a revolved face by tagging the end face.\n\n\nexampleSketch = startSketchOn(XY)\n |> startProfile(at = [4, 12])\n |> line(end = [2, 0])\n |> line(end = [0, -6])\n |> line(end = [4, -6])\n |> line(end = [0, -6])\n |> line(end = [-3.75, -4.5])\n |> line(end = [0, -5.5])\n |> line(end = [-2, 0])\n |> close()\n\nexample = revolve(\n exampleSketch,\n axis = Y,\n angle = 180,\n tagEnd = $end01,\n)\n\nexampleSketch002 = startSketchOn(example, face = end01)\n |> startProfile(at = [4.5, -5])\n |> line(end = [0, 5])\n |> line(end = [5, 0])\n |> line(end = [0, -5])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5)", + "a1 = startSketchOn({\n origin = { x = 0, y = 0, z = 0 },\n xAxis = { x = 1, y = 0, z = 0 },\n yAxis = { x = 0, y = 1, z = 0 },\n zAxis = { x = 0, y = 0, z = 1 }\n })\n |> startProfile(at = [0, 0])\n |> line(end = [100.0, 0])\n |> yLine(length = -100.0)\n |> xLine(length = -100.0)\n |> yLine(length = 100.0)\n |> close()\n |> extrude(length = 3.14)" ] }, { @@ -307788,8 +309376,8 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Subtract a cylinder from a cube using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\nsubtractedPart = subtract([part001], tools = [part002])", - "// Subtract a cylinder from a cube using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n// This is the equivalent of: subtract([part001], tools=[part002])\nsubtractedPart = part001 - part002" + "// Subtract a cylinder from a cube using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\nsubtractedPart = subtract([part001], tools = [part002])", + "// Subtract a cylinder from a cube using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n// This is the equivalent of: subtract([part001], tools=[part002])\nsubtractedPart = part001 - part002" ] }, { @@ -319306,10 +320894,10 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Create a pipe using a sweep.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)", + "// Create a pipe using a sweep.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfile(at = [0.05, 0.05])\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)", "// Create a spring by sweeping around a helix path.\n\n// Create a helix around the Z axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 4,\n length = 10,\n radius = 5,\n axis = Z,\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn(YZ)\n |> circle(center = [0, 0], radius = 1)\n |> sweep(path = helixPath)", - "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc(radius = 80, angle = -90)\n |> xLine(length = 384.93)\n\nsweep([rectangleSketch, circleSketch], path = sweepPath)", - "// Sectionally sweep one sketch along the path\n\n\nsketch001 = startSketchOn(XY)\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc(radius = 80, angle = -90)\n |> xLine(length = 384.93)\n\nsweep(circleSketch, path = sweepPath, sectional = true)" + "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfile(sketch001, at = [-200, 23.86])\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfile(sketch002, at = [0, 0])\n |> yLine(length = 231.81)\n |> tangentialArc(radius = 80, angle = -90)\n |> xLine(length = 384.93)\n\nsweep([rectangleSketch, circleSketch], path = sweepPath)", + "// Sectionally sweep one sketch along the path\n\n\nsketch001 = startSketchOn(XY)\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfile(sketch002, at = [0, 0])\n |> yLine(length = 231.81)\n |> tangentialArc(radius = 80, angle = -90)\n |> xLine(length = 384.93)\n\nsweep(circleSketch, path = sweepPath, sectional = true)" ] }, { @@ -319357,11 +320945,11 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Horizontal pill.\npillSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0])\n |> tangentialArc(end = [0, 10], tag = $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> tangentialArc(end = [0, -10])\n |> close()\n\npillExtrude = extrude(pillSketch, length = 10)", - "// Vertical pill. Use absolute coordinate for arc.\npillSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 20])\n |> tangentialArc(endAbsolute = [10, 20], tag = $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> tangentialArc(end = [-10, 0])\n |> close()\n\npillExtrude = extrude(pillSketch, length = 10)", - "rectangleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0], tag = $seg1)\n |> angledLine(angle = tangentToEnd(seg1), length = 10)\n |> line(end = [0, 10])\n |> line(end = [-20, 0])\n |> close()\n\nrectangleExtrude = extrude(rectangleSketch, length = 10)", - "bottom = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> arc(endAbsolute = [10, 10], interiorAbsolute = [5, 1], tag = $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> close()", - "circSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 3, tag = $circ)\n\ntriangleSketch = startSketchOn(XY)\n |> startProfileAt([-5, 0], %)\n |> angledLine(angle = tangentToEnd(circ), length = 10)\n |> line(end = [-15, 0])\n |> close()" + "// Horizontal pill.\npillSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [20, 0])\n |> tangentialArc(end = [0, 10], tag = $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> tangentialArc(end = [0, -10])\n |> close()\n\npillExtrude = extrude(pillSketch, length = 10)", + "// Vertical pill. Use absolute coordinate for arc.\npillSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [0, 20])\n |> tangentialArc(endAbsolute = [10, 20], tag = $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> tangentialArc(end = [-10, 0])\n |> close()\n\npillExtrude = extrude(pillSketch, length = 10)", + "rectangleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [10, 0], tag = $seg1)\n |> angledLine(angle = tangentToEnd(seg1), length = 10)\n |> line(end = [0, 10])\n |> line(end = [-20, 0])\n |> close()\n\nrectangleExtrude = extrude(rectangleSketch, length = 10)", + "bottom = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> arc(endAbsolute = [10, 10], interiorAbsolute = [5, 1], tag = $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> close()", + "circSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 3, tag = $circ)\n\ntriangleSketch = startSketchOn(XY)\n |> startProfile(at = [-5, 0])\n |> angledLine(angle = tangentToEnd(circ), length = 10)\n |> line(end = [-15, 0])\n |> close()" ] }, { @@ -330747,9 +332335,9 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 45, length = 10)\n |> tangentialArc(end = [0, -10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)", - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 60, length = 10)\n |> tangentialArc(endAbsolute = [15, 15])\n |> line(end = [10, -15])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)", - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([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 = 45, length = 10)\n |> tangentialArc(end = [0, -10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)", + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> angledLine(angle = 60, length = 10)\n |> tangentialArc(endAbsolute = [15, 15])\n |> line(end = [10, -15])\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)" ] }, { @@ -330777,7 +332365,7 @@ "unpublished": false, "deprecated": true, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = 10 * tau())\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "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)" ] }, { @@ -340571,11 +342159,11 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Move a pipe.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> translate(x = 1.0, y = 1.0, z = 2.5)", + "// Move a pipe.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfile(at = [0.05, 0.05])\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> translate(x = 1.0, y = 1.0, z = 2.5)", "// Move an imported model.\n\n\nimport \"tests/inputs/cube.sldprt\" as cube\n\n// Circle so you actually see the move.\nstartSketchOn(XY)\n |> circle(center = [-10, -10], radius = 10)\n |> extrude(length = 10)\n\ncube\n |> translate(x = 10.0, y = 10.0, z = 2.5)", - "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc(radius = 80, angle = -90)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Move the sweeps.\ntranslate(\n parts,\n x = 1.0,\n y = 1.0,\n z = 2.5,\n)", - "// Move a sketch.\n\n\nfn square(length) {\n l = length / 2\n p0 = [-l, -l]\n p1 = [-l, l]\n p2 = [l, l]\n p3 = [l, -l]\n\n return startSketchOn(XY)\n |> startProfileAt(p0, %)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> close()\n}\n\nsquare(10)\n |> translate(x = 5, y = 5)\n |> extrude(length = 10)", - "// Translate and rotate a sketch to create a loft.\nsketch001 = startSketchOn(XY)\n\nfn square() {\n return startProfileAt([-10, 10], sketch001)\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n}\n\nprofile001 = square()\n\nprofile002 = square()\n |> translate(z = 20)\n |> rotate(axis = [0, 0, 1.0], angle = 45)\n\nloft([profile001, profile002])" + "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfile(sketch001, at = [-200, 23.86])\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfile(sketch002, at = [0, 0])\n |> yLine(length = 231.81)\n |> tangentialArc(radius = 80, angle = -90)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Move the sweeps.\ntranslate(\n parts,\n x = 1.0,\n y = 1.0,\n z = 2.5,\n)", + "// Move a sketch.\n\n\nfn square(length) {\n l = length / 2\n p0 = [-l, -l]\n p1 = [-l, l]\n p2 = [l, l]\n p3 = [l, -l]\n\n return startSketchOn(XY)\n |> startProfile(at = p0)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> close()\n}\n\nsquare(10)\n |> translate(x = 5, y = 5)\n |> extrude(length = 10)", + "// Translate and rotate a sketch to create a loft.\nsketch001 = startSketchOn(XY)\n\nfn square() {\n return startProfile(sketch001, at = [-10, 10])\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n}\n\nprofile001 = square()\n\nprofile002 = square()\n |> translate(z = 20)\n |> rotate(axis = [0, 0, 1.0], angle = 45)\n\nloft([profile001, profile002])" ] }, { @@ -345410,9 +346998,9 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Union two cubes using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\nunionedPart = union([part001, part002])", - "// Union two cubes using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n// This is the equivalent of: union([part001, part002])\nunionedPart = part001 + part002", - "// Union two cubes using the more programmer-friendly operator.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n // This is the equivalent of: union([part001, part002])\n // Programmers will understand `|` as a union operation, but mechanical engineers\n// will understand `+`, we made both work.\nunionedPart = part001 | part002" + "// Union two cubes using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\nunionedPart = union([part001, part002])", + "// Union two cubes using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n// This is the equivalent of: union([part001, part002])\nunionedPart = part001 + part002", + "// Union two cubes using the more programmer-friendly operator.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n // This is the equivalent of: union([part001, part002])\n // Programmers will understand `|` as a union operation, but mechanical engineers\n// will understand `+`, we made both work.\nunionedPart = part001 | part002" ] }, { @@ -353580,7 +355168,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> xLine(length = 15)\n |> angledLine(angle = 80, length = 15)\n |> line(end = [8, -10])\n |> xLine(length = 10)\n |> angledLine(angle = 120, length = 30)\n |> xLine(length = -15)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> xLine(length = 15)\n |> angledLine(angle = 80, length = 15)\n |> line(end = [8, -10])\n |> xLine(length = 10)\n |> angledLine(angle = 120, length = 30)\n |> xLine(length = -15)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" ] }, { @@ -361748,7 +363336,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> yLine(length = 15)\n |> angledLine(angle = 30, length = 15)\n |> line(end = [8, -10])\n |> yLine(length = -5)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" + "exampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> yLine(length = 15)\n |> angledLine(angle = 30, length = 15)\n |> line(end = [8, -10])\n |> yLine(length = -5)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" ] } ] \ No newline at end of file diff --git a/docs/kcl/subtract.md b/docs/kcl/subtract.md index e3f704956..ff85cf048 100644 --- a/docs/kcl/subtract.md +++ b/docs/kcl/subtract.md @@ -38,7 +38,7 @@ subtract( fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) @@ -63,7 +63,7 @@ subtractedPart = subtract([part001], tools = [part002]) fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) diff --git a/docs/kcl/sweep.md b/docs/kcl/sweep.md index c0207f747..a0f3746f6 100644 --- a/docs/kcl/sweep.md +++ b/docs/kcl/sweep.md @@ -45,7 +45,7 @@ sweep( // Create a path for the sweep. sweepPath = startSketchOn(XZ) - |> startProfileAt([0.05, 0.05], %) + |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) |> tangentialArc(angle = 90, radius = 5) |> line(end = [-3, 0]) @@ -90,7 +90,7 @@ springSketch = startSketchOn(YZ) sketch001 = startSketchOn(XY) -rectangleSketch = startProfileAt([-200, 23.86], sketch001) +rectangleSketch = startProfile(sketch001, at = [-200, 23.86]) |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -100,7 +100,7 @@ rectangleSketch = startProfileAt([-200, 23.86], sketch001) circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63) sketch002 = startSketchOn(YZ) -sweepPath = startProfileAt([0, 0], sketch002) +sweepPath = startProfile(sketch002, at = [0, 0]) |> yLine(length = 231.81) |> tangentialArc(radius = 80, angle = -90) |> xLine(length = 384.93) @@ -118,7 +118,7 @@ sketch001 = startSketchOn(XY) circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63) sketch002 = startSketchOn(YZ) -sweepPath = startProfileAt([0, 0], sketch002) +sweepPath = startProfile(sketch002, at = [0, 0]) |> yLine(length = 231.81) |> tangentialArc(radius = 80, angle = -90) |> xLine(length = 384.93) diff --git a/docs/kcl/tangentToEnd.md b/docs/kcl/tangentToEnd.md index 5c6a893b3..a0637823c 100644 --- a/docs/kcl/tangentToEnd.md +++ b/docs/kcl/tangentToEnd.md @@ -29,7 +29,7 @@ tangentToEnd(tag: TagIdentifier): number ```js // Horizontal pill. pillSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [20, 0]) |> tangentialArc(end = [0, 10], tag = $arc1) |> angledLine(angle = tangentToEnd(arc1), length = 20) @@ -44,7 +44,7 @@ pillExtrude = extrude(pillSketch, length = 10) ```js // Vertical pill. Use absolute coordinate for arc. pillSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 20]) |> tangentialArc(endAbsolute = [10, 20], tag = $arc1) |> angledLine(angle = tangentToEnd(arc1), length = 20) @@ -58,7 +58,7 @@ pillExtrude = extrude(pillSketch, length = 10) ```js rectangleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0], tag = $seg1) |> angledLine(angle = tangentToEnd(seg1), length = 10) |> line(end = [0, 10]) @@ -72,7 +72,7 @@ rectangleExtrude = extrude(rectangleSketch, length = 10) ```js bottom = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> arc(endAbsolute = [10, 10], interiorAbsolute = [5, 1], tag = $arc1) |> angledLine(angle = tangentToEnd(arc1), length = 20) |> close() @@ -85,7 +85,7 @@ circSketch = startSketchOn(XY) |> circle(center = [0, 0], radius = 3, tag = $circ) triangleSketch = startSketchOn(XY) - |> startProfileAt([-5, 0], %) + |> startProfile(at = [-5, 0]) |> angledLine(angle = tangentToEnd(circ), length = 10) |> line(end = [-15, 0]) |> close() diff --git a/docs/kcl/tangentialArc.md b/docs/kcl/tangentialArc.md index 148187c13..a37579a84 100644 --- a/docs/kcl/tangentialArc.md +++ b/docs/kcl/tangentialArc.md @@ -40,7 +40,7 @@ tangentialArc( ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 45, length = 10) |> tangentialArc(end = [0, -10]) |> line(end = [-10, 0]) @@ -53,7 +53,7 @@ example = extrude(exampleSketch, length = 10) ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 60, length = 10) |> tangentialArc(endAbsolute = [15, 15]) |> line(end = [10, -15]) @@ -66,7 +66,7 @@ example = extrude(exampleSketch, length = 10) ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 60, length = 10) |> tangentialArc(radius = 10, angle = -120) |> angledLine(angle = -60, length = 10) diff --git a/docs/kcl/tangentialArcTo.md b/docs/kcl/tangentialArcTo.md deleted file mode 100644 index 4c517946d..000000000 --- a/docs/kcl/tangentialArcTo.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: "tangentialArcTo" -excerpt: "Starting at the current sketch's origin, draw a curved line segment along some part of an imaginary circle until it reaches the desired (x, y) coordinates." -layout: manual ---- - -Starting at the current sketch's origin, draw a curved line segment along some part of an imaginary circle until it reaches the desired (x, y) coordinates. - - - -```js -tangentialArcTo( - to: [number], - sketch: Sketch, - tag?: TagDeclarator, -): Sketch -``` - - -### Arguments - -| Name | Type | Description | Required | -|----------|------|-------------|----------| -| `to` | [`[number]`](/docs/kcl/types/number) | | Yes | -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | | Yes | -| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No | - -### Returns - -[`Sketch`](/docs/kcl/types/Sketch) - - -### Examples - -```js -exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) - |> angledLine(angle = 60, length = 10) - |> tangentialArcTo([15, 15], %) - |> line(end = [10, -15]) - |> close() - -example = extrude(exampleSketch, length = 10) -``` - -![Rendered example of tangentialArcTo 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAD91UlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1313+iaa655MM/0Yi/2Yq995syZBwG8+Iu/+Gvfd999t/7oj/7o59x33323ctVVV1111VVXXXXVvwV60IMexFVXXXXVVVddddVVV/1nuuaaax585syZB7/Yi73YawG8+Iu/+GufOXPmwddcc82DeT52d3cBGIbhVoCv//qvf59/+Id/+G2uuuqqq6666qqrrvrXQg960IO46qqrrrrqqquuuuqqf69rrrnmwQCv/dqv/V4AL/7iL/7aL/ZiL/baPJfd3V0uXrzI7u4uu7u7AOzu7nLx4kV2d3fZ3d0F4Pjx43zsx34sAP/wD//w25/5mZ/5Olx11VVXXXXVVVdd9a9F5aqrrrrqqquuuuqqq/6VrrnmmgefOXPmwS/2Yi/2Wi/+4i/+2i/2Yi/22jzA7u4uAH/913/NxYsX2d3dZXd3l1tvvZXnZpvnZ3d3l93dXY4fP86LvdiLvfY7vuM7ftaP/uiPfg5XXXXVVVddddVVV/1rULnqqquuuuqqq6666qoX4pprrnnwmTNnHvxiL/Zir/XiL/7ir/1iL/Zir80D7O7u8lu/9VsA3Hrrrdx66638a0jiBbl48SLHjx/nJ3/yJ3md13md9/7t3/7t77nvvvtu5aqrrrrqqquuuuqqFxWVq6666qqrrrrqqquueoBrrrnmwa/92q/9XgCv8zqv897XXHPNg3mm3d1d/vqv/5qLFy9y6623cuutt/Kf6dZbb+UhD3kIAE94whMe/OEf/uHf9Zmf+Zmvw1VXXXXVVVddddVVLyoqV1111VVXXXXVVVf9v3bNNdc8+LVf+7XfC+Cd3umdPptn2t3d5dZbb+Uf/uEfuPXWW7n11lv5r3brrbcC8JjHPIZv+ZZv4dM+7dNe+3Ve53Xe+7d+67e+m6uuuuqqq6666qqrXhRUrrrqqquuuuqqq676f+Waa6558Iu92Iu99pkzZx70Tu/0Tp/NM+3u7vLXf/3XXLx4kd/+7d8GQBL3k8R/Fts8P7u7uwCcOXOGc+fO8ZM/+ZO84zu+42f9wz/8w2/fd999t3LVVVddddVVV1111b+EylVXXXXVVVddddVV/+ddc801D37t137t93rxF3/x136xF3ux1wbY3d3l1ltv5elPfzp/8zd/w+7uLveTxH8lSTw/kgA4ffo0kvi93/s9XvM1X/PBH/7hH/5dn/mZn/k6XHXVVVddddVVV131L6Fy1VVXXXXVVVddddX/SS/2Yi/22i/2Yi/2Wu/0Tu/02TzT7u4uv/3bv82tt97Krbfeyv90u7u73HrrrTz4wQ/mMY95DI973OP4lm/5Fr76q7/6tV/ndV7nvX/rt37ru7nqqquuuuqqq6666oWhctVVV1111VVXXXXV/wnXXHPNg8+cOfPgF3uxF3utd3qnd/psgN3dXW699VZuvfVWfvu3f5v/zU6fPo0kzp07x7d8y7fwju/4jp/1D//wD79933333cpVV1111VVXXXXVVS8Ilauuuuqqq6666qqr/ld7x3d8x8+65pprHvw6r/M67w2wu7vLb//2b3Prrbdy66238m8lif9Ktnl+br31Vh784Adz+vRp7vd7v/d7vOZrvuaD3/Ed3/Gzvv7rv/59uOqqq6666qqrrrrqBaFy1VVXXXXVVVddddX/Otdcc82DX/u1X/u93umd3umzAXZ3d/nt3/5tbr31Vm699Vb+tSTx300Sz88znvEMAB7zmMfwUz/1U0jCNt/yLd/CV3/1V7/3P/zDP/zOb/3Wb303V1111VVXXXXVVVc9P1Suuuqqq6666qqrrvpf4Zprrnnwa7/2a7/XO73TO302wO7uLr/927/NX//1X7O7u8uLShL/m+zu7gJw5swZHujcuXN8y7d8C+/4ju/4Wf/wD//w2/fdd9+tXHXVVVddddVVV1313KhcddVVV1111VVXXfU/1jXXXPPg137t136v13md13nva6655sEAf/3Xf82tt97KX//1X/OikMT/Zru7uwCcPn2a06dPc+7cOSRhm9/7vd/jNV/zNR/8ju/4jp/19V//9e/DVVddddVVV1111VXPjcpVV1111VVXXXXVVf/jXHPNNQ9+x3d8x896ndd5nfcG2N3d5bd/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rrrqPx7BVVddddVVV/0neMd3fMfP4pl+7/d+j//JbGMb29jGNv+X2MY2trGNbWxjG9tcddX/B7axjW1sYxvb2OZ/O9vYxja2sc3/ZLaxjW1s89/JNraxzX812+zu7vIzP/Mz3O91Xud13ourrrrqqquu+o9HcNVVV1111VX/CV7sxV7stQF+53d+h4sXL2Kb/01sYxvb2MY2/1fZxja2sY1tbGMb21x11f8GtrGNbWxjG9vYxjb/l9jGNraxzf90trGNbWzz3802trHNfzXb2MY29/vrv/5rbr31VgBe7MVe7LW56qqrrrrqqv94VK666qqrrrrqP9iLvdiLvRbP9Fqv9Vq81mu9FlddddVVV1111b/smmuuefB99913K1ddddVVV131H4fgqquuuuqqq/6D/cM//MPv/NZv/dZ3c9VVV1111VVXvch+67d+67vvu+++W7nqqquuuuqq/1joQQ96EFddddVVV1111VVXXXXVVVddddVVV1111f9JVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+r+Ed9t1Vy9MMhLwAAAABJRU5ErkJggg==) - - diff --git a/docs/kcl/tangentialArcToRelative.md b/docs/kcl/tangentialArcToRelative.md deleted file mode 100644 index f277bfbb1..000000000 --- a/docs/kcl/tangentialArcToRelative.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: "tangentialArcToRelative" -excerpt: "Starting at the current sketch's origin, draw a curved line segment along some part of an imaginary circle until it reaches a point the given (x, y) distance away." -layout: manual ---- - -Starting at the current sketch's origin, draw a curved line segment along some part of an imaginary circle until it reaches a point the given (x, y) distance away. - - - -```js -tangentialArcToRelative( - delta: [number], - sketch: Sketch, - tag?: TagDeclarator, -): Sketch -``` - - -### Arguments - -| Name | Type | Description | Required | -|----------|------|-------------|----------| -| `delta` | [`[number]`](/docs/kcl/types/number) | | Yes | -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | | Yes | -| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No | - -### Returns - -[`Sketch`](/docs/kcl/types/Sketch) - - -### Examples - -```js -exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) - |> angledLine(angle = 45, length = 10) - |> tangentialArcToRelative([0, -10], %) - |> line(end = [-10, 0]) - |> close() - -example = extrude(exampleSketch, length = 10) -``` - -![Rendered example of tangentialArcToRelative 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAADyC0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV131f9w111zzYIAzZ848GOCaa655MMCZM2cexIvg7Nmzz+CZ7rvvvlsBzp49e+t99913K1ddddVVV1111VX/s1G56qqrrrrqqquuuuqq/8WuueaaBwO82Iu92GufOXPmQQAv/uIv/toAL/ZiL/baPMB999136zXXXPNg/oPdd999t549e/bW++6771aA3/qt3/oenukf/uEffpurrrrqqquuuuqq/z7oQQ96EFddddVVV1111VVXXfW/wTXXXPPgF3uxF3vtM2fOPOjFX/zFX/vFXuzFXhvgvvvuu/Waa655MM+0u7sLwNOf/nQuXrwIwO7uLrbZ3d0F4OLFi9xvd3eX5+f48eM80PHjx7nf8ePHOXHiBCdOnADg+PHjADz0oQ/lgf7hH/7ht8+cOfPgf/iHf/htgH/4h3/4nX/4h3/47fvuu+9Wrrrqqquuuuqqq/7zoQc96EFcddVVV1111VVXXXXV/zTXXHPNg1/7tV/7vc6ePfuM13md13mvF3uxF3ttHmB3d5eLFy/y9Kc/HYBbb72Vixcvsru7y4vKNi8K27wgtnluJ06c4Pjx45w4cYKHPOQhAJw4cYKHPvSh3O++++679ezZs7f+/d///W//wz/8w+/8wz/8w29z1VVXXXXVVVdd9R8PPehBD+Kqq6666qqrrrrqqqv+u11zzTUPfu3Xfu33Anind3qnz+YBdnd3+cu//EsAbr31Vp7+9KfzH802/xLbvCC2eW62eaATJ05w/PhxTpw4wUMf+lBOnDjBQx/6UADuu+++WwH+4R/+4bd/67d+63v+4R/+4be56qqrrrrqqquu+vdDD3rQg7jqqquuuuqqq6666qr/atdcc82Dz5w58+AXe7EXe63XeZ3Xee9rrrnmwQC7u7tcvHiRW2+9lac//enceuut/FvY5t/KNi+MbZ4f2zw/tnkg29zvxIkTHD9+nIc+9KE87GEP46EPfSgA9913361nz5699e///u9/+x/+4R9+5x/+4R9+m6uuuuqqq6666qp/PfSgBz2Iq6666qqrrrrqqquu+q9wzTXXPPi1X/u13+vFX/zFX/vFXuzFXptn2t3d5a/+6q94+tOfzq233sp/Ftv8a9jmhbHN82Ob52abB7LNA9kG4MSJEwC83Mu9HA996EN52MMeBsB999136z/8wz/89m/91m99zz/8wz/8NlddddVVV1111VUvGvSgBz2Iq6666qqrrrrqqquu+s9yzTXXPPi1X/u13+vFX/zFX/vFXuzFXhtgd3eXv/qrv+LpT386t956K/9dbPOisM0LY5vnZpvnZpvnZpsHss39bHPixAke9rCH8dCHPpSXf/mXB+C+++679R/+4R9++7d+67e+5x/+4R9+m6uuuuqqq6666qoXDD3oQQ/iqquuuuqqq6666qqr/iNdc801D37t137t93rxF3/x1z5z5syDr7nmmgfv7u7yl3/5l9x6663ceuut/E9jm3+JbV4Q2zw/tnlutnkg2zyQbe5nm/sdP36chz3sYTzsYQ/j5V/+5QG47777bv2t3/qt7/7t3/7t77nvvvtu5aqrrrrqqquuuuo5oQc96EFcddVVV1111VVXXXXVf4Rrrrnmwa/92q/9Xu/0Tu/02QC7u7v85V/+JX/913/N7u4u/x6SeFHY5t/LNi+MbV4Q2zw32zw32zyQbR7INvezzf1sA3DixAke+tCH8rCHPYxXeIVX4L777rv1H/7hH377H/7hH37nt37rt76bq6666qqrrrrqqivQgx70IK666qqrrrrqqquuuurf6pprrnnwa7/2a7/X67zO67z3Nddc82CA3/zN32R3d5e//uu/5l9LEv9ZbPOvYZsXxjYviG2em20eyDYPZJsHss39bHM/29zPNidOnOAVXuEVeNjDHsbDHvYw7rvvvlt/67d+67t/9Ed/9HO46qqrrrrqqqv+v0MPetCDuOqqq6666qqrrrrqqn+ta6655sGv/dqv/V7v9E7v9NkAu7u7/OVf/iW/9Vu/hSReVJL472KbF5VtXhDbPD+2eW62eW62uZ9tHsg297PN/WxzP9vc78SJE7zhG74hr/AKr8B999136z/8wz/89m/91m99zz/8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/Etsc9V/Ltv8b2Sbf69jx47xmq/5mrzkS74kAPfdd9+tX//1X/8+//AP//DbXHXVVVddddVV/1kox48f56qrrrrqqquuuuqq/zuOjo4u/dmf/dnPHB4e7r74i7/4a1977bU88pGPZDabcdttt3HVfw3b/G9mm/8ox44d4xVf8RV5h3d4B6699loAfuRHfuSzv/RLv/Rtzp49eytXXXXVVVddddV/JvSgBz2Iq6666qqrrrrqqqv+b7rmmmse/I7v+I6f9Tqv8zrvDXDp0iV+7/d+j7/7u7/jqv8Ytvm/wDb/GV7jNV6D13zN1+R+v/Vbv/XdX//1X/8+XHXVVVddddVV/1XQgx70IK666qqrrrrqqquu+r/txV7sxV77wz/8w7/rmmuueTDApUuX+Pmf/3luu+02rvqX2eb/Etv8Z3uN13gNXuqlXopjx44BcN9999369V//9e/zD//wD7/NVVddddVVV131Xwk96EEP4qqrrrrqqquuuuqq//uuueaaB7/2a7/2e73TO73TZwNcunSJ2267jd/7vd/j0qVL/H9nm/+rbPNf5UEPehBv8RZvwbFjxwC47777bv3RH/3Rz/6t3/qt7+Gqq6666qqrrvrvgB70oAdx1VVXXXXVVVddddX/H9dcc82DX/u1X/u93umd3umzAS5dusTf/u3f8nd/93dcunSJ/6ts8/+Bbf47vMZrvAYv9VIvxbFjxwC47777bv2t3/qt7/7RH/3Rz+Gqq6666qqrrvrvhB70oAdx1VVXXXXVVVddddX/P2fOnHnQ67zO67z3O73TO302wKVLl/i7v/s7/vZv/5ZLly7xv4lt/j+yzX+313iN1+ClXuqlOHbsGAD33Xffrb/1W7/13T/6oz/6OVx11VVXXXXVVf8ToAc96EFcddVVV1111VVXXfX/1zXXXPPgd3zHd/ys13md13lvgEuXLnHbbbfxe7/3e1y6dIn/Lra56tls8z/FsWPHeMmXfEle8zVfk/vdd999t/7Wb/3Wd//oj/7o53DVVVddddVVV/1Pgh70oAdx1VVXXXXVVVddddVV11xzzYPf8R3f8bNe53Ve570BLl26xG233cbf/u3fctttt/HvZZurXjS2+Z/o2LFjvORLviSv+ZqvCcB99913K8Bv/dZvffeP/uiPfg5XXXXVVVddddX/ROhBD3oQV1111VVXXXXVVVdddb9rrrnmwa/92q/9Xu/0Tu/02TzTpUuX+L3f+z3+9m//lqv+49jmf4Njx47xmq/5mrzkS74k97vvvvtu/dEf/dHP/q3f+q3v4aqrrrrqqquu+p8MPehBD+Kqq6666qqrrrrqqque2zXXXPPg137t136vd3qnd/psnunSpUv87d/+LX/7t3/LpUuXuOpFY5v/bY4dO8ZLvuRL8lIv9VIcO3aM+/3Ij/zIZ//2b//299x33323ctVVV1111VVX/W+AHvSgB3HVVVddddVVV1111VUvyJkzZx704i/+4q/zOq/zOu/1Yi/2Yq8NcOnSJZ7xjGfwt3/7t9x2221cdYVt/rd70IMexEu+5Evyki/5ktzvvvvuu/W3fuu3vvtHf/RHP4errrrqqquuuup/G/SgBz2Iq6666qqrrrrqqquuelG82Iu92Gu/zuu8znu92Iu92Gtfc801Dwa4dOkSf/u3f8sznvEMbrvtNv6vs83/NceOHeMlX/Ilec3XfE0e6Ld+67e++x/+4R9+57d+67e+m6uuuuqqq6666n8r9KAHPYirrrrqqquuuuqqq6761zhz5syDXud1Xue9X+d1Xue9r7nmmgfzTJcuXeJv//Zv+b3f+z3+N7PN/2W2OX78OC/5ki/JS73US3Hs2DHud9999936W7/1W9/9oz/6o5/DVVddddVVV131fwF60IMexFVXXXXVVVddddVVV/1bXXPNNQ9+x3d8x896ndd5nffmmS5dusTu7i5/93d/x9/+7d/yP41t/r+wzf2OHz/OS77kS/KSL/mSHD9+nPvdd999t/7Wb/3Wd//2b//299x33323ctVVV1111VVX/V+CHvSgB3HVVVddddVVV1111VX/XmfOnHnQi7/4i7/Oi73Yi73W67zO67w3D3Dp0iX+9m//lmc84xncdttt/Gezzf9Htnmg48ePc+zYMR70oAfxmq/5mjzQfffdd+tv/dZvffc//MM//PY//MM//A5XXXXVVVddddX/VehBD3oQV1111VVXXXXVVVdd9R/pmmuuefCLvdiLvfaLvdiLvdbrvM7rvDcPcOnSJZ7xjGdw22238bd/+7f8a9jmqits8/wcP36cl3zJl+RBD3oQD3rQg3ig++6779bf+q3f+u5/+Id/+J1/+Id/+G2uuuqqq6666qr/D9CDHvQgrrrqqquuuuqqq6666j/LNddc8+AXe7EXe+0Xe7EXe63XeZ3XeW8e4NKlSwD87d/+Lc94xjN4xjOewVXPyzYvyPHjx3nJl3xJAF7zNV+T53bffffd+lu/9Vvf/du//dvfc999993KVVddddVVV131/w160IMexFVXXXXVVVddddVVV/1XOXPmzINe53Ve571f/MVf/LVf7MVe7LV5gEuXLgHwjGc8g2c84xk84xnP4NKlS/x/YZsX5vjx4xw7dowHPehBPOhBD+JBD3oQz+2+++679bd+67e+G+BHf/RHP4errrrqqquuuur/O/SgBz2Iq6666qqrrrrqqquu+u9wzTXXPPjFXuzFXvvFXuzFXuuaa6558Iu92Iu9Ns/l0qVLPOMZzwDgGc94Bs94xjO4dOkS/5vZ5l9y/Phxjh07xoMe9CCOHTvGS73US/H83Hfffbf+wz/8w2/fd999t/72b//299x33323ctVVV1111VVXXfVs6EEPehBXXXXVVVddddVVV131P8E111zz4DNnzjz4xV7sxV7rxV/8xV/7xV7sxV6b5+PSpUvs7u5y6dIlnvGMZwBw6dIlnvGMZ/A/iW3+JcePH+fYsWM86EEPAuBBD3oQD3rQg3hB7rvvvlt/67d+67sBfvRHf/RzuOqqq6666qqrrnrh0IMe9CCuuuqqq6666qqrrrrqf6prrrnmwS/2Yi/22i/2Yi/2Wtdcc82DX+zFXuy1eSEuXbrEpUuX2N3dBeAZz3gGAJcuXWJ3d5dLly7xH8k2z8/x48cBOHbsGMeOHeP48eMAHDt2jOPHj3Ps2DGOHz/OC3LffffdCvBbv/Vb3w3wD//wD7/zD//wD7/NVVddddVVV1111b8OetCDHsRVV1111VVXXXXVVVf9b3LNNdc8+MyZMw++5pprHvxiL/Zir3XNNdc8+MyZMw++5pprHsyL6NKlSwDs7u5yv0uXLvHcdnd3eaBjx44BIAnbHD9+nPsdP36cY8eO8a9x33333Xr27Nlb//7v//63Af7hH/7hd/7hH/7ht7nqqquuuuqqq676j4Ee9KAHcdVVV1111VVXXXXVVf9XXHPNNQ8+c+bMg6655pqHALzYi73Ya9133323vviLv/hrnzlz5sHXXHPNg/kvcN99990KcPbs2VsB/v7v//63Ac6ePfuM++677+lnz559xn333XcrV1111VVXXXXVVf+50IMe9CCuuuqqq6666qqrrrrq/5trrrnmwbZ9zTXXPIRnuuaaax4MGBDPdObMmQfxAGfPnn0GVxjQfffddyvPdN999z397Nmzz+Cqq6666qqrrrrqfw70oAc9iKuuuuqqq6666qqrrrrqqquuuuqqq6666v8kKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8V/wg9C5pLs7VQ4gAAAABJRU5ErkJggg==) - - diff --git a/docs/kcl/tau.md b/docs/kcl/tau.md index 48f51783a..60a25f16d 100644 --- a/docs/kcl/tau.md +++ b/docs/kcl/tau.md @@ -29,7 +29,7 @@ tau(): number ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 50, length = 10 * tau()) |> yLine(endAbsolute = 0) |> close() diff --git a/docs/kcl/translate.md b/docs/kcl/translate.md index e3330886b..14419ae2e 100644 --- a/docs/kcl/translate.md +++ b/docs/kcl/translate.md @@ -43,7 +43,7 @@ translate( // Create a path for the sweep. sweepPath = startSketchOn(XZ) - |> startProfileAt([0.05, 0.05], %) + |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) |> tangentialArc(angle = 90, radius = 5) |> line(end = [-3, 0]) @@ -85,7 +85,7 @@ cube sketch001 = startSketchOn(XY) -rectangleSketch = startProfileAt([-200, 23.86], sketch001) +rectangleSketch = startProfile(sketch001, at = [-200, 23.86]) |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -95,7 +95,7 @@ rectangleSketch = startProfileAt([-200, 23.86], sketch001) circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63) sketch002 = startSketchOn(YZ) -sweepPath = startProfileAt([0, 0], sketch002) +sweepPath = startProfile(sketch002, at = [0, 0]) |> yLine(length = 231.81) |> tangentialArc(radius = 80, angle = -90) |> xLine(length = 384.93) @@ -125,7 +125,7 @@ fn square(length) { p3 = [l, -l] return startSketchOn(XY) - |> startProfileAt(p0, %) + |> startProfile(at = p0) |> line(endAbsolute = p1) |> line(endAbsolute = p2) |> line(endAbsolute = p3) @@ -144,7 +144,7 @@ square(10) sketch001 = startSketchOn(XY) fn square() { - return startProfileAt([-10, 10], sketch001) + return startProfile(sketch001, at = [-10, 10]) |> xLine(length = 20) |> yLine(length = -20) |> xLine(length = -20) diff --git a/docs/kcl/types.md b/docs/kcl/types.md index 7e993aaa2..cf454d512 100644 --- a/docs/kcl/types.md +++ b/docs/kcl/types.md @@ -169,7 +169,7 @@ startSketchOn(XZ) Note that we are still in the process of migrating KCL's standard library to use keyword arguments. So some functions are still unfortunately using positional arguments. We're moving them over, so keep checking back. -Some functions like `angledLine`, `startProfileAt` etc are still using the old positional argument syntax. +Some functions are still using the old positional argument syntax. Check the docs page for each function and look at its examples to see. ## Tags @@ -183,7 +183,7 @@ way: ```norun startSketchOn(XZ) - |> startProfileAt(origin, %) + |> startProfile(at = origin) |> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001) |> angledLine( angle = segAng(rectangleSegmentA001) - 90, @@ -218,7 +218,7 @@ However if the code was written like this: ```norun fn rect(origin) { return startSketchOn(XZ) - |> startProfileAt(origin, %) + |> startProfile(at = origin) |> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001) |> angledLine( angle = segAng(rectangleSegmentA001) - 90, @@ -248,7 +248,7 @@ For example the following code works. ```norun fn rect(origin) { return startSketchOn(XZ) - |> startProfileAt(origin, %) + |> startProfile(at = origin) |> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001) |> angledLine( angle = segAng(rectangleSegmentA001) - 90, diff --git a/docs/kcl/types/Sketch.md b/docs/kcl/types/Sketch.md index 22753afa1..c0cd6408d 100644 --- a/docs/kcl/types/Sketch.md +++ b/docs/kcl/types/Sketch.md @@ -10,7 +10,7 @@ When you define a sketch to a variable like: ```js mySketch = startSketchOn(XY) - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -28,7 +28,7 @@ you can use a function. ```js fn createSketch() { return startSketchOn(XY) - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) diff --git a/docs/kcl/types/Solid.md b/docs/kcl/types/Solid.md index 99122fc63..9bda8bd12 100644 --- a/docs/kcl/types/Solid.md +++ b/docs/kcl/types/Solid.md @@ -10,7 +10,7 @@ When you define a solid to a variable like: ```js myPart = startSketchOn('XY') - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -29,7 +29,7 @@ you can use a function. ```js fn createPart() { return startSketchOn('XY') - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) diff --git a/docs/kcl/types/tag.md b/docs/kcl/types/tag.md index f224f200d..747bf2f5b 100644 --- a/docs/kcl/types/tag.md +++ b/docs/kcl/types/tag.md @@ -13,7 +13,7 @@ way: ```js startSketchOn(XZ) - |> startProfileAt(origin, %) + |> startProfile(at = origin) |> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001) |> angledLine( angle = segAng(rectangleSegmentA001) - 90, @@ -47,7 +47,7 @@ However if the code was written like this: ```js fn rect(origin) { return startSketchOn(XZ) - |> startProfileAt(origin, %) + |> startProfile(at = origin) |> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001) |> angledLine( angle = segAng(rectangleSegmentA001) - 90, @@ -76,7 +76,7 @@ For example the following code works. ```js fn rect(origin) { return startSketchOn(XZ) - |> startProfileAt(origin, %) + |> startProfile(at = origin) |> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001) |> angledLine( angle = segAng(rectangleSegmentA001) - 90, diff --git a/docs/kcl/union.md b/docs/kcl/union.md index b192d282f..68252b23b 100644 --- a/docs/kcl/union.md +++ b/docs/kcl/union.md @@ -36,7 +36,7 @@ union( fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) @@ -61,7 +61,7 @@ unionedPart = union([part001, part002]) fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) @@ -87,7 +87,7 @@ unionedPart = part001 + part002 fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) diff --git a/docs/kcl/xLine.md b/docs/kcl/xLine.md index 1614e2dc5..f5aceb9fb 100644 --- a/docs/kcl/xLine.md +++ b/docs/kcl/xLine.md @@ -36,7 +36,7 @@ xLine( ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = 15) |> angledLine(angle = 80, length = 15) |> line(end = [8, -10]) diff --git a/docs/kcl/yLine.md b/docs/kcl/yLine.md index 6f7d38e20..7485c571f 100644 --- a/docs/kcl/yLine.md +++ b/docs/kcl/yLine.md @@ -36,7 +36,7 @@ yLine( ```js exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(length = 15) |> angledLine(angle = 30, length = 15) |> line(end = [8, -10]) diff --git a/e2e/playwright/basic-sketch.spec.ts b/e2e/playwright/basic-sketch.spec.ts index 5abf1722a..788cef611 100644 --- a/e2e/playwright/basic-sketch.spec.ts +++ b/e2e/playwright/basic-sketch.spec.ts @@ -57,7 +57,7 @@ async function doBasicSketch( await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10) if (openPanes.includes('code')) { await expect(u.codeLocator).toContainText( - `sketch001 = startSketchOn(XZ)profile001 = startProfileAt(${commonPoints.startAt}, sketch001)` + `sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${commonPoints.startAt})` ) } await page.waitForTimeout(500) @@ -67,7 +67,7 @@ async function doBasicSketch( if (openPanes.includes('code')) { await expect( u.codeLocator - ).toHaveText(`sketch001 = startSketchOn(XZ)profile001 = startProfileAt(${commonPoints.startAt}, sketch001) + ).toHaveText(`sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${commonPoints.startAt}) |> xLine(length = ${commonPoints.num1})`) } await page.waitForTimeout(500) @@ -75,9 +75,9 @@ async function doBasicSketch( if (openPanes.includes('code')) { await expect( u.codeLocator - ).toHaveText(`sketch001 = startSketchOn(XZ)profile001 = startProfileAt(${ + ).toHaveText(`sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${ commonPoints.startAt - }, sketch001) + }) |> xLine(length = ${commonPoints.num1}) |> yLine(length = ${commonPoints.num1 + 0.01})`) } else { @@ -88,9 +88,9 @@ async function doBasicSketch( if (openPanes.includes('code')) { await expect( u.codeLocator - ).toHaveText(`@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfileAt(${ + ).toHaveText(`@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, ${ commonPoints.startAt - }, sketch001) + }) |> xLine(length = ${commonPoints.num1}) |> yLine(length = ${commonPoints.num1 + 0.01}) |> xLine(length = ${commonPoints.num2 * -1})`) @@ -146,9 +146,9 @@ async function doBasicSketch( await u.openKclCodePanel() await expect( u.codeLocator - ).toHaveText(`@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfileAt(${ + ).toHaveText(`@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${ commonPoints.startAt - }, sketch001) + }) |> xLine(length = ${commonPoints.num1}, tag = $seg01) |> yLine(length = ${commonPoints.num1 + 0.01}) |> xLine(length = -segLen(seg01))`) diff --git a/e2e/playwright/can-create-sketches-on-all-planes-and-their-back-sides.spec.ts b/e2e/playwright/can-create-sketches-on-all-planes-and-their-back-sides.spec.ts index bda3c3b71..3ec4f1332 100644 --- a/e2e/playwright/can-create-sketches-on-all-planes-and-their-back-sides.spec.ts +++ b/e2e/playwright/can-create-sketches-on-all-planes-and-their-back-sides.spec.ts @@ -46,7 +46,7 @@ test.describe('Can create sketches on all planes and their back sides', () => { }, } - const code = `@settings(defaultLengthUnit = in)sketch001 = startSketchOn(${plane})profile001 = startProfileAt([0.91, -1.22], sketch001)` + const code = `@settings(defaultLengthUnit = in)sketch001 = startSketchOn(${plane})profile001 = startProfile(sketch001, at = [0.91, -1.22])` await u.openDebugPanel() diff --git a/e2e/playwright/code-pane-and-errors.spec.ts b/e2e/playwright/code-pane-and-errors.spec.ts index 52989c8e8..30554acfe 100644 --- a/e2e/playwright/code-pane-and-errors.spec.ts +++ b/e2e/playwright/code-pane-and-errors.spec.ts @@ -22,7 +22,7 @@ test.describe('Code pane and errors', () => { `@settings(defaultLengthUnit = in) // Extruded Triangle sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [-5, 10]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) diff --git a/e2e/playwright/command-bar-tests.spec.ts b/e2e/playwright/command-bar-tests.spec.ts index 0b67e7556..bbf57af76 100644 --- a/e2e/playwright/command-bar-tests.spec.ts +++ b/e2e/playwright/command-bar-tests.spec.ts @@ -14,7 +14,7 @@ test.describe('Command bar tests', () => { localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> xLine(length = -20) @@ -53,7 +53,7 @@ test.describe('Command bar tests', () => { localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XY) - |> startProfileAt([-5, -5], %) + |> startProfile(at = [-5, -5]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) @@ -236,7 +236,7 @@ test.describe('Command bar tests', () => { 'persistCode', `distance = sqrt(20) sketch001 = startSketchOn(XZ) - |> startProfileAt([-6.95, 10.98], %) + |> startProfile(at = [-6.95, 10.98]) |> line(end = [25.1, 0.41]) |> line(end = [0.73, -20.93]) |> line(end = [-23.44, 0.52]) diff --git a/e2e/playwright/copilot-ghost-test.spec.ts b/e2e/playwright/copilot-ghost-test.spec.ts index c507176d4..a178da769 100644 --- a/e2e/playwright/copilot-ghost-test.spec.ts +++ b/e2e/playwright/copilot-ghost-test.spec.ts @@ -20,7 +20,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-ghostText').first()).toBeVisible() await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` @@ -29,7 +29,7 @@ test.describe('Copilot ghost text', () => { // We should be able to hit Tab to accept the completion. await page.keyboard.press('Tab') await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) // Hit enter a few times. @@ -37,7 +37,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20) ` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20) ` ) await expect(page.locator('.cm-ghostText')).not.toBeVisible() @@ -80,7 +80,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` @@ -89,7 +89,7 @@ test.describe('Copilot ghost text', () => { // We should be able to hit Tab to accept the completion. await page.keyboard.press('Tab') await expect(page.locator('.cm-content')).toContainText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) }) @@ -156,7 +156,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-content')).toHaveText( - `sketch001 = startSketchOn(XZ)fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `sketch001 = startSketchOn(XZ)fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` @@ -165,7 +165,7 @@ test.describe('Copilot ghost text', () => { // We should be able to hit Tab to accept the completion. await page.keyboard.press('Tab') await expect(page.locator('.cm-content')).toHaveText( - `sketch001 = startSketchOn(XZ)fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `sketch001 = startSketchOn(XZ)fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) // Hit enter a few times. @@ -173,7 +173,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-content')).toHaveText( - `sketch001 = startSketchOn(XZ)fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20) ` + `sketch001 = startSketchOn(XZ)fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20) ` ) await expect(page.locator('.cm-ghostText')).not.toBeVisible() @@ -194,7 +194,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-ghostText').first()).toBeVisible() await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` @@ -225,7 +225,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-ghostText').first()).toBeVisible() await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` @@ -256,7 +256,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-ghostText').first()).toBeVisible() await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` @@ -287,7 +287,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-ghostText').first()).toBeVisible() await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` @@ -315,7 +315,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-ghostText').first()).toBeVisible() await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` @@ -326,7 +326,7 @@ test.describe('Copilot ghost text', () => { await expect(page.locator('.cm-ghostText').first()).toBeVisible() await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) }) @@ -348,7 +348,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-ghostText').first()).toBeVisible() await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` @@ -409,7 +409,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-ghostText').first()).toBeVisible() await expect(page.locator('.cm-content')).toHaveText( - `{thing: "blah"}fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `{thing: "blah"}fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` @@ -450,7 +450,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-ghostText').first()).toBeVisible() await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` @@ -483,7 +483,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-ghostText').first()).toBeVisible() await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` @@ -514,7 +514,7 @@ test.describe('Copilot ghost text', () => { await page.keyboard.press('Enter') await expect(page.locator('.cm-ghostText').first()).toBeVisible() await expect(page.locator('.cm-content')).toHaveText( - `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` + `fn cube = (pos, scale) => { sg = startSketchOn(XY) |> startProfile(at = pos) |> line(end = [0, scale], %) |> line(end = [scale, 0]) |> line(end = [0, -scale]) return sg}part001 = cube([0,0], 20) |> close() |> extrude(length = 20)` ) await expect(page.locator('.cm-ghostText').first()).toHaveText( `fn cube = (pos, scale) => {` diff --git a/e2e/playwright/debug-pane.spec.ts b/e2e/playwright/debug-pane.spec.ts index 81514761f..5fa807a59 100644 --- a/e2e/playwright/debug-pane.spec.ts +++ b/e2e/playwright/debug-pane.spec.ts @@ -18,7 +18,7 @@ test.describe('Debug pane', () => { homePage, }) => { const code = `sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [1, 1]) ` const u = await getUtils(page) diff --git a/e2e/playwright/editor-tests.spec.ts b/e2e/playwright/editor-tests.spec.ts index 64f3e281f..ba7dc4ab1 100644 --- a/e2e/playwright/editor-tests.spec.ts +++ b/e2e/playwright/editor-tests.spec.ts @@ -21,7 +21,7 @@ test.describe('Editor tests', () => { await u.codeLocator.click() await page.keyboard.type(`sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -34,7 +34,7 @@ test.describe('Editor tests', () => { await expect(page.locator('.cm-content')).toHaveText( `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -49,7 +49,7 @@ sketch001 = startSketchOn(XY) await expect(page.locator('.cm-content')).toHaveText( `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -69,7 +69,7 @@ sketch001 = startSketchOn(XY) await u.codeLocator.click() await page.keyboard.type(`sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -122,7 +122,7 @@ sketch001 = startSketchOn(XY) await u.codeLocator.click() await page.keyboard.type(`sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -177,7 +177,7 @@ sketch001 = startSketchOn(XY) await u.codeLocator.click() await page.keyboard.type(`sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -188,7 +188,7 @@ sketch001 = startSketchOn(XY) await expect(page.locator('.cm-content')).toHaveText( `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -210,7 +210,7 @@ sketch001 = startSketchOn(XY) await u.codeLocator.click() await page.keyboard.type(`sketch_001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -239,7 +239,7 @@ sketch001 = startSketchOn(XY) await expect(page.locator('.cm-content')).toHaveText( `@settings(defaultLengthUnit = in) sketch_001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -258,7 +258,7 @@ sketch_001 = startSketchOn(XY) test('fold gutters work', async ({ page, homePage }) => { const fullCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -267,7 +267,7 @@ sketch_001 = startSketchOn(XY) localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -336,7 +336,7 @@ sketch_001 = startSketchOn(XY) localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -383,7 +383,7 @@ sketch_001 = startSketchOn(XY) localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -411,7 +411,7 @@ sketch_001 = startSketchOn(XY) await expect( page.locator('.cm-content') ).toHaveText(`sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -427,7 +427,7 @@ sketch_001 = startSketchOn(XY) localStorage.setItem( 'persistCode', `sketch_001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -465,7 +465,7 @@ sketch_001 = startSketchOn(XY) await expect( page.locator('.cm-content') ).toHaveText(`sketch_001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -536,7 +536,7 @@ sketch_001 = startSketchOn(XY) localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XZ) - |> startProfileAt([3.29, 7.86], %) + |> startProfile(at = [3.29, 7.86]) |> line(end = [2.48, 2.44]) |> line(end = [2.66, 1.17]) |> close() @@ -661,7 +661,7 @@ sketch_001 = startSketchOn(XY) fn squareHole = (l, w) => { squareHoleSketch = startSketchOn(XY) - |> startProfileAt([-width / 2, -length / 2], %) + |> startProfile(at = [-width / 2, -length / 2]) |> line(endAbsolute = [width / 2, -length / 2]) |> line(endAbsolute = [width / 2, length / 2]) |> line(endAbsolute = [-width / 2, length / 2]) @@ -724,7 +724,7 @@ sketch_001 = startSketchOn(XY) localStorage.setItem( 'persistCode', `box = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $revolveAxis) @@ -732,7 +732,7 @@ sketch_001 = startSketchOn(XY) |> extrude(length = 10) sketch001 = startSketchOn(box, face = revolveAxis) - |> startProfileAt([5, 10], %) + |> startProfile(at = [5, 10]) |> line(end = [0, -10]) |> line(end = [2, 0]) |> line(end = [0, -10]) @@ -793,10 +793,10 @@ sketch_001 = startSketchOn(XY) await page.keyboard.press('Tab') await page.waitForTimeout(100) - await page.keyboard.type('12') - await page.waitForTimeout(100) await page.keyboard.press('Tab') await page.waitForTimeout(100) + await page.keyboard.type('12') + await page.waitForTimeout(100) await page.keyboard.press('Tab') await page.waitForTimeout(100) await page.keyboard.press('Tab') @@ -828,7 +828,7 @@ sketch_001 = startSketchOn(XY) await expect(page.locator('.cm-content')).toHaveText( `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) - |> startProfileAt([3.14, 12], %) + |> startProfile(%, at = [3.14, 12]) |> xLine(%, length = 5) // lin`.replaceAll('\n', '') ) @@ -868,9 +868,9 @@ sketch001 = startSketchOn(XZ) await page.keyboard.press('Tab') // accepting the auto complete, not a new line await page.keyboard.press('Tab') - await page.keyboard.type('12') await page.waitForTimeout(100) await page.keyboard.press('Tab') + await page.keyboard.type('12') await page.waitForTimeout(100) await page.keyboard.press('Tab') await page.waitForTimeout(100) @@ -903,7 +903,7 @@ sketch001 = startSketchOn(XZ) await expect(page.locator('.cm-content')).toHaveText( `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) - |> startProfileAt([3.14, 12], %) + |> startProfile(%, at = [3.14, 12]) |> xLine(%, length = 5) // lin`.replaceAll('\n', '') ) }) @@ -918,7 +918,7 @@ sketch001 = startSketchOn(XZ) localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XZ) - |> startProfileAt([4.61, -14.01], %) + |> startProfile(at = [4.61, -14.01]) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -5.38]) |> close()` @@ -954,7 +954,7 @@ sketch001 = startSketchOn(XZ) }) await page.waitForTimeout(100) - await page.getByText('startProfileAt([4.61, -14.01], %)').click() + await page.getByText('startProfile(at = [4.61, -14.01])').click() await expect(page.getByRole('button', { name: 'Extrude' })).toBeVisible() await page.getByRole('button', { name: 'Extrude' }).click() @@ -969,7 +969,7 @@ sketch001 = startSketchOn(XZ) // expect the code to have changed await expect(page.locator('.cm-content')).toHaveText( - `sketch001 = startSketchOn(XZ) |> startProfileAt([4.61, -14.01], %) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -5.38]) |> close()extrude001 = extrude(sketch001, length = 5)` + `sketch001 = startSketchOn(XZ) |> startProfile(at = [4.61, -14.01]) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -5.38]) |> close()extrude001 = extrude(sketch001, length = 5)` ) // Now hit undo @@ -981,7 +981,7 @@ sketch001 = startSketchOn(XZ) await expect( page.locator('.cm-content') ).toHaveText(`sketch001 = startSketchOn(XZ) - |> startProfileAt([4.61, -14.01], %) + |> startProfile(at = [4.61, -14.01]) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -5.38]) |> close()`) @@ -998,7 +998,7 @@ sketch001 = startSketchOn(XZ) 'persistCode', `@settings(defaultLengthUnit=in) sketch001 = startSketchOn(XZ) - |> startProfileAt([4.61, -10.01], %) + |> startProfile(at = [4.61, -10.01]) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -0.38]) |> close() @@ -1039,7 +1039,7 @@ sketch001 = startSketchOn(XZ) const dragPX = 40 - await page.getByText('startProfileAt([4.61, -10.01], %)').click() + await page.getByText('startProfile(at = [4.61, -10.01])').click() await expect( page.getByRole('button', { name: 'Edit Sketch' }) ).toBeVisible() @@ -1089,7 +1089,7 @@ sketch001 = startSketchOn(XZ) // expect the code to have changed await editor.expectEditor.toContain( `sketch001 = startSketchOn(XZ) - |> startProfileAt([2.71, -2.71], %) + |> startProfile(at = [2.71, -2.71]) |> line(end = [15.4, -2.78]) |> tangentialArc(endAbsolute = [27.6, -3.05]) |> close() @@ -1104,7 +1104,7 @@ sketch001 = startSketchOn(XZ) await editor.expectEditor.toContain( `sketch001 = startSketchOn(XZ) - |> startProfileAt([2.71, -2.71], %) + |> startProfile(at = [2.71, -2.71]) |> line(end = [15.4, -2.78]) |> tangentialArc(endAbsolute = [24.95, -0.38]) |> close() @@ -1119,7 +1119,7 @@ sketch001 = startSketchOn(XZ) await editor.expectEditor.toContain( `sketch001 = startSketchOn(XZ) - |> startProfileAt([2.71, -2.71], %) + |> startProfile(at = [2.71, -2.71]) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -0.38]) |> close() @@ -1135,7 +1135,7 @@ sketch001 = startSketchOn(XZ) await page.waitForTimeout(100) await editor.expectEditor.toContain( `sketch001 = startSketchOn(XZ) - |> startProfileAt([4.61, -10.01], %) + |> startProfile(at = [4.61, -10.01]) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -0.38]) |> close() @@ -1288,7 +1288,7 @@ sketch001 = startSketchOn(XZ) localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XZ) - profile001 = startProfileAt([100.00, 100.0], sketch001) + profile001 = startProfile(sketch001, at = [100.00, 100.0]) |> yLine(length = -100.0) |> xLine(length = 200.0) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) diff --git a/e2e/playwright/feature-tree-pane.spec.ts b/e2e/playwright/feature-tree-pane.spec.ts index fb1ee6f41..2bc34ff3e 100644 --- a/e2e/playwright/feature-tree-pane.spec.ts +++ b/e2e/playwright/feature-tree-pane.spec.ts @@ -8,7 +8,7 @@ const FEATURE_TREE_EXAMPLE_CODE = `export fn timesFive(x) { } export fn triangle() { return startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = 10) |> line(end = [-10, -5]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -17,7 +17,7 @@ export fn triangle() { length001 = timesFive(1) * 5 sketch001 = startSketchOn(XZ) - |> startProfileAt([20, 10], %) + |> startProfile(at = [20, 10]) |> line(end = [10, 10]) |> angledLine(angle = -45, length = length001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -27,7 +27,7 @@ triangle() |> extrude(length = 30) plane001 = offsetPlane(XY, offset = 10) sketch002 = startSketchOn(plane001) - |> startProfileAt([-20, 0], %) + |> startProfile(at = [-20, 0]) |> line(end = [5, -15]) |> xLine(length = -10) |> line(endAbsolute = [-40, 0]) @@ -37,7 +37,7 @@ extrude001 = extrude(sketch002, length = 10) ` const FEATURE_TREE_SKETCH_CODE = `sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 0, length = 4, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) @@ -397,9 +397,9 @@ test.describe('Feature Tree pane', () => { const beforeKclCode = `plane001 = offsetPlane(XY, offset = 5) sketch001 = startSketchOn(plane001) profile001 = circle(sketch001, center = [0, 20], radius = 12) -profile002 = startProfileAt([0, 7.25], sketch001) +profile002 = startProfile(sketch001, at = [0, 7.25]) |> xLine(length = 13.3) -profile003 = startProfileAt([0, -4.93], sketch001) +profile003 = startProfile(sketch001, at = [0, -4.93]) |> line(endAbsolute = [-5.56, 0])` await context.folderSetupFn(async (dir) => { const testProject = join(dir, 'test-sample') diff --git a/e2e/playwright/file-tree.spec.ts b/e2e/playwright/file-tree.spec.ts index dcfe922d1..abc0b1f8c 100644 --- a/e2e/playwright/file-tree.spec.ts +++ b/e2e/playwright/file-tree.spec.ts @@ -46,7 +46,7 @@ test.describe('integrations tests', () => { await scene.moveNoWhere() await editor.expectState({ activeLines: [ - '|>startProfileAt([75.8,317.2],%)//[$startCapTag,$EndCapTag]', + '|>startProfile(at=[75.8,317.2])//[$startCapTag,$EndCapTag]', ], highlightedCode: '', diagnostics: [], @@ -75,7 +75,7 @@ test.describe('integrations tests', () => { await page.waitForTimeout(1000) await editor.expectState({ activeLines: [ - '|>startProfileAt([75.8,317.2],%)//[$startCapTag,$EndCapTag]', + '|>startProfile(at=[75.8,317.2])//[$startCapTag,$EndCapTag]', ], highlightedCode: '', diagnostics: [], diff --git a/e2e/playwright/import-ui.spec.ts b/e2e/playwright/import-ui.spec.ts index a02e11a8e..8d87b0b59 100644 --- a/e2e/playwright/import-ui.spec.ts +++ b/e2e/playwright/import-ui.spec.ts @@ -20,7 +20,7 @@ test.describe('Import UI tests', () => { await fsp.writeFile( path.join(projectDir, 'toBeImported.kcl'), `sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([281.54, 305.81], sketch001) +profile001 = startProfile(sketch001, at = [281.54, 305.81]) |> angledLine(angle = 0, length = 123.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 85.99) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -37,7 +37,7 @@ extrude(profile001, length = 100)` importedCube sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([-134.53, -56.17], sketch001) +profile001 = startProfile(sketch001, at = [-134.53, -56.17]) |> angledLine(angle = 0, length = 79.05, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 76.28) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg01) @@ -73,7 +73,7 @@ sketch002 = startSketchOn(extrude001, face = seg01)` await test.step('check code highlight works for code define in the file being edited', async () => { await hoverOverNonImport() await editor.expectState({ - highlightedCode: 'startProfileAt([-134.53,-56.17],sketch001)', + highlightedCode: 'startProfile(sketch001,at = [-134.53,-56.17])', diagnostics: [], activeLines: ['import"toBeImported.kcl"asimportedCube'], }) diff --git a/e2e/playwright/point-click.spec.ts b/e2e/playwright/point-click.spec.ts index 68075fc7b..74876fd85 100644 --- a/e2e/playwright/point-click.spec.ts +++ b/e2e/playwright/point-click.spec.ts @@ -221,7 +221,7 @@ test.describe('Point-and-click tests', () => { afterChamferSelectSnippet: 'sketch002 = startSketchOn(extrude001, face = seg03)', afterRectangle1stClickSnippet: - 'startProfileAt([205.96, 254.59], sketch002)', + 'startProfile(sketch002, at = [205.96, 254.59])', afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.39,tag=$rectangleSegmentA002) |>angledLine(angle=segAng(rectangleSegmentA002)-90,length=105.26) |>angledLine(angle=segAng(rectangleSegmentA002),length=-segLen(rectangleSegmentA002)) @@ -245,7 +245,7 @@ test.describe('Point-and-click tests', () => { afterChamferSelectSnippet: 'sketch003 = startSketchOn(extrude001, face = seg04)', afterRectangle1stClickSnippet: - 'startProfileAt([-209.64, 255.28], sketch003)', + 'startProfile(sketch003, at = [-209.64, 255.28])', afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.56,tag=$rectangleSegmentA003) |>angledLine(angle=segAng(rectangleSegmentA003)-90,length=106.84) |>angledLine(angle=segAng(rectangleSegmentA003),length=-segLen(rectangleSegmentA003)) @@ -267,7 +267,7 @@ test.describe('Point-and-click tests', () => { afterChamferSelectSnippet: 'sketch004 = startSketchOn(extrude001, face = seg05)', afterRectangle1stClickSnippet: - 'startProfileAt([82.57, 322.96], sketch004)', + 'startProfile(sketch004, at = [82.57, 322.96])', afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.16,tag=$rectangleSegmentA004) |>angledLine(angle=segAng(rectangleSegmentA004)-90,length=103.07) |>angledLine(angle=segAng(rectangleSegmentA004),length=-segLen(rectangleSegmentA004)) @@ -285,7 +285,7 @@ test.describe('Point-and-click tests', () => { afterChamferSelectSnippet: 'sketch005 = startSketchOn(extrude001, face = seg06)', afterRectangle1stClickSnippet: - 'startProfileAt([-23.43, 19.69], sketch005)', + 'startProfile(sketch005, at = [-23.43, 19.69])', afterRectangle2ndClickSnippet: `angledLine(angle=0,length=9.1,tag=$rectangleSegmentA005) |>angledLine(angle=segAng(rectangleSegmentA005)-90,length=84.07) |>angledLine(angle=segAng(rectangleSegmentA005),length=-segLen(rectangleSegmentA005)) @@ -297,7 +297,7 @@ test.describe('Point-and-click tests', () => { await editor.expectEditor.toContain( `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) - |> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag] + |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) @@ -309,28 +309,28 @@ extrude001 = extrude(sketch001, length = 100) |> chamfer(length = 30, tags = [getNextAdjacentEdge(seg02)], tag = $seg05) |> chamfer(length = 30, tags = [getNextAdjacentEdge(yo)], tag = $seg06) sketch005 = startSketchOn(extrude001, face = seg06) -profile004=startProfileAt([-23.43,19.69], sketch005) +profile004=startProfile(sketch005, at = [-23.43,19.69]) |> angledLine(angle = 0, length = 9.1, tag = $rectangleSegmentA005) |> angledLine(angle = segAng(rectangleSegmentA005) - 90, length = 84.07) |> angledLine(angle = segAng(rectangleSegmentA005), length = -segLen(rectangleSegmentA005)) |> line(endAbsolute=[profileStartX(%), profileStartY(%)]) |> close() sketch004 = startSketchOn(extrude001, face = seg05) -profile003 = startProfileAt([82.57, 322.96], sketch004) +profile003 = startProfile(sketch004, at = [82.57, 322.96]) |> angledLine(angle = 0, length = 11.16, tag = $rectangleSegmentA004) |> angledLine(angle = segAng(rectangleSegmentA004) - 90, length = 103.07) |> angledLine(angle = segAng(rectangleSegmentA004), length = -segLen(rectangleSegmentA004)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch003 = startSketchOn(extrude001, face = seg04) -profile002 = startProfileAt([-209.64, 255.28], sketch003) +profile002 = startProfile(sketch003, at = [-209.64, 255.28]) |> angledLine(angle = 0, length = 11.56, tag = $rectangleSegmentA003) |> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = 106.84) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch002 = startSketchOn(extrude001, face = seg03) -profile001 = startProfileAt([205.96, 254.59], sketch002) +profile001 = startProfile(sketch002, at = [205.96, 254.59]) |> angledLine(angle = 0, length = 11.39, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 105.26) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) @@ -384,7 +384,7 @@ profile001 = startProfileAt([205.96, 254.59], sketch002) afterChamferSelectSnippet: 'sketch002 = startSketchOn(extrude001, face = seg03)', afterRectangle1stClickSnippet: - 'startProfileAt([205.96, 254.59], sketch002)', + 'startProfile(sketch002, at = [205.96, 254.59])', afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.39,tag=$rectangleSegmentA002) |>angledLine(angle=segAng(rectangleSegmentA002)-90,length=105.26) |>angledLine(angle=segAng(rectangleSegmentA002),length=-segLen(rectangleSegmentA002)) @@ -394,7 +394,7 @@ profile001 = startProfileAt([205.96, 254.59], sketch002) await editor.expectEditor.toContain( `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) - |> startProfileAt([75.8, 317.2], %) + |> startProfile(at = [75.8, 317.2]) |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) @@ -416,7 +416,7 @@ chamf = chamfer( ], ) sketch002 = startSketchOn(extrude001, face = seg03) -profile001 = startProfileAt([205.96, 254.59], sketch002) +profile001 = startProfile(sketch002, at = [205.96, 254.59]) |> angledLine(angle = 0, length = 11.39, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 105.26) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) @@ -488,10 +488,10 @@ profile001 = startProfileAt([205.96, 254.59], sketch002) const expectedCodeSnippets = { sketchOnXzPlane: `sketch001 = startSketchOn(XZ)`, - pointAtOrigin: `startProfileAt([${originSloppy.kcl[0]}, ${originSloppy.kcl[1]}], sketch001)`, + pointAtOrigin: `startProfile(sketch001, at = [${originSloppy.kcl[0]}, ${originSloppy.kcl[1]}])`, segmentOnXAxis: `xLine(length = ${xAxisSloppy.kcl[0]})`, - afterSegmentDraggedOffYAxis: `startProfileAt([${offYAxis.kcl[0]}, ${offYAxis.kcl[1]}], sketch001)`, - afterSegmentDraggedOnYAxis: `startProfileAt([${yAxisSloppy.kcl[0]}, ${yAxisSloppy.kcl[1]}], sketch001)`, + afterSegmentDraggedOffYAxis: `startProfile(sketch001, at = [${offYAxis.kcl[0]}, ${offYAxis.kcl[1]}])`, + afterSegmentDraggedOnYAxis: `startProfile(sketch001, at = [${yAxisSloppy.kcl[0]}, ${yAxisSloppy.kcl[1]}])`, } await test.step(`Start a sketch on the XZ plane`, async () => { @@ -546,7 +546,7 @@ profile001 = startProfileAt([205.96, 254.59], sketch002) const initialCode = `closedSketch = startSketchOn(XZ) |> circle(center = [8, 5], radius = 2) openSketch = startSketchOn(XY) - |> startProfileAt([-5, 0], %) + |> startProfile(at = [-5, 0]) |> line(endAbsolute = [0, 5]) |> xLine(length = 5) |> tangentialArc(endAbsolute = [10, 0]) @@ -648,7 +648,7 @@ openSketch = startSketchOn(XY) }) => { // Code samples const initialCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-12, -6], %) + |> startProfile(at = [-12, -6]) |> line(end = [0, 12]) |> line(end = [24, 0]) |> line(end = [0, -12]) @@ -1197,7 +1197,7 @@ openSketch = startSketchOn(XY) }) => { page.on('console', console.log) const initialCode = `sketch001 = startSketchOn(XZ) - profile001 = startProfileAt([0, 0], sketch001) + profile001 = startProfile(sketch001, at = [0, 0]) |> yLine(length = 100) |> line(endAbsolute = [100, 0]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -1637,7 +1637,7 @@ loft001 = loft([sketch001, sketch002]) sketch001 = startSketchOn(YZ) profile001 = circle(sketch001, center = [0, 0], radius = 500) sketch002 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = -500) |> tangentialArc(endAbsolute = [-2000, 500])`, }, @@ -1646,14 +1646,14 @@ sketch002 = startSketchOn(XZ) testPoint: { x: 710, y: 255 }, initialCode: `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(YZ) -profile001 = startProfileAt([-400, -400], sketch001) +profile001 = startProfile(sketch001, at = [-400, -400]) |> angledLine(angle = 0, length = 800, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 800) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch002 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = -500) |> tangentialArc(endAbsolute = [-2000, 500])`, }, @@ -1806,7 +1806,7 @@ sketch001 = startSketchOn(YZ) radius = 500 ) sketch002 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = -500) |> line(endAbsolute = [-2000, 500]) ` @@ -1880,7 +1880,7 @@ sketch002 = startSketchOn(XZ) }) => { // Code samples const initialCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-12, -6], %) + |> startProfile(at = [-12, -6]) |> line(end = [0, 12]) |> line(end = [24, 0]) |> line(end = [0, -12]) @@ -2221,7 +2221,7 @@ fillet001 = fillet(extrude001, radius = 5, tags = [getOppositeEdge(seg01)]) }) => { // Code samples const initialCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-12, -6], %) + |> startProfile(at = [-12, -6]) |> line(end = [0, 12]) |> line(end = [24, 0], tag = $seg02) |> line(end = [0, -12]) @@ -2364,7 +2364,7 @@ fillet04 = fillet(extrude001, radius = 5, tags = [getOppositeEdge(seg02)]) }) => { // Create a cube with small edges that will cause some fillets to fail const initialCode = `sketch001 = startSketchOn(XY) -profile001 = startProfileAt([0, 0], sketch001) +profile001 = startProfile(sketch001, at = [0, 0]) |> yLine(length = -1) |> xLine(length = -10) |> yLine(length = 10) @@ -2478,7 +2478,7 @@ extrude001 = extrude(profile001, length = 5) // Code samples const initialCode = `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XY) - |> startProfileAt([-12, -6], %) + |> startProfile(at = [-12, -6]) |> line(end = [0, 12]) |> line(end = [24, 0]) |> line(end = [0, -12]) @@ -2779,7 +2779,7 @@ extrude001 = extrude(sketch001, length = -12) // Code samples const initialCode = `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XY) - |> startProfileAt([-12, -6], %) + |> startProfile(at = [-12, -6]) |> line(end = [0, 12]) |> line(end = [24, 0], tag = $seg02) |> line(end = [0, -12]) @@ -3073,7 +3073,7 @@ extrude001 = extrude(sketch001, length = 30) }) => { const initialCode = `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XY) - |> startProfileAt([-20, 20], %) + |> startProfile(at = [-20, 20]) |> xLine(length = 40) |> yLine(length = -60) |> xLine(length = -40) @@ -3305,7 +3305,7 @@ extrude002 = extrude(sketch002, length = 50) cmdBar, }) => { const sketchCode = `sketch001 = startSketchOn(XY) -profile001 = startProfileAt([-20, 20], sketch001) +profile001 = startProfile(sketch001, at = [-20, 20]) |> xLine(length = 40) |> yLine(length = -60) |> xLine(length = -40) @@ -3393,7 +3393,7 @@ profile001 = startProfileAt([-20, 20], sketch001) radius = 500 ) sketch002 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = -2000) sweep001 = sweep(sketch001, path = sketch002) ` @@ -3451,7 +3451,7 @@ sweep001 = sweep(sketch001, path = sketch002) }) => { const initialCode = ` sketch001 = startSketchOn(XZ) -|> startProfileAt([-100.0, 100.0], %) +|> startProfile(at = [-100.0, 100.0]) |> angledLine(angle = 0, length = 200.0, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 200, tag = $rectangleSegmentB001) |> angledLine( @@ -3463,7 +3463,7 @@ tag=$rectangleSegmentC001, |> close() extrude001 = extrude(sketch001, length = 200) sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) -|> startProfileAt([-66.77, 84.81], %) +|> startProfile(at = [-66.77, 84.81]) |> angledLine(angle = 180, length = 27.08, tag = $rectangleSegmentA002) |> angledLine( angle=segAng(rectangleSegmentA002) - 90, @@ -3543,7 +3543,7 @@ tag=$rectangleSegmentC002, cmdBar, }) => { const initialCode = `sketch001 = startSketchOn(XZ) - |> startProfileAt([-102.57, 101.72], %) + |> startProfile(at = [-102.57, 101.72]) |> angledLine(angle = 0, length = 202.6, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 202.6, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) @@ -3628,10 +3628,10 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) }) => { const initialCode = ` sketch002 = startSketchOn(XY) - |> startProfileAt([-2.02, 1.79], %) + |> startProfile(at = [-2.02, 1.79]) |> xLine(length = 2.6) sketch001 = startSketchOn('-XY') - |> startProfileAt([-0.48, 1.25], %) + |> startProfile(at = [-0.48, 1.25]) |> angledLine(angle = 0, length = 2.38, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2.4, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) diff --git a/e2e/playwright/projects.spec.ts b/e2e/playwright/projects.spec.ts index f6f5addf7..d8b45a6e5 100644 --- a/e2e/playwright/projects.spec.ts +++ b/e2e/playwright/projects.spec.ts @@ -1450,7 +1450,7 @@ test( ) await page.locator('.cm-content').fill(`sketch001 = startSketchOn('XZ') - |> startProfileAt([-87.4, 282.92], %) + |> startProfile(at = [-87.4, 282.92]) |> line(end = [324.07, 27.199], tag = $seg01) |> line(end = [118.328, -291.754]) |> line(end = [-180.04, -202.08]) diff --git a/e2e/playwright/prompt-to-edit-snapshot-tests.spec.ts b/e2e/playwright/prompt-to-edit-snapshot-tests.spec.ts index 14b102ebc..0a1250703 100644 --- a/e2e/playwright/prompt-to-edit-snapshot-tests.spec.ts +++ b/e2e/playwright/prompt-to-edit-snapshot-tests.spec.ts @@ -23,7 +23,7 @@ import { expect, test } from '@e2e/playwright/zoo-test' */ const file = `sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([57.81, 250.51], sketch001) +profile001 = startProfile(sketch001, at = [57.81, 250.51]) |> line(end = [121.13, 56.63], tag = $seg02) |> line(end = [83.37, -34.61], tag = $seg01) |> line(end = [19.66, -116.4]) @@ -32,7 +32,7 @@ profile001 = startProfileAt([57.81, 250.51], sketch001) |> close() extrude001 = extrude(profile001, length = 200) sketch002 = startSketchOn(XZ) - |> startProfileAt([-73.64, -42.89], %) + |> startProfile(at = [-73.64, -42.89]) |> xLine(length = 173.71) |> line(end = [-22.12, -94.4]) |> xLine(length = -156.98) @@ -40,7 +40,7 @@ sketch002 = startSketchOn(XZ) |> close() extrude002 = extrude(sketch002, length = 50) sketch003 = startSketchOn(XY) - |> startProfileAt([52.92, 157.81], %) + |> startProfile(at = [52.92, 157.81]) |> angledLine(angle = 0, length = 176.4, tag = $rectangleSegmentA001) |> angledLine( angle = segAng(rectangleSegmentA001) - 90, @@ -74,7 +74,7 @@ test.describe('edit with AI example snapshots', () => { await clickBody1Cap() await editor.expectState({ highlightedCode: '', - activeLines: ['|>startProfileAt([-73.64,-42.89],%)'], + activeLines: ['|>startProfile(at=[-73.64,-42.89])'], diagnostics: [], }) }) diff --git a/e2e/playwright/prompt-to-edit.spec.ts b/e2e/playwright/prompt-to-edit.spec.ts index b42a021d1..4f38c5652 100644 --- a/e2e/playwright/prompt-to-edit.spec.ts +++ b/e2e/playwright/prompt-to-edit.spec.ts @@ -3,7 +3,7 @@ import { expect, test } from '@e2e/playwright/zoo-test' /* eslint-disable jest/no-conditional-expect */ const file = `sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([57.81, 250.51], sketch001) +profile001 = startProfile(sketch001, at = [57.81, 250.51]) |> line(end = [121.13, 56.63], tag = $seg02) |> line(end = [83.37, -34.61], tag = $seg01) |> line(end = [19.66, -116.4]) @@ -12,7 +12,7 @@ profile001 = startProfileAt([57.81, 250.51], sketch001) |> close() extrude001 = extrude(profile001, length = 200) sketch002 = startSketchOn(XZ) - |> startProfileAt([-114, 85.52], %) + |> startProfile(at = [-114, 85.52]) |> xLine(length = 265.36) |> line(end = [33.17, -261.22]) |> xLine(length = -297.25) @@ -20,7 +20,7 @@ sketch002 = startSketchOn(XZ) |> close() extrude002 = extrude(sketch002, length = 50) sketch003 = startSketchOn(XY) - |> startProfileAt([52.92, 157.81], %) + |> startProfile(at = [52.92, 157.81]) |> angledLine(angle = 0, length = 176.4, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 53.4, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) @@ -82,7 +82,7 @@ test.describe('Prompt-to-edit tests', () => { await scene.expectPixelColor(yellow, body1CapCoords, 20) await editor.expectState({ highlightedCode: '', - activeLines: ['|>startProfileAt([-114,85.52],%)'], + activeLines: ['|>startProfile(at=[-114,85.52])'], diagnostics: [], }) }) @@ -170,7 +170,7 @@ test.describe('Prompt-to-edit tests', () => { await editor.expectState({ highlightedCode: '', - activeLines: ['|>startProfileAt([-114,85.52],%)'], + activeLines: ['|>startProfile(at=[-114,85.52])'], diagnostics: [], }) }) @@ -293,7 +293,7 @@ test.describe('Prompt-to-edit tests', () => { // Hold shift and select second body await editor.expectState({ highlightedCode: '', - activeLines: ['|>startProfileAt([-114,85.52],%)'], + activeLines: ['|>startProfile(at=[-114,85.52])'], diagnostics: [], }) await page.keyboard.down('Shift') @@ -304,7 +304,7 @@ test.describe('Prompt-to-edit tests', () => { 'line(end=[121.13,56.63],tag=$seg02)extrude(profile001,length=200)', activeLines: [ '|>line(end=[121.13,56.63],tag=$seg02)', - '|>startProfileAt([-114,85.52],%)', + '|>startProfile(at=[-114,85.52])', ], diagnostics: [], }) diff --git a/e2e/playwright/regression-tests.spec.ts b/e2e/playwright/regression-tests.spec.ts index ad6d8f9df..e96da04fc 100644 --- a/e2e/playwright/regression-tests.spec.ts +++ b/e2e/playwright/regression-tests.spec.ts @@ -29,7 +29,7 @@ test.describe('Regression tests', () => { 'persistCode', `sketch2 = startSketchOn("XY") sketch001 = startSketchOn("XY") - |> startProfileAt([-0, -0], %) + |> startProfile(at = [-0, -0]) |> line(end = [0, 0]) |> line(end = [-4.84, -5.29]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -66,7 +66,7 @@ test.describe('Regression tests', () => { localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XY) - |> startProfileAt([82.33, 238.21], %) + |> startProfile(at = [82.33, 238.21]) |> angledLine(angle = 0, length = 288.63, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 197.97, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) @@ -128,7 +128,7 @@ extrude001 = extrude(sketch001, length = 50) localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(-XZ) - |> startProfileAt([-6.95, 4.98], %) + |> startProfile(at = [-6.95, 4.98]) |> line(end = [25.1, 0.41]) |> line(end = [0.73, -14.93]) |> line(end = [-23.44, 0.52])` @@ -189,7 +189,7 @@ extrude001 = extrude(sketch001, length = 50) localStorage.setItem( 'persistCode', `part = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 1]) |> line(end = [1, 0]) |> line(end = [0, -1]) @@ -250,7 +250,7 @@ extrude001 = extrude(sketch001, length = 50) localStorage.setItem( 'persistCode', `exampleSketch = startSketchOn("XZ") - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 50, length = 45 ) |> yLine(endAbsolute = 0) |> close() @@ -307,7 +307,7 @@ extrude001 = extrude(sketch001, length = 50) await expect( page.locator('.cm-content') ).toContainText(`exampleSketch = startSketchOn("XZ") - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 50, length = 45 ) |> yLine(endAbsolute = 0) |> close() @@ -327,7 +327,7 @@ extrude001 = extrude(sketch001, length = 50) 'persistCode', `@settings(defaultLengthUnit = mm) sketch002 = startSketchOn(XY) -profile002 = startProfileAt([72.24, -52.05], sketch002) +profile002 = startProfile(sketch002, at = [72.24, -52.05]) |> angledLine(angle = 0, length = 181.26, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 21.54) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) diff --git a/e2e/playwright/sketch-tests.spec.ts b/e2e/playwright/sketch-tests.spec.ts index 85f9c7857..c62e3feab 100644 --- a/e2e/playwright/sketch-tests.spec.ts +++ b/e2e/playwright/sketch-tests.spec.ts @@ -26,9 +26,9 @@ test.describe('Sketch tests', () => { const u = await getUtils(page) const selectionsSnippets = { startProfileAt1: - '|> startProfileAt([-width / 4 + screwRadius, height / 2], %)', - startProfileAt2: '|> startProfileAt([-width / 2, 0], %)', - startProfileAt3: '|> startProfileAt([0, thickness], %)', + '|> startProfile(at = [-width / 4 + screwRadius, height / 2])', + startProfileAt2: '|> startProfile(at = [-width / 2, 0])', + startProfileAt3: '|> startProfile(at = [0, thickness])', } await context.addInitScript( async ({ startProfileAt1, startProfileAt2, startProfileAt3 }: any) => { @@ -108,7 +108,7 @@ test.describe('Sketch tests', () => { 'persistCode', `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) - |> startProfileAt([2.61, -4.01], %) + |> startProfile(at = [2.61, -4.01]) |> xLine(length = 8.73) |> tangentialArc(endAbsolute = [8.33, -1.31])` ) @@ -158,7 +158,7 @@ sketch001 = startSketchOn(XZ) sketch002 = startSketchOn(XZ) -sketch001 = startProfileAt([12.34, -12.34], sketch002) +sketch001 = startProfile(sketch002, at = [12.34, -12.34]) |> yLine(length = 12.34) `) @@ -201,7 +201,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002) localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XZ) - |> startProfileAt([4.61, -14.01], %) + |> startProfile(at = [4.61, -14.01]) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -5.38]) |> arc(interiorAbsolute = [20.18, -1.7], endAbsolute = [11.82, -1.16]) @@ -244,7 +244,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002) // If we have the code pane open, we should see the code. if (openPanes.includes('code')) { await expect(u.codeLocator).toHaveText(`sketch001 = startSketchOn(XZ) - |> startProfileAt([4.61, -14.01], %) + |> startProfile(at = [4.61, -14.01]) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -5.38]) |> arc(interiorAbsolute = [20.18, -1.7], endAbsolute = [11.82, -1.16]) @@ -262,7 +262,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002) let prevContent = '' if (openPanes.includes('code')) { - await page.getByText('startProfileAt([4.61, -14.01], %)').click() + await page.getByText('startProfile(at = [4.61, -14.01])').click() } else { // Wait for the render. await page.waitForTimeout(1000) @@ -383,7 +383,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002) await expect( page.locator('.cm-content') ).toHaveText(`sketch001 = startSketchOn(XZ) - |> startProfileAt([6.44, -12.07], %) + |> startProfile(at = [6.44, -12.07]) |> line(end = [14.72, 1.97]) |> tangentialArc(endAbsolute = [26.92, -3.32]) |> arc(interiorAbsolute = [18.11, -3.73], endAbsolute = [9.77, -3.19]) @@ -550,7 +550,7 @@ sketch001 = startSketchOn(XZ) 'persistCode', `@settings(defaultLengthUnit=in) sketch001 = startSketchOn(XZ) - |> startProfileAt([4.61, -10.01], %) + |> startProfile(at = [4.61, -10.01]) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -0.38]) |> close() @@ -590,7 +590,7 @@ sketch001 = startSketchOn(XZ) const dragPX = 40 - await page.getByText('startProfileAt([4.61, -10.01], %)').click() + await page.getByText('startProfile(at = [4.61, -10.01])').click() await expect( page.getByRole('button', { name: 'Edit Sketch' }) ).toBeVisible() @@ -636,7 +636,7 @@ sketch001 = startSketchOn(XZ) // expect the code to have changed await editor.expectEditor.toContain( `sketch001 = startSketchOn(XZ) - |> startProfileAt([7.12, -12.68], %) + |> startProfile(at = [7.12, -12.68]) |> line(end = [12.68, -1.09]) |> tangentialArc(endAbsolute = [24.89, 0.68]) |> close() @@ -658,7 +658,7 @@ sketch001 = startSketchOn(XZ) 'persistCode', `@settings(defaultLengthUnit=in) sketch001 = startSketchOn(XZ) - |> startProfileAt([4.61, -14.01], %) + |> startProfile(at = [4.61, -14.01]) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -5.38]) |> close() @@ -699,7 +699,7 @@ sketch001 = startSketchOn(XZ) const dragPX = 30 - await page.getByText('startProfileAt([4.61, -14.01], %)').click() + await page.getByText('startProfile(at = [4.61, -14.01])').click() await expect( page.getByRole('button', { name: 'Edit Sketch' }) ).toBeVisible() @@ -744,7 +744,7 @@ sketch001 = startSketchOn(XZ) // expect the code to have changed await editor.expectEditor.toContain( `sketch001 = startSketchOn(XZ) - |> startProfileAt([6.44, -12.07], %) + |> startProfile(at = [6.44, -12.07]) |> line(end = [14.72, 1.97]) |> tangentialArc(endAbsolute = [24.95, -5.38]) |> line(end = [1.97, 2.06]) @@ -788,7 +788,7 @@ sketch001 = startSketchOn(XZ) await page.waitForTimeout(500) // TODO detect animation ending, or disable animation await click00r(0, 0) - codeStr += `profile001 = startProfileAt(${toSU([0, 0])}, sketch001)` + codeStr += `profile001 = startProfile(sketch001, at = ${toSU([0, 0])})` await expect(u.codeLocator).toHaveText(codeStr) await click00r(50, 0) @@ -824,7 +824,7 @@ sketch001 = startSketchOn(XZ) await u.closeDebugPanel() await click00r(30, 0) - codeStr += `profile002 = startProfileAt([2.03, 0], sketch002)` + codeStr += `profile002 = startProfile(sketch002, at = [2.03, 0])` await expect(u.codeLocator).toHaveText(codeStr) // TODO: I couldn't use `toSU` here because of some rounding error causing @@ -861,9 +861,9 @@ sketch001 = startSketchOn(XZ) const code = `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(-XZ) -profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff( +profile001 = startProfile(sketch001, at = [${roundOff(scale * 69.6)}, ${roundOff( scale * 34.8 - )}], sketch001) + )}]) |> xLine(length = ${roundOff(scale * 139.19)}) |> yLine(length = -${roundOff(scale * 139.2)}) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -968,7 +968,7 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff( localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XZ) - |> startProfileAt([-0.45, 0.87], %) + |> startProfile(at = [-0.45, 0.87]) |> line(end = [1.32, 0.38]) |> line(end = [1.02, -1.32], tag = $seg01) |> line(end = [-1.01, -0.77]) @@ -1026,7 +1026,7 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff( localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XZ) - |> startProfileAt([-0.45, 0.87], %) + |> startProfile(at = [-0.45, 0.87]) |> line(end = [1.32, 0.38]) |> line(end = [1.02, -1.32], tag = $seg01) |> line(end = [-1.01, -0.77]) @@ -1069,7 +1069,7 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff( await expect((await u.codeLocator.innerText()).replace(/\s/g, '')).toBe( `sketch001 = startSketchOn(XZ) - |> startProfileAt([-0.45, 0.87], %) + |> startProfile(at = [-0.45, 0.87]) |> line(end = [1.32, 0.38]) |> line(end = [1.02, -1.32], tag = $seg01) |> line(end = [-1.01, -0.77]) @@ -1121,7 +1121,7 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff( await u.openAndClearDebugPanel() await u.codeLocator.fill(`sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> xLine(length = -20) @@ -1160,7 +1160,7 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff( await page.waitForTimeout(200) await page.mouse.click(XYPlanePoint.x + 50, XYPlanePoint.y + 50) await expect(u.codeLocator).toHaveText(`sketch001 = startSketchOn(XZ) - |> startProfileAt([11.8, 9.09], %) + |> startProfile(at = [11.8, 9.09]) |> line(end = [3.39, -3.39]) `) @@ -1168,7 +1168,7 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff( localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XZ) - |> startProfileAt([11.8, 9.09], %) + |> startProfile(at = [11.8, 9.09]) |> line(end = [3.39, -3.39]) ` ) @@ -1197,7 +1197,7 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff( fn lug = (origin, length, diameter, plane) => { lugSketch = startSketchOn(plane) - |> startProfileAt([origin[0] + lugDiameter / 2, origin[1]], %) + |> startProfile(at = [origin[0] + lugDiameter / 2, origin[1]]) |> angledLine(angle = 60, lengthY = lugHeadLength) |> xLine(endAbsolute = 0 + .001) |> yLine(endAbsolute = 0) @@ -1267,10 +1267,7 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff( const railClampable = in2mm(.200) const rail = startSketchOn(XZ) - |> startProfileAt([ - -railTop / 2, - railClampable + railBaseLength - ], %) + |> startProfile(at = [-railTop / 2, railClampable + railBaseLength]) |> line(endAbsolute = [ railTop / 2, railClampable + railBaseLength @@ -1405,12 +1402,12 @@ test.describe('multi-profile sketching', () => { 'persistCode', `yo = 5 sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([121.52, 168.25], sketch001) +profile001 = startProfile(sketch001, at = [121.52, 168.25]) |> line(end = [115.04, 113.61]) |> line(end = [130.87, -97.79]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() -profile002 = startProfileAt([117.2, 56.08], sketch001) +profile002 = startProfile(sketch001, at = [117.2, 56.08]) |> line(end = [166.82, 25.89]) |> yLine(length = -107.86) @@ -1490,12 +1487,12 @@ profile002 = startProfileAt([117.2, 56.08], sketch001) await toolbar.rectangleBtn.click() await page.waitForTimeout(100) await cornerRectPoint1() - await editor.expectEditor.toContain('profile004 = startProfileAt(') + await editor.expectEditor.toContain('profile004 = startProfile(') }) await test.step('equip line tool and verify corner rectangle code is removed', async () => { await toolbar.lineBtn.click() - await editor.expectEditor.not.toContain('profile004 = startProfileAt(') + await editor.expectEditor.not.toContain('profile004 = startProfile(') }) const [centerRectPoint1] = scene.makeMouseHelpers(700, 300) @@ -1504,12 +1501,12 @@ profile002 = startProfileAt([117.2, 56.08], sketch001) await toolbar.selectCenterRectangle() await page.waitForTimeout(100) await centerRectPoint1() - await editor.expectEditor.toContain('profile004 = startProfileAt(') + await editor.expectEditor.toContain('profile004 = startProfile(') }) await test.step('equip line tool and verify center rectangle code is removed', async () => { await toolbar.lineBtn.click() - await editor.expectEditor.not.toContain('profile004 = startProfileAt(') + await editor.expectEditor.not.toContain('profile004 = startProfile(') }) await test.step('continue profile002 with the three point arc tool, and then switch back to the line tool to verify it only removes the last expression in the pipe', async () => { @@ -1540,9 +1537,9 @@ profile002 = startProfileAt([117.2, 56.08], sketch001) `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) -profile002 = startProfileAt([40.68, 87.67], sketch001) +profile002 = startProfile(sketch001, at = [40.68, 87.67]) |> xLine(length = 239.17) -profile003 = startProfileAt([206.63, -56.73], sketch001) +profile003 = startProfile(sketch001, at = [206.63, -56.73]) |> xLine(length = -156.32) ` ) @@ -1649,7 +1646,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) .toBe('true') await startProfile1() - await editor.expectEditor.toContain(`profile001 = startProfileAt`) + await editor.expectEditor.toContain(`profile001 = startProfile`) await segment1Clk() await editor.expectEditor.toContain(`|> line(end`) }) @@ -1682,7 +1679,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) await test.step('add two segments', async () => { await startProfile1() await editor.expectEditor.toContain( - `profile001 = startProfileAt([4.61, 12.21], sketch001)` + `profile001 = startProfile(sketch001, at = [4.61, 12.21])` ) await segment1Clk() await editor.expectEditor.toContain(`|> line(end`) @@ -1778,7 +1775,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) await test.step('Create a close profile stopping mid profile to equip the tangential arc, then three-point arc, and then back to the line tool', async () => { await startProfile1() await editor.expectEditor.toContain( - `profile001 = startProfileAt([4.61, 12.21], sketch001)` + `profile001 = startProfile(sketch001, at = [4.61, 12.21])` ) await endLineStartTanArc() @@ -1847,7 +1844,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) await startProfile2() await page.waitForTimeout(300) await editor.expectEditor.toContain( - `profile002 = startProfileAt([19.12, 11.53], sketch001)` + `profile002 = startProfile(sketch001, at = [19.12, 11.53])` ) await profile2Point2() await page.waitForTimeout(300) @@ -1890,7 +1887,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) await crnRect1point1() await editor.expectEditor.toContain( - `profile005 = startProfileAt([5.63, 3.05], sketch001)` + `profile005 = startProfile(sketch001, at = [5.63, 3.05])` ) await crnRect1point2() await editor.expectEditor.toContain( @@ -1904,7 +1901,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) await crnRect2point1() await page.waitForTimeout(300) await editor.expectEditor.toContain( - `profile006 = startProfileAt([11.05, 2.37], sketch001)` + `profile006 = startProfile(sketch001, at = [11.05, 2.37])` ) await crnRect2point2() await page.waitForTimeout(300) @@ -1923,7 +1920,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) await cntrRect1point1() await page.waitForTimeout(300) await editor.expectEditor.toContain( - `profile007 = startProfileAt([8.41, -9.29], sketch001)` + `profile007 = startProfile(sketch001, at = [8.41, -9.29])` ) await cntrRect1point2() await page.waitForTimeout(300) @@ -1939,7 +1936,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) await cntrRect2point1() await page.waitForTimeout(300) await editor.expectEditor.toContain( - `profile008 = startProfileAt([19.33, -5.56], sketch001)` + `profile008 = startProfile(sketch001, at = [19.33, -5.56])` ) await cntrRect2point2() await page.waitForTimeout(300) @@ -2041,7 +2038,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) // Verify the first three-point arc was created correctly await editor.expectEditor.toContain( - `profile011 = startProfileAt([13.56, -9.97], sketch001) + `profile011 = startProfile(sketch001, at = [13.56, -9.97]) |> arc(interiorAbsolute = [15.19, -6.51], endAbsolute = [19.33, -11.19])`, { shouldNormalise: true } ) @@ -2089,11 +2086,11 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) 'persistCode', `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([6.24, 4.54], sketch001) +profile001 = startProfile(sketch001, at = [6.24, 4.54]) |> line(end = [-0.41, 6.99]) |> line(end = [8.61, 0.74]) |> line(end = [10.99, -5.22]) -profile002 = startProfileAt([11.19, 5.02], sketch001) +profile002 = startProfile(sketch001, at = [11.19, 5.02]) |> angledLine(angle = 0, length = 10.78, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.14) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -2201,7 +2198,7 @@ profile004 = circleThreePoint(sketch001, p1 = [13.44, -6.8], p2 = [13.39, -2.07] await page.waitForTimeout(100) await rectStart() await editor.expectEditor.toContain( - `profile005 = startProfileAt([15.68, -3.84], sketch001)` + `profile005 = startProfile(sketch001, at = [15.68, -3.84])` ) await page.waitForTimeout(100) await rectEnd() @@ -2227,11 +2224,11 @@ profile004 = circleThreePoint(sketch001, p1 = [13.44, -6.8], p2 = [13.39, -2.07] 'persistCode', `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([6.24, 4.54], sketch001) +profile001 = startProfile(sketch001, at = [6.24, 4.54]) |> line(end = [-0.41, 6.99]) |> line(end = [8.61, 0.74]) |> line(end = [10.99, -5.22]) -profile002 = startProfileAt([11.19, 5.02], sketch001) +profile002 = startProfile(sketch001, at = [11.19, 5.02]) |> angledLine(angle = 0, length = 10.78, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.14) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -2329,14 +2326,14 @@ profile003 = circle(sketch001, center = [6.92, -4.2], radius = 3.16) 'persistCode', `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([-63.43, 193.08], sketch001) +profile001 = startProfile(sketch001, at = [-63.43, 193.08]) |> line(end = [168.52, 149.87]) |> line(end = [190.29, -39.18]) |> tangentialArc(endAbsolute = [319.63, 129.65]) |> line(end = [-217.65, -21.76]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() -profile003 = startProfileAt([16.79, 38.24], sketch001) +profile003 = startProfile(sketch001, at = [16.79, 38.24]) |> angledLine(angle = 0, length = 182.82, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 105.71) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -2441,13 +2438,13 @@ extrude001 = extrude(profile003, length = 5) 'persistCode', `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([85.19, 338.59], sketch001) +profile001 = startProfile(sketch001, at = [85.19, 338.59]) |> line(end = [213.3, -94.52]) |> line(end = [-230.09, -55.34]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch002 = startSketchOn(XY) -profile002 = startProfileAt([85.81, 52.55], sketch002) +profile002 = startProfile(sketch002, at = [85.81, 52.55]) ` ) @@ -2461,7 +2458,7 @@ profile002 = startProfileAt([85.81, 52.55], sketch002) const [startProfileAt] = scene.makeMouseHelpers(606, 184) const [nextPoint] = scene.makeMouseHelpers(763, 130) - await page.getByText('startProfileAt([85.81, 52.55], sketch002)').click() + await page.getByText('startProfile(sketch002, at = [85.81, 52.55])').click() await toolbar.editSketch(1) // timeout wait for engine animation is unavoidable await page.waitForTimeout(600) @@ -2486,7 +2483,7 @@ profile002 = startProfileAt([85.81, 52.55], sketch002) 'persistCode', `@settings(defaultLengthUnit = in) thePart = startSketchOn(XZ) - |> startProfileAt([7.53, 10.51], %) + |> startProfile(at = [7.53, 10.51]) |> line(end = [12.54, 1.83]) |> line(end = [6.65, -6.91]) |> line(end = [-6.31, -8.69]) @@ -2516,21 +2513,21 @@ extrude001 = extrude(thePart, length = 75) await test.step('expect code to match initial conditions still', async () => { await editor.expectEditor.toContain( - `thePart = startSketchOn(XZ) |> startProfileAt([7.53, 10.51], %)` + `thePart = startSketchOn(XZ) |> startProfile(at = [7.53, 10.51])` ) }) await test.step('equiping the line tool should break up the pipe expression', async () => { await toolbar.lineBtn.click() await editor.expectEditor.toContain( - `sketch001 = startSketchOn(XZ)thePart = startProfileAt([7.53, 10.51], sketch001)` + `sketch001 = startSketchOn(XZ)thePart = startProfile(sketch001, at = [7.53, 10.51])` ) }) await test.step('can continue on to add a new profile to this sketch', async () => { await profilePoint1() await editor.expectEditor.toContain( - `profile001 = startProfileAt([19.69, -7.05], sketch001)` + `profile001 = startProfile(sketch001, at = [19.69, -7.05])` ) await profilePoint2() await editor.expectEditor.toContain(`|> line(end = [18.97, -18.06])`) @@ -2551,29 +2548,29 @@ extrude001 = extrude(thePart, length = 75) 'persistCode', `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([6.71, -3.66], sketch001) +profile001 = startProfile(sketch001, at = [6.71, -3.66]) |> line(end = [2.65, 9.02], tag = $seg02) |> line(end = [3.73, -9.36], tag = $seg01) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude001 = extrude(profile001, length = 20) sketch002 = startSketchOn(extrude001, face = seg01) -profile002 = startProfileAt([0.75, 13.46], sketch002) +profile002 = startProfile(sketch002, at = [0.75, 13.46]) |> line(end = [4.52, 3.79]) |> line(end = [5.98, -2.81]) -profile003 = startProfileAt([3.19, 13.3], sketch002) +profile003 = startProfile(sketch002, at = [3.19, 13.3]) |> angledLine(angle = 0, length = 6.64, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2.81) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() -profile004 = startProfileAt([3.15, 9.39], sketch002) +profile004 = startProfile(sketch002, at = [3.15, 9.39]) |> xLine(length = 6.92) |> line(end = [-7.41, -2.85]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() profile005 = circle(sketch002, center = [5.15, 4.34], radius = 1.66) -profile006 = startProfileAt([9.65, 3.82], sketch002) +profile006 = startProfile(sketch002, at = [9.65, 3.82]) |> line(end = [2.38, 5.62]) |> line(end = [2.13, -5.57]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -2585,15 +2582,15 @@ revolve001 = revolve( ) extrude002 = extrude(profile006, length = 4) sketch003 = startSketchOn(-XZ) -profile007 = startProfileAt([4.8, 7.55], sketch003) +profile007 = startProfile(sketch003, at = [4.8, 7.55]) |> line(end = [7.39, 2.58]) |> line(end = [7.02, -2.85]) -profile008 = startProfileAt([5.54, 5.49], sketch003) +profile008 = startProfile(sketch003, at = [5.54, 5.49]) |> line(end = [6.34, 2.64]) |> line(end = [6.33, -2.96]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() -profile009 = startProfileAt([5.23, 1.95], sketch003) +profile009 = startProfile(sketch003, at = [5.23, 1.95]) |> line(end = [6.8, 2.17]) |> line(end = [7.34, -2.75]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -2603,7 +2600,7 @@ profile010 = circle( center = [7.18, -2.11], radius = 2.67 ) -profile011 = startProfileAt([5.07, -6.39], sketch003) +profile011 = startProfile(sketch003, at = [5.07, -6.39]) |> angledLine(angle = 0, length = 4.54, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 4.17) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) @@ -2715,14 +2712,14 @@ extrude003 = extrude(profile011, length = 2.5) 'persistCode', `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([34, 42.66], sketch001) +profile001 = startProfile(sketch001, at = [34, 42.66]) |> line(end = [102.65, 151.99]) |> line(end = [76, -138.66]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() plane001 = offsetPlane(XZ, offset = 50) sketch002 = startSketchOn(plane001) -profile002 = startProfileAt([39.43, 172.21], sketch002) +profile002 = startProfile(sketch002, at = [39.43, 172.21]) |> xLine(length = 183.99) |> line(end = [-77.95, -145.93]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -2753,7 +2750,7 @@ loft([profile001, profile002]) await page.waitForTimeout(100) await rect1Crn1() await editor.expectEditor.toContain( - `profile003 = startProfileAt([50.72, -18.19], sketch001)` + `profile003 = startProfile(sketch001, at = [50.72, -18.19])` ) await rect1Crn2() await editor.expectEditor.toContain( @@ -2771,14 +2768,14 @@ loft([profile001, profile002]) localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([34, 42.66], sketch001) +profile001 = startProfile(sketch001, at = [34, 42.66]) |> line(end = [102.65, 151.99]) |> line(end = [76, -138.66]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() plane001 = offsetPlane(XZ, offset = 50) sketch002 = startSketchOn(plane001) -profile002 = startProfileAt([39.43, 172.21], sketch002) +profile002 = startProfile(sketch002, at = [39.43, 172.21]) |> xLine(length = 183.99) |> line(end = [-77.95, -145.93]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -2822,7 +2819,7 @@ loft([profile001, profile002]) await page.waitForTimeout(100) await rect1Crn1() await editor.expectEditor.toContain( - `profile003 = startProfileAt([47.76, -17.13], plane001)` + `profile003 = startProfile(plane001, at = [47.76, -17.13])` ) await rect1Crn2() await editor.expectEditor.toContain( @@ -2848,7 +2845,7 @@ test.describe(`Click based selection don't brick the app when clicked out of ran localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [3.14, 3.14]) |> arc( interiorAbsolute = [1, 2], @@ -2927,7 +2924,7 @@ test.describe('Redirecting to home page and back to the original file should cle localStorage.setItem( 'persistCode', ` sketch001 = startSketchOn(XZ) -|> startProfileAt([256.85, 14.41], %) +|> startProfile(at = [256.85, 14.41]) |> line(endAbsolute = [0, 211.07]) ` ) @@ -3015,7 +3012,7 @@ test.describe('Redirecting to home page and back to the original file should cle `@settings(defaultLengthUnit = mm) sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([0, 0], sketch001) +profile001 = startProfile(sketch001, at = [0, 0]) |> line(end = [191.39, 191.39]) |> tangentialArc(endAbsolute = [287.08, 95.69], tag = $seg01) |> angledLine(angle = tangentToEnd(seg01), length = 135.34) @@ -3040,14 +3037,14 @@ test.describe('manual edits during sketch mode', () => { myVar2 = 6 sketch001 = startSketchOn(XZ) - profile001 = startProfileAt([106.68, 89.77], sketch001) + profile001 = startProfile(sketch001, at = [106.68, 89.77]) |> line(end = [132.34, 157.8]) |> line(end = [67.65, -460.55], tag = $seg01) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude001 = extrude(profile001, length = 500) sketch002 = startSketchOn(extrude001, face = seg01) - profile002 = startProfileAt([83.39, 329.15], sketch002) + profile002 = startProfile(sketch002, at = [83.39, 329.15]) |> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) |> angledLine(length = 156.54, angle = -28) |> angledLine( @@ -3056,7 +3053,7 @@ test.describe('manual edits during sketch mode', () => { ) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - profile003 = startProfileAt([-201.08, 254.17], sketch002) + profile003 = startProfile(sketch002, at = [-201.08, 254.17]) |> line(end = [103.55, 33.32]) |> line(end = [48.8, -153.54])` @@ -3176,20 +3173,20 @@ sketch003 = startSketchOn(XY) profile004 = circle(sketch003, center = [143.91, 136.89], radius = 71.63) sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([106.68, 89.77], sketch001) +profile001 = startProfile(sketch001, at = [106.68, 89.77]) |> line(end = [132.34, 157.8]) |> line(end = [67.65, -460.55], tag = $seg01) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude001 = extrude(profile001, length = 500) sketch002 = startSketchOn(extrude001, face = seg01) -profile002 = startProfileAt([83.39, 329.15], sketch002) +profile002 = startProfile(sketch002, at = [83.39, 329.15]) |> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) |> angledLine(length = 219.2, angle = -56) |> angledLine(angle = -151, length = 116.27) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() -profile003 = startProfileAt([-201.08, 254.17], sketch002) +profile003 = startProfile(sketch002, at = [-201.08, 254.17]) |> line(end = [103.55, 33.32]) |> line(end = [48.8, -153.54]) `, @@ -3215,14 +3212,14 @@ profile003 = startProfileAt([-201.08, 254.17], sketch002) myVar2 = 6 sketch001 = startSketchOn(XZ) - profile001 = startProfileAt([106.68, 89.77], sketch001) + profile001 = startProfile(sketch001, at = [106.68, 89.77]) |> line(end = [132.34, 157.8]) |> line(end = [67.65, -460.55], tag = $seg01) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude001 = extrude(profile001, length = 500) sketch002 = startSketchOn(extrude001, face = seg01) - profile002 = startProfileAt([83.39, 329.15], sketch002) + profile002 = startProfile(sketch002, at = [83.39, 329.15]) |> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) |> angledLine(length = 156.54, angle = -28) |> angledLine( @@ -3231,7 +3228,7 @@ profile003 = startProfileAt([-201.08, 254.17], sketch002) ) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - profile003 = startProfileAt([-201.08, 254.17], sketch002) + profile003 = startProfile(sketch002, at = [-201.08, 254.17]) |> line(end = [103.55, 33.32]) |> line(end = [48.8, -153.54])` @@ -3303,7 +3300,7 @@ profile003 = startProfileAt([-201.08, 254.17], sketch002) // sometimes initial click doesn't register await objClick() await editor.expectActiveLinesToBe([ - '|> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag]', + '|> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag]', ]) }).toPass({ timeout: 15_000, intervals: [500] }) }) @@ -3351,8 +3348,8 @@ profile003 = startProfileAt([-201.08, 254.17], sketch002) // defends against a regression where sketch would duplicate in the scene // https://github.com/KittyCAD/modeling-app/issues/6345 await editor.replaceCode( - 'startProfileAt([75.8, 317.2', - 'startProfileAt([75.8, 217.2' + 'startProfile(at = [75.8, 317.2', + 'startProfile(at = [75.8, 217.2' ) // expect not white anymore await scene.expectPixelColorNotToBe( diff --git a/e2e/playwright/snapshot-tests.spec.ts b/e2e/playwright/snapshot-tests.spec.ts index 05c5d23b5..38e3bf536 100644 --- a/e2e/playwright/snapshot-tests.spec.ts +++ b/e2e/playwright/snapshot-tests.spec.ts @@ -67,7 +67,7 @@ totalHeightHalf = 2 armThick = 0.5 totalLen = 9.5 part001 = startSketchOn(-XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(length = baseHeight) |> xLine(length = baseLen) |> angledLine( @@ -317,7 +317,7 @@ const extrudeDefaultPlane = async ( plane: string ) => { const code = `part001 = startSketchOn(${plane}) - |> startProfileAt([7.00, 4.40], %) + |> startProfile(at = [7.00, 4.40]) |> line(end = [6.60, -0.20]) |> line(end = [2.80, 5.00]) |> line(end = [-5.60, 4.40]) @@ -442,7 +442,7 @@ test( await page.waitForTimeout(700) // TODO detect animation ending, or disable animation await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10) - code += `profile001 = startProfileAt([182.59, -246.32], sketch001)` + code += `profile001 = startProfile(sketch001, at = [182.59, -246.32])` await expect(page.locator('.cm-content')).toHaveText(code) await page.waitForTimeout(100) @@ -641,7 +641,7 @@ test.describe( const startXPx = 600 await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10) - code += `profile001 = startProfileAt([182.59, -246.32], sketch001)` + code += `profile001 = startProfile(sketch001, at = [182.59, -246.32])` await expect(u.codeLocator).toHaveText(code) await page.waitForTimeout(100) @@ -738,7 +738,7 @@ test.describe( const startXPx = 600 await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10) - code += `profile001 = startProfileAt([182.59, -246.32], sketch001)` + code += `profile001 = startProfile(sketch001, at = [182.59, -246.32])` await expect(u.codeLocator).toHaveText(code) await page.waitForTimeout(100) @@ -797,13 +797,13 @@ test( localStorage.setItem( 'persistCode', `part001 = startSketchOn(-XZ) - |> startProfileAt([1.4, 2.47], %) + |> startProfile(at = [1.4, 2.47]) |> line(end = [9.31, 10.55], tag = $seg01) |> line(end = [11.91, -10.42]) |> close() |> extrude(length = ${KCL_DEFAULT_LENGTH}) part002 = startSketchOn(part001, face = seg01) - |> startProfileAt([8, 8], %) + |> startProfile(at = [8, 8]) |> line(end = [4.68, 3.05]) |> line(end = [0, -7.79]) |> close() @@ -855,7 +855,7 @@ test( localStorage.setItem( 'persistCode', `part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -891,7 +891,7 @@ test( localStorage.setItem( 'persistCode', `part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -1050,7 +1050,7 @@ test('theme persists', async ({ page, context }) => { localStorage.setItem( 'persistCode', `part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -1121,7 +1121,7 @@ test.describe('code color goober', { tag: '@snapshot' }, () => { // Create a path for the sweep. sweepPath = startSketchOn(XZ) - |> startProfileAt([0.05, 0.05], %) + |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) |> tangentialArc(angle = 90, radius = 5) |> line(end = [-3, 0]) @@ -1129,7 +1129,7 @@ sweepPath = startSketchOn(XZ) |> line(end = [0, 7]) sweepSketch = startSketchOn(XY) - |> startProfileAt([2, 0], %) + |> startProfile(at = [2, 0]) |> arc(angleStart = 0, angleEnd = 360, radius = 2) |> sweep(path = sweepPath) |> appearance( @@ -1166,7 +1166,7 @@ sweepSketch = startSketchOn(XY) // Create a path for the sweep. sweepPath = startSketchOn(XZ) - |> startProfileAt([0.05, 0.05], %) + |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) |> tangentialArc(angle = 90, radius = 5) |> line(end = [-3, 0]) @@ -1174,7 +1174,7 @@ sweepPath = startSketchOn(XZ) |> line(end = [0, 7]) sweepSketch = startSketchOn(XY) - |> startProfileAt([2, 0], %) + |> startProfile(at = [2, 0]) |> arc(angleStart = 0, angleEnd = 360, radius = 2) |> sweep(path = sweepPath) |> appearance( diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-linux.png index fb74b2933..d700bc8e4 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-2-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-2-Google-Chrome-linux.png index dc1ec10f1..6210f4102 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-2-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Inch-scale-2-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-1-Google-Chrome-linux.png index 503436315..0930d6f1c 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-2-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-2-Google-Chrome-linux.png index dfc191b84..6210f4102 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-2-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Client-side-scene-scale-should-match-engine-scale-Millimeter-scale-2-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-rectangles-should-look-right-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-rectangles-should-look-right-1-Google-Chrome-linux.png index a0d03e676..3ffcf6bb5 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-rectangles-should-look-right-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-rectangles-should-look-right-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-1-Google-Chrome-linux.png index 707c41cb7..07e46d441 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-2-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-2-Google-Chrome-linux.png index 59d87f5c9..44941d7d0 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-2-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-2-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-3-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-3-Google-Chrome-linux.png index 887859f3d..7f11ac4b2 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-3-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-3-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-4-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-4-Google-Chrome-linux.png index 6f48eeb66..212b208e4 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-4-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-4-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-5-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-5-Google-Chrome-linux.png index 01518ab5c..d047115e9 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-5-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-5-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png index 8ad07fc80..c5711f32d 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Sketch-on-face-with-none-z-up-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-2d-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-2d-1-Google-Chrome-linux.png index 04832de74..a5d9fe750 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-2d-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-2d-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-3d-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-3d-1-Google-Chrome-linux.png index 6215a6dd8..902df7091 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-3d-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Zoom-to-fit-on-load---solid-3d-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-1-Google-Chrome-linux.png index 0eb5e7bd7..9f5375cdb 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-opening-window-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-opening-window-1-Google-Chrome-linux.png index bc507763c..5d213836b 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-opening-window-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-opening-window-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XY-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XY-1-Google-Chrome-linux.png index 01030ec67..067fb599b 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XY-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XY-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XZ-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XZ-1-Google-Chrome-linux.png index 6f44ca37f..b2f396f3b 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XZ-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XZ-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--YZ-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--YZ-1-Google-Chrome-linux.png index f763ad7ac..2a3ba9bb3 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--YZ-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--YZ-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-XY-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-XY-1-Google-Chrome-linux.png index 1a4531969..3ad306366 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-XY-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-XY-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-XZ-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-XZ-1-Google-Chrome-linux.png index c096bb0cc..fa22d0b7c 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-XZ-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-XZ-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-YZ-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-YZ-1-Google-Chrome-linux.png index f81f5f26e..25a345083 100644 Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-YZ-1-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-YZ-1-Google-Chrome-linux.png differ diff --git a/e2e/playwright/snapshots/prompt-to-edit/prompt-to-edit-snapshot-tests-spec-ts--edit-with-ai-example-snapshots--change-colour.snap.json b/e2e/playwright/snapshots/prompt-to-edit/prompt-to-edit-snapshot-tests-spec-ts--edit-with-ai-example-snapshots--change-colour.snap.json index 1ac46ddf4..caf73eebb 100644 --- a/e2e/playwright/snapshots/prompt-to-edit/prompt-to-edit-snapshot-tests-spec-ts--edit-with-ai-example-snapshots--change-colour.snap.json +++ b/e2e/playwright/snapshots/prompt-to-edit/prompt-to-edit-snapshot-tests-spec-ts--edit-with-ai-example-snapshots--change-colour.snap.json @@ -1,9 +1,9 @@ { - "original_source_code": "sketch001 = startSketchOn(XZ)\nprofile001 = startProfileAt([57.81, 250.51], sketch001)\n |> line(end = [121.13, 56.63], tag = $seg02)\n |> line(end = [83.37, -34.61], tag = $seg01)\n |> line(end = [19.66, -116.4])\n |> line(end = [-221.8, -41.69])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude001 = extrude(profile001, length = 200)\nsketch002 = startSketchOn(XZ)\n |> startProfileAt([-73.64, -42.89], %)\n |> xLine(length = 173.71)\n |> line(end = [-22.12, -94.4])\n |> xLine(length = -156.98)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude002 = extrude(sketch002, length = 50)\nsketch003 = startSketchOn(XY)\n |> startProfileAt([52.92, 157.81], %)\n |> angledLine(angle = 0, length = 176.4, tag = $rectangleSegmentA001)\n |> angledLine(\n angle = segAng(rectangleSegmentA001) - 90,\n length = 53.4,\n tag = $rectangleSegmentB001,\n )\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude003 = extrude(sketch003, length = 20)\n", + "original_source_code": "sketch001 = startSketchOn(XZ)\nprofile001 = startProfile(sketch001, at = [57.81, 250.51])\n |> line(end = [121.13, 56.63], tag = $seg02)\n |> line(end = [83.37, -34.61], tag = $seg01)\n |> line(end = [19.66, -116.4])\n |> line(end = [-221.8, -41.69])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude001 = extrude(profile001, length = 200)\nsketch002 = startSketchOn(XZ)\n |> startProfile(at = [-73.64, -42.89])\n |> xLine(length = 173.71)\n |> line(end = [-22.12, -94.4])\n |> xLine(length = -156.98)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude002 = extrude(sketch002, length = 50)\nsketch003 = startSketchOn(XY)\n |> startProfile(at = [52.92, 157.81])\n |> angledLine(angle = 0, length = 176.4, tag = $rectangleSegmentA001)\n |> angledLine(\n angle = segAng(rectangleSegmentA001) - 90,\n length = 53.4,\n tag = $rectangleSegmentB001,\n )\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude003 = extrude(sketch003, length = 20)\n", "prompt": "make this neon green please, use #39FF14", "source_ranges": [ { - "prompt": "The users main selection is the end cap of a general-sweep (that is an extrusion, revolve, sweep or loft).\nThe source range most likely refers to \"startProfileAt\" simply because this is the start of the profile that was swept.\nIf you need to operate on this cap, for example for sketching on the face, you can use the special string END i.e. `startSketchOn(someSweepVariable, face = END)`\nWhen they made this selection they main have intended this surface directly or meant something more general like the sweep body.\nSee later source ranges for more context.", + "prompt": "The users main selection is the end cap of a general-sweep (that is an extrusion, revolve, sweep or loft).\nThe source range most likely refers to \"startProfile\" simply because this is the start of the profile that was swept.\nIf you need to operate on this cap, for example for sketching on the face, you can use the special string END i.e. `startSketchOn(someSweepVariable, face = END)`\nWhen they made this selection they main have intended this surface directly or meant something more general like the sweep body.\nSee later source ranges for more context.", "range": { "start": { "line": 11, diff --git a/e2e/playwright/storageStates.ts b/e2e/playwright/storageStates.ts index cc6273946..27f363ea8 100644 --- a/e2e/playwright/storageStates.ts +++ b/e2e/playwright/storageStates.ts @@ -82,7 +82,7 @@ export const TEST_SETTINGS_CORRUPTED = { export const TEST_CODE_GIZMO = `@settings(defaultLengthUnit = in) part001 = startSketchOn(XZ) -|> startProfileAt([20, 0], %) +|> startProfile(at = [20, 0]) |> line(end = [7.13, 4 + 0]) |> angledLine(angle = 3 + 0, length = 3.14 + 0 ) |> line(endAbsolute = [20.14 + 0, -0.14 + 0]) @@ -105,7 +105,7 @@ thickness = 2 keychainHoleSize = 3 keychain = startSketchOn("XY") - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [width, 0]) |> line(endAbsolute = [width, height]) |> line(endAbsolute = [0, height]) @@ -113,7 +113,7 @@ keychain = startSketchOn("XY") |> extrude(length = thickness) keychain1 = startSketchOn("XY") - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [width, 0]) |> line(endAbsolute = [width, height]) |> line(endAbsolute = [0, height]) @@ -121,7 +121,7 @@ keychain1 = startSketchOn("XY") |> extrude(length = thickness) keychain2 = startSketchOn("XY") - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [width, 0]) |> line(endAbsolute = [width, height]) |> line(endAbsolute = [0, height]) @@ -129,7 +129,7 @@ keychain2 = startSketchOn("XY") |> extrude(length = thickness) box = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $revolveAxis) @@ -137,7 +137,7 @@ box = startSketchOn(XY) |> extrude(length = 10) sketch001 = startSketchOn(box, face = revolveAxis) - |> startProfileAt([5, 10], %) + |> startProfile(at = [5, 10]) |> line(end = [0, -10]) |> line(end = [2, 0]) |> line(end = [0, -10]) @@ -148,7 +148,7 @@ sketch001 = startSketchOn(box, face = revolveAxis) ) sketch001 = startSketchOn(XZ) - |> startProfileAt([0.0, 0.0], %) + |> startProfile(at = [0.0, 0.0]) |> xLine(length = 0.0) |> close() diff --git a/e2e/playwright/test-network-and-connection-issues.spec.ts b/e2e/playwright/test-network-and-connection-issues.spec.ts index aa1c5bcce..fab50e8d0 100644 --- a/e2e/playwright/test-network-and-connection-issues.spec.ts +++ b/e2e/playwright/test-network-and-connection-issues.spec.ts @@ -118,7 +118,7 @@ test.describe( const startXPx = 600 await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10) await expect(page.locator('.cm-content')).toHaveText( - `sketch001 = startSketchOn(XZ)profile001 = startProfileAt(${commonPoints.startAt}, sketch001)` + `sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${commonPoints.startAt})` ) await page.waitForTimeout(100) @@ -127,7 +127,7 @@ test.describe( await expect( page.locator('.cm-content') - ).toHaveText(`sketch001 = startSketchOn(XZ)profile001 = startProfileAt(${commonPoints.startAt}, sketch001) + ).toHaveText(`sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${commonPoints.startAt}) |> xLine(length = ${commonPoints.num1})`) // Expect the network to be up @@ -176,7 +176,7 @@ test.describe( // select a line await page - .getByText(`startProfileAt(${commonPoints.startAt}, sketch001)`) + .getByText(`startProfile(sketch001, at = ${commonPoints.startAt})`) .click() // enter sketch again @@ -220,7 +220,7 @@ test.describe( await expect .poll(u.normalisedEditorCode) .toBe(`sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([12.34, -12.34], sketch001) +profile001 = startProfile(sketch001, at = [12.34, -12.34]) |> xLine(length = 12.34) |> line(end = [-12.34, 12.34]) @@ -231,7 +231,7 @@ profile001 = startProfileAt([12.34, -12.34], sketch001) await expect .poll(u.normalisedEditorCode) .toBe(`sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([12.34, -12.34], sketch001) +profile001 = startProfile(sketch001, at = [12.34, -12.34]) |> xLine(length = 12.34) |> line(end = [-12.34, 12.34]) |> xLine(length = -12.34) diff --git a/e2e/playwright/testing-camera-movement.spec.ts b/e2e/playwright/testing-camera-movement.spec.ts index 7f662063b..7c94c3e39 100644 --- a/e2e/playwright/testing-camera-movement.spec.ts +++ b/e2e/playwright/testing-camera-movement.spec.ts @@ -234,7 +234,7 @@ test.describe('Testing Camera Movement', () => { x = 948 await u.canvasLocator.click({ position: { x: 783, y } }) - code += `\n |> startProfileAt([8.12, -12.98], %)` + code += `\n |> startProfile(at = [8.12, -12.98])` // await expect(u.codeLocator).toHaveText(code) await u.canvasLocator.click({ position: { x, y } }) code += `\n |> line(end = [11.18, 0])` diff --git a/e2e/playwright/testing-constraints.spec.ts b/e2e/playwright/testing-constraints.spec.ts index c4c39e8e2..55398c3d1 100644 --- a/e2e/playwright/testing-constraints.spec.ts +++ b/e2e/playwright/testing-constraints.spec.ts @@ -15,7 +15,7 @@ test.describe('Testing constraints', () => { localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> xLine(length = -20) @@ -57,7 +57,7 @@ test.describe('Testing constraints', () => { .click() await expect(page.locator('.cm-content')).toHaveText( - `length001 = 20sketch001 = startSketchOn(XY) |> startProfileAt([-10, -10], %) |> line(end = [20, 0]) |> angledLine(angle = 90, length = length001) |> xLine(length = -20)` + `length001 = 20sketch001 = startSketchOn(XY) |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> angledLine(angle = 90, length = length001) |> xLine(length = -20)` ) // Make sure we didn't pop out of sketch mode. @@ -83,13 +83,13 @@ test.describe('Testing constraints', () => { `@settings(defaultLengthUnit = in) yo = 79 part001 = startSketchOn(XZ) - |> startProfileAt([-7.54, -26.74], %) + |> startProfile(at = [-7.54, -26.74]) |> line(end = [74.36, 130.4], tag = $seg01) |> line(end = [78.92, -120.11]) |> angledLine(angle = segAng(seg01), length = yo) |> line(end = [41.19, 58.97 + 5]) part002 = startSketchOn(XZ) - |> startProfileAt([299.05, 120], %) + |> startProfile(at = [299.05, 120]) |> xLine(length = -385.34, tag = $seg_what) |> yLine(length = -170.06) |> xLine(length = segLen(seg_what)) @@ -148,13 +148,13 @@ test.describe('Testing constraints', () => { `@settings(defaultLengthUnit = in) yo = 5 part001 = startSketchOn(XZ) - |> startProfileAt([-7.54, -26.74], %) + |> startProfile(at = [-7.54, -26.74]) |> line(end = [74.36, 130.4], tag = $seg01) |> line(end = [78.92, -120.11]) |> angledLine(angle = segAng(seg01), length = 78.33) |> line(end = [51.19, 48.97]) part002 = startSketchOn(XZ) - |> startProfileAt([299.05, 231.45], %) + |> startProfile(at = [299.05, 231.45]) |> xLine(length = -425.34, tag = $seg_what) |> yLine(length = -264.06) |> xLine(length = segLen(seg_what)) @@ -263,13 +263,13 @@ test.describe('Testing constraints', () => { `@settings(defaultLengthUnit = in) yo = 5 part001 = startSketchOn(XZ) - |> startProfileAt([-7.54, -26.74], %) + |> startProfile(at = [-7.54, -26.74]) |> line(end = [74.36, 130.4]) |> line(end = [78.92, -120.11]) |> line(end = [9.16, 77.79]) |> line(end = [51.19, 48.97]) part002 = startSketchOn(XZ) - |> startProfileAt([299.05, 231.45], %) + |> startProfile(at = [299.05, 231.45]) |> xLine(length = -425.34, tag = $seg_what) |> yLine(length = -264.06) |> xLine(length = segLen(seg_what)) @@ -379,13 +379,13 @@ test.describe('Testing constraints', () => { `@settings(defaultLengthUnit = in) yo = 5 part001 = startSketchOn(XZ) - |> startProfileAt([-7.54, -26.74], %) + |> startProfile(at = [-7.54, -26.74]) |> line(end = [74.36, 130.4]) |> line(end = [78.92, -120.11]) |> line(end = [9.16, 77.79]) |> line(end = [51.19, 48.97]) part002 = startSketchOn(XZ) - |> startProfileAt([299.05, 231.45], %) + |> startProfile(at = [299.05, 231.45]) |> xLine(length = -425.34, tag = $seg_what) |> yLine(length = -264.06) |> xLine(length = segLen(seg_what)) @@ -493,13 +493,13 @@ test.describe('Testing constraints', () => { `@settings(defaultLengthUnit = in) yo = 5 part001 = startSketchOn(XZ) - |> startProfileAt([-7.54, -26.74], %) + |> startProfile(at = [-7.54, -26.74]) |> line(end = [74.36, 130.4]) |> line(end = [78.92, -120.11]) |> line(end = [9.16, 77.79]) |> line(end = [51.19, 48.97]) part002 = startSketchOn(XZ) - |> startProfileAt([299.05, 231.45], %) + |> startProfile(at = [299.05, 231.45]) |> xLine(length = -425.34, tag = $seg_what) |> yLine(length = -264.06) |> xLine(length = segLen(seg_what)) @@ -596,13 +596,13 @@ test.describe('Testing constraints', () => { `@settings(defaultLengthUnit = in) yo = 5 part001 = startSketchOn(XZ) - |> startProfileAt([-7.54, -26.74], %) + |> startProfile(at = [-7.54, -26.74]) |> line(end = [74.36, 130.4]) |> line(end = [78.92, -120.11]) |> line(end = [9.16, 77.79]) |> line(end = [51.19, 48.97]) part002 = startSketchOn(XZ) - |> startProfileAt([299.05, 231.45], %) + |> startProfile(at = [299.05, 231.45]) |> xLine(length = -425.34, tag = $seg_what) |> yLine(length = -264.06) |> xLine(length = segLen(seg_what)) @@ -691,13 +691,13 @@ test.describe('Testing constraints', () => { `@settings(defaultLengthUnit = in) yo = 5 part001 = startSketchOn(XZ) - |> startProfileAt([-7.54, -26.74], %) + |> startProfile(at = [-7.54, -26.74]) |> line(end = [74.36, 130.4]) |> line(end = [78.92, -120.11]) |> line(end = [9.16, 77.79]) |> line(end = [51.19, 48.97]) part002 = startSketchOn(XZ) - |> startProfileAt([299.05, 231.45], %) + |> startProfile(at = [299.05, 231.45]) |> xLine(length = -425.34, tag = $seg_what) |> yLine(length = -264.06) |> xLine(length = segLen(seg_what)) @@ -773,13 +773,13 @@ part002 = startSketchOn(XZ) `@settings(defaultLengthUnit = in) yo = 5 part001 = startSketchOn(XZ) - |> startProfileAt([-7.54, -26.74], %) + |> startProfile(at = [-7.54, -26.74]) |> line(end = [74.36, 130.4]) |> line(end = [78.92, -120.11]) |> line(end = [9.16, 77.79]) |> line(end = [51.19, 48.97]) part002 = startSketchOn(XZ) - |> startProfileAt([299.05, 231.45], %) + |> startProfile(at = [299.05, 231.45]) |> xLine(length = -425.34, tag = $seg_what) |> yLine(length = -264.06) |> xLine(length = segLen(seg_what)) @@ -875,12 +875,12 @@ part002 = startSketchOn(XZ) `@settings(defaultLengthUnit = in) yo = 5 part001 = startSketchOn(XZ) - |> startProfileAt([-7.54, -26.74], %) + |> startProfile(at = [-7.54, -26.74]) |> line(end = [74.36, 130.4]) |> line(end = [78.92, -120.11]) |> line(end = [9.16, 77.79]) part002 = startSketchOn(XZ) - |> startProfileAt([299.05, 231.45], %) + |> startProfile(at = [299.05, 231.45]) |> xLine(length = -425.34, tag = $seg_what) |> yLine(length = -264.06) |> xLine(length = segLen(seg_what)) @@ -957,12 +957,12 @@ part002 = startSketchOn(XZ) `@settings(defaultLengthUnit = in) yo = 5 part001 = startSketchOn(XZ) - |> startProfileAt([-7.54, -26.74], %) + |> startProfile(at = [-7.54, -26.74]) |> line(end = [74.36, 130.4]) |> line(end = [78.92, -120.11]) |> line(end = [9.16, 77.79]) part002 = startSketchOn(XZ) - |> startProfileAt([299.05, 231.45], %) + |> startProfile(at = [299.05, 231.45]) |> xLine(length = -425.34, tag = $seg_what) |> yLine(length = -264.06) |> xLine(length = segLen(seg_what)) @@ -1022,7 +1022,7 @@ part002 = startSketchOn(XZ) localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XY) - |> startProfileAt([-1.05, -1.07], %) + |> startProfile(at = [-1.05, -1.07]) |> line(end = [3.79, 2.68], tag = $seg01) |> line(end = [3.13, -2.4])` ) @@ -1127,7 +1127,7 @@ test.describe('Electron constraint tests', () => { path.join(bracketDir, 'main.kcl'), `@settings(defaultLengthUnit = in) const part001 = startSketchOn(XY) - |> startProfileAt([4.83, 12.56], %) + |> startProfile(at = [4.83, 12.56]) |> line(end = [15.1, 2.48]) |> line(end = [3.15, -9.85], tag = $seg01) |> line(end = [-15.17, -4.1]) diff --git a/e2e/playwright/testing-gizmo.spec.ts b/e2e/playwright/testing-gizmo.spec.ts index 5f220cd56..da0c4f945 100644 --- a/e2e/playwright/testing-gizmo.spec.ts +++ b/e2e/playwright/testing-gizmo.spec.ts @@ -258,7 +258,7 @@ test.describe(`Testing gizmo, fixture-based`, () => { 'persistCode', `@settings(defaultLengthUnit = in) const sketch002 = startSketchOn(XZ) - |> startProfileAt([-108.83, -57.48], %) + |> startProfile(at = [-108.83, -57.48]) |> angledLine(angle = 0, length = 105.13, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 77.9) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) diff --git a/e2e/playwright/testing-segment-overlays.spec.ts b/e2e/playwright/testing-segment-overlays.spec.ts index e485d0245..124ec5b16 100644 --- a/e2e/playwright/testing-segment-overlays.spec.ts +++ b/e2e/playwright/testing-segment-overlays.spec.ts @@ -205,7 +205,7 @@ test.describe('Testing segment overlays', () => { 'persistCode', `@settings(defaultLengthUnit = in) part001 = startSketchOn(XZ) - |> startProfileAt([5 + 0, 20 + 0], %) + |> startProfile(at = [5 + 0, 20 + 0]) |> line(end = [0.5, -14 + 0]) |> angledLine(angle = 3 + 0, length = 32 + 0) |> line(endAbsolute = [5 + 33, 20 + 11.5 + 0]) @@ -375,7 +375,7 @@ test.describe('Testing segment overlays', () => { xAbs001 = 33 xAbs002 = 4 part001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0.5, yRel001]) |> angledLine(angle = angle001, length = len001) |> line(endAbsolute = [33, yAbs001]) @@ -448,7 +448,7 @@ test.describe('Testing segment overlays', () => { 'persistCode', `@settings(defaultLengthUnit = in) part001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0.5, -14 + 0]) |> angledLine(angle = 3 + 0, length = 32 + 0) |> line(endAbsolute = [33, 11.5 + 0]) @@ -569,7 +569,7 @@ test.describe('Testing segment overlays', () => { 'persistCode', `@settings(defaultLengthUnit = in) part001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0.5, -14 + 0]) |> angledLine(angle = 3 + 0, length = 32 + 0) |> line(endAbsolute = [33, 11.5 + 0]) @@ -697,7 +697,7 @@ test.describe('Testing segment overlays', () => { 'persistCode', `@settings(defaultLengthUnit = in) part001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0.5, -14 + 0]) |> angledLine(angle = 3 + 0, length = 32 + 0) |> line(endAbsolute = [33, 11.5 + 0]) @@ -775,7 +775,7 @@ test.describe('Testing segment overlays', () => { 'persistCode', `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([56.37, 120.33], sketch001) +profile001 = startProfile(sketch001, at = [56.37, 120.33]) |> line(end = [162.86, 106.48]) |> arc( interiorAbsolute = [360.16, 231.76], @@ -983,7 +983,7 @@ part001 = startSketchOn(XZ) 'persistCode', `@settings(defaultLengthUnit = in) part001 = startSketchOn(XZ) - |>startProfileAt([0, 0], %) + |>startProfile(at = [0, 0]) |> line(end = [0.5, -14 + 0]) |> angledLine(angle = 3 + 0, length = 32 + 0) |> line(endAbsolute = [33, 11.5 + 0]) @@ -1230,7 +1230,7 @@ part001 = startSketchOn(XZ) 'persistCode', `@settings(defaultLengthUnit = in) part001 = startSketchOn(XZ) - |> startProfileAt([5, 6], %) + |> startProfile(at = [5, 6]) |> ${lineToBeDeleted} |> line(end = [-10, -15]) |> angledLine(angle = -176, length = segLen(seg01)) @@ -1391,7 +1391,7 @@ part001 = startSketchOn(XZ) 'persistCode', `@settings(defaultLengthUnit = in) part001 = startSketchOn(XZ) - |> startProfileAt([5, 6], %) + |> startProfile(at = [5, 6]) |> ${lineToBeDeleted} |> line(end = [-10, -15]) |> angledLine(angle = -176, length = segLen(seg01))` diff --git a/e2e/playwright/testing-selections.spec.ts b/e2e/playwright/testing-selections.spec.ts index 4df161131..f3d89ea61 100644 --- a/e2e/playwright/testing-selections.spec.ts +++ b/e2e/playwright/testing-selections.spec.ts @@ -68,7 +68,7 @@ test.describe('Testing selections', () => { await u.closeDebugPanel() await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10) await expect(page.locator('.cm-content')).toHaveText( - `@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfileAt(${commonPoints.startAt}, sketch001)` + `@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${commonPoints.startAt})` ) await page.waitForTimeout(100) @@ -76,25 +76,25 @@ test.describe('Testing selections', () => { await expect( page.locator('.cm-content') - ).toHaveText(`@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfileAt(${commonPoints.startAt}, sketch001) + ).toHaveText(`@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${commonPoints.startAt}) |> xLine(length = ${commonPoints.num1})`) await page.waitForTimeout(100) await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 20) await expect( page.locator('.cm-content') - ).toHaveText(`@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfileAt(${ + ).toHaveText(`@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${ commonPoints.startAt - }, sketch001) + }) |> xLine(length = ${commonPoints.num1}) |> yLine(length = ${commonPoints.num1 + 0.01})`) await page.waitForTimeout(100) await page.mouse.click(startXPx, 500 - PUR * 20) await expect( page.locator('.cm-content') - ).toHaveText(`@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfileAt(${ + ).toHaveText(`@settings(defaultLengthUnit = in)sketch001 = startSketchOn(XZ)profile001 = startProfile(sketch001, at = ${ commonPoints.startAt - }, sketch001) + }) |> xLine(length = ${commonPoints.num1}) |> yLine(length = ${commonPoints.num1 + 0.01}) |> xLine(length = ${commonPoints.num2 * -1})`) @@ -265,34 +265,34 @@ test.describe('Testing selections', () => { 'persistCode', `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) - |> startProfileAt([-79.26, 95.04], %) + |> startProfile(at = [-79.26, 95.04]) |> line(end = [112.54, 127.64], tag = $seg02) |> line(end = [170.36, -121.61], tag = $seg01) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude001 = extrude(sketch001, length = 50) sketch005 = startSketchOn(extrude001, face = 'END') - |> startProfileAt([23.24, 136.52], %) + |> startProfile(at = [23.24, 136.52]) |> line(end = [-8.44, 36.61]) |> line(end = [49.4, 2.05]) |> line(end = [29.69, -46.95]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch003 = startSketchOn(extrude001, face = seg01) - |> startProfileAt([21.23, 17.81], %) + |> startProfile(at = [21.23, 17.81]) |> line(end = [51.97, 21.32]) |> line(end = [4.07, -22.75]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch002 = startSketchOn(extrude001, face = seg02) - |> startProfileAt([-100.54, 16.99], %) + |> startProfile(at = [-100.54, 16.99]) |> line(end = [0, 20.03]) |> line(end = [62.61, 0], tag = $seg03) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude002 = extrude(sketch002, length = 50) sketch004 = startSketchOn(extrude002, face = seg03) - |> startProfileAt([57.07, 134.77], %) + |> startProfile(at = [57.07, 134.77]) |> line(end = [-4.72, 22.84]) |> line(end = [28.8, 6.71]) |> line(end = [9.19, -25.33]) @@ -304,7 +304,7 @@ pipeSmallDia = 10 pipeLargeDia = 20 thickness = 0.5 part009 = startSketchOn(XY) - |> startProfileAt([pipeLargeDia - (thickness / 2), 38], %) + |> startProfile(at = [pipeLargeDia - (thickness / 2), 38]) |> line(end = [thickness, 0]) |> line(end = [0, -1]) |> angledLine(angle = 60, endAbsoluteX = pipeSmallDia + thickness) @@ -324,13 +324,13 @@ profile001 = circle( center = [42.91, -70.42], radius = 17.96 ) -profile002 = startProfileAt([86.92, -63.81], sketch006) +profile002 = startProfile(sketch006, at = [86.92, -63.81]) |> angledLine(angle = 0, length = 63.81, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 17.05) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() -profile003 = startProfileAt([40.16, -120.48], sketch006) +profile003 = startProfile(sketch006, at = [40.16, -120.48]) |> line(end = [26.95, 24.21]) |> line(end = [20.91, -28.61]) |> line(end = [32.46, 18.71]) @@ -412,7 +412,7 @@ profile003 = startProfileAt([40.16, -120.48], sketch006) await page.mouse.click(solid2d.x, solid2d.y) await page.waitForTimeout(100) await expect(page.locator('.cm-activeLine')).toHaveText( - '|> startProfileAt([23.24, 136.52], %)' + '|> startProfile(at = [23.24, 136.52])' ) await u.clearCommandLogs() await page.keyboard.press('Delete') @@ -424,7 +424,7 @@ profile003 = startProfileAt([40.16, -120.48], sketch006) await page.mouse.click(individualProfile.x, individualProfile.y) await page.waitForTimeout(100) const codeToBeDeletedSnippet = - 'profile003 = startProfileAt([40.16, -120.48], sketch006)' + 'profile003 = startProfile(sketch006, at = [40.16, -120.48])' await expect(page.locator('.cm-activeLine')).toHaveText( ' |> line(end = [20.91, -28.61])' ) @@ -447,7 +447,7 @@ profile003 = startProfileAt([40.16, -120.48], sketch006) localStorage.setItem( 'persistCode', `part001 = startSketchOn(XY) -yo = startProfileAt([4.83, 12.56], part001) +yo = startProfile(part001, at = [4.83, 12.56]) |> line(end = [15.1, 2.48]) |> line(end = [3.15, -9.85], tag = $seg01) |> line(end = [-15.17, -4.1]) @@ -457,13 +457,13 @@ yo = startProfileAt([4.83, 12.56], part001) yoo = extrude(yo, length = 4) sketch002 = startSketchOn(yoo, face = seg02) sketch001 = startSketchOn(yoo, face = 'END') -profile002 = startProfileAt([-11.08, 2.39], sketch002) +profile002 = startProfile(sketch002, at = [-11.08, 2.39]) |> line(end = [4.89, 0.9]) |> line(end = [-0.61, -2.41]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude001 = extrude(profile002, length = 15) -profile001 = startProfileAt([7.49, 9.96], sketch001) +profile001 = startProfile(sketch001, at = [7.49, 9.96]) |> angledLine(angle = 0, length = 5.05, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.81) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -511,7 +511,7 @@ profile001 = startProfileAt([7.49, 9.96], sketch001) 'persistCode', `@settings(defaultLengthUnit = in) part001 = startSketchOn(XZ) - |> startProfileAt([20, 0], %) + |> startProfile(at = [20, 0]) |> line(end = [7.13, 4 + 0]) |> angledLine(angle = 3 + 0, length = 3.14 + 0 ) |> line(endAbsolute = [20.14 + 0, -0.14 + 0]) @@ -648,8 +648,8 @@ part001 = startSketchOn(XZ) await checkCodeAtHoverPosition( 'extrusionTopCap', extrusionTopCap, - 'startProfileAt([20,0],%)', - 'startProfileAt([20, 0], %)' + 'startProfile(at=[20,0])', + 'startProfile(at = [20, 0])' ) await checkCodeAtHoverPosition( 'flatExtrusionFace', @@ -727,7 +727,7 @@ part001 = startSketchOn(XZ) await u.removeCurrentCode() await u.codeLocator.fill(`@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) - |> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag] + |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) @@ -839,7 +839,7 @@ part001 = startSketchOn(XZ) localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XZ) - |> startProfileAt([3.29, 7.86], %) + |> startProfile(at = [3.29, 7.86]) |> line(end = [2.48, 2.44]) |> line(end = [2.66, 1.17]) |> line(end = [3.75, 0.46]) @@ -882,7 +882,7 @@ part001 = startSketchOn(XZ) const codeToAdd = `${await u.codeLocator.allInnerTexts()} sketch002 = startSketchOn(extrude001, face = $seg01) - |> startProfileAt([-12.94, 6.6], %) + |> startProfile(at = [-12.94, 6.6]) |> line(end = [2.45, -0.2]) |> line(end = [-2, -1.25]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -938,7 +938,7 @@ part001 = startSketchOn(XZ) `@settings(defaultLengthUnit = in) yo = 79 part001 = startSketchOn(XZ) - |> startProfileAt([-7.54, -26.74], %) + |> startProfile(at = [-7.54, -26.74]) |> ${cases[0].expectedCode} |> line(end = [-3.19, -138.43]) |> ${cases[1].expectedCode} @@ -994,7 +994,7 @@ part001 = startSketchOn(XZ) 'persistCode', `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) - |> startProfileAt([-79.26, 95.04], %) + |> startProfile(at = [-79.26, 95.04]) |> line(end = [112.54, 127.64]) |> line(end = [170.36, -121.61], tag = $seg01) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -1033,7 +1033,7 @@ part001 = startSketchOn(XZ) const extrudeText = `line(end = [170.36, -121.61], tag = $seg01)` const cap = { x: 594, y: 283 } - const capText = `startProfileAt([-79.26, 95.04], %)` + const capText = `startProfile(at = [-79.26, 95.04])` const nothing = { x: 946, y: 229 } @@ -1094,10 +1094,10 @@ part001 = startSketchOn(XZ) }) => { const u = await getUtils(page) const selectionsSnippets = { - extrudeAndEditBlocked: '|> startProfileAt([10.81, 32.99], %)', - extrudeAndEditBlockedInFunction: '|> startProfileAt(pos, %)', - extrudeAndEditAllowed: '|> startProfileAt([15.72, 4.7], %)', - editOnly: '|> startProfileAt([15.79, -14.6], %)', + extrudeAndEditBlocked: '|> startProfile(at = [10.81, 32.99])', + extrudeAndEditBlockedInFunction: '|> startProfile(at = pos)', + extrudeAndEditAllowed: '|> startProfile(at = [15.72, 4.7])', + editOnly: '|> startProfile(at = [15.79, -14.6])', } await page.addInitScript( async ({ diff --git a/e2e/playwright/testing-selections.spec.ts-snapshots/editor-content-Google-Chrome-darwin b/e2e/playwright/testing-selections.spec.ts-snapshots/editor-content-Google-Chrome-darwin index efc539430..de7c97041 100644 --- a/e2e/playwright/testing-selections.spec.ts-snapshots/editor-content-Google-Chrome-darwin +++ b/e2e/playwright/testing-selections.spec.ts-snapshots/editor-content-Google-Chrome-darwin @@ -1 +1 @@ -part001 = startSketchOn('XY')yo = startProfileAt([4.83, 12.56], part001) |> line(end = [15.1, 2.48]) |> line(end = [3.15, -9.85], tag = $seg01) |> line(end = [-15.17, -4.1]) |> angledLine(angle = segAng(seg01), 12.35], %, $seg02) |> line(end = [-13.02, 10.03]) |> close()sketch002 = startSketchOn({ plane = { origin = { x = 7.49, y = 2.4, z = 0 }, xAxis = { x = -0.3, y = 0.95, z = 0 }, yAxis = { x = 0, y = 0, z = 1 }, zAxis = { x = 0.95, y = 0.3, z = 0 } }})sketch001 = startSketchOn({ plane = { origin = { x = 0, y = 0, z = 4 }, xAxis = { x = 1, y = 0, z = 0 }, yAxis = { x = 0, y = 1, z = 0 }, zAxis = { x = 0, y = 0, z = 1 } }})profile002 = startProfileAt([-11.08, 2.39], sketch002) |> line(end = [4.89, 0.9]) |> line(end = [-0.61, -2.41]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close()extrude001 = extrude(profile002, length = 15)profile001 = startProfileAt([7.49, 9.96], sketch001) |> angledLine(angle = 0, length = 5.05, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.81 ) |> angledLine( angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001) ) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() +part001 = startSketchOn('XY')yo = startProfile(-4.1]) |> angledLine(angle = segAng(seg01, at = [4.83, 12.56], part001) |> line(end = [15.1, 2.48]) |> line(end = [3.15, -9.85], tag = $seg01) |> line(end = [-15.17), 12.35], %, $seg02) |> line(end = [-13.02, 10.03]) |> close()sketch002 = startSketchOn({ plane = { origin = { x = 7.49, y = 2.4, z = 0 }, xAxis = { x = -0.3, y = 0.95, z = 0 }, yAxis = { x = 0, y = 0, z = 1 }, zAxis = { x = 0.95, y = 0.3, z = 0 } }})sketch001 = startSketchOn({ plane = { origin = { x = 0, y = 0, z = 4 }, xAxis = { x = 1, y = 0, z = 0 }, yAxis = { x = 0, y = 1, z = 0 }, zAxis = { x = 0, y = 0, z = 1 } }})profile002 = startProfile(-2.41], at = [-11.08, 2.39], sketch002) |> line(end = [4.89, 0.9]) |> line(end = [-0.61) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close()extrude001 = extrude(profile002, length = 15)profile001 = startProfile(length = -segLen(rectangleSegmentA001) , at = [7.49, 9.96], sketch001) |> angledLine(angle = 0, length = 5.05, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.81 ) |> angledLine( angle = segAng(rectangleSegmentA001)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() diff --git a/e2e/playwright/testing-settings.spec.ts b/e2e/playwright/testing-settings.spec.ts index b1146ce96..6e20698ef 100644 --- a/e2e/playwright/testing-settings.spec.ts +++ b/e2e/playwright/testing-settings.spec.ts @@ -767,7 +767,7 @@ test.describe( localStorage.setItem( 'persistCode', `sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [5, 0]) |> line(end = [0, 5]) |> line(end = [-5, 0]) diff --git a/e2e/playwright/various.spec.ts b/e2e/playwright/various.spec.ts index a4992906e..bcc8d6b55 100644 --- a/e2e/playwright/various.spec.ts +++ b/e2e/playwright/various.spec.ts @@ -48,7 +48,7 @@ totalHeightHalf = 2 armThick = 0.5 totalLen = 9.5 part001 = startSketchOn(-XZ) -|> startProfileAt([0, 0], %) +|> startProfile(at = [0, 0]) |> yLine(length = baseHeight) |> xLine(length = baseLen) |> angledLine( @@ -466,7 +466,7 @@ test('Sketch on face', async ({ page, homePage, scene, cmdBar, toolbar }) => { 'persistCode', `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) -|> startProfileAt([3.29, 7.86], %) +|> startProfile(at = [3.29, 7.86]) |> line(end = [2.48, 2.44]) |> line(end = [2.66, 1.17]) |> line(end = [3.75, 0.46]) @@ -527,7 +527,7 @@ extrude001 = extrude(sketch001, length = 5 + 7)` await expect.poll(u.normalisedEditorCode).toContain( u.normalisedCode(`sketch002 = startSketchOn(extrude001, face = seg01) -profile001 = startProfileAt([-12.34, 12.34], sketch002) +profile001 = startProfile(sketch002, at = [-12.34, 12.34]) |> line(end = [12.34, -12.34]) |> line(end = [-12.34, -12.34]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -542,7 +542,7 @@ profile001 = startProfileAt([-12.34, 12.34], sketch002) await u.updateCamPosition([1049, 239, 686]) await u.closeDebugPanel() - await page.getByText('startProfileAt([-12').click() + await page.getByText('startProfile(sketch002, at = [-12').click() await expect(page.getByRole('button', { name: 'Edit Sketch' })).toBeVisible() await page.getByRole('button', { name: 'Edit Sketch' }).click() await page.waitForTimeout(500) @@ -564,7 +564,7 @@ profile001 = startProfileAt([-12.34, 12.34], sketch002) previousCodeContent = await page.locator('.cm-content').innerText() const result = makeTemplate`sketch002 = startSketchOn(extrude001, face = seg01) -|> startProfileAt([-12.83, 6.7], %) +|> startProfile(at = [-12.83, 6.7]) |> line(end = [${[2.28, 2.35]}, -${0.07}]) |> line(end = [-3.05, -1.47]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -577,7 +577,7 @@ profile001 = startProfileAt([-12.34, 12.34], sketch002) await page.getByRole('button', { name: 'Exit Sketch' }).click() await u.expectCmdLog('[data-message-type="execution-done"]') - await page.getByText('startProfileAt([-12').click() + await page.getByText('startProfile(sketch002, at = [-12').click() await expect(page.getByRole('button', { name: 'Extrude' })).not.toBeDisabled() await page.waitForTimeout(100) diff --git a/public/kcl-samples/80-20-rail/main.kcl b/public/kcl-samples/80-20-rail/main.kcl index 8babb783d..4ee58a6d1 100644 --- a/public/kcl-samples/80-20-rail/main.kcl +++ b/public/kcl-samples/80-20-rail/main.kcl @@ -8,10 +8,10 @@ fn rail8020(originStart, railHeight, railLength) { // Sketch side 1 of profile sketch001 = startSketchOn(-XZ) - |> startProfileAt([ + |> startProfile(at = [ originStart[0], 0.1 * railHeight + originStart[1] - ], %) + ]) |> arc(angleStart = 180, angleEnd = 270, radius = 0.1 * railHeight) |> arc(angleStart = 180, angleEnd = 0, radius = 0.072 / 4 * railHeight) |> xLine(length = 0.1 * railHeight) diff --git a/public/kcl-samples/axial-fan/fan-housing.kcl b/public/kcl-samples/axial-fan/fan-housing.kcl index 0d9f9448b..bd7e02bc6 100644 --- a/public/kcl-samples/axial-fan/fan-housing.kcl +++ b/public/kcl-samples/axial-fan/fan-housing.kcl @@ -10,7 +10,7 @@ import * from "parameters.kcl" // Model the housing which holds the motor, the fan, and the mounting provisions // Bottom mounting face bottomFaceSketch = startSketchOn(XY) - |> startProfileAt([-fanSize / 2, -fanSize / 2], %) + |> startProfile(at = [-fanSize / 2, -fanSize / 2]) |> angledLine(angle = 0, length = fanSize, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = fanSize, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) @@ -49,7 +49,7 @@ bottomFaceSketch = startSketchOn(XY) // Add large openings to the bottom face to allow airflow through the fan airflowPattern = startSketchOn(bottomFaceSketch, face = END) - |> startProfileAt([fanSize * 7 / 25, -fanSize * 9 / 25], %) + |> startProfile(at = [fanSize * 7 / 25, -fanSize * 9 / 25]) |> angledLine(angle = 140, length = fanSize * 12 / 25, tag = $seg01) |> tangentialArc(radius = fanSize * 1 / 50, angle = 90) |> angledLine(angle = -130, length = fanSize * 8 / 25) @@ -71,10 +71,10 @@ airflowPattern = startSketchOn(bottomFaceSketch, face = END) housingMiddleLength = fanSize / 3 housingMiddleRadius = fanSize / 3 - 1 bodyMiddle = startSketchOn(bottomFaceSketch, face = END) - |> startProfileAt([ + |> startProfile(at = [ housingMiddleLength / 2, -housingMiddleLength / 2 - housingMiddleRadius - ], %) + ]) |> tangentialArc(radius = housingMiddleRadius, angle = 90) |> yLine(length = housingMiddleLength) |> tangentialArc(radius = housingMiddleRadius, angle = 90) @@ -92,7 +92,7 @@ bodyFanHole = startSketchOn(bodyMiddle, face = END) // Top mounting face. Cut a hole in the face to accommodate the fan topFaceSketch = startSketchOn(bodyMiddle, face = END) -topHoles = startProfileAt([-fanSize / 2, -fanSize / 2], topFaceSketch) +topHoles = startProfile(topFaceSketch, at = [-fanSize / 2, -fanSize / 2]) |> angledLine(angle = 0, length = fanSize, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) + 90, length = fanSize, tag = $rectangleSegmentB002) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002), tag = $rectangleSegmentC002) diff --git a/public/kcl-samples/axial-fan/fan.kcl b/public/kcl-samples/axial-fan/fan.kcl index 0cc3192e7..a590d2d23 100644 --- a/public/kcl-samples/axial-fan/fan.kcl +++ b/public/kcl-samples/axial-fan/fan.kcl @@ -9,7 +9,7 @@ import * from "parameters.kcl" // Model the center of the fan fanCenter = startSketchOn(XZ) - |> startProfileAt([-0.0001, fanHeight], %) + |> startProfile(at = [-0.0001, fanHeight]) |> xLine(endAbsolute = -15 + 1.5) |> tangentialArc(radius = 1.5, angle = 90) |> yLine(endAbsolute = 4.5) @@ -35,10 +35,10 @@ fanCenter = startSketchOn(XZ) // Create a function for a lofted fan blade cross section that rotates about the center hub of the fan fn fanBlade(offsetHeight, startAngle) { fanBlade = startSketchOn(offsetPlane(XY, offset = offsetHeight)) - |> startProfileAt([ + |> startProfile(at = [ 15 * cos(toRadians(startAngle)), 15 * sin(toRadians(startAngle)) - ], %) + ]) |> arc(angleStart = startAngle, angleEnd = startAngle + 14, radius = 15) |> arc( endAbsolute = [ diff --git a/public/kcl-samples/ball-bearing/main.kcl b/public/kcl-samples/ball-bearing/main.kcl index ac82062bb..3019f3e5c 100644 --- a/public/kcl-samples/ball-bearing/main.kcl +++ b/public/kcl-samples/ball-bearing/main.kcl @@ -26,7 +26,7 @@ insideWall = extrude(insideWallSketch, length = overallThickness) // Create the sketch of one of the balls ballsSketch = startSketchOn(XY) - |> startProfileAt([shaftDia / 2 + wallThickness, 0.001], %) + |> startProfile(at = [shaftDia / 2 + wallThickness, 0.001]) |> arc(angleStart = 180, angleEnd = 0, radius = sphereDia / 2) |> close() @@ -42,10 +42,10 @@ balls = revolve(ballsSketch, axis = X) // Create the sketch for the chain around the balls chainSketch = startSketchOn(XY) - |> startProfileAt([ + |> startProfile(at = [ shaftDia / 2 + wallThickness + sphereDia / 2 - (chainWidth / 2), 0.125 * sin(toRadians(60)) - ], %) + ]) |> arc(angleStart = 120, angleEnd = 60, radius = sphereDia / 2) |> line(end = [0, chainThickness]) |> line(end = [-chainWidth, 0]) diff --git a/public/kcl-samples/bench/bench-parts.kcl b/public/kcl-samples/bench/bench-parts.kcl index 112fcdd8d..129fb1954 100644 --- a/public/kcl-samples/bench/bench-parts.kcl +++ b/public/kcl-samples/bench/bench-parts.kcl @@ -8,7 +8,7 @@ export dividerThickness = 4 fn dividerSketch(plane) { sketch000 = startSketchOn(plane) - |> startProfileAt([-16.82, 21.2], %) + |> startProfile(at = [-16.82, 21.2]) |> line(end = [-0.13, -1.27]) |> tangentialArc(endAbsolute = [-15.94, profileStartY(%) - 7.73]) |> tangentialArc(endAbsolute = [-16.6, profileStartY(%) - 15.52]) @@ -45,7 +45,7 @@ export fn divider(plane) { fn connectorSketch(plane, start) { sketch001 = startSketchOn(plane) - |> startProfileAt(start, %) + |> startProfile(at = start) |> polygon( radius = 1.2, numSides = 6, @@ -65,7 +65,7 @@ export fn connector(plane, length) { fn seatSlatSketch(plane) { sketch003 = startSketchOn(plane) - |> startProfileAt([-7, 19], %) + |> startProfile(at = [-7, 19]) |> line(end = [-10, 0.5]) |> line(end = [0.2, 2.5]) |> line(end = [1.5, 1.5]) @@ -85,7 +85,7 @@ export fn seatSlats(plane, length) { fn backSlatsSketch(plane) { sketch004 = startSketchOn(plane) - |> startProfileAt([22, 38.5], %) + |> startProfile(at = [22, 38.5]) |> angledLine(angle = 173, length = 2) |> line(end = [-1.74, 2.03]) |> angledLine(angle = 82, length = 6.6) @@ -105,7 +105,7 @@ export fn backSlats(plane, length) { fn armRestPath(plane) { sketch005 = startSketchOn(plane) - |> startProfileAt([20, 33], %) + |> startProfile(at = [20, 33]) |> xLine(length = -20) |> arc(angleStart = 90, angleEnd = 180, radius = 10) return sketch005 @@ -113,7 +113,7 @@ fn armRestPath(plane) { fn armRestProfile(plane, offset) { sketch006 = startSketchOn(plane) - |> startProfileAt([offset, 32.4], %) + |> startProfile(at = [offset, 32.4]) |> xLine(length = 1.3) |> line(end = [0.3, 0.6]) |> line(end = [-0.3, 0.6]) diff --git a/public/kcl-samples/bottle/main.kcl b/public/kcl-samples/bottle/main.kcl index 31d7132fd..179ae216e 100644 --- a/public/kcl-samples/bottle/main.kcl +++ b/public/kcl-samples/bottle/main.kcl @@ -14,7 +14,7 @@ wallThickness = 4 // Create a rounded body for the bottle bottleBody = startSketchOn(XY) - |> startProfileAt([-bottleLength / 2, 0], %) + |> startProfile(at = [-bottleLength / 2, 0]) |> yLine(length = bottleWidth / 3) |> arc(endAbsolute = [bottleLength / 2, bottleWidth / 3], interiorAbsolute = [0, bottleWidth / 2]) |> yLine(endAbsolute = 0) diff --git a/public/kcl-samples/bracket/main.kcl b/public/kcl-samples/bracket/main.kcl index 20759eec6..2c15fb6ee 100644 --- a/public/kcl-samples/bracket/main.kcl +++ b/public/kcl-samples/bracket/main.kcl @@ -32,7 +32,7 @@ assert(width, isGreaterThanOrEqual = wallMountingHoleDiameter * 5.5, error = "Ho // Create the body of the bracket bracketBody = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = shelfMountLength - thickness, tag = $seg01) |> yLine(length = thickness, tag = $seg02) |> xLine(length = -shelfMountLength, tag = $seg03) diff --git a/public/kcl-samples/car-wheel-assembly/brake-caliper.kcl b/public/kcl-samples/car-wheel-assembly/brake-caliper.kcl index 15ce94f51..90ca8204b 100644 --- a/public/kcl-samples/car-wheel-assembly/brake-caliper.kcl +++ b/public/kcl-samples/car-wheel-assembly/brake-caliper.kcl @@ -9,10 +9,10 @@ import caliperTolerance, caliperPadLength, caliperThickness, caliperOuterEdgeRad // Sketch the brake caliper profile brakeCaliperSketch = startSketchOn(XY) - |> startProfileAt([ + |> startProfile(at = [ rotorDiameter / 2 + caliperTolerance, 0 - ], %) + ]) |> line(end = [ 0, rotorTotalThickness + caliperTolerance - caliperInnerEdgeRadius diff --git a/public/kcl-samples/car-wheel-assembly/car-rotor.kcl b/public/kcl-samples/car-wheel-assembly/car-rotor.kcl index 96b389f48..33d31c017 100644 --- a/public/kcl-samples/car-wheel-assembly/car-rotor.kcl +++ b/public/kcl-samples/car-wheel-assembly/car-rotor.kcl @@ -57,7 +57,7 @@ spacerSketch = startSketchOn(rotor, face = START) spacers = extrude(spacerSketch, length = spacerLength) rotorSlottedSketch = startSketchOn(rotor, face = START) - |> startProfileAt([2.17, 2.56], %) + |> startProfile(at = [2.17, 2.56]) |> xLine(length = 0.12) |> yLine(length = 2.56) |> xLine(length = -0.12) @@ -72,7 +72,7 @@ rotorSlottedSketch = startSketchOn(rotor, face = START) rotorSlotted = extrude(rotorSlottedSketch, length = -rotorSinglePlateThickness / 2) secondRotorSlottedSketch = startSketchOn(secondRotor, face = END) - |> startProfileAt([-2.17, 2.56], %) + |> startProfile(at = [-2.17, 2.56]) |> xLine(length = -0.12) |> yLine(length = 2.56) |> xLine(length = 0.12) diff --git a/public/kcl-samples/car-wheel-assembly/car-tire.kcl b/public/kcl-samples/car-wheel-assembly/car-tire.kcl index 1c20b1ea9..f8a26616e 100644 --- a/public/kcl-samples/car-wheel-assembly/car-tire.kcl +++ b/public/kcl-samples/car-wheel-assembly/car-tire.kcl @@ -9,7 +9,7 @@ import tireInnerDiameter, tireOuterDiameter, tireDepth, bendRadius, tireTreadWid // Create the sketch of the tire tireSketch = startSketchOn(XY) - |> startProfileAt([tireInnerDiameter / 2, tireDepth / 2], %) + |> startProfile(at = [tireInnerDiameter / 2, tireDepth / 2]) |> line( endAbsolute = [ tireOuterDiameter / 2 - bendRadius, diff --git a/public/kcl-samples/car-wheel-assembly/car-wheel.kcl b/public/kcl-samples/car-wheel-assembly/car-wheel.kcl index 604922ba2..c113cfc9b 100644 --- a/public/kcl-samples/car-wheel-assembly/car-wheel.kcl +++ b/public/kcl-samples/car-wheel-assembly/car-wheel.kcl @@ -44,7 +44,7 @@ lugHoles = startSketchOn(lugBase, face = END) // Add detail to the wheel center by revolving curved edge profiles wheelCenterInner = startSketchOn(XY) - |> startProfileAt([(lugSpacing - 1.5) / 2, 0], %) + |> startProfile(at = [(lugSpacing - 1.5) / 2, 0]) |> yLine(length = -wheelWidth / 10 - (wheelWidth / 20)) |> bezierCurve(control1 = [-0.3, 0], control2 = [0, 0.3], end = [-0.4, 0.3]) |> yLine(endAbsolute = 0) @@ -54,7 +54,7 @@ wheelCenterInner = startSketchOn(XY) |> appearance(color = "#ffffff", metalness = 0, roughness = 0) wheelCenterOuter = startSketchOn(XY) - |> startProfileAt([(lugSpacing + 1.5) / 2, 0], %) + |> startProfile(at = [(lugSpacing + 1.5) / 2, 0]) |> yLine(length = -wheelWidth / 10 - (wheelWidth / 20)) |> bezierCurve(control1 = [0.3, 0], control2 = [0.2, -0.3], end = [0.4, -0.1]) |> yLine(endAbsolute = -wheelWidth / 20) @@ -75,7 +75,7 @@ fn spoke(spokeGap, spokeAngle, spokeThickness) { // Spoke cross sections spokeProfile = startSketchOn(plane001) - |> startProfileAt([(lugSpacing + 2) / 2, -0.7], %) + |> startProfile(at = [(lugSpacing + 2) / 2, -0.7]) |> bezierCurve( control1 = [ (wheelDiameter - lugSpacing - 2.9) / 3.5, @@ -126,10 +126,10 @@ spoke(-spokeGap, -spokeAngle, -spokeThickness) // Define and revolve wheel exterior startSketchOn(XY) - |> startProfileAt([ + |> startProfile(at = [ wheelDiameter / 2, -wheelWidth + backSpacing + offset - ], %) + ]) |> yLine(length = wheelWidth * 0.25) |> line(end = [-wheelWidth * 0.02, wheelWidth * 0.02]) |> yLine(length = wheelWidth * 0.25) diff --git a/public/kcl-samples/car-wheel-assembly/lug-nut.kcl b/public/kcl-samples/car-wheel-assembly/lug-nut.kcl index e424dfe2b..be94402ac 100644 --- a/public/kcl-samples/car-wheel-assembly/lug-nut.kcl +++ b/public/kcl-samples/car-wheel-assembly/lug-nut.kcl @@ -20,7 +20,7 @@ customPlane = { fn lug(plane, length, diameter) { lugSketch = startSketchOn(customPlane) - |> startProfileAt([0 + diameter / 2, 0], %) + |> startProfile(at = [0 + diameter / 2, 0]) |> angledLine(angle = 70, lengthY = lugHeadLength) |> xLine(endAbsolute = lugDiameter / 2) |> yLine(endAbsolute = lugLength) diff --git a/public/kcl-samples/color-cube/main.kcl b/public/kcl-samples/color-cube/main.kcl index a05d71de1..433127289 100644 --- a/public/kcl-samples/color-cube/main.kcl +++ b/public/kcl-samples/color-cube/main.kcl @@ -22,7 +22,7 @@ tealPlane = offsetPlane(YZ, offset = -halfSize) // Sketch a rectangle centered at the origin of the profile fn sketchRectangle(profile, color) { return profile - |> startProfileAt([-halfSize, halfSize], %) + |> startProfile(at = [-halfSize, halfSize]) |> angledLine(angle = 0, length = size, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = size, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) diff --git a/public/kcl-samples/cycloidal-gear/main.kcl b/public/kcl-samples/cycloidal-gear/main.kcl index 14488c731..7d121d3d2 100644 --- a/public/kcl-samples/cycloidal-gear/main.kcl +++ b/public/kcl-samples/cycloidal-gear/main.kcl @@ -10,10 +10,10 @@ fn cycloidalGear(gearPitch, gearHeight, holeDiameter, helixAngle) { fn gearSketch(gHeight) { helixAngleP = helixAngle * gHeight / gearHeight gearProfile = startSketchOn(offsetPlane(XY, offset = gHeight)) - |> startProfileAt([ + |> startProfile(at = [ gearPitch * 1.55 * cos(toRadians(helixAngleP)) + gearPitch * sin(toRadians(-helixAngleP)), gearPitch * 1.55 * sin(toRadians(helixAngleP)) + gearPitch * cos(toRadians(-helixAngleP)) - ], %) + ]) |> arc(angleStart = 90 + helixAngleP, angleEnd = -90 + helixAngleP, radius = gearPitch) |> tangentialArc(radius = gearPitch * 1.67, angle = 60) |> tangentialArc(radius = gearPitch, angle = -180) diff --git a/public/kcl-samples/dodecahedron/main.kcl b/public/kcl-samples/dodecahedron/main.kcl index 3baf98a1c..dcf932262 100644 --- a/public/kcl-samples/dodecahedron/main.kcl +++ b/public/kcl-samples/dodecahedron/main.kcl @@ -10,7 +10,7 @@ dihedral = 116.565 // Create a face template function that makes a large thin cube fn createFaceTemplate(dither) { baseSketch = startSketchOn(XY) - |> startProfileAt([-1000 - dither, -1000 - dither], %) + |> startProfile(at = [-1000 - dither, -1000 - dither]) |> line(endAbsolute = [1000 + dither, -1000 - dither]) |> line(endAbsolute = [1000 + dither, 1000 + dither]) |> line(endAbsolute = [-1000 - dither, 1000 + dither]) diff --git a/public/kcl-samples/dual-basin-utility-sink/main.kcl b/public/kcl-samples/dual-basin-utility-sink/main.kcl index 4048cea9e..1b9309357 100644 --- a/public/kcl-samples/dual-basin-utility-sink/main.kcl +++ b/public/kcl-samples/dual-basin-utility-sink/main.kcl @@ -27,7 +27,7 @@ floorPlane = startSketchOn(XY) legHeight = blockHeight - profileThickness legCount = blockCount + 1 -legBody = startProfileAt([0, 0], floorPlane) +legBody = startProfile(floorPlane, at = [0, 0]) |> yLine(length = profileThickness) |> xLine(length = profileThickness) |> yLine(length = -profileThickness) @@ -42,7 +42,7 @@ lowerBeltHeightAboveTheFloor = 150 lowerBeltLengthX = blockWidth - profileThickness lowerBeltPlane = startSketchOn(offsetPlane(XY, offset = lowerBeltHeightAboveTheFloor)) -lowerBeltBodyX = startProfileAt([profileThickness, 0], lowerBeltPlane) +lowerBeltBodyX = startProfile(lowerBeltPlane, at = [profileThickness, 0]) |> yLine(length = profileThickness) |> xLine(length = lowerBeltLengthX) |> yLine(length = -profileThickness) @@ -53,7 +53,7 @@ lowerBeltBodyX = startProfileAt([profileThickness, 0], lowerBeltPlane) |> extrude(length = profileThickness) lowerBeltLengthY = blockDepth - profileThickness -lowerBeltBodyY = startProfileAt([0, profileThickness], lowerBeltPlane) +lowerBeltBodyY = startProfile(lowerBeltPlane, at = [0, profileThickness]) |> yLine(length = lowerBeltLengthY) |> xLine(length = profileThickness) |> yLine(length = -lowerBeltLengthY) @@ -67,7 +67,7 @@ pillarHeightAboveTheFloor = lowerBeltHeightAboveTheFloor + profileThickness pillarPlane = startSketchOn(offsetPlane(XY, offset = pillarHeightAboveTheFloor)) pillarTotalHeight = blockHeight - profileThickness - pillarHeightAboveTheFloor -pillarBody = startProfileAt([blockSubdivisionWidth, 0], pillarPlane) +pillarBody = startProfile(pillarPlane, at = [blockSubdivisionWidth, 0]) |> yLine(length = profileThickness) |> xLine(length = profileThickness) |> yLine(length = -profileThickness) @@ -80,7 +80,7 @@ pillarBody = startProfileAt([blockSubdivisionWidth, 0], pillarPlane) // upper belt upperBeltPlane = startSketchOn(offsetPlane(XY, offset = blockHeight)) -upperBeltBodyX = startProfileAt([0, 0], upperBeltPlane) +upperBeltBodyX = startProfile(upperBeltPlane, at = [0, 0]) |> yLine(length = profileThickness) |> xLine(length = tableWidth) |> yLine(length = -profileThickness) @@ -90,7 +90,7 @@ upperBeltBodyX = startProfileAt([0, 0], upperBeltPlane) |> extrude(length = -profileThickness) upperBeltLengthY = blockDepth - profileThickness -upperBeltBodyY = startProfileAt([0, profileThickness], upperBeltPlane) +upperBeltBodyY = startProfile(upperBeltPlane, at = [0, profileThickness]) |> yLine(length = upperBeltLengthY) |> xLine(length = profileThickness) |> yLine(length = -upperBeltLengthY) @@ -101,7 +101,7 @@ upperBeltBodyY = startProfileAt([0, profileThickness], upperBeltPlane) // sink tableTopPlane = startSketchOn(offsetPlane(XY, offset = tableHeight)) -tableTopBody = startProfileAt([0, 0], tableTopPlane) +tableTopBody = startProfile(tableTopPlane, at = [0, 0]) |> yLine(length = tableDepth) |> xLine(length = tableWidth) |> yLine(length = -tableDepth) @@ -118,7 +118,7 @@ sinkOffsetLeft = 350 sinkSpacing = tableWidth - sinkWidth - (sinkOffsetLeft * 2) sinkPlaneOutside = startSketchOn(tableTopBody, face = START) -sinkBodyOutside = startProfileAt([-sinkOffsetLeft, sinkOffsetFront], sinkPlaneOutside) +sinkBodyOutside = startProfile(sinkPlaneOutside, at = [-sinkOffsetLeft, sinkOffsetFront]) |> yLine(length = sinkLength) |> xLine(length = -sinkWidth) |> yLine(length = -sinkLength) @@ -128,10 +128,13 @@ sinkBodyOutside = startProfileAt([-sinkOffsetLeft, sinkOffsetFront], sinkPlaneOu |> extrude(length = sinkDepth) sinkPlaneInside = startSketchOn(tableTopBody, face = END) -sinkBodyInside = startProfileAt([ - sinkOffsetLeft + metalThickness, - sinkOffsetFront + metalThickness - ], sinkPlaneInside) +sinkBodyInside = startProfile( + sinkPlaneInside, + at = [ + sinkOffsetLeft + metalThickness, + sinkOffsetFront + metalThickness + ], + ) |> yLine(length = sinkLength - (metalThickness * 2)) |> xLine(length = sinkWidth - (metalThickness * 2)) |> yLine(length = -sinkLength + metalThickness * 2) @@ -149,7 +152,7 @@ doorHeight = blockHeight - doorHeightAboveTheFloor - profileThickness - doorGap doorCount = blockCount * blockSubdivisionCount doorPlane = startSketchOn(offsetPlane(XY, offset = doorHeightAboveTheFloor)) -doorBody = startProfileAt([doorStart, 0], doorPlane) +doorBody = startProfile(doorPlane, at = [doorStart, 0]) |> yLine(length = profileThickness) |> xLine(length = doorWidth) |> yLine(length = -profileThickness) @@ -162,7 +165,7 @@ doorBody = startProfileAt([doorStart, 0], doorPlane) panelWidth = blockDepth - profileThickness - (doorGap * 2) panelCount = doorCount + 1 panelSpacing = tableWidth - profileThickness -panelBody = startProfileAt([0, doorStart], doorPlane) +panelBody = startProfile(doorPlane, at = [0, doorStart]) |> yLine(length = panelWidth) |> xLine(length = profileThickness) |> yLine(length = -panelWidth) @@ -182,7 +185,7 @@ handleLengthSegmentB = handleWidth - (handleFillet * 2) handlePlane = startSketchOn(offsetPlane(XY, offset = handleHeightAboveTheFloor)) -handleProfilePath = startProfileAt([0 + handleOffset, 0], handlePlane) +handleProfilePath = startProfile(handlePlane, at = [0 + handleOffset, 0]) |> yLine(length = -handleLengthSegmentA) |> tangentialArc(endAbsolute = [ handleFillet + handleOffset, diff --git a/public/kcl-samples/enclosure/main.kcl b/public/kcl-samples/enclosure/main.kcl index e24fe76cb..76a4dc32e 100644 --- a/public/kcl-samples/enclosure/main.kcl +++ b/public/kcl-samples/enclosure/main.kcl @@ -13,7 +13,7 @@ holeDia = 4 // Model a box with base enclosure dimensions sketch001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 0, length = width, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = length, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) @@ -72,7 +72,7 @@ function001([ // Define lid position and outer surface sketch003 = startSketchOn(XY) - |> startProfileAt([width * 1.2, 0], %) + |> startProfile(at = [width * 1.2, 0]) |> angledLine(angle = 0, length = width, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = length, tag = $rectangleSegmentB002) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC002) @@ -119,10 +119,10 @@ extrude003 = extrude(sketch003, length = wallThickness) // Define lid inner and sealing surfaces sketch004 = startSketchOn(extrude003, face = END) - |> startProfileAt([ + |> startProfile(at = [ width * 1.2 + wallThickness, wallThickness - ], %) + ]) |> angledLine(angle = 0, length = width - (2 * wallThickness), tag = $rectangleSegmentA003) |> angledLine(angle = segAng(rectangleSegmentA003) + 90, length = length - (2 * wallThickness), tag = $rectangleSegmentB003) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003), tag = $rectangleSegmentC003) diff --git a/public/kcl-samples/exhaust-manifold/main.kcl b/public/kcl-samples/exhaust-manifold/main.kcl index c1baec09e..2fd228a37 100644 --- a/public/kcl-samples/exhaust-manifold/main.kcl +++ b/public/kcl-samples/exhaust-manifold/main.kcl @@ -29,7 +29,7 @@ fn primaryTube(n, angle001, length001, length002, length003) { // Draw a path for each sweep sweepPath = startSketchOn(sweepPlane) - |> startProfileAt([0, plateHeight], %) + |> startProfile(at = [0, plateHeight]) |> line(end = [0, length001]) |> tangentialArc(angle = -80, radius = bendRadius, tag = $arc01) |> angledLine(angle = tangentToEnd(arc01), length = length002) @@ -53,7 +53,7 @@ primaryTube(3, 25.2, 5, 5, 3) // Create the mounting flange for the header flangeSketch = startSketchOn(XY) - |> startProfileAt([3 + 1.3, -1.25], %) + |> startProfile(at = [3 + 1.3, -1.25]) |> xLine(length = -2.6, tag = $seg01) |> tangentialArc(radius = .3, angle = -40) |> tangentialArc(radius = .9, angle = 80) diff --git a/public/kcl-samples/focusrite-scarlett-mounting-bracket/main.kcl b/public/kcl-samples/focusrite-scarlett-mounting-bracket/main.kcl index 9b6a91e11..33f3b023f 100644 --- a/public/kcl-samples/focusrite-scarlett-mounting-bracket/main.kcl +++ b/public/kcl-samples/focusrite-scarlett-mounting-bracket/main.kcl @@ -18,7 +18,7 @@ tabThk = 4 // Define a rectangular shape func fn rectShape(pos, w, l) { rr = startSketchOn(XY) - |> startProfileAt([pos[0] - (w / 2), pos[1] - (l / 2)], %) + |> startProfile(at = [pos[0] - (w / 2), pos[1] - (l / 2)]) |> line(endAbsolute = [pos[0] + w / 2, pos[1] - (l / 2)], tag = $edge01) |> line(endAbsolute = [pos[0] + w / 2, pos[1] + l / 2], tag = $edge02) |> line(endAbsolute = [pos[0] - (w / 2), pos[1] + l / 2], tag = $edge03) @@ -37,7 +37,7 @@ bracketPlane = { // Build the bracket sketch around the body fn bracketSketch(w, d, t) { s = startSketchOn(bracketPlane) - |> startProfileAt([-w / 2 - t, d + t], %) + |> startProfile(at = [-w / 2 - t, d + t]) |> line(endAbsolute = [-w / 2 - t, -t], tag = $edge1) |> line(endAbsolute = [w / 2 + t, -t], tag = $edge2) |> line(endAbsolute = [w / 2 + t, d + t], tag = $edge3) @@ -73,7 +73,7 @@ tabPlane = { // Build the tabs of the mounting bracket (right side) tabsR = startSketchOn(tabPlane) - |> startProfileAt([width / 2 + thk, length / 2 + thk], %) + |> startProfile(at = [width / 2 + thk, length / 2 + thk]) |> line(end = [tabWidth, -tabLength / 3], tag = $edge11) |> line(end = [0, -tabLength / 3 * 2], tag = $edge12) |> line(end = [-tabWidth, -tabLength / 3], tag = $edge13) @@ -97,7 +97,7 @@ tabsR = startSketchOn(tabPlane) // Build the tabs of the mounting bracket (left side) tabsL = startSketchOn(tabPlane) - |> startProfileAt([-width / 2 - thk, length / 2 + thk], %) + |> startProfile(at = [-width / 2 - thk, length / 2 + thk]) |> line(end = [-tabWidth, -tabLength / 3], tag = $edge21) |> line(end = [0, -tabLength / 3 * 2], tag = $edge22) |> line(end = [tabWidth, -tabLength / 3], tag = $edge23) @@ -129,7 +129,7 @@ retPlane = { // Build the retention bump in the front retFront = startSketchOn(retPlane) - |> startProfileAt([-length / 2 - thk, 0], %) + |> startProfile(at = [-length / 2 - thk, 0]) |> line(end = [0, thk]) |> line(end = [thk, -thk]) |> close() @@ -137,7 +137,7 @@ retFront = startSketchOn(retPlane) // Build the retention bump in the back retBack = startSketchOn(retPlane) - |> startProfileAt([length / 2 + thk, 0], %) + |> startProfile(at = [length / 2 + thk, 0]) |> line(end = [0, thk]) |> line(end = [-thk, 0]) |> line(end = [0, -thk]) diff --git a/public/kcl-samples/food-service-spatula/main.kcl b/public/kcl-samples/food-service-spatula/main.kcl index 6be8bab68..9056546f2 100644 --- a/public/kcl-samples/food-service-spatula/main.kcl +++ b/public/kcl-samples/food-service-spatula/main.kcl @@ -34,7 +34,7 @@ fn slot(sketch1, start, end, width) { dist = sqrt(pow(end[1] - start[1], 2) + pow(end[0] - start[0], 2)) xstart = width / 2 * cos(toRadians(angle - 90)) + start[0] ystart = width / 2 * sin(toRadians(angle - 90)) + start[1] - slotSketch = startProfileAt([xstart, ystart], sketch1) + slotSketch = startProfile(sketch1, at = [xstart, ystart]) |> angledLine(angle = angle, length = dist) |> tangentialArc(radius = width / 2, angle = 180) |> angledLine(angle = angle, length = -dist) @@ -47,7 +47,7 @@ fn slot(sketch1, start, end, width) { flipperSketch = startSketchOn(XY) // Create a profile of the flipper -flipperProfile = startProfileAt([-flipperLength, -32.0], flipperSketch) +flipperProfile = startProfile(flipperSketch, at = [-flipperLength, -32.0]) |> line(end = [flipperLength, 2.0]) |> yLine(length = 60.0, tag = $backEdge) |> line(end = [-flipperLength, 2.0]) @@ -86,7 +86,7 @@ fillet( handleSketch = startSketchOn(offsetPlane(XZ, offset = -handleWidth / 2)) // Create a profile of the spatula handle -handleProfile = startProfileAt([0.0, flipperThickness], handleSketch) +handleProfile = startProfile(handleSketch, at = [0.0, flipperThickness]) |> line(end = [31.819805, 31.819805], tag = $handleBottomEdge) |> line(end = [140.953893, 51.303021]) |> line(end = [-1.710101, 4.698463]) @@ -120,7 +120,7 @@ handlePlane = { gripSketch = startSketchOn(handlePlane) // Create a profile of the grip -gripProfile = startProfileAt([-26.806746, -10.0], gripSketch) +gripProfile = startProfile(gripSketch, at = [-26.806746, -10.0]) |> xLine(length = gripWidth - (2 * gripFilletRadius)) |> arc(angleStart = -90.0, angleEnd = 0.0, radius = gripFilletRadius) |> yLine(length = gripHeight - (2 * gripFilletRadius)) diff --git a/public/kcl-samples/french-press/main.kcl b/public/kcl-samples/french-press/main.kcl index a87e4c562..5a0a7cd5a 100644 --- a/public/kcl-samples/french-press/main.kcl +++ b/public/kcl-samples/french-press/main.kcl @@ -11,7 +11,7 @@ handleThickness = 0.65 // Upper ring of the metal structure sketch001 = startSketchOn(XZ) - |> startProfileAt([carafeDiameter / 2, 5.7], %) + |> startProfile(at = [carafeDiameter / 2, 5.7]) |> angledLine(angle = 0, length = 0.1, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = -0.75, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) @@ -29,7 +29,7 @@ plane001 = { // Cross section of the metal supports sketch002 = startSketchOn(plane001) - |> startProfileAt([carafeDiameter / 2, 5.7], %) + |> startProfile(at = [carafeDiameter / 2, 5.7]) |> xLine(length = 0.1) |> yLine(length = -5.2, tag = $edge1) |> arc(angleStart = 180, angleEnd = 205, radius = 0.3) @@ -63,7 +63,7 @@ sketch003 = startSketchOn(offsetPlane(XY, offset = 1)) extrude001 = extrude(sketch003, length = 0.050) sketch004 = startSketchOn(extrude001, face = END) - |> startProfileAt([0.3, 0.17], %) + |> startProfile(at = [0.3, 0.17]) |> yLine(length = 1.2) |> arc(angleStart = 90, angleEnd = -30, radius = 1.2) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -79,7 +79,7 @@ extrude002 = extrude(sketch004, length = -0.050) // Filter screen sketch005 = startSketchOn(XZ) - |> startProfileAt([0.15, 1.11], %) + |> startProfile(at = [0.15, 1.11]) |> xLine(endAbsolute = carafeDiameter / 2 - 0.2) |> angledLine(angle = 30, endAbsoluteX = carafeDiameter / 2 - 0.07, tag = $seg1) |> angledLine(angle = -60, length = 0.050) @@ -91,7 +91,7 @@ sketch005 = startSketchOn(XZ) // Plunger and stem sketch006 = startSketchOn(XZ) - |> startProfileAt([0.1, 1], %) + |> startProfile(at = [0.1, 1]) |> line(end = [0.1, 0]) |> angledLine(angle = 10, endAbsoluteX = 0.05) |> yLine(length = 10) @@ -143,7 +143,7 @@ extrude006 = extrude(sketch010, length = carafeHeight) // Draw and revolve the lid sketch011 = startSketchOn(XZ) - |> startProfileAt([0.2, carafeHeight - 0.7], %) + |> startProfile(at = [0.2, carafeHeight - 0.7]) |> xLine(length = carafeDiameter / 2 - 0.3) |> yLine(length = 0.7) |> xLine(length = 0.3) @@ -156,7 +156,7 @@ sketch011 = startSketchOn(XZ) // Draw and extrude handle sketch012 = startSketchOn(offsetPlane(XZ, offset = handleThickness / 2)) - |> startProfileAt([2.3, 6.4], %) + |> startProfile(at = [2.3, 6.4]) |> line(end = [0.56, 0]) |> tangentialArc(endAbsolute = [4.1, 5.26]) |> tangentialArc(endAbsolute = [4.17, 1.6]) diff --git a/public/kcl-samples/gear-rack/main.kcl b/public/kcl-samples/gear-rack/main.kcl index 972e943ff..1578b3acc 100644 --- a/public/kcl-samples/gear-rack/main.kcl +++ b/public/kcl-samples/gear-rack/main.kcl @@ -13,7 +13,7 @@ minHeight = 10.875 // Create the body of the rack rackBody = startSketchOn(XY) - |> startProfileAt([-length / 2, 0], %) + |> startProfile(at = [-length / 2, 0]) |> line(end = [length, 0]) |> line(end = [0, minHeight]) |> line(end = [-length, 0]) @@ -23,7 +23,7 @@ rackBody = startSketchOn(XY) // Create a function for sketch of a single tooth fn tooth() { toothSketch = startSketchOn(XY) - |> startProfileAt([-length / 2 + 0.567672, minHeight], %) + |> startProfile(at = [-length / 2 + 0.567672, minHeight]) |> tangentialArc(end = [0.157636, 0.110378]) |> line(end = [0.329118, 0.904244]) |> tangentialArc(end = [0.157636, 0.110378]) @@ -42,7 +42,7 @@ teeth = tooth() // Sketch and extrude the first end cap. This is a partial tooth endCapTooth = startSketchOn(XY) - |> startProfileAt([-length / 2, 11.849525], %) + |> startProfile(at = [-length / 2, 11.849525]) |> line(end = [0.314524, -0.864147]) |> tangentialArc(end = [0.157636, -0.110378]) |> line(endAbsolute = [-length / 2, minHeight]) @@ -51,7 +51,7 @@ endCapTooth = startSketchOn(XY) // Sketch and extrude the second end cap. This is a partial tooth endCapTooth2 = startSketchOn(XY) - |> startProfileAt([length / 2, 11.849525], %) + |> startProfile(at = [length / 2, 11.849525]) |> line(end = [-0.314524, -0.864147]) |> tangentialArc(end = [-0.157636, -0.110378]) |> line(endAbsolute = [length / 2, minHeight]) diff --git a/public/kcl-samples/gear/main.kcl b/public/kcl-samples/gear/main.kcl index 45d73fc8f..65b985e4f 100644 --- a/public/kcl-samples/gear/main.kcl +++ b/public/kcl-samples/gear/main.kcl @@ -61,7 +61,7 @@ fn rightInvolute(i, sg) { // Draw gear teeth start = startSketchOn(XY) - |> startProfileAt([xs[101], ys[101]], %) + |> startProfile(at = [xs[101], ys[101]]) teeth = reduce([0..100], start, leftInvolute) |> arc(angleStart = 0, angleEnd = toothAngle, radius = baseDiameter / 2) |> reduce([1..101], %, rightInvolute) @@ -84,10 +84,10 @@ startAngle = asin(keywayWidth / 2 / holeRadius) // Sketch the keyway and center hole and extrude keyWay = startSketchOn(body, face = END) - |> startProfileAt([ + |> startProfile(at = [ holeRadius * cos(startAngle), holeRadius * sin(startAngle) - ], %) + ]) |> xLine(length = keywayDepth) |> yLine(length = -keywayWidth) |> xLine(length = -keywayDepth) diff --git a/public/kcl-samples/gridfinity-baseplate-magnets/main.kcl b/public/kcl-samples/gridfinity-baseplate-magnets/main.kcl index 77a805b77..91b9fc062 100644 --- a/public/kcl-samples/gridfinity-baseplate-magnets/main.kcl +++ b/public/kcl-samples/gridfinity-baseplate-magnets/main.kcl @@ -24,7 +24,7 @@ height = firstStep + secondStep + thirdStep // Define a function which builds the profile of the baseplate bin fn face(plane) { faceSketch = startSketchOn(plane) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(length = height) |> angledLine(angle = -45, lengthY = thirdStep) |> yLine(length = -secondStep) @@ -86,10 +86,10 @@ basePlateCorners = patternLinear3d( // Create the center cutout for the magnet profile fn magnetCenterCutout(plane) { magnetSketch = startSketchOn(plane) - |> startProfileAt([ + |> startProfile(at = [ firstStep + thirdStep, 2 * magOuterDiam - ], %) + ]) |> xLine(length = 2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)) |> arc(angleStart = 90.0, angleEnd = 0.0, radius = magOuterDiam / 2) |> yLine(length = -(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2))) @@ -113,7 +113,7 @@ fn magnetCenterCutout(plane) { // Create the outside profile of the magnets fn magnetBase(plane) { magnetBaseSketch = startSketchOn(plane) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = binLength, tag = $line001) |> yLine(length = binLength, tag = $line002) |> xLine(endAbsolute = profileStartX(%), tag = $line003) diff --git a/public/kcl-samples/gridfinity-baseplate/main.kcl b/public/kcl-samples/gridfinity-baseplate/main.kcl index 4f03353aa..1d1281fbe 100644 --- a/public/kcl-samples/gridfinity-baseplate/main.kcl +++ b/public/kcl-samples/gridfinity-baseplate/main.kcl @@ -21,7 +21,7 @@ height = firstStep + secondStep + thirdStep // Define a function which builds the profile of the baseplate bin fn face(plane) { faceSketch = startSketchOn(plane) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(length = height) |> angledLine(angle = -45, lengthY = thirdStep) |> yLine(length = -secondStep) diff --git a/public/kcl-samples/gridfinity-bins-stacking-lip/main.kcl b/public/kcl-samples/gridfinity-bins-stacking-lip/main.kcl index 96b8555f4..0f63cdfa0 100644 --- a/public/kcl-samples/gridfinity-bins-stacking-lip/main.kcl +++ b/public/kcl-samples/gridfinity-bins-stacking-lip/main.kcl @@ -36,7 +36,7 @@ lipHeight = lipStep1 + lipStep2 + lipStep3 + lipStep4 + lipStep5 // Define a function which builds the profile of the baseplate bin fn face(plane) { faceSketch = startSketchOn(plane) - |> startProfileAt([binBaseLength + binTol, 0], %) + |> startProfile(at = [binBaseLength + binTol, 0]) |> yLine(length = height) |> xLine(length = -binBaseLength) |> angledLine(angle = -45, lengthY = thirdStep) @@ -90,10 +90,10 @@ corners = patternCircular3d( ) singleBinFill = startSketchOn(XY) - |> startProfileAt([ + |> startProfile(at = [ binBaseLength + binTol, binBaseLength + binTol - ], %) + ]) |> line(end = [binLength - (binBaseLength * 2), 0], tag = $line000) |> line(end = [0, binLength - (binBaseLength * 2)], tag = $line001) |> xLine(endAbsolute = profileStartX(%), tag = $line002) @@ -156,7 +156,7 @@ binFill = patternLinear3d( |> patternLinear3d(axis = [0.0, 1.0, 0.0], instances = countBinLength, distance = binLength + binTol * 2) binTop = startSketchOn(offsetPlane(XY, offset = height)) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = (binLength + 2 * binTol) * countBinWidth, tag = $line010) |> yLine(length = (binLength + 2 * binTol) * countBinLength, tag = $line011) |> xLine(endAbsolute = profileStartX(%), tag = $line012) @@ -176,7 +176,7 @@ binTop = startSketchOn(offsetPlane(XY, offset = height)) // Define a function which builds the profile of the baseplate bin fn lipFace(plane) { faceSketch = startSketchOn(plane) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) // |> yLine(length = lipHeight, tag = $line100) |> line(end = [0.0, 5.792893], tag = $line000) |> arc( diff --git a/public/kcl-samples/gridfinity-bins/main.kcl b/public/kcl-samples/gridfinity-bins/main.kcl index 2be98afa6..1fbad9966 100644 --- a/public/kcl-samples/gridfinity-bins/main.kcl +++ b/public/kcl-samples/gridfinity-bins/main.kcl @@ -29,7 +29,7 @@ height = firstStep + secondStep + thirdStep // Define a function which builds the profile of the baseplate bin fn face(plane) { faceSketch = startSketchOn(plane) - |> startProfileAt([binBaseLength + binTol, 0], %) + |> startProfile(at = [binBaseLength + binTol, 0]) |> yLine(length = height) |> xLine(length = -binBaseLength) |> angledLine(angle = -45, lengthY = thirdStep) @@ -83,10 +83,10 @@ corners = patternCircular3d( ) singleBinFill = startSketchOn(XY) - |> startProfileAt([ + |> startProfile(at = [ binBaseLength + binTol, binBaseLength + binTol - ], %) + ]) |> line(end = [binLength - (binBaseLength * 2), 0], tag = $line000) |> line(end = [0, binLength - (binBaseLength * 2)], tag = $line001) |> xLine(endAbsolute = profileStartX(%), tag = $line002) @@ -150,7 +150,7 @@ binFill = patternLinear3d( // Create the top of the bin binTop = startSketchOn(offsetPlane(XY, offset = height)) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = (binLength + 2 * binTol) * countBinWidth, tag = $line010) |> yLine(length = (binLength + 2 * binTol) * countBinLength, tag = $line011) |> xLine(endAbsolute = profileStartX(%), tag = $line012) diff --git a/public/kcl-samples/hex-nut/main.kcl b/public/kcl-samples/hex-nut/main.kcl index 29197c874..7b4abb294 100644 --- a/public/kcl-samples/hex-nut/main.kcl +++ b/public/kcl-samples/hex-nut/main.kcl @@ -12,7 +12,7 @@ diameter = 0.3125 // Define a function for the hex nut fn hexNut(start, thk, innerDia) { hexNutSketch = startSketchOn(-XZ) - |> startProfileAt([start[0] + innerDia, start[1]], %) + |> startProfile(at = [start[0] + innerDia, start[1]]) |> angledLine(angle = 240, length = innerDia) |> angledLine(angle = 180, length = innerDia) |> angledLine(angle = 120, length = innerDia) diff --git a/public/kcl-samples/i-beam/main.kcl b/public/kcl-samples/i-beam/main.kcl index 544a43b18..95436e4ff 100644 --- a/public/kcl-samples/i-beam/main.kcl +++ b/public/kcl-samples/i-beam/main.kcl @@ -14,7 +14,7 @@ rootRadius = 0.457 // Sketch a quadrant of the beam cross section, then mirror for symmetry across each axis. Extrude to the appropriate length iBeam = startSketchOn(-XZ) - |> startProfileAt([0, beamHeight / 2], %) + |> startProfile(at = [0, beamHeight / 2]) |> xLine(length = flangeWidth / 2) |> yLine(length = -flangeThickness) |> xLine(endAbsolute = webThickness / 2 + rootRadius) diff --git a/public/kcl-samples/keyboard/main.kcl b/public/kcl-samples/keyboard/main.kcl index 1e02fe5ac..6cd650929 100644 --- a/public/kcl-samples/keyboard/main.kcl +++ b/public/kcl-samples/keyboard/main.kcl @@ -20,7 +20,7 @@ row6 = row5 + keyHeight + spacing // Sketch the side profile of the keyboard base and extrude to total width sketch001 = startSketchOn(YZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [-0.14, 0.68], tag = $seg01) |> angledLine(angle = 7, length = row6 + 3 * spacing + keyHeight, tag = $seg02) |> line(endAbsolute = [5.13, 0], tag = $seg03) @@ -65,7 +65,7 @@ plane001 = { // Create a function to build a key. Parameterize for position, width, height, number of instances, and appearance color. fn keyFn(originStart, keyWidth, keyHeight, repeats, color) { sketch002 = startSketchOn(plane001) - profile002 = startProfileAt([originStart[0], originStart[1]], sketch002) + profile002 = startProfile(sketch002, at = [originStart[0], originStart[1]]) |> arc(angleStart = 180, angleEnd = 270, radius = 0.1) |> angledLine(angle = 0, length = keyWidth - .2, tag = $rectangleSegmentA001) |> tangentialArc(radius = 0.1, angle = 90) @@ -131,10 +131,10 @@ plane002 = { // Define a function to draw the ZOO 'Z' fn z(origin, scale, depth) { z = startSketchOn(plane002) - |> startProfileAt([ + |> startProfile(at = [ 0 + origin[0], 0.15 * scale + origin[1] - ], %) + ]) |> yLine(length = -0.15 * scale) |> xLine(length = 0.15 * scale) |> angledLine(angle = 47.15, endAbsoluteX = 0.3 * scale + origin[0], tag = $seg1) @@ -159,10 +159,10 @@ fn z(origin, scale, depth) { // Define a function to draw the ZOO 'O' fn o(origin, scale, depth) { oSketch001 = startSketchOn(plane002) - |> startProfileAt([ + |> startProfile(at = [ .788 * scale + origin[0], .921 * scale + origin[1] - ], %) + ]) |> arc(angleStart = 47.15 + 6, angleEnd = 47.15 - 6 + 180, radius = .525 * scale) |> angledLine(angle = 47.15, length = .24 * scale) |> arc(angleStart = 47.15 - 11 + 180, angleEnd = 47.15 + 11, radius = .288 * scale) @@ -171,10 +171,10 @@ fn o(origin, scale, depth) { |> appearance(color = baseColor) o = startSketchOn(plane002) - |> startProfileAt([ + |> startProfile(at = [ .16 * scale + origin[0], .079 * scale + origin[1] - ], %) + ]) |> arc(angleStart = 47.15 + 6 - 180, angleEnd = 47.15 - 6, radius = .525 * scale) |> angledLine(angle = 47.15, length = -.24 * scale) |> arc(angleStart = 47.15 - 11, angleEnd = 47.15 + 11 - 180, radius = .288 * scale) diff --git a/public/kcl-samples/kitt/main.kcl b/public/kcl-samples/kitt/main.kcl index 3425cee48..dbc62717e 100644 --- a/public/kcl-samples/kitt/main.kcl +++ b/public/kcl-samples/kitt/main.kcl @@ -4,7 +4,7 @@ // Pixel box function fn pixelBox(kitExtrude, extrudeTag, positionY, positionZ, width, height, depth) { pixelBoxBody = startSketchOn(kitExtrude, face = extrudeTag) - |> startProfileAt([positionY, positionZ], %) + |> startProfile(at = [positionY, positionZ]) |> line(end = [0, height]) |> line(end = [width, 0]) |> line(end = [0, -height]) @@ -21,7 +21,7 @@ kitBodyHeight = 25 kitBodyDepth = 18 kitBody = startSketchOn(XZ) - |> startProfileAt([-kitBodyWidth / 2, kitBodyElevation], %) + |> startProfile(at = [-kitBodyWidth / 2, kitBodyElevation]) |> line(end = [0, kitBodyHeight]) |> line(end = [kitBodyWidth, 0], tag = $seg01) |> line(end = [0, -kitBodyHeight], tag = $seg02) @@ -46,7 +46,7 @@ kitFaceHeight = kitHeadElevation + kitHeadHeight - kitFaceElevation - 3 kitFaceDepth = 2 kitFace = startSketchOn(kitHead, face = END) - |> startProfileAt([-kitFaceWidth / 2, kitFaceElevation], %) + |> startProfile(at = [-kitFaceWidth / 2, kitFaceElevation]) |> line(end = [0, 1]) // left lower corner up |> line(end = [-1, 0]) // left lower corner left |> line(end = [0, kitFaceHeight]) // left side up @@ -79,7 +79,7 @@ kitLeftEye3 = pixelBox(kitFace, START, -kitEyeOffset + 4, kitEyeHeihgt, 1, 1, ki kitRightEye = pixelBox(kitFace, START, kitEyeOffset - 3, kitEyeHeihgt - 1, 2, 4, kitEyeDepth) kitNoseElevation = kitEyeHeihgt - 5 kitNose = startSketchOn(kitFace, face = START) - |> startProfileAt([-2, kitNoseElevation], %) // H V + |> startProfile(at = [-2, kitNoseElevation]) // H V |> line(end = [0, 1]) // lower-left up |> line(end = [2, 0]) // lower-left right |> line(end = [0, 2]) // mid-left up @@ -160,7 +160,7 @@ fn kitLeg(offsetFront, offsetSide) { kitShoeOffsetFront = kitShoeLength / 2 - (kitBodyDepth / 2) - offsetFront kitFootPrint = startSketchOn(XY) - |> startProfileAt([offsetSide, kitShoeOffsetFront], %) + |> startProfile(at = [offsetSide, kitShoeOffsetFront]) |> line(end = [kitShoeWidth, 0]) |> line(end = [0, -kitShoeLength]) |> line(end = [-kitShoeWidth, 0]) diff --git a/public/kcl-samples/lego/main.kcl b/public/kcl-samples/lego/main.kcl index 79edf94b1..d1b67700b 100644 --- a/public/kcl-samples/lego/main.kcl +++ b/public/kcl-samples/lego/main.kcl @@ -27,7 +27,7 @@ assert(wbumps, isGreaterThan = 1, error = "wbumps must be greater than 1") // Make the base base = startSketchOn(XY) - |> startProfileAt([-totalWidth / 2, -totalLength / 2], %) + |> startProfile(at = [-totalWidth / 2, -totalLength / 2]) |> line(end = [totalWidth, 0]) |> line(end = [0, totalLength]) |> line(end = [-totalWidth, 0]) @@ -36,10 +36,10 @@ base = startSketchOn(XY) // Sketch and extrude a rectangular shape to create the shell underneath the lego. Will replace with shell function when able to call a face created from shell. shellExtrude = startSketchOn(base, face = START) - |> startProfileAt([ + |> startProfile(at = [ -(totalWidth / 2 - t), -(totalLength / 2 - t) - ], %) + ]) |> line(end = [totalWidth - (2 * t), 0]) |> line(end = [0, totalLength - (2 * t)]) |> line(end = [-(totalWidth - (2 * t)), 0]) diff --git a/public/kcl-samples/makeup-mirror/main.kcl b/public/kcl-samples/makeup-mirror/main.kcl index 00ceb0d1a..a2586ab97 100644 --- a/public/kcl-samples/makeup-mirror/main.kcl +++ b/public/kcl-samples/makeup-mirror/main.kcl @@ -56,7 +56,7 @@ fn mirrorFn(plane, offsetX, offsetY, altitude, radius, tiefe, gestellR, gestellD armBody = circle(armPlane, center = [offsetX, altitude], radius = radius) |> extrude(length = tiefe) - archBody = startProfileAt([offsetX - gestellR, altitude], armPlane) + archBody = startProfile(armPlane, at = [offsetX - gestellR, altitude]) |> xLine(length = gestellD) |> arc(interiorAbsolute = [offsetX, altitude - gestellR], endAbsolute = [offsetX + gestellR, altitude]) |> xLine(length = gestellD) diff --git a/public/kcl-samples/mounting-plate/main.kcl b/public/kcl-samples/mounting-plate/main.kcl index 3c86913f7..4f4005fa1 100644 --- a/public/kcl-samples/mounting-plate/main.kcl +++ b/public/kcl-samples/mounting-plate/main.kcl @@ -14,7 +14,7 @@ centerHoleDiameter = 2 // Create a function that defines the body width and length of the mounting plate. Tag the corners so they can be passed through the fillet function. fn rectShape(pos, w, l) { rr = startSketchOn(XY) - |> startProfileAt([pos[0] - (w / 2), pos[1] - (l / 2)], %) + |> startProfile(at = [pos[0] - (w / 2), pos[1] - (l / 2)]) |> line(endAbsolute = [pos[0] + w / 2, pos[1] - (l / 2)], tag = $edge1) |> line(endAbsolute = [pos[0] + w / 2, pos[1] + l / 2], tag = $edge2) |> line(endAbsolute = [pos[0] - (w / 2), pos[1] + l / 2], tag = $edge3) diff --git a/public/kcl-samples/multi-axis-robot/robot-arm-base.kcl b/public/kcl-samples/multi-axis-robot/robot-arm-base.kcl index fe598370e..586ceafbd 100644 --- a/public/kcl-samples/multi-axis-robot/robot-arm-base.kcl +++ b/public/kcl-samples/multi-axis-robot/robot-arm-base.kcl @@ -8,7 +8,7 @@ import basePlateRadius, basePlateThickness, baseChamfer, baseHeight from "global // Base Plate sketch001 = startSketchOn(XY) - |> startProfileAt([-basePlateRadius, -basePlateRadius], %) + |> startProfile(at = [-basePlateRadius, -basePlateRadius]) |> angledLine(angle = 0, length = 2 * basePlateRadius, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 2 * basePlateRadius, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) diff --git a/public/kcl-samples/multi-axis-robot/robot-arm-j2.kcl b/public/kcl-samples/multi-axis-robot/robot-arm-j2.kcl index 71efa8bfa..0efb54d09 100644 --- a/public/kcl-samples/multi-axis-robot/robot-arm-j2.kcl +++ b/public/kcl-samples/multi-axis-robot/robot-arm-j2.kcl @@ -7,10 +7,10 @@ import axisJ1, axisJ2, axisJ2ArmWidth, axisJ2ArmLength, axisJ2ArmThickness, plan // Create Body of J2 Robot Arm sketch011 = startSketchOn(plane003) - |> startProfileAt([ + |> startProfile(at = [ 1.75 - (axisJ2ArmWidth / 2 * sin(toRadians(axisJ2))), 8 + axisJ2ArmWidth / 2 * cos(toRadians(axisJ2)) - ], %) + ]) |> arc(angleStart = 90 + axisJ2, angleEnd = 270 + axisJ2, radius = axisJ2ArmWidth / 2) |> angledLine(angle = axisJ2, length = axisJ2ArmLength) |> arc(angleStart = -90 + axisJ2, angleEnd = 90 + axisJ2, radius = axisJ2ArmWidth / 2) diff --git a/public/kcl-samples/multi-axis-robot/robot-arm-j3.kcl b/public/kcl-samples/multi-axis-robot/robot-arm-j3.kcl index eb9b480a3..d8c01137e 100644 --- a/public/kcl-samples/multi-axis-robot/robot-arm-j3.kcl +++ b/public/kcl-samples/multi-axis-robot/robot-arm-j3.kcl @@ -7,10 +7,10 @@ import plane002, axisJ2, axisJ3C, axisJ4, axisJ2ArmLength, axisJ3CArmLength, axi // Create Body of J3 Robot Arm sketch017 = startSketchOn(plane002) - |> startProfileAt([ + |> startProfile(at = [ 1.75 + axisJ2ArmLength * cos(toRadians(axisJ2)) - (axisJ3CArmWidth / 2 * sin(toRadians(axisJ3C))), 8 + axisJ2ArmLength * sin(toRadians(axisJ2)) + axisJ3CArmWidth / 2 * cos(toRadians(axisJ3C)) - ], %) + ]) |> arc(angleStart = 90 + axisJ3C, angleEnd = 270 + axisJ3C, radius = axisJ3CArmWidth / 2) |> angledLine(angle = axisJ3C, length = axisJ3CArmLength) |> arc(angleStart = 270 + axisJ3C, angleEnd = 90 + axisJ3C, radius = axisJ3CArmWidth / 2) @@ -84,10 +84,10 @@ extrude022 = extrude(sketch022, length = -0.01) // Build Upper Claw Finger sketch023 = startSketchOn(extrude022, face = START) - |> startProfileAt([ + |> startProfile(at = [ 1.75 + axisJ2ArmLength * cos(toRadians(axisJ2)) + axisJ3CArmLength * cos(toRadians(axisJ3C)), 8 + axisJ2ArmLength * sin(toRadians(axisJ2)) + axisJ3CArmLength * sin(toRadians(axisJ3C)) - ], %) + ]) |> angledLine(angle = axisJ3C + axisJ4 / 2, length = grabberLength / 4) |> arc(angleStart = 150 + axisJ3C + axisJ4 / 2, angleEnd = 30 + axisJ3C + axisJ4 / 2, radius = grabberLength / 3) |> angledLine(angle = axisJ3C + axisJ4 / 2, length = grabberLength / 6) @@ -101,10 +101,10 @@ extrude023 = extrude(sketch023, length = -1.5) // Build Lower Claw Finger sketch024 = startSketchOn(extrude022, face = START) - |> startProfileAt([ + |> startProfile(at = [ 1.75 + axisJ2ArmLength * cos(toRadians(axisJ2)) + axisJ3CArmLength * cos(toRadians(axisJ3C)), 8 + axisJ2ArmLength * sin(toRadians(axisJ2)) + axisJ3CArmLength * sin(toRadians(axisJ3C)) - ], %) + ]) |> angledLine(angle = axisJ3C - (axisJ4 / 2), length = grabberLength / 4) |> arc(angleStart = 210 + axisJ3C - (axisJ4 / 2), angleEnd = 330 + axisJ3C - (axisJ4 / 2), radius = grabberLength / 3) |> angledLine(angle = axisJ3C - (axisJ4 / 2), length = grabberLength / 6) diff --git a/public/kcl-samples/multi-axis-robot/robot-rotating-base.kcl b/public/kcl-samples/multi-axis-robot/robot-rotating-base.kcl index bafab7c21..85b05eeb9 100644 --- a/public/kcl-samples/multi-axis-robot/robot-rotating-base.kcl +++ b/public/kcl-samples/multi-axis-robot/robot-rotating-base.kcl @@ -13,7 +13,7 @@ extrude005 = extrude(sketch005, length = 1.5 - 0.1) |> appearance(color = "#4f7d54", metalness = 90, roughness = 90) sketch006 = startSketchOn(plane002) - |> startProfileAt([3.5, baseHeight], %) + |> startProfile(at = [3.5, baseHeight]) |> angledLine(angle = 60, length = 1.75) |> arc(angleStart = -30, angleEnd = -30 + 180, radius = 3) |> angledLine(angle = 60, endAbsoluteY = baseHeight) diff --git a/public/kcl-samples/parametric-bearing-pillow-block/main.kcl b/public/kcl-samples/parametric-bearing-pillow-block/main.kcl index 98effaabd..c0832d846 100644 --- a/public/kcl-samples/parametric-bearing-pillow-block/main.kcl +++ b/public/kcl-samples/parametric-bearing-pillow-block/main.kcl @@ -16,7 +16,7 @@ bearingDia = 3 // Sketch the block body body = startSketchOn(XY) - |> startProfileAt([-width / 2, -length / 2], %) + |> startProfile(at = [-width / 2, -length / 2]) |> line(endAbsolute = [width / 2, -length / 2]) |> line(endAbsolute = [width / 2, length / 2]) |> line(endAbsolute = [-width / 2, length / 2]) diff --git a/public/kcl-samples/pipe-flange-assembly/91251a404-bolt.kcl b/public/kcl-samples/pipe-flange-assembly/91251a404-bolt.kcl index 779e2dbf2..a2ce55de2 100644 --- a/public/kcl-samples/pipe-flange-assembly/91251a404-bolt.kcl +++ b/public/kcl-samples/pipe-flange-assembly/91251a404-bolt.kcl @@ -17,10 +17,10 @@ export fn bolt() { // Define the sketch of the hex pattern on the screw head and extrude into the head hexPatternSketch = startSketchOn(boltHead, face = START) - |> startProfileAt([ + |> startProfile(at = [ boltHexDrive / 2, boltHexFlatLength / 2 - ], %) + ]) |> angledLine(angle = 270, length = boltHexFlatLength) |> angledLine(angle = 210, length = boltHexFlatLength) |> angledLine(angle = 150, length = boltHexFlatLength) diff --git a/public/kcl-samples/pipe-flange-assembly/95479a127-hex-nut.kcl b/public/kcl-samples/pipe-flange-assembly/95479a127-hex-nut.kcl index 4e089d996..e5eaa16b3 100644 --- a/public/kcl-samples/pipe-flange-assembly/95479a127-hex-nut.kcl +++ b/public/kcl-samples/pipe-flange-assembly/95479a127-hex-nut.kcl @@ -11,10 +11,10 @@ import hexNutDiameter, hexNutFlatToFlat, hexNutThickness, hexNutFlatLength from export fn hexNut() { // Create the base of the hex nut hexNutBase = startSketchOn(XY) - |> startProfileAt([ + |> startProfile(at = [ hexNutFlatToFlat / 2, hexNutFlatLength / 2 - ], %) + ]) |> angledLine(angle = 270, length = hexNutFlatLength) |> angledLine(angle = 210, length = hexNutFlatLength) |> angledLine(angle = 150, length = hexNutFlatLength) diff --git a/public/kcl-samples/poopy-shoe/main.kcl b/public/kcl-samples/poopy-shoe/main.kcl index 2159e7aaa..5c2686775 100644 --- a/public/kcl-samples/poopy-shoe/main.kcl +++ b/public/kcl-samples/poopy-shoe/main.kcl @@ -15,7 +15,7 @@ frontLength = 7 // Create the curved portion that catches the printer poop sketch001 = startSketchOn(-YZ) - |> startProfileAt([wallsWidth / 2, 0], %) + |> startProfile(at = [wallsWidth / 2, 0]) |> xLine(length = wallThickness / 2) |> angledLine(angle = 60, endAbsoluteX = wallsWidth, tag = $seg01) |> yLine(endAbsolute = height) @@ -39,7 +39,7 @@ part001 = revolve( ) sketch002 = startSketchOn(-YZ) - |> startProfileAt([wallsWidth / 2, 0], %) + |> startProfile(at = [wallsWidth / 2, 0]) |> xLine(length = wallThickness / 2) |> angledLine(angle = 60, endAbsoluteX = wallsWidth, tag = $seg02) |> yLine(endAbsolute = height) @@ -65,7 +65,7 @@ customPlane = { yAxis = { x = 0, y = 0, z = 1 } } sketch003 = startSketchOn(customPlane) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> tangentialArc(angle = 60, radius = height) |> angledLine(angle = 60, endAbsoluteY = 0) |> close() @@ -73,7 +73,7 @@ sketch003 = startSketchOn(customPlane) // Create the right side wall of the tub sketch004 = startSketchOn(sketch002, face = END) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(endAbsolute = height) |> xLine(endAbsolute = wallThickness) |> yLine(endAbsolute = segEndY(seg01)) @@ -101,7 +101,7 @@ customPlane2 = { yAxis = { x = 0, y = 0, z = 1 } } sketch005 = startSketchOn(customPlane2) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(endAbsolute = height) |> xLine(endAbsolute = -wallsWidth) |> tangentialArc(endAbsolute = [ @@ -114,7 +114,7 @@ sketch005 = startSketchOn(customPlane2) |> extrude(length = wallThickness) sketch006 = startSketchOn(sketch005, face = seg03) - |> startProfileAt([0, -1 * (backLength - height)], %) + |> startProfile(at = [0, -1 * (backLength - height)]) |> xLine(endAbsolute = -exitHeight) |> yLine(length = -wallsWidth) |> xLine(endAbsolute = 0) @@ -122,7 +122,7 @@ sketch006 = startSketchOn(sketch005, face = seg03) |> extrude(length = wallThickness) sketch007 = startSketchOn(sketch004, face = END) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(endAbsolute = wallThickness) |> yLine(endAbsolute = height) |> xLine(endAbsolute = 0) @@ -140,7 +140,7 @@ customPlane3 = { } sketch008 = startSketchOn(customPlane3) - |> startProfileAt([wallThickness, wallThickness], %) + |> startProfile(at = [wallThickness, wallThickness]) |> xLine(endAbsolute = frontLength) |> yLine(length = wallsWidth - (2 * wallThickness)) |> xLine(endAbsolute = wallThickness) diff --git a/public/kcl-samples/router-template-cross-bar/main.kcl b/public/kcl-samples/router-template-cross-bar/main.kcl index 3abce3de3..c3710f647 100644 --- a/public/kcl-samples/router-template-cross-bar/main.kcl +++ b/public/kcl-samples/router-template-cross-bar/main.kcl @@ -19,7 +19,7 @@ distanceToInsideEdge = slateWidthHalf + templateThickness + templateGap // Create the first sketch sketch001 = startSketchOn(XZ) - |> startProfileAt([0, depth + templateGap], %) + |> startProfile(at = [0, depth + templateGap]) |> xLine(length = slateWidthHalf - radius, tag = $seg01) |> arc( angleStart = 90, @@ -52,7 +52,7 @@ extrude001 = extrude(sketch001, length = 5) // Create the second sketch sketch002 = startSketchOn(extrude001, face = START) - |> startProfileAt([distanceToInsideEdge, 0], %) + |> startProfile(at = [distanceToInsideEdge, 0]) |> angledLine(angle = 180, length = templateThickness, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) + 90, length = templateThickness, tag = $rectangleSegmentB002) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002), tag = $rectangleSegmentC002) @@ -64,7 +64,7 @@ extrude002 = extrude(sketch002, length = 13) // Create the third sketch sketch003 = startSketchOn(extrude001, face = START) - |> startProfileAt([-distanceToInsideEdge, 0], %) + |> startProfile(at = [-distanceToInsideEdge, 0]) |> angledLine(angle = 0, length = templateThickness, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = templateThickness, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) @@ -76,7 +76,7 @@ extrude003 = extrude(sketch003, length = 13) // Create the fourth sketch sketch004 = startSketchOn(extrude002, face = END) - |> startProfileAt([-distanceToInsideEdge, 0], %) + |> startProfile(at = [-distanceToInsideEdge, 0]) |> angledLine(angle = 0, length = distanceToInsideEdge * 2, tag = $rectangleSegmentA003) |> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = templateThickness, tag = $rectangleSegmentB003) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003), tag = $rectangleSegmentC003) diff --git a/public/kcl-samples/router-template-slate/main.kcl b/public/kcl-samples/router-template-slate/main.kcl index 06245aad3..0b3c2dc9f 100644 --- a/public/kcl-samples/router-template-slate/main.kcl +++ b/public/kcl-samples/router-template-slate/main.kcl @@ -20,7 +20,7 @@ length002 = depth + minClampingDistance // Create the first sketch sketch001 = startSketchOn(XZ) - |> startProfileAt([0, depth - templateGap], %) + |> startProfile(at = [0, depth - templateGap]) |> xLine(length = length001, tag = $seg01) |> arc(angleStart = 90, angleEnd = 0, radius = radius - templateGap) |> yLine(endAbsolute = -templateGap * 2 - (templateDiameter / 2), tag = $seg05) @@ -41,10 +41,10 @@ extrude001 = extrude(sketch001, length = 5) // Create the second sketch sketch002 = startSketchOn(extrude001, face = START) - |> startProfileAt([ + |> startProfile(at = [ -slateWidthHalf, -templateGap * 2 - (templateDiameter / 2) - ], %) + ]) |> xLine(length = -7, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = minClampingDistance, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) @@ -56,10 +56,10 @@ extrude002 = extrude(sketch002, length = 7.5) // Create the third sketch sketch003 = startSketchOn(extrude001, face = START) - |> startProfileAt([ + |> startProfile(at = [ slateWidthHalf, -templateGap * 2 - (templateDiameter / 2) - ], %) + ]) |> xLine(length = 7, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = minClampingDistance) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) diff --git a/public/kcl-samples/sheet-metal-bracket/main.kcl b/public/kcl-samples/sheet-metal-bracket/main.kcl index 367bf15e1..ee7862bf3 100644 --- a/public/kcl-samples/sheet-metal-bracket/main.kcl +++ b/public/kcl-samples/sheet-metal-bracket/main.kcl @@ -32,10 +32,10 @@ flangeExtrusion = if mountingBoltPatternY > componentBoltPatternY { // Draw the extrusion profile of the sheet metal bracket bracketProfile = startSketchOn(XZ) - |> startProfileAt([ + |> startProfile(at = [ -mountingBoltPatternX / 2 - overhang, 0 - ], %) + ]) |> xLine(length = flangeLength) |> tangentialArc(radius = exteriorBendRadius, angle = bendAngle) |> angledLine(angle = bendAngle, endAbsoluteY = hatHeight - thickness, tag = $seg01) diff --git a/public/kcl-samples/socket-head-cap-screw/main.kcl b/public/kcl-samples/socket-head-cap-screw/main.kcl index d805f844d..589a8f7d7 100644 --- a/public/kcl-samples/socket-head-cap-screw/main.kcl +++ b/public/kcl-samples/socket-head-cap-screw/main.kcl @@ -20,10 +20,10 @@ boltHead = startSketchOn(XZ) // Define the sketch of the hex pattern on the screw head hexPatternSketch = startSketchOn(boltHead, face = START) - |> startProfileAt([ + |> startProfile(at = [ boltHexDrive / 2, boltHexFlatLength / 2 - ], %) + ]) |> angledLine(angle = 270, length = boltHexFlatLength) |> angledLine(angle = 210, length = boltHexFlatLength) |> angledLine(angle = 150, length = boltHexFlatLength) diff --git a/public/kcl-samples/walkie-talkie/antenna.kcl b/public/kcl-samples/walkie-talkie/antenna.kcl index f3d05e3b8..156af6168 100644 --- a/public/kcl-samples/walkie-talkie/antenna.kcl +++ b/public/kcl-samples/walkie-talkie/antenna.kcl @@ -9,7 +9,7 @@ import antennaLength, antennaBaseWidth, antennaBaseHeight, antennaTopWidth, ante // Create the antenna base sketch antennaBaseSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [antennaBaseWidth, 0]) |> line(end = [0, -antennaBaseHeight]) |> line(end = [-antennaBaseWidth, 0]) @@ -18,10 +18,10 @@ antennaBaseSketch = startSketchOn(XY) // Create the antenna top sketch loftPlane = offsetPlane(XY, offset = antennaLength) antennaTopSketch = startSketchOn(loftPlane) - |> startProfileAt([ + |> startProfile(at = [ (antennaBaseWidth - antennaTopWidth) / 2, (antennaBaseHeight - antennaTopHeight) / 2 - ], %) + ]) |> xLine(length = antennaTopWidth) |> yLine(length = -antennaTopHeight) |> xLine(length = -antennaTopWidth) diff --git a/public/kcl-samples/walkie-talkie/body.kcl b/public/kcl-samples/walkie-talkie/body.kcl index c598904c1..e04527626 100644 --- a/public/kcl-samples/walkie-talkie/body.kcl +++ b/public/kcl-samples/walkie-talkie/body.kcl @@ -9,7 +9,7 @@ import height, width, thickness, chamferLength, offset, screenWidth, screenHeigh // Sketch and extrude the body of the walkie talkie body = startSketchOn(XZ) - |> startProfileAt([-width / 2, height / 2], %) + |> startProfile(at = [-width / 2, height / 2]) |> xLine(length = width, tag = $chamfer1) |> yLine(length = -height, tag = $chamfer2) |> xLine(length = -width, tag = $chamfer3) @@ -27,10 +27,10 @@ body = startSketchOn(XZ) // Cut out the indentation for the case caseIndentSketch = startSketchOn(body, face = END) - |> startProfileAt([ + |> startProfile(at = [ -width / 2 + offset, height / 2 - (chamferLength + offset / 2 * cos(toRadians(45))) - ], %) + ]) |> angledLine(angle = 45, endAbsoluteY = height / 2 - offset) |> line(endAbsolute = [ width / 2 - (chamferLength + offset / 2 * cos(toRadians(45))), @@ -52,7 +52,7 @@ extrude002 = extrude(caseIndentSketch, length = -0.0625) // Create the pocket for the screen screenCutout = startSketchOn(extrude002, face = START) - |> startProfileAt([-screenWidth / 2, screenYPosition], %) + |> startProfile(at = [-screenWidth / 2, screenYPosition]) |> xLine(length = screenWidth, tag = $seg01) |> yLine(length = -screenHeight) |> xLine(length = -segLen(seg01)) @@ -62,7 +62,7 @@ extrude003 = extrude(screenCutout, length = screenDepth) // Create the speaker box speakerBox = startSketchOn(extrude002, face = START) - |> startProfileAt([-1.25 / 2, -.125], %) + |> startProfile(at = [-1.25 / 2, -.125]) |> xLine(length = speakerBoxWidth) |> yLine(length = -speakerBoxHeight) |> xLine(length = -speakerBoxWidth) diff --git a/public/kcl-samples/walkie-talkie/button.kcl b/public/kcl-samples/walkie-talkie/button.kcl index c266c4525..947d6b581 100644 --- a/public/kcl-samples/walkie-talkie/button.kcl +++ b/public/kcl-samples/walkie-talkie/button.kcl @@ -13,7 +13,7 @@ import buttonWidth, buttonHeight, buttonThickness from "parameters.kcl" export fn button() { // Sketch the button profile and extrude buttonSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 180, length = buttonWidth, tag = $tag1) |> angledLine(angle = 270, length = buttonHeight, tag = $tag2) |> angledLine(angle = 0, length = buttonWidth) diff --git a/public/kcl-samples/walkie-talkie/case.kcl b/public/kcl-samples/walkie-talkie/case.kcl index 488f66783..fa727315f 100644 --- a/public/kcl-samples/walkie-talkie/case.kcl +++ b/public/kcl-samples/walkie-talkie/case.kcl @@ -10,7 +10,7 @@ import zLogo, oLogo, oLogo2 from "zoo-logo.kcl" // Sketch the profile of the screen screenSketch = startSketchOn(XZ) - |> startProfileAt([-screenWidth / 2, screenYPosition], %) + |> startProfile(at = [-screenWidth / 2, screenYPosition]) |> xLine(length = screenWidth) |> yLine(length = -screenHeight) |> xLine(length = -screenWidth) @@ -27,7 +27,7 @@ fn transformY(i) { // Sketch the square hole grid pattern squareHolePatternSketch = startSketchOn(XZ) - |> startProfileAt([-screenWidth / 2 + .100, 0], %) + |> startProfile(at = [-screenWidth / 2 + .100, 0]) |> line(end = [squareHoleSideLength / 2, 0]) |> line(end = [0, -squareHoleSideLength / 2]) |> line(end = [-squareHoleSideLength / 2, 0]) @@ -37,10 +37,10 @@ squareHolePatternSketch = startSketchOn(XZ) // Sketch the outer profile of the case and extrude with holes using the previously made profiles case = startSketchOn(XZ) - |> startProfileAt([ + |> startProfile(at = [ -width / 2 + offset + caseTolerance, height / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(toRadians(45))) - ], %) + ]) |> angledLine(angle = 45, endAbsoluteY = height / 2 - (offset + caseTolerance)) |> line(endAbsolute = [ width / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(toRadians(45))), diff --git a/public/kcl-samples/walkie-talkie/knob.kcl b/public/kcl-samples/walkie-talkie/knob.kcl index 735b6c219..4aa463785 100644 --- a/public/kcl-samples/walkie-talkie/knob.kcl +++ b/public/kcl-samples/walkie-talkie/knob.kcl @@ -9,7 +9,7 @@ import width, thickness, height, knobDiameter, knobHeight, knobRadius from "para // Create the knob sketch and revolve startSketchOn(XZ) - |> startProfileAt([0.0001, 0], %) + |> startProfile(at = [0.0001, 0]) |> xLine(length = knobDiameter / 2) |> yLine(length = knobHeight - 0.05) |> arc(angleStart = 0, angleEnd = 90, radius = .05) diff --git a/public/kcl-samples/walkie-talkie/talk-button.kcl b/public/kcl-samples/walkie-talkie/talk-button.kcl index 9b5828568..6fd131ecf 100644 --- a/public/kcl-samples/walkie-talkie/talk-button.kcl +++ b/public/kcl-samples/walkie-talkie/talk-button.kcl @@ -8,10 +8,10 @@ import width, thickness, talkButtonSideLength, talkButtonHeight from "parameters // Create the talk button sketch talkButtonSketch = startSketchOn(YZ) - |> startProfileAt([ + |> startProfile(at = [ -talkButtonSideLength / 2, talkButtonSideLength / 2 - ], %) + ]) |> xLine(length = talkButtonSideLength, tag = $tag1) |> yLine(length = -talkButtonSideLength, tag = $tag2) |> xLine(length = -talkButtonSideLength, tag = $tag3) diff --git a/public/kcl-samples/walkie-talkie/zoo-logo.kcl b/public/kcl-samples/walkie-talkie/zoo-logo.kcl index 794eaf6d7..26100f0dd 100644 --- a/public/kcl-samples/walkie-talkie/zoo-logo.kcl +++ b/public/kcl-samples/walkie-talkie/zoo-logo.kcl @@ -3,10 +3,10 @@ // define a function to draw the ZOO "Z" export fn zLogo(surface, origin, scale) { zSketch = surface - |> startProfileAt([ + |> startProfile(at = [ 0 + origin[0], 0.15 * scale + origin[1] - ], %) + ]) |> yLine(length = -0.15 * scale) |> xLine(length = 0.15 * scale) |> angledLine(angle = 47.15, endAbsoluteX = 0.3 * scale + origin[0], tag = $seg1) @@ -29,10 +29,10 @@ export fn zLogo(surface, origin, scale) { // define a function to draw the ZOO "O" export fn oLogo(surface, origin, scale) { oSketch001 = surface - |> startProfileAt([ + |> startProfile(at = [ .788 * scale + origin[0], .921 * scale + origin[1] - ], %) + ]) |> arc(angleStart = 47.15 + 6, angleEnd = 47.15 - 6 + 180, radius = .525 * scale) |> angledLine(angle = 47.15, length = .24 * scale) |> arc(angleStart = 47.15 - 11 + 180, angleEnd = 47.15 + 11, radius = .288 * scale) @@ -42,10 +42,10 @@ export fn oLogo(surface, origin, scale) { export fn oLogo2(surface, origin, scale) { oSketch002 = surface - |> startProfileAt([ + |> startProfile(at = [ .16 * scale + origin[0], .079 * scale + origin[1] - ], %) + ]) |> arc(angleStart = 47.15 + 6 - 180, angleEnd = 47.15 - 6, radius = .525 * scale) |> angledLine(angle = 47.15, length = -.24 * scale) |> arc(angleStart = 47.15 - 11, angleEnd = 47.15 + 11 - 180, radius = .288 * scale) diff --git a/rust/kcl-lib/common.kcl b/rust/kcl-lib/common.kcl index 97b9cbb09..790e3d3fd 100644 --- a/rust/kcl-lib/common.kcl +++ b/rust/kcl-lib/common.kcl @@ -12,7 +12,7 @@ export fn buildSketch = (plane, offset) => { w = width() h = height() return startSketchOn(plane) - |> startProfileAt(offset, %) + |> startProfile(at = offset) |> line(end = [w, 0]) |> line(end = [0, h]) |> line(end = [-w, 0]) diff --git a/rust/kcl-lib/e2e/executor/cache.rs b/rust/kcl-lib/e2e/executor/cache.rs index 4263e9e26..dd893e9e5 100644 --- a/rust/kcl-lib/e2e/executor/cache.rs +++ b/rust/kcl-lib/e2e/executor/cache.rs @@ -79,7 +79,7 @@ async fn cache_test( #[tokio::test(flavor = "multi_thread")] async fn kcl_test_cache_change_grid_visualizes_grid_off_to_on() { let code = r#"part001 = startSketchOn('XY') - |> startProfileAt([5.5229, 5.25217], %) + |> startProfile(at = [5.5229, 5.25217]) |> line(end = [10.50433, -1.19122]) |> line(end = [8.01362, -5.48731]) |> line(end = [-1.02877, -6.76825]) @@ -120,7 +120,7 @@ async fn kcl_test_cache_change_grid_visualizes_grid_off_to_on() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_cache_change_grid_visualizes_grid_on_to_off() { let code = r#"part001 = startSketchOn('XY') - |> startProfileAt([5.5229, 5.25217], %) + |> startProfile(at = [5.5229, 5.25217]) |> line(end = [10.50433, -1.19122]) |> line(end = [8.01362, -5.48731]) |> line(end = [-1.02877, -6.76825]) @@ -161,7 +161,7 @@ async fn kcl_test_cache_change_grid_visualizes_grid_on_to_off() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_cache_change_highlight_edges_changes_visual() { let code = r#"part001 = startSketchOn('XY') - |> startProfileAt([5.5229, 5.25217], %) + |> startProfile(at = [5.5229, 5.25217]) |> line(end = [10.50433, -1.19122]) |> line(end = [8.01362, -5.48731]) |> line(end = [-1.02877, -6.76825]) @@ -206,7 +206,7 @@ async fn kcl_test_cache_multi_file_same_code_dont_reexecute() { importedCube sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([-134.53, -56.17], sketch001) +profile001 = startProfile(sketch001, at = [-134.53, -56.17]) |> angledLine(angle = 0, length = 79.05, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 76.28) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg01) @@ -220,7 +220,7 @@ sketch002 = startSketchOn(extrude001, face = seg01) let other_file = ( std::path::PathBuf::from("toBeImported.kcl"), r#"sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([281.54, 305.81], sketch001) +profile001 = startProfile(sketch001, at = [281.54, 305.81]) |> angledLine(angle = 0, length = 123.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 85.99) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -254,7 +254,7 @@ extrude(profile001, length = 100)"# #[tokio::test(flavor = "multi_thread")] async fn kcl_test_cache_add_line_preserves_artifact_commands() { let code = r#"sketch001 = startSketchOn('XY') - |> startProfileAt([5.5229, 5.25217], %) + |> startProfile(at = [5.5229, 5.25217]) |> line(end = [10.50433, -1.19122]) |> line(end = [8.01362, -5.48731]) |> line(end = [-1.02877, -6.76825]) @@ -375,7 +375,7 @@ async fn kcl_test_cache_multi_file_after_empty_with_export() { importedCube sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([-134.53, -56.17], sketch001) +profile001 = startProfile(sketch001, at = [-134.53, -56.17]) |> angledLine(angle = 0, length = 79.05, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 76.28) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg01) @@ -389,7 +389,7 @@ sketch002 = startSketchOn(extrude001, face = seg01) let other_file = ( std::path::PathBuf::from("toBeImported.kcl"), r#"sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([281.54, 305.81], sketch001) +profile001 = startProfile(sketch001, at = [281.54, 305.81]) |> angledLine(angle = 0, length = 123.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 85.99) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -428,7 +428,7 @@ async fn kcl_test_cache_multi_file_after_empty_with_woo() { importedCube sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([-134.53, -56.17], sketch001) +profile001 = startProfile(sketch001, at = [-134.53, -56.17]) |> angledLine(angle = 0, length = 79.05, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 76.28) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg01) @@ -442,7 +442,7 @@ sketch002 = startSketchOn(extrude001, face = seg01) let other_file = ( std::path::PathBuf::from("toBeImported.kcl"), r#"sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([281.54, 305.81], sketch001) +profile001 = startProfile(sketch001, at = [281.54, 305.81]) |> angledLine(angle = 0, length = 123.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 85.99) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) diff --git a/rust/kcl-lib/e2e/executor/inputs/angled_line.kcl b/rust/kcl-lib/e2e/executor/inputs/angled_line.kcl index 9bc5044f0..d08a8ea3c 100644 --- a/rust/kcl-lib/e2e/executor/inputs/angled_line.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/angled_line.kcl @@ -1,5 +1,5 @@ const part001 = startSketchOn(XY) - |> startProfileAt([4.83, 12.56], %) + |> startProfile(at = [4.83, 12.56]) |> line(end = [15.1, 2.48]) |> line(end = [3.15, -9.85], tag = $seg01) |> line(end = [-15.17, -4.1]) diff --git a/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_close_opposite.kcl b/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_close_opposite.kcl index da85cb418..0c1ba260f 100644 --- a/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_close_opposite.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_close_opposite.kcl @@ -1,5 +1,5 @@ const part001 = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_end.kcl b/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_end.kcl index 431759464..bcac6a104 100644 --- a/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_end.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_end.kcl @@ -1,5 +1,5 @@ const part001 = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_next_adjacent.kcl b/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_next_adjacent.kcl index 7a4309eef..3d8d5f8f6 100644 --- a/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_next_adjacent.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_next_adjacent.kcl @@ -1,5 +1,5 @@ const part001 = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0], tag = $thing1) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_previous_adjacent.kcl b/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_previous_adjacent.kcl index eeeb9adea..74bfb3f48 100644 --- a/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_previous_adjacent.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_previous_adjacent.kcl @@ -1,5 +1,5 @@ const part001 = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0], tag = $thing1) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_start.kcl b/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_start.kcl index 7212d7fed..6e2813dc9 100644 --- a/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_start.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/basic_fillet_cube_start.kcl @@ -1,5 +1,5 @@ const part001 = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/e2e/executor/inputs/big_number_angle_to_match_length_x.kcl b/rust/kcl-lib/e2e/executor/inputs/big_number_angle_to_match_length_x.kcl new file mode 100644 index 000000000..44af27c9b --- /dev/null +++ b/rust/kcl-lib/e2e/executor/inputs/big_number_angle_to_match_length_x.kcl @@ -0,0 +1,9 @@ +const part001 = startSketchOn(XY) + |> startProfile(at = [0, 0]) + |> line(end = [1, 3.82], tag = $seg01) + |> angled( + angle = -angleToMatchLengthX(seg01, 3, %), + endAbsoluteX = 3, + ) + |> close() + |> extrude(length = 10) diff --git a/rust/kcl-lib/e2e/executor/inputs/big_number_angle_to_match_length_y.kcl b/rust/kcl-lib/e2e/executor/inputs/big_number_angle_to_match_length_y.kcl new file mode 100644 index 000000000..00691a8fe --- /dev/null +++ b/rust/kcl-lib/e2e/executor/inputs/big_number_angle_to_match_length_y.kcl @@ -0,0 +1,9 @@ +const part001 = startSketchOn(XY) + |> startProfile(at = [0, 0]) + |> line(end = [1, 3.82], tag = $seg01) + |> angledLine( + angle = -angleToMatchLengthY(seg01, 3, %), + endAbsoluteX = 3, + ) + |> close() + |> extrude(length = 10) diff --git a/rust/kcl-lib/e2e/executor/inputs/boolean-setup-with-sketch-on-faces.kcl b/rust/kcl-lib/e2e/executor/inputs/boolean-setup-with-sketch-on-faces.kcl index 95dd01cb3..2d1e414a4 100644 --- a/rust/kcl-lib/e2e/executor/inputs/boolean-setup-with-sketch-on-faces.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/boolean-setup-with-sketch-on-faces.kcl @@ -4,7 +4,7 @@ sketch001 = startSketchOn(XZ) profile001 = circle(sketch001, center = [154.36, 113.92], radius = 41.09) extrude001 = extrude(profile001, length = 200) sketch002 = startSketchOn(XY) -profile002 = startProfileAt([72.24, -52.05], sketch002) +profile002 = startProfile(sketch002, at = [72.24, -52.05]) |> angledLine(angle = 0, length = 181.26, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 21.54) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $mySeg) @@ -19,7 +19,7 @@ extrude002 = extrude(profile002, length = 150) ) sketch003 = startSketchOn(extrude002, face = mySeg) -profile003 = startProfileAt([207.36, 126.19], sketch003) +profile003 = startProfile(sketch003, at = [207.36, 126.19]) |> angledLine(angle = 0, length = 33.57, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 99.11) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002), tag = $seg01) @@ -27,7 +27,7 @@ profile003 = startProfileAt([207.36, 126.19], sketch003) |> close() extrude003 = extrude(profile003, length = -20) sketch004 = startSketchOn(extrude003, face = seg01) -profile004 = startProfileAt([-235.38, 66.16], sketch004) +profile004 = startProfile(sketch004, at = [-235.38, 66.16]) |> angledLine(angle = 0, length = 24.21, tag = $rectangleSegmentA003) |> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = 3.72) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003)) @@ -36,7 +36,7 @@ profile004 = startProfileAt([-235.38, 66.16], sketch004) extrude004 = extrude(profile004, length = 30) sketch005 = startSketchOn(extrude002, face = seg02) -profile005 = startProfileAt([-129.93, -59.19], sketch005) +profile005 = startProfile(sketch005, at = [-129.93, -59.19]) |> xLine(length = 48.79) |> line(end = [1.33, 11.03]) |> xLine(length = -60.56, tag = $seg03) @@ -44,7 +44,7 @@ profile005 = startProfileAt([-129.93, -59.19], sketch005) |> close() extrude005 = extrude(profile005, length = -10) sketch006 = startSketchOn(extrude005, face = seg03) -profile006 = startProfileAt([-95.86, 38.73], sketch006) +profile006 = startProfile(sketch006, at = [-95.86, 38.73]) |> angledLine(angle = 0, length = 3.48, tag = $rectangleSegmentA004) |> angledLine(angle = segAng(rectangleSegmentA004) - 90, length = 3.36) |> angledLine(angle = segAng(rectangleSegmentA004), length = -segLen(rectangleSegmentA004)) diff --git a/rust/kcl-lib/e2e/executor/inputs/broken-code-test.kcl b/rust/kcl-lib/e2e/executor/inputs/broken-code-test.kcl index 883fa21da..9b864ecbc 100644 --- a/rust/kcl-lib/e2e/executor/inputs/broken-code-test.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/broken-code-test.kcl @@ -21,7 +21,7 @@ const filletR = 0.25 // Sketch the bracket and extrude with fillets const bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, wallMountL], tag = 'outerEdge') |> line(end = [-shelfMountL, 0]) |> line(end = [0, -thickness]) diff --git a/rust/kcl-lib/e2e/executor/inputs/circular_pattern3d_a_pattern.kcl b/rust/kcl-lib/e2e/executor/inputs/circular_pattern3d_a_pattern.kcl index 20e085499..98971e966 100644 --- a/rust/kcl-lib/e2e/executor/inputs/circular_pattern3d_a_pattern.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/circular_pattern3d_a_pattern.kcl @@ -1,5 +1,5 @@ exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 2]) |> line(end = [3, 1]) |> line(end = [0, -4]) diff --git a/rust/kcl-lib/e2e/executor/inputs/close_arc.kcl b/rust/kcl-lib/e2e/executor/inputs/close_arc.kcl index 890d634df..4ee4c26de 100644 --- a/rust/kcl-lib/e2e/executor/inputs/close_arc.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/close_arc.kcl @@ -3,7 +3,7 @@ const radius = 40 const height = 3 const body = startSketchOn(XY) - |> startProfileAt([center[0]+radius, center[1]], %) + |> startProfile(at = [center[0]+radius, center[1]]) |> arc(angleEnd = 360, angleStart = 0, radius = radius) |> close() |> extrude(length = height) diff --git a/rust/kcl-lib/e2e/executor/inputs/cube.kcl b/rust/kcl-lib/e2e/executor/inputs/cube.kcl index 6d337428f..236ccb38f 100644 --- a/rust/kcl-lib/e2e/executor/inputs/cube.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/cube.kcl @@ -8,7 +8,7 @@ fn cube(length, center) { p3 = [ l + x, -l + y] return startSketchOn(XY) - |> startProfileAt(p0, %) + |> startProfile(at = p0) |> line(endAbsolute = p1) |> line(endAbsolute = p2) |> line(endAbsolute = p3) diff --git a/rust/kcl-lib/e2e/executor/inputs/dimensions_match.kcl b/rust/kcl-lib/e2e/executor/inputs/dimensions_match.kcl index fed26eb9e..f34831ea9 100644 --- a/rust/kcl-lib/e2e/executor/inputs/dimensions_match.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/dimensions_match.kcl @@ -1,5 +1,5 @@ const part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) diff --git a/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer-no-pipeExpr.kcl b/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer-no-pipeExpr.kcl index 63e7b1006..cd013a5fc 100644 --- a/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer-no-pipeExpr.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer-no-pipeExpr.kcl @@ -1,6 +1,6 @@ @settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) - |> startProfileAt([75.8, 317.2], %) + |> startProfile(at = [75.8, 317.2]) |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) diff --git a/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer.kcl b/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer.kcl index 440f88be7..768bf9932 100644 --- a/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer.kcl @@ -1,6 +1,6 @@ @settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) - |> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag] + |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) diff --git a/rust/kcl-lib/e2e/executor/inputs/extrude-custom-plane.kcl b/rust/kcl-lib/e2e/executor/inputs/extrude-custom-plane.kcl index c676cf80e..3f1db2b35 100644 --- a/rust/kcl-lib/e2e/executor/inputs/extrude-custom-plane.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/extrude-custom-plane.kcl @@ -1,6 +1,6 @@ // create a sketch with name sketch000 const sketch000 = startSketchOn(XY) - |> startProfileAt([0.0, 0.0], %) + |> startProfile(at = [0.0, 0.0]) |> line(end = [1.0, 1.0], tag = $line000) |> line(end = [0.0, -1.0], tag = $line001) |> line(end = [-1.0, 0.0], tag = $line002) @@ -18,7 +18,7 @@ const plane005 = { // create a sketch with name sketch001 const sketch001 = startSketchOn(plane005) - |> startProfileAt([0.100000, 0.250000], %) + |> startProfile(at = [0.100000, 0.250000]) |> line(end = [0.075545, 0.494260], tag = $line003) |> line(end = [0.741390, -0.113317], tag = $line004) |> line(end = [-0.816935, -0.380943], tag = $line005) diff --git a/rust/kcl-lib/e2e/executor/inputs/extrude-inside-fn-with-tags.kcl b/rust/kcl-lib/e2e/executor/inputs/extrude-inside-fn-with-tags.kcl index 754c3076f..4a68c366a 100644 --- a/rust/kcl-lib/e2e/executor/inputs/extrude-inside-fn-with-tags.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/extrude-inside-fn-with-tags.kcl @@ -16,7 +16,7 @@ const tabThk = 4 // define a rectangular shape func fn rectShape = (pos, w, l) => { const rr = startSketchOn(XY) - |> startProfileAt([pos[0] - (w / 2), pos[1] - (l / 2)], %) + |> startProfile(at = [pos[0] - (w / 2), pos[1] - (l / 2)]) |> line(endAbsolute = [pos[0] + w / 2, pos[1] - (l / 2)], tag = $edge01) |> line(endAbsolute = [pos[0] + w / 2, pos[1] + l / 2], tag = $edge02) |> line(endAbsolute = [pos[0] - (w / 2), pos[1] + l / 2], tag = $edge03) @@ -35,7 +35,7 @@ const bracketPlane = { // build the bracket sketch around the body fn bracketSketch = (w, d, t) => { const s = startSketchOn(bracketPlane) - |> startProfileAt([-w / 2 - t, d + t], %) + |> startProfile(at = [-w / 2 - t, d + t]) |> line(endAbsolute = [-w / 2 - t, -t], tag = $edge1) |> line(endAbsolute = [w / 2 + t, -t], tag = $edge2) |> line(endAbsolute = [w / 2 + t, d + t], tag = $edge3) @@ -64,7 +64,7 @@ const bracketBody = bs // sketch on the face const retBack = startSketchOn(bs, face = bs.sketch.tags.edge4) - |> startProfileAt([length / 2 + thk, 0], %) + |> startProfile(at = [length / 2 + thk, 0]) |> line(end = [0, thk]) |> line(end = [-thk, 0]) |> line(end = [0, -thk]) diff --git a/rust/kcl-lib/e2e/executor/inputs/fillet-and-shell.kcl b/rust/kcl-lib/e2e/executor/inputs/fillet-and-shell.kcl index 7cd53de80..d91defe0d 100644 --- a/rust/kcl-lib/e2e/executor/inputs/fillet-and-shell.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/fillet-and-shell.kcl @@ -23,10 +23,7 @@ microUsbWidth = 7.4 connectorPadding = 4 miniHdmiHole = startSketchOn(XY) - |> startProfileAt([ - 0, - border + miniHdmiDistance - (miniHdmiWidth / 2) - ], %) + |> startProfile(at = [0, border + miniHdmiDistance - (miniHdmiWidth / 2)]) |> lineTo([ 0, border + miniHdmiDistance + miniHdmiWidth / 2 @@ -42,7 +39,7 @@ miniHdmiHole = startSketchOn(XY) |> close() case = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [caseWidth, 0], $edge1) |> line(endAbsolute = [caseWidth, caseLength], $edge2) |> line(endAbsolute = [0, caseLength], $edge3) @@ -61,7 +58,7 @@ case = startSketchOn(XY) fn m25Screw = (x, y, height) => { screw = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> circle(center= [x, y], radius=2.5) |> hole(circle(center= [x, y], radius = 1.25), %) |> extrude(length = height) diff --git a/rust/kcl-lib/e2e/executor/inputs/fillet_duplicate_tags.kcl b/rust/kcl-lib/e2e/executor/inputs/fillet_duplicate_tags.kcl index a33d3a5f1..a58a90b9b 100644 --- a/rust/kcl-lib/e2e/executor/inputs/fillet_duplicate_tags.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/fillet_duplicate_tags.kcl @@ -1,4 +1,4 @@ -startProfileAt([0, 0], startSketchOn("XY")) +startProfile(startSketchOn("XY"), at = [0, 0]) |> xLine(length = 10, tag = $line000) |> yLine(length = 10, tag = $line001) |> xLine(endAbsolute = profileStartX(%), tag = $line002) diff --git a/rust/kcl-lib/e2e/executor/inputs/focusrite_scarlett_mounting_braket.kcl b/rust/kcl-lib/e2e/executor/inputs/focusrite_scarlett_mounting_braket.kcl index 4ec89b27e..d2f0be6d9 100644 --- a/rust/kcl-lib/e2e/executor/inputs/focusrite_scarlett_mounting_braket.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/focusrite_scarlett_mounting_braket.kcl @@ -16,7 +16,7 @@ const tabThk = 4 // define a rectangular shape func fn rectShape = (pos, w, l) => { const rr = startSketchOn('xy') - |> startProfileAt([pos[0] - (w / 2), pos[1] - (l / 2)], %) + |> startProfile(at = [pos[0] - (w / 2), pos[1] - (l / 2)]) |> line(endAbsolute = [pos[0] + w / 2, pos[1] - (l / 2)], tag = $edge01) |> line(endAbsolute = [pos[0] + w / 2, pos[1] + l / 2], tag = $edge02) |> line(endAbsolute = [pos[0] - (w / 2), pos[1] + l / 2], tag = $edge03) @@ -35,7 +35,7 @@ const bracketPlane = { // build the bracket sketch around the body fn bracketSketch = (w, d, t) => { const s = startSketchOn(bracketPlane) - |> startProfileAt([-w / 2 - t, d + t], %) + |> startProfile(at = [-w / 2 - t, d + t]) |> line(endAbsolute = [-w / 2 - t, -t], tag = $edge1) |> line(endAbsolute = [w / 2 + t, -t], tag = $edge2) |> line(endAbsolute = [w / 2 + t, d + t], tag = $edge3) @@ -71,7 +71,7 @@ const tabPlane = { // build the tabs of the mounting bracket (right side) const tabsR = startSketchOn(tabPlane) - |> startProfileAt([width / 2 + thk, length / 2 + thk], %) + |> startProfile(at = [width / 2 + thk, length / 2 + thk]) |> line(end = [tabWidth, -tabLength / 3], tag = $edge11) |> line(end = [0, -tabLength / 3 * 2], tag = $edge12) |> line(end = [-tabWidth, -tabLength / 3], tag = $edge13) @@ -99,7 +99,7 @@ const tabsR = startSketchOn(tabPlane) // build the tabs of the mounting bracket (left side) const tabsL = startSketchOn(tabPlane) - |> startProfileAt([-width / 2 - thk, length / 2 + thk], %) + |> startProfile(at = [-width / 2 - thk, length / 2 + thk]) |> line(end = [-tabWidth, -tabLength / 3], tag = $edge21) |> line(end = [0, -tabLength / 3 * 2], tag = $edge22) |> line(end = [tabWidth, -tabLength / 3], tag = $edge23) @@ -135,7 +135,7 @@ const retPlane = { // build the retention bump in the front const retFront = startSketchOn(retPlane) - |> startProfileAt([-length / 2 - thk, 0], %) + |> startProfile(at = [-length / 2 - thk, 0]) |> line(end = [0, thk]) |> line(end = [thk, -thk]) |> close() @@ -143,7 +143,7 @@ const retFront = startSketchOn(retPlane) // build the retention bump in the back const retBack = startSketchOn(retPlane) - |> startProfileAt([length / 2 + thk, 0], %) + |> startProfile(at = [length / 2 + thk, 0]) |> line(end = [0, thk]) |> line(end = [-thk, 0]) |> line(end = [0, -thk]) diff --git a/rust/kcl-lib/e2e/executor/inputs/function_sketch.kcl b/rust/kcl-lib/e2e/executor/inputs/function_sketch.kcl index 01b9e0eac..4e43edb25 100644 --- a/rust/kcl-lib/e2e/executor/inputs/function_sketch.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/function_sketch.kcl @@ -1,6 +1,6 @@ fn box = (h, l, w) => { const myBox = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, l]) |> line(end = [w, 0]) |> line(end = [0, -l]) diff --git a/rust/kcl-lib/e2e/executor/inputs/function_sketch_with_position.kcl b/rust/kcl-lib/e2e/executor/inputs/function_sketch_with_position.kcl index b54642210..8c6c17661 100644 --- a/rust/kcl-lib/e2e/executor/inputs/function_sketch_with_position.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/function_sketch_with_position.kcl @@ -1,6 +1,6 @@ fn box = (p, h, l, w) => { const myBox = startSketchOn(XY) - |> startProfileAt(p, %) + |> startProfile(at = p) |> line(end = [0, l]) |> line(end = [w, 0]) |> line(end = [0, -l]) diff --git a/rust/kcl-lib/e2e/executor/inputs/global-tags.kcl b/rust/kcl-lib/e2e/executor/inputs/global-tags.kcl index 25fa5dd51..f8a1c3fb0 100644 --- a/rust/kcl-lib/e2e/executor/inputs/global-tags.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/global-tags.kcl @@ -16,7 +16,7 @@ const tabThk = 4 // define a rectangular shape func fn rectShape = (pos, w, l) => { const rr = startSketchOn('xy') - |> startProfileAt([pos[0] - (w / 2), pos[1] - (l / 2)], %) + |> startProfile(at = [pos[0] - (w / 2), pos[1] - (l / 2)]) |> line(endAbsolute = [pos[0] + w / 2, pos[1] - (l / 2)], tag = $edge01) |> line(endAbsolute = [pos[0] + w / 2, pos[1] + l / 2], tag = $edge02) |> line(endAbsolute = [pos[0] - (w / 2), pos[1] + l / 2], tag = $edge03) @@ -35,7 +35,7 @@ const bracketPlane = { // build the bracket sketch around the body fn bracketSketch = (w, d, t) => { const s = startSketchOn(bracketPlane) - |> startProfileAt([-w / 2 - t, d + t], %) + |> startProfile(at = [-w / 2 - t, d + t]) |> line(endAbsolute = [-w / 2 - t, -t], tag = $edge1) |> line(endAbsolute = [w / 2 + t, -t], tag = $edge2) |> line(endAbsolute = [w / 2 + t, d + t], tag = $edge3) @@ -71,7 +71,7 @@ const tabPlane = { // build the tabs of the mounting bracket (right side) const tabsR = startSketchOn(tabPlane) - |> startProfileAt([width / 2 + thk, length / 2 + thk], %) + |> startProfile(at = [width / 2 + thk, length / 2 + thk]) |> line(end = [tabWidth, -tabLength / 3], tag = $edge11) |> line(end = [0, -tabLength / 3 * 2], tag = $edge12) |> line(end = [-tabWidth, -tabLength / 3], tag = $edge13) @@ -99,7 +99,7 @@ const tabsR = startSketchOn(tabPlane) // build the tabs of the mounting bracket (left side) const tabsL = startSketchOn(tabPlane) - |> startProfileAt([-width / 2 - thk, length / 2 + thk], %) + |> startProfile(at = [-width / 2 - thk, length / 2 + thk]) |> line(end = [-tabWidth, -tabLength / 3], tag = $edge21) |> line(end = [0, -tabLength / 3 * 2], tag = $edge22) |> line(end = [tabWidth, -tabLength / 3], tag = $edge23) @@ -135,7 +135,7 @@ const retPlane = { // build the retention bump in the front const retFront = startSketchOn(retPlane) - |> startProfileAt([-length / 2 - thk, 0], %) + |> startProfile(at = [-length / 2 - thk, 0]) |> line(end = [0, thk]) |> line(end = [thk, -thk]) |> close() @@ -143,7 +143,7 @@ const retFront = startSketchOn(retPlane) // build the retention bump in the back const retBack = startSketchOn(retPlane) - |> startProfileAt([length / 2 + thk, 0], %) + |> startProfile(at = [length / 2 + thk, 0]) |> line(end = [0, thk]) |> line(end = [-thk, 0]) |> line(end = [0, -thk]) diff --git a/rust/kcl-lib/e2e/executor/inputs/i_shape.kcl b/rust/kcl-lib/e2e/executor/inputs/i_shape.kcl index 424df231e..092469446 100644 --- a/rust/kcl-lib/e2e/executor/inputs/i_shape.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/i_shape.kcl @@ -8,7 +8,7 @@ let corner_radius = 5.0 // but I measured intentionally to not be symmetric, // because your wrist isn't a perfect cylindrical surface let brace_base = startSketchOn(XY) - |> startProfileAt([corner_radius, 0], %) + |> startProfile(at = [corner_radius, 0]) |> line(end = [width - corner_radius, 0.0]) |> tangentialArc(end = [corner_radius, corner_radius]) |> yLine(length = 25.0 - corner_radius) @@ -36,7 +36,7 @@ let brace_base = startSketchOn(XY) |> close() let inner = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = 1.0) |> tangentialArc(end = [corner_radius, corner_radius]) |> yLine(length = 25.0 - (corner_radius * 2)) diff --git a/rust/kcl-lib/e2e/executor/inputs/kittycad_svg.kcl b/rust/kcl-lib/e2e/executor/inputs/kittycad_svg.kcl index 431421f21..2f2443572 100644 --- a/rust/kcl-lib/e2e/executor/inputs/kittycad_svg.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/kittycad_svg.kcl @@ -1,5 +1,5 @@ const svg = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [2.52, -26.04]) // MoveAbsolute |> line(endAbsolute = [2.52, -25.2]) // VerticalLineAbsolute diff --git a/rust/kcl-lib/e2e/executor/inputs/lego.kcl b/rust/kcl-lib/e2e/executor/inputs/lego.kcl index ed2f021b7..299ead324 100644 --- a/rust/kcl-lib/e2e/executor/inputs/lego.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/lego.kcl @@ -20,7 +20,7 @@ const wSegments = total_width / (wbumps + 1) // make the base const s = startSketchOn(XY) - |> startProfileAt([-total_width / 2, -total_length / 2], %) + |> startProfile(at = [-total_width / 2, -total_length / 2]) |> line(end = [total_width, 0]) |> line(end = [0, total_length]) |> line(end = [-total_width, 0]) @@ -28,10 +28,7 @@ const s = startSketchOn(XY) |> extrude(length = height) const shellExtrude = startSketchOn(s, face = "start") - |> startProfileAt([ - -(total_width / 2 - t), - -(total_length / 2 - t) - ], %) + |> startProfile(at = [-(total_width / 2 - t), -(total_length / 2 - t)]) |> line(end = [total_width - (2 * t), 0]) |> line(end = [0, total_length - (2 * t)]) |> line(end = [-(total_width - (2 * t)), 0]) diff --git a/rust/kcl-lib/e2e/executor/inputs/linear_pattern3d_a_pattern.kcl b/rust/kcl-lib/e2e/executor/inputs/linear_pattern3d_a_pattern.kcl index 9103d13d6..6ce4d951d 100644 --- a/rust/kcl-lib/e2e/executor/inputs/linear_pattern3d_a_pattern.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/linear_pattern3d_a_pattern.kcl @@ -1,5 +1,5 @@ exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 2]) |> line(end = [3, 1]) |> line(end = [0, -4]) diff --git a/rust/kcl-lib/e2e/executor/inputs/lsystem.kcl b/rust/kcl-lib/e2e/executor/inputs/lsystem.kcl index 06ba1986a..da1662393 100644 --- a/rust/kcl-lib/e2e/executor/inputs/lsystem.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/lsystem.kcl @@ -101,7 +101,7 @@ fn F = (state, F) => { fn LSystem = (args, axioms) => { myThing = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) return axioms({ depthMax: args.iterations, depth: 0, diff --git a/rust/kcl-lib/e2e/executor/inputs/member_expression_sketch.kcl b/rust/kcl-lib/e2e/executor/inputs/member_expression_sketch.kcl index 1a0291af9..586317b4c 100644 --- a/rust/kcl-lib/e2e/executor/inputs/member_expression_sketch.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/member_expression_sketch.kcl @@ -1,6 +1,6 @@ fn square = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) diff --git a/rust/kcl-lib/e2e/executor/inputs/mike_stress_test.kcl b/rust/kcl-lib/e2e/executor/inputs/mike_stress_test.kcl index 27bb6d9ba..913b510f0 100644 --- a/rust/kcl-lib/e2e/executor/inputs/mike_stress_test.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/mike_stress_test.kcl @@ -1,5 +1,5 @@ const part001 = startSketchOn(XY) - |> startProfileAt([0.0, 0.0], %) + |> startProfile(at = [0.0, 0.0]) |> line(end = [-0.3670208139314082, 0.21201331909674526]) |> line(end = [-0.4707511307971115, 0.4905279615419764]) |> line(end = [-0.8328324229085962, 0.4677492878818803]) diff --git a/rust/kcl-lib/e2e/executor/inputs/neg_xz_plane.kcl b/rust/kcl-lib/e2e/executor/inputs/neg_xz_plane.kcl index 0fe26b3a9..037537f37 100644 --- a/rust/kcl-lib/e2e/executor/inputs/neg_xz_plane.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/neg_xz_plane.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn('-XZ') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [100, 100]) |> line(endAbsolute = [100, 0]) |> close() diff --git a/rust/kcl-lib/e2e/executor/inputs/negative_args.kcl b/rust/kcl-lib/e2e/executor/inputs/negative_args.kcl index 969064596..2bd250e63 100644 --- a/rust/kcl-lib/e2e/executor/inputs/negative_args.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/negative_args.kcl @@ -4,7 +4,7 @@ const length = 12 fn box = (sk1, sk2, scale) => { const boxSketch = startSketchOn(XY) - |> startProfileAt([sk1, sk2], %) + |> startProfile(at = [sk1, sk2]) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) diff --git a/rust/kcl-lib/e2e/executor/inputs/no_visuals/export_side_effect.kcl b/rust/kcl-lib/e2e/executor/inputs/no_visuals/export_side_effect.kcl index b76fe3cfe..12b5189c4 100644 --- a/rust/kcl-lib/e2e/executor/inputs/no_visuals/export_side_effect.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/no_visuals/export_side_effect.kcl @@ -2,4 +2,4 @@ export fn foo = () => { return 0 } // This interacts with the engine. part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) diff --git a/rust/kcl-lib/e2e/executor/inputs/order-sketch-extrude-in-order.kcl b/rust/kcl-lib/e2e/executor/inputs/order-sketch-extrude-in-order.kcl index 595db503e..16636573a 100644 --- a/rust/kcl-lib/e2e/executor/inputs/order-sketch-extrude-in-order.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/order-sketch-extrude-in-order.kcl @@ -16,7 +16,7 @@ const plane94894440791888 = { // create a sketch with UID 94894440902176 const sketch94894440902176 = startSketchOn('-XZ') - |> startProfileAt([-0.005, -0.005], %) + |> startProfile(at = [-0.005, -0.005]) |> line(end = [0.01, 0.0], tag = $line94894439494384) |> line(end = [0.0, 0.01], tag = $line94894439429616) |> line(end = [-0.01, 0.0], tag = $line94894439638160) @@ -27,10 +27,7 @@ const extrude94894439487136 = extrude(sketch94894440902176, length = 0.01) // create a sketch with UID 94894439448464 const sketch94894439448464 = startSketchOn(plane94894440791888) - |> startProfileAt([ - 0.00074557205559017, - 0.00306415853984399 - ], %) + |> startProfile(at = [0.00074557205559017, 0.00306415853984399]) |> line(end = [0.004999999999999999, 0.0], tag = $line94894440230336) |> line(end = [0.0, -0.005], tag = $line94894439497168) |> line(end = [-0.004999999999999999, 0.0], tag = $line94894439496768) diff --git a/rust/kcl-lib/e2e/executor/inputs/order-sketch-extrude-out-of-order.kcl b/rust/kcl-lib/e2e/executor/inputs/order-sketch-extrude-out-of-order.kcl index f9d7286f6..120435495 100644 --- a/rust/kcl-lib/e2e/executor/inputs/order-sketch-extrude-out-of-order.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/order-sketch-extrude-out-of-order.kcl @@ -16,7 +16,7 @@ const plane94894440791888 = { // create a sketch with UID 94894440902176 const sketch94894440902176 = startSketchOn('-XZ') - |> startProfileAt([-0.005, -0.005], %) + |> startProfile(at = [-0.005, -0.005]) |> line(end = [0.01, 0.0], tag = $line94894439494384) |> line(end = [0.0, 0.01], tag = $line94894439429616) |> line(end = [-0.01, 0.0], tag = $line94894439638160) @@ -24,10 +24,7 @@ const sketch94894440902176 = startSketchOn('-XZ') // create a sketch with UID 94894439448464 const sketch94894439448464 = startSketchOn(plane94894440791888) - |> startProfileAt([ - 0.00074557205559017, - 0.00306415853984399 - ], %) + |> startProfile(at = [0.00074557205559017, 0.00306415853984399]) |> line(end = [0.004999999999999999, 0.0], tag = $line94894440230336) |> line(end = [0.0, -0.005], tag = $line94894439497168) |> line(end = [-0.004999999999999999, 0.0], tag = $line94894439496768) diff --git a/rust/kcl-lib/e2e/executor/inputs/parametric.kcl b/rust/kcl-lib/e2e/executor/inputs/parametric.kcl index 8ea8f5908..477a4340c 100644 --- a/rust/kcl-lib/e2e/executor/inputs/parametric.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/parametric.kcl @@ -8,7 +8,7 @@ const leg1 = 5 // inches const leg2 = 8 // inches const thickness = sqrt(distance * p * FOS * 6 / sigmaAllow / width) // inches const bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, leg1]) |> line(end = [leg2, 0]) |> line(end = [0, -thickness]) diff --git a/rust/kcl-lib/e2e/executor/inputs/parametric_with_tan_arc.kcl b/rust/kcl-lib/e2e/executor/inputs/parametric_with_tan_arc.kcl index 6fe6d3359..b19fe6a6b 100644 --- a/rust/kcl-lib/e2e/executor/inputs/parametric_with_tan_arc.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/parametric_with_tan_arc.kcl @@ -9,7 +9,7 @@ const shelfMountL = 9 const wallMountL = 8 const bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, wallMountL]) |> tangentialArc( radius = filletR, diff --git a/rust/kcl-lib/e2e/executor/inputs/pentagon_fillet_sugar.kcl b/rust/kcl-lib/e2e/executor/inputs/pentagon_fillet_sugar.kcl index bf8b5b3ba..598a1920f 100644 --- a/rust/kcl-lib/e2e/executor/inputs/pentagon_fillet_sugar.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/pentagon_fillet_sugar.kcl @@ -4,7 +4,7 @@ let radius = 80 let triangleLen = 500 const p = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 60, length = triangleLen, tag = $a) |> angledLine(angle = 180, length = triangleLen, tag = $b) |> angledLine(angle = 300, length = triangleLen, tag = $c) @@ -12,7 +12,7 @@ const p = startSketchOn(XY) fn circl = (x, face) => { return startSketchOn(p, face = face) - |> startProfileAt([x + radius, triangleHeight/2], %) + |> startProfile(at = [x + radius, triangleHeight/2]) |> arc( angleStart = 0, angleEnd = 360, diff --git a/rust/kcl-lib/e2e/executor/inputs/pipe_as_arg.kcl b/rust/kcl-lib/e2e/executor/inputs/pipe_as_arg.kcl index 88c7114f3..379ff7644 100644 --- a/rust/kcl-lib/e2e/executor/inputs/pipe_as_arg.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/pipe_as_arg.kcl @@ -8,7 +8,7 @@ fn cube = (length, center) => { let p3 = [ l + x, -l + y] return startSketchOn(XY) - |> startProfileAt(p0, %) + |> startProfile(at = p0) |> line(endAbsolute = p1) |> line(endAbsolute = p2) |> line(endAbsolute = p3) diff --git a/rust/kcl-lib/e2e/executor/inputs/pipes_on_pipes.kcl b/rust/kcl-lib/e2e/executor/inputs/pipes_on_pipes.kcl index 7730c3f31..ae55268c9 100644 --- a/rust/kcl-lib/e2e/executor/inputs/pipes_on_pipes.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/pipes_on_pipes.kcl @@ -1,5 +1,5 @@ const svg = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [22.687663, -2.7664351]) // MoveRelative |> line(endAbsolute = [15.687664000000002, -5.7664351]) // MoveRelative diff --git a/rust/kcl-lib/e2e/executor/inputs/poop_chute.kcl b/rust/kcl-lib/e2e/executor/inputs/poop_chute.kcl new file mode 100644 index 000000000..57206423a --- /dev/null +++ b/rust/kcl-lib/e2e/executor/inputs/poop_chute.kcl @@ -0,0 +1,52 @@ +wall_thickness = 0.125 +back_walls_width = 2 +front_walls_width = 2.5 +height = 5.5 +filletRadius = 0.050 +back_length = 7 +exit_height = 1 +front_length = 6 +Fx = 0.5 +Fy = 0.5 + +sketch001 = startSketchOn('-YZ') + |> startProfile(at = [back_walls_width / 2, 0]) + |> xLine(length = wall_thickness / 2) + |> angledLine(angle = 45, endAbsoluteX = back_walls_width, tag = $seg01) + |> yLine(endAbsolute = height) + |> xLine(length = -wall_thickness) + |> yLine(endAbsolute = segEndY(seg01)) + |> angledLine(angle = 45, endAbsoluteX = back_walls_width / 2 + wall_thickness / 2) + |> xLine(length = -wall_thickness) + |> angledLine(angle = 180 - 45, endAbsoluteX = wall_thickness) + |> yLine(endAbsolute = height) + |> xLine(endAbsolute = 0) + |> yLine(endAbsolute = segEndY(seg01)) + |> angledLine(angle = 180 - 45, endAbsoluteY = 0) + |> close() +part001 = revolve({ + angle: 90, + axis: { + custom: { + axis: [1.0, 0.0], + origin: [0.0, height + .0000001] + } + } +}, sketch001) + +sketch002 = startSketchOn('-YZ') + |> startProfile(at = [back_walls_width / 2, 0]) + |> xLine(length = wall_thickness / 2) + |> angledLine(angle = 45, endAbsoluteX = back_walls_width, tag = $seg02) + |> yLine(endAbsolute = height) + |> xLine(length = -wall_thickness) + |> yLine(endAbsolute = segEndY(seg01)) + |> angledLine(angle = 45, endAbsoluteX = back_walls_width / 2 + wall_thickness / 2) + |> xLine(length = -wall_thickness) + |> angledLine(angle = 180 - 45, endAbsoluteX = wall_thickness) + |> yLine(endAbsolute = height) + |> xLine(endAbsolute = 0) + |> yLine(endAbsolute = segEndY(seg02)) + |> angledLine(angle = 180 - 45, endAbsoluteY = 0) + |> close() + |> extrude(length = back_length - height) \ No newline at end of file diff --git a/rust/kcl-lib/e2e/executor/inputs/riddle.kcl b/rust/kcl-lib/e2e/executor/inputs/riddle.kcl index 19480e19f..1530ed14c 100644 --- a/rust/kcl-lib/e2e/executor/inputs/riddle.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/riddle.kcl @@ -7,7 +7,7 @@ fn p = (xs, ys) => { let ox = 35 - (m(xs) % 70) let oy = 35 - (m(ys) % 70) const r = startSketchOn(XZ) - |> startProfileAt([ox, oy], %) + |> startProfile(at = [ox, oy]) |> line(end = [1, 0]) |> line(end = [0, -1]) |> line(end = [-1, 0]) diff --git a/rust/kcl-lib/e2e/executor/inputs/riddle_small.kcl b/rust/kcl-lib/e2e/executor/inputs/riddle_small.kcl index 50e31c1ce..d9aa7b783 100644 --- a/rust/kcl-lib/e2e/executor/inputs/riddle_small.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/riddle_small.kcl @@ -9,7 +9,7 @@ let ys = 71816 let ox = 35 - (t(xs) % 70) let oy = 35 - (t(ys) % 70) const r = startSketchOn(XZ) - |> startProfileAt([ox, oy], %) + |> startProfile(at = [ox, oy]) |> line(end = [1, 0]) |> line(end = [0, -1]) |> line(end = [-1, 0]) diff --git a/rust/kcl-lib/e2e/executor/inputs/router-template-slate.kcl b/rust/kcl-lib/e2e/executor/inputs/router-template-slate.kcl index b08c8019b..ddc8af622 100644 --- a/rust/kcl-lib/e2e/executor/inputs/router-template-slate.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/router-template-slate.kcl @@ -10,7 +10,7 @@ const depth = 30 const length001 = slateWidthHalf - radius const length002 = depth + minClampingDistance const sketch001 = startSketchOn(XZ) - |> startProfileAt([0, depth - templateGap], %) + |> startProfile(at = [0, depth - templateGap]) |> xLine(length = length001, tag = $seg01) |> arc( angleEnd = 0, @@ -34,10 +34,7 @@ const sketch001 = startSketchOn(XZ) |> close() const extrude001 = extrude(sketch001, length = 5) const sketch002 = startSketchOn(extrude001, face = 'START') - |> startProfileAt([ - -slateWidthHalf, - -templateGap * 2 - (templateDiameter / 2) - ], %) + |> startProfile(at = [-slateWidthHalf, -templateGap * 2 - (templateDiameter / 2)]) |> xLine(length = -7, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001, %) + 90, length = minClampingDistance, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001, %), length = -segLen(rectangleSegmentA001, %), tag = $rectangleSegmentC001) @@ -45,10 +42,7 @@ const sketch002 = startSketchOn(extrude001, face = 'START') |> close() const extrude002 = extrude(sketch002, length = 7.5) const sketch003 = startSketchOn(extrude001, face = 'START') - |> startProfileAt([ - slateWidthHalf, - -templateGap * 2 - (templateDiameter / 2) - ], %) + |> startProfile(at = [slateWidthHalf, -templateGap * 2 - (templateDiameter / 2)]) |> xLine(length = 7, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002, %) - 90, length = minClampingDistance) |> angledLine(angle = segAng(rectangleSegmentA002, %), length = -segLen(rectangleSegmentA002, %)) diff --git a/rust/kcl-lib/e2e/executor/inputs/scoped-tags.kcl b/rust/kcl-lib/e2e/executor/inputs/scoped-tags.kcl index 8ee46e93a..4ffeb89bf 100644 --- a/rust/kcl-lib/e2e/executor/inputs/scoped-tags.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/scoped-tags.kcl @@ -1,6 +1,6 @@ fn rect = (origin) => { return startSketchOn(XZ) - |> startProfileAt(origin, %) + |> startProfile(at = origin) |> angledLine( angle = 0, length = 191.26, diff --git a/rust/kcl-lib/e2e/executor/inputs/server-rack-heavy.kcl b/rust/kcl-lib/e2e/executor/inputs/server-rack-heavy.kcl index b79a57e31..5b65e7ef1 100644 --- a/rust/kcl-lib/e2e/executor/inputs/server-rack-heavy.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/server-rack-heavy.kcl @@ -22,7 +22,7 @@ fn caster = (originStart) => { } const sketch001c = startSketchOn(plane001c) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = 3.543) |> yLine(length = 3.543) |> xLine(length = -3.543) @@ -47,7 +47,7 @@ fn caster = (originStart) => { |> extrude(length = -.25) const sketch002c = startSketchOn(sketch001c, face = 'START') - |> startProfileAt([-originStart[0], 2.2 + originStart[1]], %) + |> startProfile(at = [-originStart[0], 2.2 + originStart[1]]) |> arc( angle_start = 30, angle_end = 330, @@ -103,7 +103,7 @@ const plane001 = { } const sketch001l = startSketchOn(plane001) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = serverDepth + .8) |> angledLine(angle = -45, endAbsoluteY = 1) |> xLine(length = -serverDepth + 2 - .8, tag = $seg01) @@ -112,7 +112,7 @@ const sketch001l = startSketchOn(plane001) const extrude001l = extrude(sketch001l, length = 1) const sketch002l = startSketchOn(plane001) - |> startProfileAt([serverDepth + .8, 0], %) + |> startProfile(at = [serverDepth + .8, 0]) |> yLine(length = railHeight * 1.75 + 2) |> angledLine(angle = -135, endAbsoluteX = serverDepth - 1 + .8) |> yLine(length = -railHeight * 1.75) @@ -121,10 +121,7 @@ const sketch002l = startSketchOn(plane001) const extrude002l = extrude(sketch002l, length = 1) const sketch003l = startSketchOn(plane001) - |> startProfileAt([ - serverDepth + .8, - railHeight * 1.75 + 2 - ], %) + |> startProfile(at = [serverDepth + .8, railHeight * 1.75 + 2]) |> xLine(length = -serverDepth - .8, tag = $seg02) |> angledLine(angle = -45, endAbsoluteY = railHeight * 1.75 - 1 + 2) |> xLine(length = serverDepth - 2 + .8) @@ -133,7 +130,7 @@ const sketch003l = startSketchOn(plane001) const extrude003l = extrude(sketch003l, length = 1) const sketch004l = startSketchOn(plane001) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(length = railHeight * 1.75 + 2) |> angledLine(angle = 135, endAbsoluteY = railHeight * 1.75 + 2 - 1) |> yLine(length = -railHeight * 1.75) @@ -142,7 +139,7 @@ const sketch004l = startSketchOn(plane001) const extrude004l = extrude(sketch004l, length = 1) const sketch005l = startSketchOn(plane001) - |> startProfileAt([serverDepth - 1.25, 1], %) + |> startProfile(at = [serverDepth - 1.25, 1]) |> line(end = [-serverDepth + 2.25, railHeight * 1.75], tag = $lineToIntersect4) |> xLine(length = 1) |> line(end = [serverDepth - 2.25, -railHeight * 1.75], tag = $lineToIntersect5) @@ -151,7 +148,7 @@ const sketch005l = startSketchOn(plane001) const extrude005l = extrude(sketch005l, length = 1) const sketch006l = startSketchOn(plane001) - |> startProfileAt([1, 1], %) + |> startProfile(at = [1, 1]) |> angledLineThatIntersects( angle = 70, intersectTag = lineToIntersect4, @@ -164,10 +161,7 @@ const sketch006l = startSketchOn(plane001) const extrude006l = extrude(sketch006l, length = 1) const sketch007l = startSketchOn(plane001) - |> startProfileAt([ - serverDepth - 1.2, - railHeight * 1.75 + 1 - ], %) + |> startProfile(at = [serverDepth - 1.2, railHeight * 1.75 + 1]) |> angledLineThatIntersects( angle = 70, intersectTag = lineToIntersect5, @@ -192,7 +186,7 @@ const plane002 = { } const sketch001w = startSketchOn(plane002) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = depth) |> angledLine(angle = -45, endAbsoluteY = 1) |> xLine(length = -depth + 2, tag = $seg01w) @@ -201,7 +195,7 @@ const sketch001w = startSketchOn(plane002) const extrude001w = extrude(sketch001w, length = 1) const sketch002w = startSketchOn(plane002) - |> startProfileAt([depth, 0], %) + |> startProfile(at = [depth, 0]) |> yLine(length = railHeight * 1.75 + 2) |> angledLine(angle = -135, endAbsoluteX = depth - 1) |> yLine(length = -railHeight * 1.75) @@ -210,7 +204,7 @@ const sketch002w = startSketchOn(plane002) const extrude002w = extrude(sketch002w, length = 1) const sketch003w = startSketchOn(plane002) - |> startProfileAt([depth, railHeight * 1.75 + 2], %) + |> startProfile(at = [depth, railHeight * 1.75 + 2]) |> xLine(length = -depth, tag = $seg02w) |> angledLine(angle = -45, endAbsoluteY = railHeight * 1.75 - 1 + 2) |> xLine(length = depth - 2) @@ -219,7 +213,7 @@ const sketch003w = startSketchOn(plane002) const extrude003w = extrude(sketch003w, length = 1) const sketch004w = startSketchOn(plane002) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(length = railHeight * 1.75 + 2) |> angledLine(angle = 135, endAbsoluteY = railHeight * 1.75 + 2 - 1) |> yLine(length = -railHeight * 1.75) @@ -228,7 +222,7 @@ const sketch004w = startSketchOn(plane002) const extrude004w = extrude(sketch004w, length = 1) const sketch005w = startSketchOn(plane002) - |> startProfileAt([1, 40.6 + 1.75 / 2], %) + |> startProfile(at = [1, 40.6 + 1.75 / 2]) |> angledLine(angle = -23, length = 35.5 ) |> angledLine(angle = -23 + 90 + 45, length = 1.413 ) |> angledLine(angle = -23, endAbsoluteX = 1, tag = $lineToIntersect) @@ -237,10 +231,7 @@ const sketch005w = startSketchOn(plane002) const extrude005w = extrude(sketch005w, length = 1) const sketch006w = startSketchOn(plane002) - |> startProfileAt([ - 1 + 35.5 * cos(23 * pi() / 180), - 40.6 - (35.5 * sin(23 * pi() / 180)) + 1.75 / 2 - ], %) + |> startProfile(at = [1 + 35.5 * cos(23 * pi() / 180), 40.6 - (35.5 * sin(23 * pi() / 180)) + 1.75 / 2]) |> angledLine(angle = -23 + 90, endAbsoluteX = depth - 1) |> yLine(length = 2.56) |> angledLineThatIntersects( @@ -254,7 +245,7 @@ const sketch006w = startSketchOn(plane002) const extrude006w = extrude(sketch006w, length = 1) const sketch007w = startSketchOn(plane002) - |> startProfileAt([depth - 1, 60.65 + 1.75 / 2], %) + |> startProfile(at = [depth - 1, 60.65 + 1.75 / 2]) |> angledLine(angle = -23 + 180, length = 34.93 , tag = $lineToIntersect3) |> angledLine(angle = 23 - 90, length = 1.414 ) |> angledLineThatIntersects( @@ -267,7 +258,7 @@ const sketch007w = startSketchOn(plane002) const extrude007w = extrude(sketch007w, length = 1) const sketch008w = startSketchOn(plane002) - |> startProfileAt([1, 41.7 + 1.75 / 2], %) + |> startProfile(at = [1, 41.7 + 1.75 / 2]) |> angledLineThatIntersects( angle = -23 + 90, intersectTag = lineToIntersect3, @@ -284,7 +275,7 @@ const sketch008w = startSketchOn(plane002) const extrude008w = extrude(sketch008w, length = 1) const sketch009w = startSketchOn(plane002) - |> startProfileAt([31.2, 33.3 + 1.75 / 2], %) + |> startProfile(at = [31.2, 33.3 + 1.75 / 2]) |> angledLine(angle = -23 - 45, length = 1.414 ) |> angledLine(angle = 90 - 23, length = 28 ) |> angledLine(angle = -23 + 45, length = -1.414 ) @@ -293,7 +284,7 @@ const sketch009w = startSketchOn(plane002) const extrude009w = extrude(sketch009w, length = 1) const sketch010w = startSketchOn(plane002) - |> startProfileAt([31.2, 33.3 + 1.75 / 2], %) + |> startProfile(at = [31.2, 33.3 + 1.75 / 2]) |> angledLine(angle = -23 - 45, length = 1.414 ) |> angledLine(angle = 180 - 23, length = 28 ) |> angledLine(angle = -23 + 45, length = 1.414 ) @@ -302,10 +293,7 @@ const sketch010w = startSketchOn(plane002) const extrude010w = extrude(sketch010w, length = 1) const sketch011w = startSketchOn(plane002) - |> startProfileAt([ - 31.2 - ((28 - 2) * cos(23 * pi() / 180)), - 33.3 + (28 - 2) * sin(23 * pi() / 180) + 1.75 / 2 - ], %) + |> startProfile(at = [31.2 - ((28 - 2) * cos(23 * pi() / 180)), 33.3 + (28 - 2) * sin(23 * pi() / 180) + 1.75 / 2]) |> angledLine(angle = 90 - 23, length = 28 - 2 ) |> angledLine(angle = -23 - 45, length = -1.414 ) |> angledLine(angle = 90 - 23 + 180, length = 28 ) @@ -314,10 +302,7 @@ const sketch011w = startSketchOn(plane002) const extrude011w = extrude(sketch011w, length = 1) const sketch012w = startSketchOn(plane002) - |> startProfileAt([ - 31.2 + (28 - 2) * sin(23 * pi() / 180), - 33.3 + (28 - 2) * cos(23 * pi() / 180) + 1.75 / 2 - ], %) + |> startProfile(at = [31.2 + (28 - 2) * sin(23 * pi() / 180), 33.3 + (28 - 2) * cos(23 * pi() / 180) + 1.75 / 2]) |> angledLine(angle = 180 - 23, length = 28 - 2 ) |> angledLine(angle = -23 - 45, length = -1.414 ) |> angledLine(angle = -23, length = 28 ) @@ -326,10 +311,7 @@ const sketch012w = startSketchOn(plane002) const extrude012w = extrude(sketch012w, length = 1) const sketch013w = startSketchOn(plane002) - |> startProfileAt([ - 1 + 4 * cos(23 * pi() / 180), - 40.6 - (4 * sin(23 * pi() / 180)) + 1.75 / 2 - ], %) + |> startProfile(at = [1 + 4 * cos(23 * pi() / 180), 40.6 - (4 * sin(23 * pi() / 180)) + 1.75 / 2]) |> angledLine(angle = -23, length = 1 ) |> angledLine(angle = -23 + 90, endAbsoluteX = 1) |> yLine(length = 2.56) @@ -338,10 +320,7 @@ const sketch013w = startSketchOn(plane002) const extrude013w = extrude(sketch013w, length = 1) const sketch014w = startSketchOn(plane002) - |> startProfileAt([ - 1 + 12 * cos(23 * pi() / 180), - 40.6 - (12 * sin(23 * pi() / 180)) + 1.75 / 2 - ], %) + |> startProfile(at = [1 + 12 * cos(23 * pi() / 180), 40.6 - (12 * sin(23 * pi() / 180)) + 1.75 / 2]) |> angledLine(angle = -23 - 90, length = 36 / 2 ) |> angledLine(angle = -23, length = 1 ) |> angledLine(angle = -23 - 90, length = -36 / 2 ) @@ -350,10 +329,7 @@ const sketch014w = startSketchOn(plane002) const extrude014w = extrude(sketch014w, length = 1) const sketch015w = startSketchOn(plane002) - |> startProfileAt([ - 1 + (36 - 5.55 - 8) * cos(23 * pi() / 180), - 40.6 - ((36 - 5.55 - 8) * sin(23 * pi() / 180)) + 1.75 / 2 - ], %) + |> startProfile(at = [1 + (36 - 5.55 - 8) * cos(23 * pi() / 180), 40.6 - ((36 - 5.55 - 8) * sin(23 * pi() / 180)) + 1.75 / 2]) |> angledLine(angle = -23 - 90, length = 36 / 2 ) |> angledLine(angle = -23, length = 1 ) |> angledLine(angle = -23 - 90, length = -36 / 2 ) @@ -362,10 +338,7 @@ const sketch015w = startSketchOn(plane002) const extrude015w = extrude(sketch015w, length = 1) const sketch016w = startSketchOn(plane002) - |> startProfileAt([ - 1 + (36 - 5.5) * cos(23 * pi() / 180), - 40.6 - ((36 - 5.5) * sin(23 * pi() / 180)) + 1.75 / 2 - ], %) + |> startProfile(at = [1 + (36 - 5.5) * cos(23 * pi() / 180), 40.6 - ((36 - 5.5) * sin(23 * pi() / 180)) + 1.75 / 2]) |> angledLine(angle = -23 - 90, length = 36 / 2 ) |> angledLine(angle = -23, length = 1 ) |> angledLine(angle = -23 - 90, length = -36 / 2 ) @@ -374,10 +347,7 @@ const sketch016w = startSketchOn(plane002) const extrude016w = extrude(sketch016w, length = 1) const sketch017w = startSketchOn(plane002) - |> startProfileAt([ - depth - 1 - (3.7 * cos(23 * pi() / 180)), - 60.65 + 3.7 * sin(23 * pi() / 180) + 1.75 / 2 - ], %) + |> startProfile(at = [depth - 1 - (3.7 * cos(23 * pi() / 180)), 60.65 + 3.7 * sin(23 * pi() / 180) + 1.75 / 2]) |> arc(angleStart = -23, angleEnd = 180 - 23, radius = 7 / 2 + 2) |> angledLine(angle = -23 + 180, length = -1 ) |> arc(angleStart = 180 - 23, angleEnd = -23, radius = 7 / 2 + 1) @@ -386,10 +356,7 @@ const sketch017w = startSketchOn(plane002) const extrude017w = extrude(sketch017w, length = 1) const sketch018w = startSketchOn(plane002) - |> startProfileAt([ - depth - 1 - (19.3 * cos(23 * pi() / 180)), - 60.65 + 19.3 * sin(23 * pi() / 180) + 1.75 / 2 - ], %) + |> startProfile(at = [depth - 1 - (19.3 * cos(23 * pi() / 180)), 60.65 + 19.3 * sin(23 * pi() / 180) + 1.75 / 2]) |> arc(angleStart = -23, angleEnd = 180 - 23, radius = 7 / 2 + 2) |> angledLine(angle = -23 + 180, length = -1 ) |> arc(angleStart = 180 - 23, angleEnd = -23, radius = 7 / 2 + 1) @@ -398,7 +365,7 @@ const sketch018w = startSketchOn(plane002) const extrude018w = extrude(sketch018w, length = 1) const sketch019w = startSketchOn(plane002) - |> startProfileAt([1, 27.8 + 1.75 / 2], %) + |> startProfile(at = [1, 27.8 + 1.75 / 2]) |> angledLine(angle = -23, length = 7 ) |> angledLine(angle = -23 + 90, length = -1 ) |> angledLine(angle = -23, endAbsoluteX = 1) @@ -407,10 +374,7 @@ const sketch019w = startSketchOn(plane002) const extrude019w = extrude(sketch019w, length = 1) const sketch020w = startSketchOn(plane002) - |> startProfileAt([ - 1 + (36 - 5.53 - 12) * cos(23 * pi() / 180), - 27.8 + 1.75 / 2 - ((36 - 5.53 - 12) * sin(23 * pi() / 180)) - ], %) + |> startProfile(at = [1 + (36 - 5.53 - 12) * cos(23 * pi() / 180), 27.8 + 1.75 / 2 - ((36 - 5.53 - 12) * sin(23 * pi() / 180))]) |> angledLine(angle = -23, length = 7 ) |> angledLine(angle = -23 + 90, length = -1 ) |> angledLine(angle = -23 + 180, length = 7 ) @@ -419,7 +383,7 @@ const sketch020w = startSketchOn(plane002) const extrude020w = extrude(sketch020w, length = 1) const sketch021w = startSketchOn(plane002) - |> startProfileAt([1, 21.9], %) + |> startProfile(at = [1, 21.9]) |> angledLine(angle = -23, endAbsoluteX = depth - 1) |> yLine(length = -1.1) |> angledLine(angle = -23, endAbsoluteX = 1) @@ -428,7 +392,7 @@ const sketch021w = startSketchOn(plane002) const extrude021w = extrude(sketch021w, length = 1) const sketch022w = startSketchOn(plane002) - |> startProfileAt([depth - 1, 74.1], %) + |> startProfile(at = [depth - 1, 74.1]) |> angledLine(angle = 180 - 23, endAbsoluteY = railHeight * 1.75 + 1) |> xLine(length = -2.56) |> angledLine(angle = -23, endAbsoluteX = depth - 1) @@ -437,7 +401,7 @@ const sketch022w = startSketchOn(plane002) const extrude022w = extrude(sketch022w, length = 1) const sketch023w = startSketchOn(plane002) - |> startProfileAt([1, 69.53 + 1.75], %) + |> startProfile(at = [1, 69.53 + 1.75]) |> angledLine(angle = 90 - 23, endAbsoluteY = railHeight * 1.75 + 1) |> xLine(length = 1.086) |> angledLine(angle = 90 - 23, endAbsoluteX = 1) @@ -446,7 +410,7 @@ const sketch023w = startSketchOn(plane002) const extrude023w = extrude(sketch023w, length = 1) const sketch024w = startSketchOn(plane002) - |> startProfileAt([1, 16.5], %) + |> startProfile(at = [1, 16.5]) |> angledLine(angle = -23, endAbsoluteY = 1) |> xLine(length = -2.56) |> angledLine(angle = -23, endAbsoluteX = 1) @@ -455,7 +419,7 @@ const sketch024w = startSketchOn(plane002) const extrude024w = extrude(sketch024w, length = 1) const sketch025w = startSketchOn(plane002) - |> startProfileAt([1, 4], %) + |> startProfile(at = [1, 4]) |> angledLine(angle = -23, endAbsoluteY = 1) |> xLine(length = -2.56) |> angledLine(angle = -23, endAbsoluteX = 1) @@ -472,7 +436,7 @@ const plane003 = { } const sketch005 = startSketchOn(plane003) - |> startProfileAt([width - 1, 0], %) + |> startProfile(at = [width - 1, 0]) |> line(end = [-width + 2, 3]) |> line(end = [0, 1]) |> line(end = [width - 2, -3]) @@ -482,7 +446,7 @@ const sketch005 = startSketchOn(plane003) const extrude005 = extrude(sketch005, length = 1) const sketch006 = startSketchOn(plane003) - |> startProfileAt([width - 1, 0 + 2.756], %) + |> startProfile(at = [width - 1, 0 + 2.756]) |> line(end = [-width + 2, 3]) |> line(end = [0, 1]) |> line(end = [width - 2, -3]) @@ -492,7 +456,7 @@ const sketch006 = startSketchOn(plane003) const extrude006 = extrude(sketch006, length = 1) const sketch007 = startSketchOn(plane003) - |> startProfileAt([width - 1, depth], %) + |> startProfile(at = [width - 1, depth]) |> line(end = [-width + 1, -depth + serverDepth + 3.8]) |> line(end = [1, 0]) |> line(end = [0, -.75]) @@ -505,7 +469,7 @@ const sketch007 = startSketchOn(plane003) const extrude007 = extrude(sketch007, length = 1) const sketch008 = startSketchOn(plane003) - |> startProfileAt([width - 1, depth - 2.8], %) + |> startProfile(at = [width - 1, depth - 2.8]) |> line(end = [-width + 2, -depth + serverDepth + 4.4]) |> line(end = [0, -1.32]) |> line(end = [width - 2, depth - serverDepth - 4.4]) @@ -523,7 +487,7 @@ const plane004 = { } const sketch005t = startSketchOn(plane004) - |> startProfileAt([width - 1, 0], %) + |> startProfile(at = [width - 1, 0]) |> line(end = [-width + 2, 3]) |> line(end = [0, 1]) |> line(end = [width - 2, -3]) @@ -533,7 +497,7 @@ const sketch005t = startSketchOn(plane004) const extrude005t = extrude(sketch005t, length = -1) const sketch007t = startSketchOn(plane004) - |> startProfileAt([width - 1, depth], %) + |> startProfile(at = [width - 1, depth]) |> line(end = [-width + 1, -depth + serverDepth + 3.8]) |> line(end = [1, 0]) |> line(end = [0, -.75]) @@ -546,7 +510,7 @@ const sketch007t = startSketchOn(plane004) const extrude007t = extrude(sketch007t, length = -1) const sketch008t = startSketchOn(plane004) - |> startProfileAt([width - 1, 0 + 2.756], %) + |> startProfile(at = [width - 1, 0 + 2.756]) |> line(end = [-width + 2, 3]) |> line(end = [0, 1]) |> line(end = [width - 2, -3]) @@ -555,7 +519,7 @@ const sketch008t = startSketchOn(plane004) const extrude008t = extrude(sketch008t, length = -1) const sketch009t = startSketchOn(plane004) - |> startProfileAt([width - 1, depth - 2.8], %) + |> startProfile(at = [width - 1, depth - 2.8]) |> line(end = [-width + 2, -depth + serverDepth + 4.4]) |> line(end = [0, -1.32]) |> line(end = [width - 2, depth - serverDepth - 4.4]) @@ -589,7 +553,7 @@ const planeYZfl = { // Base flange const sketch001fl = startSketchOn(planeXZfl) - |> startProfileAt([bendRad + thickness, 0], %) + |> startProfile(at = [bendRad + thickness, 0]) |> angledLine(angle = 0, length = 2 - bendRad - thickness, tag = $rectangleSegmentA001fl) |> angledLine(angle = segAng(rectangleSegmentA001fl) + 90, length = railHeight * 1.75, tag = $rectangleSegmentB001fl) |> angledLine(angle = segAng(rectangleSegmentA001fl), length = -segLen(rectangleSegmentA001fl), tag = $rectangleSegmentC001fl) @@ -599,7 +563,7 @@ const extrude001fl = extrude(sketch001fl, length = thickness) // First flange const sketch002fl = startSketchOn(planeYZfl) - |> startProfileAt([-bendRad - thickness, 0], %) + |> startProfile(at = [-bendRad - thickness, 0]) |> angledLine(angle = 180, length = 0.89 - bendRad - thickness, tag = $rectangleSegmentA002fl) |> angledLine(angle = segAng(rectangleSegmentA002fl) - 90, length = railHeight * 1.75, tag = $rectangleSegmentB002fl) |> angledLine(angle = segAng(rectangleSegmentA002fl), length = -segLen(rectangleSegmentA002fl), tag = $rectangleSegmentC002fl) @@ -610,7 +574,7 @@ const extrude002fl = extrude(sketch002fl, length = thickness) // Bend const sketch003fl = startSketchOn(planeXYfl) - |> startProfileAt([0 + thickness + bendRad+originStart[1], originStart[0]], %) + |> startProfile(at = [0 + thickness + bendRad+originStart[1], originStart[0]]) |> arc(angleStart = 270, angleEnd = 180, radius = bendRad + thickness) |> xLine(length = thickness) |> arc(angleStart = 180, angleEnd = 270, radius = bendRad) @@ -621,7 +585,7 @@ const extrude003fl = extrude(sketch003fl, length = railHeight * 1.75) // EIA-310-D standard hole pattern const sketch004fl = startSketchOn(extrude002fl, face = 'START') - |> startProfileAt([0.72 + originStart[1], originStart[2] + 0.15], %) + |> startProfile(at = [0.72 + originStart[1], originStart[2] + 0.15]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA003fl) |> angledLine(angle = segAng(rectangleSegmentA003fl) - 90, length = 0.375, tag = $rectangleSegmentB003fl) |> angledLine(angle = segAng(rectangleSegmentA003fl), length = -segLen(rectangleSegmentA003fl), tag = $rectangleSegmentC003fl) @@ -636,7 +600,7 @@ const extrude004fl = extrude(sketch004fl, length = -thickness) // EIA-310-D standard hole pattern const sketch005fl = startSketchOn(extrude002fl, face = 'START') - |> startProfileAt([0.72 + originStart[1],originStart[2] + 0.15 + .62], %) + |> startProfile(at = [0.72 + originStart[1],originStart[2] + 0.15 + .62]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA004fl) |> angledLine(angle = segAng(rectangleSegmentA004fl) - 90, length = 0.375, tag = $rectangleSegmentB004fl) |> angledLine(angle = segAng(rectangleSegmentA004fl), length = -segLen(rectangleSegmentA004fl), tag = $rectangleSegmentC004fl) @@ -651,10 +615,7 @@ const extrude005fl = extrude(sketch005fl, length = -thickness) // EIA-310-D standard hole pattern const sketch006fl = startSketchOn(extrude002fl, face = 'START') - |> startProfileAt([ - 0.72 + originStart[1], - originStart[2] + 0.15 + 0.62 + 0.50 - ], %) + |> startProfile(at = [0.72 + originStart[1], originStart[2] + 0.15 + 0.62 + 0.50]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA005fl) |> angledLine(angle = segAng(rectangleSegmentA005fl) - 90, length = 0.375, tag = $rectangleSegmentB005fl) |> angledLine(angle = segAng(rectangleSegmentA005fl), length = -segLen(rectangleSegmentA005fl), tag = $rectangleSegmentC005fl) @@ -669,7 +630,7 @@ const extrude006fl = extrude(sketch006fl, length = -thickness) // EIA-310-D standard hole pattern const sketch007fl = startSketchOn(extrude001fl, face = 'START') - |> startProfileAt([-1.45 - originStart[0], originStart[2] + 0.15], %) + |> startProfile(at = [-1.45 - originStart[0], originStart[2] + 0.15]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA006fl) |> angledLine(angle = segAng(rectangleSegmentA006fl) - 90, length = 0.375, tag = $rectangleSegmentB006fl) |> angledLine(angle = segAng(rectangleSegmentA006fl), length = -segLen(rectangleSegmentA006fl), tag = $rectangleSegmentC006fl) @@ -684,7 +645,7 @@ const extrude007fl = extrude(sketch007fl, length = -thickness) // EIA-310-D standard hole pattern const sketch008fl = startSketchOn(extrude001fl, face = 'START') - |> startProfileAt([-1.45 - originStart[0],originStart[2] + 0.15 + 0.62], %) + |> startProfile(at = [-1.45 - originStart[0],originStart[2] + 0.15 + 0.62]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA007fl) |> angledLine(angle = segAng(rectangleSegmentA007fl) - 90, length = 0.375, tag = $rectangleSegmentB007fl) |> angledLine(angle = segAng(rectangleSegmentA007fl), length = -segLen(rectangleSegmentA007fl), tag = $rectangleSegmentC007fl) @@ -699,10 +660,7 @@ const extrude008fl = extrude(sketch008fl, length = -thickness) // EIA-310-D standard hole pattern const sketch009fl = startSketchOn(extrude001fl, face = 'START') - |> startProfileAt([ - -1.45 - originStart[0], - originStart[2] + 0.15 + 0.62 + 0.5 - ], %) + |> startProfile(at = [-1.45 - originStart[0], originStart[2] + 0.15 + 0.62 + 0.5]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA008fl) |> angledLine(angle = segAng(rectangleSegmentA008fl) - 90, length = 0.375, tag = $rectangleSegmentB008fl) |> angledLine(angle = segAng(rectangleSegmentA008fl), length = -segLen(rectangleSegmentA008fl), tag = $rectangleSegmentC008fl) @@ -717,10 +675,7 @@ const extrude009fl = extrude(sketch009fl, length = -thickness) // define slots const sketch010fl = startSketchOn(extrude001fl, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0], - originStart[2] + .81 - (.438 / 2) - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0], originStart[2] + .81 - (.438 / 2)]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [-0.66 - originStart[0],originStart[2] + .81 + .438 / 2]) |> xLine(length = -0.75 + .438) @@ -735,10 +690,7 @@ const extrude010fl = extrude(sketch010fl, length = -thickness) // define slots const sketch011fl = startSketchOn(extrude001fl, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0], - originStart[2] + railHeight * 1.75 / 2 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0], originStart[2] + railHeight * 1.75 / 2 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0], @@ -752,10 +704,10 @@ const extrude011fl = extrude(sketch011fl, length = -thickness) // define slots const sketch012fl = startSketchOn(extrude001fl, face = 'START') - |> startProfileAt([ + |> startProfile(at = [ -1.12 + (.75 - .438) / 2 - originStart[0], originStart[2] + railHeight * 1.75 - .81 + .438 / 2 - ], %) + ]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0], originStart[2]+ @@ -804,7 +756,7 @@ const planeYZfr = { // Base flange const sketch001fr = startSketchOn(planeXZfr) - |> startProfileAt([bendRad + thickness, 0], %) + |> startProfile(at = [bendRad + thickness, 0]) |> angledLine(angle = 0, length = 2 - bendRad - thickness, tag = $rectangleSegmentA001fr) |> angledLine(angle = segAng(rectangleSegmentA001fr) + 90, length = railHeight * 1.75, tag = $rectangleSegmentB001fr) |> angledLine(angle = segAng(rectangleSegmentA001fr), length = -segLen(rectangleSegmentA001fr), tag = $rectangleSegmentC001fr) @@ -814,7 +766,7 @@ const extrude001fr = extrude(sketch001fr, length = thickness) // First flange const sketch002fr = startSketchOn(planeYZfr) - |> startProfileAt([0.89, 0], %) + |> startProfile(at = [0.89, 0]) |> angledLine(angle = 180, length = 0.89 - bendRad - thickness, tag = $rectangleSegmentA002fr) |> angledLine(angle = segAng(rectangleSegmentA002fr) - 90, length = railHeight * 1.75, tag = $rectangleSegmentB002fr) |> angledLine(angle = segAng(rectangleSegmentA002fr), length = -segLen(rectangleSegmentA002fr), tag = $rectangleSegmentC002fr) @@ -825,10 +777,7 @@ const extrude002fr = extrude(sketch002fr, length = thickness) // Bend const sketch003fr = startSketchOn(planeXYfr) - |> startProfileAt([ - bendRad + originStart[1] + width - 2 - thickness - bendRad, - originStart[0] + bendRad + thickness - ], %) + |> startProfile(at = [bendRad + originStart[1] + width - 2 - thickness - bendRad, originStart[0] + bendRad + thickness]) |> arc(angleStart = 0, angleEnd = -90, radius = bendRad) |> yLine(length = -thickness) |> arc(angleStart = -90, angleEnd = 0, radius = bendRad + thickness) @@ -838,10 +787,7 @@ const extrude003fr = extrude(sketch003fr, length = railHeight * 1.75) // EIA-310-D standard hole pattern const sketch004fr = startSketchOn(extrude002fr, face = 'START') - |> startProfileAt([ - -0.35 + originStart[1] + width - 2, - originStart[2] + 0.15 - ], %) + |> startProfile(at = [-0.35 + originStart[1] + width - 2, originStart[2] + 0.15]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA003fr) |> angledLine(angle = segAng(rectangleSegmentA003fr) - 90, length = 0.375, tag = $rectangleSegmentB003fr) |> angledLine(angle = segAng(rectangleSegmentA003fr), length = -segLen(rectangleSegmentA003fr), tag = $rectangleSegmentC003fr) @@ -856,10 +802,7 @@ const extrude004fr = extrude(sketch004fr, length = -thickness) // EIA-310-D standard hole pattern const sketch005fr = startSketchOn(extrude002fr, face = 'START') - |> startProfileAt([ - -0.35 + originStart[1] + width - 2, - originStart[2] + 0.15 + .62 - ], %) + |> startProfile(at = [-0.35 + originStart[1] + width - 2, originStart[2] + 0.15 + .62]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA004fr) |> angledLine(angle = segAng(rectangleSegmentA004fr) - 90, length = 0.375, tag = $rectangleSegmentB004fr) |> angledLine(angle = segAng(rectangleSegmentA004fr), length = -segLen(rectangleSegmentA004fr), tag = $rectangleSegmentC004fr) @@ -874,10 +817,7 @@ const extrude005fr = extrude(sketch005fr, length = -thickness) // EIA-310-D standard hole pattern const sketch006fr = startSketchOn(extrude002fr, face = 'START') - |> startProfileAt([ - -0.35 + originStart[1] + width - 2, - originStart[2] + 0.15 + 0.62 + 0.50 - ], %) + |> startProfile(at = [-0.35 + originStart[1] + width - 2, originStart[2] + 0.15 + 0.62 + 0.50]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA005fr) |> angledLine(angle = segAng(rectangleSegmentA005fr) - 90, length = 0.375, tag = $rectangleSegmentB005fr) |> angledLine(angle = segAng(rectangleSegmentA005fr), length = -segLen(rectangleSegmentA005fr), tag = $rectangleSegmentC005fr) @@ -892,10 +832,7 @@ const extrude006fr = extrude(sketch006fr, length = -thickness) // EIA-310-D standard hole pattern const sketch007fr = startSketchOn(extrude001fr, face = 'START') - |> startProfileAt([ - -1.45 - originStart[0], - originStart[2] + 0.15 - ], %) + |> startProfile(at = [-1.45 - originStart[0], originStart[2] + 0.15]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA006fr) |> angledLine(angle = segAng(rectangleSegmentA006fr) - 90, length = 0.375, tag = $rectangleSegmentB006fr) |> angledLine(angle = segAng(rectangleSegmentA006fr), length = -segLen(rectangleSegmentA006fr), tag = $rectangleSegmentC006fr) @@ -910,10 +847,7 @@ const extrude007fr = extrude(sketch007fr, length = -thickness) // EIA-310-D standard hole pattern const sketch008fr = startSketchOn(extrude001fr, face = 'START') - |> startProfileAt([ - -1.45 - originStart[0], - originStart[2] + 0.15 + 0.62 - ], %) + |> startProfile(at = [-1.45 - originStart[0], originStart[2] + 0.15 + 0.62]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA007fr) |> angledLine(angle = segAng(rectangleSegmentA007fr) - 90, length = 0.375, tag = $rectangleSegmentB007fr) |> angledLine(angle = segAng(rectangleSegmentA007fr), length = -segLen(rectangleSegmentA007fr), tag = $rectangleSegmentC007fr) @@ -928,10 +862,7 @@ const extrude008fr = extrude(sketch008fr, length = -thickness) // EIA-310-D standard hole pattern const sketch009fr = startSketchOn(extrude001fr, face = 'START') - |> startProfileAt([ - -1.45 - originStart[0], - originStart[2] + 0.15 + 0.62 + 0.5 - ], %) + |> startProfile(at = [-1.45 - originStart[0], originStart[2] + 0.15 + 0.62 + 0.5]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA008fr) |> angledLine(angle = segAng(rectangleSegmentA008fr) - 90, length = 0.375, tag = $rectangleSegmentB008fr) |> angledLine(angle = segAng(rectangleSegmentA008fr), length = -segLen(rectangleSegmentA008fr), tag = $rectangleSegmentC008fr) @@ -946,10 +877,7 @@ const extrude009fr = extrude(sketch009fr, length = -thickness) // define slots const sketch010fr = startSketchOn(extrude001fr, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0], - originStart[2] + .81 - (.438 / 2) - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0], originStart[2] + .81 - (.438 / 2)]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0], @@ -967,10 +895,7 @@ const extrude010fr = extrude(sketch010fr, length = -thickness) // define slots const sketch011fr = startSketchOn(extrude001fr, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0], - originStart[2] + railHeight * 1.75 / 2 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0], originStart[2] + railHeight * 1.75 / 2 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0], @@ -984,10 +909,7 @@ const extrude011fr = extrude(sketch011fr, length = -thickness) // define slots const sketch012fr = startSketchOn(extrude001fr, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0], - originStart[2] + railHeight * 1.75 - .81 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0], originStart[2] + railHeight * 1.75 - .81 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0], @@ -1036,7 +958,7 @@ const planeYZrr = { // Base flange const sketch001rr = startSketchOn(planeXZrr) - |> startProfileAt([bendRad + thickness, 0], %) + |> startProfile(at = [bendRad + thickness, 0]) |> angledLine(angle = 0, length = 2 - bendRad - thickness, tag = $rectangleSegmentA001rr) |> angledLine(angle = segAng(rectangleSegmentA001rr) + 90, length = railHeight * 1.75, tag = $rectangleSegmentB001rr) |> angledLine(angle = segAng(rectangleSegmentA001rr), length = -segLen(rectangleSegmentA001rr), tag = $rectangleSegmentC001rr) @@ -1046,7 +968,7 @@ const extrude001rr = extrude(sketch001rr, length = thickness) // First flange const sketch002rr = startSketchOn(planeYZrr) - |> startProfileAt([0.89, 0], %) + |> startProfile(at = [0.89, 0]) |> angledLine(angle = 180, length = 0.89 - bendRad - thickness, tag = $rectangleSegmentA002rr) |> angledLine(angle = segAng(rectangleSegmentA002rr) - 90, length = railHeight * 1.75, tag = $rectangleSegmentB002rr) |> angledLine(angle = segAng(rectangleSegmentA002rr), length = -segLen(rectangleSegmentA002rr), tag = $rectangleSegmentC002rr) @@ -1057,10 +979,7 @@ const extrude002rr = extrude(sketch002rr, length = thickness) // Bend const sketch003rr = startSketchOn(planeXYrr) - |> startProfileAt([ - bendRad + originStart[1] + width - 2-bendRad, - originStart[0]-bendRad - ], %) + |> startProfile(at = [bendRad + originStart[1] + width - 2-bendRad, originStart[0]-bendRad]) |> arc(angleStart = 0, angleEnd = 90, radius = bendRad+thickness) |> yLine(length = -thickness) |> arc(angleStart = 90, angleEnd = 0, radius = bendRad) @@ -1070,10 +989,7 @@ const extrude003rr = extrude(sketch003rr, length = railHeight * 1.75) // EIA-310-D standard hole pattern const sketch004rr = startSketchOn(extrude002rr, face = 'START') - |> startProfileAt([ - -0.35 + originStart[1] + width - 2, - originStart[2] + 0.15 - ], %) + |> startProfile(at = [-0.35 + originStart[1] + width - 2, originStart[2] + 0.15]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA003rr) |> angledLine(angle = segAng(rectangleSegmentA003rr) - 90, length = 0.375, tag = $rectangleSegmentB003rr) |> angledLine(angle = segAng(rectangleSegmentA003rr), length = -segLen(rectangleSegmentA003rr), tag = $rectangleSegmentC003rr) @@ -1088,10 +1004,7 @@ const extrude004rr = extrude(sketch004rr, length = -thickness) // EIA-310-D standard hole pattern const sketch005rr = startSketchOn(extrude002rr, face = 'START') - |> startProfileAt([ - -0.35 + originStart[1] + width - 2, - originStart[2] + 0.15 + .62 - ], %) + |> startProfile(at = [-0.35 + originStart[1] + width - 2, originStart[2] + 0.15 + .62]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA004rr) |> angledLine(angle = segAng(rectangleSegmentA004rr) - 90, length = 0.375, tag = $rectangleSegmentB004rr) |> angledLine(angle = segAng(rectangleSegmentA004rr), length = -segLen(rectangleSegmentA004rr), tag = $rectangleSegmentC004rr) @@ -1106,10 +1019,7 @@ const extrude005rr = extrude(sketch005rr, length = -thickness) // EIA-310-D standard hole pattern const sketch006rr = startSketchOn(extrude002rr, face = 'START') - |> startProfileAt([ - -0.35 + originStart[1] + width - 2, - originStart[2] + 0.15 + 0.62 + 0.50 - ], %) + |> startProfile(at = [-0.35 + originStart[1] + width - 2, originStart[2] + 0.15 + 0.62 + 0.50]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA005rr) |> angledLine(angle = segAng(rectangleSegmentA005rr) - 90, length = 0.375, tag = $rectangleSegmentB005rr) |> angledLine(angle = segAng(rectangleSegmentA005rr), length = -segLen(rectangleSegmentA005rr), tag = $rectangleSegmentC005rr) @@ -1124,10 +1034,7 @@ const extrude006rr = extrude(sketch006rr, length = -thickness) // EIA-310-D standard hole pattern const sketch007rr = startSketchOn(extrude001rr, face = 'START') - |> startProfileAt([ - -originStart[0]-serverDepth+1.7, - originStart[2] + 0.15 - ], %) + |> startProfile(at = [-originStart[0]-serverDepth+1.7, originStart[2] + 0.15]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA006rr) |> angledLine(angle = segAng(rectangleSegmentA006rr) - 90, length = 0.375, tag = $rectangleSegmentB006rr) |> angledLine(angle = segAng(rectangleSegmentA006rr), length = -segLen(rectangleSegmentA006rr), tag = $rectangleSegmentC006rr) @@ -1142,10 +1049,7 @@ const extrude007rr = extrude(sketch007rr, length = -thickness) // EIA-310-D standard hole pattern const sketch008rr = startSketchOn(extrude001rr, face = 'START') - |> startProfileAt([ - -originStart[0]-serverDepth+1.7, - originStart[2] + 0.15 + 0.62 - ], %) + |> startProfile(at = [-originStart[0]-serverDepth+1.7, originStart[2] + 0.15 + 0.62]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA007rr) |> angledLine(angle = segAng(rectangleSegmentA007rr) - 90, length = 0.375, tag = $rectangleSegmentB007rr) |> angledLine(angle = segAng(rectangleSegmentA007rr), length = -segLen(rectangleSegmentA007rr), tag = $rectangleSegmentC007rr) @@ -1160,10 +1064,7 @@ const extrude008rr = extrude(sketch008rr, length = -thickness) // EIA-310-D standard hole pattern const sketch009rr = startSketchOn(extrude001rr, face = 'START') - |> startProfileAt([ - -originStart[0]-serverDepth+1.7, - originStart[2] + 0.15 + 0.62 + 0.5 - ], %) + |> startProfile(at = [-originStart[0]-serverDepth+1.7, originStart[2] + 0.15 + 0.62 + 0.5]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA008rr) |> angledLine(angle = segAng(rectangleSegmentA008rr) - 90, length = 0.375, tag = $rectangleSegmentB008rr) |> angledLine(angle = segAng(rectangleSegmentA008rr), length = -segLen(rectangleSegmentA008rr), tag = $rectangleSegmentC008rr) @@ -1178,10 +1079,7 @@ const extrude009rr = extrude(sketch009rr, length = -thickness) // define slots const sketch010rr = startSketchOn(extrude001rr, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0]+1.5-serverDepth, - originStart[2] + .81 - (.438 / 2) - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0]+1.5-serverDepth, originStart[2] + .81 - (.438 / 2)]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0]+1.5-serverDepth, @@ -1199,10 +1097,7 @@ const extrude010rr = extrude(sketch010rr, length = -thickness) // define slots const sketch011rr = startSketchOn(extrude001rr, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0]+1.5-serverDepth, - originStart[2] + railHeight * 1.75 / 2 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0]+1.5-serverDepth, originStart[2] + railHeight * 1.75 / 2 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0]+1.5-serverDepth, @@ -1216,10 +1111,7 @@ const extrude011rr = extrude(sketch011rr, length = -thickness) // define slots const sketch012rr = startSketchOn(extrude001rr, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0]+1.5-serverDepth, - originStart[2] + railHeight * 1.75 - .81 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0]+1.5-serverDepth, originStart[2] + railHeight * 1.75 - .81 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0]+1.5-serverDepth, @@ -1267,7 +1159,7 @@ const planeYZrl = { } // Base flange const sketch001rl = startSketchOn(planeXZrl) - |> startProfileAt([bendRad + thickness, 0], %) + |> startProfile(at = [bendRad + thickness, 0]) |> angledLine(angle = 0, length = 2 - bendRad - thickness, tag = $rectangleSegmentA001rl) |> angledLine(angle = segAng(rectangleSegmentA001rl) + 90, length = railHeight * 1.75, tag = $rectangleSegmentB001rl) |> angledLine(angle = segAng(rectangleSegmentA001rl), length = -segLen(rectangleSegmentA001rl), tag = $rectangleSegmentC001rl) @@ -1277,7 +1169,7 @@ const extrude001rl = extrude(sketch001rl, length = thickness) // First flange const sketch002rl = startSketchOn(planeYZrl) - |> startProfileAt([-bendRad - thickness, 0], %) + |> startProfile(at = [-bendRad - thickness, 0]) |> angledLine(angle = 180, length = 0.89 - bendRad - thickness, tag = $rectangleSegmentA002rl) |> angledLine(angle = segAng(rectangleSegmentA002rl) - 90, length = railHeight * 1.75, tag = $rectangleSegmentB002rl) |> angledLine(angle = segAng(rectangleSegmentA002rl), length = -segLen(rectangleSegmentA002rl), tag = $rectangleSegmentC002rl) @@ -1288,10 +1180,7 @@ const extrude002rl = extrude(sketch002rl, length = thickness) // Bend const sketch003rl = startSketchOn(planeXYrl) - |> startProfileAt([ - bendRad + originStart[1] + thickness, - originStart[0] - ], %) + |> startProfile(at = [bendRad + originStart[1] + thickness, originStart[0]]) |> arc(angleStart = 90, angleEnd = 180, radius = bendRad) |> xLine(length = -thickness) |> arc(angleStart = 180, angleEnd = 90, radius = bendRad + thickness) @@ -1301,10 +1190,7 @@ const extrude003rl = extrude(sketch003rl, length = railHeight * 1.75) // EIA-310-D standard hole pattern const sketch004rl = startSketchOn(extrude002rl, face = 'START') - |> startProfileAt([ - -1.38 + 2 + thickness + originStart[1], - originStart[2] + 0.15 - ], %) + |> startProfile(at = [-1.38 + 2 + thickness + originStart[1], originStart[2] + 0.15]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA003rl) |> angledLine(angle = segAng(rectangleSegmentA003rl) - 90, length = 0.375, tag = $rectangleSegmentB003rl) |> angledLine(angle = segAng(rectangleSegmentA003rl), length = -segLen(rectangleSegmentA003rl), tag = $rectangleSegmentC003rl) @@ -1319,10 +1205,7 @@ const extrude004rl = extrude(sketch004rl, length = -thickness) // EIA-310-D standard hole pattern const sketch005rl = startSketchOn(extrude002rl, face = 'START') - |> startProfileAt([ - -1.38 + 2 + thickness + originStart[1], - originStart[2] + 0.15 + .62 - ], %) + |> startProfile(at = [-1.38 + 2 + thickness + originStart[1], originStart[2] + 0.15 + .62]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA004rl) |> angledLine(angle = segAng(rectangleSegmentA004rl) - 90, length = 0.375, tag = $rectangleSegmentB004rl) |> angledLine(angle = segAng(rectangleSegmentA004rl), length = -segLen(rectangleSegmentA004rl), tag = $rectangleSegmentC004rl) @@ -1337,10 +1220,7 @@ const extrude005rl = extrude(sketch005rl, length = -thickness) // EIA-310-D standard hole pattern const sketch006rl = startSketchOn(extrude002rl, face = 'START') - |> startProfileAt([ - -1.38 + 2 + thickness + originStart[1], - originStart[2] + 0.15 + 0.62 + 0.50 - ], %) + |> startProfile(at = [-1.38 + 2 + thickness + originStart[1], originStart[2] + 0.15 + 0.62 + 0.50]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA005rl) |> angledLine(angle = segAng(rectangleSegmentA005rl) - 90, length = 0.375, tag = $rectangleSegmentB005rl) |> angledLine(angle = segAng(rectangleSegmentA005rl), length = -segLen(rectangleSegmentA005rl), tag = $rectangleSegmentC005rl) @@ -1355,10 +1235,7 @@ const extrude006rl = extrude(sketch006rl, length = -thickness) // EIA-310-D standard hole pattern const sketch007rl = startSketchOn(extrude001rl, face = 'START') - |> startProfileAt([ - 1.75 - originStart[0] - serverDepth, - originStart[2] + 0.15 - ], %) + |> startProfile(at = [1.75 - originStart[0] - serverDepth, originStart[2] + 0.15]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA006rl) |> angledLine(angle = segAng(rectangleSegmentA006rl) - 90, length = 0.375, tag = $rectangleSegmentB006rl) |> angledLine(angle = segAng(rectangleSegmentA006rl), length = -segLen(rectangleSegmentA006rl), tag = $rectangleSegmentC006rl) @@ -1373,10 +1250,7 @@ const extrude007rl = extrude(sketch007rl, length = -thickness) // EIA-310-D standard hole pattern const sketch008rl = startSketchOn(extrude001rl, face = 'START') - |> startProfileAt([ - 1.75 - originStart[0] - serverDepth, - originStart[2] + 0.15 + 0.62 - ], %) + |> startProfile(at = [1.75 - originStart[0] - serverDepth, originStart[2] + 0.15 + 0.62]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA007rl) |> angledLine(angle = segAng(rectangleSegmentA007rl) - 90, length = 0.375, tag = $rectangleSegmentB007rl) |> angledLine(angle = segAng(rectangleSegmentA007rl), length = -segLen(rectangleSegmentA007rl), tag = $rectangleSegmentC007rl) @@ -1391,10 +1265,7 @@ const extrude008rl = extrude(sketch008rl, length = -thickness) // EIA-310-D standard hole pattern const sketch009rl = startSketchOn(extrude001rl, face = 'START') - |> startProfileAt([ - 1.75 - originStart[0] - serverDepth, - originStart[2] + 0.15 + 0.62 + 0.5 - ], %) + |> startProfile(at = [1.75 - originStart[0] - serverDepth, originStart[2] + 0.15 + 0.62 + 0.5]) |> angledLine(angle = 0, length = -0.375, tag = $rectangleSegmentA008rl) |> angledLine(angle = segAng(rectangleSegmentA008rl) - 90, length = 0.375, tag = $rectangleSegmentB008rl) |> angledLine(angle = segAng(rectangleSegmentA008rl), length = -segLen(rectangleSegmentA008rl), tag = $rectangleSegmentC008rl) @@ -1409,10 +1280,7 @@ const extrude009rl = extrude(sketch009rl, length = -thickness) // define slots const sketch010rl = startSketchOn(extrude001rl, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0] - serverDepth + 1.5, - originStart[2] + .81 - (.438 / 2) - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0] - serverDepth + 1.5, originStart[2] + .81 - (.438 / 2)]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0] - serverDepth + 1.5, @@ -1430,10 +1298,7 @@ const extrude010rl = extrude(sketch010rl, length = -thickness) // define slots const sketch011rl = startSketchOn(extrude001rl, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0] - serverDepth + 1.5, - originStart[2] + railHeight * 1.75 / 2 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0] - serverDepth + 1.5, originStart[2] + railHeight * 1.75 / 2 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0] - serverDepth + 1.5, @@ -1447,10 +1312,7 @@ const extrude011rl = extrude(sketch011rl, length = -thickness) // define slots const sketch012rl = startSketchOn(extrude001rl, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0] - serverDepth + 1.5, - originStart[2] + railHeight * 1.75 - .81 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0] - serverDepth + 1.5, originStart[2] + railHeight * 1.75 - .81 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0] - serverDepth + 1.5, @@ -1490,7 +1352,7 @@ fn streamServer = (serverPos) => { } const sketch001s = startSketchOn(planeXYs) - |> startProfileAt([1 + 1.2, 1], %) + |> startProfile(at = [1 + 1.2, 1]) |> angledLine(angle = 0, length = 17.2, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 29, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) @@ -1499,7 +1361,7 @@ fn streamServer = (serverPos) => { const extrude001s = extrude(sketch001s, length = 7) const sketch002s = startSketchOn(planeXZs) - |> startProfileAt([-1, 4.114 + 1 + serverPos * 1.75], %) + |> startProfile(at = [-1, 4.114 + 1 + serverPos * 1.75]) |> yLine(length = 6.98) |> xLine(length = 0.2) |> yLine(length = -0.36) @@ -1523,7 +1385,7 @@ fn streamServer = (serverPos) => { const extrude002s = extrude(sketch002s, length = 1.8 / 2) const sketch003s = startSketchOn(planeXZs2) - |> startProfileAt([-1, 4.114 + 1 + serverPos * 1.75], %) + |> startProfile(at = [-1, 4.114 + 1 + serverPos * 1.75]) |> yLine(length = 6.98) |> xLine(length = 0.2) |> yLine(length = -0.36) diff --git a/rust/kcl-lib/e2e/executor/inputs/server-rack-lite.kcl b/rust/kcl-lib/e2e/executor/inputs/server-rack-lite.kcl index fffb5f312..98847445f 100644 --- a/rust/kcl-lib/e2e/executor/inputs/server-rack-lite.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/server-rack-lite.kcl @@ -20,7 +20,7 @@ fn caster = (originStart) => { } const sketch001c = startSketchOn(plane001c) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = 3.543) |> yLine(length = 3.543) |> xLine(length = -3.543) @@ -45,7 +45,7 @@ fn caster = (originStart) => { |> extrude(length = -.25) const sketch002c = startSketchOn(sketch001c, face = 'START') - |> startProfileAt([-originStart[0], 2.2 + originStart[1]], %) + |> startProfile(at = [-originStart[0], 2.2 + originStart[1]]) |> arc( angle_start = 30, angle_end = 330, @@ -101,7 +101,7 @@ const plane001 = { } const sketch001l = startSketchOn(plane001) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = serverDepth + .8) |> angledLine(angle = -45, endAbsoluteY = 1) |> xLine(length = -serverDepth + 2 - .8, tag = $seg01) @@ -110,7 +110,7 @@ const sketch001l = startSketchOn(plane001) const extrude001l = extrude(sketch001l, length = 1) const sketch002l = startSketchOn(plane001) - |> startProfileAt([serverDepth + .8, 0], %) + |> startProfile(at = [serverDepth + .8, 0]) |> yLine(length = railHeight * 1.75 + 2) |> angledLine(angle = -135, endAbsoluteX = serverDepth - 1 + .8) |> yLine(length = -railHeight * 1.75) @@ -119,10 +119,7 @@ const sketch002l = startSketchOn(plane001) const extrude002l = extrude(sketch002l, length = 1) const sketch003l = startSketchOn(plane001) - |> startProfileAt([ - serverDepth + .8, - railHeight * 1.75 + 2 - ], %) + |> startProfile(at = [serverDepth + .8, railHeight * 1.75 + 2]) |> xLine(length = -serverDepth - .8, tag = $seg02) |> angledLine(angle = -45, endAbsoluteY = railHeight * 1.75 - 1 + 2) |> xLine(length = serverDepth - 2 + .8) @@ -131,7 +128,7 @@ const sketch003l = startSketchOn(plane001) const extrude003l = extrude(sketch003l, length = 1) const sketch004l = startSketchOn(plane001) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(length = railHeight * 1.75 + 2) |> angledLine(angle = 135, endAbsoluteY = railHeight * 1.75 + 2 - 1) |> yLine(length = -railHeight * 1.75) @@ -140,7 +137,7 @@ const sketch004l = startSketchOn(plane001) const extrude004l = extrude(sketch004l, length = 1) const sketch005l = startSketchOn(plane001) - |> startProfileAt([serverDepth - 1.25, 1], %) + |> startProfile(at = [serverDepth - 1.25, 1]) |> line(end = [-serverDepth + 2.25, railHeight * 1.75], tag = $lineToIntersect4) |> xLine(length = 1) |> line(end = [serverDepth - 2.25, -railHeight * 1.75], tag = $lineToIntersect5) @@ -149,7 +146,7 @@ const sketch005l = startSketchOn(plane001) const extrude005l = extrude(sketch005l, length = 1) const sketch006l = startSketchOn(plane001) - |> startProfileAt([1, 1], %) + |> startProfile(at = [1, 1]) |> angledLineThatIntersects(angle = 70, intersectTag = lineToIntersect4, offset = 0) |> angledLine(angle = -70, length = 1.414 ) |> angledLine(angle = 70 + 180, endAbsoluteY = 2 - 1) @@ -158,10 +155,7 @@ const sketch006l = startSketchOn(plane001) const extrude006l = extrude(sketch006l, length = 1) const sketch007l = startSketchOn(plane001) - |> startProfileAt([ - serverDepth - 1.2, - railHeight * 1.75 + 1 - ], %) + |> startProfile(at = [serverDepth - 1.2, railHeight * 1.75 + 1]) |> angledLineThatIntersects(angle = 70, intersectTag = lineToIntersect5, offset = 0) |> angledLine(angle = -70, length = 1.414 ) |> angledLine(angle = 70 + 180, endAbsoluteY = railHeight * 1.75 + 1) @@ -182,7 +176,7 @@ const plane002 = { } const sketch001w = startSketchOn(plane002) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = depth) |> angledLine(angle = -45, endAbsoluteY = 1) |> xLine(length = -depth + 2, tag = $seg01w) @@ -191,7 +185,7 @@ const sketch001w = startSketchOn(plane002) const extrude001w = extrude(sketch001w, length = 1) const sketch002w = startSketchOn(plane002) - |> startProfileAt([depth, 0], %) + |> startProfile(at = [depth, 0]) |> yLine(length = railHeight * 1.75 + 2) |> angledLine(angle = -135, endAbsoluteX = depth - 1) |> yLine(length = -railHeight * 1.75) @@ -200,7 +194,7 @@ const sketch002w = startSketchOn(plane002) const extrude002w = extrude(sketch002w, length = 1) const sketch003w = startSketchOn(plane002) - |> startProfileAt([depth, railHeight * 1.75 + 2], %) + |> startProfile(at = [depth, railHeight * 1.75 + 2]) |> xLine(length = -depth, tag = $seg02w) |> angledLine(angle = -45, endAbsoluteY = railHeight * 1.75 - 1 + 2) |> xLine(length = depth - 2) @@ -209,7 +203,7 @@ const sketch003w = startSketchOn(plane002) const extrude003w = extrude(sketch003w, length = 1) const sketch004w = startSketchOn(plane002) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(length = railHeight * 1.75 + 2) |> angledLine(angle = 135, endAbsoluteY = railHeight * 1.75 + 2 - 1) |> yLine(length = -railHeight * 1.75) @@ -218,7 +212,7 @@ const sketch004w = startSketchOn(plane002) const extrude004w = extrude(sketch004w, length = 1) const sketch005w = startSketchOn(plane002) - |> startProfileAt([1, 40.6 + 1.75 / 2], %) + |> startProfile(at = [1, 40.6 + 1.75 / 2]) |> angledLine(angle = -23, length = 35.5 ) |> angledLine(angle = -23 + 90 + 45, length = 1.413 ) |> angledLine(angle = -23, endAbsoluteX = 1, tag = $lineToIntersect) @@ -227,10 +221,7 @@ const sketch005w = startSketchOn(plane002) const extrude005w = extrude(sketch005w, length = 1) const sketch006w = startSketchOn(plane002) - |> startProfileAt([ - 1 + 35.5 * cos(23 * pi() / 180), - 40.6 - (35.5 * sin(23 * pi() / 180)) + 1.75 / 2 - ], %) + |> startProfile(at = [1 + 35.5 * cos(23 * pi() / 180), 40.6 - (35.5 * sin(23 * pi() / 180)) + 1.75 / 2]) |> angledLine(angle = -23 + 90, endAbsoluteX = depth - 1) |> yLine(length = 2.56) |> angledLineThatIntersects( @@ -244,7 +235,7 @@ const sketch006w = startSketchOn(plane002) const extrude006w = extrude(sketch006w, length = 1) const sketch007w = startSketchOn(plane002) - |> startProfileAt([depth - 1, 60.65 + 1.75 / 2], %) + |> startProfile(at = [depth - 1, 60.65 + 1.75 / 2]) |> angledLine(angle = -23 + 180, length = 34.93 , tag = $lineToIntersect3) |> angledLine(angle = 23 - 90, length = 1.414 ) |> angledLineThatIntersects( @@ -257,7 +248,7 @@ const sketch007w = startSketchOn(plane002) const extrude007w = extrude(sketch007w, length = 1) const sketch008w = startSketchOn(plane002) - |> startProfileAt([1, 41.7 + 1.75 / 2], %) + |> startProfile(at = [1, 41.7 + 1.75 / 2]) |> angledLineThatIntersects( angle = -23 + 90, intersectTag = lineToIntersect3, @@ -274,7 +265,7 @@ const sketch008w = startSketchOn(plane002) const extrude008w = extrude(sketch008w, length = 1) const sketch009w = startSketchOn(plane002) - |> startProfileAt([31.2, 33.3 + 1.75 / 2], %) + |> startProfile(at = [31.2, 33.3 + 1.75 / 2]) |> angledLine(angle = -23 - 45, length = 1.414 ) |> angledLine(angle = 90 - 23, length = 28 ) |> angledLine(angle = -23 + 45, length = -1.414 ) @@ -283,7 +274,7 @@ const sketch009w = startSketchOn(plane002) const extrude009w = extrude(sketch009w, length = 1) const sketch010w = startSketchOn(plane002) - |> startProfileAt([31.2, 33.3 + 1.75 / 2], %) + |> startProfile(at = [31.2, 33.3 + 1.75 / 2]) |> angledLine(angle = -23 - 45, length = 1.414 ) |> angledLine(angle = 180 - 23, length = 28 ) |> angledLine(angle = -23 + 45, length = 1.414 ) @@ -292,10 +283,7 @@ const sketch010w = startSketchOn(plane002) const extrude010w = extrude(sketch010w, length = 1) const sketch011w = startSketchOn(plane002) - |> startProfileAt([ - 31.2 - ((28 - 2) * cos(23 * pi() / 180)), - 33.3 + (28 - 2) * sin(23 * pi() / 180) + 1.75 / 2 - ], %) + |> startProfile(at = [31.2 - ((28 - 2) * cos(23 * pi() / 180)), 33.3 + (28 - 2) * sin(23 * pi() / 180) + 1.75 / 2]) |> angledLine(angle = 90 - 23, length = 28 - 2 ) |> angledLine(angle = -23 - 45, length = -1.414 ) |> angledLine(angle = 90 - 23 + 180, length = 28 ) @@ -304,10 +292,7 @@ const sketch011w = startSketchOn(plane002) const extrude011w = extrude(sketch011w, length = 1) const sketch012w = startSketchOn(plane002) - |> startProfileAt([ - 31.2 + (28 - 2) * sin(23 * pi() / 180), - 33.3 + (28 - 2) * cos(23 * pi() / 180) + 1.75 / 2 - ], %) + |> startProfile(at = [31.2 + (28 - 2) * sin(23 * pi() / 180), 33.3 + (28 - 2) * cos(23 * pi() / 180) + 1.75 / 2]) |> angledLine(angle = 180 - 23, length = 28 - 2 ) |> angledLine(angle = -23 - 45, length = -1.414 ) |> angledLine(angle = -23, length = 28 ) @@ -316,10 +301,7 @@ const sketch012w = startSketchOn(plane002) const extrude012w = extrude(sketch012w, length = 1) const sketch013w = startSketchOn(plane002) - |> startProfileAt([ - 1 + 4 * cos(23 * pi() / 180), - 40.6 - (4 * sin(23 * pi() / 180)) + 1.75 / 2 - ], %) + |> startProfile(at = [1 + 4 * cos(23 * pi() / 180), 40.6 - (4 * sin(23 * pi() / 180)) + 1.75 / 2]) |> angledLine(angle = -23, length = 1 ) |> angledLine(angle = -23 + 90, endAbsoluteX = 1) |> yLine(length = 2.56) @@ -328,10 +310,7 @@ const sketch013w = startSketchOn(plane002) const extrude013w = extrude(sketch013w, length = 1) const sketch014w = startSketchOn(plane002) - |> startProfileAt([ - 1 + 12 * cos(23 * pi() / 180), - 40.6 - (12 * sin(23 * pi() / 180)) + 1.75 / 2 - ], %) + |> startProfile(at = [1 + 12 * cos(23 * pi() / 180), 40.6 - (12 * sin(23 * pi() / 180)) + 1.75 / 2]) |> angledLine(angle = -23 - 90, length = 36 / 2 ) |> angledLine(angle = -23, length = 1 ) |> angledLine(angle = -23 - 90, length = -36 / 2 ) @@ -340,10 +319,7 @@ const sketch014w = startSketchOn(plane002) const extrude014w = extrude(sketch014w, length = 1) const sketch015w = startSketchOn(plane002) - |> startProfileAt([ - 1 + (36 - 5.55 - 8) * cos(23 * pi() / 180), - 40.6 - ((36 - 5.55 - 8) * sin(23 * pi() / 180)) + 1.75 / 2 - ], %) + |> startProfile(at = [1 + (36 - 5.55 - 8) * cos(23 * pi() / 180), 40.6 - ((36 - 5.55 - 8) * sin(23 * pi() / 180)) + 1.75 / 2]) |> angledLine(angle = -23 - 90, length = 36 / 2 ) |> angledLine(angle = -23, length = 1 ) |> angledLine(angle = -23 - 90, length = -36 / 2 ) @@ -352,10 +328,7 @@ const sketch015w = startSketchOn(plane002) const extrude015w = extrude(sketch015w, length = 1) const sketch016w = startSketchOn(plane002) - |> startProfileAt([ - 1 + (36 - 5.5) * cos(23 * pi() / 180), - 40.6 - ((36 - 5.5) * sin(23 * pi() / 180)) + 1.75 / 2 - ], %) + |> startProfile(at = [1 + (36 - 5.5) * cos(23 * pi() / 180), 40.6 - ((36 - 5.5) * sin(23 * pi() / 180)) + 1.75 / 2]) |> angledLine(angle = -23 - 90, length = 36 / 2 ) |> angledLine(angle = -23, length = 1 ) |> angledLine(angle = -23 - 90, length = -36 / 2 ) @@ -364,10 +337,7 @@ const sketch016w = startSketchOn(plane002) const extrude016w = extrude(sketch016w, length = 1) const sketch017w = startSketchOn(plane002) - |> startProfileAt([ - depth - 1 - (3.7 * cos(23 * pi() / 180)), - 60.65 + 3.7 * sin(23 * pi() / 180) + 1.75 / 2 - ], %) + |> startProfile(at = [depth - 1 - (3.7 * cos(23 * pi() / 180)), 60.65 + 3.7 * sin(23 * pi() / 180) + 1.75 / 2]) |> arc(angleStart = -23, angleEnd = 180 - 23, radius = 7 / 2 + 2) |> angledLine(angle = -23 + 180, length = -1 ) |> arc(angleStart = 180 - 23, angleEnd = -23, radius = 7 / 2 + 1) @@ -376,10 +346,7 @@ const sketch017w = startSketchOn(plane002) const extrude017w = extrude(sketch017w, length = 1) const sketch018w = startSketchOn(plane002) - |> startProfileAt([ - depth - 1 - (19.3 * cos(23 * pi() / 180)), - 60.65 + 19.3 * sin(23 * pi() / 180) + 1.75 / 2 - ], %) + |> startProfile(at = [depth - 1 - (19.3 * cos(23 * pi() / 180)), 60.65 + 19.3 * sin(23 * pi() / 180) + 1.75 / 2]) |> arc(angleStart = -23, angleEnd = 180 - 23, radius = 7 / 2 + 2) |> angledLine(angle = -23 + 180, length = -1 ) |> arc(angleStart = 180 - 23, angleEnd = -23, radius = 7 / 2 + 1) @@ -388,7 +355,7 @@ const sketch018w = startSketchOn(plane002) const extrude018w = extrude(sketch018w, length = 1) const sketch019w = startSketchOn(plane002) - |> startProfileAt([1, 27.8 + 1.75 / 2], %) + |> startProfile(at = [1, 27.8 + 1.75 / 2]) |> angledLine(angle = -23, length = 7 ) |> angledLine(angle = -23 + 90, length = -1 ) |> angledLine(angle = -23, endAbsoluteX = 1) @@ -397,10 +364,7 @@ const sketch019w = startSketchOn(plane002) const extrude019w = extrude(sketch019w, length = 1) const sketch020w = startSketchOn(plane002) - |> startProfileAt([ - 1 + (36 - 5.53 - 12) * cos(23 * pi() / 180), - 27.8 + 1.75 / 2 - ((36 - 5.53 - 12) * sin(23 * pi() / 180)) - ], %) + |> startProfile(at = [1 + (36 - 5.53 - 12) * cos(23 * pi() / 180), 27.8 + 1.75 / 2 - ((36 - 5.53 - 12) * sin(23 * pi() / 180))]) |> angledLine(angle = -23, length = 7 ) |> angledLine(angle = -23 + 90, length = -1 ) |> angledLine(angle = -23 + 180, length = 7 ) @@ -409,7 +373,7 @@ const sketch020w = startSketchOn(plane002) const extrude020w = extrude(sketch020w, length = 1) const sketch021w = startSketchOn(plane002) - |> startProfileAt([1, 21.9], %) + |> startProfile(at = [1, 21.9]) |> angledLine(angle = -23, endAbsoluteX = depth - 1) |> yLine(length = -1.1) |> angledLine(angle = -23, endAbsoluteX = 1) @@ -418,7 +382,7 @@ const sketch021w = startSketchOn(plane002) const extrude021w = extrude(sketch021w, length = 1) const sketch022w = startSketchOn(plane002) - |> startProfileAt([depth - 1, 74.1], %) + |> startProfile(at = [depth - 1, 74.1]) |> angledLine(angle = 180 - 23, endAbsoluteY = railHeight * 1.75 + 1) |> xLine(length = -2.56) |> angledLine(angle = -23, endAbsoluteX = depth - 1) @@ -427,7 +391,7 @@ const sketch022w = startSketchOn(plane002) const extrude022w = extrude(sketch022w, length = 1) const sketch023w = startSketchOn(plane002) - |> startProfileAt([1, 69.53 + 1.75], %) + |> startProfile(at = [1, 69.53 + 1.75]) |> angledLine(angle = 90 - 23, endAbsoluteY = railHeight * 1.75 + 1) |> xLine(length = 1.086) |> angledLine(angle = 90 - 23, endAbsoluteX = 1) @@ -436,7 +400,7 @@ const sketch023w = startSketchOn(plane002) const extrude023w = extrude(sketch023w, length = 1) const sketch024w = startSketchOn(plane002) - |> startProfileAt([1, 16.5], %) + |> startProfile(at = [1, 16.5]) |> angledLine(angle = -23, endAbsoluteY = 1) |> xLine(length = -2.56) |> angledLine(angle = -23, endAbsoluteX = 1) @@ -445,7 +409,7 @@ const sketch024w = startSketchOn(plane002) const extrude024w = extrude(sketch024w, length = 1) const sketch025w = startSketchOn(plane002) - |> startProfileAt([1, 4], %) + |> startProfile(at = [1, 4]) |> angledLine(angle = -23, endAbsoluteY = 1) |> xLine(length = -2.56) |> angledLine(angle = -23, endAbsoluteX = 1) @@ -462,7 +426,7 @@ const plane003 = { } const sketch005 = startSketchOn(plane003) - |> startProfileAt([width - 1, 0], %) + |> startProfile(at = [width - 1, 0]) |> line(end = [-width + 2, 3]) |> line(end = [0, 1]) |> line(end = [width - 2, -3]) @@ -472,7 +436,7 @@ const sketch005 = startSketchOn(plane003) const extrude005 = extrude(sketch005, length = 1) const sketch006 = startSketchOn(plane003) - |> startProfileAt([width - 1, 0 + 2.756], %) + |> startProfile(at = [width - 1, 0 + 2.756]) |> line(end = [-width + 2, 3]) |> line(end = [0, 1]) |> line(end = [width - 2, -3]) @@ -482,7 +446,7 @@ const sketch006 = startSketchOn(plane003) const extrude006 = extrude(sketch006, length = 1) const sketch007 = startSketchOn(plane003) - |> startProfileAt([width - 1, depth], %) + |> startProfile(at = [width - 1, depth]) |> line(end = [-width + 1, -depth + serverDepth + 3.8]) |> line(end = [1, 0]) |> line(end = [0, -.75]) @@ -495,7 +459,7 @@ const sketch007 = startSketchOn(plane003) const extrude007 = extrude(sketch007, length = 1) const sketch008 = startSketchOn(plane003) - |> startProfileAt([width - 1, depth - 2.8], %) + |> startProfile(at = [width - 1, depth - 2.8]) |> line(end = [-width + 2, -depth + serverDepth + 4.4]) |> line(end = [0, -1.32]) |> line(end = [width - 2, depth - serverDepth - 4.4]) @@ -513,7 +477,7 @@ const plane004 = { } const sketch005t = startSketchOn(plane004) - |> startProfileAt([width - 1, 0], %) + |> startProfile(at = [width - 1, 0]) |> line(end = [-width + 2, 3]) |> line(end = [0, 1]) |> line(end = [width - 2, -3]) @@ -523,7 +487,7 @@ const sketch005t = startSketchOn(plane004) const extrude005t = extrude(sketch005t, length = -1) const sketch007t = startSketchOn(plane004) - |> startProfileAt([width - 1, depth], %) + |> startProfile(at = [width - 1, depth]) |> line(end = [-width + 1, -depth + serverDepth + 3.8]) |> line(end = [1, 0]) |> line(end = [0, -.75]) @@ -536,7 +500,7 @@ const sketch007t = startSketchOn(plane004) const extrude007t = extrude(sketch007t, length = -1) const sketch008t = startSketchOn(plane004) - |> startProfileAt([width - 1, 0 + 2.756], %) + |> startProfile(at = [width - 1, 0 + 2.756]) |> line(end = [-width + 2, 3]) |> line(end = [0, 1]) |> line(end = [width - 2, -3]) @@ -545,7 +509,7 @@ const sketch008t = startSketchOn(plane004) const extrude008t = extrude(sketch008t, length = -1) const sketch009t = startSketchOn(plane004) - |> startProfileAt([width - 1, depth - 2.8], %) + |> startProfile(at = [width - 1, depth - 2.8]) |> line(end = [-width + 2, -depth + serverDepth + 4.4]) |> line(end = [0, -1.32]) |> line(end = [width - 2, depth - serverDepth - 4.4]) @@ -587,7 +551,7 @@ const planeYZfl = { // Base flange const sketch001fl = startSketchOn(planeXZfl) - |> startProfileAt([bendRad + thickness, 0], %) + |> startProfile(at = [bendRad + thickness, 0]) |> angledLine(angle = 0, length = 2 - bendRad - thickness, tag = $rectangleSegmentA001fl) |> angledLine(angle = segAng(rectangleSegmentA001fl) + 90, length = railHeight * 1.75, tag = $rectangleSegmentB001fl) |> angledLine(angle = segAng(rectangleSegmentA001fl), length = -segLen(rectangleSegmentA001fl), tag = $rectangleSegmentC001fl) @@ -597,7 +561,7 @@ const extrude001fl = extrude(sketch001fl, length = thickness) // First flange const sketch002fl = startSketchOn(planeYZfl) - |> startProfileAt([-bendRad - thickness, 0], %) + |> startProfile(at = [-bendRad - thickness, 0]) |> angledLine(angle = 180, length = 0.89 - bendRad - thickness, tag = $rectangleSegmentA002fl) |> angledLine(angle = segAng(rectangleSegmentA002fl) - 90, length = railHeight * 1.75, tag = $rectangleSegmentB002fl) |> angledLine(angle = segAng(rectangleSegmentA002fl), length = -segLen(rectangleSegmentA002fl), tag = $rectangleSegmentC002fl) @@ -608,10 +572,7 @@ const extrude002fl = extrude(sketch002fl, length = thickness) // Bend const sketch003fl = startSketchOn(planeXYfl) - |> startProfileAt([ - 0 + thickness + bendRad + originStart[1], - originStart[0] - ], %) + |> startProfile(at = [0 + thickness + bendRad + originStart[1], originStart[0]]) |> arc(angleStart = 270, angleEnd = 180, radius = bendRad + thickness) |> xLine(length = thickness) |> arc(angleStart = 180, angleEnd = 270, radius = bendRad) @@ -622,10 +583,7 @@ const extrude003fl = extrude(sketch003fl, length = railHeight * 1.75) // define slots const sketch010fl = startSketchOn(extrude001fl, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0], - originStart[2] + .81 - (.438 / 2) - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0], originStart[2] + .81 - (.438 / 2)]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0], @@ -643,10 +601,7 @@ const extrude010fl = extrude(sketch010fl, length = -thickness) // define slots const sketch011fl = startSketchOn(extrude001fl, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0], - originStart[2] + railHeight * 1.75 / 2 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0], originStart[2] + railHeight * 1.75 / 2 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0], @@ -660,10 +615,7 @@ const extrude011fl = extrude(sketch011fl, length = -thickness) // define slots const sketch012fl = startSketchOn(extrude001fl, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0], - originStart[2] + railHeight * 1.75 - .81 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0], originStart[2] + railHeight * 1.75 - .81 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0], @@ -712,7 +664,7 @@ const planeYZfr = { // Base flange const sketch001fr = startSketchOn(planeXZfr) - |> startProfileAt([bendRad + thickness, 0], %) + |> startProfile(at = [bendRad + thickness, 0]) |> angledLine(angle = 0, length = 2 - bendRad - thickness, tag = $rectangleSegmentA001fr) |> angledLine(angle = segAng(rectangleSegmentA001fr) + 90, length = railHeight * 1.75, tag = $rectangleSegmentB001fr) |> angledLine(angle = segAng(rectangleSegmentA001fr), length = -segLen(rectangleSegmentA001fr), tag = $rectangleSegmentC001fr) @@ -722,7 +674,7 @@ const extrude001fr = extrude(sketch001fr, length = thickness) // First flange const sketch002fr = startSketchOn(planeYZfr) - |> startProfileAt([0.89, 0], %) + |> startProfile(at = [0.89, 0]) |> angledLine(angle = 180, length = 0.89 - bendRad - thickness, tag = $rectangleSegmentA002fr) |> angledLine(angle = segAng(rectangleSegmentA002fr) - 90, length = railHeight * 1.75, tag = $rectangleSegmentB002fr) |> angledLine(angle = segAng(rectangleSegmentA002fr), length = -segLen(rectangleSegmentA002fr), tag = $rectangleSegmentC002fr) @@ -733,10 +685,7 @@ const extrude002fr = extrude(sketch002fr, length = thickness) // Bend const sketch003fr = startSketchOn(planeXYfr) - |> startProfileAt([ - bendRad + originStart[1] + width - 2 - thickness - bendRad, - originStart[0] + bendRad + thickness - ], %) + |> startProfile(at = [bendRad + originStart[1] + width - 2 - thickness - bendRad, originStart[0] + bendRad + thickness]) |> arc(angleStart = 0, angleEnd = -90, radius = bendRad) |> yLine(length = -thickness) |> arc(angleStart = -90, angleEnd = 0, radius = bendRad + thickness) @@ -746,10 +695,7 @@ const extrude003fr = extrude(sketch003fr, length = railHeight * 1.75) // define slots const sketch010fr = startSketchOn(extrude001fr, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0], - originStart[2] + .81 - (.438 / 2) - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0], originStart[2] + .81 - (.438 / 2)]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0], @@ -767,10 +713,7 @@ const extrude010fr = extrude(sketch010fr, length = -thickness) // define slots const sketch011fr = startSketchOn(extrude001fr, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0], - originStart[2] + railHeight * 1.75 / 2 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0], originStart[2] + railHeight * 1.75 / 2 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0], @@ -784,10 +727,7 @@ const extrude011fr = extrude(sketch011fr, length = -thickness) // define slots const sketch012fr = startSketchOn(extrude001fr, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0], - originStart[2] + railHeight * 1.75 - .81 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0], originStart[2] + railHeight * 1.75 - .81 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0], @@ -836,7 +776,7 @@ const planeYZrr = { // Base flange const sketch001rr = startSketchOn(planeXZrr) - |> startProfileAt([bendRad + thickness, 0], %) + |> startProfile(at = [bendRad + thickness, 0]) |> angledLine(angle = 0, length = 2 - bendRad - thickness, tag = $rectangleSegmentA001rr) |> angledLine(angle = segAng(rectangleSegmentA001rr) + 90, length = railHeight * 1.75, tag = $rectangleSegmentB001rr) |> angledLine(angle = segAng(rectangleSegmentA001rr), length = -segLen(rectangleSegmentA001rr), tag = $rectangleSegmentC001rr) @@ -846,7 +786,7 @@ const extrude001rr = extrude(sketch001rr, length = thickness) // First flange const sketch002rr = startSketchOn(planeYZrr) - |> startProfileAt([0.89, 0], %) + |> startProfile(at = [0.89, 0]) |> angledLine(angle = 180, length = 0.89 - bendRad - thickness, tag = $rectangleSegmentA002rr) |> angledLine(angle = segAng(rectangleSegmentA002rr) - 90, length = railHeight * 1.75, tag = $rectangleSegmentB002rr) |> angledLine(angle = segAng(rectangleSegmentA002rr), length = -segLen(rectangleSegmentA002rr), tag = $rectangleSegmentC002rr) @@ -857,10 +797,7 @@ const extrude002rr = extrude(sketch002rr, length = thickness) // Bend const sketch003rr = startSketchOn(planeXYrr) - |> startProfileAt([ - bendRad + originStart[1] + width - 2 - bendRad, - originStart[0] - bendRad - ], %) + |> startProfile(at = [bendRad + originStart[1] + width - 2 - bendRad, originStart[0] - bendRad]) |> arc(angleStart = 0, angleEnd = 90, radius = bendRad + thickness) |> yLine(length = -thickness) |> arc(angleStart = 90, angleEnd = 0, radius = bendRad) @@ -870,10 +807,7 @@ const extrude003rr = extrude(sketch003rr, length = railHeight * 1.75) // define slots const sketch010rr = startSketchOn(extrude001rr, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0] + 1.5 - serverDepth, - originStart[2] + .81 - (.438 / 2) - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0] + 1.5 - serverDepth, originStart[2] + .81 - (.438 / 2)]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0] + 1.5 - serverDepth, @@ -891,10 +825,7 @@ const extrude010rr = extrude(sketch010rr, length = -thickness) // define slots const sketch011rr = startSketchOn(extrude001rr, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0] + 1.5 - serverDepth, - originStart[2] + railHeight * 1.75 / 2 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0] + 1.5 - serverDepth, originStart[2] + railHeight * 1.75 / 2 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0] + 1.5 - serverDepth, @@ -908,10 +839,7 @@ const extrude011rr = extrude(sketch011rr, length = -thickness) // define slots const sketch012rr = startSketchOn(extrude001rr, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0] + 1.5 - serverDepth, - originStart[2] + railHeight * 1.75 - .81 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0] + 1.5 - serverDepth, originStart[2] + railHeight * 1.75 - .81 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0] + 1.5 - serverDepth, @@ -959,7 +887,7 @@ const planeYZrl = { } // Base flange const sketch001rl = startSketchOn(planeXZrl) - |> startProfileAt([bendRad + thickness, 0], %) + |> startProfile(at = [bendRad + thickness, 0]) |> angledLine(angle = 0, length = 2 - bendRad - thickness, tag = $rectangleSegmentA001rl) |> angledLine(angle = segAng(rectangleSegmentA001rl) + 90, length = railHeight * 1.75, tag = $rectangleSegmentB001rl) |> angledLine(angle = segAng(rectangleSegmentA001rl), length = -segLen(rectangleSegmentA001rl), tag = $rectangleSegmentC001rl) @@ -969,7 +897,7 @@ const extrude001rl = extrude(sketch001rl, length = thickness) // First flange const sketch002rl = startSketchOn(planeYZrl) - |> startProfileAt([-bendRad - thickness, 0], %) + |> startProfile(at = [-bendRad - thickness, 0]) |> angledLine(angle = 180, length = 0.89 - bendRad - thickness, tag = $rectangleSegmentA002rl) |> angledLine(angle = segAng(rectangleSegmentA002rl) - 90, length = railHeight * 1.75, tag = $rectangleSegmentB002rl) |> angledLine(angle = segAng(rectangleSegmentA002rl), length = -segLen(rectangleSegmentA002rl), tag = $rectangleSegmentC002rl) @@ -980,10 +908,7 @@ const extrude002rl = extrude(sketch002rl, length = thickness) // Bend const sketch003rl = startSketchOn(planeXYrl) - |> startProfileAt([ - bendRad + originStart[1] + thickness, - originStart[0] - ], %) + |> startProfile(at = [bendRad + originStart[1] + thickness, originStart[0]]) |> arc(angleStart = 90, angleEnd = 180, radius = bendRad) |> xLine(length = -thickness) |> arc(angleStart = 180, angleEnd = 90, radius = bendRad + thickness) @@ -993,10 +918,7 @@ const extrude003rl = extrude(sketch003rl, length = railHeight * 1.75) // define slots const sketch010rl = startSketchOn(extrude001rl, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0] - serverDepth + 1.5, - originStart[2] + .81 - (.438 / 2) - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0] - serverDepth + 1.5, originStart[2] + .81 - (.438 / 2)]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0] - serverDepth + 1.5, @@ -1014,10 +936,7 @@ const extrude010rl = extrude(sketch010rl, length = -thickness) // define slots const sketch011rl = startSketchOn(extrude001rl, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0] - serverDepth + 1.5, - originStart[2] + railHeight * 1.75 / 2 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0] - serverDepth + 1.5, originStart[2] + railHeight * 1.75 / 2 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0] - serverDepth + 1.5, @@ -1031,10 +950,7 @@ const extrude011rl = extrude(sketch011rl, length = -thickness) // define slots const sketch012rl = startSketchOn(extrude001rl, face = 'START') - |> startProfileAt([ - -1.12 + (.75 - .438) / 2 - originStart[0] - serverDepth + 1.5, - originStart[2] + railHeight * 1.75 - .81 + .438 / 2 - ], %) + |> startProfile(at = [-1.12 + (.75 - .438) / 2 - originStart[0] - serverDepth + 1.5, originStart[2] + railHeight * 1.75 - .81 + .438 / 2]) |> xLine(length = 0.75 - .438) |> tangentialArc(endAbsolute = [ -0.66 - originStart[0] - serverDepth + 1.5, @@ -1073,7 +989,7 @@ fn streamServer = (serverPos) => { } const sketch001s = startSketchOn(planeXYs) - |> startProfileAt([1 + 1.2, 1], %) + |> startProfile(at = [1 + 1.2, 1]) |> angledLine(angle = 0, length = 17.2, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 29, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) @@ -1082,7 +998,7 @@ fn streamServer = (serverPos) => { const extrude001s = extrude(sketch001s, length = 7) const sketch002s = startSketchOn(planeXZs) - |> startProfileAt([-1, 4.114 + 1 + serverPos * 1.75], %) + |> startProfile(at = [-1, 4.114 + 1 + serverPos * 1.75]) |> yLine(length = 6.98) |> xLine(length = 0.2) |> yLine(length = -0.36) @@ -1106,7 +1022,7 @@ fn streamServer = (serverPos) => { const extrude002s = extrude(sketch002s, length = 1.8 / 2) const sketch003s = startSketchOn(planeXZs2) - |> startProfileAt([-1, 4.114 + 1 + serverPos * 1.75], %) + |> startProfile(at = [-1, 4.114 + 1 + serverPos * 1.75]) |> yLine(length = 6.98) |> xLine(length = 0.2) |> yLine(length = -0.36) diff --git a/rust/kcl-lib/e2e/executor/inputs/sketch-on-chamfer-two-times-different-order.kcl b/rust/kcl-lib/e2e/executor/inputs/sketch-on-chamfer-two-times-different-order.kcl index bf353a9fc..59d3e62d9 100644 --- a/rust/kcl-lib/e2e/executor/inputs/sketch-on-chamfer-two-times-different-order.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/sketch-on-chamfer-two-times-different-order.kcl @@ -1,5 +1,5 @@ const sketch001 = startSketchOn(XZ) - |> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag] + |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -15,14 +15,14 @@ const extrude001 = extrude(sketch001, length = 100) |> chamfer(length = 50, tags = [seg02], tag = $seg04) const sketch003 = startSketchOn(extrude001, face = seg04) - |> startProfileAt([-69.1, 277.34], %) + |> startProfile(at = [-69.1, 277.34]) |> angledLine(angle = 0, length = 41.48, tag = $rectangleSegmentA003) |> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = 104.8, tag = $rectangleSegmentB002) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003), tag = $rectangleSegmentC002) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() const sketch002 = startSketchOn(extrude001, face = seg03) - |> startProfileAt([159.25, 278.35], %) + |> startProfile(at = [159.25, 278.35]) |> angledLine(angle = 0, length = 40.82, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 132.27, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002), tag = $rectangleSegmentC001) diff --git a/rust/kcl-lib/e2e/executor/inputs/sketch-on-chamfer-two-times.kcl b/rust/kcl-lib/e2e/executor/inputs/sketch-on-chamfer-two-times.kcl index d9f031e1e..5e3dd3349 100644 --- a/rust/kcl-lib/e2e/executor/inputs/sketch-on-chamfer-two-times.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/sketch-on-chamfer-two-times.kcl @@ -1,5 +1,5 @@ const sketch001 = startSketchOn(XZ) - |> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag] + |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -15,14 +15,14 @@ const extrude001 = extrude(sketch001, length = 100) ) const sketch003 = startSketchOn(extrude001, face = seg04) - |> startProfileAt([-69.1, 277.34], %) + |> startProfile(at = [-69.1, 277.34]) |> angledLine(angle = 0, length = 41.48, tag = $rectangleSegmentA003) |> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = 104.8, tag = $rectangleSegmentB002) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003), tag = $rectangleSegmentC002) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() const sketch002 = startSketchOn(extrude001, face = seg03) - |> startProfileAt([159.25, 278.35], %) + |> startProfile(at = [159.25, 278.35]) |> angledLine(angle = 0, length = 40.82, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 132.27, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002), tag = $rectangleSegmentC001) diff --git a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face.kcl b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face.kcl index 7035d701d..ae8324cda 100644 --- a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn(XY) - |> startProfileAt([11.19, 28.35], %) + |> startProfile(at = [11.19, 28.35]) |> line(end = [28.67, -13.25], tag = $here) |> line(end = [-4.12, -22.81]) |> line(end = [-33.24, 14.55]) @@ -7,7 +7,7 @@ part001 = startSketchOn(XY) |> extrude(length = 5) part002 = startSketchOn(part001, face = here) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_after_fillets_referencing_face.kcl b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_after_fillets_referencing_face.kcl index cf6ced88d..894fc9c2e 100644 --- a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_after_fillets_referencing_face.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_after_fillets_referencing_face.kcl @@ -24,7 +24,7 @@ filletR = 0.25 // Sketch the bracket and extrude with fillets bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, wallMountL], tag = $outerEdge) |> line(end = [-shelfMountL, 0], tag = $seg01) |> line(end = [0, -thickness]) @@ -46,7 +46,7 @@ bracket = startSketchOn(XY) ) sketch001 = startSketchOn(bracket, face = seg01) - |> startProfileAt([4.28, 3.83], %) + |> startProfile(at = [4.28, 3.83]) |> line(end = [2.17, -0.03]) |> line(end = [-0.07, -1.8]) |> line(end = [-2.07, 0.05]) diff --git a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_circle_tagged.kcl b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_circle_tagged.kcl index bb84507cf..c88410fcb 100644 --- a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_circle_tagged.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_circle_tagged.kcl @@ -1,6 +1,6 @@ fn cube = (pos, scale) => { const sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) diff --git a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end.kcl b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end.kcl index f5735b996..7cc419280 100644 --- a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end.kcl @@ -1,6 +1,6 @@ fn cube = (pos, scale) => { const sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -12,7 +12,7 @@ const part001 = cube([0,0], 20) |> extrude(length = 20) const part002 = startSketchOn(part001, face = "END") - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end_negative_extrude.kcl b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end_negative_extrude.kcl index 9c2a210da..18c57338a 100644 --- a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end_negative_extrude.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end_negative_extrude.kcl @@ -1,6 +1,6 @@ fn cube = (pos, scale) => { const sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -12,7 +12,7 @@ const part001 = cube([0,0], 20) |> extrude(length = 20) const part002 = startSketchOn(part001, face = "END") - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_start.kcl b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_start.kcl index 915ab44fa..9b72d8c09 100644 --- a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_start.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_start.kcl @@ -1,6 +1,6 @@ fn cube = (pos, scale) => { const sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -12,7 +12,7 @@ const part001 = cube([0,0], 20) |> extrude(length = 20) const part002 = startSketchOn(part001, face = "start") - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/rust/kcl-lib/e2e/executor/inputs/slow_lego.kcl.tmpl b/rust/kcl-lib/e2e/executor/inputs/slow_lego.kcl.tmpl index b9ffb2e31..d3f0578ce 100644 --- a/rust/kcl-lib/e2e/executor/inputs/slow_lego.kcl.tmpl +++ b/rust/kcl-lib/e2e/executor/inputs/slow_lego.kcl.tmpl @@ -27,7 +27,7 @@ const tubeFace = { } // Make the base const s = startSketchOn('XY') - |> startProfileAt([-totalWidth / 2, -totalLength / 2], %) + |> startProfile(at = [-totalWidth / 2, -totalLength / 2]) |> line([totalWidth, 0], %) |> line([0, totalLength], %) |> line([-totalWidth, 0], %) @@ -36,10 +36,10 @@ const s = startSketchOn('XY') // Sketch and extrude a rectangular shape to create the shell underneath the lego. This is a hack until we have a shell function. const shellExtrude = startSketchOn(s, "start") - |> startProfileAt([ + |> startProfile(at = [ -(totalWidth / 2 - t), -(totalLength / 2 - t) - ], %) + ]) |> line([totalWidth - (2 * t), 0], %) |> line([0, totalLength - (2 * t)], %) |> line([-(totalWidth - (2 * t)), 0], %) diff --git a/rust/kcl-lib/e2e/executor/inputs/tan_arc_x_line.kcl b/rust/kcl-lib/e2e/executor/inputs/tan_arc_x_line.kcl index 5da53aecd..e9af9582c 100644 --- a/rust/kcl-lib/e2e/executor/inputs/tan_arc_x_line.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/tan_arc_x_line.kcl @@ -5,7 +5,7 @@ let r = 1 let angleStart = 110 startSketchOn(XY) - |> startProfileAt([startX, startY], %) + |> startProfile(at = [startX, startY]) |> angledLine( angle = angleStart, length = .000001, diff --git a/rust/kcl-lib/e2e/executor/inputs/tangential_arc.kcl b/rust/kcl-lib/e2e/executor/inputs/tangential_arc.kcl index 625c59e92..d65fc1f9a 100644 --- a/rust/kcl-lib/e2e/executor/inputs/tangential_arc.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/tangential_arc.kcl @@ -1,5 +1,5 @@ const boxSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> tangentialArc(radius = 5, angle = 90) |> line(end = [5, -15]) diff --git a/rust/kcl-lib/e2e/executor/inputs/test-circle-extrude.kcl b/rust/kcl-lib/e2e/executor/inputs/test-circle-extrude.kcl index 9a22c2cd8..9f5c6c6c0 100644 --- a/rust/kcl-lib/e2e/executor/inputs/test-circle-extrude.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/test-circle-extrude.kcl @@ -1,5 +1,5 @@ sketch002 = startSketchOn(XZ) - |> startProfileAt([-108.83, -57.48], %) + |> startProfile(at = [-108.83, -57.48]) |> angledLine(angle = 0, length = 105.13, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 77.9) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) diff --git a/rust/kcl-lib/e2e/executor/inputs/xz_plane.kcl b/rust/kcl-lib/e2e/executor/inputs/xz_plane.kcl index cc59d93e6..d4328996b 100644 --- a/rust/kcl-lib/e2e/executor/inputs/xz_plane.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/xz_plane.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [100, 100]) |> line(endAbsolute = [100, 0]) |> close() diff --git a/rust/kcl-lib/e2e/executor/main.rs b/rust/kcl-lib/e2e/executor/main.rs index dab58d075..bc78e1bc6 100644 --- a/rust/kcl-lib/e2e/executor/main.rs +++ b/rust/kcl-lib/e2e/executor/main.rs @@ -40,7 +40,7 @@ async fn kcl_test_fillet_duplicate_tags() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_execute_engine_error_return() { let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([5.5229, 5.25217], %) + |> startProfile(at = [5.5229, 5.25217]) |> line(end = [10.50433, -1.19122]) |> line(end = [8.01362, -5.48731]) |> line(end = [-1.02877, -6.76825]) @@ -157,7 +157,7 @@ async fn kcl_test_negative_args() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_basic_tangential_arc_with_point() { let code = r#"boxSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> tangentialArc(end = [-5, 5]) |> line(end = [5, -15]) @@ -171,7 +171,7 @@ async fn kcl_test_basic_tangential_arc_with_point() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_basic_tangential_arc_to() { let code = r#"boxSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> tangentialArc(endAbsolute = [-5, 15]) |> line(end = [5, -15]) @@ -190,7 +190,7 @@ length = 12 fn box = (sk1, sk2, scale, plane) => { boxsketch = startSketchOn(plane) - |> startProfileAt([sk1, sk2], %) + |> startProfile(at = [sk1, sk2]) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -222,7 +222,7 @@ shelfMountL = 9 wallMountL = 8 bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, wallMountL]) |> tangentialArc(radius = filletR, angle = 90 ) |> line(end = [-shelfMountL, 0]) @@ -237,7 +237,7 @@ bracket = startSketchOn(XY) |> extrude(length = width) part001 = startSketchOn(XY) - |> startProfileAt([-15.53, -10.28], %) + |> startProfile(at = [-15.53, -10.28]) |> line(end = [10.49, -2.08]) |> line(end = [10.42, 8.47]) |> line(end = [-19.16, 5.1]) @@ -245,19 +245,19 @@ part001 = startSketchOn(XY) |> extrude(length = 4) part002 = startSketchOn('-XZ') - |> startProfileAt([-9.35, 19.18], %) + |> startProfile(at = [-9.35, 19.18]) |> line(end = [32.14, -2.47]) |> line(end = [8.39, -3.73]) |> close() part003 = startSketchOn('-XZ') - |> startProfileAt([13.82, 16.51], %) + |> startProfile(at = [13.82, 16.51]) |> line(end = [-6.24, -30.82]) |> line(end = [8.39, -3.73]) |> close() part004 = startSketchOn(YZ) - |> startProfileAt([19.04, 20.22], %) + |> startProfile(at = [19.04, 20.22]) |> line(end = [9.44, -30.16]) |> line(end = [8.39, -3.73]) |> close() @@ -270,7 +270,7 @@ part004 = startSketchOn(YZ) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_holes() { let code = r#"square = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) @@ -289,7 +289,7 @@ async fn optional_params() { let code = r#" fn other_circle = (pos, radius, tag?) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> arc(angleEnd = 360, angleStart = 0, radius = radius) |> close() |> extrude(length = 2) @@ -311,7 +311,7 @@ async fn kcl_test_rounded_with_holes() { fn roundedRectangle = (pos, w, l, cornerRadius) => { rr = startSketchOn(XY) - |> startProfileAt([pos[0] - w/2, 0], %) + |> startProfile(at = [pos[0] - w/2, 0]) |> line(endAbsolute = [pos[0] - w/2, pos[1] - l/2 + cornerRadius]) |> tarc([pos[0] - w/2 + cornerRadius, pos[1] - l/2], %, $arc0) |> line(endAbsolute = [pos[0] + w/2 - cornerRadius, pos[1] - l/2]) @@ -376,7 +376,7 @@ async fn kcl_test_patterns_linear_basic() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_patterns_linear_basic_3d() { let code = r#"part = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0,1]) |> line(end = [1, 0]) |> line(end = [0, -1]) @@ -420,7 +420,7 @@ async fn kcl_test_patterns_linear_basic_holes() { |> patternLinear2d(axis = [1,1], instances = 13, distance = 3) rectangle = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 50]) |> line(end = [50, 0]) |> line(end = [0, -50]) @@ -449,7 +449,7 @@ async fn kcl_test_patterns_circular_basic_2d() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_patterns_circular_basic_3d() { let code = r#"part = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0,1]) |> line(end = [1, 0]) |> line(end = [0, -1]) @@ -465,7 +465,7 @@ async fn kcl_test_patterns_circular_basic_3d() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_patterns_circular_3d_tilted_axis() { let code = r#"part = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0,1]) |> line(end = [1, 0]) |> line(end = [0, -1]) @@ -573,7 +573,7 @@ model = cube"#; async fn kcl_test_cube_mm() { let code = r#"fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -595,7 +595,7 @@ async fn kcl_test_cube_cm() { let code = r#"@settings(defaultLengthUnit = cm) fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -617,7 +617,7 @@ async fn kcl_test_cube_m() { let code = r#"@settings(defaultLengthUnit = m) fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -639,7 +639,7 @@ async fn kcl_test_cube_in() { let code = r#"@settings(defaultLengthUnit = in) fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -661,7 +661,7 @@ async fn kcl_test_cube_ft() { let code = r#"@settings(defaultLengthUnit = ft) fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -683,7 +683,7 @@ async fn kcl_test_cube_yd() { let code = r#"@settings(defaultLengthUnit = yd) fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -704,7 +704,7 @@ myCube = cube([0,0], 10) async fn kcl_test_error_sketch_on_arc_face() { let code = r#"fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> tangentialArc(end = [0, scale], tag = $here) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -716,7 +716,7 @@ part001 = cube([0, 0], 20) |> extrude(length = 20) part002 = startSketchOn(part001, face = part001.sketch.tags.here) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [5, 0]) |> line(end = [5, 5]) |> line(end = [0, 5]) @@ -740,7 +740,7 @@ part002 = startSketchOn(part001, face = part001.sketch.tags.here) async fn kcl_test_sketch_on_face_of_face() { let code = r#"fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -752,7 +752,7 @@ part001 = cube([0,0], 20) |> extrude(length = 20) part002 = startSketchOn(part001, face = END) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) @@ -760,7 +760,7 @@ part002 = startSketchOn(part001, face = END) |> extrude(length = 5) part003 = startSketchOn(part002, face = END) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 5]) |> line(end = [5, 0]) |> line(end = [0, -5]) @@ -775,7 +775,7 @@ part003 = startSketchOn(part002, face = END) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_stdlib_kcl_error_right_code_path() { let code = r#"square = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) @@ -800,7 +800,7 @@ async fn kcl_test_stdlib_kcl_error_right_code_path() { async fn kcl_test_sketch_on_face_circle() { let code = r#"fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -828,7 +828,7 @@ async fn kcl_test_stdlib_kcl_error_circle() { // Create a function that defines the body width and length of the mounting plate. Tag the corners so they can be passed through the fillet function. fn rectShape = (pos, w, l) => { rr = startSketchOn(XY) - |> startProfileAt([pos[0] - (w / 2), pos[1] - (l / 2)], %) + |> startProfile(at = [pos[0] - (w / 2), pos[1] - (l / 2)]) |> line(endAbsolute = [pos[0] + w / 2, pos[1] - (l / 2)], tag = $edge1) |> line(endAbsolute = [pos[0] + w / 2, pos[1] + l / 2], tag = $edge2) |> line(endAbsolute = [pos[0] - (w / 2), pos[1] + l / 2], tag = $edge3) @@ -872,7 +872,7 @@ part = rectShape([0, 0], 20, 20) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_simple_revolve() { let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -892,7 +892,7 @@ async fn kcl_test_simple_revolve() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_simple_revolve_uppercase() { let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -912,7 +912,7 @@ async fn kcl_test_simple_revolve_uppercase() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_simple_revolve_negative() { let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -932,7 +932,7 @@ async fn kcl_test_simple_revolve_negative() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_revolve_bad_angle_low() { let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -958,7 +958,7 @@ async fn kcl_test_revolve_bad_angle_low() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_revolve_bad_angle_high() { let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -984,7 +984,7 @@ async fn kcl_test_revolve_bad_angle_high() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_simple_revolve_custom_angle() { let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -1004,7 +1004,7 @@ async fn kcl_test_simple_revolve_custom_angle() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_simple_revolve_custom_axis() { let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -1024,7 +1024,7 @@ async fn kcl_test_simple_revolve_custom_axis() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_revolve_on_edge() { let code = r#"box = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $revolveAxis) @@ -1032,7 +1032,7 @@ async fn kcl_test_revolve_on_edge() { |> extrude(length = 10) sketch001 = startSketchOn(box, face = END) - |> startProfileAt([5, 10], %) + |> startProfile(at = [5, 10]) |> line(end = [0, -10]) |> line(end = [2, 0]) |> line(end = [0, 10]) @@ -1048,7 +1048,7 @@ sketch001 = startSketchOn(box, face = END) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_revolve_on_edge_get_edge() { let code = r#"box = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $revolveAxis) @@ -1056,7 +1056,7 @@ async fn kcl_test_revolve_on_edge_get_edge() { |> extrude(length = 10) sketch001 = startSketchOn(box, face = revolveAxis) - |> startProfileAt([5, 10], %) + |> startProfile(at = [5, 10]) |> line(end = [0, -10]) |> line(end = [2, 0]) |> line(end = [0, 10]) @@ -1078,7 +1078,7 @@ sketch001 = startSketchOn(box, face = revolveAxis) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_revolve_on_face_circle_edge() { let code = r#"box = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 20]) |> line(end = [20, 0]) |> line(end = [0, -20], tag = $revolveAxis) @@ -1100,7 +1100,7 @@ sketch001 = startSketchOn(box, face = "END") #[tokio::test(flavor = "multi_thread")] async fn kcl_test_revolve_on_face_circle() { let code = r#"box = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 20]) |> line(end = [20, 0], tag = $revolveAxis) |> line(end = [0, -20]) @@ -1122,7 +1122,7 @@ sketch001 = startSketchOn(box, face = "END") #[tokio::test(flavor = "multi_thread")] async fn kcl_test_revolve_on_face() { let code = r#"box = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) @@ -1130,7 +1130,7 @@ async fn kcl_test_revolve_on_face() { |> extrude(length = 10) sketch001 = startSketchOn(box, face = END) - |> startProfileAt([5, 10], %) + |> startProfile(at = [5, 10]) |> line(end = [0, -10]) |> line(end = [2, 0]) |> line(end = [0, 10]) @@ -1162,7 +1162,7 @@ async fn kcl_test_basic_revolve_circle() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_simple_revolve_sketch_on_edge() { let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) @@ -1174,7 +1174,7 @@ async fn kcl_test_simple_revolve_sketch_on_edge() { |> revolve(axis = Y, angle = 180) part002 = startSketchOn(part001, face = END) - |> startProfileAt([4.5, -5], %) + |> startProfile(at = [4.5, -5]) |> line(end = [0, 5]) |> line(end = [5, 0]) |> line(end = [0, -5]) @@ -1190,7 +1190,7 @@ part002 = startSketchOn(part001, face = END) async fn kcl_test_plumbus_fillets() { let code = r#"fn make_circle = (ext, face, pos, radius) => { sg = startSketchOn(ext, face = face) - |> startProfileAt([pos[0] + radius, pos[1]], %) + |> startProfile(at = [pos[0] + radius, pos[1]]) |> arc( angleEnd = 360, angleStart = 0, @@ -1204,7 +1204,7 @@ async fn kcl_test_plumbus_fillets() { fn pentagon = (len) => { sg = startSketchOn(XY) - |> startProfileAt([-len / 2, -len / 2], %) + |> startProfile(at = [-len / 2, -len / 2]) |> angledLine(angle = 0, length = len, tag = $a) |> angledLine( angle = segAng(a) + 180 - 108, @@ -1312,7 +1312,7 @@ filletR = 0.25 // Sketch the bracket and extrude with fillets bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, wallMountL], tag = $outerEdge) |> line(end = [-shelfMountL, 0]) |> line(end = [0, -thickness]) @@ -1337,7 +1337,7 @@ bracket = startSketchOn(XY) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_error_empty_start_sketch_on_string() { let code = r#"part001 = startSketchOn('-XZ') - |> startProfileAt([75.75, 184.25], %) + |> startProfile(at = [75.75, 184.25]) |> line(end = [190.03, -118.13]) |> line(end = [-33.38, -202.86]) |> line(end = [-315.86, -64.2]) @@ -1368,7 +1368,7 @@ dia = 4 fn squareHole = (l, w) => { squareHoleSketch = startSketchOn(XY) - |> startProfileAt([-width / 2, -length / 2], %) + |> startProfile(at = [-width / 2, -length / 2]) |> line(endAbsolute = [width / 2, -length / 2]) |> line(endAbsolute = [width / 2, length / 2]) |> line(endAbsolute = [-width / 2, length / 2]) @@ -1395,7 +1395,7 @@ async fn kcl_test_array_of_sketches() { let code = r#"plane001 = startSketchOn(XZ) profile001 = plane001 - |> startProfileAt([40.82, 240.82], %) + |> startProfile(at = [40.82, 240.82]) |> line(end = [235.72, -8.16]) |> line(end = [13.27, -253.07]) |> line(end = [-247.97, -19.39]) @@ -1403,7 +1403,7 @@ profile001 = plane001 |> close() profile002 = plane001 - |> startProfileAt([47.17, -71.91], %) + |> startProfile(at = [47.17, -71.91]) |> line(end = [247.96, -4.03]) |> line(end = [-17.26, -116.79]) |> line(end = [-235.87, 12.66]) @@ -1424,7 +1424,7 @@ async fn kcl_test_circular_pattern3d_array_of_extrudes() { let code = r#"plane001 = startSketchOn(XZ) sketch001 = plane001 - |> startProfileAt([40.82, 240.82], %) + |> startProfile(at = [40.82, 240.82]) |> line(end = [235.72, -8.16]) |> line(end = [13.27, -253.07]) |> line(end = [-247.97, -19.39]) @@ -1433,7 +1433,7 @@ sketch001 = plane001 |> extrude(length = 10) sketch002 = plane001 - |> startProfileAt([47.17, -71.91], %) + |> startProfile(at = [47.17, -71.91]) |> line(end = [247.96, -4.03]) |> line(end = [-17.26, -116.79]) |> line(end = [-235.87, 12.66]) @@ -1475,7 +1475,7 @@ cornerFilletRad = 0.5 holeDia = 0.5 sketch001 = startSketchOn(XZ) - |> startProfileAt([-foot1Length, 0], %) + |> startProfile(at = [-foot1Length, 0]) |> line(end = [0, thickness], tag = $cornerFillet1) |> line(end = [foot1Length, 0]) |> line(end = [0, height], tag = $fillet1) @@ -1523,7 +1523,7 @@ cornerChamferRad = 0.5 holeDia = 0.5 sketch001 = startSketchOn(XZ) - |> startProfileAt([-foot1Length, 0], %) + |> startProfile(at = [-foot1Length, 0]) |> line(end = [0, thickness], tag = $cornerChamfer1) |> line(end = [foot1Length, 0]) |> line(end = [0, height], tag = $chamfer1) @@ -1555,7 +1555,7 @@ baseExtrusion = extrude(sketch001, length = width) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_shell_with_tag() { let code = r#"sketch001 = startSketchOn(XZ) - |> startProfileAt([61.74, 206.13], %) + |> startProfile(at = [61.74, 206.13]) |> xLine(length = 305.11, tag = $seg01) |> yLine(length = -291.85) |> xLine(length = -segLen(seg01)) @@ -1576,7 +1576,7 @@ async fn kcl_test_shell_with_tag() { async fn kcl_test_linear_pattern3d_filleted_sketch() { let code = r#"fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -1607,7 +1607,7 @@ pattn1 = patternLinear3d( async fn kcl_test_circular_pattern3d_filleted_sketch() { let code = r#"fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -1634,7 +1634,7 @@ pattn2 = patternCircular3d(part001, axis = [0,0, 1], center = [-20, -20, -20], i async fn kcl_test_circular_pattern3d_chamfered_sketch() { let code = r#"fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -1660,7 +1660,7 @@ pattn2 = patternCircular3d(part001, axis = [0,0, 1], center = [-20, -20, -20], i async fn kcl_test_tag_chamfer_with_more_than_one_edge_should_fail() { let code = r#"fn cube = (pos, scale) => { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -1694,7 +1694,7 @@ part001 = cube([0,0], 20) async fn kcl_test_duplicate_tags_should_error() { let code = r#"fn triangle = (len) => { return startSketchOn(XY) - |> startProfileAt([-len / 2, -len / 2], %) + |> startProfile(at = [-len / 2, -len / 2]) |> angledLine(angle = 0, length = len , tag = $a) |> angledLine( angle = segAng(a) + 120, @@ -1769,7 +1769,7 @@ async fn kcl_test_extrude_custom_plane() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_arc_error_same_start_end() { let code = r#"startSketchOn(XY) - |> startProfileAt([10, 0], %) + |> startProfile(at = [10, 0]) |> arc( angleStart = 180, angleEnd = 180, @@ -1793,7 +1793,7 @@ async fn kcl_test_arc_error_same_start_end() { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_angled_line_to_x_90() { let code = r#"exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 90, endAbsoluteX = 10) |> line(end = [0, 10]) |> line(end = [-10, 0]) @@ -1813,7 +1813,7 @@ example = extrude(exampleSketch, length = 10) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_angled_line_to_x_270() { let code = r#"exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 270, endAbsoluteX = 10) |> line(end = [0, 10]) |> line(end = [-10, 0]) @@ -1833,7 +1833,7 @@ example = extrude(exampleSketch, length = 10) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_angled_line_to_y_0() { let code = r#"exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 0, endAbsoluteY = 20) |> line(end = [-20, 0]) |> angledLine(angle = 70, endAbsoluteY = 10) @@ -1853,7 +1853,7 @@ example = extrude(exampleSketch, length = 10) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_angled_line_to_y_180() { let code = r#"exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 180, endAbsoluteY = 20) |> line(end = [-20, 0]) |> angledLine(angle = 70, endAbsoluteY = 10) @@ -1873,7 +1873,7 @@ example = extrude(exampleSketch, length = 10) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_angled_line_of_x_length_90() { let code = r#"sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 90, lengthX = 90, tag = $edge1) |> angledLine(angle = -15, lengthX = -15, tag = $edge2) |> line(end = [0, -5]) @@ -1893,7 +1893,7 @@ extrusion = extrude(sketch001, length = 10) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_angled_line_of_x_length_270() { let code = r#"sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 90, lengthX = 90, tag = $edge1) |> angledLine(angle = -15, lengthX = -15, tag = $edge2) |> line(end = [0, -5]) @@ -1913,7 +1913,7 @@ extrusion = extrude(sketch001, length = 10) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_angled_line_of_y_length_0() { let code = r#"exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> angledLine(angle = 0, lengthY = 10) |> line(end = [0, 10]) @@ -1935,7 +1935,7 @@ example = extrude(exampleSketch, length = 10) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_angled_line_of_y_length_180() { let code = r#"exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> angledLine(angle = 180, lengthY = 10) |> line(end = [0, 10]) @@ -1957,7 +1957,7 @@ example = extrude(exampleSketch, length = 10) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_angled_line_of_y_length_negative_180() { let code = r#"exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> angledLine(angle = -180, lengthY = 10) |> line(end = [0, 10]) @@ -2017,7 +2017,7 @@ someFunction('INVALID') #[tokio::test(flavor = "multi_thread")] async fn kcl_test_error_no_auth_websocket() { let code = r#"const sketch001 = startSketchOn(XZ) - |> startProfileAt([61.74, 206.13], %) + |> startProfile(at = [61.74, 206.13]) |> xLine(length = 305.11, tag = $seg01) |> yLine(length = -291.85) |> xLine(length = -segLen(seg01)) @@ -2052,7 +2052,7 @@ length = 1 + 1 / 2 // create a sketch on the XY plane sketch000 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, innerDiameter / 2]) "#; diff --git a/rust/kcl-lib/src/execution/cache.rs b/rust/kcl-lib/src/execution/cache.rs index 5311b3a4d..25a6f2cab 100644 --- a/rust/kcl-lib/src/execution/cache.rs +++ b/rust/kcl-lib/src/execution/cache.rs @@ -249,7 +249,7 @@ mod tests { async fn test_get_changed_program_same_code() { let new = r#"// Remove the end face for the extrusion. firstSketch = startSketchOn('XY') - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -280,7 +280,7 @@ shell(firstSketch, faces = [END], thickness = 0.25)"#; async fn test_get_changed_program_same_code_changed_whitespace() { let old = r#" // Remove the end face for the extrusion. firstSketch = startSketchOn('XY') - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -292,7 +292,7 @@ shell(firstSketch, faces = [END], thickness = 0.25) "#; let new = r#"// Remove the end face for the extrusion. firstSketch = startSketchOn('XY') - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -325,7 +325,7 @@ shell(firstSketch, faces = [END], thickness = 0.25)"#; async fn test_get_changed_program_same_code_changed_code_comment_start_of_program() { let old = r#" // Removed the end face for the extrusion. firstSketch = startSketchOn('XY') - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -337,7 +337,7 @@ shell(firstSketch, faces = [END], thickness = 0.25) "#; let new = r#"// Remove the end face for the extrusion. firstSketch = startSketchOn('XY') - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -372,7 +372,7 @@ shell(firstSketch, faces = [END], thickness = 0.25)"#; @bar // Removed the end face for the extrusion. firstSketch = startSketchOn('XY') - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) // my thing @@ -386,7 +386,7 @@ shell(firstSketch, faces = [END], thickness = 0.25) "#; @baz // Remove the end face for the extrusion. firstSketch = startSketchOn('XY') - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -420,7 +420,7 @@ shell(firstSketch, faces = [END], thickness = 0.25)"#; async fn test_get_changed_program_same_code_but_different_grid_setting() { let new = r#"// Remove the end face for the extrusion. firstSketch = startSketchOn('XY') - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -457,7 +457,7 @@ shell(firstSketch, faces = [END], thickness = 0.25)"#; async fn test_get_changed_program_same_code_but_different_edge_visiblity_setting() { let new = r#"// Remove the end face for the extrusion. firstSketch = startSketchOn('XY') - |> startProfileAt([-12, 12], %) + |> startProfile(at = [-12, 12]) |> line(end = [24, 0]) |> line(end = [0, -24]) |> line(end = [-24, 0]) @@ -608,7 +608,7 @@ startSketchOn('XY') importedCube sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([-134.53, -56.17], sketch001) +profile001 = startProfile(sketch001, at = [-134.53, -56.17]) |> angledLine(angle = 0, length = 79.05, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 76.28) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg01) @@ -622,7 +622,7 @@ sketch002 = startSketchOn(extrude001, face = seg01) let other_file = ( std::path::PathBuf::from("toBeImported.kcl"), r#"sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([281.54, 305.81], sketch001) +profile001 = startProfile(sketch001, at = [281.54, 305.81]) |> angledLine(angle = 0, length = 123.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 85.99) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) diff --git a/rust/kcl-lib/src/execution/mod.rs b/rust/kcl-lib/src/execution/mod.rs index b46ccccb9..bf42c8d40 100644 --- a/rust/kcl-lib/src/execution/mod.rs +++ b/rust/kcl-lib/src/execution/mod.rs @@ -1295,7 +1295,7 @@ yo = 5 + 6 abc = 3 identifierGuy = 5 part001 = startSketchOn(XY) -|> startProfileAt([-1.2, 4.83], %) +|> startProfile(at = [-1.2, 4.83]) |> line(end = [2.8, 0]) |> angledLine(angle = 100 + 100, length = 3.01) |> angledLine(angle = abc, length = 3.02) @@ -1312,7 +1312,7 @@ yo2 = hmm([identifierGuy + 5])"#; async fn test_execute_with_pipe_substitutions_unary() { let ast = r#"const myVar = 3 const part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [3, 4], tag = $seg01) |> line(end = [ min(segLen(seg01), myVar), @@ -1327,7 +1327,7 @@ const part001 = startSketchOn(XY) async fn test_execute_with_pipe_substitutions() { let ast = r#"const myVar = 3 const part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [3, 4], tag = $seg01) |> line(end = [ min(segLen(seg01), myVar), @@ -1350,7 +1350,7 @@ const arrExpShouldNotBeIncluded = [1, 2, 3] const objExpShouldNotBeIncluded = { a: 1, b: 2, c: 3 } const part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(endAbsolute = 1) |> xLine(length = 3.84) // selection-range-7ish-before-this @@ -1371,7 +1371,7 @@ fn thing = () => { } const firstExtrude = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, l]) |> line(end = [w, 0]) |> line(end = [0, thing()]) @@ -1392,7 +1392,7 @@ fn thing = (x) => { } const firstExtrude = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, l]) |> line(end = [w, 0]) |> line(end = [0, thing(8)]) @@ -1413,7 +1413,7 @@ fn thing = (x) => { } const firstExtrude = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, l]) |> line(end = [w, 0]) |> line(end = thing(8)) @@ -1438,7 +1438,7 @@ fn thing = (x) => { } const firstExtrude = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, l]) |> line(end = [w, 0]) |> line(end = [0, thing(8)]) @@ -1452,7 +1452,7 @@ const firstExtrude = startSketchOn(XY) async fn test_execute_with_function_sketch() { let ast = r#"fn box = (h, l, w) => { const myBox = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, l]) |> line(end = [w, 0]) |> line(end = [0, -l]) @@ -1471,7 +1471,7 @@ const fnBox = box(3, 6, 10)"#; async fn test_get_member_of_object_with_function_period() { let ast = r#"fn box = (obj) => { let myBox = startSketchOn(XY) - |> startProfileAt(obj.start, %) + |> startProfile(at = obj.start) |> line(end = [0, obj.l]) |> line(end = [obj.w, 0]) |> line(end = [0, -obj.l]) @@ -1490,7 +1490,7 @@ const thisBox = box({start: [0,0], l: 6, w: 10, h: 3}) async fn test_get_member_of_object_with_function_brace() { let ast = r#"fn box = (obj) => { let myBox = startSketchOn(XY) - |> startProfileAt(obj["start"], %) + |> startProfile(at = obj["start"]) |> line(end = [0, obj["l"]]) |> line(end = [obj["w"], 0]) |> line(end = [0, -obj["l"]]) @@ -1509,7 +1509,7 @@ const thisBox = box({start: [0,0], l: 6, w: 10, h: 3}) async fn test_get_member_of_object_with_function_mix_period_brace() { let ast = r#"fn box = (obj) => { let myBox = startSketchOn(XY) - |> startProfileAt(obj["start"], %) + |> startProfile(at = obj["start"]) |> line(end = [0, obj["l"]]) |> line(end = [obj["w"], 0]) |> line(end = [10 - obj["w"], -obj.l]) @@ -1531,7 +1531,7 @@ const thisBox = box({start: [0,0], l: 6, w: 10, h: 3}) fn test2 = () => { return { thing: startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 1]) |> line(end = [1, 0]) |> line(end = [0, -1]) @@ -1552,7 +1552,7 @@ x2.thing async fn test_execute_with_function_sketch_loop_objects() { let ast = r#"fn box = (obj) => { let myBox = startSketchOn(XY) - |> startProfileAt(obj.start, %) + |> startProfile(at = obj.start) |> line(end = [0, obj.l]) |> line(end = [obj.w, 0]) |> line(end = [0, -obj.l]) @@ -1574,7 +1574,7 @@ for var in [{start: [0,0], l: 6, w: 10, h: 3}, {start: [-10,-10], l: 3, w: 5, h: async fn test_execute_with_function_sketch_loop_array() { let ast = r#"fn box = (h, l, w, start) => { const myBox = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, l]) |> line(end = [w, 0]) |> line(end = [0, -l]) @@ -1596,7 +1596,7 @@ for var in [[3, 6, 10, [0,0]], [1.5, 3, 5, [-10,-10]]] { async fn test_get_member_of_array_with_function() { let ast = r#"fn box = (arr) => { let myBox =startSketchOn(XY) - |> startProfileAt(arr[0], %) + |> startProfile(at = arr[0]) |> line(end = [0, arr[1]]) |> line(end = [arr[2], 0]) |> line(end = [0, -arr[1]]) @@ -1850,7 +1850,7 @@ const leg2 = 8 // inches fn thickness = () => { return 0.56 } const bracket = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, leg1]) |> line(end = [leg2, 0]) |> line(end = [0, -thickness()]) @@ -2061,7 +2061,7 @@ const thickness_squared = distance * p * FOS * 6 / sigmaAllow const thickness = 0.56 // inches. App does not support square root function yet const bracket = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, leg1]) |> line(end = [leg2, 0]) |> line(end = [0, -thickness]) @@ -2095,7 +2095,7 @@ const leg2 = 8 // inches const thickness_squared = (distance * p * FOS * 6 / (sigmaAllow - width)) const thickness = 0.32 // inches. App does not support square root function yet const bracket = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, leg1]) |> line(end = [leg2, 0]) |> line(end = [0, -thickness]) @@ -2119,7 +2119,7 @@ const leg2 = 8 // inches const thickness_squared = distance * p * FOS * 6 / (sigmaAllow - width) const thickness = 0.32 // inches. App does not support square root function yet const bracket = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, leg1]) |> line(end = [leg2, 0]) |> line(end = [0, -thickness]) @@ -2145,7 +2145,7 @@ let w = f() + f() #[tokio::test(flavor = "multi_thread")] async fn kcl_test_ids_stable_between_executions() { let code = r#"sketch001 = startSketchOn(XZ) -|> startProfileAt([61.74, 206.13], %) +|> startProfile(at = [61.74, 206.13]) |> xLine(length = 305.11, tag = $seg01) |> yLine(length = -291.85) |> xLine(length = -segLen(seg01)) @@ -2172,7 +2172,7 @@ let w = f() + f() let id_generator = cache::read_old_ast().await.unwrap().exec_state.mod_local.id_generator; let code = r#"sketch001 = startSketchOn(XZ) -|> startProfileAt([62.74, 206.13], %) +|> startProfile(at = [62.74, 206.13]) |> xLine(length = 305.11, tag = $seg01) |> yLine(length = -291.85) |> xLine(length = -segLen(seg01)) @@ -2198,7 +2198,7 @@ let w = f() + f() #[tokio::test(flavor = "multi_thread")] async fn kcl_test_changing_a_setting_updates_the_cached_state() { let code = r#"sketch001 = startSketchOn('XZ') -|> startProfileAt([61.74, 206.13], %) +|> startProfile(at = [61.74, 206.13]) |> xLine(length = 305.11, tag = $seg01) |> yLine(length = -291.85) |> xLine(length = -segLen(seg01)) @@ -2267,7 +2267,7 @@ let w = f() + f() async fn read_tag_version() { let ast = r#"fn bar(t) { return startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> angledLine( angle = -60, length = segLen(t), @@ -2277,7 +2277,7 @@ let w = f() + f() } sketch = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, 10]) |> line(end = [10, 0], tag = $tag0) |> line(end = [0, 0]) @@ -2290,7 +2290,7 @@ fn foo() { solid = sketch |> extrude(length = 10) // tag0 tags a face sketch2 = startSketchOn(solid, face = tag0) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, 1]) |> line(end = [1, 0]) |> line(end = [0, 0]) diff --git a/rust/kcl-lib/src/lint/checks/camel_case.rs b/rust/kcl-lib/src/lint/checks/camel_case.rs index 14f76856e..366da912a 100644 --- a/rust/kcl-lib/src/lint/checks/camel_case.rs +++ b/rust/kcl-lib/src/lint/checks/camel_case.rs @@ -101,7 +101,7 @@ const thickness = 0.5 // Create the sketch to be revolved around the y-axis. Use the small diameter, large diameter, length, and thickness to define the sketch. const Part001 = startSketchOn('XY') - |> startProfileAt([pipeLargeDia - (thickness / 2), 38], %) + |> startProfile(at = [pipeLargeDia - (thickness / 2), 38]) |> line([thickness, 0], %) |> line([0, -1], %) |> angledLine(angle = 60, endAbsoluteX = pipeSmallDia + thickness) @@ -131,7 +131,7 @@ const thickness = 0.5 // Create the sketch to be revolved around the y-axis. Use the small diameter, large diameter, length, and thickness to define the sketch. const part001 = startSketchOn('XY') - |> startProfileAt([pipeLargeDia - (thickness / 2), 38], %) + |> startProfile(at = [pipeLargeDia - (thickness / 2), 38]) |> line([thickness, 0], %) |> line([0, -1], %) |> angledLine(angle = 60, endAbsoluteX = pipeSmallDia + thickness) diff --git a/rust/kcl-lib/src/lint/checks/std_lib_args.rs b/rust/kcl-lib/src/lint/checks/std_lib_args.rs index a23c7ba17..c9cb5171e 100644 --- a/rust/kcl-lib/src/lint/checks/std_lib_args.rs +++ b/rust/kcl-lib/src/lint/checks/std_lib_args.rs @@ -101,7 +101,7 @@ const filletR = 0.25 // Sketch the bracket and extrude with fillets const bracket = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line([0, wallMountL], %, $outerEdge) |> line([-shelfMountL, 0], %) |> line([0, -thickness], %) @@ -148,7 +148,7 @@ const filletR = 0.25 // Sketch the bracket and extrude with fillets const bracket = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line([0, wallMountL], %, $outerEdge) |> line([-shelfMountL, 0], %) |> line([0, -thickness], %) diff --git a/rust/kcl-lib/src/lsp/copilot/mod.rs b/rust/kcl-lib/src/lsp/copilot/mod.rs index 781bda560..5ef8d380d 100644 --- a/rust/kcl-lib/src/lsp/copilot/mod.rs +++ b/rust/kcl-lib/src/lsp/copilot/mod.rs @@ -264,7 +264,7 @@ impl Backend { completion_list.push( r#"fn cube = (pos, scale) => { const sg = startSketchOn('XY') - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line([0, scale], %) |> line([scale, 0], %) |> line([0, -scale], %) diff --git a/rust/kcl-lib/src/lsp/tests.rs b/rust/kcl-lib/src/lsp/tests.rs index eb93cded8..5860c6ff6 100644 --- a/rust/kcl-lib/src/lsp/tests.rs +++ b/rust/kcl-lib/src/lsp/tests.rs @@ -727,7 +727,7 @@ async fn test_kcl_lsp_completions_tags() { language_id: "kcl".to_string(), version: 1, text: r#"part001 = startSketchOn(XY) - |> startProfileAt([11.19, 28.35], %) + |> startProfile(at = [11.19, 28.35]) |> line(end = [28.67, -13.25], tag = $here) |> line(end = [-4.12, -22.81]) |> line(end = [-33.24, 14.55]) @@ -897,7 +897,7 @@ fn bar(x: string): string { bar("an arg") startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [0, 10]) "# @@ -1219,7 +1219,7 @@ async fn test_kcl_lsp_semantic_tokens_with_modifiers() { language_id: "kcl".to_string(), version: 1, text: r#"part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20], tag = $seg01) |> line(end = [-20, 0]) @@ -1521,7 +1521,7 @@ async fn test_kcl_lsp_document_symbol_tag() { language_id: "kcl".to_string(), version: 1, text: r#"part001 = startSketchOn(XY) - |> startProfileAt([11.19, 28.35], %) + |> startProfile(at = [11.19, 28.35]) |> line(end = [28.67, -13.25], tag = $here) |> line(end = [-4.12, -22.81]) |> line(end = [-33.24, 14.55]) @@ -1567,7 +1567,7 @@ async fn test_kcl_lsp_formatting() { language_id: "kcl".to_string(), version: 1, text: r#"startSketchOn(XY) - |> startProfileAt([0,0], %)"# + |> startProfile(at = [0,0])"# .to_string(), }, }) @@ -1598,7 +1598,7 @@ async fn test_kcl_lsp_formatting() { assert_eq!( formatting[0].new_text, r#"startSketchOn(XY) - |> startProfileAt([0, 0], %)"# + |> startProfile(at = [0, 0])"# ); } @@ -1624,7 +1624,7 @@ overHangLength = .4 // Sketch and revolve the inside bearing piece insideRevolve = startSketchOn(XZ) - |> startProfileAt([insideDia / 2, 0], %) + |> startProfile(at = [insideDia / 2, 0]) |> line(end = [0, thickness + sphereDia / 2]) |> line(end = [overHangLength, 0]) |> line(end = [0, -thickness]) @@ -1638,10 +1638,7 @@ insideRevolve = startSketchOn(XZ) // Sketch and revolve one of the balls and duplicate it using a circular pattern. (This is currently a workaround, we have a bug with rotating on a sketch that touches the rotation axis) sphere = startSketchOn(XZ) - |> startProfileAt([ - 0.05 + insideDia / 2 + thickness, - 0 - 0.05 - ], %) + |> startProfile(at = [0.05 + insideDia / 2 + thickness, 0 - 0.05]) |> line(end = [sphereDia - 0.1, 0]) |> arc(angle_start = 0, angle_end = -180, radius = sphereDia / 2 - 0.05) |> close() @@ -1656,10 +1653,7 @@ sphere = startSketchOn(XZ) // Sketch and revolve the outside bearing outsideRevolve = startSketchOn(XZ) - |> startProfileAt([ - insideDia / 2 + thickness + sphereDia, - 0 - ], %) + |> startProfile(at = [insideDia / 2 + thickness + sphereDia, 0]) |> line(end = [0, sphereDia / 2]) |> line(end = [-overHangLength + thickness, 0]) |> line(end = [0, thickness]) @@ -1702,7 +1696,7 @@ outsideRevolve = startSketchOn(XZ) tower_lsp::lsp_types::Range { start: tower_lsp::lsp_types::Position { line: 0, character: 0 }, end: tower_lsp::lsp_types::Position { - line: 56, + line: 50, character: 29 } } @@ -1720,7 +1714,7 @@ overHangLength = .4 // Sketch and revolve the inside bearing piece insideRevolve = startSketchOn(XZ) - |> startProfileAt([insideDia / 2, 0], %) + |> startProfile(at = [insideDia / 2, 0]) |> line(end = [0, thickness + sphereDia / 2]) |> line(end = [overHangLength, 0]) |> line(end = [0, -thickness]) @@ -1734,10 +1728,10 @@ insideRevolve = startSketchOn(XZ) // Sketch and revolve one of the balls and duplicate it using a circular pattern. (This is currently a workaround, we have a bug with rotating on a sketch that touches the rotation axis) sphere = startSketchOn(XZ) - |> startProfileAt([ + |> startProfile(at = [ 0.05 + insideDia / 2 + thickness, 0 - 0.05 - ], %) + ]) |> line(end = [sphereDia - 0.1, 0]) |> arc(angle_start = 0, angle_end = -180, radius = sphereDia / 2 - 0.05) |> close() @@ -1752,10 +1746,10 @@ sphere = startSketchOn(XZ) // Sketch and revolve the outside bearing outsideRevolve = startSketchOn(XZ) - |> startProfileAt([ + |> startProfile(at = [ insideDia / 2 + thickness + sphereDia, 0 - ], %) + ]) |> line(end = [0, sphereDia / 2]) |> line(end = [-overHangLength + thickness, 0]) |> line(end = [0, thickness]) @@ -2002,7 +1996,7 @@ async fn test_copilot_lsp_completions_raw() { .get_completions( "kcl".to_string(), r#"bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) "# .to_string(), r#" |> close() @@ -2021,7 +2015,7 @@ async fn test_copilot_lsp_completions_raw() { .get_completions( "kcl".to_string(), r#"bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) "# .to_string(), r#" |> close() @@ -2061,7 +2055,7 @@ async fn test_copilot_lsp_completions() { position: crate::lsp::copilot::types::CopilotPosition { line: 3, character: 3 }, relative_path: "test.copilot".to_string(), source: r#"bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> close() |> extrude(length = 10) @@ -2385,7 +2379,7 @@ async fn kcl_test_kcl_lsp_diagnostics_on_execution_error() { language_id: "kcl".to_string(), version: 1, text: r#"part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -2406,7 +2400,7 @@ async fn kcl_test_kcl_lsp_diagnostics_on_execution_error() { // Update the text. let new_text = r#"part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -2446,7 +2440,7 @@ async fn kcl_test_kcl_lsp_full_to_empty_file_updates_ast_and_memory() { language_id: "kcl".to_string(), version: 1, text: r#"part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -2491,7 +2485,7 @@ async fn kcl_test_kcl_lsp_code_unchanged_but_has_diagnostics_reexecute() { let server = kcl_lsp_server(true).await.unwrap(); let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -2579,7 +2573,7 @@ async fn kcl_test_kcl_lsp_code_and_ast_unchanged_but_has_diagnostics_reexecute() let server = kcl_lsp_server(true).await.unwrap(); let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -2656,7 +2650,7 @@ async fn kcl_test_kcl_lsp_cant_execute_set() { let server = kcl_lsp_server(true).await.unwrap(); let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -2737,7 +2731,7 @@ async fn test_kcl_lsp_folding() { language_id: "kcl".to_string(), version: 1, text: r#"startSketchOn(XY) - |> startProfileAt([0,0], %)"# + |> startProfile(at = [0,0])"# .to_string(), }, }) @@ -2776,7 +2770,7 @@ async fn kcl_test_kcl_lsp_code_with_parse_error_and_ast_unchanged_but_has_diagno let server = kcl_lsp_server(false).await.unwrap(); let code = r#"part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -2831,7 +2825,7 @@ async fn kcl_test_kcl_lsp_code_with_lint_and_ast_unchanged_but_has_diagnostics_r let code = r#"LINT = 1 part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -2885,7 +2879,7 @@ async fn kcl_test_kcl_lsp_code_with_lint_and_parse_error_and_ast_unchanged_but_h let code = r#"LINT = 1 part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -2940,7 +2934,7 @@ async fn kcl_test_kcl_lsp_code_lint_and_ast_unchanged_but_has_diagnostics_reexec let code = r#"LINT = 1 part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20], tag = $seg01) |> line(end = [-20, 0], tag = $seg01) @@ -3001,7 +2995,7 @@ async fn kcl_test_kcl_lsp_code_lint_reexecute_new_lint() { let code = r#"LINT = 1 part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20], tag = $seg01) |> line(end = [-20, 0], tag = $seg01) @@ -3040,7 +3034,7 @@ part001 = startSketchOn(XY) range: None, range_length: None, text: r#"part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20], tag = $seg01) |> line(end = [-20, 0], tag = $seg01) @@ -3070,7 +3064,7 @@ async fn kcl_test_kcl_lsp_code_lint_reexecute_new_ast_error() { let code = r#"LINT = 1 part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20], tag = $seg01) |> line(end = [-20, 0], tag = $seg01) @@ -3109,7 +3103,7 @@ part001 = startSketchOn(XY) range: None, range_length: None, text: r#"part001 = startSketchOn(XY) - |> ^^^^startProfileAt([-10, -10], %) + |> ^^^^startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20], tag = $seg01) |> line(end = [-20, 0], tag = $seg01) @@ -3139,7 +3133,7 @@ async fn kcl_test_kcl_lsp_code_lint_reexecute_had_lint_new_parse_error() { let code = r#"LINT = 1 part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -3186,7 +3180,7 @@ part001 = startSketchOn(XY) range: None, range_length: None, text: r#"part001 = startSketchOn(XY) - |> ^^^^startProfileAt([-10, -10], %) + |> ^^^^startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -3224,7 +3218,7 @@ async fn kcl_test_kcl_lsp_code_lint_reexecute_had_lint_new_execution_error() { let code = r#"LINT = 1 part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> line(end = [0, 20]) |> line(end = [-20, 0]) @@ -3276,7 +3270,7 @@ part001 = startSketchOn(XY) range_length: None, text: r#"LINT = 1 part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) + |> startProfile(at = [-10, -10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, 20], tag = $seg01) |> line(end = [-20, 0]) @@ -3433,7 +3427,7 @@ fn bar(x: string): string { bar("an arg") startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [0, 10]) "# diff --git a/rust/kcl-lib/src/parsing/ast/digest.rs b/rust/kcl-lib/src/parsing/ast/digest.rs index 5c6a86f2d..91cd11a9f 100644 --- a/rust/kcl-lib/src/parsing/ast/digest.rs +++ b/rust/kcl-lib/src/parsing/ast/digest.rs @@ -528,13 +528,13 @@ mod test { #[tokio::test(flavor = "multi_thread")] async fn test_parse_digest() { let prog1_string = r#"startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line([5, 5], %) "#; let prog1_digest = crate::parsing::top_level_parse(prog1_string).unwrap().compute_digest(); let prog2_string = r#"startSketchOn('XY') - |> startProfileAt([0, 2], %) + |> startProfile(at = [0, 2]) |> line([5, 5], %) "#; let prog2_digest = crate::parsing::top_level_parse(prog2_string).unwrap().compute_digest(); @@ -542,7 +542,7 @@ mod test { assert!(prog1_digest != prog2_digest); let prog3_string = r#"startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line([5, 5], %) "#; let prog3_digest = crate::parsing::top_level_parse(prog3_string).unwrap().compute_digest(); diff --git a/rust/kcl-lib/src/parsing/ast/types/mod.rs b/rust/kcl-lib/src/parsing/ast/types/mod.rs index 70c090b58..dd070bc7f 100644 --- a/rust/kcl-lib/src/parsing/ast/types/mod.rs +++ b/rust/kcl-lib/src/parsing/ast/types/mod.rs @@ -3624,11 +3624,11 @@ mod tests { #[test] fn test_get_lsp_folding_ranges() { let code = r#"const part001 = startSketchOn(XY) - |> startProfileAt([0.0000000000, 5.0000000000], %) + |> startProfile(at = [0.0000000000, 5.0000000000]) |> line([0.4900857016, -0.0240763666], %) startSketchOn(XY) - |> startProfileAt([0.0000000000, 5.0000000000], %) + |> startProfile(at = [0.0000000000, 5.0000000000]) |> line([0.4900857016, -0.0240763666], %) const part002 = "part002" @@ -3663,7 +3663,7 @@ ghi("things") #[test] fn test_get_lsp_symbols() { let code = r#"const part001 = startSketchOn('XY') - |> startProfileAt([0.0000000000, 5.0000000000], %) + |> startProfile(at = [0.0000000000, 5.0000000000]) |> line([0.4900857016, -0.0240763666], %) const part002 = "part002" @@ -3688,7 +3688,7 @@ const h = 30 // st const cylinder = startSketchOn('-XZ') - |> startProfileAt([50, 0], %) + |> startProfile(at = [50, 0]) |> arc({ angle_end: 360, angle_start: 0, @@ -3708,7 +3708,7 @@ const h = 30 // st const cylinder = startSketchOn('-XZ') - |> startProfileAt([50, 0], %) + |> startProfile(at = [50, 0]) // comment |> arc({ angle_end: 360, @@ -3725,7 +3725,7 @@ const cylinder = startSketchOn('-XZ') #[test] fn test_ast_in_comment_inline() { let some_program_string = r#"const part001 = startSketchOn('XY') - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> xLine(length = 5) // lin "#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); diff --git a/rust/kcl-lib/src/parsing/parser.rs b/rust/kcl-lib/src/parsing/parser.rs index 2f11cb7e2..869a4d777 100644 --- a/rust/kcl-lib/src/parsing/parser.rs +++ b/rust/kcl-lib/src/parsing/parser.rs @@ -3340,7 +3340,7 @@ comment */ /* comment at start */ mySk1 = startSketchOn(XY) - |> startProfileAt([0, 0], %)"#; + |> startProfile(at = [0, 0])"#; let tokens = crate::parsing::token::lex(test_program, ModuleId::default()).unwrap(); let program = program.parse(tokens.as_slice()).unwrap(); let mut starting_comments = program.inner.non_code_meta.start_nodes; diff --git a/rust/kcl-lib/src/std/appearance.rs b/rust/kcl-lib/src/std/appearance.rs index 82f2621ab..641417e16 100644 --- a/rust/kcl-lib/src/std/appearance.rs +++ b/rust/kcl-lib/src/std/appearance.rs @@ -81,7 +81,7 @@ pub async fn appearance(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(endAbsolute = [10, 0]) /// |> line(endAbsolute = [0, 10]) /// |> line(endAbsolute = [-10, 0]) @@ -108,7 +108,7 @@ pub async fn appearance(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - 10, center[1] - 10], %) +/// |> startProfile(at = [center[0] - 10, center[1] - 10]) /// |> line(endAbsolute = [center[0] + 10, center[1] - 10]) /// |> line(endAbsolute = [center[0] + 10, center[1] + 10]) /// |> line(endAbsolute = [center[0] - 10, center[1] + 10]) @@ -128,7 +128,7 @@ pub async fn appearance(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-12, 12], %) +/// |> startProfile(at = [-12, 12]) /// |> line(end = [24, 0]) /// |> line(end = [0, -24]) /// |> line(end = [-24, 0]) @@ -151,7 +151,7 @@ pub async fn appearance(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-12, 12], %) +/// |> startProfile(at = [-12, 12]) /// |> line(end = [24, 0]) /// |> line(end = [0, -24]) /// |> line(end = [-24, 0]) @@ -174,7 +174,7 @@ pub async fn appearance(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 2]) /// |> line(end = [3, 1]) /// |> line(end = [0, -4]) @@ -197,7 +197,7 @@ pub async fn appearance(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 2]) /// |> line(end = [3, 1]) /// |> line(end = [0, -4]) @@ -219,7 +219,7 @@ pub async fn appearance(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([.5, 25], %) +/// |> startProfile(at = [.5, 25]) /// |> line(end = [0, 5]) /// |> line(end = [-1, 0]) /// |> line(end = [0, -5]) @@ -244,7 +244,7 @@ pub async fn appearance(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0.05, 0.05], %) +/// |> startProfile(at = [0.05, 0.05]) /// |> line(end = [0, 7]) /// |> tangentialArc(angle = 90, radius = 5) /// |> line(end = [-3, 0]) diff --git a/rust/kcl-lib/src/std/args.rs b/rust/kcl-lib/src/std/args.rs index 516dfd7c2..3fac8aa16 100644 --- a/rust/kcl-lib/src/std/args.rs +++ b/rust/kcl-lib/src/std/args.rs @@ -659,10 +659,6 @@ impl Args { Ok((sketches, sketch)) } - pub(crate) fn get_data_and_sketch_surface(&self) -> Result<([TyF64; 2], SketchSurface, Option), KclError> { - FromArgs::from_args(self, 0) - } - pub(crate) async fn get_adjacent_face_to_tag( &self, exec_state: &mut ExecState, diff --git a/rust/kcl-lib/src/std/array.rs b/rust/kcl-lib/src/std/array.rs index 28f2b65a0..476b88783 100644 --- a/rust/kcl-lib/src/std/array.rs +++ b/rust/kcl-lib/src/std/array.rs @@ -138,7 +138,7 @@ pub async fn reduce(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([(cos(0)*radius), (sin(0) * radius)], %) +/// |> startProfile(at = [(cos(0)*radius), (sin(0) * radius)]) /// /// // Use a `reduce` to draw the remaining decagon sides. /// // For each number in the array 1..10, run the given function, @@ -159,7 +159,7 @@ pub async fn reduce(exec_state: &mut ExecState, args: Args) -> Result Result startProfileAt([-width/2, -length/2], %) +/// |> startProfile(at = [-width/2, -length/2]) /// |> line(endAbsolute = [width/2, -length/2], tag = $edge1) /// |> line(endAbsolute = [width/2, length/2], tag = $edge2) /// |> line(endAbsolute = [-width/2, length/2], tag = $edge3) @@ -68,7 +68,7 @@ pub async fn chamfer(exec_state: &mut ExecState, args: Args) -> Result startProfileAt(pos, %) +/// |> startProfile(at = pos) /// |> line(end = [0, scale]) /// |> line(end = [scale, 0]) /// |> line(end = [0, -scale]) @@ -87,7 +87,7 @@ pub async fn chamfer(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([10, 10], %) +/// |> startProfile(at = [10, 10]) /// |> line(end = [2, 0]) /// |> line(end = [0, 2]) /// |> line(end = [-2, 0]) diff --git a/rust/kcl-lib/src/std/clone.rs b/rust/kcl-lib/src/std/clone.rs index ba52ec386..5911cea99 100644 --- a/rust/kcl-lib/src/std/clone.rs +++ b/rust/kcl-lib/src/std/clone.rs @@ -54,7 +54,7 @@ pub async fn clone(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> line(end = [0, 10]) /// |> line(end = [-10, 0]) @@ -78,7 +78,7 @@ pub async fn clone(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> line(end = [0, 10]) /// |> line(end = [-10, 0]) @@ -95,7 +95,7 @@ pub async fn clone(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-10, 10], %) +/// |> startProfile(at = [-10, 10]) /// |> xLine(length = 20) /// |> yLine(length = -20) /// |> xLine(length = -20) @@ -112,7 +112,7 @@ pub async fn clone(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-10, 10], %) +/// |> startProfile(at = [-10, 10]) /// |> xLine(length = 20) /// |> yLine(length = -20) /// |> xLine(length = -20, tag = $filletTag) @@ -132,7 +132,7 @@ pub async fn clone(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> line(end = [0, 10], tag = $sketchingFace) /// |> line(end = [-10, 0]) @@ -143,7 +143,7 @@ pub async fn clone(exec_state: &mut ExecState, args: Args) -> Result extrude(length = 5) /// /// startSketchOn(sketch002, face = sketchingFace) -/// |> startProfileAt([1, 1], %) +/// |> startProfile(at = [1, 1]) /// |> line(end = [8, 0]) /// |> line(end = [0, 8]) /// |> line(end = [-8, 0]) @@ -160,7 +160,7 @@ pub async fn clone(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-width/2, -length/2], %) +/// |> startProfile(at = [-width/2, -length/2]) /// |> line(endAbsolute = [width/2, -length/2], tag = $edge1) /// |> line(endAbsolute = [width/2, length/2], tag = $edge2) /// |> line(endAbsolute = [-width/2, length/2], tag = $edge3) @@ -222,7 +222,7 @@ pub async fn clone(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([4, 12], %) +/// |> startProfile(at = [4, 12]) /// |> line(end = [2, 0]) /// |> line(end = [0, -6]) /// |> line(end = [4, -6]) @@ -239,7 +239,7 @@ pub async fn clone(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([4.5, -5], %) +/// // |> startProfile(at = [4.5, -5]) /// // |> line(end = [0, 5]) /// // |> line(end = [5, 0]) /// // |> line(end = [0, -5]) @@ -520,7 +520,7 @@ mod tests { #[tokio::test(flavor = "multi_thread")] async fn kcl_test_clone_sketch() { let code = r#"cube = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) @@ -568,7 +568,7 @@ clonedCube = clone(cube) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_clone_solid() { let code = r#"cube = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) @@ -627,7 +627,7 @@ clonedCube = clone(cube) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_clone_sketch_with_tags() { let code = r#"cube = startSketchOn(XY) - |> startProfileAt([0,0], %) // tag this one + |> startProfile(at = [0,0]) // tag this one |> line(end = [0, 10], tag = $tag02) |> line(end = [10, 0], tag = $tag03) |> line(end = [0, -10], tag = $tag04) @@ -682,7 +682,7 @@ clonedCube = clone(cube) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_clone_solid_with_tags() { let code = r#"cube = startSketchOn(XY) - |> startProfileAt([0,0], %) // tag this one + |> startProfile(at = [0,0]) // tag this one |> line(end = [0, 10], tag = $tag02) |> line(end = [10, 0], tag = $tag03) |> line(end = [0, -10], tag = $tag04) @@ -751,7 +751,7 @@ clonedCube = clone(cube) let code = r#"// Clone a basic solid and move it. exampleSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [10, 0]) |> line(end = [0, 10]) |> line(end = [-10, 0]) @@ -826,7 +826,7 @@ clonedCube = clone(cube) #[ignore = "this test is not working yet, need to fix the edge cut ids"] async fn kcl_test_clone_solid_with_edge_cuts() { let code = r#"cube = startSketchOn(XY) - |> startProfileAt([0,0], %) // tag this one + |> startProfile(at = [0,0]) // tag this one |> line(end = [0, 10], tag = $tag02) |> line(end = [10, 0], tag = $tag03) |> line(end = [0, -10], tag = $tag04) diff --git a/rust/kcl-lib/src/std/csg.rs b/rust/kcl-lib/src/std/csg.rs index 5a9445f79..45010e9f6 100644 --- a/rust/kcl-lib/src/std/csg.rs +++ b/rust/kcl-lib/src/std/csg.rs @@ -42,7 +42,7 @@ pub async fn union(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - size, center[1] - size], %) +/// |> startProfile(at = [center[0] - size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] + size]) /// |> line(endAbsolute = [center[0] - size, center[1] + size]) @@ -64,7 +64,7 @@ pub async fn union(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - size, center[1] - size], %) +/// |> startProfile(at = [center[0] - size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] + size]) /// |> line(endAbsolute = [center[0] - size, center[1] + size]) @@ -87,7 +87,7 @@ pub async fn union(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - size, center[1] - size], %) +/// |> startProfile(at = [center[0] - size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] + size]) /// |> line(endAbsolute = [center[0] - size, center[1] + size]) @@ -192,7 +192,7 @@ pub async fn intersect(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - size, center[1] - size], %) +/// |> startProfile(at = [center[0] - size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] + size]) /// |> line(endAbsolute = [center[0] - size, center[1] + size]) @@ -214,7 +214,7 @@ pub async fn intersect(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - size, center[1] - size], %) +/// |> startProfile(at = [center[0] - size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] + size]) /// |> line(endAbsolute = [center[0] - size, center[1] + size]) @@ -325,7 +325,7 @@ pub async fn subtract(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - size, center[1] - size], %) +/// |> startProfile(at = [center[0] - size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] + size]) /// |> line(endAbsolute = [center[0] - size, center[1] + size]) @@ -347,7 +347,7 @@ pub async fn subtract(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - size, center[1] - size], %) +/// |> startProfile(at = [center[0] - size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] - size]) /// |> line(endAbsolute = [center[0] + size, center[1] + size]) /// |> line(endAbsolute = [center[0] - size, center[1] + size]) diff --git a/rust/kcl-lib/src/std/edge.rs b/rust/kcl-lib/src/std/edge.rs index 39b5e2093..eb6369a15 100644 --- a/rust/kcl-lib/src/std/edge.rs +++ b/rust/kcl-lib/src/std/edge.rs @@ -27,7 +27,7 @@ pub async fn get_opposite_edge(exec_state: &mut ExecState, args: Args) -> Result /// /// ```no_run /// exampleSketch = startSketchOn('XZ') -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> angledLine( /// angle = 60, @@ -110,7 +110,7 @@ pub async fn get_next_adjacent_edge(exec_state: &mut ExecState, args: Args) -> R /// /// ```no_run /// exampleSketch = startSketchOn('XZ') -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> angledLine( /// angle = 60, @@ -202,7 +202,7 @@ pub async fn get_previous_adjacent_edge(exec_state: &mut ExecState, args: Args) /// /// ```no_run /// exampleSketch = startSketchOn('XZ') -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> angledLine( /// angle = 60, @@ -296,7 +296,7 @@ pub async fn get_common_edge(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, scale]) /// |> line(end = [scale, 0]) /// |> line(end = [0, -scale]) diff --git a/rust/kcl-lib/src/std/extrude.rs b/rust/kcl-lib/src/std/extrude.rs index 9e8c032aa..582ea9802 100644 --- a/rust/kcl-lib/src/std/extrude.rs +++ b/rust/kcl-lib/src/std/extrude.rs @@ -62,7 +62,7 @@ pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> arc( /// angleStart = 120, @@ -83,7 +83,7 @@ pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-10, 0], %) +/// |> startProfile(at = [-10, 0]) /// |> arc( /// angleStart = 120, /// angleEnd = -60, @@ -105,7 +105,7 @@ pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-10, 0], %) +/// |> startProfile(at = [-10, 0]) /// |> arc( /// angleStart = 120, /// angleEnd = -60, @@ -127,7 +127,7 @@ pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-10, 0], %) +/// |> startProfile(at = [-10, 0]) /// |> arc( /// angleStart = 120, /// angleEnd = -60, diff --git a/rust/kcl-lib/src/std/fillet.rs b/rust/kcl-lib/src/std/fillet.rs index 389a7855f..a2ba49665 100644 --- a/rust/kcl-lib/src/std/fillet.rs +++ b/rust/kcl-lib/src/std/fillet.rs @@ -88,7 +88,7 @@ pub async fn fillet(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-width/2, -length/2], %) +/// |> startProfile(at = [-width/2, -length/2]) /// |> line(endAbsolute = [width/2, -length/2], tag = $edge1) /// |> line(endAbsolute = [width/2, length/2], tag = $edge2) /// |> line(endAbsolute = [-width/2, length/2], tag = $edge3) @@ -113,7 +113,7 @@ pub async fn fillet(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-width/2, -length/2], %) +/// |> startProfile(at = [-width/2, -length/2]) /// |> line(endAbsolute = [width/2, -length/2], tag = $edge1) /// |> line(endAbsolute = [width/2, length/2], tag = $edge2) /// |> line(endAbsolute = [-width/2, length/2], tag = $edge3) diff --git a/rust/kcl-lib/src/std/loft.rs b/rust/kcl-lib/src/std/loft.rs index 6e42e3ebf..6a9f38780 100644 --- a/rust/kcl-lib/src/std/loft.rs +++ b/rust/kcl-lib/src/std/loft.rs @@ -59,7 +59,7 @@ pub async fn loft(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-100, 200], %) +/// |> startProfile(at = [-100, 200]) /// |> line(end = [200, 0]) /// |> line(end = [0, -200]) /// |> line(end = [-200, 0]) @@ -67,7 +67,7 @@ pub async fn loft(exec_state: &mut ExecState, args: Args) -> Result close() /// /// triangleSketch = startSketchOn(offsetPlane('XY', offset = 75)) -/// |> startProfileAt([0, 125], %) +/// |> startProfile(at = [0, 125]) /// |> line(end = [-15, -30]) /// |> line(end = [30, 0]) /// |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -79,7 +79,7 @@ pub async fn loft(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-100, 200], %) +/// |> startProfile(at = [-100, 200]) /// |> line(end = [200, 0]) /// |> line(end = [0, -200]) /// |> line(end = [-200, 0]) @@ -98,7 +98,7 @@ pub async fn loft(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-100, 200], %) +/// |> startProfile(at = [-100, 200]) /// |> line(end = [200, 0]) /// |> line(end = [0, -200]) /// |> line(end = [-200, 0]) diff --git a/rust/kcl-lib/src/std/math.rs b/rust/kcl-lib/src/std/math.rs index 4e61571a3..16adde1f8 100644 --- a/rust/kcl-lib/src/std/math.rs +++ b/rust/kcl-lib/src/std/math.rs @@ -157,7 +157,7 @@ pub async fn sqrt(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 50, /// length = sqrt(2500), @@ -189,7 +189,7 @@ pub async fn abs(_exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [8, 0]) /// |> angledLine( /// angle = abs(myAngle), @@ -224,7 +224,7 @@ pub async fn round(_exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(endAbsolute = [12, 10]) /// |> line(end = [round(7.02986), 0]) /// |> yLine(endAbsolute = 0) @@ -252,7 +252,7 @@ pub async fn floor(_exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(endAbsolute = [12, 10]) /// |> line(end = [floor(7.02986), 0]) /// |> yLine(endAbsolute = 0) @@ -280,7 +280,7 @@ pub async fn ceil(_exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(endAbsolute = [12, 10]) /// |> line(end = [ceil(7.02986), 0]) /// |> yLine(endAbsolute = 0) @@ -315,7 +315,7 @@ pub async fn min(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 70, /// length = min(15, 31, 4, 13, 22) @@ -359,7 +359,7 @@ pub async fn max(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 70, /// length = max(15, 31, 4, 13, 22) @@ -410,7 +410,7 @@ pub async fn pow(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 50, /// length = pow(5, 2), @@ -452,7 +452,7 @@ pub async fn acos(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = toDegrees(acos(0.5)), /// length = 10, @@ -495,7 +495,7 @@ pub async fn asin(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = toDegrees(asin(0.5)), /// length = 20, @@ -537,7 +537,7 @@ pub async fn atan(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = toDegrees(atan(1.25)), /// length = 20, @@ -569,7 +569,7 @@ pub async fn atan2(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = toDegrees(atan2(y = 1.25, x = 2)), /// length = 20, @@ -626,7 +626,7 @@ pub async fn log(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [log(100, 5), 0]) /// |> line(end = [5, 8]) /// |> line(end = [-10, 0]) @@ -654,7 +654,7 @@ pub async fn log2(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [log2(100), 0]) /// |> line(end = [5, 8]) /// |> line(end = [-10, 0]) @@ -682,7 +682,7 @@ pub async fn log10(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [log10(100), 0]) /// |> line(end = [5, 8]) /// |> line(end = [-10, 0]) @@ -710,7 +710,7 @@ pub async fn ln(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [ln(100), 15]) /// |> line(end = [5, -6]) /// |> line(end = [-10, -10]) @@ -739,7 +739,7 @@ pub async fn e(_exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 30, /// length = 2 * e() ^ 2, @@ -771,7 +771,7 @@ pub async fn tau(_exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 50, /// length = 10 * tau(), diff --git a/rust/kcl-lib/src/std/mod.rs b/rust/kcl-lib/src/std/mod.rs index 7a0c6018e..7b6e79449 100644 --- a/rust/kcl-lib/src/std/mod.rs +++ b/rust/kcl-lib/src/std/mod.rs @@ -81,7 +81,7 @@ lazy_static! { Box::new(crate::std::sketch::AngledLine), Box::new(crate::std::sketch::AngledLineThatIntersects), Box::new(crate::std::sketch::StartSketchOn), - Box::new(crate::std::sketch::StartProfileAt), + Box::new(crate::std::sketch::StartProfile), Box::new(crate::std::sketch::ProfileStartX), Box::new(crate::std::sketch::ProfileStartY), Box::new(crate::std::sketch::ProfileStart), diff --git a/rust/kcl-lib/src/std/patterns.rs b/rust/kcl-lib/src/std/patterns.rs index b90aa5868..45f39773a 100644 --- a/rust/kcl-lib/src/std/patterns.rs +++ b/rust/kcl-lib/src/std/patterns.rs @@ -147,7 +147,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res /// p3 = [ l + x, -l + y] /// /// return startSketchOn('XY') -/// |> startProfileAt(p0, %) +/// |> startProfile(at = p0) /// |> line(endAbsolute = p1) /// |> line(endAbsolute = p2) /// |> line(endAbsolute = p3) @@ -187,7 +187,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res /// p3 = [ l + x, -l + y] /// /// return startSketchOn('XY') -/// |> startProfileAt(p0, %) +/// |> startProfile(at = p0) /// |> line(endAbsolute = p1) /// |> line(endAbsolute = p2) /// |> line(endAbsolute = p3) @@ -244,7 +244,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res /// ] /// } /// startSketchOn('XY') -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> polygon( /// radius = 10, /// numSides = 4, @@ -812,7 +812,7 @@ pub async fn pattern_linear_3d(exec_state: &mut ExecState, args: Args) -> Result /// /// ```no_run /// exampleSketch = startSketchOn('XZ') -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 2]) /// |> line(end = [3, 1]) /// |> line(end = [0, -4]) @@ -831,7 +831,7 @@ pub async fn pattern_linear_3d(exec_state: &mut ExecState, args: Args) -> Result /// // Pattern a whole sketch on face. /// let size = 100 /// const case = startSketchOn('XY') -/// |> startProfileAt([-size, -size], %) +/// |> startProfile(at = [-size, -size]) /// |> line(end = [2 * size, 0]) /// |> line(end = [0, 2 * size]) /// |> tangentialArc(endAbsolute = [-size, size]) @@ -859,7 +859,7 @@ pub async fn pattern_linear_3d(exec_state: &mut ExecState, args: Args) -> Result /// // Pattern an object on a face. /// let size = 100 /// const case = startSketchOn('XY') -/// |> startProfileAt([-size, -size], %) +/// |> startProfile(at = [-size, -size]) /// |> line(end = [2 * size, 0]) /// |> line(end = [0, 2 * size]) /// |> tangentialArc(endAbsolute = [-size, size]) @@ -1063,7 +1063,7 @@ pub async fn pattern_circular_2d(exec_state: &mut ExecState, args: Args) -> Resu /// /// ```no_run /// exampleSketch = startSketchOn('XZ') -/// |> startProfileAt([.5, 25], %) +/// |> startProfile(at = [.5, 25]) /// |> line(end = [0, 5]) /// |> line(end = [-1, 0]) /// |> line(end = [0, -5]) diff --git a/rust/kcl-lib/src/std/segment.rs b/rust/kcl-lib/src/std/segment.rs index 1ff201275..ecc798a32 100644 --- a/rust/kcl-lib/src/std/segment.rs +++ b/rust/kcl-lib/src/std/segment.rs @@ -27,7 +27,7 @@ pub async fn segment_end(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [w, 0], tag = $line1) /// |> line(end = [0, w], tag = $line2) /// |> line(end = [-w, 0], tag = $line3) @@ -37,7 +37,7 @@ pub async fn segment_end(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> circle(radius = radius, center = segEnd(tag) ) /// |> extrude(length = radius) /// } @@ -79,7 +79,7 @@ pub async fn segment_end_x(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [20, 0], tag = $thing) /// |> line(end = [0, 5]) /// |> line(end = [segEndX(thing), 0]) @@ -120,7 +120,7 @@ pub async fn segment_end_y(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [20, 0]) /// |> line(end = [0, 3], tag = $thing) /// |> line(end = [-10, 0]) @@ -163,7 +163,7 @@ pub async fn segment_start(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [w, 0], tag = $line1) /// |> line(end = [0, w], tag = $line2) /// |> line(end = [-w, 0], tag = $line3) @@ -173,7 +173,7 @@ pub async fn segment_start(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> circle( radius = radius, center = segStart(tag) ) /// |> extrude(length = radius) /// } @@ -215,7 +215,7 @@ pub async fn segment_start_x(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [20, 0], tag = $thing) /// |> line(end = [0, 5]) /// |> line(end = [20 - segStartX(thing), 0]) @@ -256,7 +256,7 @@ pub async fn segment_start_y(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [20, 0]) /// |> line(end = [0, 3], tag = $thing) /// |> line(end = [-10, 0]) @@ -299,7 +299,7 @@ pub async fn last_segment_x(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [5, 0]) /// |> line(end = [20, 5]) /// |> line(end = [lastSegX(%), 0]) @@ -345,7 +345,7 @@ pub async fn last_segment_y(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [5, 0]) /// |> line(end = [20, 5]) /// |> line(end = [0, lastSegY(%)]) @@ -388,7 +388,7 @@ pub async fn segment_length(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 60, /// length = 10, @@ -435,7 +435,7 @@ pub async fn segment_angle(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> line(end = [5, 10], tag = $seg01) /// |> line(end = [-10, 0]) @@ -481,7 +481,7 @@ pub async fn tangent_to_end(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [20, 0]) /// |> tangentialArc(end = [0, 10], tag = $arc1) /// |> angledLine( @@ -497,7 +497,7 @@ pub async fn tangent_to_end(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 20]) /// |> tangentialArc(endAbsolute = [10, 20], tag = $arc1) /// |> angledLine( @@ -512,7 +512,7 @@ pub async fn tangent_to_end(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0], tag = $seg1) /// |> angledLine( /// angle = tangentToEnd(seg1), @@ -527,7 +527,7 @@ pub async fn tangent_to_end(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> arc( /// endAbsolute = [10, 10], /// interiorAbsolute = [5, 1], @@ -542,7 +542,7 @@ pub async fn tangent_to_end(exec_state: &mut ExecState, args: Args) -> Result circle( center= [0, 0], radius= 3 , tag= $circ) /// /// triangleSketch = startSketchOn("XY") -/// |> startProfileAt([-5, 0], %) +/// |> startProfile(at = [-5, 0]) /// |> angledLine(angle = tangentToEnd(circ), length = 10) /// |> line(end = [-15, 0]) /// |> close() diff --git a/rust/kcl-lib/src/std/shapes.rs b/rust/kcl-lib/src/std/shapes.rs index 654bfabff..6f3238ef8 100644 --- a/rust/kcl-lib/src/std/shapes.rs +++ b/rust/kcl-lib/src/std/shapes.rs @@ -72,7 +72,7 @@ async fn inner_circle( let from_t = [TyF64::new(from[0], ty.clone()), TyF64::new(from[1], ty)]; let sketch = - crate::std::sketch::inner_start_profile_at(from_t, sketch_surface, None, exec_state, args.clone()).await?; + crate::std::sketch::inner_start_profile(sketch_surface, from_t, None, exec_state, args.clone()).await?; let angle_start = Angle::zero(); let angle_end = Angle::turn(); @@ -189,8 +189,7 @@ async fn inner_circle_three_point( TyF64::new(center[1], ty.clone()), ]; let sketch = - crate::std::sketch::inner_start_profile_at(from.clone(), sketch_surface, None, exec_state, args.clone()) - .await?; + crate::std::sketch::inner_start_profile(sketch_surface, from.clone(), None, exec_state, args.clone()).await?; let angle_start = Angle::zero(); let angle_end = Angle::turn(); @@ -366,9 +365,9 @@ async fn inner_polygon( }) .collect(); - let mut sketch = crate::std::sketch::inner_start_profile_at( - point_to_typed(vertices[0], units), + let mut sketch = crate::std::sketch::inner_start_profile( sketch_surface, + point_to_typed(vertices[0], units), None, exec_state, args.clone(), diff --git a/rust/kcl-lib/src/std/shell.rs b/rust/kcl-lib/src/std/shell.rs index a09381863..8eb773285 100644 --- a/rust/kcl-lib/src/std/shell.rs +++ b/rust/kcl-lib/src/std/shell.rs @@ -30,7 +30,7 @@ pub async fn shell(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-12, 12], %) +/// |> startProfile(at = [-12, 12]) /// |> line(end = [24, 0]) /// |> line(end = [0, -24]) /// |> line(end = [-24, 0]) @@ -48,7 +48,7 @@ pub async fn shell(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-12, 12], %) +/// |> startProfile(at = [-12, 12]) /// |> line(end = [24, 0]) /// |> line(end = [0, -24]) /// |> line(end = [-24, 0]) @@ -66,7 +66,7 @@ pub async fn shell(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-12, 12], %) +/// |> startProfile(at = [-12, 12]) /// |> line(end = [24, 0]) /// |> line(end = [0, -24]) /// |> line(end = [-24, 0], tag = $myTag) @@ -84,7 +84,7 @@ pub async fn shell(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-12, 12], %) +/// |> startProfile(at = [-12, 12]) /// |> line(end = [24, 0]) /// |> line(end = [0, -24]) /// |> line(end = [-24, 0], tag = $myTag) @@ -103,7 +103,7 @@ pub async fn shell(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-size, -size], %) +/// |> startProfile(at = [-size, -size]) /// |> line(end = [2 * size, 0]) /// |> line(end = [0, 2 * size]) /// |> tangentialArc(endAbsolute = [-size, size]) @@ -126,7 +126,7 @@ pub async fn shell(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-size, -size], %) +/// |> startProfile(at = [-size, -size]) /// |> line(end = [2 * size, 0]) /// |> line(end = [0, 2 * size]) /// |> tangentialArc(endAbsolute = [-size, size]) @@ -151,7 +151,7 @@ pub async fn shell(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-size, -size], %) +/// |> startProfile(at = [-size, -size]) /// |> line(end = [2 * size, 0]) /// |> line(end = [0, 2 * size]) /// |> tangentialArc(endAbsolute = [-size, size]) @@ -262,7 +262,7 @@ pub async fn hollow(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-12, 12], %) +/// |> startProfile(at = [-12, 12]) /// |> line(end = [24, 0]) /// |> line(end = [0, -24]) /// |> line(end = [-24, 0]) @@ -274,7 +274,7 @@ pub async fn hollow(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-12, 12], %) +/// |> startProfile(at = [-12, 12]) /// |> line(end = [24, 0]) /// |> line(end = [0, -24]) /// |> line(end = [-24, 0]) @@ -287,7 +287,7 @@ pub async fn hollow(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-size, -size], %) +/// |> startProfile(at = [-size, -size]) /// |> line(end = [2 * size, 0]) /// |> line(end = [0, 2 * size]) /// |> tangentialArc(endAbsolute = [-size, size]) diff --git a/rust/kcl-lib/src/std/sketch.rs b/rust/kcl-lib/src/std/sketch.rs index 4e67a5a84..4f101e5f6 100644 --- a/rust/kcl-lib/src/std/sketch.rs +++ b/rust/kcl-lib/src/std/sketch.rs @@ -134,7 +134,7 @@ fn involute_curve(radius: f64, angle: f64) -> (f64, f64) { /// a = 10 /// b = 14 /// startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> involuteCircular(startRadius = a, endRadius = b, angle = 60) /// |> involuteCircular(startRadius = a, endRadius = b, angle = 60, reverse = true) /// ``` @@ -236,7 +236,7 @@ pub async fn line(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// // The END argument means it ends at exactly [10, 0]. /// // This is an absolute measurement, it is NOT relative to /// // the start of the sketch. @@ -247,7 +247,7 @@ pub async fn line(exec_state: &mut ExecState, args: Args) -> Result extrude(length = 5) /// /// box = startSketchOn(XZ) -/// |> startProfileAt([10, 10], %) +/// |> startProfile(at = [10, 10]) /// // The 'to' argument means move the pen this much. /// // So, [10, 0] is a relative distance away from the current point. /// |> line(end = [10, 0]) @@ -406,7 +406,7 @@ pub async fn x_line(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> xLine(length = 15) /// |> angledLine( /// angle = 80, @@ -475,7 +475,7 @@ pub async fn y_line(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> yLine(length = 15) /// |> angledLine( /// angle = 30, @@ -556,7 +556,7 @@ pub async fn angled_line(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> yLine(endAbsolute = 15) /// |> angledLine( /// angle = 30, @@ -854,7 +854,7 @@ pub async fn angled_line_that_intersects(exec_state: &mut ExecState, args: Args) /// /// ```no_run /// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(endAbsolute = [5, 10]) /// |> line(endAbsolute = [-10, 10], tag = $lineToIntersect) /// |> line(endAbsolute = [0, 20]) @@ -1000,7 +1000,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> line(end = [0, 10]) /// |> line(end = [-10, 0]) @@ -1009,7 +1009,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([1, 1], %) +/// |> startProfile(at = [1, 1]) /// |> line(end = [8, 0]) /// |> line(end = [0, 8]) /// |> line(end = [-8, 0]) @@ -1018,7 +1018,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([2, 2], %) +/// |> startProfile(at = [2, 2]) /// |> line(end = [6, 0]) /// |> line(end = [0, 6]) /// |> line(end = [-6, 0]) @@ -1031,7 +1031,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> line(end = [0, 10]) /// |> line(end = [-10, 0]) @@ -1040,7 +1040,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([1, 1], %) +/// |> startProfile(at = [1, 1]) /// |> line(end = [8, 0]) /// |> line(end = [0, 8]) /// |> line(end = [-8, 0]) @@ -1049,7 +1049,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([2, 2], %) +/// |> startProfile(at = [2, 2]) /// |> line(end = [6, 0]) /// |> line(end = [0, 6]) /// |> line(end = [-6, 0]) @@ -1060,7 +1060,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> line(end = [0, 10], tag = $sketchingFace) /// |> line(end = [-10, 0]) @@ -1069,7 +1069,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([1, 1], %) +/// |> startProfile(at = [1, 1]) /// |> line(end = [8, 0]) /// |> line(end = [0, 8]) /// |> line(end = [-8, 0]) @@ -1078,7 +1078,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-8, 12], %) +/// |> startProfile(at = [-8, 12]) /// |> line(end = [0, 6]) /// |> line(end = [6, 0]) /// |> line(end = [0, -6]) @@ -1089,7 +1089,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([4, 12], %) +/// |> startProfile(at = [4, 12]) /// |> line(end = [2, 0]) /// |> line(end = [0, -6]) /// |> line(end = [4, -6]) @@ -1102,7 +1102,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([4.5, -5], %) +/// |> startProfile(at = [4.5, -5]) /// |> line(end = [0, 5]) /// |> line(end = [5, 0]) /// |> line(end = [0, -5]) @@ -1115,7 +1115,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([4, 12], %) +/// |> startProfile(at = [4, 12]) /// |> line(end = [2, 0]) /// |> line(end = [0, -6]) /// |> line(end = [4, -6]) @@ -1128,7 +1128,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([4.5, -5], %) +/// |> startProfile(at = [4.5, -5]) /// |> line(end = [0, 5]) /// |> line(end = [5, 0]) /// |> line(end = [0, -5]) @@ -1144,7 +1144,7 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [100.0, 0]) /// |> yLine(length = -100.0) /// |> xLine(length = -100.0) @@ -1260,10 +1260,13 @@ async fn make_sketch_plane_from_orientation( } /// Start a new profile at a given point. -pub async fn start_profile_at(exec_state: &mut ExecState, args: Args) -> Result { - let (start, sketch_surface, tag) = args.get_data_and_sketch_surface()?; +pub async fn start_profile(exec_state: &mut ExecState, args: Args) -> Result { + // let (start, sketch_surface, tag) = args.get_data_and_sketch_surface()?; + let sketch_surface = args.get_unlabeled_kw_arg("startProfileOn")?; + let start: [TyF64; 2] = args.get_kw_arg("at")?; + let tag = args.get_kw_arg_opt(NEW_TAG_KW)?; - let sketch = inner_start_profile_at(start, sketch_surface, tag, exec_state, args).await?; + let sketch = inner_start_profile(sketch_surface, start, tag, exec_state, args).await?; Ok(KclValue::Sketch { value: Box::new(sketch), }) @@ -1273,7 +1276,7 @@ pub async fn start_profile_at(exec_state: &mut ExecState, args: Args) -> Result< /// /// ```no_run /// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> line(end = [0, 10]) /// |> line(end = [-10, 0]) @@ -1284,7 +1287,7 @@ pub async fn start_profile_at(exec_state: &mut ExecState, args: Args) -> Result< /// /// ```no_run /// exampleSketch = startSketchOn(-XZ) -/// |> startProfileAt([10, 10], %) +/// |> startProfile(at = [10, 10]) /// |> line(end = [10, 0]) /// |> line(end = [0, 10]) /// |> line(end = [-10, 0]) @@ -1295,7 +1298,7 @@ pub async fn start_profile_at(exec_state: &mut ExecState, args: Args) -> Result< /// /// ```no_run /// exampleSketch = startSketchOn(-XZ) -/// |> startProfileAt([-10, 23], %) +/// |> startProfile(at = [-10, 23]) /// |> line(end = [10, 0]) /// |> line(end = [0, 10]) /// |> line(end = [-10, 0]) @@ -1304,11 +1307,18 @@ pub async fn start_profile_at(exec_state: &mut ExecState, args: Args) -> Result< /// example = extrude(exampleSketch, length = 5) /// ``` #[stdlib { - name = "startProfileAt", + name = "startProfile", + keywords = true, + unlabeled_first = true, + args = { + sketch_surface = { docs = "What to start the profile on" }, + at = { docs = "Where to start the profile. An absolute point." }, + tag = { docs = "Tag this first starting point" }, + } }] -pub(crate) async fn inner_start_profile_at( - to: [TyF64; 2], +pub(crate) async fn inner_start_profile( sketch_surface: SketchSurface, + at: [TyF64; 2], tag: Option, exec_state: &mut ExecState, args: Args, @@ -1364,7 +1374,7 @@ pub(crate) async fn inner_start_profile_at( ModelingCmdReq { cmd: ModelingCmd::from(mcmd::MovePathPen { path: path_id.into(), - to: KPoint2d::from(point_to_mm(to.clone())).with_z(0.0).map(LengthUnit), + to: KPoint2d::from(point_to_mm(at.clone())).with_z(0.0).map(LengthUnit), }), cmd_id: move_pen_id.into(), }, @@ -1375,7 +1385,7 @@ pub(crate) async fn inner_start_profile_at( ]) .await?; - let (to, ty) = untype_point(to); + let (to, ty) = untype_point(at); let current_path = BasePath { from: to, to, @@ -1431,7 +1441,7 @@ pub async fn profile_start_x(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([5, 2], %) +/// |> startProfile(at = [5, 2]) /// |> angledLine(angle = -26.6, length = 50) /// |> angledLine(angle = 90, length = 50) /// |> angledLine(angle = 30, endAbsoluteX = profileStartX(%)) @@ -1461,7 +1471,7 @@ pub async fn profile_start_y(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([5, 2], %) +/// |> startProfile(at = [5, 2]) /// |> angledLine(angle = -60, length = 14 ) /// |> angledLine(angle = 30, endAbsoluteY = profileStartY(%)) /// ``` @@ -1490,7 +1500,7 @@ pub async fn profile_start(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([5, 2], %) +/// |> startProfile(at = [5, 2]) /// |> angledLine(angle = 120, length = 50 , tag = $seg01) /// |> angledLine(angle = segAng(seg01) + 120, length = 50 ) /// |> line(end = profileStart(%)) @@ -1525,7 +1535,7 @@ pub async fn close(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 10]) /// |> line(end = [10, 0]) /// |> close() @@ -1534,7 +1544,7 @@ pub async fn close(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> line(end = [0, 10]) /// |> close() @@ -1630,7 +1640,7 @@ pub async fn arc(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> arc( /// angleStart = 0, @@ -1642,7 +1652,7 @@ pub async fn arc(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> arc( /// endAbsolute = [10,0], /// interiorAbsolute = [5,5] @@ -1852,7 +1862,7 @@ pub async fn tangential_arc(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 45, /// length = 10, @@ -1866,7 +1876,7 @@ pub async fn tangential_arc(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 60, /// length = 10, @@ -1880,7 +1890,7 @@ pub async fn tangential_arc(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 60, /// length = 10, @@ -2161,7 +2171,7 @@ pub async fn bezier_curve(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 10]) /// |> bezierCurve( /// control1 = [5, 0], @@ -2256,7 +2266,7 @@ pub async fn hole(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 5]) /// |> line(end = [5, 0]) /// |> line(end = [0, -5]) @@ -2270,7 +2280,7 @@ pub async fn hole(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-1, -1], %) +/// |> startProfile(at = [-1, -1]) /// |> line(end = [2, 0]) /// |> line(end = [0, 2]) /// |> line(end = [-2, 0]) diff --git a/rust/kcl-lib/src/std/sweep.rs b/rust/kcl-lib/src/std/sweep.rs index 874ce5075..97c6da89e 100644 --- a/rust/kcl-lib/src/std/sweep.rs +++ b/rust/kcl-lib/src/std/sweep.rs @@ -63,7 +63,7 @@ pub async fn sweep(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0.05, 0.05], %) +/// |> startProfile(at = [0.05, 0.05]) /// |> line(end = [0, 7]) /// |> tangentialArc(angle = 90, radius = 5) /// |> line(end = [-3, 0]) @@ -110,7 +110,7 @@ pub async fn sweep(exec_state: &mut ExecState, args: Args) -> Result angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001) /// |> angledLine( /// angle = segAng(rectangleSegmentA001) - 90, @@ -126,7 +126,7 @@ pub async fn sweep(exec_state: &mut ExecState, args: Args) -> Result yLine(length = 231.81) /// |> tangentialArc(radius = 80, angle = -90) /// |> xLine(length = 384.93) @@ -140,7 +140,7 @@ pub async fn sweep(exec_state: &mut ExecState, args: Args) -> Result yLine(length = 231.81) /// |> tangentialArc(radius = 80, angle = -90) /// |> xLine(length = 384.93) diff --git a/rust/kcl-lib/src/std/transform.rs b/rust/kcl-lib/src/std/transform.rs index a84ec4e51..ca1ae8117 100644 --- a/rust/kcl-lib/src/std/transform.rs +++ b/rust/kcl-lib/src/std/transform.rs @@ -76,7 +76,7 @@ pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0.05, 0.05], %) +/// |> startProfile(at = [0.05, 0.05]) /// |> line(end = [0, 7]) /// |> tangentialArc(angle = 90, radius = 5) /// |> line(end = [-3, 0]) @@ -117,7 +117,7 @@ pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001) /// |> angledLine( /// angle = segAng(rectangleSegmentA001) - 90, @@ -133,7 +133,7 @@ pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result yLine(length = 231.81) /// |> tangentialArc(radius = 80, angle = -90) /// |> xLine(length = 384.93) @@ -242,7 +242,7 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0.05, 0.05], %) +/// |> startProfile(at = [0.05, 0.05]) /// |> line(end = [0, 7]) /// |> tangentialArc(angle = 90, radius = 5) /// |> line(end = [-3, 0]) @@ -297,7 +297,7 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001) /// |> angledLine( /// angle = segAng(rectangleSegmentA001) - 90, @@ -313,7 +313,7 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result yLine(length = 231.81) /// |> tangentialArc(radius = 80, angle = -90) /// |> xLine(length = 384.93) @@ -335,7 +335,7 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result startProfileAt(p0, %) +/// |> startProfile(at = p0) /// |> line(endAbsolute = p1) /// |> line(endAbsolute = p2) /// |> line(endAbsolute = p3) @@ -357,7 +357,7 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result xLine(length = 20) /// |> yLine(length = -20) /// |> xLine(length = -20) @@ -581,7 +581,7 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0.05, 0.05], %) +/// |> startProfile(at = [0.05, 0.05]) /// |> line(end = [0, 7]) /// |> tangentialArc(angle = 90, radius = 5) /// |> line(end = [-3, 0]) @@ -614,7 +614,7 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0.05, 0.05], %) +/// |> startProfile(at = [0.05, 0.05]) /// |> line(end = [0, 7]) /// |> tangentialArc(angle = 90, radius = 5) /// |> line(end = [-3, 0]) @@ -645,7 +645,7 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0.05, 0.05], %) +/// |> startProfile(at = [0.05, 0.05]) /// |> line(end = [0, 7]) /// |> tangentialArc(angle = 90, radius = 5) /// |> line(end = [-3, 0]) @@ -688,7 +688,7 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001) /// |> angledLine( /// angle = segAng(rectangleSegmentA001) - 90, @@ -704,7 +704,7 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result yLine(length = 231.81) /// |> tangentialArc(radius = 80, angle = -90) /// |> xLine(length = 384.93) @@ -720,7 +720,7 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result xLine(length = 20) /// |> yLine(length = -20) /// |> xLine(length = -20) @@ -832,7 +832,7 @@ mod tests { use crate::execution::parse_execute; const PIPE: &str = r#"sweepPath = startSketchOn('XZ') - |> startProfileAt([0.05, 0.05], %) + |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) |> tangentialArc(angle = 90, radius = 5) |> line(end = [-3, 0]) diff --git a/rust/kcl-lib/std/math.kcl b/rust/kcl-lib/std/math.kcl index 0db79024b..b56c0f3a6 100644 --- a/rust/kcl-lib/std/math.kcl +++ b/rust/kcl-lib/std/math.kcl @@ -19,7 +19,7 @@ export PI = 3.14159265358979323846264338327950288_ /// /// ``` /// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 30, /// length = 2 * E ^ 2, @@ -35,7 +35,7 @@ export E = 2.71828182845904523536028747135266250_ /// /// ``` /// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 50, /// length = 10 * TAU, @@ -51,7 +51,7 @@ export TAU = 6.28318530717958647692528676655900577_ /// /// ``` /// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 30, /// length = 3 / cos(30deg), @@ -68,7 +68,7 @@ export fn cos(@num: number(Angle)): number(_) {} /// /// ``` /// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 50, /// length = 15 / sin(135deg), @@ -85,7 +85,7 @@ export fn sin(@num: number(Angle)): number(_) {} /// /// ``` /// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 50, /// length = 50 * tan((1/2): number(rad)), @@ -103,7 +103,7 @@ export fn tan(@num: number(Angle)): number(_) {} /// /// ``` /// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = polar(angle = 30, length = 5), tag = $thing) /// |> line(end = [0, 5]) /// |> line(end = [segEndX(thing), 0]) diff --git a/rust/kcl-lib/std/prelude.kcl b/rust/kcl-lib/std/prelude.kcl index 20688ffb0..aeeb0e089 100644 --- a/rust/kcl-lib/std/prelude.kcl +++ b/rust/kcl-lib/std/prelude.kcl @@ -69,7 +69,7 @@ export END = 'end' /// ``` /// // Create a helix around an edge. /// helper001 = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 10], tag = $edge001) /// /// helixPath = helix( @@ -157,7 +157,7 @@ export fn helix( /// /// ``` /// part001 = startSketchOn(XY) -/// |> startProfileAt([4, 12], %) +/// |> startProfile(at = [4, 12]) /// |> line(end = [2, 0]) /// |> line(end = [0, -6]) /// |> line(end = [4, -6]) @@ -181,7 +181,7 @@ export fn helix( /// /// ``` /// part001 = startSketchOn(XY) -/// |> startProfileAt([4, 12], %) +/// |> startProfile(at = [4, 12]) /// |> line(end = [2, 0]) /// |> line(end = [0, -6]) /// |> line(end = [4, -6]) @@ -195,7 +195,7 @@ export fn helix( /// /// ``` /// part001 = startSketchOn(XY) -/// |> startProfileAt([4, 12], %) +/// |> startProfile(at = [4, 12]) /// |> line(end = [2, 0]) /// |> line(end = [0, -6]) /// |> line(end = [4, -6]) @@ -207,7 +207,7 @@ export fn helix( /// |> revolve(axis = Y, angle = 180) /// /// part002 = startSketchOn(part001, face = END) -/// |> startProfileAt([4.5, -5], %) +/// |> startProfile(at = [4.5, -5]) /// |> line(end = [0, 5]) /// |> line(end = [5, 0]) /// |> line(end = [0, -5]) @@ -217,7 +217,7 @@ export fn helix( /// /// ``` /// box = startSketchOn(XY) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 20]) /// |> line(end = [20, 0]) /// |> line(end = [0, -20]) @@ -234,7 +234,7 @@ export fn helix( /// /// ``` /// box = startSketchOn(XY) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 20]) /// |> line(end = [20, 0]) /// |> line(end = [0, -20], tag = $revolveAxis) @@ -251,7 +251,7 @@ export fn helix( /// /// ``` /// box = startSketchOn(XY) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 20]) /// |> line(end = [20, 0]) /// |> line(end = [0, -20], tag = $revolveAxis) @@ -269,7 +269,7 @@ export fn helix( /// /// ``` /// sketch001 = startSketchOn(XY) -/// |> startProfileAt([10, 0], %) +/// |> startProfile(at = [10, 0]) /// |> line(end = [5, -5]) /// |> line(end = [5, 5]) /// |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -288,14 +288,14 @@ export fn helix( /// // Revolve two sketches around the same axis. /// /// sketch001 = startSketchOn(XY) -/// profile001 = startProfileAt([4, 8], sketch001) +/// profile001 = startProfile(sketch001, at = [4, 8]) /// |> xLine(length = 3) /// |> yLine(length = -3) /// |> xLine(length = -3) /// |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) /// |> close() /// -/// profile002 = startProfileAt([-5, 8], sketch001) +/// profile002 = startProfile(sketch001, at = [-5, 8]) /// |> xLine(length = 3) /// |> yLine(length = -3) /// |> xLine(length = -3) @@ -312,7 +312,7 @@ export fn helix( /// // Revolve around a path that has not been extruded. /// /// profile001 = startSketchOn(XY) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 20], tag = $revolveAxis) /// |> line(end = [20, 0]) /// |> line(end = [0, -20]) @@ -327,7 +327,7 @@ export fn helix( /// // Revolve around a path that has not been extruded or closed. /// /// profile001 = startSketchOn(XY) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 20], tag = $revolveAxis) /// |> line(end = [20, 0]) /// @@ -340,7 +340,7 @@ export fn helix( /// // Symmetrically revolve around a path. /// /// profile001 = startSketchOn(XY) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 20], tag = $revolveAxis) /// |> line(end = [20, 0]) /// @@ -353,7 +353,7 @@ export fn helix( /// // Bidirectional revolve around a path. /// /// profile001 = startSketchOn(XY) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 20], tag = $revolveAxis) /// |> line(end = [20, 0]) /// @@ -415,7 +415,7 @@ export fn toYards(@num: number(yd)): number(yd) { /// /// ``` /// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 50, /// length = 70 * cos(toRadians(45)), @@ -433,7 +433,7 @@ export fn toRadians(@num: number(rad)): number(rad) { /// /// ``` /// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 50, /// length = 70 * cos(toDegrees((PI/4): number(rad))), @@ -455,7 +455,7 @@ export fn toDegrees(@num: number(deg)): number(deg) { /// ``` /// // Loft a square and a circle on the `XY` plane using offset. /// squareSketch = startSketchOn(XY) -/// |> startProfileAt([-100, 200], %) +/// |> startProfile(at = [-100, 200]) /// |> line(end = [200, 0]) /// |> line(end = [0, -200]) /// |> line(end = [-200, 0]) @@ -471,7 +471,7 @@ export fn toDegrees(@num: number(deg)): number(deg) { /// ``` /// // Loft a square and a circle on the `XZ` plane using offset. /// squareSketch = startSketchOn(XZ) -/// |> startProfileAt([-100, 200], %) +/// |> startProfile(at = [-100, 200]) /// |> line(end = [200, 0]) /// |> line(end = [0, -200]) /// |> line(end = [-200, 0]) @@ -487,7 +487,7 @@ export fn toDegrees(@num: number(deg)): number(deg) { /// ``` /// // Loft a square and a circle on the `YZ` plane using offset. /// squareSketch = startSketchOn(YZ) -/// |> startProfileAt([-100, 200], %) +/// |> startProfile(at = [-100, 200]) /// |> line(end = [200, 0]) /// |> line(end = [0, -200]) /// |> line(end = [-200, 0]) @@ -503,7 +503,7 @@ export fn toDegrees(@num: number(deg)): number(deg) { /// ``` /// // Loft a square and a circle on the `-XZ` plane using offset. /// squareSketch = startSketchOn(-XZ) -/// |> startProfileAt([-100, 200], %) +/// |> startProfile(at = [-100, 200]) /// |> line(end = [200, 0]) /// |> line(end = [0, -200]) /// |> line(end = [-200, 0]) @@ -519,12 +519,12 @@ export fn toDegrees(@num: number(deg)): number(deg) { /// ``` /// // A circle on the XY plane /// startSketchOn(XY) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> circle( radius = 10, center = [0, 0] ) /// /// // Triangle on the plane 4 units above /// startSketchOn(offsetPlane(XY, offset = 4)) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [10, 0]) /// |> line(end = [0, 10]) /// |> close() diff --git a/rust/kcl-lib/std/sketch.kcl b/rust/kcl-lib/std/sketch.kcl index a393049ef..f0bf2f72d 100644 --- a/rust/kcl-lib/std/sketch.kcl +++ b/rust/kcl-lib/std/sketch.kcl @@ -13,7 +13,7 @@ /// /// ``` /// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([-15, 0], %) +/// |> startProfile(at = [-15, 0]) /// |> line(end = [30, 0]) /// |> line(end = [0, 30]) /// |> line(end = [-30, 0]) @@ -43,7 +43,7 @@ export fn circle( /// ``` /// // Mirror an un-closed sketch across the Y axis. /// sketch001 = startSketchOn(XZ) -/// |> startProfileAt([0, 10], %) +/// |> startProfile(at = [0, 10]) /// |> line(end = [15, 0]) /// |> line(end = [-7, -3]) /// |> line(end = [9, -1]) @@ -60,7 +60,7 @@ export fn circle( /// ``` /// // Mirror a un-closed sketch across the Y axis. /// sketch001 = startSketchOn(XZ) -/// |> startProfileAt([0, 8.5], %) +/// |> startProfile(at = [0, 8.5]) /// |> line(end = [20, -8.5]) /// |> line(end = [-20, -8.5]) /// |> mirror2d(axis = Y) @@ -71,11 +71,11 @@ export fn circle( /// ``` /// // Mirror a un-closed sketch across an edge. /// helper001 = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> line(end = [0, 10], tag = $edge001) /// /// sketch001 = startSketchOn(XZ) -/// |> startProfileAt([0, 8.5], %) +/// |> startProfile(at = [0, 8.5]) /// |> line(end = [20, -8.5]) /// |> line(end = [-20, -8.5]) /// |> mirror2d(axis = edge001) @@ -86,7 +86,7 @@ export fn circle( /// ``` /// // Mirror an un-closed sketch across a custom axis. /// sketch001 = startSketchOn(XZ) -/// |> startProfileAt([0, 8.5], %) +/// |> startProfile(at = [0, 8.5]) /// |> line(end = [20, -8.5]) /// |> line(end = [-20, -8.5]) /// |> mirror2d( @@ -101,7 +101,7 @@ export fn circle( /// ``` /// // Sketch on the face of a mirrored sketch, that has been extruded. /// sketch0011 = startSketchOn(XY) -/// |> startProfileAt([6.77, 0], %) +/// |> startProfile(at = [6.77, 0]) /// |> yLine(length = 1.27) /// |> tangentialArc(endAbsolute = [5.96, 2.37]) /// |> tangentialArc(endAbsolute = [-6.2, 2.44]) diff --git a/rust/kcl-lib/std/types.kcl b/rust/kcl-lib/std/types.kcl index 69c51ba0c..51f3f2660 100644 --- a/rust/kcl-lib/std/types.kcl +++ b/rust/kcl-lib/std/types.kcl @@ -35,7 +35,7 @@ export type string /// /// ```norun,inline /// startSketchOn(XZ) -/// |> startProfileAt(origin, %) +/// |> startProfile(at = origin) /// |> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001) /// |> angledLine( /// angle = segAng(rectangleSegmentA001) - 90, @@ -69,7 +69,7 @@ export type string /// ```norun,inline /// fn rect(origin) { /// return startSketchOn(XZ) -/// |> startProfileAt(origin, %) +/// |> startProfile(at = origin) /// |> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001) /// |> angledLine( /// angle = segAng(rectangleSegmentA001) - 90, @@ -98,7 +98,7 @@ export type string /// ```norun,inline /// fn rect(origin) { /// return startSketchOn(XZ) -/// |> startProfileAt(origin, %) +/// |> startProfile(at = origin) /// |> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001) /// |> angledLine( /// angle = segAng(rectangleSegmentA001) - 90, @@ -136,7 +136,7 @@ export type Plane /// /// ```kcl,inline /// mySketch = startSketchOn(XY) -/// |> startProfileAt([-12, 12], %) +/// |> startProfile(at = [-12, 12]) /// |> line(end = [24, 0]) /// |> line(end = [0, -24]) /// |> line(end = [-24, 0]) @@ -154,7 +154,7 @@ export type Plane /// ```kcl,inline /// fn createSketch() { /// return startSketchOn(XY) -/// |> startProfileAt([-12, 12], %) +/// |> startProfile(at = [-12, 12]) /// |> line(end = [24, 0]) /// |> line(end = [0, -24]) /// |> line(end = [-24, 0]) @@ -180,7 +180,7 @@ export type Sketch /// /// ```kcl,inline /// myPart = startSketchOn('XY') -/// |> startProfileAt([-12, 12], %) +/// |> startProfile(at = [-12, 12]) /// |> line(end = [24, 0]) /// |> line(end = [0, -24]) /// |> line(end = [-24, 0]) @@ -199,7 +199,7 @@ export type Sketch /// ```kcl,inline /// fn createPart() { /// return startSketchOn('XY') -/// |> startProfileAt([-12, 12], %) +/// |> startProfile(at = [-12, 12]) /// |> line(end = [24, 0]) /// |> line(end = [0, -24]) /// |> line(end = [-24, 0]) diff --git a/rust/kcl-lib/tests/angled_line/ast.snap b/rust/kcl-lib/tests/angled_line/ast.snap index c6a37fae6..86f2bb04b 100644 --- a/rust/kcl-lib/tests/angled_line/ast.snap +++ b/rust/kcl-lib/tests/angled_line/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing angled_line.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "4.83", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.83, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "4.83", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.83, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "12.56", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 12.56, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "12.56", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 12.56, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing angled_line.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing angled_line.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/angled_line/input.kcl b/rust/kcl-lib/tests/angled_line/input.kcl index 3d78556eb..b3f5e3ba7 100644 --- a/rust/kcl-lib/tests/angled_line/input.kcl +++ b/rust/kcl-lib/tests/angled_line/input.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn('XY') - |> startProfileAt([4.83, 12.56], %) + |> startProfile(at = [4.83, 12.56]) |> line(end = [15.1, 2.48]) |> line(end = [3.15, -9.85], tag = $seg01) |> line(end = [-15.17, -4.1]) diff --git a/rust/kcl-lib/tests/angled_line/unparsed.snap b/rust/kcl-lib/tests/angled_line/unparsed.snap index 4f4924ebf..10b4e6d55 100644 --- a/rust/kcl-lib/tests/angled_line/unparsed.snap +++ b/rust/kcl-lib/tests/angled_line/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing angled_line.kcl --- part001 = startSketchOn(XY) - |> startProfileAt([4.83, 12.56], %) + |> startProfile(at = [4.83, 12.56]) |> line(end = [15.1, 2.48]) |> line(end = [3.15, -9.85], tag = $seg01) |> line(end = [-15.17, -4.1]) diff --git a/rust/kcl-lib/tests/artifact_graph_example_code1/ast.snap b/rust/kcl-lib/tests/artifact_graph_example_code1/ast.snap index 1b038356c..26f377976 100644 --- a/rust/kcl-lib/tests/artifact_graph_example_code1/ast.snap +++ b/rust/kcl-lib/tests/artifact_graph_example_code1/ast.snap @@ -55,60 +55,63 @@ description: Result of parsing artifact_graph_example_code1.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "5", + "operator": "-", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" - } + "type": "UnaryExpression", + "type": "UnaryExpression" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "argument": { + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "5", + "operator": "-", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -118,7 +121,7 @@ description: Result of parsing artifact_graph_example_code1.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -129,8 +132,9 @@ description: Result of parsing artifact_graph_example_code1.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -790,60 +794,63 @@ description: Result of parsing artifact_graph_example_code1.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "2", + "operator": "-", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "UnaryExpression", + "type": "UnaryExpression" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "argument": { + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "6", + "operator": "-", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 6.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -853,7 +860,7 @@ description: Result of parsing artifact_graph_example_code1.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -864,8 +871,9 @@ description: Result of parsing artifact_graph_example_code1.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/artifact_graph_example_code1/input.kcl b/rust/kcl-lib/tests/artifact_graph_example_code1/input.kcl index b50d3b4d9..1c0abc54d 100644 --- a/rust/kcl-lib/tests/artifact_graph_example_code1/input.kcl +++ b/rust/kcl-lib/tests/artifact_graph_example_code1/input.kcl @@ -1,5 +1,5 @@ sketch001 = startSketchOn('XY') - |> startProfileAt([-5, -5], %) + |> startProfile(at = [-5, -5]) |> line(end = [0, 10]) |> line(end = [10.55, 0], tag = $seg01) |> line(end = [0, -10], tag = $seg02) @@ -8,7 +8,7 @@ sketch001 = startSketchOn('XY') extrude001 = extrude(sketch001, length = -10) |> fillet(radius = 5, tags = [seg01]) sketch002 = startSketchOn(extrude001, face = seg02) - |> startProfileAt([-2, -6], %) + |> startProfile(at = [-2, -6]) |> line(end = [2, 3]) |> line(end = [2, -3]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) diff --git a/rust/kcl-lib/tests/artifact_graph_example_code1/unparsed.snap b/rust/kcl-lib/tests/artifact_graph_example_code1/unparsed.snap index b1066870c..b6c1db457 100644 --- a/rust/kcl-lib/tests/artifact_graph_example_code1/unparsed.snap +++ b/rust/kcl-lib/tests/artifact_graph_example_code1/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing artifact_graph_example_code1.kcl --- sketch001 = startSketchOn(XY) - |> startProfileAt([-5, -5], %) + |> startProfile(at = [-5, -5]) |> line(end = [0, 10]) |> line(end = [10.55, 0], tag = $seg01) |> line(end = [0, -10], tag = $seg02) @@ -12,7 +12,7 @@ sketch001 = startSketchOn(XY) extrude001 = extrude(sketch001, length = -10) |> fillet(radius = 5, tags = [seg01]) sketch002 = startSketchOn(extrude001, face = seg02) - |> startProfileAt([-2, -6], %) + |> startProfile(at = [-2, -6]) |> line(end = [2, 3]) |> line(end = [2, -3]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) diff --git a/rust/kcl-lib/tests/artifact_graph_example_code_no_3d/ast.snap b/rust/kcl-lib/tests/artifact_graph_example_code_no_3d/ast.snap index 6e7ef93bf..c69262d16 100644 --- a/rust/kcl-lib/tests/artifact_graph_example_code_no_3d/ast.snap +++ b/rust/kcl-lib/tests/artifact_graph_example_code_no_3d/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing artifact_graph_example_code_no_3d.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "5.82", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.82, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "5.82", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.82, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing artifact_graph_example_code_no_3d.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing artifact_graph_example_code_no_3d.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -684,44 +688,47 @@ description: Result of parsing artifact_graph_example_code_no_3d.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "14.36", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 14.36, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "14.36", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 14.36, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -731,7 +738,7 @@ description: Result of parsing artifact_graph_example_code_no_3d.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -742,8 +749,9 @@ description: Result of parsing artifact_graph_example_code_no_3d.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/artifact_graph_example_code_no_3d/input.kcl b/rust/kcl-lib/tests/artifact_graph_example_code_no_3d/input.kcl index e2f8b35c0..e31ce5c23 100644 --- a/rust/kcl-lib/tests/artifact_graph_example_code_no_3d/input.kcl +++ b/rust/kcl-lib/tests/artifact_graph_example_code_no_3d/input.kcl @@ -1,12 +1,12 @@ sketch003 = startSketchOn('YZ') - |> startProfileAt([5.82, 0], %) + |> startProfile(at = [5.82, 0]) |> angledLine(angle = 180, length = 11.54, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 8.21, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch004 = startSketchOn('-XZ') - |> startProfileAt([0, 14.36], %) + |> startProfile(at = [0, 14.36]) |> line(end = [15.49, 0.05]) |> tangentialArc(endAbsolute = [0, 0]) |> tangentialArc(endAbsolute = [-6.8, 8.17]) diff --git a/rust/kcl-lib/tests/artifact_graph_example_code_no_3d/unparsed.snap b/rust/kcl-lib/tests/artifact_graph_example_code_no_3d/unparsed.snap index 882091554..5c630909a 100644 --- a/rust/kcl-lib/tests/artifact_graph_example_code_no_3d/unparsed.snap +++ b/rust/kcl-lib/tests/artifact_graph_example_code_no_3d/unparsed.snap @@ -3,14 +3,14 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing artifact_graph_example_code_no_3d.kcl --- sketch003 = startSketchOn(YZ) - |> startProfileAt([5.82, 0], %) + |> startProfile(at = [5.82, 0]) |> angledLine(angle = 180, length = 11.54, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 8.21, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch004 = startSketchOn(-XZ) - |> startProfileAt([0, 14.36], %) + |> startProfile(at = [0, 14.36]) |> line(end = [15.49, 0.05]) |> tangentialArc(endAbsolute = [0, 0]) |> tangentialArc(endAbsolute = [-6.8, 8.17]) diff --git a/rust/kcl-lib/tests/artifact_graph_example_code_offset_planes/ast.snap b/rust/kcl-lib/tests/artifact_graph_example_code_offset_planes/ast.snap index a0154d812..30c68633b 100644 --- a/rust/kcl-lib/tests/artifact_graph_example_code_offset_planes/ast.snap +++ b/rust/kcl-lib/tests/artifact_graph_example_code_offset_planes/ast.snap @@ -298,44 +298,47 @@ description: Result of parsing artifact_graph_example_code_offset_planes.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -345,7 +348,7 @@ description: Result of parsing artifact_graph_example_code_offset_planes.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -356,8 +359,9 @@ description: Result of parsing artifact_graph_example_code_offset_planes.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/artifact_graph_example_code_offset_planes/input.kcl b/rust/kcl-lib/tests/artifact_graph_example_code_offset_planes/input.kcl index dace451b0..dbdd05607 100644 --- a/rust/kcl-lib/tests/artifact_graph_example_code_offset_planes/input.kcl +++ b/rust/kcl-lib/tests/artifact_graph_example_code_offset_planes/input.kcl @@ -3,5 +3,5 @@ offsetPlane002 = offsetPlane("XZ", offset = -50) offsetPlane003 = offsetPlane("YZ", offset = 10) sketch002 = startSketchOn(offsetPlane001) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [6.78, 15.01]) diff --git a/rust/kcl-lib/tests/artifact_graph_example_code_offset_planes/unparsed.snap b/rust/kcl-lib/tests/artifact_graph_example_code_offset_planes/unparsed.snap index 7601bafda..4a25c7a85 100644 --- a/rust/kcl-lib/tests/artifact_graph_example_code_offset_planes/unparsed.snap +++ b/rust/kcl-lib/tests/artifact_graph_example_code_offset_planes/unparsed.snap @@ -7,5 +7,5 @@ offsetPlane002 = offsetPlane(XZ, offset = -50) offsetPlane003 = offsetPlane(YZ, offset = 10) sketch002 = startSketchOn(offsetPlane001) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [6.78, 15.01]) diff --git a/rust/kcl-lib/tests/artifact_graph_sketch_on_face_etc/ast.snap b/rust/kcl-lib/tests/artifact_graph_sketch_on_face_etc/ast.snap index 0e38b7f1a..51904aa69 100644 --- a/rust/kcl-lib/tests/artifact_graph_sketch_on_face_etc/ast.snap +++ b/rust/kcl-lib/tests/artifact_graph_sketch_on_face_etc/ast.snap @@ -62,44 +62,47 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -109,7 +112,7 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -120,8 +123,9 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -596,10 +600,38 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "0.5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.5, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { "commentStart": 0, "end": 0, "raw": "0.5", @@ -610,38 +642,13 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl "value": 0.5, "suffix": "None" } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.5, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -651,7 +658,7 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -662,8 +669,9 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1113,44 +1121,47 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "1.5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.5, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "1.5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.5, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1160,7 +1171,7 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1171,8 +1182,9 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1647,52 +1659,55 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "3", + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "raw": "14", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 3.0, + "value": 14.0, "suffix": "None" } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "14", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 14.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1702,7 +1717,7 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1713,8 +1728,9 @@ description: Result of parsing artifact_graph_sketch_on_face_etc.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/artifact_graph_sketch_on_face_etc/input.kcl b/rust/kcl-lib/tests/artifact_graph_sketch_on_face_etc/input.kcl index e77dd7be0..2b2f6edcd 100644 --- a/rust/kcl-lib/tests/artifact_graph_sketch_on_face_etc/input.kcl +++ b/rust/kcl-lib/tests/artifact_graph_sketch_on_face_etc/input.kcl @@ -1,26 +1,26 @@ sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [4, 8]) |> line(end = [5, -8], tag = $seg01) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude001 = extrude(sketch001, length = 6) sketch002 = startSketchOn(extrude001, face = seg01) - |> startProfileAt([-0.5, 0.5], %) + |> startProfile(at = [-0.5, 0.5]) |> line(end = [2, 5]) |> line(end = [2, -5]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude002 = extrude(sketch002, length = 5) sketch003 = startSketchOn(extrude002, face = 'END') - |> startProfileAt([1, 1.5], %) + |> startProfile(at = [1, 1.5]) |> line(end = [0.5, 2], tag = $seg02) |> line(end = [1, -2]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude003 = extrude(sketch003, length = 4) sketch004 = startSketchOn(extrude003, face = seg02) - |> startProfileAt([-3, 14], %) + |> startProfile(at = [-3, 14]) |> line(end = [0.5, 1]) |> line(end = [0.5, -2]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) diff --git a/rust/kcl-lib/tests/artifact_graph_sketch_on_face_etc/unparsed.snap b/rust/kcl-lib/tests/artifact_graph_sketch_on_face_etc/unparsed.snap index 92ab4a55c..ded4ed1d2 100644 --- a/rust/kcl-lib/tests/artifact_graph_sketch_on_face_etc/unparsed.snap +++ b/rust/kcl-lib/tests/artifact_graph_sketch_on_face_etc/unparsed.snap @@ -3,28 +3,28 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing artifact_graph_sketch_on_face_etc.kcl --- sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [4, 8]) |> line(end = [5, -8], tag = $seg01) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude001 = extrude(sketch001, length = 6) sketch002 = startSketchOn(extrude001, face = seg01) - |> startProfileAt([-0.5, 0.5], %) + |> startProfile(at = [-0.5, 0.5]) |> line(end = [2, 5]) |> line(end = [2, -5]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude002 = extrude(sketch002, length = 5) sketch003 = startSketchOn(extrude002, face = END) - |> startProfileAt([1, 1.5], %) + |> startProfile(at = [1, 1.5]) |> line(end = [0.5, 2], tag = $seg02) |> line(end = [1, -2]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude003 = extrude(sketch003, length = 4) sketch004 = startSketchOn(extrude003, face = seg02) - |> startProfileAt([-3, 14], %) + |> startProfile(at = [-3, 14]) |> line(end = [0.5, 1]) |> line(end = [0.5, -2]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) diff --git a/rust/kcl-lib/tests/assembly_mixed_units_cubes/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/assembly_mixed_units_cubes/artifact_graph_flowchart.snap.md index 7ff79822a..76ffd60c7 100644 --- a/rust/kcl-lib/tests/assembly_mixed_units_cubes/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/assembly_mixed_units_cubes/artifact_graph_flowchart.snap.md @@ -1,25 +1,25 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[76, 113, 6]"] - 3["Segment
[119, 136, 6]"] - 4["Segment
[142, 160, 6]"] - 5["Segment
[166, 184, 6]"] - 6["Segment
[190, 246, 6]"] - 7["Segment
[252, 259, 6]"] + 2["Path
[76, 116, 6]"] + 3["Segment
[122, 139, 6]"] + 4["Segment
[145, 163, 6]"] + 5["Segment
[169, 187, 6]"] + 6["Segment
[193, 249, 6]"] + 7["Segment
[255, 262, 6]"] 8[Solid2d] end subgraph path25 [Path] - 25["Path
[76, 111, 7]"] - 26["Segment
[117, 134, 7]"] - 27["Segment
[140, 158, 7]"] - 28["Segment
[164, 182, 7]"] - 29["Segment
[188, 244, 7]"] - 30["Segment
[250, 257, 7]"] + 25["Path
[76, 114, 7]"] + 26["Segment
[120, 137, 7]"] + 27["Segment
[143, 161, 7]"] + 28["Segment
[167, 185, 7]"] + 29["Segment
[191, 247, 7]"] + 30["Segment
[253, 260, 7]"] 31[Solid2d] end 1["Plane
[47, 66, 6]"] - 9["Sweep Extrusion
[265, 287, 6]"] + 9["Sweep Extrusion
[268, 290, 6]"] 10[Wall] 11[Wall] 12[Wall] @@ -35,7 +35,7 @@ flowchart LR 22["SweepEdge Opposite"] 23["SweepEdge Adjacent"] 24["Plane
[47, 66, 7]"] - 32["Sweep Extrusion
[263, 285, 7]"] + 32["Sweep Extrusion
[266, 288, 7]"] 33[Wall] 34[Wall] 35[Wall] diff --git a/rust/kcl-lib/tests/assembly_mixed_units_cubes/cube-inches.kcl b/rust/kcl-lib/tests/assembly_mixed_units_cubes/cube-inches.kcl index dbd2d6a10..88463c03d 100644 --- a/rust/kcl-lib/tests/assembly_mixed_units_cubes/cube-inches.kcl +++ b/rust/kcl-lib/tests/assembly_mixed_units_cubes/cube-inches.kcl @@ -1,7 +1,7 @@ @settings(defaultLengthUnit = in) sketch001 = startSketchOn('XY') -cubeIn = startProfileAt([-10, -10], sketch001) +cubeIn = startProfile(sketch001, at = [-10, -10]) |> xLine(length = 5) |> yLine(length = -5) |> xLine(length = -5) diff --git a/rust/kcl-lib/tests/assembly_mixed_units_cubes/cube-mm.kcl b/rust/kcl-lib/tests/assembly_mixed_units_cubes/cube-mm.kcl index 893cfcf4a..1fa0012b2 100644 --- a/rust/kcl-lib/tests/assembly_mixed_units_cubes/cube-mm.kcl +++ b/rust/kcl-lib/tests/assembly_mixed_units_cubes/cube-mm.kcl @@ -1,7 +1,7 @@ @settings(defaultLengthUnit = mm) sketch001 = startSketchOn('XY') -cubeMm = startProfileAt([10, 10], sketch001) +cubeMm = startProfile(sketch001, at = [10, 10]) |> xLine(length = 5) |> yLine(length = -5) |> xLine(length = -5) diff --git a/rust/kcl-lib/tests/assembly_mixed_units_cubes/unparsed@cube-inches.kcl.snap b/rust/kcl-lib/tests/assembly_mixed_units_cubes/unparsed@cube-inches.kcl.snap index 3e5740699..023dc5a50 100644 --- a/rust/kcl-lib/tests/assembly_mixed_units_cubes/unparsed@cube-inches.kcl.snap +++ b/rust/kcl-lib/tests/assembly_mixed_units_cubes/unparsed@cube-inches.kcl.snap @@ -5,7 +5,7 @@ description: Result of unparsing tests/assembly_mixed_units_cubes/cube-inches.kc @settings(defaultLengthUnit = in) sketch001 = startSketchOn(XY) -cubeIn = startProfileAt([-10, -10], sketch001) +cubeIn = startProfile(sketch001, at = [-10, -10]) |> xLine(length = 5) |> yLine(length = -5) |> xLine(length = -5) diff --git a/rust/kcl-lib/tests/assembly_mixed_units_cubes/unparsed@cube-mm.kcl.snap b/rust/kcl-lib/tests/assembly_mixed_units_cubes/unparsed@cube-mm.kcl.snap index d576d0b69..b4a648208 100644 --- a/rust/kcl-lib/tests/assembly_mixed_units_cubes/unparsed@cube-mm.kcl.snap +++ b/rust/kcl-lib/tests/assembly_mixed_units_cubes/unparsed@cube-mm.kcl.snap @@ -5,7 +5,7 @@ description: Result of unparsing tests/assembly_mixed_units_cubes/cube-mm.kcl @settings(defaultLengthUnit = mm) sketch001 = startSketchOn(XY) -cubeMm = startProfileAt([10, 10], sketch001) +cubeMm = startProfile(sketch001, at = [10, 10]) |> xLine(length = 5) |> yLine(length = -5) |> xLine(length = -5) diff --git a/rust/kcl-lib/tests/basic_fillet_cube_close_opposite/ast.snap b/rust/kcl-lib/tests/basic_fillet_cube_close_opposite/ast.snap index 77b1f06e8..8bfc96bae 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_close_opposite/ast.snap +++ b/rust/kcl-lib/tests/basic_fillet_cube_close_opposite/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing basic_fillet_cube_close_opposite.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing basic_fillet_cube_close_opposite.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing basic_fillet_cube_close_opposite.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/basic_fillet_cube_close_opposite/input.kcl b/rust/kcl-lib/tests/basic_fillet_cube_close_opposite/input.kcl index 5283257f9..32cde14fc 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_close_opposite/input.kcl +++ b/rust/kcl-lib/tests/basic_fillet_cube_close_opposite/input.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/tests/basic_fillet_cube_close_opposite/unparsed.snap b/rust/kcl-lib/tests/basic_fillet_cube_close_opposite/unparsed.snap index 837d8eabb..6d9118f32 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_close_opposite/unparsed.snap +++ b/rust/kcl-lib/tests/basic_fillet_cube_close_opposite/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing basic_fillet_cube_close_opposite.kcl --- part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/tests/basic_fillet_cube_end/ast.snap b/rust/kcl-lib/tests/basic_fillet_cube_end/ast.snap index df3f4aaa2..82ae02b84 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_end/ast.snap +++ b/rust/kcl-lib/tests/basic_fillet_cube_end/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing basic_fillet_cube_end.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing basic_fillet_cube_end.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing basic_fillet_cube_end.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/basic_fillet_cube_end/input.kcl b/rust/kcl-lib/tests/basic_fillet_cube_end/input.kcl index 1c2a68b35..60d28dbbc 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_end/input.kcl +++ b/rust/kcl-lib/tests/basic_fillet_cube_end/input.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/tests/basic_fillet_cube_end/unparsed.snap b/rust/kcl-lib/tests/basic_fillet_cube_end/unparsed.snap index 7ccce9cf2..d189376df 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_end/unparsed.snap +++ b/rust/kcl-lib/tests/basic_fillet_cube_end/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing basic_fillet_cube_end.kcl --- part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/tests/basic_fillet_cube_next_adjacent/ast.snap b/rust/kcl-lib/tests/basic_fillet_cube_next_adjacent/ast.snap index d519bb631..f52b62f6e 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_next_adjacent/ast.snap +++ b/rust/kcl-lib/tests/basic_fillet_cube_next_adjacent/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing basic_fillet_cube_next_adjacent.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing basic_fillet_cube_next_adjacent.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing basic_fillet_cube_next_adjacent.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/basic_fillet_cube_next_adjacent/input.kcl b/rust/kcl-lib/tests/basic_fillet_cube_next_adjacent/input.kcl index ec7e60f82..beb7c70d5 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_next_adjacent/input.kcl +++ b/rust/kcl-lib/tests/basic_fillet_cube_next_adjacent/input.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0], tag = $thing1) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/tests/basic_fillet_cube_next_adjacent/unparsed.snap b/rust/kcl-lib/tests/basic_fillet_cube_next_adjacent/unparsed.snap index 9ff053f6b..7239e0e47 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_next_adjacent/unparsed.snap +++ b/rust/kcl-lib/tests/basic_fillet_cube_next_adjacent/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing basic_fillet_cube_next_adjacent.kcl --- part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0], tag = $thing1) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/tests/basic_fillet_cube_previous_adjacent/ast.snap b/rust/kcl-lib/tests/basic_fillet_cube_previous_adjacent/ast.snap index d2adda442..3acfa2d05 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_previous_adjacent/ast.snap +++ b/rust/kcl-lib/tests/basic_fillet_cube_previous_adjacent/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing basic_fillet_cube_previous_adjacent.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing basic_fillet_cube_previous_adjacent.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing basic_fillet_cube_previous_adjacent.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/basic_fillet_cube_previous_adjacent/input.kcl b/rust/kcl-lib/tests/basic_fillet_cube_previous_adjacent/input.kcl index e22ff5a54..100d29f3a 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_previous_adjacent/input.kcl +++ b/rust/kcl-lib/tests/basic_fillet_cube_previous_adjacent/input.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0], tag = $thing1) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/tests/basic_fillet_cube_previous_adjacent/unparsed.snap b/rust/kcl-lib/tests/basic_fillet_cube_previous_adjacent/unparsed.snap index 46eb82f52..10b47069e 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_previous_adjacent/unparsed.snap +++ b/rust/kcl-lib/tests/basic_fillet_cube_previous_adjacent/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing basic_fillet_cube_previous_adjacent.kcl --- part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0], tag = $thing1) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/tests/basic_fillet_cube_start/ast.snap b/rust/kcl-lib/tests/basic_fillet_cube_start/ast.snap index 898910108..bc160fbdb 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_start/ast.snap +++ b/rust/kcl-lib/tests/basic_fillet_cube_start/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing basic_fillet_cube_start.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing basic_fillet_cube_start.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing basic_fillet_cube_start.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/basic_fillet_cube_start/input.kcl b/rust/kcl-lib/tests/basic_fillet_cube_start/input.kcl index 024d3c8ca..619e34c9a 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_start/input.kcl +++ b/rust/kcl-lib/tests/basic_fillet_cube_start/input.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/tests/basic_fillet_cube_start/unparsed.snap b/rust/kcl-lib/tests/basic_fillet_cube_start/unparsed.snap index 761d820db..6f1f29eb1 100644 --- a/rust/kcl-lib/tests/basic_fillet_cube_start/unparsed.snap +++ b/rust/kcl-lib/tests/basic_fillet_cube_start/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing basic_fillet_cube_start.kcl --- part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $thing) |> line(end = [10, 0]) |> line(end = [0, -10], tag = $thing2) diff --git a/rust/kcl-lib/tests/big_number_angle_to_match_length_x/ast.snap b/rust/kcl-lib/tests/big_number_angle_to_match_length_x/ast.snap new file mode 100644 index 000000000..25991a9ad --- /dev/null +++ b/rust/kcl-lib/tests/big_number_angle_to_match_length_x/ast.snap @@ -0,0 +1,432 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Result of parsing big_number_angle_to_match_length_x.kcl +--- +{ + "Ok": { + "body": [ + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "part001", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "arguments": [ + { + "commentStart": 0, + "end": 0, + "raw": "'XY'", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": "XY" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "end", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "3.82", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.82, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "TagDeclarator", + "type": "TagDeclarator", + "value": "seg01" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "line", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "arguments": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg01", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angleToMatchLengthX", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsoluteX", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "close", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + } + ], + "commentStart": 0, + "end": 0, + "start": 0 + } +} diff --git a/rust/kcl-lib/tests/big_number_angle_to_match_length_x/input.kcl b/rust/kcl-lib/tests/big_number_angle_to_match_length_x/input.kcl new file mode 100644 index 000000000..2f6ea6184 --- /dev/null +++ b/rust/kcl-lib/tests/big_number_angle_to_match_length_x/input.kcl @@ -0,0 +1,6 @@ +part001 = startSketchOn('XY') + |> startProfile(at = [0, 0]) + |> line(end = [1, 3.82], tag = $seg01) + |> angledLine(angle = -angleToMatchLengthX(seg01, 3, %), endAbsoluteX = 3) + |> close(%) + |> extrude(length = 10) diff --git a/rust/kcl-lib/tests/big_number_angle_to_match_length_x/unparsed.snap b/rust/kcl-lib/tests/big_number_angle_to_match_length_x/unparsed.snap new file mode 100644 index 000000000..ad2b23c7c --- /dev/null +++ b/rust/kcl-lib/tests/big_number_angle_to_match_length_x/unparsed.snap @@ -0,0 +1,10 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Result of unparsing big_number_angle_to_match_length_x.kcl +--- +part001 = startSketchOn(XY) + |> startProfile(at = [0, 0]) + |> line(end = [1, 3.82], tag = $seg01) + |> angledLine(angle = -angleToMatchLengthX(seg01, 3, %), endAbsoluteX = 3) + |> close(%) + |> extrude(length = 10) diff --git a/rust/kcl-lib/tests/big_number_angle_to_match_length_y/ast.snap b/rust/kcl-lib/tests/big_number_angle_to_match_length_y/ast.snap new file mode 100644 index 000000000..54e0a3d41 --- /dev/null +++ b/rust/kcl-lib/tests/big_number_angle_to_match_length_y/ast.snap @@ -0,0 +1,432 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Result of parsing big_number_angle_to_match_length_y.kcl +--- +{ + "Ok": { + "body": [ + { + "commentStart": 0, + "declaration": { + "commentStart": 0, + "end": 0, + "id": { + "commentStart": 0, + "end": 0, + "name": "part001", + "start": 0, + "type": "Identifier" + }, + "init": { + "body": [ + { + "arguments": [ + { + "commentStart": 0, + "end": 0, + "raw": "'XY'", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": "XY" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startSketchOn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startProfile", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "end", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "3.82", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.82, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "TagDeclarator", + "type": "TagDeclarator", + "value": "seg01" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "line", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "arguments": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg01", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angleToMatchLengthY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsoluteX", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angledLine", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "close", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "extrude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + }, + "start": 0, + "type": "VariableDeclarator" + }, + "end": 0, + "kind": "const", + "start": 0, + "type": "VariableDeclaration", + "type": "VariableDeclaration" + } + ], + "commentStart": 0, + "end": 0, + "start": 0 + } +} diff --git a/rust/kcl-lib/tests/big_number_angle_to_match_length_y/input.kcl b/rust/kcl-lib/tests/big_number_angle_to_match_length_y/input.kcl new file mode 100644 index 000000000..1b1fda2da --- /dev/null +++ b/rust/kcl-lib/tests/big_number_angle_to_match_length_y/input.kcl @@ -0,0 +1,6 @@ +part001 = startSketchOn('XY') + |> startProfile(at = [0, 0]) + |> line(end = [1, 3.82], tag = $seg01) + |> angledLine(angle = -angleToMatchLengthY(seg01, 3, %), endAbsoluteX = 3) + |> close(%) + |> extrude(length = 10) diff --git a/rust/kcl-lib/tests/big_number_angle_to_match_length_y/unparsed.snap b/rust/kcl-lib/tests/big_number_angle_to_match_length_y/unparsed.snap new file mode 100644 index 000000000..62b8c69a4 --- /dev/null +++ b/rust/kcl-lib/tests/big_number_angle_to_match_length_y/unparsed.snap @@ -0,0 +1,10 @@ +--- +source: kcl-lib/src/simulation_tests.rs +description: Result of unparsing big_number_angle_to_match_length_y.kcl +--- +part001 = startSketchOn(XY) + |> startProfile(at = [0, 0]) + |> line(end = [1, 3.82], tag = $seg01) + |> angledLine(angle = -angleToMatchLengthY(seg01, 3, %), endAbsoluteX = 3) + |> close(%) + |> extrude(length = 10) diff --git a/rust/kcl-lib/tests/circular_pattern3d_a_pattern/ast.snap b/rust/kcl-lib/tests/circular_pattern3d_a_pattern/ast.snap index a60fe1249..a28af4f58 100644 --- a/rust/kcl-lib/tests/circular_pattern3d_a_pattern/ast.snap +++ b/rust/kcl-lib/tests/circular_pattern3d_a_pattern/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing circular_pattern3d_a_pattern.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/circular_pattern3d_a_pattern/input.kcl b/rust/kcl-lib/tests/circular_pattern3d_a_pattern/input.kcl index cece9fa3f..4beb79e41 100644 --- a/rust/kcl-lib/tests/circular_pattern3d_a_pattern/input.kcl +++ b/rust/kcl-lib/tests/circular_pattern3d_a_pattern/input.kcl @@ -1,5 +1,5 @@ exampleSketch = startSketchOn('XZ') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 2]) |> line(end = [3, 1]) |> line(end = [0, -4]) diff --git a/rust/kcl-lib/tests/circular_pattern3d_a_pattern/unparsed.snap b/rust/kcl-lib/tests/circular_pattern3d_a_pattern/unparsed.snap index 025ac304f..153789daa 100644 --- a/rust/kcl-lib/tests/circular_pattern3d_a_pattern/unparsed.snap +++ b/rust/kcl-lib/tests/circular_pattern3d_a_pattern/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing circular_pattern3d_a_pattern.kcl --- exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 2]) |> line(end = [3, 1]) |> line(end = [0, -4]) diff --git a/rust/kcl-lib/tests/crazy_multi_profile/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/crazy_multi_profile/artifact_graph_flowchart.snap.md index 2d22763f9..d2ffc6953 100644 --- a/rust/kcl-lib/tests/crazy_multi_profile/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/crazy_multi_profile/artifact_graph_flowchart.snap.md @@ -1,85 +1,85 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[43, 83, 0]"] - 3["Segment
[89, 127, 0]"] - 4["Segment
[133, 172, 0]"] - 5["Segment
[178, 234, 0]"] - 6["Segment
[240, 247, 0]"] + 2["Path
[43, 86, 0]"] + 3["Segment
[92, 130, 0]"] + 4["Segment
[136, 175, 0]"] + 5["Segment
[181, 237, 0]"] + 6["Segment
[243, 250, 0]"] 7[Solid2d] end subgraph path20 [Path] - 20["Path
[359, 399, 0]"] - 21["Segment
[405, 429, 0]"] - 22["Segment
[435, 460, 0]"] + 20["Path
[362, 405, 0]"] + 21["Segment
[411, 435, 0]"] + 22["Segment
[441, 466, 0]"] end subgraph path23 [Path] - 23["Path
[474, 513, 0]"] - 24["Segment
[519, 584, 0]"] - 25["Segment
[590, 658, 0]"] - 26["Segment
[664, 752, 0]"] - 27["Segment
[758, 814, 0]"] - 28["Segment
[820, 827, 0]"] + 23["Path
[480, 522, 0]"] + 24["Segment
[528, 593, 0]"] + 25["Segment
[599, 667, 0]"] + 26["Segment
[673, 761, 0]"] + 27["Segment
[767, 823, 0]"] + 28["Segment
[829, 836, 0]"] 29[Solid2d] end subgraph path30 [Path] - 30["Path
[841, 880, 0]"] - 31["Segment
[886, 906, 0]"] - 32["Segment
[912, 938, 0]"] - 33["Segment
[944, 1000, 0]"] - 34["Segment
[1006, 1013, 0]"] + 30["Path
[850, 892, 0]"] + 31["Segment
[898, 918, 0]"] + 32["Segment
[924, 950, 0]"] + 33["Segment
[956, 1012, 0]"] + 34["Segment
[1018, 1025, 0]"] 35[Solid2d] end subgraph path36 [Path] - 36["Path
[1027, 1082, 0]"] - 37["Segment
[1027, 1082, 0]"] + 36["Path
[1039, 1094, 0]"] + 37["Segment
[1039, 1094, 0]"] 38[Solid2d] end subgraph path39 [Path] - 39["Path
[1096, 1135, 0]"] - 40["Segment
[1141, 1165, 0]"] - 41["Segment
[1171, 1196, 0]"] - 42["Segment
[1202, 1258, 0]"] - 43["Segment
[1264, 1271, 0]"] + 39["Path
[1108, 1150, 0]"] + 40["Segment
[1156, 1180, 0]"] + 41["Segment
[1186, 1211, 0]"] + 42["Segment
[1217, 1273, 0]"] + 43["Segment
[1279, 1286, 0]"] 44[Solid2d] end subgraph path59 [Path] - 59["Path
[1441, 1479, 0]"] - 60["Segment
[1485, 1509, 0]"] - 61["Segment
[1515, 1540, 0]"] + 59["Path
[1456, 1497, 0]"] + 60["Segment
[1503, 1527, 0]"] + 61["Segment
[1533, 1558, 0]"] end subgraph path62 [Path] - 62["Path
[1554, 1593, 0]"] - 63["Segment
[1599, 1623, 0]"] - 64["Segment
[1629, 1654, 0]"] - 65["Segment
[1660, 1716, 0]"] - 66["Segment
[1722, 1729, 0]"] + 62["Path
[1572, 1614, 0]"] + 63["Segment
[1620, 1644, 0]"] + 64["Segment
[1650, 1675, 0]"] + 65["Segment
[1681, 1737, 0]"] + 66["Segment
[1743, 1750, 0]"] 67[Solid2d] end subgraph path68 [Path] - 68["Path
[1743, 1782, 0]"] - 69["Segment
[1788, 1811, 0]"] - 70["Segment
[1817, 1842, 0]"] - 71["Segment
[1848, 1904, 0]"] - 72["Segment
[1910, 1917, 0]"] + 68["Path
[1764, 1806, 0]"] + 69["Segment
[1812, 1835, 0]"] + 70["Segment
[1841, 1866, 0]"] + 71["Segment
[1872, 1928, 0]"] + 72["Segment
[1934, 1941, 0]"] 73[Solid2d] end subgraph path74 [Path] - 74["Path
[1931, 1987, 0]"] - 75["Segment
[1931, 1987, 0]"] + 74["Path
[1955, 2011, 0]"] + 75["Segment
[1955, 2011, 0]"] 76[Solid2d] end subgraph path77 [Path] - 77["Path
[2001, 2041, 0]"] - 78["Segment
[2047, 2112, 0]"] - 79["Segment
[2118, 2186, 0]"] - 80["Segment
[2192, 2280, 0]"] - 81["Segment
[2286, 2342, 0]"] - 82["Segment
[2348, 2355, 0]"] + 77["Path
[2025, 2068, 0]"] + 78["Segment
[2074, 2139, 0]"] + 79["Segment
[2145, 2213, 0]"] + 80["Segment
[2219, 2307, 0]"] + 81["Segment
[2313, 2369, 0]"] + 82["Segment
[2375, 2382, 0]"] 83[Solid2d] end 1["Plane
[12, 29, 0]"] - 8["Sweep Extrusion
[261, 293, 0]"] + 8["Sweep Extrusion
[264, 296, 0]"] 9[Wall] 10[Wall] 11[Wall] @@ -91,8 +91,8 @@ flowchart LR 17["SweepEdge Adjacent"] 18["SweepEdge Opposite"] 19["SweepEdge Adjacent"] - 45["Sweep RevolveAboutEdge
[1285, 1351, 0]"] - 46["Sweep Extrusion
[1365, 1396, 0]"] + 45["Sweep RevolveAboutEdge
[1300, 1366, 0]"] + 46["Sweep Extrusion
[1380, 1411, 0]"] 47[Wall] 48[Wall] 49[Wall] @@ -104,8 +104,8 @@ flowchart LR 55["SweepEdge Adjacent"] 56["SweepEdge Opposite"] 57["SweepEdge Adjacent"] - 58["Plane
[1409, 1427, 0]"] - 84["Sweep Extrusion
[2369, 2402, 0]"] + 58["Plane
[1424, 1442, 0]"] + 84["Sweep Extrusion
[2396, 2429, 0]"] 85[Wall] 86[Wall] 87[Wall] @@ -120,7 +120,7 @@ flowchart LR 96["SweepEdge Adjacent"] 97["SweepEdge Opposite"] 98["SweepEdge Adjacent"] - 99["Sweep RevolveAboutEdge
[2416, 2461, 0]"] + 99["Sweep RevolveAboutEdge
[2443, 2488, 0]"] 100[Wall] 101[Wall] 102[Wall] @@ -132,7 +132,7 @@ flowchart LR 108["SweepEdge Adjacent"] 109["SweepEdge Opposite"] 110["SweepEdge Adjacent"] - 111["StartSketchOnFace
[306, 345, 0]"] + 111["StartSketchOnFace
[309, 348, 0]"] 1 --- 2 2 --- 3 2 --- 4 diff --git a/rust/kcl-lib/tests/crazy_multi_profile/ast.snap b/rust/kcl-lib/tests/crazy_multi_profile/ast.snap index 0f359917c..66d3fda65 100644 --- a/rust/kcl-lib/tests/crazy_multi_profile/ast.snap +++ b/rust/kcl-lib/tests/crazy_multi_profile/ast.snap @@ -83,61 +83,55 @@ description: Result of parsing crazy_multi_profile.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "6.71", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 6.71, - "suffix": "None" - } - }, - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "raw": "3.66", + "raw": "6.71", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 3.66, + "value": 6.71, "suffix": "None" } }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "3.66", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.66, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], "end": 0, - "name": "sketch001", "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -147,7 +141,7 @@ description: Result of parsing crazy_multi_profile.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -158,8 +152,24 @@ description: Result of parsing crazy_multi_profile.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch001", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -673,53 +683,47 @@ description: Result of parsing crazy_multi_profile.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0.75", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.75, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "13.46", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 13.46, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "sketch002", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0.75", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.75, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "13.46", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 13.46, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -729,7 +733,7 @@ description: Result of parsing crazy_multi_profile.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -740,8 +744,24 @@ description: Result of parsing crazy_multi_profile.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch002", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -920,53 +940,47 @@ description: Result of parsing crazy_multi_profile.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "3.19", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.19, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "13.3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 13.3, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "sketch002", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "3.19", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.19, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "13.3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 13.3, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -976,7 +990,7 @@ description: Result of parsing crazy_multi_profile.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -987,8 +1001,24 @@ description: Result of parsing crazy_multi_profile.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch002", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -1489,53 +1519,47 @@ description: Result of parsing crazy_multi_profile.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "3.15", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.15, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "9.39", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 9.39, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "sketch002", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "3.15", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.15, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "9.39", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 9.39, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1545,7 +1569,7 @@ description: Result of parsing crazy_multi_profile.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1556,8 +1580,24 @@ description: Result of parsing crazy_multi_profile.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch002", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -1978,53 +2018,47 @@ description: Result of parsing crazy_multi_profile.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "9.65", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 9.65, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "3.82", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.82, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "sketch002", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "9.65", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 9.65, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "3.82", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.82, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2034,7 +2068,7 @@ description: Result of parsing crazy_multi_profile.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2045,8 +2079,24 @@ description: Result of parsing crazy_multi_profile.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch002", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -2639,53 +2689,47 @@ description: Result of parsing crazy_multi_profile.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "4.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.8, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "7.55", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 7.55, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "sketch003", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "4.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.8, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "7.55", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 7.55, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2695,7 +2739,7 @@ description: Result of parsing crazy_multi_profile.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2706,8 +2750,24 @@ description: Result of parsing crazy_multi_profile.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch003", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -2886,53 +2946,47 @@ description: Result of parsing crazy_multi_profile.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "5.54", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.54, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "5.49", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.49, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "sketch003", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "5.54", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.54, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "5.49", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.49, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2942,7 +2996,7 @@ description: Result of parsing crazy_multi_profile.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2953,8 +3007,24 @@ description: Result of parsing crazy_multi_profile.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch003", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -3262,53 +3332,47 @@ description: Result of parsing crazy_multi_profile.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "5.23", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.23, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "1.95", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.95, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "sketch003", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "5.23", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.23, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "1.95", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.95, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -3318,7 +3382,7 @@ description: Result of parsing crazy_multi_profile.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -3329,8 +3393,24 @@ description: Result of parsing crazy_multi_profile.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch003", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -3772,61 +3852,55 @@ description: Result of parsing crazy_multi_profile.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "5.07", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.07, - "suffix": "None" - } - }, - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "raw": "6.39", + "raw": "5.07", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 6.39, + "value": 5.07, "suffix": "None" } }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "6.39", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.39, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], "end": 0, - "name": "sketch003", "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -3836,7 +3910,7 @@ description: Result of parsing crazy_multi_profile.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -3847,8 +3921,24 @@ description: Result of parsing crazy_multi_profile.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch003", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ diff --git a/rust/kcl-lib/tests/crazy_multi_profile/input.kcl b/rust/kcl-lib/tests/crazy_multi_profile/input.kcl index fbc87b9ac..00710bd37 100644 --- a/rust/kcl-lib/tests/crazy_multi_profile/input.kcl +++ b/rust/kcl-lib/tests/crazy_multi_profile/input.kcl @@ -1,27 +1,27 @@ sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([6.71, -3.66], sketch001) +profile001 = startProfile(sketch001, at = [6.71, -3.66]) |> line(end = [2.65, 9.02], tag = $seg02) |> line(end = [3.73, -9.36], tag = $seg01) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude001 = extrude(profile001, length = 20) sketch002 = startSketchOn(extrude001, face = seg01) -profile002 = startProfileAt([0.75, 13.46], sketch002) +profile002 = startProfile(sketch002, at = [0.75, 13.46]) |> line(end = [4.52, 3.79]) |> line(end = [5.98, -2.81]) -profile003 = startProfileAt([3.19, 13.3], sketch002) +profile003 = startProfile(sketch002, at = [3.19, 13.3]) |> angledLine(angle = 0, length = 6.64, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2.81) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() -profile004 = startProfileAt([3.15, 9.39], sketch002) +profile004 = startProfile(sketch002, at = [3.15, 9.39]) |> xLine(length = 6.92) |> line(end = [-7.41, -2.85]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() profile005 = circle(sketch002, center = [5.15, 4.34], radius = 1.66) -profile006 = startProfileAt([9.65, 3.82], sketch002) +profile006 = startProfile(sketch002, at = [9.65, 3.82]) |> line(end = [2.38, 5.62]) |> line(end = [2.13, -5.57]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -29,21 +29,21 @@ profile006 = startProfileAt([9.65, 3.82], sketch002) revolve001 = revolve(profile004, angle = 45, axis = getNextAdjacentEdge(seg01)) extrude002 = extrude(profile006, length = 4) sketch003 = startSketchOn(-XZ) -profile007 = startProfileAt([4.8, 7.55], sketch003) +profile007 = startProfile(sketch003, at = [4.8, 7.55]) |> line(end = [7.39, 2.58]) |> line(end = [7.02, -2.85]) -profile008 = startProfileAt([5.54, 5.49], sketch003) +profile008 = startProfile(sketch003, at = [5.54, 5.49]) |> line(end = [6.34, 2.64]) |> line(end = [6.33, -2.96]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() -profile009 = startProfileAt([5.23, 1.95], sketch003) +profile009 = startProfile(sketch003, at = [5.23, 1.95]) |> line(end = [6.8, 2.17]) |> line(end = [7.34, -2.75]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() profile010 = circle(sketch003, center = [7.18, -2.11], radius = 2.67) -profile011 = startProfileAt([5.07, -6.39], sketch003) +profile011 = startProfile(sketch003, at = [5.07, -6.39]) |> angledLine(angle = 0, length = 4.54, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 4.17) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) diff --git a/rust/kcl-lib/tests/crazy_multi_profile/program_memory.snap b/rust/kcl-lib/tests/crazy_multi_profile/program_memory.snap index a22eab2c2..056982ed7 100644 --- a/rust/kcl-lib/tests/crazy_multi_profile/program_memory.snap +++ b/rust/kcl-lib/tests/crazy_multi_profile/program_memory.snap @@ -15,9 +15,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -28,9 +28,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -58,9 +58,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl -3.66 ], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -83,9 +83,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl 5.36 ], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -351,9 +351,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -364,9 +364,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -394,9 +394,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl -3.66 ], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -419,9 +419,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl 5.36 ], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -594,9 +594,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2090, - "end": 2111, - "start": 2090, + "commentStart": 2117, + "end": 2138, + "start": 2117, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -638,9 +638,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl -6.39 ], "tag": { - "commentStart": 2090, - "end": 2111, - "start": 2090, + "commentStart": 2117, + "end": 2138, + "start": 2117, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -815,9 +815,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl -3.66 ], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -840,9 +840,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl 5.36 ], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -1035,9 +1035,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -1048,9 +1048,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -1078,9 +1078,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl -3.66 ], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -1103,9 +1103,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl 5.36 ], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -1274,9 +1274,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl 13.3 ], "tag": { - "commentStart": 562, - "end": 583, - "start": 562, + "commentStart": 571, + "end": 592, + "start": 571, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -1397,9 +1397,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -1410,9 +1410,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -1440,9 +1440,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl -3.66 ], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -1465,9 +1465,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl 5.36 ], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -1740,9 +1740,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -1753,9 +1753,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -1783,9 +1783,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl -3.66 ], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -1808,9 +1808,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl 5.36 ], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -2026,9 +2026,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -2039,9 +2039,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -2069,9 +2069,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl -3.66 ], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -2094,9 +2094,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl 5.36 ], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -2363,9 +2363,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -2376,9 +2376,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -2406,9 +2406,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl -3.66 ], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -2431,9 +2431,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl 5.36 ], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -3065,9 +3065,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl -6.39 ], "tag": { - "commentStart": 2090, - "end": 2111, - "start": 2090, + "commentStart": 2117, + "end": 2138, + "start": 2117, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -3347,9 +3347,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -3360,9 +3360,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -3390,9 +3390,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl -3.66 ], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -3415,9 +3415,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl 5.36 ], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -3825,9 +3825,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -3838,9 +3838,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, @@ -3868,9 +3868,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl -3.66 ], "tag": { - "commentStart": 120, - "end": 126, - "start": 120, + "commentStart": 123, + "end": 129, + "start": 123, "type": "TagDeclarator", "value": "seg02" }, @@ -3893,9 +3893,9 @@ description: Variables in memory after executing crazy_multi_profile.kcl 5.36 ], "tag": { - "commentStart": 165, - "end": 171, - "start": 165, + "commentStart": 168, + "end": 174, + "start": 168, "type": "TagDeclarator", "value": "seg01" }, diff --git a/rust/kcl-lib/tests/crazy_multi_profile/unparsed.snap b/rust/kcl-lib/tests/crazy_multi_profile/unparsed.snap index 6a6f69307..bf27cae58 100644 --- a/rust/kcl-lib/tests/crazy_multi_profile/unparsed.snap +++ b/rust/kcl-lib/tests/crazy_multi_profile/unparsed.snap @@ -3,29 +3,29 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing crazy_multi_profile.kcl --- sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([6.71, -3.66], sketch001) +profile001 = startProfile(sketch001, at = [6.71, -3.66]) |> line(end = [2.65, 9.02], tag = $seg02) |> line(end = [3.73, -9.36], tag = $seg01) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude001 = extrude(profile001, length = 20) sketch002 = startSketchOn(extrude001, face = seg01) -profile002 = startProfileAt([0.75, 13.46], sketch002) +profile002 = startProfile(sketch002, at = [0.75, 13.46]) |> line(end = [4.52, 3.79]) |> line(end = [5.98, -2.81]) -profile003 = startProfileAt([3.19, 13.3], sketch002) +profile003 = startProfile(sketch002, at = [3.19, 13.3]) |> angledLine(angle = 0, length = 6.64, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2.81) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() -profile004 = startProfileAt([3.15, 9.39], sketch002) +profile004 = startProfile(sketch002, at = [3.15, 9.39]) |> xLine(length = 6.92) |> line(end = [-7.41, -2.85]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() profile005 = circle(sketch002, center = [5.15, 4.34], radius = 1.66) -profile006 = startProfileAt([9.65, 3.82], sketch002) +profile006 = startProfile(sketch002, at = [9.65, 3.82]) |> line(end = [2.38, 5.62]) |> line(end = [2.13, -5.57]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -33,21 +33,21 @@ profile006 = startProfileAt([9.65, 3.82], sketch002) revolve001 = revolve(profile004, angle = 45, axis = getNextAdjacentEdge(seg01)) extrude002 = extrude(profile006, length = 4) sketch003 = startSketchOn(-XZ) -profile007 = startProfileAt([4.8, 7.55], sketch003) +profile007 = startProfile(sketch003, at = [4.8, 7.55]) |> line(end = [7.39, 2.58]) |> line(end = [7.02, -2.85]) -profile008 = startProfileAt([5.54, 5.49], sketch003) +profile008 = startProfile(sketch003, at = [5.54, 5.49]) |> line(end = [6.34, 2.64]) |> line(end = [6.33, -2.96]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() -profile009 = startProfileAt([5.23, 1.95], sketch003) +profile009 = startProfile(sketch003, at = [5.23, 1.95]) |> line(end = [6.8, 2.17]) |> line(end = [7.34, -2.75]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() profile010 = circle(sketch003, center = [7.18, -2.11], radius = 2.67) -profile011 = startProfileAt([5.07, -6.39], sketch003) +profile011 = startProfile(sketch003, at = [5.07, -6.39]) |> angledLine(angle = 0, length = 4.54, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 4.17) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) diff --git a/rust/kcl-lib/tests/cube/ast.snap b/rust/kcl-lib/tests/cube/ast.snap index f6c8a8113..7a171d947 100644 --- a/rust/kcl-lib/tests/cube/ast.snap +++ b/rust/kcl-lib/tests/cube/ast.snap @@ -693,27 +693,30 @@ description: Result of parsing cube.kcl { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "p0", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "p0", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -723,7 +726,7 @@ description: Result of parsing cube.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -734,8 +737,9 @@ description: Result of parsing cube.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/cube/input.kcl b/rust/kcl-lib/tests/cube/input.kcl index f93984842..f751cb9c9 100644 --- a/rust/kcl-lib/tests/cube/input.kcl +++ b/rust/kcl-lib/tests/cube/input.kcl @@ -8,7 +8,7 @@ fn cube(sideLength, center) { p3 = [l + x, -l + y] return startSketchOn(XY) - |> startProfileAt(p0, %) + |> startProfile(at = p0) |> line(endAbsolute = p1) |> line(endAbsolute = p2) |> line(endAbsolute = p3) diff --git a/rust/kcl-lib/tests/cube/unparsed.snap b/rust/kcl-lib/tests/cube/unparsed.snap index 166c0e2a0..816a04c65 100644 --- a/rust/kcl-lib/tests/cube/unparsed.snap +++ b/rust/kcl-lib/tests/cube/unparsed.snap @@ -12,7 +12,7 @@ fn cube(sideLength, center) { p3 = [l + x, -l + y] return startSketchOn(XY) - |> startProfileAt(p0, %) + |> startProfile(at = p0) |> line(endAbsolute = p1) |> line(endAbsolute = p2) |> line(endAbsolute = p3) diff --git a/rust/kcl-lib/tests/cube_with_error/ast.snap b/rust/kcl-lib/tests/cube_with_error/ast.snap index 0209a8d5a..bbdd37fea 100644 --- a/rust/kcl-lib/tests/cube_with_error/ast.snap +++ b/rust/kcl-lib/tests/cube_with_error/ast.snap @@ -693,27 +693,30 @@ description: Result of parsing cube_with_error.kcl { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "p0", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "p0", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -723,7 +726,7 @@ description: Result of parsing cube_with_error.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -734,8 +737,9 @@ description: Result of parsing cube_with_error.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/cube_with_error/input.kcl b/rust/kcl-lib/tests/cube_with_error/input.kcl index cdb69c74e..0331a1285 100644 --- a/rust/kcl-lib/tests/cube_with_error/input.kcl +++ b/rust/kcl-lib/tests/cube_with_error/input.kcl @@ -8,7 +8,7 @@ fn cube(length, center) { p3 = [l + x, -l + y] return startSketchOn(XY) - |> startProfileAt(p0, %) + |> startProfile(at = p0) |> line(endAbsolute = p1) |> line(endAbsolute = p2) |> line(endAbsolute = p3) diff --git a/rust/kcl-lib/tests/cube_with_error/unparsed.snap b/rust/kcl-lib/tests/cube_with_error/unparsed.snap index 53423cd8f..4ff3a9e1b 100644 --- a/rust/kcl-lib/tests/cube_with_error/unparsed.snap +++ b/rust/kcl-lib/tests/cube_with_error/unparsed.snap @@ -12,7 +12,7 @@ fn cube(length, center) { p3 = [l + x, -l + y] return startSketchOn(XY) - |> startProfileAt(p0, %) + |> startProfile(at = p0) |> line(endAbsolute = p1) |> line(endAbsolute = p2) |> line(endAbsolute = p3) diff --git a/rust/kcl-lib/tests/fillet-and-shell/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/fillet-and-shell/artifact_graph_flowchart.snap.md index c2f08c244..03596a87a 100644 --- a/rust/kcl-lib/tests/fillet-and-shell/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/fillet-and-shell/artifact_graph_flowchart.snap.md @@ -1,76 +1,76 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[396, 488, 0]"] - 3["Segment
[494, 585, 0]"] - 4["Segment
[591, 682, 0]"] - 5["Segment
[688, 781, 0]"] - 6["Segment
[787, 795, 0]"] + 2["Path
[396, 467, 0]"] + 3["Segment
[473, 564, 0]"] + 4["Segment
[570, 661, 0]"] + 5["Segment
[667, 760, 0]"] + 6["Segment
[766, 774, 0]"] 7[Solid2d] end subgraph path9 [Path] - 9["Path
[829, 854, 0]"] - 10["Segment
[860, 908, 0]"] - 11["Segment
[914, 971, 0]"] - 12["Segment
[977, 1026, 0]"] - 13["Segment
[1032, 1051, 0]"] + 9["Path
[808, 833, 0]"] + 10["Segment
[839, 887, 0]"] + 11["Segment
[893, 950, 0]"] + 12["Segment
[956, 1005, 0]"] + 13["Segment
[1011, 1030, 0]"] 14[Solid2d] end subgraph path31 [Path] - 31["Path
[1364, 1389, 0]"] + 31["Path
[1343, 1368, 0]"] end subgraph path32 [Path] - 32["Path
[1397, 1434, 0]"] - 33["Segment
[1397, 1434, 0]"] + 32["Path
[1376, 1413, 0]"] + 33["Segment
[1376, 1413, 0]"] 34[Solid2d] end subgraph path35 [Path] - 35["Path
[1447, 1485, 0]"] - 36["Segment
[1447, 1485, 0]"] + 35["Path
[1426, 1464, 0]"] + 36["Segment
[1426, 1464, 0]"] 37[Solid2d] end subgraph path45 [Path] - 45["Path
[1364, 1389, 0]"] + 45["Path
[1343, 1368, 0]"] end subgraph path46 [Path] - 46["Path
[1397, 1434, 0]"] - 47["Segment
[1397, 1434, 0]"] + 46["Path
[1376, 1413, 0]"] + 47["Segment
[1376, 1413, 0]"] 48[Solid2d] end subgraph path49 [Path] - 49["Path
[1447, 1485, 0]"] - 50["Segment
[1447, 1485, 0]"] + 49["Path
[1426, 1464, 0]"] + 50["Segment
[1426, 1464, 0]"] 51[Solid2d] end subgraph path59 [Path] - 59["Path
[1364, 1389, 0]"] + 59["Path
[1343, 1368, 0]"] end subgraph path60 [Path] - 60["Path
[1397, 1434, 0]"] - 61["Segment
[1397, 1434, 0]"] + 60["Path
[1376, 1413, 0]"] + 61["Segment
[1376, 1413, 0]"] 62[Solid2d] end subgraph path63 [Path] - 63["Path
[1447, 1485, 0]"] - 64["Segment
[1447, 1485, 0]"] + 63["Path
[1426, 1464, 0]"] + 64["Segment
[1426, 1464, 0]"] 65[Solid2d] end subgraph path73 [Path] - 73["Path
[1364, 1389, 0]"] + 73["Path
[1343, 1368, 0]"] end subgraph path74 [Path] - 74["Path
[1397, 1434, 0]"] - 75["Segment
[1397, 1434, 0]"] + 74["Path
[1376, 1413, 0]"] + 75["Segment
[1376, 1413, 0]"] 76[Solid2d] end subgraph path77 [Path] - 77["Path
[1447, 1485, 0]"] - 78["Segment
[1447, 1485, 0]"] + 77["Path
[1426, 1464, 0]"] + 78["Segment
[1426, 1464, 0]"] 79[Solid2d] end 1["Plane
[373, 390, 0]"] - 8["Plane
[804, 823, 0]"] - 15["Sweep Extrusion
[1057, 1085, 0]"] + 8["Plane
[783, 802, 0]"] + 15["Sweep Extrusion
[1036, 1064, 0]"] 16[Wall] 17[Wall] 18[Wall] @@ -85,38 +85,38 @@ flowchart LR 27["SweepEdge Adjacent"] 28["SweepEdge Opposite"] 29["SweepEdge Adjacent"] - 30["Plane
[1337, 1356, 0]"] - 38["Sweep Extrusion
[1497, 1521, 0]"] + 30["Plane
[1316, 1335, 0]"] + 38["Sweep Extrusion
[1476, 1500, 0]"] 39[Wall] 40["Cap Start"] 41["Cap End"] 42["SweepEdge Opposite"] 43["SweepEdge Adjacent"] - 44["Plane
[1337, 1356, 0]"] - 52["Sweep Extrusion
[1497, 1521, 0]"] + 44["Plane
[1316, 1335, 0]"] + 52["Sweep Extrusion
[1476, 1500, 0]"] 53[Wall] 54["Cap Start"] 55["Cap End"] 56["SweepEdge Opposite"] 57["SweepEdge Adjacent"] - 58["Plane
[1337, 1356, 0]"] - 66["Sweep Extrusion
[1497, 1521, 0]"] + 58["Plane
[1316, 1335, 0]"] + 66["Sweep Extrusion
[1476, 1500, 0]"] 67[Wall] 68["Cap Start"] 69["Cap End"] 70["SweepEdge Opposite"] 71["SweepEdge Adjacent"] - 72["Plane
[1337, 1356, 0]"] - 80["Sweep Extrusion
[1497, 1521, 0]"] + 72["Plane
[1316, 1335, 0]"] + 80["Sweep Extrusion
[1476, 1500, 0]"] 81[Wall] 82["Cap Start"] 83["Cap End"] 84["SweepEdge Opposite"] 85["SweepEdge Adjacent"] - 86["EdgeCut Fillet
[1091, 1297, 0]"] - 87["EdgeCut Fillet
[1091, 1297, 0]"] - 88["EdgeCut Fillet
[1091, 1297, 0]"] - 89["EdgeCut Fillet
[1091, 1297, 0]"] + 86["EdgeCut Fillet
[1070, 1276, 0]"] + 87["EdgeCut Fillet
[1070, 1276, 0]"] + 88["EdgeCut Fillet
[1070, 1276, 0]"] + 89["EdgeCut Fillet
[1070, 1276, 0]"] 1 --- 2 2 --- 3 2 --- 4 diff --git a/rust/kcl-lib/tests/fillet-and-shell/ast.snap b/rust/kcl-lib/tests/fillet-and-shell/ast.snap index e9b972173..275eb2056 100644 --- a/rust/kcl-lib/tests/fillet-and-shell/ast.snap +++ b/rust/kcl-lib/tests/fillet-and-shell/ast.snap @@ -706,116 +706,119 @@ description: Result of parsing fillet-and-shell.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "border", + "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": "miniHdmiDistance", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "miniHdmiWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" } - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "border", - "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": "miniHdmiDistance", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "miniHdmiWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -825,7 +828,7 @@ description: Result of parsing fillet-and-shell.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -836,8 +839,9 @@ description: Result of parsing fillet-and-shell.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1356,44 +1360,47 @@ description: Result of parsing fillet-and-shell.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1403,7 +1410,7 @@ description: Result of parsing fillet-and-shell.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1414,8 +1421,9 @@ description: Result of parsing fillet-and-shell.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2092,44 +2100,47 @@ description: Result of parsing fillet-and-shell.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2139,7 +2150,7 @@ description: Result of parsing fillet-and-shell.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2150,8 +2161,9 @@ description: Result of parsing fillet-and-shell.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/fillet-and-shell/input.kcl b/rust/kcl-lib/tests/fillet-and-shell/input.kcl index db78fb19a..6368d5bd6 100644 --- a/rust/kcl-lib/tests/fillet-and-shell/input.kcl +++ b/rust/kcl-lib/tests/fillet-and-shell/input.kcl @@ -23,10 +23,7 @@ microUsbWidth = 7.4 connectorPadding = 4 miniHdmiHole = startSketchOn(XY) - |> startProfileAt([ - 0, - border + miniHdmiDistance - (miniHdmiWidth / 2) - ], %) + |> startProfile(at = [0, border + miniHdmiDistance - (miniHdmiWidth / 2)]) |> line(endAbsolute = [ 0, border + miniHdmiDistance + miniHdmiWidth / 2 @@ -42,7 +39,7 @@ miniHdmiHole = startSketchOn(XY) |> close(%) case = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [caseWidth, 0], tag = $edge1) |> line(endAbsolute = [caseWidth, caseLength], tag = $edge2) |> line(endAbsolute = [0, caseLength], tag = $edge3) @@ -60,7 +57,7 @@ case = startSketchOn('XY') fn m25Screw(x, y, height) { screw = startSketchOn("XY") - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> circle(center = [x, y], radius = 2.5) |> hole(circle(center = [x, y], radius = 1.25), %) |> extrude(length = height) diff --git a/rust/kcl-lib/tests/fillet-and-shell/ops.snap b/rust/kcl-lib/tests/fillet-and-shell/ops.snap index 98ed83ff8..5fa401692 100644 --- a/rust/kcl-lib/tests/fillet-and-shell/ops.snap +++ b/rust/kcl-lib/tests/fillet-and-shell/ops.snap @@ -127,8 +127,8 @@ description: Operations executed fillet-and-shell.kcl "type": "FunctionCall", "name": "m25Screw", "functionSourceRange": [ - 1310, - 1538, + 1289, + 1517, 0 ], "unlabeledArg": null, @@ -218,8 +218,8 @@ description: Operations executed fillet-and-shell.kcl "type": "FunctionCall", "name": "m25Screw", "functionSourceRange": [ - 1310, - 1538, + 1289, + 1517, 0 ], "unlabeledArg": null, @@ -309,8 +309,8 @@ description: Operations executed fillet-and-shell.kcl "type": "FunctionCall", "name": "m25Screw", "functionSourceRange": [ - 1310, - 1538, + 1289, + 1517, 0 ], "unlabeledArg": null, @@ -400,8 +400,8 @@ description: Operations executed fillet-and-shell.kcl "type": "FunctionCall", "name": "m25Screw", "functionSourceRange": [ - 1310, - 1538, + 1289, + 1517, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/fillet-and-shell/program_memory.snap b/rust/kcl-lib/tests/fillet-and-shell/program_memory.snap index 1beef5260..d7841e09b 100644 --- a/rust/kcl-lib/tests/fillet-and-shell/program_memory.snap +++ b/rust/kcl-lib/tests/fillet-and-shell/program_memory.snap @@ -28,9 +28,9 @@ description: Variables in memory after executing fillet-and-shell.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 901, - "end": 907, - "start": 901, + "commentStart": 880, + "end": 886, + "start": 880, "type": "TagDeclarator", "value": "edge1" }, @@ -41,9 +41,9 @@ description: Variables in memory after executing fillet-and-shell.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 964, - "end": 970, - "start": 964, + "commentStart": 943, + "end": 949, + "start": 943, "type": "TagDeclarator", "value": "edge2" }, @@ -54,9 +54,9 @@ description: Variables in memory after executing fillet-and-shell.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1019, - "end": 1025, - "start": 1019, + "commentStart": 998, + "end": 1004, + "start": 998, "type": "TagDeclarator", "value": "edge3" }, @@ -67,9 +67,9 @@ description: Variables in memory after executing fillet-and-shell.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1044, - "end": 1050, - "start": 1044, + "commentStart": 1023, + "end": 1029, + "start": 1023, "type": "TagDeclarator", "value": "edge4" }, @@ -90,9 +90,9 @@ description: Variables in memory after executing fillet-and-shell.kcl 0.0 ], "tag": { - "commentStart": 901, - "end": 907, - "start": 901, + "commentStart": 880, + "end": 886, + "start": 880, "type": "TagDeclarator", "value": "edge1" }, @@ -115,9 +115,9 @@ description: Variables in memory after executing fillet-and-shell.kcl 0.0 ], "tag": { - "commentStart": 964, - "end": 970, - "start": 964, + "commentStart": 943, + "end": 949, + "start": 943, "type": "TagDeclarator", "value": "edge2" }, @@ -140,9 +140,9 @@ description: Variables in memory after executing fillet-and-shell.kcl 73.0 ], "tag": { - "commentStart": 1019, - "end": 1025, - "start": 1019, + "commentStart": 998, + "end": 1004, + "start": 998, "type": "TagDeclarator", "value": "edge3" }, @@ -165,9 +165,9 @@ description: Variables in memory after executing fillet-and-shell.kcl 73.0 ], "tag": { - "commentStart": 1044, - "end": 1050, - "start": 1044, + "commentStart": 1023, + "end": 1029, + "start": 1023, "type": "TagDeclarator", "value": "edge4" }, diff --git a/rust/kcl-lib/tests/fillet-and-shell/unparsed.snap b/rust/kcl-lib/tests/fillet-and-shell/unparsed.snap index 2e913b79f..526654168 100644 --- a/rust/kcl-lib/tests/fillet-and-shell/unparsed.snap +++ b/rust/kcl-lib/tests/fillet-and-shell/unparsed.snap @@ -27,10 +27,10 @@ microUsbWidth = 7.4 connectorPadding = 4 miniHdmiHole = startSketchOn(XY) - |> startProfileAt([ + |> startProfile(at = [ 0, border + miniHdmiDistance - (miniHdmiWidth / 2) - ], %) + ]) |> line(endAbsolute = [ 0, border + miniHdmiDistance + miniHdmiWidth / 2 @@ -46,7 +46,7 @@ miniHdmiHole = startSketchOn(XY) |> close(%) case = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [caseWidth, 0], tag = $edge1) |> line(endAbsolute = [caseWidth, caseLength], tag = $edge2) |> line(endAbsolute = [0, caseLength], tag = $edge3) @@ -64,7 +64,7 @@ case = startSketchOn(XY) fn m25Screw(x, y, height) { screw = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> circle(center = [x, y], radius = 2.5) |> hole(circle(center = [x, y], radius = 1.25), %) |> extrude(length = height) diff --git a/rust/kcl-lib/tests/function_sketch/ast.snap b/rust/kcl-lib/tests/function_sketch/ast.snap index 0564a1502..9543c1460 100644 --- a/rust/kcl-lib/tests/function_sketch/ast.snap +++ b/rust/kcl-lib/tests/function_sketch/ast.snap @@ -70,44 +70,47 @@ description: Result of parsing function_sketch.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -117,7 +120,7 @@ description: Result of parsing function_sketch.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -128,8 +131,9 @@ description: Result of parsing function_sketch.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/function_sketch/input.kcl b/rust/kcl-lib/tests/function_sketch/input.kcl index 36c62b50b..3f409324e 100644 --- a/rust/kcl-lib/tests/function_sketch/input.kcl +++ b/rust/kcl-lib/tests/function_sketch/input.kcl @@ -1,6 +1,6 @@ fn box(h, l, w) { myBox = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, l]) |> line(end = [w, 0]) |> line(end = [0, -l]) diff --git a/rust/kcl-lib/tests/function_sketch/unparsed.snap b/rust/kcl-lib/tests/function_sketch/unparsed.snap index 772c58ea0..ad3e8ad12 100644 --- a/rust/kcl-lib/tests/function_sketch/unparsed.snap +++ b/rust/kcl-lib/tests/function_sketch/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing function_sketch.kcl --- fn box(h, l, w) { myBox = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, l]) |> line(end = [w, 0]) |> line(end = [0, -l]) diff --git a/rust/kcl-lib/tests/function_sketch_with_position/ast.snap b/rust/kcl-lib/tests/function_sketch_with_position/ast.snap index 71a643b96..1bedb6bb0 100644 --- a/rust/kcl-lib/tests/function_sketch_with_position/ast.snap +++ b/rust/kcl-lib/tests/function_sketch_with_position/ast.snap @@ -70,27 +70,30 @@ description: Result of parsing function_sketch_with_position.kcl { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "p", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "p", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -100,7 +103,7 @@ description: Result of parsing function_sketch_with_position.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -111,8 +114,9 @@ description: Result of parsing function_sketch_with_position.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/function_sketch_with_position/input.kcl b/rust/kcl-lib/tests/function_sketch_with_position/input.kcl index 7a4f0a570..6ee443316 100644 --- a/rust/kcl-lib/tests/function_sketch_with_position/input.kcl +++ b/rust/kcl-lib/tests/function_sketch_with_position/input.kcl @@ -1,6 +1,6 @@ fn box(p, h, l, w) { myBox = startSketchOn('XY') - |> startProfileAt(p, %) + |> startProfile(at = p) |> line(end = [0, l]) |> line(end = [w, 0]) |> line(end = [0, -l]) diff --git a/rust/kcl-lib/tests/function_sketch_with_position/unparsed.snap b/rust/kcl-lib/tests/function_sketch_with_position/unparsed.snap index 7642a5451..ffa71009e 100644 --- a/rust/kcl-lib/tests/function_sketch_with_position/unparsed.snap +++ b/rust/kcl-lib/tests/function_sketch_with_position/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing function_sketch_with_position.kcl --- fn box(p, h, l, w) { myBox = startSketchOn(XY) - |> startProfileAt(p, %) + |> startProfile(at = p) |> line(end = [0, l]) |> line(end = [w, 0]) |> line(end = [0, -l]) diff --git a/rust/kcl-lib/tests/helix_simple/ast.snap b/rust/kcl-lib/tests/helix_simple/ast.snap index a118e0dc2..8c5344527 100644 --- a/rust/kcl-lib/tests/helix_simple/ast.snap +++ b/rust/kcl-lib/tests/helix_simple/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing helix_simple.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing helix_simple.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing helix_simple.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/helix_simple/input.kcl b/rust/kcl-lib/tests/helix_simple/input.kcl index b0c9b9c67..d67a35af5 100644 --- a/rust/kcl-lib/tests/helix_simple/input.kcl +++ b/rust/kcl-lib/tests/helix_simple/input.kcl @@ -1,6 +1,6 @@ // Create a helix around an edge. helper001 = startSketchOn('XZ') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $edge001) helixPath = helix( diff --git a/rust/kcl-lib/tests/helix_simple/unparsed.snap b/rust/kcl-lib/tests/helix_simple/unparsed.snap index 4a86b68ff..376d17580 100644 --- a/rust/kcl-lib/tests/helix_simple/unparsed.snap +++ b/rust/kcl-lib/tests/helix_simple/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing helix_simple.kcl --- // Create a helix around an edge. helper001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10], tag = $edge001) helixPath = helix( diff --git a/rust/kcl-lib/tests/i_shape/ast.snap b/rust/kcl-lib/tests/i_shape/ast.snap index eb9a2389d..ab243b990 100644 --- a/rust/kcl-lib/tests/i_shape/ast.snap +++ b/rust/kcl-lib/tests/i_shape/ast.snap @@ -396,48 +396,51 @@ description: Result of parsing i_shape.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "corner_radius", + "name": { + "commentStart": 0, + "end": 0, + "name": "corner_radius", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -447,7 +450,7 @@ description: Result of parsing i_shape.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -458,8 +461,9 @@ description: Result of parsing i_shape.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2885,44 +2889,47 @@ description: Result of parsing i_shape.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2932,7 +2939,7 @@ description: Result of parsing i_shape.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2943,8 +2950,9 @@ description: Result of parsing i_shape.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/i_shape/input.kcl b/rust/kcl-lib/tests/i_shape/input.kcl index 3e76da0c0..717f8c091 100644 --- a/rust/kcl-lib/tests/i_shape/input.kcl +++ b/rust/kcl-lib/tests/i_shape/input.kcl @@ -8,7 +8,7 @@ corner_radius = 5.0 // but I measured intentionally to not be symmetric, // because your wrist isn't a perfect cylindrical surface brace_base = startSketchOn(XY) - |> startProfileAt([corner_radius, 0], %) + |> startProfile(at = [corner_radius, 0]) |> line(end = [width - corner_radius, 0.0]) |> tangentialArc(end = [corner_radius, corner_radius]) |> yLine(length = 25.0 - corner_radius) @@ -36,7 +36,7 @@ brace_base = startSketchOn(XY) |> close(%) inner = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = 1.0) |> tangentialArc(end = [corner_radius, corner_radius]) |> yLine(length = 25.0 - (corner_radius * 2)) diff --git a/rust/kcl-lib/tests/i_shape/unparsed.snap b/rust/kcl-lib/tests/i_shape/unparsed.snap index 0e47c18ac..f560ca860 100644 --- a/rust/kcl-lib/tests/i_shape/unparsed.snap +++ b/rust/kcl-lib/tests/i_shape/unparsed.snap @@ -12,7 +12,7 @@ corner_radius = 5.0 // but I measured intentionally to not be symmetric, // because your wrist isn't a perfect cylindrical surface brace_base = startSketchOn(XY) - |> startProfileAt([corner_radius, 0], %) + |> startProfile(at = [corner_radius, 0]) |> line(end = [width - corner_radius, 0.0]) |> tangentialArc(end = [corner_radius, corner_radius]) |> yLine(length = 25.0 - corner_radius) @@ -40,7 +40,7 @@ brace_base = startSketchOn(XY) |> close(%) inner = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = 1.0) |> tangentialArc(end = [corner_radius, corner_radius]) |> yLine(length = 25.0 - (corner_radius * 2)) diff --git a/rust/kcl-lib/tests/import_async/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/import_async/artifact_graph_flowchart.snap.md index 3ff559dcc..63249d940 100644 --- a/rust/kcl-lib/tests/import_async/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/import_async/artifact_graph_flowchart.snap.md @@ -214,13 +214,13 @@ flowchart LR 218[Solid2d] end subgraph path220 [Path] - 220["Path
[2309, 2409, 0]"] - 221["Segment
[2415, 2442, 0]"] - 222["Segment
[2448, 2476, 0]"] - 223["Segment
[2482, 2510, 0]"] - 224["Segment
[2516, 2632, 0]"] - 225["Segment
[2638, 2743, 0]"] - 226["Segment
[2749, 2756, 0]"] + 220["Path
[2309, 2388, 0]"] + 221["Segment
[2394, 2421, 0]"] + 222["Segment
[2427, 2455, 0]"] + 223["Segment
[2461, 2489, 0]"] + 224["Segment
[2495, 2611, 0]"] + 225["Segment
[2617, 2722, 0]"] + 226["Segment
[2728, 2735, 0]"] 227[Solid2d] end 1["Plane
[168, 185, 0]"] @@ -233,7 +233,7 @@ flowchart LR 11["SweepEdge Adjacent"] 12["Plane
[1565, 1582, 0]"] 219["Sweep Extrusion
[1834, 1862, 0]"] - 228["Sweep Extrusion
[2762, 2791, 0]"] + 228["Sweep Extrusion
[2741, 2770, 0]"] 229[Wall] 230[Wall] 231[Wall] diff --git a/rust/kcl-lib/tests/import_async/ast.snap b/rust/kcl-lib/tests/import_async/ast.snap index fc85446fa..3ac430a51 100644 --- a/rust/kcl-lib/tests/import_async/ast.snap +++ b/rust/kcl-lib/tests/import_async/ast.snap @@ -3053,76 +3053,79 @@ description: Result of parsing import_async.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, + "computed": false, "end": 0, - "name": "xs", + "object": { + "commentStart": 0, + "end": 0, + "name": "xs", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "101", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 101.0, + "suffix": "None" + } + }, "start": 0, - "type": "Identifier", - "type": "Identifier" + "type": "MemberExpression", + "type": "MemberExpression" }, - "property": { + { "commentStart": 0, + "computed": false, "end": 0, - "raw": "101", + "object": { + "commentStart": 0, + "end": 0, + "name": "ys", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "101", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 101.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 101.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "ys", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "101", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 101.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "MemberExpression", + "type": "MemberExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -3132,7 +3135,7 @@ description: Result of parsing import_async.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -3143,8 +3146,9 @@ description: Result of parsing import_async.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null } ], "commentStart": 0, @@ -4121,148 +4125,151 @@ description: Result of parsing import_async.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "holeRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "arguments": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "startAngle", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "cos", + "name": "holeRadius", "start": 0, "type": "Identifier" }, "path": [], "start": 0, + "type": "Name", "type": "Name" }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "holeRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "arguments": [ - { + "operator": "*", + "right": { + "arguments": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startAngle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "callee": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "startAngle", + "name": "cos", "start": 0, "type": "Identifier" }, "path": [], "start": 0, - "type": "Name", "type": "Name" - } - ], - "callee": { + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "sin", + "name": "holeRadius", "start": 0, "type": "Identifier" }, "path": [], "start": 0, + "type": "Name", "type": "Name" }, - "commentStart": 0, - "end": 0, + "operator": "*", + "right": { + "arguments": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startAngle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + }, "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -4272,7 +4279,7 @@ description: Result of parsing import_async.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -4283,8 +4290,9 @@ description: Result of parsing import_async.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/import_async/input.kcl b/rust/kcl-lib/tests/import_async/input.kcl index 7802ae6de..34b29812b 100644 --- a/rust/kcl-lib/tests/import_async/input.kcl +++ b/rust/kcl-lib/tests/import_async/input.kcl @@ -66,7 +66,7 @@ fn rightInvolute(i, sg) { // Draw gear teeth start = startSketchOn(XY) - |> startProfileAt([xs[101], ys[101]], %) + |> startProfile(at = [xs[101], ys[101]]) teeth = reduce([0..100], start, leftInvolute) |> arc( angleStart = 0, @@ -93,10 +93,7 @@ startAngle = asin(keywayWidth / 2 / holeRadius) // Sketch the keyway and center hole and extrude keyWay = startSketchOn(body, face = END) - |> startProfileAt([ - holeRadius * cos(startAngle), - holeRadius * sin(startAngle) - ], %) + |> startProfile(at = [holeRadius * cos(startAngle), holeRadius * sin(startAngle)]) |> xLine(length = keywayDepth) |> yLine(length = -keywayWidth) |> xLine(length = -keywayDepth) diff --git a/rust/kcl-lib/tests/import_async/ops.snap b/rust/kcl-lib/tests/import_async/ops.snap index c359fa6bd..cd0c15421 100644 --- a/rust/kcl-lib/tests/import_async/ops.snap +++ b/rust/kcl-lib/tests/import_async/ops.snap @@ -36,8 +36,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -72,8 +72,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -90,8 +90,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -108,8 +108,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -126,8 +126,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -144,8 +144,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -162,8 +162,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -180,8 +180,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -198,8 +198,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -216,8 +216,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -234,8 +234,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -252,8 +252,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -270,8 +270,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -288,8 +288,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -306,8 +306,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -324,8 +324,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -342,8 +342,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -360,8 +360,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -378,8 +378,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -396,8 +396,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -414,8 +414,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -432,8 +432,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -450,8 +450,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -468,8 +468,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -486,8 +486,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -504,8 +504,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -522,8 +522,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -540,8 +540,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -558,8 +558,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -576,8 +576,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -594,8 +594,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -612,8 +612,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -630,8 +630,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -648,8 +648,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -666,8 +666,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -684,8 +684,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -702,8 +702,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -720,8 +720,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -738,8 +738,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -756,8 +756,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -774,8 +774,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -792,8 +792,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -810,8 +810,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -828,8 +828,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -846,8 +846,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -864,8 +864,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -882,8 +882,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -900,8 +900,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -918,8 +918,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -936,8 +936,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -954,8 +954,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -972,8 +972,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -990,8 +990,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1008,8 +1008,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1026,8 +1026,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1044,8 +1044,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1062,8 +1062,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1080,8 +1080,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1098,8 +1098,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1116,8 +1116,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1134,8 +1134,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1152,8 +1152,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1170,8 +1170,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1188,8 +1188,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1206,8 +1206,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1224,8 +1224,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1242,8 +1242,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1260,8 +1260,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1278,8 +1278,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1296,8 +1296,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1314,8 +1314,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1332,8 +1332,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1350,8 +1350,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1368,8 +1368,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1386,8 +1386,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1404,8 +1404,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1422,8 +1422,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1440,8 +1440,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1458,8 +1458,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1476,8 +1476,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1494,8 +1494,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1512,8 +1512,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1530,8 +1530,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1548,8 +1548,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1566,8 +1566,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1584,8 +1584,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1602,8 +1602,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1620,8 +1620,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1638,8 +1638,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1656,8 +1656,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1674,8 +1674,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1692,8 +1692,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1710,8 +1710,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1728,8 +1728,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1746,8 +1746,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1764,8 +1764,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1782,8 +1782,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1800,8 +1800,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1818,8 +1818,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1836,8 +1836,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1854,8 +1854,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1872,8 +1872,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1890,8 +1890,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1908,8 +1908,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1944,8 +1944,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1962,8 +1962,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1998,8 +1998,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2016,8 +2016,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2052,8 +2052,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2070,8 +2070,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2106,8 +2106,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2124,8 +2124,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2160,8 +2160,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2178,8 +2178,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2214,8 +2214,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2232,8 +2232,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2268,8 +2268,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2286,8 +2286,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2322,8 +2322,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2340,8 +2340,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2376,8 +2376,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2394,8 +2394,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2430,8 +2430,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2448,8 +2448,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2484,8 +2484,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2502,8 +2502,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2538,8 +2538,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2556,8 +2556,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2592,8 +2592,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2610,8 +2610,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2646,8 +2646,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2664,8 +2664,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2700,8 +2700,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2718,8 +2718,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2754,8 +2754,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2772,8 +2772,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2808,8 +2808,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2826,8 +2826,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2862,8 +2862,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2880,8 +2880,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2916,8 +2916,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2934,8 +2934,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2970,8 +2970,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2988,8 +2988,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3024,8 +3024,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3042,8 +3042,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3078,8 +3078,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3096,8 +3096,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3132,8 +3132,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3150,8 +3150,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3186,8 +3186,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3204,8 +3204,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3240,8 +3240,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3258,8 +3258,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3294,8 +3294,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3312,8 +3312,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3348,8 +3348,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3366,8 +3366,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3402,8 +3402,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3420,8 +3420,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3456,8 +3456,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3474,8 +3474,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3510,8 +3510,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3528,8 +3528,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3564,8 +3564,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3582,8 +3582,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3618,8 +3618,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3636,8 +3636,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3672,8 +3672,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3690,8 +3690,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3726,8 +3726,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3744,8 +3744,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3780,8 +3780,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3798,8 +3798,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3834,8 +3834,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3852,8 +3852,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3888,8 +3888,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3906,8 +3906,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3942,8 +3942,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3960,8 +3960,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3996,8 +3996,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4014,8 +4014,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4050,8 +4050,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4068,8 +4068,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4104,8 +4104,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4122,8 +4122,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4158,8 +4158,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4176,8 +4176,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4212,8 +4212,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4230,8 +4230,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4266,8 +4266,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4284,8 +4284,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4320,8 +4320,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4338,8 +4338,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4374,8 +4374,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4392,8 +4392,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4428,8 +4428,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4446,8 +4446,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4482,8 +4482,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4500,8 +4500,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4536,8 +4536,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4554,8 +4554,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4590,8 +4590,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4608,8 +4608,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4644,8 +4644,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4662,8 +4662,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4698,8 +4698,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4716,8 +4716,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4752,8 +4752,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4770,8 +4770,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4806,8 +4806,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4824,8 +4824,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4860,8 +4860,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4878,8 +4878,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4914,8 +4914,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4932,8 +4932,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4968,8 +4968,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4986,8 +4986,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5022,8 +5022,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5040,8 +5040,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5076,8 +5076,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5094,8 +5094,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5130,8 +5130,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5148,8 +5148,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5184,8 +5184,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5202,8 +5202,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5238,8 +5238,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5256,8 +5256,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5292,8 +5292,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5310,8 +5310,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5346,8 +5346,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5364,8 +5364,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5400,8 +5400,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5418,8 +5418,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5454,8 +5454,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5472,8 +5472,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5508,8 +5508,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5526,8 +5526,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5562,8 +5562,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5580,8 +5580,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5616,8 +5616,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5634,8 +5634,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5670,8 +5670,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5688,8 +5688,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5724,8 +5724,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5742,8 +5742,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5778,8 +5778,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5796,8 +5796,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5832,8 +5832,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5850,8 +5850,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5886,8 +5886,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5904,8 +5904,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5940,8 +5940,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5958,8 +5958,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5994,8 +5994,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6012,8 +6012,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6048,8 +6048,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6066,8 +6066,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6102,8 +6102,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6120,8 +6120,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6156,8 +6156,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6174,8 +6174,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6210,8 +6210,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6228,8 +6228,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6264,8 +6264,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6282,8 +6282,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6318,8 +6318,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6336,8 +6336,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6372,8 +6372,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6390,8 +6390,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6426,8 +6426,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6444,8 +6444,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6480,8 +6480,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6498,8 +6498,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6534,8 +6534,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6552,8 +6552,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6588,8 +6588,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6606,8 +6606,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6642,8 +6642,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6660,8 +6660,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6696,8 +6696,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6714,8 +6714,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6750,8 +6750,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6768,8 +6768,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6804,8 +6804,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6822,8 +6822,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6858,8 +6858,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6876,8 +6876,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6912,8 +6912,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6930,8 +6930,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6966,8 +6966,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6984,8 +6984,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7020,8 +7020,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7038,8 +7038,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7074,8 +7074,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7092,8 +7092,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7128,8 +7128,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7146,8 +7146,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7182,8 +7182,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7200,8 +7200,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7236,8 +7236,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7254,8 +7254,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7290,8 +7290,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7308,8 +7308,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7344,8 +7344,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7362,8 +7362,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7398,8 +7398,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11150,8 +11150,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11168,8 +11168,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11204,8 +11204,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11222,8 +11222,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11258,8 +11258,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11276,8 +11276,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11312,8 +11312,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11330,8 +11330,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11366,8 +11366,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11384,8 +11384,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11420,8 +11420,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11438,8 +11438,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11474,8 +11474,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11492,8 +11492,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11528,8 +11528,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11546,8 +11546,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11582,8 +11582,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11600,8 +11600,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11636,8 +11636,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11654,8 +11654,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11690,8 +11690,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11708,8 +11708,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11744,8 +11744,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11762,8 +11762,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11798,8 +11798,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11816,8 +11816,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11852,8 +11852,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11870,8 +11870,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11906,8 +11906,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11924,8 +11924,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11960,8 +11960,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11978,8 +11978,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12014,8 +12014,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12032,8 +12032,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12068,8 +12068,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12086,8 +12086,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12122,8 +12122,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12140,8 +12140,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12176,8 +12176,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12194,8 +12194,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12230,8 +12230,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12248,8 +12248,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12284,8 +12284,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12302,8 +12302,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12338,8 +12338,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12356,8 +12356,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12392,8 +12392,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12410,8 +12410,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12446,8 +12446,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12464,8 +12464,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12500,8 +12500,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12518,8 +12518,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12554,8 +12554,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12572,8 +12572,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12608,8 +12608,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12626,8 +12626,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12662,8 +12662,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12680,8 +12680,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12716,8 +12716,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12734,8 +12734,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12770,8 +12770,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12788,8 +12788,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12824,8 +12824,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12842,8 +12842,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12878,8 +12878,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12896,8 +12896,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12932,8 +12932,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12950,8 +12950,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12986,8 +12986,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13004,8 +13004,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13040,8 +13040,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13058,8 +13058,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13094,8 +13094,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13112,8 +13112,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13148,8 +13148,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13166,8 +13166,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13202,8 +13202,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13220,8 +13220,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13256,8 +13256,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13274,8 +13274,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13310,8 +13310,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13328,8 +13328,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13364,8 +13364,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13382,8 +13382,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13418,8 +13418,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13436,8 +13436,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13472,8 +13472,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13490,8 +13490,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13526,8 +13526,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13544,8 +13544,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13580,8 +13580,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13598,8 +13598,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13634,8 +13634,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13652,8 +13652,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13688,8 +13688,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13706,8 +13706,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13742,8 +13742,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13760,8 +13760,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13796,8 +13796,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13814,8 +13814,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13850,8 +13850,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13868,8 +13868,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13904,8 +13904,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13922,8 +13922,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13958,8 +13958,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13976,8 +13976,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14012,8 +14012,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14030,8 +14030,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14066,8 +14066,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14084,8 +14084,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14120,8 +14120,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14138,8 +14138,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14174,8 +14174,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14192,8 +14192,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14228,8 +14228,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14246,8 +14246,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14282,8 +14282,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14300,8 +14300,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14336,8 +14336,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14354,8 +14354,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14390,8 +14390,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14408,8 +14408,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14444,8 +14444,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14462,8 +14462,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14498,8 +14498,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14516,8 +14516,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14552,8 +14552,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14570,8 +14570,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14606,8 +14606,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14624,8 +14624,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14660,8 +14660,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14678,8 +14678,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14714,8 +14714,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14732,8 +14732,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14768,8 +14768,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14786,8 +14786,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14822,8 +14822,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14840,8 +14840,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14876,8 +14876,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14894,8 +14894,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14930,8 +14930,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14948,8 +14948,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14984,8 +14984,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15002,8 +15002,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15038,8 +15038,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15056,8 +15056,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15092,8 +15092,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15110,8 +15110,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15146,8 +15146,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15164,8 +15164,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15200,8 +15200,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15218,8 +15218,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15254,8 +15254,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15272,8 +15272,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15308,8 +15308,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15326,8 +15326,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15362,8 +15362,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15380,8 +15380,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15416,8 +15416,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15434,8 +15434,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15470,8 +15470,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15488,8 +15488,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15524,8 +15524,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15542,8 +15542,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15578,8 +15578,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15596,8 +15596,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15632,8 +15632,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15650,8 +15650,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15686,8 +15686,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15704,8 +15704,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15740,8 +15740,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15758,8 +15758,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15794,8 +15794,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15812,8 +15812,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15848,8 +15848,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15866,8 +15866,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15902,8 +15902,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15920,8 +15920,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15956,8 +15956,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15974,8 +15974,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16010,8 +16010,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16028,8 +16028,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16064,8 +16064,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16082,8 +16082,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16118,8 +16118,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16136,8 +16136,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16172,8 +16172,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16190,8 +16190,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16226,8 +16226,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16244,8 +16244,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16280,8 +16280,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16298,8 +16298,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16334,8 +16334,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16352,8 +16352,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16388,8 +16388,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16406,8 +16406,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16442,8 +16442,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16460,8 +16460,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16496,8 +16496,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16514,8 +16514,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16550,8 +16550,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16568,8 +16568,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16604,8 +16604,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16622,8 +16622,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16658,8 +16658,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16676,8 +16676,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16712,8 +16712,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16730,8 +16730,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16766,8 +16766,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16784,8 +16784,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16820,8 +16820,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16838,8 +16838,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16874,8 +16874,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16892,8 +16892,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16928,8 +16928,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16946,8 +16946,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16982,8 +16982,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17000,8 +17000,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17036,8 +17036,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17054,8 +17054,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17090,8 +17090,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17108,8 +17108,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17144,8 +17144,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17162,8 +17162,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17198,8 +17198,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17216,8 +17216,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17252,8 +17252,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17270,8 +17270,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17306,8 +17306,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17324,8 +17324,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17360,8 +17360,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17378,8 +17378,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17414,8 +17414,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17432,8 +17432,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17468,8 +17468,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17486,8 +17486,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17522,8 +17522,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17540,8 +17540,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17576,8 +17576,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17594,8 +17594,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17630,8 +17630,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17648,8 +17648,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17684,8 +17684,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17702,8 +17702,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17738,8 +17738,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17756,8 +17756,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17792,8 +17792,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17810,8 +17810,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17846,8 +17846,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17864,8 +17864,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17900,8 +17900,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17918,8 +17918,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17954,8 +17954,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17972,8 +17972,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18008,8 +18008,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18026,8 +18026,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18062,8 +18062,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18080,8 +18080,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18116,8 +18116,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18134,8 +18134,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18170,8 +18170,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18188,8 +18188,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18224,8 +18224,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18242,8 +18242,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18278,8 +18278,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18296,8 +18296,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18332,8 +18332,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18350,8 +18350,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18386,8 +18386,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18404,8 +18404,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18440,8 +18440,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18458,8 +18458,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18494,8 +18494,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18512,8 +18512,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18548,8 +18548,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18566,8 +18566,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18602,8 +18602,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18620,8 +18620,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18656,8 +18656,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18674,8 +18674,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18710,8 +18710,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18728,8 +18728,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18764,8 +18764,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18782,8 +18782,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18818,8 +18818,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18836,8 +18836,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18872,8 +18872,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18890,8 +18890,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18926,8 +18926,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18944,8 +18944,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18980,8 +18980,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18998,8 +18998,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19034,8 +19034,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19052,8 +19052,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19088,8 +19088,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19106,8 +19106,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19142,8 +19142,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19160,8 +19160,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19196,8 +19196,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19214,8 +19214,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19250,8 +19250,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19268,8 +19268,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19304,8 +19304,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19322,8 +19322,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19358,8 +19358,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19376,8 +19376,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19412,8 +19412,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19430,8 +19430,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19466,8 +19466,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19484,8 +19484,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19520,8 +19520,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19538,8 +19538,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19574,8 +19574,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19592,8 +19592,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19628,8 +19628,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19646,8 +19646,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19682,8 +19682,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19700,8 +19700,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19736,8 +19736,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19754,8 +19754,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19790,8 +19790,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19808,8 +19808,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19844,8 +19844,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19862,8 +19862,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19898,8 +19898,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19916,8 +19916,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19952,8 +19952,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19970,8 +19970,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20006,8 +20006,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20024,8 +20024,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20060,8 +20060,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20078,8 +20078,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20114,8 +20114,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20132,8 +20132,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20168,8 +20168,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20186,8 +20186,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20222,8 +20222,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20240,8 +20240,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20276,8 +20276,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20294,8 +20294,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20330,8 +20330,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20348,8 +20348,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20384,8 +20384,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20402,8 +20402,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20438,8 +20438,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20456,8 +20456,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20492,8 +20492,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20510,8 +20510,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20546,8 +20546,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20564,8 +20564,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20600,8 +20600,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20618,8 +20618,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20654,8 +20654,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20672,8 +20672,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20708,8 +20708,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20726,8 +20726,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20762,8 +20762,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20780,8 +20780,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20816,8 +20816,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20834,8 +20834,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20870,8 +20870,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20888,8 +20888,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20924,8 +20924,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20942,8 +20942,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20978,8 +20978,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20996,8 +20996,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21032,8 +21032,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21050,8 +21050,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21086,8 +21086,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21104,8 +21104,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21140,8 +21140,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21158,8 +21158,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21194,8 +21194,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21212,8 +21212,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21248,8 +21248,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21266,8 +21266,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21302,8 +21302,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21320,8 +21320,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21356,8 +21356,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21374,8 +21374,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21410,8 +21410,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21428,8 +21428,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21464,8 +21464,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21482,8 +21482,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21518,8 +21518,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21536,8 +21536,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21572,8 +21572,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21590,8 +21590,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21626,8 +21626,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21644,8 +21644,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21680,8 +21680,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21698,8 +21698,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21734,8 +21734,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21752,8 +21752,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21788,8 +21788,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21806,8 +21806,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21842,8 +21842,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21860,8 +21860,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21896,8 +21896,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21914,8 +21914,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21950,8 +21950,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21968,8 +21968,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -22004,8 +22004,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -22022,8 +22022,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -22298,8 +22298,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -22316,8 +22316,8 @@ description: Operations executed import_async.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/import_async/unparsed.snap b/rust/kcl-lib/tests/import_async/unparsed.snap index 34dd7d2f6..8c49b5aa3 100644 --- a/rust/kcl-lib/tests/import_async/unparsed.snap +++ b/rust/kcl-lib/tests/import_async/unparsed.snap @@ -69,7 +69,7 @@ fn rightInvolute(i, sg) { // Draw gear teeth start = startSketchOn(XY) - |> startProfileAt([xs[101], ys[101]], %) + |> startProfile(at = [xs[101], ys[101]]) teeth = reduce([0..100], start, leftInvolute) |> arc(angleStart = 0, angleEnd = toothAngle, radius = baseDiameter / 2) |> reduce([1..101], %, rightInvolute) @@ -92,10 +92,10 @@ startAngle = asin(keywayWidth / 2 / holeRadius) // Sketch the keyway and center hole and extrude keyWay = startSketchOn(body, face = END) - |> startProfileAt([ + |> startProfile(at = [ holeRadius * cos(startAngle), holeRadius * sin(startAngle) - ], %) + ]) |> xLine(length = keywayDepth) |> yLine(length = -keywayWidth) |> xLine(length = -keywayDepth) diff --git a/rust/kcl-lib/tests/import_function_not_sketch/my_functions.kcl b/rust/kcl-lib/tests/import_function_not_sketch/my_functions.kcl index 038219dce..5d8f1915e 100644 --- a/rust/kcl-lib/tests/import_function_not_sketch/my_functions.kcl +++ b/rust/kcl-lib/tests/import_function_not_sketch/my_functions.kcl @@ -1,7 +1,7 @@ @settings(defaultLengthUnit = mm) export part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) diff --git a/rust/kcl-lib/tests/import_function_not_sketch/unparsed@my_functions.kcl.snap b/rust/kcl-lib/tests/import_function_not_sketch/unparsed@my_functions.kcl.snap index 97ec203b7..132f03f6b 100644 --- a/rust/kcl-lib/tests/import_function_not_sketch/unparsed@my_functions.kcl.snap +++ b/rust/kcl-lib/tests/import_function_not_sketch/unparsed@my_functions.kcl.snap @@ -5,7 +5,7 @@ description: Result of unparsing tests/import_function_not_sketch/my_functions.k @settings(defaultLengthUnit = mm) export part001 = startSketchOn(XY) - |> startProfileAt([4, 12], %) + |> startProfile(at = [4, 12]) |> line(end = [2, 0]) |> line(end = [0, -6]) |> line(end = [4, -6]) diff --git a/rust/kcl-lib/tests/intersect_cubes/ast.snap b/rust/kcl-lib/tests/intersect_cubes/ast.snap index d60d26aee..0920666c6 100644 --- a/rust/kcl-lib/tests/intersect_cubes/ast.snap +++ b/rust/kcl-lib/tests/intersect_cubes/ast.snap @@ -66,124 +66,127 @@ description: Result of parsing intersect_cubes.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "center", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "-", - "right": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { "commentStart": 0, + "computed": false, "end": 0, - "name": "size", + "object": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, "start": 0, - "type": "Identifier" + "type": "MemberExpression", + "type": "MemberExpression" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { + "operator": "-", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "center", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "-", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { + "left": { + "commentStart": 0, + "computed": false, + "end": 0, + "object": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "MemberExpression", + "type": "MemberExpression" + }, + "operator": "-", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "size", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -193,7 +196,7 @@ description: Result of parsing intersect_cubes.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -204,8 +207,9 @@ description: Result of parsing intersect_cubes.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/intersect_cubes/input.kcl b/rust/kcl-lib/tests/intersect_cubes/input.kcl index 221421088..ec430fd43 100644 --- a/rust/kcl-lib/tests/intersect_cubes/input.kcl +++ b/rust/kcl-lib/tests/intersect_cubes/input.kcl @@ -1,6 +1,6 @@ fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) diff --git a/rust/kcl-lib/tests/intersect_cubes/unparsed.snap b/rust/kcl-lib/tests/intersect_cubes/unparsed.snap index bb50b83f2..cdb0aadae 100644 --- a/rust/kcl-lib/tests/intersect_cubes/unparsed.snap +++ b/rust/kcl-lib/tests/intersect_cubes/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing intersect_cubes.kcl --- fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) diff --git a/rust/kcl-lib/tests/kcl_samples/80-20-rail/ast.snap b/rust/kcl-lib/tests/kcl_samples/80-20-rail/ast.snap index af7b9403d..479785b2a 100644 --- a/rust/kcl-lib/tests/kcl_samples/80-20-rail/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/80-20-rail/ast.snap @@ -85,77 +85,18 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "originStart", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.1, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "computed": false, "end": 0, @@ -170,12 +111,12 @@ description: Result of parsing 80-20-rail.kcl "property": { "commentStart": 0, "end": 0, - "raw": "1", + "raw": "0", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 1.0, + "value": 0.0, "suffix": "None" } }, @@ -183,22 +124,84 @@ description: Result of parsing 80-20-rail.kcl "type": "MemberExpression", "type": "MemberExpression" }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.1, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "computed": false, + "end": 0, + "object": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "MemberExpression", + "type": "MemberExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -208,7 +211,7 @@ description: Result of parsing 80-20-rail.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -219,8 +222,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_graph_flowchart.snap.md index c8ac79043..2e5c42fb7 100644 --- a/rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_graph_flowchart.snap.md @@ -64,47 +64,47 @@ flowchart LR 115[Solid2d] end subgraph path120 [Path] - 120["Path
[3470, 3529, 6]"] - 121["Segment
[3535, 3603, 6]"] - 122["Segment
[3609, 3709, 6]"] - 123["Segment
[3715, 3832, 6]"] - 124["Segment
[3838, 3923, 6]"] - 125["Segment
[3929, 3936, 6]"] + 120["Path
[3470, 3532, 6]"] + 121["Segment
[3538, 3606, 6]"] + 122["Segment
[3612, 3712, 6]"] + 123["Segment
[3718, 3835, 6]"] + 124["Segment
[3841, 3926, 6]"] + 125["Segment
[3932, 3939, 6]"] 126[Solid2d] end subgraph path127 [Path] - 127["Path
[3947, 3998, 6]"] - 128["Segment
[3947, 3998, 6]"] + 127["Path
[3950, 4001, 6]"] + 128["Segment
[3950, 4001, 6]"] 129[Solid2d] end subgraph path130 [Path] - 130["Path
[4013, 4160, 6]"] - 131["Segment
[4013, 4160, 6]"] + 130["Path
[4016, 4163, 6]"] + 131["Segment
[4016, 4163, 6]"] 132[Solid2d] end subgraph path133 [Path] - 133["Path
[4175, 4323, 6]"] - 134["Segment
[4175, 4323, 6]"] + 133["Path
[4178, 4326, 6]"] + 134["Segment
[4178, 4326, 6]"] 135[Solid2d] end subgraph path136 [Path] - 136["Path
[4338, 4486, 6]"] - 137["Segment
[4338, 4486, 6]"] + 136["Path
[4341, 4489, 6]"] + 137["Segment
[4341, 4489, 6]"] 138[Solid2d] end subgraph path139 [Path] - 139["Path
[4501, 4650, 6]"] - 140["Segment
[4501, 4650, 6]"] + 139["Path
[4504, 4653, 6]"] + 140["Segment
[4504, 4653, 6]"] 141[Solid2d] end subgraph path157 [Path] - 157["Path
[4795, 4833, 6]"] - 158["Segment
[4795, 4833, 6]"] + 157["Path
[4798, 4836, 6]"] + 158["Segment
[4798, 4836, 6]"] 159[Solid2d] end subgraph path165 [Path] - 165["Path
[4906, 4942, 6]"] - 166["Segment
[4906, 4942, 6]"] + 165["Path
[4909, 4945, 6]"] + 166["Segment
[4909, 4945, 6]"] 167[Solid2d] end subgraph path181 [Path] @@ -231,7 +231,7 @@ flowchart LR 117[Wall] 118["SweepEdge Opposite"] 119["SweepEdge Adjacent"] - 142["Sweep Extrusion
[4660, 4679, 6]"] + 142["Sweep Extrusion
[4663, 4682, 6]"] 143[Wall] 144[Wall] 145[Wall] @@ -246,23 +246,23 @@ flowchart LR 154["SweepEdge Adjacent"] 155["SweepEdge Opposite"] 156["SweepEdge Adjacent"] - 160["Sweep Extrusion
[4839, 4859, 6]"] + 160["Sweep Extrusion
[4842, 4862, 6]"] 161[Wall] 162["Cap End"] 163["SweepEdge Opposite"] 164["SweepEdge Adjacent"] - 168["Sweep Extrusion
[4948, 4969, 6]"] + 168["Sweep Extrusion
[4951, 4972, 6]"] 169[Wall] 170["SweepEdge Opposite"] 171["SweepEdge Adjacent"] - 172["EdgeCut Fillet
[5010, 5521, 6]"] - 173["EdgeCut Fillet
[5010, 5521, 6]"] - 174["EdgeCut Fillet
[5010, 5521, 6]"] - 175["EdgeCut Fillet
[5010, 5521, 6]"] - 176["EdgeCut Fillet
[5010, 5521, 6]"] - 177["EdgeCut Fillet
[5010, 5521, 6]"] - 178["EdgeCut Fillet
[5010, 5521, 6]"] - 179["EdgeCut Fillet
[5010, 5521, 6]"] + 172["EdgeCut Fillet
[5013, 5524, 6]"] + 173["EdgeCut Fillet
[5013, 5524, 6]"] + 174["EdgeCut Fillet
[5013, 5524, 6]"] + 175["EdgeCut Fillet
[5013, 5524, 6]"] + 176["EdgeCut Fillet
[5013, 5524, 6]"] + 177["EdgeCut Fillet
[5013, 5524, 6]"] + 178["EdgeCut Fillet
[5013, 5524, 6]"] + 179["EdgeCut Fillet
[5013, 5524, 6]"] 180["Plane
[204, 231, 7]"] 184["Sweep Extrusion
[333, 353, 7]"] 185[Wall] @@ -326,8 +326,8 @@ flowchart LR 278["StartSketchOnFace
[2498, 2541, 6]"] 279["StartSketchOnFace
[3197, 3234, 6]"] 280["StartSketchOnFace
[3421, 3458, 6]"] - 281["StartSketchOnFace
[4746, 4789, 6]"] - 282["StartSketchOnFace
[4861, 4900, 6]"] + 281["StartSketchOnFace
[4749, 4792, 6]"] + 282["StartSketchOnFace
[4864, 4903, 6]"] 283["StartSketchOnPlane
[244, 271, 7]"] 284["StartSketchOnPlane
[453, 496, 7]"] 285["StartSketchOnPlane
[1039, 1092, 8]"] diff --git a/rust/kcl-lib/tests/kcl_samples/axial-fan/ops.snap b/rust/kcl-lib/tests/kcl_samples/axial-fan/ops.snap index 4768bceba..3e75ba245 100644 --- a/rust/kcl-lib/tests/kcl_samples/axial-fan/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/axial-fan/ops.snap @@ -1138,8 +1138,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1174,8 +1174,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1210,8 +1210,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1246,8 +1246,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1282,8 +1282,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1318,8 +1318,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1354,8 +1354,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1390,8 +1390,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1426,8 +1426,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1462,8 +1462,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1498,8 +1498,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1534,8 +1534,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1633,8 +1633,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1669,8 +1669,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1705,8 +1705,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1741,8 +1741,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1777,8 +1777,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1813,8 +1813,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1849,8 +1849,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1885,8 +1885,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1921,8 +1921,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1957,8 +1957,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1993,8 +1993,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2029,8 +2029,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2128,8 +2128,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2164,8 +2164,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2200,8 +2200,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2236,8 +2236,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2272,8 +2272,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2308,8 +2308,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2344,8 +2344,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2380,8 +2380,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2416,8 +2416,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2452,8 +2452,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2488,8 +2488,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2524,8 +2524,8 @@ description: Operations executed axial-fan.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/ball-bearing/ast.snap b/rust/kcl-lib/tests/kcl_samples/ball-bearing/ast.snap index 949c6e0dc..0d0681c92 100644 --- a/rust/kcl-lib/tests/kcl_samples/ball-bearing/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/ball-bearing/ast.snap @@ -1008,22 +1008,65 @@ description: Result of parsing ball-bearing.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "shaftDia", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "shaftDia", + "name": "wallThickness", "start": 0, "type": "Identifier" }, @@ -1032,68 +1075,28 @@ description: Result of parsing ball-bearing.kcl "type": "Name", "type": "Name" }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "wallThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], + "raw": "0.001", "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.001", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.001, - "suffix": "None" + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.001, + "suffix": "None" + } } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1103,7 +1106,7 @@ description: Result of parsing ball-bearing.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1114,8 +1117,9 @@ description: Result of parsing ball-bearing.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1667,12 +1671,18 @@ description: Result of parsing ball-bearing.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { @@ -1682,13 +1692,74 @@ description: Result of parsing ball-bearing.kcl "commentStart": 0, "end": 0, "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "shaftDia", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "shaftDia", + "name": "wallThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sphereDia", "start": 0, "type": "Identifier" }, @@ -1714,28 +1785,11 @@ description: Result of parsing ball-bearing.kcl "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "wallThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", + "operator": "-", "right": { "commentStart": 0, "end": 0, @@ -1746,7 +1800,7 @@ description: Result of parsing ball-bearing.kcl "name": { "commentStart": 0, "end": 0, - "name": "sphereDia", + "name": "chainWidth", "start": 0, "type": "Identifier" }, @@ -1776,139 +1830,92 @@ description: Result of parsing ball-bearing.kcl "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "-", - "right": { + { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "chainWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", + "raw": "0.125", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 0.125, "suffix": "None" } }, + "operator": "*", + "right": { + "arguments": [ + { + "arguments": [ + { + "commentStart": 0, + "end": 0, + "raw": "60", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 60.0, + "suffix": "None" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "toRadians", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.125", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.125, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "arguments": [ - { - "arguments": [ - { - "commentStart": 0, - "end": 0, - "raw": "60", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 60.0, - "suffix": "None" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "toRadians", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "sin", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1918,7 +1925,7 @@ description: Result of parsing ball-bearing.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1929,8 +1936,9 @@ description: Result of parsing ball-bearing.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/ball-bearing/ops.snap b/rust/kcl-lib/tests/kcl_samples/ball-bearing/ops.snap index 21514f9c2..9a4755a5c 100644 --- a/rust/kcl-lib/tests/kcl_samples/ball-bearing/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/ball-bearing/ops.snap @@ -382,8 +382,8 @@ description: Operations executed ball-bearing.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/bottle/ast.snap b/rust/kcl-lib/tests/kcl_samples/bottle/ast.snap index 0ec056728..95b7a58d8 100644 --- a/rust/kcl-lib/tests/kcl_samples/bottle/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/bottle/ast.snap @@ -263,76 +263,79 @@ description: Result of parsing bottle.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "bottleLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "bottleLength", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "raw": "0", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 0.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -342,7 +345,7 @@ description: Result of parsing bottle.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -353,8 +356,9 @@ description: Result of parsing bottle.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/bracket/ast.snap b/rust/kcl-lib/tests/kcl_samples/bracket/ast.snap index 310029bcb..b46de9e8d 100644 --- a/rust/kcl-lib/tests/kcl_samples/bracket/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/bracket/ast.snap @@ -1275,44 +1275,47 @@ description: Result of parsing bracket.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1322,7 +1325,7 @@ description: Result of parsing bracket.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1333,8 +1336,9 @@ description: Result of parsing bracket.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/color-cube/ast.snap b/rust/kcl-lib/tests/kcl_samples/color-cube/ast.snap index 2a971e13b..fe4e47391 100644 --- a/rust/kcl-lib/tests/kcl_samples/color-cube/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/color-cube/ast.snap @@ -825,10 +825,42 @@ description: Result of parsing color-cube.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "halfSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { "abs_path": false, "commentStart": 0, "end": 0, @@ -843,42 +875,13 @@ description: Result of parsing color-cube.kcl "start": 0, "type": "Name", "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "halfSize", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -888,7 +891,7 @@ description: Result of parsing color-cube.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -899,8 +902,9 @@ description: Result of parsing color-cube.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap index f093fd39d..5c8e782e9 100644 --- a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap @@ -227,15 +227,130 @@ description: Result of parsing cycloidal-gear.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "gearPitch", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1.55", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.55, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "arguments": [ + { + "arguments": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "helixAngleP", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "toRadians", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { "commentStart": 0, "end": 0, "left": { @@ -256,117 +371,133 @@ description: Result of parsing cycloidal-gear.kcl }, "operator": "*", "right": { - "commentStart": 0, - "end": 0, - "raw": "1.55", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.55, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "arguments": [ - { - "arguments": [ - { + "arguments": [ + { + "arguments": [ + { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "helixAngleP", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "callee": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "helixAngleP", + "name": "toRadians", "start": 0, "type": "Identifier" }, "path": [], "start": 0, - "type": "Name", "type": "Name" - } - ], - "callee": { - "abs_path": false, + }, "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "toRadians", - "start": 0, - "type": "Identifier" - }, - "path": [], "start": 0, - "type": "Name" - }, + "type": "CallExpression", + "type": "CallExpression" + } + ], + "callee": { + "abs_path": false, "commentStart": 0, "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "CallExpression", - "type": "CallExpression" - } - ], - "callee": { - "abs_path": false, + "type": "Name" + }, "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "cos", - "start": 0, - "type": "Identifier" - }, - "path": [], "start": 0, - "type": "Name" + "type": "CallExpression", + "type": "CallExpression" }, - "commentStart": 0, - "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { + { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { "commentStart": 0, "end": 0, - "name": "gearPitch", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "gearPitch", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1.55", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.55, + "suffix": "None" + } + }, "start": 0, - "type": "Identifier" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "arguments": [ - { - "arguments": [ - { - "argument": { + "operator": "*", + "right": { + "arguments": [ + { + "arguments": [ + { "abs_path": false, "commentStart": 0, "end": 0, @@ -381,73 +512,57 @@ description: Result of parsing cycloidal-gear.kcl "start": 0, "type": "Name", "type": "Name" - }, + } + ], + "callee": { + "abs_path": false, "commentStart": 0, "end": 0, - "operator": "-", + "name": { + "commentStart": 0, + "end": 0, + "name": "toRadians", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "callee": { - "abs_path": false, + "type": "Name" + }, "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "toRadians", - "start": 0, - "type": "Identifier" - }, - "path": [], "start": 0, - "type": "Name" - }, + "type": "CallExpression", + "type": "CallExpression" + } + ], + "callee": { + "abs_path": false, "commentStart": 0, "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "CallExpression", - "type": "CallExpression" - } - ], - "callee": { - "abs_path": false, + "type": "Name" + }, "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "sin", - "start": 0, - "type": "Identifier" - }, - "path": [], "start": 0, - "type": "Name" + "type": "CallExpression", + "type": "CallExpression" }, - "commentStart": 0, - "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { + "operator": "+", + "right": { "commentStart": 0, "end": 0, "left": { @@ -468,203 +583,91 @@ description: Result of parsing cycloidal-gear.kcl }, "operator": "*", "right": { - "commentStart": 0, - "end": 0, - "raw": "1.55", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.55, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "arguments": [ - { - "arguments": [ - { + "arguments": [ + { + "arguments": [ + { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "helixAngleP", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "callee": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "helixAngleP", + "name": "toRadians", "start": 0, "type": "Identifier" }, "path": [], "start": 0, - "type": "Name", "type": "Name" - } - ], - "callee": { - "abs_path": false, + }, "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "toRadians", - "start": 0, - "type": "Identifier" - }, - "path": [], "start": 0, - "type": "Name" - }, + "type": "CallExpression", + "type": "CallExpression" + } + ], + "callee": { + "abs_path": false, "commentStart": 0, "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cos", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "CallExpression", - "type": "CallExpression" - } - ], - "callee": { - "abs_path": false, + "type": "Name" + }, "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "sin", - "start": 0, - "type": "Identifier" - }, - "path": [], "start": 0, - "type": "Name" + "type": "CallExpression", + "type": "CallExpression" }, - "commentStart": 0, - "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "gearPitch", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "arguments": [ - { - "arguments": [ - { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "helixAngleP", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "toRadians", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "cos", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -674,7 +677,7 @@ description: Result of parsing cycloidal-gear.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -685,8 +688,9 @@ description: Result of parsing cycloidal-gear.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ops.snap b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ops.snap index f9232cd99..ca12f1b27 100644 --- a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ops.snap @@ -84,8 +84,8 @@ description: Operations executed cycloidal-gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -120,8 +120,8 @@ description: Operations executed cycloidal-gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -156,8 +156,8 @@ description: Operations executed cycloidal-gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -192,8 +192,8 @@ description: Operations executed cycloidal-gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -317,8 +317,8 @@ description: Operations executed cycloidal-gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -353,8 +353,8 @@ description: Operations executed cycloidal-gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -389,8 +389,8 @@ description: Operations executed cycloidal-gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -425,8 +425,8 @@ description: Operations executed cycloidal-gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -550,8 +550,8 @@ description: Operations executed cycloidal-gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -586,8 +586,8 @@ description: Operations executed cycloidal-gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -622,8 +622,8 @@ description: Operations executed cycloidal-gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -658,8 +658,8 @@ description: Operations executed cycloidal-gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/dodecahedron/ast.snap b/rust/kcl-lib/tests/kcl_samples/dodecahedron/ast.snap index 40d9e1c95..fe7db03ee 100644 --- a/rust/kcl-lib/tests/kcl_samples/dodecahedron/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/dodecahedron/ast.snap @@ -113,108 +113,111 @@ description: Result of parsing dodecahedron.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "1000", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1000.0, - "suffix": "None" - } - }, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, + "left": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "1000", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1000.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "dither", + "name": { + "commentStart": 0, + "end": 0, + "name": "dither", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "1000", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1000.0, - "suffix": "None" - } - }, + { "commentStart": 0, "end": 0, + "left": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "1000", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1000.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "dither", + "name": { + "commentStart": 0, + "end": 0, + "name": "dither", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -224,7 +227,7 @@ description: Result of parsing dodecahedron.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -235,8 +238,9 @@ description: Result of parsing dodecahedron.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/dual-basin-utility-sink/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/dual-basin-utility-sink/artifact_graph_flowchart.snap.md index 6cc347a8e..726bd677a 100644 --- a/rust/kcl-lib/tests/kcl_samples/dual-basin-utility-sink/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/dual-basin-utility-sink/artifact_graph_flowchart.snap.md @@ -1,119 +1,119 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[672, 706, 0]"] - 3["Segment
[712, 744, 0]"] - 4["Segment
[750, 782, 0]"] - 5["Segment
[788, 821, 0]"] - 6["Segment
[827, 883, 0]"] - 7["Segment
[889, 896, 0]"] + 2["Path
[672, 709, 0]"] + 3["Segment
[715, 747, 0]"] + 4["Segment
[753, 785, 0]"] + 5["Segment
[791, 824, 0]"] + 6["Segment
[830, 886, 0]"] + 7["Segment
[892, 899, 0]"] 8[Solid2d] end subgraph path32 [Path] - 32["Path
[1289, 1342, 0]"] - 33["Segment
[1348, 1380, 0]"] - 34["Segment
[1386, 1418, 0]"] - 35["Segment
[1424, 1457, 0]"] - 36["Segment
[1463, 1519, 0]"] - 37["Segment
[1525, 1532, 0]"] + 32["Path
[1292, 1348, 0]"] + 33["Segment
[1354, 1386, 0]"] + 34["Segment
[1392, 1424, 0]"] + 35["Segment
[1430, 1463, 0]"] + 36["Segment
[1469, 1525, 0]"] + 37["Segment
[1531, 1538, 0]"] 38[Solid2d] end subgraph path59 [Path] - 59["Path
[1797, 1850, 0]"] - 60["Segment
[1856, 1888, 0]"] - 61["Segment
[1894, 1926, 0]"] - 62["Segment
[1932, 1965, 0]"] - 63["Segment
[1971, 2027, 0]"] - 64["Segment
[2033, 2040, 0]"] + 59["Path
[1803, 1859, 0]"] + 60["Segment
[1865, 1897, 0]"] + 61["Segment
[1903, 1935, 0]"] + 62["Segment
[1941, 1974, 0]"] + 63["Segment
[1980, 2036, 0]"] + 64["Segment
[2042, 2049, 0]"] 65[Solid2d] end subgraph path83 [Path] - 83["Path
[2436, 2491, 0]"] - 84["Segment
[2497, 2529, 0]"] - 85["Segment
[2535, 2567, 0]"] - 86["Segment
[2573, 2606, 0]"] - 87["Segment
[2612, 2668, 0]"] - 88["Segment
[2674, 2681, 0]"] + 83["Path
[2445, 2503, 0]"] + 84["Segment
[2509, 2541, 0]"] + 85["Segment
[2547, 2579, 0]"] + 86["Segment
[2585, 2618, 0]"] + 87["Segment
[2624, 2680, 0]"] + 88["Segment
[2686, 2693, 0]"] 89[Solid2d] end subgraph path111 [Path] - 111["Path
[2983, 3021, 0]"] - 112["Segment
[3027, 3059, 0]"] - 113["Segment
[3065, 3091, 0]"] - 114["Segment
[3097, 3130, 0]"] - 115["Segment
[3136, 3192, 0]"] - 116["Segment
[3198, 3205, 0]"] + 111["Path
[2995, 3036, 0]"] + 112["Segment
[3042, 3074, 0]"] + 113["Segment
[3080, 3106, 0]"] + 114["Segment
[3112, 3145, 0]"] + 115["Segment
[3151, 3207, 0]"] + 116["Segment
[3213, 3220, 0]"] 117[Solid2d] end subgraph path134 [Path] - 134["Path
[3388, 3441, 0]"] - 135["Segment
[3447, 3479, 0]"] - 136["Segment
[3485, 3517, 0]"] - 137["Segment
[3523, 3556, 0]"] - 138["Segment
[3562, 3618, 0]"] - 139["Segment
[3624, 3631, 0]"] + 134["Path
[3403, 3459, 0]"] + 135["Segment
[3465, 3497, 0]"] + 136["Segment
[3503, 3535, 0]"] + 137["Segment
[3541, 3574, 0]"] + 138["Segment
[3580, 3636, 0]"] + 139["Segment
[3642, 3649, 0]"] 140[Solid2d] end subgraph path158 [Path] - 158["Path
[3859, 3896, 0]"] - 159["Segment
[3902, 3928, 0]"] - 160["Segment
[3934, 3960, 0]"] - 161["Segment
[3966, 3993, 0]"] - 162["Segment
[3999, 4055, 0]"] - 163["Segment
[4061, 4068, 0]"] + 158["Path
[3877, 3917, 0]"] + 159["Segment
[3923, 3949, 0]"] + 160["Segment
[3955, 3981, 0]"] + 161["Segment
[3987, 4014, 0]"] + 162["Segment
[4020, 4076, 0]"] + 163["Segment
[4082, 4089, 0]"] 164[Solid2d] end subgraph path180 [Path] - 180["Path
[4355, 4423, 0]"] - 181["Segment
[4429, 4455, 0]"] - 182["Segment
[4461, 4487, 0]"] - 183["Segment
[4493, 4520, 0]"] - 184["Segment
[4526, 4582, 0]"] - 185["Segment
[4588, 4595, 0]"] + 180["Path
[4376, 4447, 0]"] + 181["Segment
[4453, 4479, 0]"] + 182["Segment
[4485, 4511, 0]"] + 183["Segment
[4517, 4544, 0]"] + 184["Segment
[4550, 4606, 0]"] + 185["Segment
[4612, 4619, 0]"] 186[Solid2d] end subgraph path202 [Path] - 202["Path
[4789, 4910, 0]"] - 203["Segment
[4916, 4965, 0]"] - 204["Segment
[4971, 5019, 0]"] - 205["Segment
[5025, 5073, 0]"] - 206["Segment
[5079, 5135, 0]"] - 207["Segment
[5141, 5148, 0]"] + 202["Path
[4813, 4965, 0]"] + 203["Segment
[4971, 5020, 0]"] + 204["Segment
[5026, 5074, 0]"] + 205["Segment
[5080, 5128, 0]"] + 206["Segment
[5134, 5190, 0]"] + 207["Segment
[5196, 5203, 0]"] 208[Solid2d] end subgraph path225 [Path] - 225["Path
[5680, 5721, 0]"] - 226["Segment
[5727, 5759, 0]"] - 227["Segment
[5765, 5790, 0]"] - 228["Segment
[5796, 5829, 0]"] - 229["Segment
[5835, 5891, 0]"] - 230["Segment
[5897, 5904, 0]"] + 225["Path
[5735, 5779, 0]"] + 226["Segment
[5785, 5817, 0]"] + 227["Segment
[5823, 5848, 0]"] + 228["Segment
[5854, 5887, 0]"] + 229["Segment
[5893, 5949, 0]"] + 230["Segment
[5955, 5962, 0]"] 231[Solid2d] end subgraph path252 [Path] - 252["Path
[6191, 6232, 0]"] - 253["Segment
[6238, 6264, 0]"] - 254["Segment
[6270, 6302, 0]"] - 255["Segment
[6308, 6335, 0]"] - 256["Segment
[6341, 6397, 0]"] - 257["Segment
[6403, 6410, 0]"] + 252["Path
[6249, 6293, 0]"] + 253["Segment
[6299, 6325, 0]"] + 254["Segment
[6331, 6363, 0]"] + 255["Segment
[6369, 6396, 0]"] + 256["Segment
[6402, 6458, 0]"] + 257["Segment
[6464, 6471, 0]"] 258[Solid2d] end subgraph path276 [Path] - 276["Path
[6887, 6937, 0]"] - 277["Segment
[6943, 6980, 0]"] - 278["Segment
[6986, 7079, 0]"] - 279["Segment
[7085, 7121, 0]"] - 280["Segment
[7127, 7228, 0]"] - 281["Segment
[7234, 7270, 0]"] + 276["Path
[6948, 7001, 0]"] + 277["Segment
[7007, 7044, 0]"] + 278["Segment
[7050, 7143, 0]"] + 279["Segment
[7149, 7185, 0]"] + 280["Segment
[7191, 7292, 0]"] + 281["Segment
[7298, 7334, 0]"] end subgraph path283 [Path] - 283["Path
[7333, 7444, 0]"] - 284["Segment
[7333, 7444, 0]"] + 283["Path
[7397, 7508, 0]"] + 284["Segment
[7397, 7508, 0]"] 285[Solid2d] end 1["Plane
[565, 582, 0]"] - 9["Sweep Extrusion
[1057, 1084, 0]"] + 9["Sweep Extrusion
[1060, 1087, 0]"] 10[Wall] 11[Wall] 12[Wall] @@ -128,15 +128,15 @@ flowchart LR 21["SweepEdge Adjacent"] 22["SweepEdge Opposite"] 23["SweepEdge Adjacent"] - 24["Sweep Extrusion
[1057, 1084, 0]"] - 25["Sweep Extrusion
[1057, 1084, 0]"] - 26["Sweep Extrusion
[1057, 1084, 0]"] - 27["Sweep Extrusion
[1057, 1084, 0]"] - 28["Sweep Extrusion
[1057, 1084, 0]"] - 29["Sweep Extrusion
[1057, 1084, 0]"] - 30["Sweep Extrusion
[1057, 1084, 0]"] - 31["Plane
[1216, 1270, 0]"] - 39["Sweep Extrusion
[1695, 1729, 0]"] + 24["Sweep Extrusion
[1060, 1087, 0]"] + 25["Sweep Extrusion
[1060, 1087, 0]"] + 26["Sweep Extrusion
[1060, 1087, 0]"] + 27["Sweep Extrusion
[1060, 1087, 0]"] + 28["Sweep Extrusion
[1060, 1087, 0]"] + 29["Sweep Extrusion
[1060, 1087, 0]"] + 30["Sweep Extrusion
[1060, 1087, 0]"] + 31["Plane
[1219, 1273, 0]"] + 39["Sweep Extrusion
[1701, 1735, 0]"] 40[Wall] 41[Wall] 42[Wall] @@ -151,12 +151,12 @@ flowchart LR 51["SweepEdge Adjacent"] 52["SweepEdge Opposite"] 53["SweepEdge Adjacent"] - 54["Sweep Extrusion
[1695, 1729, 0]"] - 55["Sweep Extrusion
[1695, 1729, 0]"] - 56["Sweep Extrusion
[1695, 1729, 0]"] - 57["Sweep Extrusion
[1695, 1729, 0]"] - 58["Sweep Extrusion
[1695, 1729, 0]"] - 66["Sweep Extrusion
[2139, 2173, 0]"] + 54["Sweep Extrusion
[1701, 1735, 0]"] + 55["Sweep Extrusion
[1701, 1735, 0]"] + 56["Sweep Extrusion
[1701, 1735, 0]"] + 57["Sweep Extrusion
[1701, 1735, 0]"] + 58["Sweep Extrusion
[1701, 1735, 0]"] + 66["Sweep Extrusion
[2148, 2182, 0]"] 67[Wall] 68[Wall] 69[Wall] @@ -171,9 +171,9 @@ flowchart LR 78["SweepEdge Adjacent"] 79["SweepEdge Opposite"] 80["SweepEdge Adjacent"] - 81["Sweep Extrusion
[2139, 2173, 0]"] - 82["Plane
[2290, 2341, 0]"] - 90["Sweep Extrusion
[2844, 2879, 0]"] + 81["Sweep Extrusion
[2148, 2182, 0]"] + 82["Plane
[2299, 2350, 0]"] + 90["Sweep Extrusion
[2856, 2891, 0]"] 91[Wall] 92[Wall] 93[Wall] @@ -188,13 +188,13 @@ flowchart LR 102["SweepEdge Adjacent"] 103["SweepEdge Opposite"] 104["SweepEdge Adjacent"] - 105["Sweep Extrusion
[2844, 2879, 0]"] - 106["Sweep Extrusion
[2844, 2879, 0]"] - 107["Sweep Extrusion
[2844, 2879, 0]"] - 108["Sweep Extrusion
[2844, 2879, 0]"] - 109["Sweep Extrusion
[2844, 2879, 0]"] - 110["Plane
[2926, 2963, 0]"] - 118["Sweep Extrusion
[3285, 3320, 0]"] + 105["Sweep Extrusion
[2856, 2891, 0]"] + 106["Sweep Extrusion
[2856, 2891, 0]"] + 107["Sweep Extrusion
[2856, 2891, 0]"] + 108["Sweep Extrusion
[2856, 2891, 0]"] + 109["Sweep Extrusion
[2856, 2891, 0]"] + 110["Plane
[2938, 2975, 0]"] + 118["Sweep Extrusion
[3300, 3335, 0]"] 119[Wall] 120[Wall] 121[Wall] @@ -209,8 +209,8 @@ flowchart LR 130["SweepEdge Adjacent"] 131["SweepEdge Opposite"] 132["SweepEdge Adjacent"] - 133["Sweep Extrusion
[3285, 3320, 0]"] - 141["Sweep Extrusion
[3730, 3765, 0]"] + 133["Sweep Extrusion
[3300, 3335, 0]"] + 141["Sweep Extrusion
[3748, 3783, 0]"] 142[Wall] 143[Wall] 144[Wall] @@ -225,9 +225,9 @@ flowchart LR 153["SweepEdge Adjacent"] 154["SweepEdge Opposite"] 155["SweepEdge Adjacent"] - 156["Sweep Extrusion
[3730, 3765, 0]"] - 157["Plane
[3805, 3842, 0]"] - 165["Sweep Extrusion
[4074, 4107, 0]"] + 156["Sweep Extrusion
[3748, 3783, 0]"] + 157["Plane
[3823, 3860, 0]"] + 165["Sweep Extrusion
[4095, 4128, 0]"] 166[Wall] 167[Wall] 168[Wall] @@ -242,7 +242,7 @@ flowchart LR 177["SweepEdge Adjacent"] 178["SweepEdge Opposite"] 179["SweepEdge Adjacent"] - 187["Sweep Extrusion
[4685, 4712, 0]"] + 187["Sweep Extrusion
[4709, 4736, 0]"] 188[Wall] 189[Wall] 190[Wall] @@ -256,8 +256,8 @@ flowchart LR 198["SweepEdge Adjacent"] 199["SweepEdge Opposite"] 200["SweepEdge Adjacent"] - 201["Sweep Extrusion
[4685, 4712, 0]"] - 209["Sweep Extrusion
[5237, 5265, 0]"] + 201["Sweep Extrusion
[4709, 4736, 0]"] + 209["Sweep Extrusion
[5292, 5320, 0]"] 210[Wall] 211[Wall] 212[Wall] @@ -271,9 +271,9 @@ flowchart LR 220["SweepEdge Adjacent"] 221["SweepEdge Opposite"] 222["SweepEdge Adjacent"] - 223["Sweep Extrusion
[5237, 5265, 0]"] - 224["Plane
[5618, 5667, 0]"] - 232["Sweep Extrusion
[6003, 6031, 0]"] + 223["Sweep Extrusion
[5292, 5320, 0]"] + 224["Plane
[5673, 5722, 0]"] + 232["Sweep Extrusion
[6061, 6089, 0]"] 233[Wall] 234[Wall] 235[Wall] @@ -288,12 +288,12 @@ flowchart LR 244["SweepEdge Adjacent"] 245["SweepEdge Opposite"] 246["SweepEdge Adjacent"] - 247["Sweep Extrusion
[6003, 6031, 0]"] - 248["Sweep Extrusion
[6003, 6031, 0]"] - 249["Sweep Extrusion
[6003, 6031, 0]"] - 250["Sweep Extrusion
[6003, 6031, 0]"] - 251["Sweep Extrusion
[6003, 6031, 0]"] - 259["Sweep Extrusion
[6492, 6520, 0]"] + 247["Sweep Extrusion
[6061, 6089, 0]"] + 248["Sweep Extrusion
[6061, 6089, 0]"] + 249["Sweep Extrusion
[6061, 6089, 0]"] + 250["Sweep Extrusion
[6061, 6089, 0]"] + 251["Sweep Extrusion
[6061, 6089, 0]"] + 259["Sweep Extrusion
[6553, 6581, 0]"] 260[Wall] 261[Wall] 262[Wall] @@ -308,23 +308,23 @@ flowchart LR 271["SweepEdge Adjacent"] 272["SweepEdge Opposite"] 273["SweepEdge Adjacent"] - 274["Sweep Extrusion
[6492, 6520, 0]"] - 275["Plane
[6813, 6864, 0]"] - 282["Plane
[7292, 7309, 0]"] - 286["Sweep Sweep
[7458, 7511, 0]"] + 274["Sweep Extrusion
[6553, 6581, 0]"] + 275["Plane
[6874, 6925, 0]"] + 282["Plane
[7356, 7373, 0]"] + 286["Sweep Sweep
[7522, 7575, 0]"] 287[Wall] 288["Cap Start"] 289["Cap Start"] 290["SweepEdge Opposite"] 291["SweepEdge Adjacent"] - 292["StartSketchOnPlane
[1202, 1271, 0]"] - 293["StartSketchOnPlane
[2276, 2342, 0]"] - 294["StartSketchOnPlane
[2912, 2964, 0]"] - 295["StartSketchOnPlane
[3791, 3843, 0]"] - 296["StartSketchOnFace
[4295, 4336, 0]"] - 297["StartSketchOnFace
[4732, 4771, 0]"] - 298["StartSketchOnPlane
[5604, 5668, 0]"] - 299["StartSketchOnPlane
[6799, 6865, 0]"] + 292["StartSketchOnPlane
[1205, 1274, 0]"] + 293["StartSketchOnPlane
[2285, 2351, 0]"] + 294["StartSketchOnPlane
[2924, 2976, 0]"] + 295["StartSketchOnPlane
[3809, 3861, 0]"] + 296["StartSketchOnFace
[4316, 4357, 0]"] + 297["StartSketchOnFace
[4756, 4795, 0]"] + 298["StartSketchOnPlane
[5659, 5723, 0]"] + 299["StartSketchOnPlane
[6860, 6926, 0]"] 1 --- 2 2 --- 3 2 --- 4 diff --git a/rust/kcl-lib/tests/kcl_samples/dual-basin-utility-sink/ast.snap b/rust/kcl-lib/tests/kcl_samples/dual-basin-utility-sink/ast.snap index bca7dc670..e40c10fe0 100644 --- a/rust/kcl-lib/tests/kcl_samples/dual-basin-utility-sink/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/dual-basin-utility-sink/ast.snap @@ -729,53 +729,47 @@ description: Result of parsing dual-basin-utility-sink.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "floorPlane", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -785,7 +779,7 @@ description: Result of parsing dual-basin-utility-sink.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -796,8 +790,24 @@ description: Result of parsing dual-basin-utility-sink.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "floorPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -1632,57 +1642,51 @@ description: Result of parsing dual-basin-utility-sink.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "profileThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "lowerBeltPlane", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "profileThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1692,7 +1696,7 @@ description: Result of parsing dual-basin-utility-sink.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1703,8 +1707,24 @@ description: Result of parsing dual-basin-utility-sink.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "lowerBeltPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -2377,57 +2397,51 @@ description: Result of parsing dual-basin-utility-sink.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "profileThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "lowerBeltPlane", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "profileThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2437,7 +2451,7 @@ description: Result of parsing dual-basin-utility-sink.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2448,8 +2462,24 @@ description: Result of parsing dual-basin-utility-sink.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "lowerBeltPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -3240,57 +3270,51 @@ description: Result of parsing dual-basin-utility-sink.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "blockSubdivisionWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "pillarPlane", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "blockSubdivisionWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -3300,7 +3324,7 @@ description: Result of parsing dual-basin-utility-sink.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -3311,8 +3335,24 @@ description: Result of parsing dual-basin-utility-sink.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pillarPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -4053,53 +4093,47 @@ description: Result of parsing dual-basin-utility-sink.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "upperBeltPlane", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -4109,7 +4143,7 @@ description: Result of parsing dual-basin-utility-sink.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -4120,8 +4154,24 @@ description: Result of parsing dual-basin-utility-sink.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "upperBeltPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -4682,57 +4732,51 @@ description: Result of parsing dual-basin-utility-sink.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "profileThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "upperBeltPlane", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "profileThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -4742,7 +4786,7 @@ description: Result of parsing dual-basin-utility-sink.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -4753,8 +4797,24 @@ description: Result of parsing dual-basin-utility-sink.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "upperBeltPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -5407,53 +5467,47 @@ description: Result of parsing dual-basin-utility-sink.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "tableTopPlane", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -5463,7 +5517,7 @@ description: Result of parsing dual-basin-utility-sink.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -5474,8 +5528,24 @@ description: Result of parsing dual-basin-utility-sink.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tableTopPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -6249,17 +6319,49 @@ description: Result of parsing dual-basin-utility-sink.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sinkOffsetLeft", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "sinkOffsetLeft", + "name": "sinkOffsetFront", "start": 0, "type": "Identifier" }, @@ -6267,51 +6369,13 @@ description: Result of parsing dual-basin-utility-sink.kcl "start": 0, "type": "Name", "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "sinkOffsetFront", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, + } + ], "end": 0, - "name": "sinkPlaneOutside", "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -6321,7 +6385,7 @@ description: Result of parsing dual-basin-utility-sink.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -6332,8 +6396,24 @@ description: Result of parsing dual-basin-utility-sink.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sinkPlaneOutside", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -6932,109 +7012,103 @@ description: Result of parsing dual-basin-utility-sink.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "sinkOffsetLeft", - "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": "metalThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "sinkOffsetFront", - "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": "metalThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "sinkPlaneInside", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sinkOffsetLeft", + "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": "metalThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sinkOffsetFront", + "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": "metalThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -7044,7 +7118,7 @@ description: Result of parsing dual-basin-utility-sink.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -7055,8 +7129,24 @@ description: Result of parsing dual-basin-utility-sink.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sinkPlaneInside", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -8251,57 +8341,51 @@ description: Result of parsing dual-basin-utility-sink.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "doorStart", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "doorPlane", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "doorStart", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -8311,7 +8395,7 @@ description: Result of parsing dual-basin-utility-sink.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -8322,8 +8406,24 @@ description: Result of parsing dual-basin-utility-sink.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "doorPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -9060,57 +9160,51 @@ description: Result of parsing dual-basin-utility-sink.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "doorStart", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "doorPlane", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "doorStart", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -9120,7 +9214,7 @@ description: Result of parsing dual-basin-utility-sink.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -9131,8 +9225,24 @@ description: Result of parsing dual-basin-utility-sink.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "doorPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -10152,12 +10262,54 @@ description: Result of parsing dual-basin-utility-sink.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "handleOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { "commentStart": 0, "end": 0, "raw": "0", @@ -10168,61 +10320,13 @@ description: Result of parsing dual-basin-utility-sink.kcl "value": 0.0, "suffix": "None" } - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "handleOffset", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, + ], "end": 0, - "name": "handlePlane", "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -10232,7 +10336,7 @@ description: Result of parsing dual-basin-utility-sink.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -10243,8 +10347,24 @@ description: Result of parsing dual-basin-utility-sink.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "handlePlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/enclosure/ast.snap b/rust/kcl-lib/tests/kcl_samples/enclosure/ast.snap index a894c43e6..05f66210b 100644 --- a/rust/kcl-lib/tests/kcl_samples/enclosure/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/enclosure/ast.snap @@ -230,44 +230,47 @@ description: Result of parsing enclosure.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -277,7 +280,7 @@ description: Result of parsing enclosure.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -288,8 +291,9 @@ description: Result of parsing enclosure.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2949,68 +2953,71 @@ description: Result of parsing enclosure.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "width", + "name": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1.2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.2, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "*", - "right": { + { "commentStart": 0, "end": 0, - "raw": "1.2", + "raw": "0", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 1.2, + "value": 0.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -3020,7 +3027,7 @@ description: Result of parsing enclosure.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -3031,8 +3038,9 @@ description: Result of parsing enclosure.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -5138,22 +5146,65 @@ description: Result of parsing enclosure.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1.2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.2, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "width", + "name": "wallThickness", "start": 0, "type": "Identifier" }, @@ -5162,25 +5213,11 @@ description: Result of parsing enclosure.kcl "type": "Name", "type": "Name" }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "1.2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.2, - "suffix": "None" - } - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { + { "abs_path": false, "commentStart": 0, "end": 0, @@ -5195,39 +5232,13 @@ description: Result of parsing enclosure.kcl "start": 0, "type": "Name", "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "wallThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -5237,7 +5248,7 @@ description: Result of parsing enclosure.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -5248,8 +5259,9 @@ description: Result of parsing enclosure.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ast.snap b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ast.snap index da9ff35e2..3e4a6f2c0 100644 --- a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ast.snap @@ -663,48 +663,51 @@ description: Result of parsing exhaust-manifold.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": "plateHeight", + "raw": "0", "start": 0, - "type": "Identifier" + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "plateHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -714,7 +717,7 @@ description: Result of parsing exhaust-manifold.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -725,8 +728,9 @@ description: Result of parsing exhaust-manifold.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2177,72 +2181,75 @@ description: Result of parsing exhaust-manifold.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "raw": "3", + "left": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1.3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.3, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "+", - "right": { + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "1.25", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.25, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "1.3", + "operator": "-", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.3, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "1.25", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.25, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2252,7 +2259,7 @@ description: Result of parsing exhaust-manifold.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2263,8 +2270,9 @@ description: Result of parsing exhaust-manifold.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ops.snap b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ops.snap index b30b4f7fa..25f9ce025 100644 --- a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ops.snap @@ -24,8 +24,8 @@ description: Operations executed exhaust-manifold.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -60,8 +60,8 @@ description: Operations executed exhaust-manifold.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -362,8 +362,8 @@ description: Operations executed exhaust-manifold.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -398,8 +398,8 @@ description: Operations executed exhaust-manifold.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -700,8 +700,8 @@ description: Operations executed exhaust-manifold.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -736,8 +736,8 @@ description: Operations executed exhaust-manifold.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1038,8 +1038,8 @@ description: Operations executed exhaust-manifold.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1074,8 +1074,8 @@ description: Operations executed exhaust-manifold.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ast.snap b/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ast.snap index feab342a3..7dfba3014 100644 --- a/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ast.snap @@ -377,164 +377,167 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "-", - "right": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, + "computed": false, "end": 0, - "name": { + "object": { "commentStart": 0, "end": 0, - "name": "w", + "name": "pos", "start": 0, + "type": "Identifier", "type": "Identifier" }, - "path": [], + "property": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, "start": 0, - "type": "Name", - "type": "Name" + "type": "MemberExpression", + "type": "MemberExpression" }, - "operator": "/", + "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "w", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "-", - "right": { + { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, + "computed": false, "end": 0, - "name": { + "object": { "commentStart": 0, "end": 0, - "name": "l", + "name": "pos", "start": 0, + "type": "Identifier", "type": "Identifier" }, - "path": [], + "property": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, "start": 0, - "type": "Name", - "type": "Name" + "type": "MemberExpression", + "type": "MemberExpression" }, - "operator": "/", + "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "l", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -544,7 +547,7 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -555,8 +558,9 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1866,128 +1870,131 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "w", + "name": { + "commentStart": 0, + "end": 0, + "name": "w", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", + "operator": "-", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "2", + "name": { + "commentStart": 0, + "end": 0, + "name": "t", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "-", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "t", + "name": { + "commentStart": 0, + "end": 0, + "name": "d", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "operator": "+", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "d", + "name": { + "commentStart": 0, + "end": 0, + "name": "t", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "t", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1997,7 +2004,7 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2008,8 +2015,9 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -4210,22 +4218,65 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "width", + "name": "thk", "start": 0, "type": "Identifier" }, @@ -4234,58 +4285,58 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "type": "Name", "type": "Name" }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "thk", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { + { "commentStart": 0, "end": 0, "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "length", + "name": "thk", "start": 0, "type": "Identifier" }, @@ -4294,56 +4345,16 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "type": "Name", "type": "Name" }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "thk", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -4353,7 +4364,7 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -4364,8 +4375,9 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -5718,90 +5730,73 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "width", + "name": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", + "operator": "-", "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "thk", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "length", + "name": "thk", "start": 0, "type": "Identifier" }, @@ -5810,56 +5805,76 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "type": "Name", "type": "Name" }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { + "left": { "commentStart": 0, "end": 0, - "name": "thk", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Identifier" + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "thk", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -5869,7 +5884,7 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -5880,8 +5895,9 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -7707,100 +7723,103 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "length", + "name": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", + "operator": "-", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "2", + "name": { + "commentStart": 0, + "end": 0, + "name": "thk", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "-", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "thk", - "start": 0, - "type": "Identifier" - }, - "path": [], + "raw": "0", "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -7810,7 +7829,7 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -7821,8 +7840,9 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -8170,22 +8190,65 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "length", + "name": "thk", "start": 0, "type": "Identifier" }, @@ -8194,68 +8257,28 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "type": "Name", "type": "Name" }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "thk", - "start": 0, - "type": "Identifier" - }, - "path": [], + "raw": "0", "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -8265,7 +8288,7 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -8276,8 +8299,9 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/artifact_graph_flowchart.snap.md index 58e45026b..b22b3f4f9 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/artifact_graph_flowchart.snap.md @@ -1,76 +1,76 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[1445, 1499, 0]"] - 3["Segment
[1505, 1537, 0]"] - 4["Segment
[1543, 1580, 0]"] - 5["Segment
[1586, 1619, 0]"] - 6["Segment
[1625, 1692, 0]"] - 7["Segment
[1698, 1705, 0]"] + 2["Path
[1448, 1505, 0]"] + 3["Segment
[1511, 1543, 0]"] + 4["Segment
[1549, 1586, 0]"] + 5["Segment
[1592, 1625, 0]"] + 6["Segment
[1631, 1698, 0]"] + 7["Segment
[1704, 1711, 0]"] 8[Solid2d] end subgraph path9 [Path] - 9["Path
[1001, 1042, 0]"] - 10["Segment
[1050, 1090, 0]"] - 11["Segment
[1098, 1144, 0]"] - 12["Segment
[1152, 1193, 0]"] - 13["Segment
[1201, 1266, 0]"] - 14["Segment
[1274, 1281, 0]"] + 9["Path
[1001, 1045, 0]"] + 10["Segment
[1053, 1093, 0]"] + 11["Segment
[1101, 1147, 0]"] + 12["Segment
[1155, 1196, 0]"] + 13["Segment
[1204, 1269, 0]"] + 14["Segment
[1277, 1284, 0]"] 15[Solid2d] end subgraph path16 [Path] - 16["Path
[1001, 1042, 0]"] - 17["Segment
[1050, 1090, 0]"] - 18["Segment
[1098, 1144, 0]"] - 19["Segment
[1152, 1193, 0]"] - 20["Segment
[1201, 1266, 0]"] - 21["Segment
[1274, 1281, 0]"] + 16["Path
[1001, 1045, 0]"] + 17["Segment
[1053, 1093, 0]"] + 18["Segment
[1101, 1147, 0]"] + 19["Segment
[1155, 1196, 0]"] + 20["Segment
[1204, 1269, 0]"] + 21["Segment
[1277, 1284, 0]"] 22[Solid2d] end subgraph path23 [Path] - 23["Path
[1001, 1042, 0]"] - 24["Segment
[1050, 1090, 0]"] - 25["Segment
[1098, 1144, 0]"] - 26["Segment
[1152, 1193, 0]"] - 27["Segment
[1201, 1266, 0]"] - 28["Segment
[1274, 1281, 0]"] + 23["Path
[1001, 1045, 0]"] + 24["Segment
[1053, 1093, 0]"] + 25["Segment
[1101, 1147, 0]"] + 26["Segment
[1155, 1196, 0]"] + 27["Segment
[1204, 1269, 0]"] + 28["Segment
[1277, 1284, 0]"] 29[Solid2d] end subgraph path49 [Path] - 49["Path
[2708, 2761, 0]"] - 50["Segment
[2767, 2826, 0]"] - 51["Segment
[2832, 2867, 0]"] - 52["Segment
[2873, 2906, 0]"] - 53["Segment
[2912, 2971, 0]"] - 54["Segment
[2977, 3013, 0]"] - 55["Segment
[3019, 3043, 0]"] - 56["Segment
[3049, 3056, 0]"] + 49["Path
[2714, 2770, 0]"] + 50["Segment
[2776, 2835, 0]"] + 51["Segment
[2841, 2876, 0]"] + 52["Segment
[2882, 2915, 0]"] + 53["Segment
[2921, 2980, 0]"] + 54["Segment
[2986, 3022, 0]"] + 55["Segment
[3028, 3052, 0]"] + 56["Segment
[3058, 3065, 0]"] 57[Solid2d] end subgraph path83 [Path] - 83["Path
[3651, 3698, 0]"] - 84["Segment
[3704, 3754, 0]"] - 85["Segment
[3760, 3826, 0]"] - 86["Segment
[3832, 3883, 0]"] - 87["Segment
[3889, 3954, 0]"] - 88["Segment
[3960, 4013, 0]"] - 89["Segment
[4019, 4086, 0]"] - 90["Segment
[4092, 4166, 0]"] - 91["Segment
[4172, 4240, 0]"] - 92["Segment
[4246, 4253, 0]"] + 83["Path
[3660, 3710, 0]"] + 84["Segment
[3716, 3766, 0]"] + 85["Segment
[3772, 3838, 0]"] + 86["Segment
[3844, 3895, 0]"] + 87["Segment
[3901, 3966, 0]"] + 88["Segment
[3972, 4025, 0]"] + 89["Segment
[4031, 4098, 0]"] + 90["Segment
[4104, 4178, 0]"] + 91["Segment
[4184, 4252, 0]"] + 92["Segment
[4258, 4265, 0]"] 93[Solid2d] end subgraph path121 [Path] - 121["Path
[1001, 1042, 0]"] - 122["Segment
[1050, 1090, 0]"] - 123["Segment
[1098, 1144, 0]"] - 124["Segment
[1152, 1193, 0]"] - 125["Segment
[1201, 1266, 0]"] - 126["Segment
[1274, 1281, 0]"] + 121["Path
[1001, 1045, 0]"] + 122["Segment
[1053, 1093, 0]"] + 123["Segment
[1101, 1147, 0]"] + 124["Segment
[1155, 1196, 0]"] + 125["Segment
[1204, 1269, 0]"] + 126["Segment
[1277, 1284, 0]"] 127[Solid2d] end - 1["Plane
[1374, 1391, 0]"] - 30["Sweep Extrusion
[2280, 2330, 0]"] + 1["Plane
[1377, 1394, 0]"] + 30["Sweep Extrusion
[2286, 2336, 0]"] 31[Wall] 32[Wall] 33[Wall] @@ -88,8 +88,8 @@ flowchart LR 45["SweepEdge Adjacent"] 46["SweepEdge Opposite"] 47["SweepEdge Adjacent"] - 48["Plane
[2605, 2647, 0]"] - 58["Sweep Extrusion
[3090, 3134, 0]"] + 48["Plane
[2611, 2653, 0]"] + 58["Sweep Extrusion
[3099, 3143, 0]"] 59[Wall] 60[Wall] 61[Wall] @@ -113,8 +113,8 @@ flowchart LR 79["SweepEdge Adjacent"] 80["SweepEdge Opposite"] 81["SweepEdge Adjacent"] - 82["Plane
[3577, 3603, 0]"] - 94["Sweep Extrusion
[4309, 4351, 0]"] + 82["Plane
[3586, 3612, 0]"] + 94["Sweep Extrusion
[4321, 4363, 0]"] 95[Wall] 96[Wall] 97[Wall] @@ -141,7 +141,7 @@ flowchart LR 118["SweepEdge Adjacent"] 119["SweepEdge Opposite"] 120["SweepEdge Adjacent"] - 128["Sweep Extrusion
[4586, 4636, 0]"] + 128["Sweep Extrusion
[4598, 4648, 0]"] 129[Wall] 130[Wall] 131[Wall] @@ -154,12 +154,12 @@ flowchart LR 138["SweepEdge Adjacent"] 139["SweepEdge Opposite"] 140["SweepEdge Adjacent"] - 141["EdgeCut Fillet
[2367, 2508, 0]"] - 142["EdgeCut Fillet
[2367, 2508, 0]"] - 143["EdgeCut Fillet
[3177, 3308, 0]"] - 144["EdgeCut Fillet
[3177, 3308, 0]"] - 145["StartSketchOnPlane
[2591, 2648, 0]"] - 146["StartSketchOnFace
[4410, 4449, 0]"] + 141["EdgeCut Fillet
[2373, 2514, 0]"] + 142["EdgeCut Fillet
[2373, 2514, 0]"] + 143["EdgeCut Fillet
[3186, 3317, 0]"] + 144["EdgeCut Fillet
[3186, 3317, 0]"] + 145["StartSketchOnPlane
[2597, 2654, 0]"] + 146["StartSketchOnFace
[4422, 4461, 0]"] 1 --- 2 1 --- 9 1 --- 16 diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap index 51d7a0860..e0923d5db 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap @@ -1729,61 +1729,55 @@ description: Result of parsing food-service-spatula.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "xstart", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "ystart", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "sketch1", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "xstart", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "ystart", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1793,7 +1787,7 @@ description: Result of parsing food-service-spatula.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1804,8 +1798,24 @@ description: Result of parsing food-service-spatula.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -2380,73 +2390,67 @@ description: Result of parsing food-service-spatula.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "flipperLength", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "32.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 32.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "flipperSketch", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "flipperLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "32.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 32.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2456,7 +2460,7 @@ description: Result of parsing food-service-spatula.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2467,8 +2471,24 @@ description: Result of parsing food-service-spatula.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "flipperSketch", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -3978,57 +3998,51 @@ description: Result of parsing food-service-spatula.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "flipperThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "handleSketch", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "flipperThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -4038,7 +4052,7 @@ description: Result of parsing food-service-spatula.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -4049,8 +4063,24 @@ description: Result of parsing food-service-spatula.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "handleSketch", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -5211,69 +5241,63 @@ description: Result of parsing food-service-spatula.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "26.806746", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 26.806746, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "10.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "gripSketch", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "26.806746", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 26.806746, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "10.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -5283,7 +5307,7 @@ description: Result of parsing food-service-spatula.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -5294,8 +5318,24 @@ description: Result of parsing food-service-spatula.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "gripSketch", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ops.snap b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ops.snap index e11665622..26e090f39 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ops.snap @@ -25,7 +25,7 @@ description: Operations executed food-service-spatula.kcl "name": "slot", "functionSourceRange": [ 462, - 1303, + 1306, 0 ], "unlabeledArg": null, @@ -39,8 +39,8 @@ description: Operations executed food-service-spatula.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -57,8 +57,8 @@ description: Operations executed food-service-spatula.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -93,8 +93,8 @@ description: Operations executed food-service-spatula.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -133,7 +133,7 @@ description: Operations executed food-service-spatula.kcl "name": "slot", "functionSourceRange": [ 462, - 1303, + 1306, 0 ], "unlabeledArg": null, @@ -147,8 +147,8 @@ description: Operations executed food-service-spatula.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -165,8 +165,8 @@ description: Operations executed food-service-spatula.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -201,8 +201,8 @@ description: Operations executed food-service-spatula.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -241,7 +241,7 @@ description: Operations executed food-service-spatula.kcl "name": "slot", "functionSourceRange": [ 462, - 1303, + 1306, 0 ], "unlabeledArg": null, @@ -255,8 +255,8 @@ description: Operations executed food-service-spatula.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -273,8 +273,8 @@ description: Operations executed food-service-spatula.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -309,8 +309,8 @@ description: Operations executed food-service-spatula.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -880,7 +880,7 @@ description: Operations executed food-service-spatula.kcl "name": "slot", "functionSourceRange": [ 462, - 1303, + 1306, 0 ], "unlabeledArg": null, @@ -894,8 +894,8 @@ description: Operations executed food-service-spatula.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -930,8 +930,8 @@ description: Operations executed food-service-spatula.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap index 2c3267964..7802ea61f 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap @@ -27,9 +27,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1570, - "end": 1579, - "start": 1570, + "commentStart": 1576, + "end": 1585, + "start": 1576, "type": "TagDeclarator", "value": "backEdge" }, @@ -90,9 +90,9 @@ description: Variables in memory after executing food-service-spatula.kcl -30.0 ], "tag": { - "commentStart": 1570, - "end": 1579, - "start": 1570, + "commentStart": 1576, + "end": 1585, + "start": 1576, "type": "TagDeclarator", "value": "backEdge" }, @@ -299,9 +299,9 @@ description: Variables in memory after executing food-service-spatula.kcl -30.0 ], "tag": { - "commentStart": 1570, - "end": 1579, - "start": 1570, + "commentStart": 1576, + "end": 1585, + "start": 1576, "type": "TagDeclarator", "value": "backEdge" }, @@ -551,9 +551,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4153, - "end": 4165, - "start": 4153, + "commentStart": 4165, + "end": 4177, + "start": 4165, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -713,9 +713,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4153, - "end": 4165, - "start": 4153, + "commentStart": 4165, + "end": 4177, + "start": 4165, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1058,9 +1058,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4153, - "end": 4165, - "start": 4153, + "commentStart": 4165, + "end": 4177, + "start": 4165, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1220,9 +1220,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4153, - "end": 4165, - "start": 4153, + "commentStart": 4165, + "end": 4177, + "start": 4165, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1538,9 +1538,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4153, - "end": 4165, - "start": 4153, + "commentStart": 4165, + "end": 4177, + "start": 4165, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1729,9 +1729,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2808, - "end": 2825, - "start": 2808, + "commentStart": 2817, + "end": 2834, + "start": 2817, "type": "TagDeclarator", "value": "handleBottomEdge" }, @@ -1756,9 +1756,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2956, - "end": 2970, - "start": 2956, + "commentStart": 2965, + "end": 2979, + "start": 2965, "type": "TagDeclarator", "value": "handleTopEdge" }, @@ -1800,9 +1800,9 @@ description: Variables in memory after executing food-service-spatula.kcl 3.5 ], "tag": { - "commentStart": 2808, - "end": 2825, - "start": 2808, + "commentStart": 2817, + "end": 2834, + "start": 2817, "type": "TagDeclarator", "value": "handleBottomEdge" }, @@ -1863,9 +1863,9 @@ description: Variables in memory after executing food-service-spatula.kcl 91.3213 ], "tag": { - "commentStart": 2956, - "end": 2970, - "start": 2956, + "commentStart": 2965, + "end": 2979, + "start": 2965, "type": "TagDeclarator", "value": "handleTopEdge" }, @@ -2211,9 +2211,9 @@ description: Variables in memory after executing food-service-spatula.kcl 3.5 ], "tag": { - "commentStart": 2808, - "end": 2825, - "start": 2808, + "commentStart": 2817, + "end": 2834, + "start": 2817, "type": "TagDeclarator", "value": "handleBottomEdge" }, @@ -2274,9 +2274,9 @@ description: Variables in memory after executing food-service-spatula.kcl 91.3213 ], "tag": { - "commentStart": 2956, - "end": 2970, - "start": 2956, + "commentStart": 2965, + "end": 2979, + "start": 2965, "type": "TagDeclarator", "value": "handleTopEdge" }, @@ -2536,9 +2536,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4153, - "end": 4165, - "start": 4153, + "commentStart": 4165, + "end": 4177, + "start": 4165, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -2698,9 +2698,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4153, - "end": 4165, - "start": 4153, + "commentStart": 4165, + "end": 4177, + "start": 4165, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -3370,9 +3370,9 @@ description: Variables in memory after executing food-service-spatula.kcl -30.0 ], "tag": { - "commentStart": 1570, - "end": 1579, - "start": 1570, + "commentStart": 1576, + "end": 1585, + "start": 1576, "type": "TagDeclarator", "value": "backEdge" }, diff --git a/rust/kcl-lib/tests/kcl_samples/french-press/ast.snap b/rust/kcl-lib/tests/kcl_samples/french-press/ast.snap index 777643459..74a94f223 100644 --- a/rust/kcl-lib/tests/kcl_samples/french-press/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/french-press/ast.snap @@ -164,68 +164,71 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "carafeDiameter", + "name": { + "commentStart": 0, + "end": 0, + "name": "carafeDiameter", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "raw": "5.7", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 5.7, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "5.7", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.7, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -235,7 +238,7 @@ description: Result of parsing french-press.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -246,8 +249,9 @@ description: Result of parsing french-press.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1198,68 +1202,71 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "carafeDiameter", + "name": { + "commentStart": 0, + "end": 0, + "name": "carafeDiameter", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "raw": "5.7", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 5.7, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "5.7", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.7, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1269,7 +1276,7 @@ description: Result of parsing french-press.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1280,8 +1287,9 @@ description: Result of parsing french-press.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -3503,44 +3511,47 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0.3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.3, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0.3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.3, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0.17", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.17, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.17", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.17, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -3550,7 +3561,7 @@ description: Result of parsing french-press.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -3561,8 +3572,9 @@ description: Result of parsing french-press.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -4134,44 +4146,47 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0.15", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.15, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0.15", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.15, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "1.11", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.11, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "1.11", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.11, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -4181,7 +4196,7 @@ description: Result of parsing french-press.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -4192,8 +4207,9 @@ description: Result of parsing french-press.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -4922,44 +4938,47 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0.1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.1, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.1, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -4969,7 +4988,7 @@ description: Result of parsing french-press.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -4980,8 +4999,9 @@ description: Result of parsing french-press.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -7321,68 +7341,71 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0.2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.2, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "carafeHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "0.7", + "raw": "0.2", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 0.7, + "value": 0.2, "suffix": "None" } }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "carafeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "0.7", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.7, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -7392,7 +7415,7 @@ description: Result of parsing french-press.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -7403,8 +7426,9 @@ description: Result of parsing french-press.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -8293,44 +8317,47 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "2.3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.3, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "2.3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.3, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "6.4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.4, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "6.4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 6.4, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -8340,7 +8367,7 @@ description: Result of parsing french-press.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -8351,8 +8378,9 @@ description: Result of parsing french-press.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/gear-rack/ast.snap b/rust/kcl-lib/tests/kcl_samples/gear-rack/ast.snap index 37a8025d4..97efdd8a4 100644 --- a/rust/kcl-lib/tests/kcl_samples/gear-rack/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gear-rack/ast.snap @@ -230,76 +230,79 @@ description: Result of parsing gear-rack.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "length", + "name": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "raw": "0", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 0.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -309,7 +312,7 @@ description: Result of parsing gear-rack.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -320,8 +323,9 @@ description: Result of parsing gear-rack.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -732,48 +736,74 @@ description: Result of parsing gear-rack.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "length", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, "commentStart": 0, "end": 0, - "operator": "-", + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", + "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "raw": "0.567672", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 0.567672, "suffix": "None" } }, @@ -781,51 +811,28 @@ description: Result of parsing gear-rack.kcl "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { + { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "0.567672", + "name": { + "commentStart": 0, + "end": 0, + "name": "minHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.567672, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "minHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -835,7 +842,7 @@ description: Result of parsing gear-rack.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -846,8 +853,9 @@ description: Result of parsing gear-rack.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1740,76 +1748,79 @@ description: Result of parsing gear-rack.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "length", + "name": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "raw": "11.849525", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 11.849525, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "11.849525", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 11.849525, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1819,7 +1830,7 @@ description: Result of parsing gear-rack.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1830,8 +1841,9 @@ description: Result of parsing gear-rack.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2254,68 +2266,71 @@ description: Result of parsing gear-rack.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "length", + "name": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "raw": "11.849525", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 11.849525, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "11.849525", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 11.849525, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2325,7 +2340,7 @@ description: Result of parsing gear-rack.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2336,8 +2351,9 @@ description: Result of parsing gear-rack.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/gear/ast.snap b/rust/kcl-lib/tests/kcl_samples/gear/ast.snap index 9d904d857..d2d189bce 100644 --- a/rust/kcl-lib/tests/kcl_samples/gear/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gear/ast.snap @@ -2892,76 +2892,79 @@ description: Result of parsing gear.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, + "computed": false, "end": 0, - "name": "xs", + "object": { + "commentStart": 0, + "end": 0, + "name": "xs", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "101", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 101.0, + "suffix": "None" + } + }, "start": 0, - "type": "Identifier", - "type": "Identifier" + "type": "MemberExpression", + "type": "MemberExpression" }, - "property": { + { "commentStart": 0, + "computed": false, "end": 0, - "raw": "101", + "object": { + "commentStart": 0, + "end": 0, + "name": "ys", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "101", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 101.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 101.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "ys", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "101", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 101.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "MemberExpression", + "type": "MemberExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2971,7 +2974,7 @@ description: Result of parsing gear.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2982,8 +2985,9 @@ description: Result of parsing gear.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null } ], "commentStart": 0, @@ -3960,148 +3964,151 @@ description: Result of parsing gear.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "holeRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "arguments": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "startAngle", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "cos", + "name": "holeRadius", "start": 0, "type": "Identifier" }, "path": [], "start": 0, + "type": "Name", "type": "Name" }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "holeRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "arguments": [ - { + "operator": "*", + "right": { + "arguments": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startAngle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "callee": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "startAngle", + "name": "cos", "start": 0, "type": "Identifier" }, "path": [], "start": 0, - "type": "Name", "type": "Name" - } - ], - "callee": { + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "sin", + "name": "holeRadius", "start": 0, "type": "Identifier" }, "path": [], "start": 0, + "type": "Name", "type": "Name" }, - "commentStart": 0, - "end": 0, + "operator": "*", + "right": { + "arguments": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startAngle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sin", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + }, "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -4111,7 +4118,7 @@ description: Result of parsing gear.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -4122,8 +4129,9 @@ description: Result of parsing gear.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/gear/ops.snap b/rust/kcl-lib/tests/kcl_samples/gear/ops.snap index f5ecc658e..a327c7506 100644 --- a/rust/kcl-lib/tests/kcl_samples/gear/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/gear/ops.snap @@ -9,8 +9,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -45,8 +45,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -63,8 +63,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -81,8 +81,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -99,8 +99,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -117,8 +117,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -135,8 +135,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -153,8 +153,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -171,8 +171,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -189,8 +189,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -207,8 +207,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -225,8 +225,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -243,8 +243,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -261,8 +261,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -279,8 +279,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -297,8 +297,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -315,8 +315,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -333,8 +333,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -351,8 +351,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -369,8 +369,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -387,8 +387,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -405,8 +405,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -423,8 +423,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -441,8 +441,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -459,8 +459,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -477,8 +477,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -495,8 +495,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -513,8 +513,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -531,8 +531,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -549,8 +549,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -567,8 +567,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -585,8 +585,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -603,8 +603,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -621,8 +621,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -639,8 +639,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -657,8 +657,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -675,8 +675,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -693,8 +693,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -711,8 +711,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -729,8 +729,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -747,8 +747,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -765,8 +765,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -783,8 +783,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -801,8 +801,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -819,8 +819,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -837,8 +837,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -855,8 +855,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -873,8 +873,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -891,8 +891,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -909,8 +909,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -927,8 +927,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -945,8 +945,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -963,8 +963,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -981,8 +981,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -999,8 +999,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1017,8 +1017,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1035,8 +1035,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1053,8 +1053,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1071,8 +1071,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1089,8 +1089,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1107,8 +1107,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1125,8 +1125,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1143,8 +1143,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1161,8 +1161,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1179,8 +1179,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1197,8 +1197,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1215,8 +1215,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1233,8 +1233,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1251,8 +1251,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1269,8 +1269,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1287,8 +1287,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1305,8 +1305,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1323,8 +1323,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1341,8 +1341,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1359,8 +1359,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1377,8 +1377,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1395,8 +1395,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1413,8 +1413,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1431,8 +1431,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1449,8 +1449,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1467,8 +1467,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1485,8 +1485,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1503,8 +1503,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1521,8 +1521,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1539,8 +1539,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1557,8 +1557,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1575,8 +1575,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1593,8 +1593,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1611,8 +1611,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1629,8 +1629,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1647,8 +1647,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1665,8 +1665,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1683,8 +1683,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1701,8 +1701,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1719,8 +1719,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1737,8 +1737,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1755,8 +1755,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1773,8 +1773,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1791,8 +1791,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1809,8 +1809,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1827,8 +1827,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1845,8 +1845,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1863,8 +1863,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -1881,8 +1881,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1917,8 +1917,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1935,8 +1935,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1971,8 +1971,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1989,8 +1989,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2025,8 +2025,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2043,8 +2043,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2079,8 +2079,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2097,8 +2097,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2133,8 +2133,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2151,8 +2151,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2187,8 +2187,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2205,8 +2205,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2241,8 +2241,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2259,8 +2259,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2295,8 +2295,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2313,8 +2313,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2349,8 +2349,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2367,8 +2367,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2403,8 +2403,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2421,8 +2421,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2457,8 +2457,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2475,8 +2475,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2511,8 +2511,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2529,8 +2529,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2565,8 +2565,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2583,8 +2583,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2619,8 +2619,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2637,8 +2637,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2673,8 +2673,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2691,8 +2691,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2727,8 +2727,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2745,8 +2745,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2781,8 +2781,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2799,8 +2799,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2835,8 +2835,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2853,8 +2853,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2889,8 +2889,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2907,8 +2907,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2943,8 +2943,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2961,8 +2961,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2997,8 +2997,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3015,8 +3015,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3051,8 +3051,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3069,8 +3069,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3105,8 +3105,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3123,8 +3123,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3159,8 +3159,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3177,8 +3177,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3213,8 +3213,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3231,8 +3231,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3267,8 +3267,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3285,8 +3285,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3321,8 +3321,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3339,8 +3339,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3375,8 +3375,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3393,8 +3393,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3429,8 +3429,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3447,8 +3447,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3483,8 +3483,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3501,8 +3501,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3537,8 +3537,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3555,8 +3555,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3591,8 +3591,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3609,8 +3609,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3645,8 +3645,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3663,8 +3663,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3699,8 +3699,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3717,8 +3717,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3753,8 +3753,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3771,8 +3771,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3807,8 +3807,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3825,8 +3825,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3861,8 +3861,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3879,8 +3879,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3915,8 +3915,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3933,8 +3933,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3969,8 +3969,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3987,8 +3987,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4023,8 +4023,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4041,8 +4041,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4077,8 +4077,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4095,8 +4095,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4131,8 +4131,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4149,8 +4149,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4185,8 +4185,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4203,8 +4203,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4239,8 +4239,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4257,8 +4257,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4293,8 +4293,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4311,8 +4311,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4347,8 +4347,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4365,8 +4365,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4401,8 +4401,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4419,8 +4419,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4455,8 +4455,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4473,8 +4473,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4509,8 +4509,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4527,8 +4527,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4563,8 +4563,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4581,8 +4581,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4617,8 +4617,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4635,8 +4635,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4671,8 +4671,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4689,8 +4689,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4725,8 +4725,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4743,8 +4743,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4779,8 +4779,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4797,8 +4797,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4833,8 +4833,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4851,8 +4851,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4887,8 +4887,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4905,8 +4905,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4941,8 +4941,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4959,8 +4959,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4995,8 +4995,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5013,8 +5013,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5049,8 +5049,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5067,8 +5067,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5103,8 +5103,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5121,8 +5121,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5157,8 +5157,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5175,8 +5175,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5211,8 +5211,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5229,8 +5229,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5265,8 +5265,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5283,8 +5283,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5319,8 +5319,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5337,8 +5337,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5373,8 +5373,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5391,8 +5391,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5427,8 +5427,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5445,8 +5445,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5481,8 +5481,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5499,8 +5499,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5535,8 +5535,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5553,8 +5553,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5589,8 +5589,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5607,8 +5607,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5643,8 +5643,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5661,8 +5661,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5697,8 +5697,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5715,8 +5715,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5751,8 +5751,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5769,8 +5769,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5805,8 +5805,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5823,8 +5823,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5859,8 +5859,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5877,8 +5877,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5913,8 +5913,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5931,8 +5931,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5967,8 +5967,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -5985,8 +5985,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6021,8 +6021,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6039,8 +6039,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6075,8 +6075,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6093,8 +6093,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6129,8 +6129,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6147,8 +6147,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6183,8 +6183,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6201,8 +6201,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6237,8 +6237,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6255,8 +6255,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6291,8 +6291,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6309,8 +6309,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6345,8 +6345,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6363,8 +6363,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6399,8 +6399,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6417,8 +6417,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6453,8 +6453,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6471,8 +6471,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6507,8 +6507,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6525,8 +6525,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6561,8 +6561,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6579,8 +6579,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6615,8 +6615,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6633,8 +6633,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6669,8 +6669,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6687,8 +6687,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6723,8 +6723,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6741,8 +6741,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6777,8 +6777,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6795,8 +6795,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6831,8 +6831,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6849,8 +6849,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6885,8 +6885,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6903,8 +6903,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6939,8 +6939,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6957,8 +6957,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -6993,8 +6993,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7011,8 +7011,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7047,8 +7047,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7065,8 +7065,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7101,8 +7101,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7119,8 +7119,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7155,8 +7155,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7173,8 +7173,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7209,8 +7209,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7227,8 +7227,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7263,8 +7263,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7281,8 +7281,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7317,8 +7317,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7335,8 +7335,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7371,8 +7371,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11123,8 +11123,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11141,8 +11141,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11177,8 +11177,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11195,8 +11195,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11231,8 +11231,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11249,8 +11249,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11285,8 +11285,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11303,8 +11303,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11339,8 +11339,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11357,8 +11357,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11393,8 +11393,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11411,8 +11411,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11447,8 +11447,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11465,8 +11465,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11501,8 +11501,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11519,8 +11519,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11555,8 +11555,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11573,8 +11573,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11609,8 +11609,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11627,8 +11627,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11663,8 +11663,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11681,8 +11681,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11717,8 +11717,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11735,8 +11735,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11771,8 +11771,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11789,8 +11789,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11825,8 +11825,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11843,8 +11843,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11879,8 +11879,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11897,8 +11897,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11933,8 +11933,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -11951,8 +11951,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -11987,8 +11987,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12005,8 +12005,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12041,8 +12041,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12059,8 +12059,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12095,8 +12095,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12113,8 +12113,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12149,8 +12149,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12167,8 +12167,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12203,8 +12203,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12221,8 +12221,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12257,8 +12257,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12275,8 +12275,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12311,8 +12311,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12329,8 +12329,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12365,8 +12365,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12383,8 +12383,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12419,8 +12419,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12437,8 +12437,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12473,8 +12473,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12491,8 +12491,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12527,8 +12527,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12545,8 +12545,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12581,8 +12581,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12599,8 +12599,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12635,8 +12635,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12653,8 +12653,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12689,8 +12689,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12707,8 +12707,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12743,8 +12743,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12761,8 +12761,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12797,8 +12797,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12815,8 +12815,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12851,8 +12851,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12869,8 +12869,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12905,8 +12905,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12923,8 +12923,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -12959,8 +12959,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -12977,8 +12977,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13013,8 +13013,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13031,8 +13031,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13067,8 +13067,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13085,8 +13085,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13121,8 +13121,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13139,8 +13139,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13175,8 +13175,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13193,8 +13193,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13229,8 +13229,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13247,8 +13247,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13283,8 +13283,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13301,8 +13301,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13337,8 +13337,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13355,8 +13355,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13391,8 +13391,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13409,8 +13409,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13445,8 +13445,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13463,8 +13463,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13499,8 +13499,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13517,8 +13517,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13553,8 +13553,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13571,8 +13571,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13607,8 +13607,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13625,8 +13625,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13661,8 +13661,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13679,8 +13679,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13715,8 +13715,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13733,8 +13733,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13769,8 +13769,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13787,8 +13787,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13823,8 +13823,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13841,8 +13841,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13877,8 +13877,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13895,8 +13895,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13931,8 +13931,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -13949,8 +13949,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -13985,8 +13985,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14003,8 +14003,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14039,8 +14039,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14057,8 +14057,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14093,8 +14093,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14111,8 +14111,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14147,8 +14147,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14165,8 +14165,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14201,8 +14201,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14219,8 +14219,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14255,8 +14255,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14273,8 +14273,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14309,8 +14309,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14327,8 +14327,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14363,8 +14363,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14381,8 +14381,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14417,8 +14417,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14435,8 +14435,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14471,8 +14471,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14489,8 +14489,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14525,8 +14525,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14543,8 +14543,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14579,8 +14579,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14597,8 +14597,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14633,8 +14633,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14651,8 +14651,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14687,8 +14687,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14705,8 +14705,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14741,8 +14741,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14759,8 +14759,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14795,8 +14795,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14813,8 +14813,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14849,8 +14849,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14867,8 +14867,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14903,8 +14903,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14921,8 +14921,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -14957,8 +14957,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -14975,8 +14975,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15011,8 +15011,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15029,8 +15029,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15065,8 +15065,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15083,8 +15083,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15119,8 +15119,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15137,8 +15137,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15173,8 +15173,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15191,8 +15191,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15227,8 +15227,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15245,8 +15245,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15281,8 +15281,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15299,8 +15299,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15335,8 +15335,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15353,8 +15353,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15389,8 +15389,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15407,8 +15407,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15443,8 +15443,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15461,8 +15461,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15497,8 +15497,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15515,8 +15515,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15551,8 +15551,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15569,8 +15569,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15605,8 +15605,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15623,8 +15623,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15659,8 +15659,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15677,8 +15677,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15713,8 +15713,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15731,8 +15731,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15767,8 +15767,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15785,8 +15785,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15821,8 +15821,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15839,8 +15839,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15875,8 +15875,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15893,8 +15893,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15929,8 +15929,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -15947,8 +15947,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -15983,8 +15983,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16001,8 +16001,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16037,8 +16037,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16055,8 +16055,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16091,8 +16091,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16109,8 +16109,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16145,8 +16145,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16163,8 +16163,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16199,8 +16199,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16217,8 +16217,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16253,8 +16253,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16271,8 +16271,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16307,8 +16307,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16325,8 +16325,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16361,8 +16361,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16379,8 +16379,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16415,8 +16415,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16433,8 +16433,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16469,8 +16469,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16487,8 +16487,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16523,8 +16523,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16541,8 +16541,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16577,8 +16577,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16595,8 +16595,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16631,8 +16631,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16649,8 +16649,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16685,8 +16685,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16703,8 +16703,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16739,8 +16739,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16757,8 +16757,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16793,8 +16793,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16811,8 +16811,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16847,8 +16847,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16865,8 +16865,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16901,8 +16901,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16919,8 +16919,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -16955,8 +16955,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -16973,8 +16973,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17009,8 +17009,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17027,8 +17027,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17063,8 +17063,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17081,8 +17081,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17117,8 +17117,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17135,8 +17135,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17171,8 +17171,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17189,8 +17189,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17225,8 +17225,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17243,8 +17243,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17279,8 +17279,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17297,8 +17297,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17333,8 +17333,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17351,8 +17351,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17387,8 +17387,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17405,8 +17405,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17441,8 +17441,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17459,8 +17459,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17495,8 +17495,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17513,8 +17513,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17549,8 +17549,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17567,8 +17567,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17603,8 +17603,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17621,8 +17621,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17657,8 +17657,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17675,8 +17675,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17711,8 +17711,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17729,8 +17729,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17765,8 +17765,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17783,8 +17783,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17819,8 +17819,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17837,8 +17837,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17873,8 +17873,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17891,8 +17891,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17927,8 +17927,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17945,8 +17945,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -17981,8 +17981,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -17999,8 +17999,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18035,8 +18035,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18053,8 +18053,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18089,8 +18089,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18107,8 +18107,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18143,8 +18143,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18161,8 +18161,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18197,8 +18197,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18215,8 +18215,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18251,8 +18251,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18269,8 +18269,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18305,8 +18305,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18323,8 +18323,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18359,8 +18359,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18377,8 +18377,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18413,8 +18413,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18431,8 +18431,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18467,8 +18467,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18485,8 +18485,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18521,8 +18521,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18539,8 +18539,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18575,8 +18575,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18593,8 +18593,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18629,8 +18629,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18647,8 +18647,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18683,8 +18683,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18701,8 +18701,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18737,8 +18737,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18755,8 +18755,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18791,8 +18791,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18809,8 +18809,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18845,8 +18845,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18863,8 +18863,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18899,8 +18899,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18917,8 +18917,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -18953,8 +18953,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -18971,8 +18971,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19007,8 +19007,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19025,8 +19025,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19061,8 +19061,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19079,8 +19079,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19115,8 +19115,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19133,8 +19133,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19169,8 +19169,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19187,8 +19187,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19223,8 +19223,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19241,8 +19241,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19277,8 +19277,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19295,8 +19295,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19331,8 +19331,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19349,8 +19349,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19385,8 +19385,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19403,8 +19403,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19439,8 +19439,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19457,8 +19457,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19493,8 +19493,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19511,8 +19511,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19547,8 +19547,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19565,8 +19565,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19601,8 +19601,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19619,8 +19619,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19655,8 +19655,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19673,8 +19673,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19709,8 +19709,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19727,8 +19727,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19763,8 +19763,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19781,8 +19781,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19817,8 +19817,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19835,8 +19835,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19871,8 +19871,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19889,8 +19889,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19925,8 +19925,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19943,8 +19943,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -19979,8 +19979,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -19997,8 +19997,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20033,8 +20033,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20051,8 +20051,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20087,8 +20087,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20105,8 +20105,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20141,8 +20141,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20159,8 +20159,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20195,8 +20195,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20213,8 +20213,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20249,8 +20249,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20267,8 +20267,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20303,8 +20303,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20321,8 +20321,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20357,8 +20357,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20375,8 +20375,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20411,8 +20411,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20429,8 +20429,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20465,8 +20465,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20483,8 +20483,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20519,8 +20519,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20537,8 +20537,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20573,8 +20573,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20591,8 +20591,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20627,8 +20627,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20645,8 +20645,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20681,8 +20681,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20699,8 +20699,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20735,8 +20735,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20753,8 +20753,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20789,8 +20789,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20807,8 +20807,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20843,8 +20843,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20861,8 +20861,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20897,8 +20897,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20915,8 +20915,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -20951,8 +20951,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -20969,8 +20969,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21005,8 +21005,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21023,8 +21023,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21059,8 +21059,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21077,8 +21077,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21113,8 +21113,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21131,8 +21131,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21167,8 +21167,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21185,8 +21185,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21221,8 +21221,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21239,8 +21239,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21275,8 +21275,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21293,8 +21293,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21329,8 +21329,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21347,8 +21347,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21383,8 +21383,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21401,8 +21401,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21437,8 +21437,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21455,8 +21455,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21491,8 +21491,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21509,8 +21509,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21545,8 +21545,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21563,8 +21563,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21599,8 +21599,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21617,8 +21617,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21653,8 +21653,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21671,8 +21671,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21707,8 +21707,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21725,8 +21725,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21761,8 +21761,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21779,8 +21779,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21815,8 +21815,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21833,8 +21833,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21869,8 +21869,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21887,8 +21887,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21923,8 +21923,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21941,8 +21941,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -21977,8 +21977,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -21995,8 +21995,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -22271,8 +22271,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, @@ -22289,8 +22289,8 @@ description: Operations executed gear.kcl "type": "FunctionCall", "name": "toDegrees", "functionSourceRange": [ - 11927, - 11976, + 11933, + 11982, 1 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ast.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ast.snap index 331fc9103..6791e081a 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ast.snap @@ -505,44 +505,47 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -552,7 +555,7 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -563,8 +566,9 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2783,96 +2787,99 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "firstStep", + "name": { + "commentStart": 0, + "end": 0, + "name": "firstStep", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "operator": "+", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "thirdStep", + "name": { + "commentStart": 0, + "end": 0, + "name": "thirdStep", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { + { "commentStart": 0, "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "left": { "commentStart": 0, "end": 0, - "name": "magOuterDiam", + "raw": "2", "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": "magOuterDiam", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2882,7 +2889,7 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2893,8 +2900,9 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -5272,44 +5280,47 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -5319,7 +5330,7 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -5330,8 +5341,9 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/ast.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/ast.snap index 893a685bc..8ebb63b09 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/ast.snap @@ -406,44 +406,47 @@ description: Result of parsing gridfinity-baseplate.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -453,7 +456,7 @@ description: Result of parsing gridfinity-baseplate.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -464,8 +467,9 @@ description: Result of parsing gridfinity-baseplate.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ast.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ast.snap index 775761641..b9cbd0d43 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ast.snap @@ -1001,72 +1001,75 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "binBaseLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "binBaseLength", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "binTol", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "+", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "binTol", - "start": 0, - "type": "Identifier" - }, - "path": [], + "raw": "0", "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1076,7 +1079,7 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1087,8 +1090,9 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2964,100 +2968,103 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "binBaseLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "binBaseLength", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "binTol", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "+", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "binTol", + "name": { + "commentStart": 0, + "end": 0, + "name": "binBaseLength", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "operator": "+", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "binBaseLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "binTol", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "binTol", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -3067,7 +3074,7 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -3078,8 +3085,9 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -5781,44 +5789,47 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -5828,7 +5839,7 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -5839,8 +5850,9 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -6740,44 +6752,47 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -6787,7 +6802,7 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -6798,8 +6813,9 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/ast.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/ast.snap index e506961fe..2e34fea9d 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/ast.snap @@ -670,72 +670,75 @@ description: Result of parsing gridfinity-bins.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "binBaseLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "binBaseLength", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "binTol", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "+", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "binTol", - "start": 0, - "type": "Identifier" - }, - "path": [], + "raw": "0", "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -745,7 +748,7 @@ description: Result of parsing gridfinity-bins.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -756,8 +759,9 @@ description: Result of parsing gridfinity-bins.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2633,100 +2637,103 @@ description: Result of parsing gridfinity-bins.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "binBaseLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "binBaseLength", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "binTol", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "+", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "binTol", + "name": { + "commentStart": 0, + "end": 0, + "name": "binBaseLength", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "operator": "+", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "binBaseLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "binTol", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "binTol", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2736,7 +2743,7 @@ description: Result of parsing gridfinity-bins.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2747,8 +2754,9 @@ description: Result of parsing gridfinity-bins.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -5468,44 +5476,47 @@ description: Result of parsing gridfinity-bins.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -5515,7 +5526,7 @@ description: Result of parsing gridfinity-bins.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -5526,8 +5537,9 @@ description: Result of parsing gridfinity-bins.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/hex-nut/ast.snap b/rust/kcl-lib/tests/kcl_samples/hex-nut/ast.snap index 4249a267d..5d4ff81a6 100644 --- a/rust/kcl-lib/tests/kcl_samples/hex-nut/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/hex-nut/ast.snap @@ -187,12 +187,70 @@ description: Result of parsing hex-nut.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "computed": false, + "end": 0, + "object": { + "commentStart": 0, + "end": 0, + "name": "start", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + "start": 0, + "type": "MemberExpression", + "type": "MemberExpression" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "innerDia", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { "commentStart": 0, "computed": false, "end": 0, @@ -207,80 +265,25 @@ description: Result of parsing hex-nut.kcl "property": { "commentStart": 0, "end": 0, - "raw": "0", + "raw": "1", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 0.0, + "value": 1.0, "suffix": "None" } }, "start": 0, "type": "MemberExpression", "type": "MemberExpression" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "innerDia", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "start", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -290,7 +293,7 @@ description: Result of parsing hex-nut.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -301,8 +304,9 @@ description: Result of parsing hex-nut.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/i-beam/ast.snap b/rust/kcl-lib/tests/kcl_samples/i-beam/ast.snap index 2a7150c8e..001f44eb0 100644 --- a/rust/kcl-lib/tests/kcl_samples/i-beam/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/i-beam/ast.snap @@ -295,68 +295,71 @@ description: Result of parsing i-beam.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "beamHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", + "raw": "0", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 0.0, "suffix": "None" } }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "beamHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -366,7 +369,7 @@ description: Result of parsing i-beam.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -377,8 +380,9 @@ description: Result of parsing i-beam.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/keyboard/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/keyboard/artifact_graph_flowchart.snap.md index 939f77e74..a00857e7a 100644 --- a/rust/kcl-lib/tests/kcl_samples/keyboard/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/keyboard/artifact_graph_flowchart.snap.md @@ -30,328 +30,328 @@ flowchart LR 39[Solid2d] end subgraph path61 [Path] - 61["Path
[1993, 2052, 0]"] - 62["Segment
[2060, 2111, 0]"] - 63["Segment
[2119, 2193, 0]"] - 64["Segment
[2201, 2240, 0]"] - 65["Segment
[2248, 2355, 0]"] - 66["Segment
[2363, 2402, 0]"] - 67["Segment
[2410, 2527, 0]"] - 68["Segment
[2535, 2574, 0]"] - 69["Segment
[2582, 2667, 0]"] - 70["Segment
[2675, 2682, 0]"] + 61["Path
[1993, 2055, 0]"] + 62["Segment
[2063, 2114, 0]"] + 63["Segment
[2122, 2196, 0]"] + 64["Segment
[2204, 2243, 0]"] + 65["Segment
[2251, 2358, 0]"] + 66["Segment
[2366, 2405, 0]"] + 67["Segment
[2413, 2530, 0]"] + 68["Segment
[2538, 2577, 0]"] + 69["Segment
[2585, 2670, 0]"] + 70["Segment
[2678, 2685, 0]"] 71[Solid2d] end subgraph path100 [Path] - 100["Path
[1993, 2052, 0]"] - 101["Segment
[2060, 2111, 0]"] - 102["Segment
[2119, 2193, 0]"] - 103["Segment
[2201, 2240, 0]"] - 104["Segment
[2248, 2355, 0]"] - 105["Segment
[2363, 2402, 0]"] - 106["Segment
[2410, 2527, 0]"] - 107["Segment
[2535, 2574, 0]"] - 108["Segment
[2582, 2667, 0]"] - 109["Segment
[2675, 2682, 0]"] + 100["Path
[1993, 2055, 0]"] + 101["Segment
[2063, 2114, 0]"] + 102["Segment
[2122, 2196, 0]"] + 103["Segment
[2204, 2243, 0]"] + 104["Segment
[2251, 2358, 0]"] + 105["Segment
[2366, 2405, 0]"] + 106["Segment
[2413, 2530, 0]"] + 107["Segment
[2538, 2577, 0]"] + 108["Segment
[2585, 2670, 0]"] + 109["Segment
[2678, 2685, 0]"] 110[Solid2d] end subgraph path139 [Path] - 139["Path
[1993, 2052, 0]"] - 140["Segment
[2060, 2111, 0]"] - 141["Segment
[2119, 2193, 0]"] - 142["Segment
[2201, 2240, 0]"] - 143["Segment
[2248, 2355, 0]"] - 144["Segment
[2363, 2402, 0]"] - 145["Segment
[2410, 2527, 0]"] - 146["Segment
[2535, 2574, 0]"] - 147["Segment
[2582, 2667, 0]"] - 148["Segment
[2675, 2682, 0]"] + 139["Path
[1993, 2055, 0]"] + 140["Segment
[2063, 2114, 0]"] + 141["Segment
[2122, 2196, 0]"] + 142["Segment
[2204, 2243, 0]"] + 143["Segment
[2251, 2358, 0]"] + 144["Segment
[2366, 2405, 0]"] + 145["Segment
[2413, 2530, 0]"] + 146["Segment
[2538, 2577, 0]"] + 147["Segment
[2585, 2670, 0]"] + 148["Segment
[2678, 2685, 0]"] 149[Solid2d] end subgraph path178 [Path] - 178["Path
[1993, 2052, 0]"] - 179["Segment
[2060, 2111, 0]"] - 180["Segment
[2119, 2193, 0]"] - 181["Segment
[2201, 2240, 0]"] - 182["Segment
[2248, 2355, 0]"] - 183["Segment
[2363, 2402, 0]"] - 184["Segment
[2410, 2527, 0]"] - 185["Segment
[2535, 2574, 0]"] - 186["Segment
[2582, 2667, 0]"] - 187["Segment
[2675, 2682, 0]"] + 178["Path
[1993, 2055, 0]"] + 179["Segment
[2063, 2114, 0]"] + 180["Segment
[2122, 2196, 0]"] + 181["Segment
[2204, 2243, 0]"] + 182["Segment
[2251, 2358, 0]"] + 183["Segment
[2366, 2405, 0]"] + 184["Segment
[2413, 2530, 0]"] + 185["Segment
[2538, 2577, 0]"] + 186["Segment
[2585, 2670, 0]"] + 187["Segment
[2678, 2685, 0]"] 188[Solid2d] end subgraph path217 [Path] - 217["Path
[1993, 2052, 0]"] - 218["Segment
[2060, 2111, 0]"] - 219["Segment
[2119, 2193, 0]"] - 220["Segment
[2201, 2240, 0]"] - 221["Segment
[2248, 2355, 0]"] - 222["Segment
[2363, 2402, 0]"] - 223["Segment
[2410, 2527, 0]"] - 224["Segment
[2535, 2574, 0]"] - 225["Segment
[2582, 2667, 0]"] - 226["Segment
[2675, 2682, 0]"] + 217["Path
[1993, 2055, 0]"] + 218["Segment
[2063, 2114, 0]"] + 219["Segment
[2122, 2196, 0]"] + 220["Segment
[2204, 2243, 0]"] + 221["Segment
[2251, 2358, 0]"] + 222["Segment
[2366, 2405, 0]"] + 223["Segment
[2413, 2530, 0]"] + 224["Segment
[2538, 2577, 0]"] + 225["Segment
[2585, 2670, 0]"] + 226["Segment
[2678, 2685, 0]"] 227[Solid2d] end subgraph path256 [Path] - 256["Path
[1993, 2052, 0]"] - 257["Segment
[2060, 2111, 0]"] - 258["Segment
[2119, 2193, 0]"] - 259["Segment
[2201, 2240, 0]"] - 260["Segment
[2248, 2355, 0]"] - 261["Segment
[2363, 2402, 0]"] - 262["Segment
[2410, 2527, 0]"] - 263["Segment
[2535, 2574, 0]"] - 264["Segment
[2582, 2667, 0]"] - 265["Segment
[2675, 2682, 0]"] + 256["Path
[1993, 2055, 0]"] + 257["Segment
[2063, 2114, 0]"] + 258["Segment
[2122, 2196, 0]"] + 259["Segment
[2204, 2243, 0]"] + 260["Segment
[2251, 2358, 0]"] + 261["Segment
[2366, 2405, 0]"] + 262["Segment
[2413, 2530, 0]"] + 263["Segment
[2538, 2577, 0]"] + 264["Segment
[2585, 2670, 0]"] + 265["Segment
[2678, 2685, 0]"] 266[Solid2d] end subgraph path295 [Path] - 295["Path
[1993, 2052, 0]"] - 296["Segment
[2060, 2111, 0]"] - 297["Segment
[2119, 2193, 0]"] - 298["Segment
[2201, 2240, 0]"] - 299["Segment
[2248, 2355, 0]"] - 300["Segment
[2363, 2402, 0]"] - 301["Segment
[2410, 2527, 0]"] - 302["Segment
[2535, 2574, 0]"] - 303["Segment
[2582, 2667, 0]"] - 304["Segment
[2675, 2682, 0]"] + 295["Path
[1993, 2055, 0]"] + 296["Segment
[2063, 2114, 0]"] + 297["Segment
[2122, 2196, 0]"] + 298["Segment
[2204, 2243, 0]"] + 299["Segment
[2251, 2358, 0]"] + 300["Segment
[2366, 2405, 0]"] + 301["Segment
[2413, 2530, 0]"] + 302["Segment
[2538, 2577, 0]"] + 303["Segment
[2585, 2670, 0]"] + 304["Segment
[2678, 2685, 0]"] 305[Solid2d] end subgraph path334 [Path] - 334["Path
[1993, 2052, 0]"] - 335["Segment
[2060, 2111, 0]"] - 336["Segment
[2119, 2193, 0]"] - 337["Segment
[2201, 2240, 0]"] - 338["Segment
[2248, 2355, 0]"] - 339["Segment
[2363, 2402, 0]"] - 340["Segment
[2410, 2527, 0]"] - 341["Segment
[2535, 2574, 0]"] - 342["Segment
[2582, 2667, 0]"] - 343["Segment
[2675, 2682, 0]"] + 334["Path
[1993, 2055, 0]"] + 335["Segment
[2063, 2114, 0]"] + 336["Segment
[2122, 2196, 0]"] + 337["Segment
[2204, 2243, 0]"] + 338["Segment
[2251, 2358, 0]"] + 339["Segment
[2366, 2405, 0]"] + 340["Segment
[2413, 2530, 0]"] + 341["Segment
[2538, 2577, 0]"] + 342["Segment
[2585, 2670, 0]"] + 343["Segment
[2678, 2685, 0]"] 344[Solid2d] end subgraph path373 [Path] - 373["Path
[1993, 2052, 0]"] - 374["Segment
[2060, 2111, 0]"] - 375["Segment
[2119, 2193, 0]"] - 376["Segment
[2201, 2240, 0]"] - 377["Segment
[2248, 2355, 0]"] - 378["Segment
[2363, 2402, 0]"] - 379["Segment
[2410, 2527, 0]"] - 380["Segment
[2535, 2574, 0]"] - 381["Segment
[2582, 2667, 0]"] - 382["Segment
[2675, 2682, 0]"] + 373["Path
[1993, 2055, 0]"] + 374["Segment
[2063, 2114, 0]"] + 375["Segment
[2122, 2196, 0]"] + 376["Segment
[2204, 2243, 0]"] + 377["Segment
[2251, 2358, 0]"] + 378["Segment
[2366, 2405, 0]"] + 379["Segment
[2413, 2530, 0]"] + 380["Segment
[2538, 2577, 0]"] + 381["Segment
[2585, 2670, 0]"] + 382["Segment
[2678, 2685, 0]"] 383[Solid2d] end subgraph path412 [Path] - 412["Path
[1993, 2052, 0]"] - 413["Segment
[2060, 2111, 0]"] - 414["Segment
[2119, 2193, 0]"] - 415["Segment
[2201, 2240, 0]"] - 416["Segment
[2248, 2355, 0]"] - 417["Segment
[2363, 2402, 0]"] - 418["Segment
[2410, 2527, 0]"] - 419["Segment
[2535, 2574, 0]"] - 420["Segment
[2582, 2667, 0]"] - 421["Segment
[2675, 2682, 0]"] + 412["Path
[1993, 2055, 0]"] + 413["Segment
[2063, 2114, 0]"] + 414["Segment
[2122, 2196, 0]"] + 415["Segment
[2204, 2243, 0]"] + 416["Segment
[2251, 2358, 0]"] + 417["Segment
[2366, 2405, 0]"] + 418["Segment
[2413, 2530, 0]"] + 419["Segment
[2538, 2577, 0]"] + 420["Segment
[2585, 2670, 0]"] + 421["Segment
[2678, 2685, 0]"] 422[Solid2d] end subgraph path451 [Path] - 451["Path
[1993, 2052, 0]"] - 452["Segment
[2060, 2111, 0]"] - 453["Segment
[2119, 2193, 0]"] - 454["Segment
[2201, 2240, 0]"] - 455["Segment
[2248, 2355, 0]"] - 456["Segment
[2363, 2402, 0]"] - 457["Segment
[2410, 2527, 0]"] - 458["Segment
[2535, 2574, 0]"] - 459["Segment
[2582, 2667, 0]"] - 460["Segment
[2675, 2682, 0]"] + 451["Path
[1993, 2055, 0]"] + 452["Segment
[2063, 2114, 0]"] + 453["Segment
[2122, 2196, 0]"] + 454["Segment
[2204, 2243, 0]"] + 455["Segment
[2251, 2358, 0]"] + 456["Segment
[2366, 2405, 0]"] + 457["Segment
[2413, 2530, 0]"] + 458["Segment
[2538, 2577, 0]"] + 459["Segment
[2585, 2670, 0]"] + 460["Segment
[2678, 2685, 0]"] 461[Solid2d] end subgraph path490 [Path] - 490["Path
[1993, 2052, 0]"] - 491["Segment
[2060, 2111, 0]"] - 492["Segment
[2119, 2193, 0]"] - 493["Segment
[2201, 2240, 0]"] - 494["Segment
[2248, 2355, 0]"] - 495["Segment
[2363, 2402, 0]"] - 496["Segment
[2410, 2527, 0]"] - 497["Segment
[2535, 2574, 0]"] - 498["Segment
[2582, 2667, 0]"] - 499["Segment
[2675, 2682, 0]"] + 490["Path
[1993, 2055, 0]"] + 491["Segment
[2063, 2114, 0]"] + 492["Segment
[2122, 2196, 0]"] + 493["Segment
[2204, 2243, 0]"] + 494["Segment
[2251, 2358, 0]"] + 495["Segment
[2366, 2405, 0]"] + 496["Segment
[2413, 2530, 0]"] + 497["Segment
[2538, 2577, 0]"] + 498["Segment
[2585, 2670, 0]"] + 499["Segment
[2678, 2685, 0]"] 500[Solid2d] end subgraph path529 [Path] - 529["Path
[1993, 2052, 0]"] - 530["Segment
[2060, 2111, 0]"] - 531["Segment
[2119, 2193, 0]"] - 532["Segment
[2201, 2240, 0]"] - 533["Segment
[2248, 2355, 0]"] - 534["Segment
[2363, 2402, 0]"] - 535["Segment
[2410, 2527, 0]"] - 536["Segment
[2535, 2574, 0]"] - 537["Segment
[2582, 2667, 0]"] - 538["Segment
[2675, 2682, 0]"] + 529["Path
[1993, 2055, 0]"] + 530["Segment
[2063, 2114, 0]"] + 531["Segment
[2122, 2196, 0]"] + 532["Segment
[2204, 2243, 0]"] + 533["Segment
[2251, 2358, 0]"] + 534["Segment
[2366, 2405, 0]"] + 535["Segment
[2413, 2530, 0]"] + 536["Segment
[2538, 2577, 0]"] + 537["Segment
[2585, 2670, 0]"] + 538["Segment
[2678, 2685, 0]"] 539[Solid2d] end subgraph path568 [Path] - 568["Path
[1993, 2052, 0]"] - 569["Segment
[2060, 2111, 0]"] - 570["Segment
[2119, 2193, 0]"] - 571["Segment
[2201, 2240, 0]"] - 572["Segment
[2248, 2355, 0]"] - 573["Segment
[2363, 2402, 0]"] - 574["Segment
[2410, 2527, 0]"] - 575["Segment
[2535, 2574, 0]"] - 576["Segment
[2582, 2667, 0]"] - 577["Segment
[2675, 2682, 0]"] + 568["Path
[1993, 2055, 0]"] + 569["Segment
[2063, 2114, 0]"] + 570["Segment
[2122, 2196, 0]"] + 571["Segment
[2204, 2243, 0]"] + 572["Segment
[2251, 2358, 0]"] + 573["Segment
[2366, 2405, 0]"] + 574["Segment
[2413, 2530, 0]"] + 575["Segment
[2538, 2577, 0]"] + 576["Segment
[2585, 2670, 0]"] + 577["Segment
[2678, 2685, 0]"] 578[Solid2d] end subgraph path607 [Path] - 607["Path
[1993, 2052, 0]"] - 608["Segment
[2060, 2111, 0]"] - 609["Segment
[2119, 2193, 0]"] - 610["Segment
[2201, 2240, 0]"] - 611["Segment
[2248, 2355, 0]"] - 612["Segment
[2363, 2402, 0]"] - 613["Segment
[2410, 2527, 0]"] - 614["Segment
[2535, 2574, 0]"] - 615["Segment
[2582, 2667, 0]"] - 616["Segment
[2675, 2682, 0]"] + 607["Path
[1993, 2055, 0]"] + 608["Segment
[2063, 2114, 0]"] + 609["Segment
[2122, 2196, 0]"] + 610["Segment
[2204, 2243, 0]"] + 611["Segment
[2251, 2358, 0]"] + 612["Segment
[2366, 2405, 0]"] + 613["Segment
[2413, 2530, 0]"] + 614["Segment
[2538, 2577, 0]"] + 615["Segment
[2585, 2670, 0]"] + 616["Segment
[2678, 2685, 0]"] 617[Solid2d] end subgraph path646 [Path] - 646["Path
[1993, 2052, 0]"] - 647["Segment
[2060, 2111, 0]"] - 648["Segment
[2119, 2193, 0]"] - 649["Segment
[2201, 2240, 0]"] - 650["Segment
[2248, 2355, 0]"] - 651["Segment
[2363, 2402, 0]"] - 652["Segment
[2410, 2527, 0]"] - 653["Segment
[2535, 2574, 0]"] - 654["Segment
[2582, 2667, 0]"] - 655["Segment
[2675, 2682, 0]"] + 646["Path
[1993, 2055, 0]"] + 647["Segment
[2063, 2114, 0]"] + 648["Segment
[2122, 2196, 0]"] + 649["Segment
[2204, 2243, 0]"] + 650["Segment
[2251, 2358, 0]"] + 651["Segment
[2366, 2405, 0]"] + 652["Segment
[2413, 2530, 0]"] + 653["Segment
[2538, 2577, 0]"] + 654["Segment
[2585, 2670, 0]"] + 655["Segment
[2678, 2685, 0]"] 656[Solid2d] end subgraph path685 [Path] - 685["Path
[1993, 2052, 0]"] - 686["Segment
[2060, 2111, 0]"] - 687["Segment
[2119, 2193, 0]"] - 688["Segment
[2201, 2240, 0]"] - 689["Segment
[2248, 2355, 0]"] - 690["Segment
[2363, 2402, 0]"] - 691["Segment
[2410, 2527, 0]"] - 692["Segment
[2535, 2574, 0]"] - 693["Segment
[2582, 2667, 0]"] - 694["Segment
[2675, 2682, 0]"] + 685["Path
[1993, 2055, 0]"] + 686["Segment
[2063, 2114, 0]"] + 687["Segment
[2122, 2196, 0]"] + 688["Segment
[2204, 2243, 0]"] + 689["Segment
[2251, 2358, 0]"] + 690["Segment
[2366, 2405, 0]"] + 691["Segment
[2413, 2530, 0]"] + 692["Segment
[2538, 2577, 0]"] + 693["Segment
[2585, 2670, 0]"] + 694["Segment
[2678, 2685, 0]"] 695[Solid2d] end subgraph path724 [Path] - 724["Path
[1993, 2052, 0]"] - 725["Segment
[2060, 2111, 0]"] - 726["Segment
[2119, 2193, 0]"] - 727["Segment
[2201, 2240, 0]"] - 728["Segment
[2248, 2355, 0]"] - 729["Segment
[2363, 2402, 0]"] - 730["Segment
[2410, 2527, 0]"] - 731["Segment
[2535, 2574, 0]"] - 732["Segment
[2582, 2667, 0]"] - 733["Segment
[2675, 2682, 0]"] + 724["Path
[1993, 2055, 0]"] + 725["Segment
[2063, 2114, 0]"] + 726["Segment
[2122, 2196, 0]"] + 727["Segment
[2204, 2243, 0]"] + 728["Segment
[2251, 2358, 0]"] + 729["Segment
[2366, 2405, 0]"] + 730["Segment
[2413, 2530, 0]"] + 731["Segment
[2538, 2577, 0]"] + 732["Segment
[2585, 2670, 0]"] + 733["Segment
[2678, 2685, 0]"] 734[Solid2d] end subgraph path763 [Path] - 763["Path
[1993, 2052, 0]"] - 764["Segment
[2060, 2111, 0]"] - 765["Segment
[2119, 2193, 0]"] - 766["Segment
[2201, 2240, 0]"] - 767["Segment
[2248, 2355, 0]"] - 768["Segment
[2363, 2402, 0]"] - 769["Segment
[2410, 2527, 0]"] - 770["Segment
[2535, 2574, 0]"] - 771["Segment
[2582, 2667, 0]"] - 772["Segment
[2675, 2682, 0]"] + 763["Path
[1993, 2055, 0]"] + 764["Segment
[2063, 2114, 0]"] + 765["Segment
[2122, 2196, 0]"] + 766["Segment
[2204, 2243, 0]"] + 767["Segment
[2251, 2358, 0]"] + 768["Segment
[2366, 2405, 0]"] + 769["Segment
[2413, 2530, 0]"] + 770["Segment
[2538, 2577, 0]"] + 771["Segment
[2585, 2670, 0]"] + 772["Segment
[2678, 2685, 0]"] 773[Solid2d] end subgraph path802 [Path] - 802["Path
[1993, 2052, 0]"] - 803["Segment
[2060, 2111, 0]"] - 804["Segment
[2119, 2193, 0]"] - 805["Segment
[2201, 2240, 0]"] - 806["Segment
[2248, 2355, 0]"] - 807["Segment
[2363, 2402, 0]"] - 808["Segment
[2410, 2527, 0]"] - 809["Segment
[2535, 2574, 0]"] - 810["Segment
[2582, 2667, 0]"] - 811["Segment
[2675, 2682, 0]"] + 802["Path
[1993, 2055, 0]"] + 803["Segment
[2063, 2114, 0]"] + 804["Segment
[2122, 2196, 0]"] + 805["Segment
[2204, 2243, 0]"] + 806["Segment
[2251, 2358, 0]"] + 807["Segment
[2366, 2405, 0]"] + 808["Segment
[2413, 2530, 0]"] + 809["Segment
[2538, 2577, 0]"] + 810["Segment
[2585, 2670, 0]"] + 811["Segment
[2678, 2685, 0]"] 812[Solid2d] end subgraph path841 [Path] - 841["Path
[1993, 2052, 0]"] - 842["Segment
[2060, 2111, 0]"] - 843["Segment
[2119, 2193, 0]"] - 844["Segment
[2201, 2240, 0]"] - 845["Segment
[2248, 2355, 0]"] - 846["Segment
[2363, 2402, 0]"] - 847["Segment
[2410, 2527, 0]"] - 848["Segment
[2535, 2574, 0]"] - 849["Segment
[2582, 2667, 0]"] - 850["Segment
[2675, 2682, 0]"] + 841["Path
[1993, 2055, 0]"] + 842["Segment
[2063, 2114, 0]"] + 843["Segment
[2122, 2196, 0]"] + 844["Segment
[2204, 2243, 0]"] + 845["Segment
[2251, 2358, 0]"] + 846["Segment
[2366, 2405, 0]"] + 847["Segment
[2413, 2530, 0]"] + 848["Segment
[2538, 2577, 0]"] + 849["Segment
[2585, 2670, 0]"] + 850["Segment
[2678, 2685, 0]"] 851[Solid2d] end subgraph path880 [Path] - 880["Path
[4914, 5001, 0]"] - 881["Segment
[5009, 5038, 0]"] - 882["Segment
[5046, 5074, 0]"] - 883["Segment
[5082, 5160, 0]"] - 884["Segment
[5168, 5215, 0]"] - 885["Segment
[5223, 5251, 0]"] - 886["Segment
[5259, 5288, 0]"] - 887["Segment
[5296, 5325, 0]"] - 888["Segment
[5333, 5399, 0]"] - 889["Segment
[5407, 5435, 0]"] - 890["Segment
[5443, 5472, 0]"] - 891["Segment
[5480, 5542, 0]"] - 892["Segment
[5550, 5578, 0]"] - 893["Segment
[5586, 5620, 0]"] - 894["Segment
[5628, 5658, 0]"] - 895["Segment
[5666, 5734, 0]"] - 896["Segment
[5742, 5749, 0]"] + 880["Path
[4917, 5004, 0]"] + 881["Segment
[5012, 5041, 0]"] + 882["Segment
[5049, 5077, 0]"] + 883["Segment
[5085, 5163, 0]"] + 884["Segment
[5171, 5218, 0]"] + 885["Segment
[5226, 5254, 0]"] + 886["Segment
[5262, 5291, 0]"] + 887["Segment
[5299, 5328, 0]"] + 888["Segment
[5336, 5402, 0]"] + 889["Segment
[5410, 5438, 0]"] + 890["Segment
[5446, 5475, 0]"] + 891["Segment
[5483, 5545, 0]"] + 892["Segment
[5553, 5581, 0]"] + 893["Segment
[5589, 5623, 0]"] + 894["Segment
[5631, 5661, 0]"] + 895["Segment
[5669, 5737, 0]"] + 896["Segment
[5745, 5752, 0]"] 897[Solid2d] end subgraph path950 [Path] - 950["Path
[5949, 6047, 0]"] - 951["Segment
[6055, 6133, 0]"] - 952["Segment
[6141, 6188, 0]"] - 953["Segment
[6196, 6276, 0]"] - 954["Segment
[6284, 6291, 0]"] + 950["Path
[5952, 6050, 0]"] + 951["Segment
[6058, 6136, 0]"] + 952["Segment
[6144, 6191, 0]"] + 953["Segment
[6199, 6279, 0]"] + 954["Segment
[6287, 6294, 0]"] 955[Solid2d] end subgraph path972 [Path] - 972["Path
[6399, 6496, 0]"] - 973["Segment
[6504, 6582, 0]"] - 974["Segment
[6590, 6638, 0]"] - 975["Segment
[6646, 6726, 0]"] - 976["Segment
[6734, 6741, 0]"] + 972["Path
[6402, 6499, 0]"] + 973["Segment
[6507, 6585, 0]"] + 974["Segment
[6593, 6641, 0]"] + 975["Segment
[6649, 6729, 0]"] + 976["Segment
[6737, 6744, 0]"] 977[Solid2d] end subgraph path994 [Path] - 994["Path
[5949, 6047, 0]"] - 995["Segment
[6055, 6133, 0]"] - 996["Segment
[6141, 6188, 0]"] - 997["Segment
[6196, 6276, 0]"] - 998["Segment
[6284, 6291, 0]"] + 994["Path
[5952, 6050, 0]"] + 995["Segment
[6058, 6136, 0]"] + 996["Segment
[6144, 6191, 0]"] + 997["Segment
[6199, 6279, 0]"] + 998["Segment
[6287, 6294, 0]"] 999[Solid2d] end subgraph path1016 [Path] - 1016["Path
[6399, 6496, 0]"] - 1017["Segment
[6504, 6582, 0]"] - 1018["Segment
[6590, 6638, 0]"] - 1019["Segment
[6646, 6726, 0]"] - 1020["Segment
[6734, 6741, 0]"] + 1016["Path
[6402, 6499, 0]"] + 1017["Segment
[6507, 6585, 0]"] + 1018["Segment
[6593, 6641, 0]"] + 1019["Segment
[6649, 6729, 0]"] + 1020["Segment
[6737, 6744, 0]"] 1021[Solid2d] end 1["Plane
[532, 549, 0]"] @@ -395,7 +395,7 @@ flowchart LR 58["SweepEdge Opposite"] 59["SweepEdge Adjacent"] 60["Plane
[1954, 1977, 0]"] - 72["Sweep Extrusion
[2690, 2716, 0]"] + 72["Sweep Extrusion
[2693, 2719, 0]"] 73[Wall] 74[Wall] 75[Wall] @@ -423,7 +423,7 @@ flowchart LR 97["SweepEdge Opposite"] 98["SweepEdge Adjacent"] 99["Plane
[1954, 1977, 0]"] - 111["Sweep Extrusion
[2690, 2716, 0]"] + 111["Sweep Extrusion
[2693, 2719, 0]"] 112[Wall] 113[Wall] 114[Wall] @@ -451,7 +451,7 @@ flowchart LR 136["SweepEdge Opposite"] 137["SweepEdge Adjacent"] 138["Plane
[1954, 1977, 0]"] - 150["Sweep Extrusion
[2690, 2716, 0]"] + 150["Sweep Extrusion
[2693, 2719, 0]"] 151[Wall] 152[Wall] 153[Wall] @@ -479,7 +479,7 @@ flowchart LR 175["SweepEdge Opposite"] 176["SweepEdge Adjacent"] 177["Plane
[1954, 1977, 0]"] - 189["Sweep Extrusion
[2690, 2716, 0]"] + 189["Sweep Extrusion
[2693, 2719, 0]"] 190[Wall] 191[Wall] 192[Wall] @@ -507,7 +507,7 @@ flowchart LR 214["SweepEdge Opposite"] 215["SweepEdge Adjacent"] 216["Plane
[1954, 1977, 0]"] - 228["Sweep Extrusion
[2690, 2716, 0]"] + 228["Sweep Extrusion
[2693, 2719, 0]"] 229[Wall] 230[Wall] 231[Wall] @@ -535,7 +535,7 @@ flowchart LR 253["SweepEdge Opposite"] 254["SweepEdge Adjacent"] 255["Plane
[1954, 1977, 0]"] - 267["Sweep Extrusion
[2690, 2716, 0]"] + 267["Sweep Extrusion
[2693, 2719, 0]"] 268[Wall] 269[Wall] 270[Wall] @@ -563,7 +563,7 @@ flowchart LR 292["SweepEdge Opposite"] 293["SweepEdge Adjacent"] 294["Plane
[1954, 1977, 0]"] - 306["Sweep Extrusion
[2690, 2716, 0]"] + 306["Sweep Extrusion
[2693, 2719, 0]"] 307[Wall] 308[Wall] 309[Wall] @@ -591,7 +591,7 @@ flowchart LR 331["SweepEdge Opposite"] 332["SweepEdge Adjacent"] 333["Plane
[1954, 1977, 0]"] - 345["Sweep Extrusion
[2690, 2716, 0]"] + 345["Sweep Extrusion
[2693, 2719, 0]"] 346[Wall] 347[Wall] 348[Wall] @@ -619,7 +619,7 @@ flowchart LR 370["SweepEdge Opposite"] 371["SweepEdge Adjacent"] 372["Plane
[1954, 1977, 0]"] - 384["Sweep Extrusion
[2690, 2716, 0]"] + 384["Sweep Extrusion
[2693, 2719, 0]"] 385[Wall] 386[Wall] 387[Wall] @@ -647,7 +647,7 @@ flowchart LR 409["SweepEdge Opposite"] 410["SweepEdge Adjacent"] 411["Plane
[1954, 1977, 0]"] - 423["Sweep Extrusion
[2690, 2716, 0]"] + 423["Sweep Extrusion
[2693, 2719, 0]"] 424[Wall] 425[Wall] 426[Wall] @@ -675,7 +675,7 @@ flowchart LR 448["SweepEdge Opposite"] 449["SweepEdge Adjacent"] 450["Plane
[1954, 1977, 0]"] - 462["Sweep Extrusion
[2690, 2716, 0]"] + 462["Sweep Extrusion
[2693, 2719, 0]"] 463[Wall] 464[Wall] 465[Wall] @@ -703,7 +703,7 @@ flowchart LR 487["SweepEdge Opposite"] 488["SweepEdge Adjacent"] 489["Plane
[1954, 1977, 0]"] - 501["Sweep Extrusion
[2690, 2716, 0]"] + 501["Sweep Extrusion
[2693, 2719, 0]"] 502[Wall] 503[Wall] 504[Wall] @@ -731,7 +731,7 @@ flowchart LR 526["SweepEdge Opposite"] 527["SweepEdge Adjacent"] 528["Plane
[1954, 1977, 0]"] - 540["Sweep Extrusion
[2690, 2716, 0]"] + 540["Sweep Extrusion
[2693, 2719, 0]"] 541[Wall] 542[Wall] 543[Wall] @@ -759,7 +759,7 @@ flowchart LR 565["SweepEdge Opposite"] 566["SweepEdge Adjacent"] 567["Plane
[1954, 1977, 0]"] - 579["Sweep Extrusion
[2690, 2716, 0]"] + 579["Sweep Extrusion
[2693, 2719, 0]"] 580[Wall] 581[Wall] 582[Wall] @@ -787,7 +787,7 @@ flowchart LR 604["SweepEdge Opposite"] 605["SweepEdge Adjacent"] 606["Plane
[1954, 1977, 0]"] - 618["Sweep Extrusion
[2690, 2716, 0]"] + 618["Sweep Extrusion
[2693, 2719, 0]"] 619[Wall] 620[Wall] 621[Wall] @@ -815,7 +815,7 @@ flowchart LR 643["SweepEdge Opposite"] 644["SweepEdge Adjacent"] 645["Plane
[1954, 1977, 0]"] - 657["Sweep Extrusion
[2690, 2716, 0]"] + 657["Sweep Extrusion
[2693, 2719, 0]"] 658[Wall] 659[Wall] 660[Wall] @@ -843,7 +843,7 @@ flowchart LR 682["SweepEdge Opposite"] 683["SweepEdge Adjacent"] 684["Plane
[1954, 1977, 0]"] - 696["Sweep Extrusion
[2690, 2716, 0]"] + 696["Sweep Extrusion
[2693, 2719, 0]"] 697[Wall] 698[Wall] 699[Wall] @@ -871,7 +871,7 @@ flowchart LR 721["SweepEdge Opposite"] 722["SweepEdge Adjacent"] 723["Plane
[1954, 1977, 0]"] - 735["Sweep Extrusion
[2690, 2716, 0]"] + 735["Sweep Extrusion
[2693, 2719, 0]"] 736[Wall] 737[Wall] 738[Wall] @@ -899,7 +899,7 @@ flowchart LR 760["SweepEdge Opposite"] 761["SweepEdge Adjacent"] 762["Plane
[1954, 1977, 0]"] - 774["Sweep Extrusion
[2690, 2716, 0]"] + 774["Sweep Extrusion
[2693, 2719, 0]"] 775[Wall] 776[Wall] 777[Wall] @@ -927,7 +927,7 @@ flowchart LR 799["SweepEdge Opposite"] 800["SweepEdge Adjacent"] 801["Plane
[1954, 1977, 0]"] - 813["Sweep Extrusion
[2690, 2716, 0]"] + 813["Sweep Extrusion
[2693, 2719, 0]"] 814[Wall] 815[Wall] 816[Wall] @@ -955,7 +955,7 @@ flowchart LR 838["SweepEdge Opposite"] 839["SweepEdge Adjacent"] 840["Plane
[1954, 1977, 0]"] - 852["Sweep Extrusion
[2690, 2716, 0]"] + 852["Sweep Extrusion
[2693, 2719, 0]"] 853[Wall] 854[Wall] 855[Wall] @@ -982,8 +982,8 @@ flowchart LR 876["SweepEdge Adjacent"] 877["SweepEdge Opposite"] 878["SweepEdge Adjacent"] - 879["Plane
[4883, 4906, 0]"] - 898["Sweep Extrusion
[5757, 5781, 0]"] + 879["Plane
[4886, 4909, 0]"] + 898["Sweep Extrusion
[5760, 5784, 0]"] 899[Wall] 900[Wall] 901[Wall] @@ -1034,8 +1034,8 @@ flowchart LR 946["SweepEdge Adjacent"] 947["SweepEdge Opposite"] 948["SweepEdge Adjacent"] - 949["Plane
[5918, 5941, 0]"] - 956["Sweep Extrusion
[6299, 6323, 0]"] + 949["Plane
[5921, 5944, 0]"] + 956["Sweep Extrusion
[6302, 6326, 0]"] 957[Wall] 958[Wall] 959[Wall] @@ -1050,8 +1050,8 @@ flowchart LR 968["SweepEdge Adjacent"] 969["SweepEdge Opposite"] 970["SweepEdge Adjacent"] - 971["Plane
[6368, 6391, 0]"] - 978["Sweep Extrusion
[6749, 6773, 0]"] + 971["Plane
[6371, 6394, 0]"] + 978["Sweep Extrusion
[6752, 6776, 0]"] 979[Wall] 980[Wall] 981[Wall] @@ -1066,8 +1066,8 @@ flowchart LR 990["SweepEdge Adjacent"] 991["SweepEdge Opposite"] 992["SweepEdge Adjacent"] - 993["Plane
[5918, 5941, 0]"] - 1000["Sweep Extrusion
[6299, 6323, 0]"] + 993["Plane
[5921, 5944, 0]"] + 1000["Sweep Extrusion
[6302, 6326, 0]"] 1001[Wall] 1002[Wall] 1003[Wall] @@ -1082,8 +1082,8 @@ flowchart LR 1012["SweepEdge Adjacent"] 1013["SweepEdge Opposite"] 1014["SweepEdge Adjacent"] - 1015["Plane
[6368, 6391, 0]"] - 1022["Sweep Extrusion
[6749, 6773, 0]"] + 1015["Plane
[6371, 6394, 0]"] + 1022["Sweep Extrusion
[6752, 6776, 0]"] 1023[Wall] 1024[Wall] 1025[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap b/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap index 922d7ab4e..81ee66fe5 100644 --- a/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap @@ -736,44 +736,47 @@ description: Result of parsing keyboard.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -783,7 +786,7 @@ description: Result of parsing keyboard.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -794,8 +797,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2763,85 +2767,79 @@ description: Result of parsing keyboard.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "originStart", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "originStart", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "sketch002", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "computed": false, + "end": 0, + "object": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + "start": 0, + "type": "MemberExpression", + "type": "MemberExpression" + }, + { + "commentStart": 0, + "computed": false, + "end": 0, + "object": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "MemberExpression", + "type": "MemberExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2851,7 +2849,7 @@ description: Result of parsing keyboard.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2862,8 +2860,24 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch002", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -8106,37 +8120,21 @@ description: Result of parsing keyboard.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "operator": "+", - "right": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "origin", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { + "left": { "commentStart": 0, "end": 0, "raw": "0", @@ -8148,98 +8146,117 @@ description: Result of parsing keyboard.kcl "suffix": "None" } }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.15", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.15, - "suffix": "None" - } - }, - "operator": "*", + "operator": "+", "right": { - "abs_path": false, "commentStart": 0, + "computed": false, "end": 0, - "name": { + "object": { "commentStart": 0, "end": 0, - "name": "scale", + "name": "origin", "start": 0, + "type": "Identifier", "type": "Identifier" }, - "path": [], + "property": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, "start": 0, - "type": "Name", - "type": "Name" + "type": "MemberExpression", + "type": "MemberExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { + { "commentStart": 0, - "computed": false, "end": 0, - "object": { + "left": { "commentStart": 0, "end": 0, - "name": "origin", + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.15", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.15, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, "start": 0, - "type": "Identifier", - "type": "Identifier" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "property": { + "operator": "+", + "right": { "commentStart": 0, + "computed": false, "end": 0, - "raw": "1", + "object": { + "commentStart": 0, + "end": 0, + "name": "origin", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } + "type": "MemberExpression", + "type": "MemberExpression" }, "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -8249,7 +8266,7 @@ description: Result of parsing keyboard.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -8260,8 +8277,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -9917,164 +9935,167 @@ description: Result of parsing keyboard.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { "commentStart": 0, "end": 0, - "raw": ".788", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.788, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "left": { "commentStart": 0, "end": 0, - "name": "scale", + "raw": ".788", "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.788, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "computed": false, + "end": 0, + "object": { + "commentStart": 0, + "end": 0, + "name": "origin", + "start": 0, + "type": "Identifier", "type": "Identifier" }, - "path": [], + "property": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, "start": 0, - "type": "Name", - "type": "Name" + "type": "MemberExpression", + "type": "MemberExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "origin", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { + { "commentStart": 0, "end": 0, "left": { "commentStart": 0, "end": 0, - "raw": ".921", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.921, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "left": { "commentStart": 0, "end": 0, - "name": "scale", + "raw": ".921", "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.921, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "computed": false, + "end": 0, + "object": { + "commentStart": 0, + "end": 0, + "name": "origin", + "start": 0, + "type": "Identifier", "type": "Identifier" }, - "path": [], + "property": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, "start": 0, - "type": "Name", - "type": "Name" + "type": "MemberExpression", + "type": "MemberExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "origin", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -10084,7 +10105,7 @@ description: Result of parsing keyboard.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -10095,8 +10116,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -10747,164 +10769,167 @@ description: Result of parsing keyboard.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { "commentStart": 0, "end": 0, - "raw": ".16", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.16, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "left": { "commentStart": 0, "end": 0, - "name": "scale", + "raw": ".16", "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.16, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "computed": false, + "end": 0, + "object": { + "commentStart": 0, + "end": 0, + "name": "origin", + "start": 0, + "type": "Identifier", "type": "Identifier" }, - "path": [], + "property": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, "start": 0, - "type": "Name", - "type": "Name" + "type": "MemberExpression", + "type": "MemberExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "origin", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { + { "commentStart": 0, "end": 0, "left": { "commentStart": 0, "end": 0, - "raw": ".079", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.079, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "left": { "commentStart": 0, "end": 0, - "name": "scale", + "raw": ".079", "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.079, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "computed": false, + "end": 0, + "object": { + "commentStart": 0, + "end": 0, + "name": "origin", + "start": 0, + "type": "Identifier", "type": "Identifier" }, - "path": [], + "property": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, "start": 0, - "type": "Name", - "type": "Name" + "type": "MemberExpression", + "type": "MemberExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "origin", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -10914,7 +10939,7 @@ description: Result of parsing keyboard.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -10925,8 +10950,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap b/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap index 3a704ac16..3c8a3fe3a 100644 --- a/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap @@ -193,8 +193,8 @@ description: Operations executed keyboard.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -230,7 +230,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -562,7 +562,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -894,7 +894,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -1226,7 +1226,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -1558,7 +1558,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -1890,7 +1890,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -2222,7 +2222,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -2554,7 +2554,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -2886,7 +2886,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -3218,7 +3218,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -3550,7 +3550,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -3882,7 +3882,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -4214,7 +4214,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -4546,7 +4546,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -4878,7 +4878,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -5210,7 +5210,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -5542,7 +5542,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -5874,7 +5874,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -6206,7 +6206,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -6538,7 +6538,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -6870,7 +6870,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 2974, + 2977, 0 ], "unlabeledArg": null, @@ -7201,8 +7201,8 @@ description: Operations executed keyboard.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -7237,8 +7237,8 @@ description: Operations executed keyboard.kcl "type": "FunctionCall", "name": "z", "functionSourceRange": [ - 4852, - 5831, + 4855, + 5834, 0 ], "unlabeledArg": null, @@ -7474,8 +7474,8 @@ description: Operations executed keyboard.kcl "type": "FunctionCall", "name": "o", "functionSourceRange": [ - 5878, - 6823, + 5881, + 6826, 0 ], "unlabeledArg": null, @@ -7930,8 +7930,8 @@ description: Operations executed keyboard.kcl "type": "FunctionCall", "name": "o", "functionSourceRange": [ - 5878, - 6823, + 5881, + 6826, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/kitt/ast.snap b/rust/kcl-lib/tests/kcl_samples/kitt/ast.snap index 9ddafc75f..2a311a73d 100644 --- a/rust/kcl-lib/tests/kcl_samples/kitt/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/kitt/ast.snap @@ -103,52 +103,55 @@ description: Result of parsing kitt.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "positionY", + "name": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "positionZ", + "name": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -158,7 +161,7 @@ description: Result of parsing kitt.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -169,8 +172,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -908,80 +912,83 @@ description: Result of parsing kitt.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitBodyWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBodyWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, "commentStart": 0, "end": 0, - "operator": "-", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBodyElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitBodyElevation", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -991,7 +998,7 @@ description: Result of parsing kitt.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1002,8 +1009,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2293,80 +2301,83 @@ description: Result of parsing kitt.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitFaceWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFaceWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, "commentStart": 0, "end": 0, - "operator": "-", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFaceElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitFaceElevation", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2376,7 +2387,7 @@ description: Result of parsing kitt.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2387,8 +2398,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -4570,56 +4582,59 @@ description: Result of parsing kitt.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "2", + "operator": "-", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "UnaryExpression", + "type": "UnaryExpression" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitNoseElevation", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitNoseElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -4629,7 +4644,7 @@ description: Result of parsing kitt.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -4640,8 +4655,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -9688,52 +9704,55 @@ description: Result of parsing kitt.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "offsetSide", + "name": { + "commentStart": 0, + "end": 0, + "name": "offsetSide", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitShoeOffsetFront", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitShoeOffsetFront", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -9743,7 +9762,7 @@ description: Result of parsing kitt.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -9754,8 +9773,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/lego/ast.snap b/rust/kcl-lib/tests/kcl_samples/lego/ast.snap index 734bb14be..7a62ca09f 100644 --- a/rust/kcl-lib/tests/kcl_samples/lego/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/lego/ast.snap @@ -1000,108 +1000,111 @@ description: Result of parsing lego.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "totalWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "totalWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "totalLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "totalLength", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1111,7 +1114,7 @@ description: Result of parsing lego.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1122,8 +1125,9 @@ description: Result of parsing lego.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1545,23 +1549,66 @@ description: Result of parsing lego.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { "commentStart": 0, "end": 0, "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "totalWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "totalWidth", + "name": "t", "start": 0, "type": "Identifier" }, @@ -1570,66 +1617,66 @@ description: Result of parsing lego.kcl "type": "Name", "type": "Name" }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "t", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "argument": { "commentStart": 0, "end": 0, - "left": { + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "argument": { "commentStart": 0, "end": 0, "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "totalLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "totalLength", + "name": "t", "start": 0, "type": "Identifier" }, @@ -1638,63 +1685,23 @@ description: Result of parsing lego.kcl "type": "Name", "type": "Name" }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, + "commentStart": 0, + "end": 0, "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "t", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1704,7 +1711,7 @@ description: Result of parsing lego.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1715,8 +1722,9 @@ description: Result of parsing lego.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/artifact_graph_flowchart.snap.md index e902a3c30..a8d8de6c7 100644 --- a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/artifact_graph_flowchart.snap.md @@ -51,12 +51,12 @@ flowchart LR 94[Solid2d] end subgraph path101 [Path] - 101["Path
[1785, 1841, 0]"] - 102["Segment
[1849, 1873, 0]"] - 103["Segment
[1881, 1981, 0]"] - 104["Segment
[1989, 2013, 0]"] - 105["Segment
[2021, 2199, 0]"] - 106["Segment
[2207, 2214, 0]"] + 101["Path
[1785, 1844, 0]"] + 102["Segment
[1852, 1876, 0]"] + 103["Segment
[1884, 1984, 0]"] + 104["Segment
[1992, 2016, 0]"] + 105["Segment
[2024, 2202, 0]"] + 106["Segment
[2210, 2217, 0]"] 107[Solid2d] end 1["Plane
[547, 574, 0]"] @@ -129,7 +129,7 @@ flowchart LR 98["Cap End"] 99["SweepEdge Opposite"] 100["SweepEdge Adjacent"] - 108["Sweep Extrusion
[2222, 2245, 0]"] + 108["Sweep Extrusion
[2225, 2248, 0]"] 109[Wall] 110[Wall] 111[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ast.snap b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ast.snap index 8da5a8168..b488d5676 100644 --- a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ast.snap @@ -2717,85 +2717,79 @@ description: Result of parsing makeup-mirror.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "offsetX", - "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": "gestellR", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "altitude", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "armPlane", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "offsetX", + "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": "gestellR", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "altitude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2805,7 +2799,7 @@ description: Result of parsing makeup-mirror.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2816,8 +2810,24 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "armPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ops.snap b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ops.snap index 93e439b9a..bbc587136 100644 --- a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ops.snap @@ -805,7 +805,7 @@ description: Operations executed makeup-mirror.kcl "name": "mirrorFn", "functionSourceRange": [ 1510, - 2264, + 2267, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/mounting-plate/ast.snap b/rust/kcl-lib/tests/kcl_samples/mounting-plate/ast.snap index ff824d874..b8533145e 100644 --- a/rust/kcl-lib/tests/kcl_samples/mounting-plate/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/mounting-plate/ast.snap @@ -245,164 +245,167 @@ description: Result of parsing mounting-plate.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "-", - "right": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, + "computed": false, "end": 0, - "name": { + "object": { "commentStart": 0, "end": 0, - "name": "w", + "name": "pos", "start": 0, + "type": "Identifier", "type": "Identifier" }, - "path": [], + "property": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, "start": 0, - "type": "Name", - "type": "Name" + "type": "MemberExpression", + "type": "MemberExpression" }, - "operator": "/", + "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "w", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "-", - "right": { + { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, + "computed": false, "end": 0, - "name": { + "object": { "commentStart": 0, "end": 0, - "name": "l", + "name": "pos", "start": 0, + "type": "Identifier", "type": "Identifier" }, - "path": [], + "property": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, "start": 0, - "type": "Name", - "type": "Name" + "type": "MemberExpression", + "type": "MemberExpression" }, - "operator": "/", + "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "l", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -412,7 +415,7 @@ description: Result of parsing mounting-plate.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -423,8 +426,9 @@ description: Result of parsing mounting-plate.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/multi-axis-robot/ops.snap b/rust/kcl-lib/tests/kcl_samples/multi-axis-robot/ops.snap index a366660ae..a972d03c0 100644 --- a/rust/kcl-lib/tests/kcl_samples/multi-axis-robot/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/multi-axis-robot/ops.snap @@ -934,8 +934,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -970,8 +970,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1105,8 +1105,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1141,8 +1141,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1177,8 +1177,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1213,8 +1213,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1327,8 +1327,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1363,8 +1363,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1799,8 +1799,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -1835,8 +1835,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2025,8 +2025,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2061,8 +2061,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2298,8 +2298,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2334,8 +2334,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2370,8 +2370,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2406,8 +2406,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2520,8 +2520,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2556,8 +2556,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2776,8 +2776,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2812,8 +2812,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2848,8 +2848,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2884,8 +2884,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -2975,8 +2975,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3011,8 +3011,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3146,8 +3146,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3182,8 +3182,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3218,8 +3218,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3254,8 +3254,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3392,8 +3392,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3428,8 +3428,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3464,8 +3464,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3500,8 +3500,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3591,8 +3591,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3627,8 +3627,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3663,8 +3663,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3699,8 +3699,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3845,8 +3845,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3881,8 +3881,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3917,8 +3917,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -3953,8 +3953,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4044,8 +4044,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4080,8 +4080,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4116,8 +4116,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -4152,8 +4152,8 @@ description: Operations executed multi-axis-robot.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/parametric-bearing-pillow-block/ast.snap b/rust/kcl-lib/tests/kcl_samples/parametric-bearing-pillow-block/ast.snap index cd454c063..253c8dba7 100644 --- a/rust/kcl-lib/tests/kcl_samples/parametric-bearing-pillow-block/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/parametric-bearing-pillow-block/ast.snap @@ -329,108 +329,111 @@ description: Result of parsing parametric-bearing-pillow-block.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "width", + "name": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "length", + "name": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -440,7 +443,7 @@ description: Result of parsing parametric-bearing-pillow-block.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -451,8 +454,9 @@ description: Result of parsing parametric-bearing-pillow-block.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/pipe-flange-assembly/ops.snap b/rust/kcl-lib/tests/kcl_samples/pipe-flange-assembly/ops.snap index c9c51095a..6da1732d0 100644 --- a/rust/kcl-lib/tests/kcl_samples/pipe-flange-assembly/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/pipe-flange-assembly/ops.snap @@ -9,8 +9,8 @@ description: Operations executed pipe-flange-assembly.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -45,8 +45,8 @@ description: Operations executed pipe-flange-assembly.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/poopy-shoe/ast.snap b/rust/kcl-lib/tests/kcl_samples/poopy-shoe/ast.snap index 363226574..7a0c3f4e1 100644 --- a/rust/kcl-lib/tests/kcl_samples/poopy-shoe/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/poopy-shoe/ast.snap @@ -304,68 +304,71 @@ description: Result of parsing poopy-shoe.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "wallsWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "wallsWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "raw": "0", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 0.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -375,7 +378,7 @@ description: Result of parsing poopy-shoe.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -386,8 +389,9 @@ description: Result of parsing poopy-shoe.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1614,68 +1618,71 @@ description: Result of parsing poopy-shoe.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "wallsWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "wallsWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "raw": "0", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 0.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1685,7 +1692,7 @@ description: Result of parsing poopy-shoe.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1696,8 +1703,9 @@ description: Result of parsing poopy-shoe.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -3165,44 +3173,47 @@ description: Result of parsing poopy-shoe.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -3212,7 +3223,7 @@ description: Result of parsing poopy-shoe.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -3223,8 +3234,9 @@ description: Result of parsing poopy-shoe.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -3559,44 +3571,47 @@ description: Result of parsing poopy-shoe.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -3606,7 +3621,7 @@ description: Result of parsing poopy-shoe.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -3617,8 +3632,9 @@ description: Result of parsing poopy-shoe.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -5107,44 +5123,47 @@ description: Result of parsing poopy-shoe.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -5154,7 +5173,7 @@ description: Result of parsing poopy-shoe.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -5165,8 +5184,9 @@ description: Result of parsing poopy-shoe.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -5840,100 +5860,103 @@ description: Result of parsing poopy-shoe.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "operator": "-", + "raw": "0", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } }, - "operator": "*", - "right": { + { "commentStart": 0, "end": 0, "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "argument": { "commentStart": 0, "end": 0, - "name": "backLength", + "raw": "1", "start": 0, - "type": "Identifier" + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" }, - "operator": "-", + "operator": "*", "right": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "height", + "name": { + "commentStart": 0, + "end": 0, + "name": "backLength", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "-", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -5943,7 +5966,7 @@ description: Result of parsing poopy-shoe.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -5954,8 +5977,9 @@ description: Result of parsing poopy-shoe.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -6295,44 +6319,47 @@ description: Result of parsing poopy-shoe.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -6342,7 +6369,7 @@ description: Result of parsing poopy-shoe.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -6353,8 +6380,9 @@ description: Result of parsing poopy-shoe.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -7109,52 +7137,55 @@ description: Result of parsing poopy-shoe.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "wallThickness", + "name": { + "commentStart": 0, + "end": 0, + "name": "wallThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "wallThickness", + "name": { + "commentStart": 0, + "end": 0, + "name": "wallThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -7164,7 +7195,7 @@ description: Result of parsing poopy-shoe.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -7175,8 +7206,9 @@ description: Result of parsing poopy-shoe.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/ast.snap b/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/ast.snap index 57445cce9..f96dfd786 100644 --- a/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/ast.snap @@ -571,72 +571,75 @@ description: Result of parsing router-template-cross-bar.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "depth", + "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": "templateGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" } - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "depth", - "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": "templateGap", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -646,7 +649,7 @@ description: Result of parsing router-template-cross-bar.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -657,8 +660,9 @@ description: Result of parsing router-template-cross-bar.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2783,48 +2787,51 @@ description: Result of parsing router-template-cross-bar.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "distanceToInsideEdge", + "name": { + "commentStart": 0, + "end": 0, + "name": "distanceToInsideEdge", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2834,7 +2841,7 @@ description: Result of parsing router-template-cross-bar.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2845,8 +2852,9 @@ description: Result of parsing router-template-cross-bar.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -3563,56 +3571,59 @@ description: Result of parsing router-template-cross-bar.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "distanceToInsideEdge", + "name": { + "commentStart": 0, + "end": 0, + "name": "distanceToInsideEdge", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -3622,7 +3633,7 @@ description: Result of parsing router-template-cross-bar.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -3633,8 +3644,9 @@ description: Result of parsing router-template-cross-bar.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -4351,56 +4363,59 @@ description: Result of parsing router-template-cross-bar.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "distanceToInsideEdge", + "name": { + "commentStart": 0, + "end": 0, + "name": "distanceToInsideEdge", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -4410,7 +4425,7 @@ description: Result of parsing router-template-cross-bar.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -4421,8 +4436,9 @@ description: Result of parsing router-template-cross-bar.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/router-template-slate/ast.snap b/rust/kcl-lib/tests/kcl_samples/router-template-slate/ast.snap index 8ad781395..e6348a095 100644 --- a/rust/kcl-lib/tests/kcl_samples/router-template-slate/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/router-template-slate/ast.snap @@ -608,72 +608,75 @@ description: Result of parsing router-template-slate.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "depth", + "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": "templateGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" } - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "depth", - "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": "templateGap", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -683,7 +686,7 @@ description: Result of parsing router-template-slate.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -694,8 +697,9 @@ description: Result of parsing router-template-slate.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2035,91 +2039,26 @@ description: Result of parsing router-template-slate.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "slateWidthHalf", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "templateGap", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "templateDiameter", + "name": "slateWidthHalf", "start": 0, "type": "Identifier" }, @@ -2128,39 +2067,107 @@ description: Result of parsing router-template-slate.kcl "type": "Name", "type": "Name" }, - "operator": "/", + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "templateGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "templateDiameter", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2170,7 +2177,7 @@ description: Result of parsing router-template-slate.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2181,8 +2188,9 @@ description: Result of parsing router-template-slate.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2881,39 +2889,92 @@ description: Result of parsing router-template-slate.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "slateWidthHalf", + "name": { + "commentStart": 0, + "end": 0, + "name": "slateWidthHalf", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { + { "commentStart": 0, "end": 0, "left": { - "argument": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "templateGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "templateGap", + "name": "templateDiameter", "start": 0, "type": "Identifier" }, @@ -2922,83 +2983,33 @@ description: Result of parsing router-template-slate.kcl "type": "Name", "type": "Name" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "templateDiameter", + "raw": "2", "start": 0, - "type": "Identifier" + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -3008,7 +3019,7 @@ description: Result of parsing router-template-slate.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -3019,8 +3030,9 @@ description: Result of parsing router-template-slate.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/ast.snap b/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/ast.snap index f10e62c64..cf5b35d7e 100644 --- a/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/ast.snap @@ -843,100 +843,103 @@ description: Result of parsing sheet-metal-bracket.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "mountingBoltPatternX", + "name": { + "commentStart": 0, + "end": 0, + "name": "mountingBoltPatternX", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", + "operator": "-", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "2", + "name": { + "commentStart": 0, + "end": 0, + "name": "overhang", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "-", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "overhang", - "start": 0, - "type": "Identifier" - }, - "path": [], + "raw": "0", "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -946,7 +949,7 @@ description: Result of parsing sheet-metal-bracket.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -957,8 +960,9 @@ description: Result of parsing sheet-metal-bracket.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/socket-head-cap-screw/ast.snap b/rust/kcl-lib/tests/kcl_samples/socket-head-cap-screw/ast.snap index 2e732a4dc..f581489a5 100644 --- a/rust/kcl-lib/tests/kcl_samples/socket-head-cap-screw/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/socket-head-cap-screw/ast.snap @@ -811,92 +811,95 @@ description: Result of parsing socket-head-cap-screw.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "boltHexDrive", + "name": { + "commentStart": 0, + "end": 0, + "name": "boltHexDrive", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "boltHexFlatLength", + "raw": "2", "start": 0, - "type": "Identifier" + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "boltHexFlatLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -906,7 +909,7 @@ description: Result of parsing socket-head-cap-screw.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -917,8 +920,9 @@ description: Result of parsing socket-head-cap-screw.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/socket-head-cap-screw/ops.snap b/rust/kcl-lib/tests/kcl_samples/socket-head-cap-screw/ops.snap index 9bccc11a3..9b062e5f1 100644 --- a/rust/kcl-lib/tests/kcl_samples/socket-head-cap-screw/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/socket-head-cap-screw/ops.snap @@ -9,8 +9,8 @@ description: Operations executed socket-head-cap-screw.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/walkie-talkie/ops.snap b/rust/kcl-lib/tests/kcl_samples/walkie-talkie/ops.snap index abca05434..0306c86fc 100644 --- a/rust/kcl-lib/tests/kcl_samples/walkie-talkie/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/walkie-talkie/ops.snap @@ -144,8 +144,8 @@ description: Operations executed walkie-talkie.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -180,8 +180,8 @@ description: Operations executed walkie-talkie.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -216,8 +216,8 @@ description: Operations executed walkie-talkie.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -252,8 +252,8 @@ description: Operations executed walkie-talkie.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -587,8 +587,8 @@ description: Operations executed walkie-talkie.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -623,8 +623,8 @@ description: Operations executed walkie-talkie.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -659,8 +659,8 @@ description: Operations executed walkie-talkie.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -695,8 +695,8 @@ description: Operations executed walkie-talkie.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kittycad_svg/ast.snap b/rust/kcl-lib/tests/kittycad_svg/ast.snap index e11721e06..01d0ca1b5 100644 --- a/rust/kcl-lib/tests/kittycad_svg/ast.snap +++ b/rust/kcl-lib/tests/kittycad_svg/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing kittycad_svg.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing kittycad_svg.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing kittycad_svg.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kittycad_svg/input.kcl b/rust/kcl-lib/tests/kittycad_svg/input.kcl index d502a4763..e20a2356d 100644 --- a/rust/kcl-lib/tests/kittycad_svg/input.kcl +++ b/rust/kcl-lib/tests/kittycad_svg/input.kcl @@ -1,5 +1,5 @@ svg = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [2.52, -26.04]) // MoveAbsolute |> line(endAbsolute = [2.52, -25.2]) // VerticalLineAbsolute |> line(endAbsolute = [0.84, -25.2]) // HorizontalLineAbsolute diff --git a/rust/kcl-lib/tests/kittycad_svg/unparsed.snap b/rust/kcl-lib/tests/kittycad_svg/unparsed.snap index 3c95b0300..3294d833d 100644 --- a/rust/kcl-lib/tests/kittycad_svg/unparsed.snap +++ b/rust/kcl-lib/tests/kittycad_svg/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing kittycad_svg.kcl --- svg = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [2.52, -26.04]) // MoveAbsolute |> line(endAbsolute = [2.52, -25.2]) // VerticalLineAbsolute |> line(endAbsolute = [0.84, -25.2]) // HorizontalLineAbsolute diff --git a/rust/kcl-lib/tests/linear_pattern3d_a_pattern/ast.snap b/rust/kcl-lib/tests/linear_pattern3d_a_pattern/ast.snap index 03e30709c..8e4d04224 100644 --- a/rust/kcl-lib/tests/linear_pattern3d_a_pattern/ast.snap +++ b/rust/kcl-lib/tests/linear_pattern3d_a_pattern/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing linear_pattern3d_a_pattern.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/linear_pattern3d_a_pattern/input.kcl b/rust/kcl-lib/tests/linear_pattern3d_a_pattern/input.kcl index 827fa105c..8b0859470 100644 --- a/rust/kcl-lib/tests/linear_pattern3d_a_pattern/input.kcl +++ b/rust/kcl-lib/tests/linear_pattern3d_a_pattern/input.kcl @@ -1,5 +1,5 @@ exampleSketch = startSketchOn('XZ') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 2]) |> line(end = [3, 1]) |> line(end = [0, -4]) diff --git a/rust/kcl-lib/tests/linear_pattern3d_a_pattern/unparsed.snap b/rust/kcl-lib/tests/linear_pattern3d_a_pattern/unparsed.snap index 0338a53db..df6109563 100644 --- a/rust/kcl-lib/tests/linear_pattern3d_a_pattern/unparsed.snap +++ b/rust/kcl-lib/tests/linear_pattern3d_a_pattern/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing linear_pattern3d_a_pattern.kcl --- exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 2]) |> line(end = [3, 1]) |> line(end = [0, -4]) diff --git a/rust/kcl-lib/tests/loop_tag/ast.snap b/rust/kcl-lib/tests/loop_tag/ast.snap index e9c16cad8..fb78e1183 100644 --- a/rust/kcl-lib/tests/loop_tag/ast.snap +++ b/rust/kcl-lib/tests/loop_tag/ast.snap @@ -640,47 +640,50 @@ description: Result of parsing loop_tag.kcl { "arguments": [ { - "arguments": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "callee": { - "abs_path": false, + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": { + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "arguments": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "callee": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "calculatePoint", + "name": { + "commentStart": 0, + "end": 0, + "name": "calculatePoint", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "CallExpression", + "type": "CallExpression" + } } ], "callee": { @@ -690,7 +693,7 @@ description: Result of parsing loop_tag.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -701,8 +704,9 @@ description: Result of parsing loop_tag.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null } ], "commentStart": 0, diff --git a/rust/kcl-lib/tests/loop_tag/input.kcl b/rust/kcl-lib/tests/loop_tag/input.kcl index f8fb78c74..24ba94e15 100644 --- a/rust/kcl-lib/tests/loop_tag/input.kcl +++ b/rust/kcl-lib/tests/loop_tag/input.kcl @@ -21,7 +21,7 @@ fn calculatePoint(index) { // Start sketch on the XY plane initialSketch = startSketchOn(XY) - |> startProfileAt(calculatePoint(0), %) + |> startProfile(at = calculatePoint(0)) // Draw lines to form the base of the cylinder finalSketch = reduce( diff --git a/rust/kcl-lib/tests/loop_tag/unparsed.snap b/rust/kcl-lib/tests/loop_tag/unparsed.snap index f084296b6..27c6f9c75 100644 --- a/rust/kcl-lib/tests/loop_tag/unparsed.snap +++ b/rust/kcl-lib/tests/loop_tag/unparsed.snap @@ -28,7 +28,7 @@ fn calculatePoint(index) { // Start sketch on the XY plane initialSketch = startSketchOn(XY) - |> startProfileAt(calculatePoint(0), %) + |> startProfile(at = calculatePoint(0)) // Draw lines to form the base of the cylinder finalSketch = reduce([1 .. numSides - 1], initialSketch, fn(index, sketch) { diff --git a/rust/kcl-lib/tests/mike_stress_test/ast.snap b/rust/kcl-lib/tests/mike_stress_test/ast.snap index 551086133..f22ea6299 100644 --- a/rust/kcl-lib/tests/mike_stress_test/ast.snap +++ b/rust/kcl-lib/tests/mike_stress_test/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing mike_stress_test.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing mike_stress_test.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing mike_stress_test.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/mike_stress_test/input.kcl b/rust/kcl-lib/tests/mike_stress_test/input.kcl index d1274fda0..4784a5653 100644 --- a/rust/kcl-lib/tests/mike_stress_test/input.kcl +++ b/rust/kcl-lib/tests/mike_stress_test/input.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn('XY') - |> startProfileAt([0.0, 0.0], %) + |> startProfile(at = [0.0, 0.0]) |> line(end = [ -0.3670208139314082, 0.21201331909674526 diff --git a/rust/kcl-lib/tests/mike_stress_test/unparsed.snap b/rust/kcl-lib/tests/mike_stress_test/unparsed.snap index 88ce32802..efe2749bf 100644 --- a/rust/kcl-lib/tests/mike_stress_test/unparsed.snap +++ b/rust/kcl-lib/tests/mike_stress_test/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing mike_stress_test.kcl --- part001 = startSketchOn(XY) - |> startProfileAt([0.0, 0.0], %) + |> startProfile(at = [0.0, 0.0]) |> line(end = [ -0.3670208139314082, 0.21201331909674526 diff --git a/rust/kcl-lib/tests/multi_transform/ast.snap b/rust/kcl-lib/tests/multi_transform/ast.snap index 44e217e00..2f5183e48 100644 --- a/rust/kcl-lib/tests/multi_transform/ast.snap +++ b/rust/kcl-lib/tests/multi_transform/ast.snap @@ -287,44 +287,47 @@ description: Result of parsing multi_transform.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -334,7 +337,7 @@ description: Result of parsing multi_transform.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -345,8 +348,9 @@ description: Result of parsing multi_transform.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/multi_transform/input.kcl b/rust/kcl-lib/tests/multi_transform/input.kcl index f106b629a..351d57b37 100644 --- a/rust/kcl-lib/tests/multi_transform/input.kcl +++ b/rust/kcl-lib/tests/multi_transform/input.kcl @@ -5,7 +5,7 @@ fn transform(i) { ] } startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> polygon( radius = 10, numSides = 4, diff --git a/rust/kcl-lib/tests/multi_transform/unparsed.snap b/rust/kcl-lib/tests/multi_transform/unparsed.snap index 33fae0b51..acc908239 100644 --- a/rust/kcl-lib/tests/multi_transform/unparsed.snap +++ b/rust/kcl-lib/tests/multi_transform/unparsed.snap @@ -9,7 +9,7 @@ fn transform(i) { ] } startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> polygon( radius = 10, numSides = 4, diff --git a/rust/kcl-lib/tests/neg_xz_plane/ast.snap b/rust/kcl-lib/tests/neg_xz_plane/ast.snap index a5e958a03..ab49de26b 100644 --- a/rust/kcl-lib/tests/neg_xz_plane/ast.snap +++ b/rust/kcl-lib/tests/neg_xz_plane/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing neg_xz_plane.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing neg_xz_plane.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing neg_xz_plane.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/neg_xz_plane/input.kcl b/rust/kcl-lib/tests/neg_xz_plane/input.kcl index be0bf418a..1fed2ec0e 100644 --- a/rust/kcl-lib/tests/neg_xz_plane/input.kcl +++ b/rust/kcl-lib/tests/neg_xz_plane/input.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn('-XZ') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [100, 100]) |> line(endAbsolute = [100, 0]) |> close(%) diff --git a/rust/kcl-lib/tests/neg_xz_plane/unparsed.snap b/rust/kcl-lib/tests/neg_xz_plane/unparsed.snap index 32c698dba..6982d223b 100644 --- a/rust/kcl-lib/tests/neg_xz_plane/unparsed.snap +++ b/rust/kcl-lib/tests/neg_xz_plane/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing neg_xz_plane.kcl --- part001 = startSketchOn(-XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [100, 100]) |> line(endAbsolute = [100, 0]) |> close(%) diff --git a/rust/kcl-lib/tests/out_of_band_sketches/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/out_of_band_sketches/artifact_graph_flowchart.snap.md index 404852433..6c3ba724c 100644 --- a/rust/kcl-lib/tests/out_of_band_sketches/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/out_of_band_sketches/artifact_graph_flowchart.snap.md @@ -1,24 +1,24 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[45, 87, 0]"] - 3["Segment
[164, 187, 0]"] - 4["Segment
[208, 236, 0]"] - 9["Segment
[543, 567, 0]"] - 10["Segment
[588, 595, 0]"] + 2["Path
[45, 90, 0]"] + 3["Segment
[167, 190, 0]"] + 4["Segment
[211, 239, 0]"] + 9["Segment
[549, 573, 0]"] + 10["Segment
[594, 601, 0]"] 11[Solid2d] end subgraph path6 [Path] - 6["Path
[298, 339, 0]"] - 7["Segment
[416, 439, 0]"] - 8["Segment
[460, 489, 0]"] - 12["Segment
[643, 671, 0]"] - 13["Segment
[692, 699, 0]"] + 6["Path
[301, 345, 0]"] + 7["Segment
[422, 445, 0]"] + 8["Segment
[466, 495, 0]"] + 12["Segment
[649, 677, 0]"] + 13["Segment
[698, 705, 0]"] 14[Solid2d] end 1["Plane
[12, 31, 0]"] - 5["Plane
[265, 284, 0]"] - 15["Sweep Extrusion
[710, 775, 0]"] + 5["Plane
[268, 287, 0]"] + 15["Sweep Extrusion
[716, 781, 0]"] 16[Wall] 17[Wall] 18[Wall] @@ -33,7 +33,7 @@ flowchart LR 27["SweepEdge Adjacent"] 28["SweepEdge Opposite"] 29["SweepEdge Adjacent"] - 30["Sweep Extrusion
[710, 775, 0]"] + 30["Sweep Extrusion
[716, 781, 0]"] 31[Wall] 32[Wall] 33[Wall] diff --git a/rust/kcl-lib/tests/out_of_band_sketches/ast.snap b/rust/kcl-lib/tests/out_of_band_sketches/ast.snap index 9a12d38b1..f6f7a48b8 100644 --- a/rust/kcl-lib/tests/out_of_band_sketches/ast.snap +++ b/rust/kcl-lib/tests/out_of_band_sketches/ast.snap @@ -76,53 +76,47 @@ description: Result of parsing out_of_band_sketches.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "27.67", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 27.67, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "239.34", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 239.34, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "sketch001", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "27.67", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 27.67, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "239.34", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 239.34, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -132,7 +126,7 @@ description: Result of parsing out_of_band_sketches.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -143,8 +137,24 @@ description: Result of parsing out_of_band_sketches.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch001", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -421,61 +431,55 @@ description: Result of parsing out_of_band_sketches.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "67.04", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 67.04, - "suffix": "None" - } - }, - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "raw": "63.5", + "raw": "67.04", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 63.5, + "value": 67.04, "suffix": "None" } }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "63.5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 63.5, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], "end": 0, - "name": "sketch002", "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -485,7 +489,7 @@ description: Result of parsing out_of_band_sketches.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -496,8 +500,24 @@ description: Result of parsing out_of_band_sketches.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch002", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ diff --git a/rust/kcl-lib/tests/out_of_band_sketches/input.kcl b/rust/kcl-lib/tests/out_of_band_sketches/input.kcl index d2cf728f4..bd345ad68 100644 --- a/rust/kcl-lib/tests/out_of_band_sketches/input.kcl +++ b/rust/kcl-lib/tests/out_of_band_sketches/input.kcl @@ -1,11 +1,11 @@ sketch001 = startSketchOn('XZ') -profile001 = startProfileAt([27.67, 239.34], sketch001) +profile001 = startProfile(sketch001, at = [27.67, 239.34]) // enter sketch mode, start path, move path pen, disable sketch mode |> line(end = [414.61, 0]) // extend path |> line(end = [33.98, -389.36]) // extend path sketch002 = startSketchOn('XY') -profile002 = startProfileAt([67.04, -63.5], sketch002) +profile002 = startProfile(sketch002, at = [67.04, -63.5]) // enter sketch mode, start path, move path pen, disable sketch mode |> line(end = [282.37, 0]) // extend path |> line(end = [-12.77, -178.07]) // extend path diff --git a/rust/kcl-lib/tests/out_of_band_sketches/unparsed.snap b/rust/kcl-lib/tests/out_of_band_sketches/unparsed.snap index d791c0954..685b2fe0b 100644 --- a/rust/kcl-lib/tests/out_of_band_sketches/unparsed.snap +++ b/rust/kcl-lib/tests/out_of_band_sketches/unparsed.snap @@ -3,13 +3,13 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing out_of_band_sketches.kcl --- sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([27.67, 239.34], sketch001) +profile001 = startProfile(sketch001, at = [27.67, 239.34]) // enter sketch mode, start path, move path pen, disable sketch mode |> line(end = [414.61, 0]) // extend path |> line(end = [33.98, -389.36]) // extend path sketch002 = startSketchOn(XY) -profile002 = startProfileAt([67.04, -63.5], sketch002) +profile002 = startProfile(sketch002, at = [67.04, -63.5]) // enter sketch mode, start path, move path pen, disable sketch mode |> line(end = [282.37, 0]) // extend path |> line(end = [-12.77, -178.07]) // extend path diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_start_profile0.png b/rust/kcl-lib/tests/outputs/serial_test_example_start_profile0.png new file mode 100644 index 000000000..a7cbc75e1 Binary files /dev/null and b/rust/kcl-lib/tests/outputs/serial_test_example_start_profile0.png differ diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_start_profile1.png b/rust/kcl-lib/tests/outputs/serial_test_example_start_profile1.png new file mode 100644 index 000000000..d6e57761f Binary files /dev/null and b/rust/kcl-lib/tests/outputs/serial_test_example_start_profile1.png differ diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_start_profile2.png b/rust/kcl-lib/tests/outputs/serial_test_example_start_profile2.png new file mode 100644 index 000000000..6362e805d Binary files /dev/null and b/rust/kcl-lib/tests/outputs/serial_test_example_start_profile2.png differ diff --git a/rust/kcl-lib/tests/parametric/ast.snap b/rust/kcl-lib/tests/parametric/ast.snap index 2cda057c8..85c52e6f4 100644 --- a/rust/kcl-lib/tests/parametric/ast.snap +++ b/rust/kcl-lib/tests/parametric/ast.snap @@ -463,44 +463,47 @@ description: Result of parsing parametric.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -510,7 +513,7 @@ description: Result of parsing parametric.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -521,8 +524,9 @@ description: Result of parsing parametric.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/parametric/input.kcl b/rust/kcl-lib/tests/parametric/input.kcl index fffa557ae..9f8f141af 100644 --- a/rust/kcl-lib/tests/parametric/input.kcl +++ b/rust/kcl-lib/tests/parametric/input.kcl @@ -8,7 +8,7 @@ leg1 = 5 // inches leg2 = 8 // inches thickness = sqrt(distance * p * FOS * 6 / sigmaAllow / width) // inches bracket = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, leg1]) |> line(end = [leg2, 0]) |> line(end = [0, -thickness]) diff --git a/rust/kcl-lib/tests/parametric/unparsed.snap b/rust/kcl-lib/tests/parametric/unparsed.snap index e31e84fe4..4aa27f63f 100644 --- a/rust/kcl-lib/tests/parametric/unparsed.snap +++ b/rust/kcl-lib/tests/parametric/unparsed.snap @@ -12,7 +12,7 @@ leg1 = 5 // inches leg2 = 8 // inches thickness = sqrt(distance * p * FOS * 6 / sigmaAllow / width) // inches bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, leg1]) |> line(end = [leg2, 0]) |> line(end = [0, -thickness]) diff --git a/rust/kcl-lib/tests/parametric_with_tan_arc/ast.snap b/rust/kcl-lib/tests/parametric_with_tan_arc/ast.snap index 8cf62c5cd..44b091190 100644 --- a/rust/kcl-lib/tests/parametric_with_tan_arc/ast.snap +++ b/rust/kcl-lib/tests/parametric_with_tan_arc/ast.snap @@ -527,44 +527,47 @@ description: Result of parsing parametric_with_tan_arc.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -574,7 +577,7 @@ description: Result of parsing parametric_with_tan_arc.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -585,8 +588,9 @@ description: Result of parsing parametric_with_tan_arc.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/parametric_with_tan_arc/input.kcl b/rust/kcl-lib/tests/parametric_with_tan_arc/input.kcl index 73c238f1a..76226836c 100644 --- a/rust/kcl-lib/tests/parametric_with_tan_arc/input.kcl +++ b/rust/kcl-lib/tests/parametric_with_tan_arc/input.kcl @@ -9,7 +9,7 @@ shelfMountL = 9 wallMountL = 8 bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, wallMountL]) |> tangentialArc(radius = filletR, angle = 90) |> line(end = [-shelfMountL, 0]) diff --git a/rust/kcl-lib/tests/parametric_with_tan_arc/unparsed.snap b/rust/kcl-lib/tests/parametric_with_tan_arc/unparsed.snap index 0377fd103..61aad4046 100644 --- a/rust/kcl-lib/tests/parametric_with_tan_arc/unparsed.snap +++ b/rust/kcl-lib/tests/parametric_with_tan_arc/unparsed.snap @@ -13,7 +13,7 @@ shelfMountL = 9 wallMountL = 8 bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, wallMountL]) |> tangentialArc(radius = filletR, angle = 90) |> line(end = [-shelfMountL, 0]) diff --git a/rust/kcl-lib/tests/pattern_circular_in_module/thing.kcl b/rust/kcl-lib/tests/pattern_circular_in_module/thing.kcl index 38710c21c..102d9b2e4 100644 --- a/rust/kcl-lib/tests/pattern_circular_in_module/thing.kcl +++ b/rust/kcl-lib/tests/pattern_circular_in_module/thing.kcl @@ -1,6 +1,6 @@ export fn thing() { exampleSketch = startSketchOn(XZ) - |> startProfileAt([.5, 25], %) + |> startProfile(at = [.5, 25]) |> line(end = [0, 5]) |> line(end = [-1, 0]) |> line(end = [0, -5]) diff --git a/rust/kcl-lib/tests/pattern_circular_in_module/unparsed@thing.kcl.snap b/rust/kcl-lib/tests/pattern_circular_in_module/unparsed@thing.kcl.snap index 58b9ca134..07aabbd2c 100644 --- a/rust/kcl-lib/tests/pattern_circular_in_module/unparsed@thing.kcl.snap +++ b/rust/kcl-lib/tests/pattern_circular_in_module/unparsed@thing.kcl.snap @@ -4,7 +4,7 @@ description: Result of unparsing tests/pattern_circular_in_module/thing.kcl --- export fn thing() { exampleSketch = startSketchOn(XZ) - |> startProfileAt([.5, 25], %) + |> startProfile(at = [.5, 25]) |> line(end = [0, 5]) |> line(end = [-1, 0]) |> line(end = [0, -5]) diff --git a/rust/kcl-lib/tests/pattern_into_union/ast.snap b/rust/kcl-lib/tests/pattern_into_union/ast.snap index 88c229340..0c6839faf 100644 --- a/rust/kcl-lib/tests/pattern_into_union/ast.snap +++ b/rust/kcl-lib/tests/pattern_into_union/ast.snap @@ -670,44 +670,47 @@ description: Result of parsing pattern_into_union.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -717,7 +720,7 @@ description: Result of parsing pattern_into_union.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -728,8 +731,9 @@ description: Result of parsing pattern_into_union.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1331,52 +1335,55 @@ description: Result of parsing pattern_into_union.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "endWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "endWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "baseHeight", + "name": { + "commentStart": 0, + "end": 0, + "name": "baseHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1386,7 +1393,7 @@ description: Result of parsing pattern_into_union.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1397,8 +1404,9 @@ description: Result of parsing pattern_into_union.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2122,19 +2130,65 @@ description: Result of parsing pattern_into_union.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "width", + "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": "endWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "width", + "name": "baseHeight", "start": 0, "type": "Identifier" }, @@ -2142,56 +2196,13 @@ description: Result of parsing pattern_into_union.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "endWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "baseHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -2201,7 +2212,7 @@ description: Result of parsing pattern_into_union.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -2212,8 +2223,9 @@ description: Result of parsing pattern_into_union.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/pattern_into_union/input.kcl b/rust/kcl-lib/tests/pattern_into_union/input.kcl index 7d0ecab72..34518c025 100644 --- a/rust/kcl-lib/tests/pattern_into_union/input.kcl +++ b/rust/kcl-lib/tests/pattern_into_union/input.kcl @@ -12,7 +12,7 @@ depth = nPlates * (buildPlateThickness + thicknessTolerance) + (nPlates + 1) * e baseHeight = 0.25 base = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(endAbsolute = width, tag = $seg01) |> yLine(endAbsolute = baseHeight + endTabHeight) |> xLine(length = -endWidth) @@ -24,7 +24,7 @@ base = startSketchOn(XZ) |> extrude(length = -depth) endTabs = startSketchOn(XZ) - |> startProfileAt([endWidth, baseHeight], %) + |> startProfile(at = [endWidth, baseHeight]) |> xLine(endAbsolute = endWidth + endTabWidth) |> angledLine( angle = 135, @@ -44,7 +44,7 @@ endTabs = startSketchOn(XZ) ) endTabs2 = startSketchOn(XZ) - |> startProfileAt([width - endWidth, baseHeight], %) + |> startProfile(at = [width - endWidth, baseHeight]) |> xLine(endAbsolute = width - endTabWidth) |> angledLine( angle = 45, diff --git a/rust/kcl-lib/tests/pattern_into_union/unparsed.snap b/rust/kcl-lib/tests/pattern_into_union/unparsed.snap index 3efba27d5..6befc3dd2 100644 --- a/rust/kcl-lib/tests/pattern_into_union/unparsed.snap +++ b/rust/kcl-lib/tests/pattern_into_union/unparsed.snap @@ -16,7 +16,7 @@ depth = nPlates * (buildPlateThickness + thicknessTolerance) + (nPlates + 1) * e baseHeight = 0.25 base = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(endAbsolute = width, tag = $seg01) |> yLine(endAbsolute = baseHeight + endTabHeight) |> xLine(length = -endWidth) @@ -28,7 +28,7 @@ base = startSketchOn(XZ) |> extrude(length = -depth) endTabs = startSketchOn(XZ) - |> startProfileAt([endWidth, baseHeight], %) + |> startProfile(at = [endWidth, baseHeight]) |> xLine(endAbsolute = endWidth + endTabWidth) |> angledLine(angle = 135, endAbsoluteY = baseHeight + endTabHeight, tag = $toFillet) |> xLine(endAbsolute = endWidth) @@ -38,7 +38,7 @@ endTabs = startSketchOn(XZ) |> patternLinear3d(axis = [0, 1, 0], distance = buildPlateThickness + thicknessTolerance + endTabThickness, instances = nPlates + 1) endTabs2 = startSketchOn(XZ) - |> startProfileAt([width - endWidth, baseHeight], %) + |> startProfile(at = [width - endWidth, baseHeight]) |> xLine(endAbsolute = width - endTabWidth) |> angledLine(angle = 45, endAbsoluteY = baseHeight + endTabHeight, tag = $toFillet2) |> xLine(endAbsolute = width - endWidth) diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/ast.snap b/rust/kcl-lib/tests/pentagon_fillet_sugar/ast.snap index 311ffb8e5..b865ec7ed 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/ast.snap +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/ast.snap @@ -194,44 +194,47 @@ description: Result of parsing pentagon_fillet_sugar.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -241,7 +244,7 @@ description: Result of parsing pentagon_fillet_sugar.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -252,8 +255,9 @@ description: Result of parsing pentagon_fillet_sugar.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -682,96 +686,99 @@ description: Result of parsing pentagon_fillet_sugar.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "x", + "name": { + "commentStart": 0, + "end": 0, + "name": "x", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "operator": "+", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "radius", + "name": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "triangleHeight", + "name": { + "commentStart": 0, + "end": 0, + "name": "triangleHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -781,7 +788,7 @@ description: Result of parsing pentagon_fillet_sugar.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -792,8 +799,9 @@ description: Result of parsing pentagon_fillet_sugar.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/input.kcl b/rust/kcl-lib/tests/pentagon_fillet_sugar/input.kcl index 4d2f262d5..720347125 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/input.kcl +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/input.kcl @@ -4,7 +4,7 @@ radius = 80 triangleLen = 500 p = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 60, length = triangleLen, tag = $a) |> angledLine(angle = 180, length = triangleLen, tag = $b) |> angledLine(angle = 300, length = triangleLen, tag = $c) @@ -12,7 +12,7 @@ p = startSketchOn(XY) fn circl(x, face) { return startSketchOn(p, face = face) - |> startProfileAt([x + radius, triangleHeight / 2], %) + |> startProfile(at = [x + radius, triangleHeight / 2]) |> arc( angleStart = 0, angleEnd = 360, diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/unparsed.snap b/rust/kcl-lib/tests/pentagon_fillet_sugar/unparsed.snap index 32ef16098..ad50e8395 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/unparsed.snap +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/unparsed.snap @@ -8,7 +8,7 @@ radius = 80 triangleLen = 500 p = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> angledLine(angle = 60, length = triangleLen, tag = $a) |> angledLine(angle = 180, length = triangleLen, tag = $b) |> angledLine(angle = 300, length = triangleLen, tag = $c) @@ -16,7 +16,7 @@ p = startSketchOn(XY) fn circl(x, face) { return startSketchOn(p, face = face) - |> startProfileAt([x + radius, triangleHeight / 2], %) + |> startProfile(at = [x + radius, triangleHeight / 2]) |> arc( angleStart = 0, angleEnd = 360, diff --git a/rust/kcl-lib/tests/pipe_as_arg/ast.snap b/rust/kcl-lib/tests/pipe_as_arg/ast.snap index 3fd097b8d..06d8a6239 100644 --- a/rust/kcl-lib/tests/pipe_as_arg/ast.snap +++ b/rust/kcl-lib/tests/pipe_as_arg/ast.snap @@ -693,27 +693,30 @@ description: Result of parsing pipe_as_arg.kcl { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "p0", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "p0", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -723,7 +726,7 @@ description: Result of parsing pipe_as_arg.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -734,8 +737,9 @@ description: Result of parsing pipe_as_arg.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/pipe_as_arg/input.kcl b/rust/kcl-lib/tests/pipe_as_arg/input.kcl index 835227df8..5cbd93152 100644 --- a/rust/kcl-lib/tests/pipe_as_arg/input.kcl +++ b/rust/kcl-lib/tests/pipe_as_arg/input.kcl @@ -8,7 +8,7 @@ fn cube(length, center) { p3 = [l + x, -l + y] return startSketchOn(XY) - |> startProfileAt(p0, %) + |> startProfile(at = p0) |> line(endAbsolute = p1) |> line(endAbsolute = p2) |> line(endAbsolute = p3) diff --git a/rust/kcl-lib/tests/pipe_as_arg/unparsed.snap b/rust/kcl-lib/tests/pipe_as_arg/unparsed.snap index a52a44789..750543f10 100644 --- a/rust/kcl-lib/tests/pipe_as_arg/unparsed.snap +++ b/rust/kcl-lib/tests/pipe_as_arg/unparsed.snap @@ -12,7 +12,7 @@ fn cube(length, center) { p3 = [l + x, -l + y] return startSketchOn(XY) - |> startProfileAt(p0, %) + |> startProfile(at = p0) |> line(endAbsolute = p1) |> line(endAbsolute = p2) |> line(endAbsolute = p3) diff --git a/rust/kcl-lib/tests/poop_chute/ast.snap b/rust/kcl-lib/tests/poop_chute/ast.snap index e476696ad..1f256dbad 100644 --- a/rust/kcl-lib/tests/poop_chute/ast.snap +++ b/rust/kcl-lib/tests/poop_chute/ast.snap @@ -400,68 +400,71 @@ description: Result of parsing poop_chute.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "back_walls_width", + "name": { + "commentStart": 0, + "end": 0, + "name": "back_walls_width", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "raw": "0", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 0.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -471,7 +474,7 @@ description: Result of parsing poop_chute.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -482,8 +485,9 @@ description: Result of parsing poop_chute.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1713,68 +1717,71 @@ description: Result of parsing poop_chute.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "back_walls_width", + "name": { + "commentStart": 0, + "end": 0, + "name": "back_walls_width", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "raw": "0", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 2.0, + "value": 0.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1784,7 +1791,7 @@ description: Result of parsing poop_chute.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1795,8 +1802,9 @@ description: Result of parsing poop_chute.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/poop_chute/input.kcl b/rust/kcl-lib/tests/poop_chute/input.kcl index 5a5e13b1d..edd6665cb 100644 --- a/rust/kcl-lib/tests/poop_chute/input.kcl +++ b/rust/kcl-lib/tests/poop_chute/input.kcl @@ -10,7 +10,7 @@ Fx = 0.5 Fy = 0.5 sketch001 = startSketchOn(-YZ) - |> startProfileAt([back_walls_width / 2, 0], %) + |> startProfile(at = [back_walls_width / 2, 0]) |> xLine(length = wall_thickness / 2) |> angledLine(angle = 45, endAbsoluteX = back_walls_width, tag = $seg01) |> yLine(endAbsolute = height) @@ -34,7 +34,7 @@ part001 = revolve( ) sketch002 = startSketchOn(-YZ) - |> startProfileAt([back_walls_width / 2, 0], %) + |> startProfile(at = [back_walls_width / 2, 0]) |> xLine(length = wall_thickness / 2) |> angledLine(angle = 45, endAbsoluteX = back_walls_width, tag = $seg02) |> yLine(endAbsolute = height) diff --git a/rust/kcl-lib/tests/poop_chute/unparsed.snap b/rust/kcl-lib/tests/poop_chute/unparsed.snap index e0b2d1c8a..495b9d04d 100644 --- a/rust/kcl-lib/tests/poop_chute/unparsed.snap +++ b/rust/kcl-lib/tests/poop_chute/unparsed.snap @@ -14,7 +14,7 @@ Fx = 0.5 Fy = 0.5 sketch001 = startSketchOn(-YZ) - |> startProfileAt([back_walls_width / 2, 0], %) + |> startProfile(at = [back_walls_width / 2, 0]) |> xLine(length = wall_thickness / 2) |> angledLine(angle = 45, endAbsoluteX = back_walls_width, tag = $seg01) |> yLine(endAbsolute = height) @@ -38,7 +38,7 @@ part001 = revolve( ) sketch002 = startSketchOn(-YZ) - |> startProfileAt([back_walls_width / 2, 0], %) + |> startProfile(at = [back_walls_width / 2, 0]) |> xLine(length = wall_thickness / 2) |> angledLine(angle = 45, endAbsoluteX = back_walls_width, tag = $seg02) |> yLine(endAbsolute = height) diff --git a/rust/kcl-lib/tests/revolve_about_edge/ast.snap b/rust/kcl-lib/tests/revolve_about_edge/ast.snap index ccec32795..83469e44e 100644 --- a/rust/kcl-lib/tests/revolve_about_edge/ast.snap +++ b/rust/kcl-lib/tests/revolve_about_edge/ast.snap @@ -55,10 +55,38 @@ description: Result of parsing revolve_about_edge.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "25", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 25.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { "commentStart": 0, "end": 0, "raw": "25", @@ -69,38 +97,13 @@ description: Result of parsing revolve_about_edge.kcl "value": 25.0, "suffix": "None" } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "25", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 25.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -110,7 +113,7 @@ description: Result of parsing revolve_about_edge.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -121,8 +124,9 @@ description: Result of parsing revolve_about_edge.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/revolve_about_edge/input.kcl b/rust/kcl-lib/tests/revolve_about_edge/input.kcl index 0829bc872..061b0e1f2 100644 --- a/rust/kcl-lib/tests/revolve_about_edge/input.kcl +++ b/rust/kcl-lib/tests/revolve_about_edge/input.kcl @@ -1,5 +1,5 @@ sketch001 = startSketchOn('XY') - |> startProfileAt([-25, 25], %) + |> startProfile(at = [-25, 25]) |> yLine(length = -50, tag = $rectangleSegmentB001) sketch002 = startSketchOn('XY') |> circle(center = [-50, 0], radius = 10) diff --git a/rust/kcl-lib/tests/revolve_about_edge/unparsed.snap b/rust/kcl-lib/tests/revolve_about_edge/unparsed.snap index f369a36b6..ef51224dc 100644 --- a/rust/kcl-lib/tests/revolve_about_edge/unparsed.snap +++ b/rust/kcl-lib/tests/revolve_about_edge/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing revolve_about_edge.kcl --- sketch001 = startSketchOn(XY) - |> startProfileAt([-25, 25], %) + |> startProfile(at = [-25, 25]) |> yLine(length = -50, tag = $rectangleSegmentB001) sketch002 = startSketchOn(XY) |> circle(center = [-50, 0], radius = 10) diff --git a/rust/kcl-lib/tests/riddle_small/ast.snap b/rust/kcl-lib/tests/riddle_small/ast.snap index fb93376d9..df7eb030f 100644 --- a/rust/kcl-lib/tests/riddle_small/ast.snap +++ b/rust/kcl-lib/tests/riddle_small/ast.snap @@ -490,52 +490,55 @@ description: Result of parsing riddle_small.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "ox", + "name": { + "commentStart": 0, + "end": 0, + "name": "ox", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "oy", + "name": { + "commentStart": 0, + "end": 0, + "name": "oy", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -545,7 +548,7 @@ description: Result of parsing riddle_small.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -556,8 +559,9 @@ description: Result of parsing riddle_small.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/riddle_small/input.kcl b/rust/kcl-lib/tests/riddle_small/input.kcl index 07267dc1a..0aeb5455a 100644 --- a/rust/kcl-lib/tests/riddle_small/input.kcl +++ b/rust/kcl-lib/tests/riddle_small/input.kcl @@ -9,7 +9,7 @@ ys = 71816 ox = 35 - (t(xs) % 70) oy = 35 - (t(ys) % 70) r = startSketchOn('XZ') - |> startProfileAt([ox, oy], %) + |> startProfile(at = [ox, oy]) |> line(end = [1, 0]) |> line(end = [0, -1]) |> line(end = [-1, 0]) diff --git a/rust/kcl-lib/tests/riddle_small/unparsed.snap b/rust/kcl-lib/tests/riddle_small/unparsed.snap index 1b71ac92c..961ad1c39 100644 --- a/rust/kcl-lib/tests/riddle_small/unparsed.snap +++ b/rust/kcl-lib/tests/riddle_small/unparsed.snap @@ -13,7 +13,7 @@ ys = 71816 ox = 35 - (t(xs) % 70) oy = 35 - (t(ys) % 70) r = startSketchOn(XZ) - |> startProfileAt([ox, oy], %) + |> startProfile(at = [ox, oy]) |> line(end = [1, 0]) |> line(end = [0, -1]) |> line(end = [-1, 0]) diff --git a/rust/kcl-lib/tests/rotate_after_fillet/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/rotate_after_fillet/artifact_graph_flowchart.snap.md index e4b679728..0b50a3946 100644 --- a/rust/kcl-lib/tests/rotate_after_fillet/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/rotate_after_fillet/artifact_graph_flowchart.snap.md @@ -6,18 +6,18 @@ flowchart LR 4[Solid2d] end subgraph path13 [Path] - 13["Path
[660, 747, 0]"] - 14["Segment
[755, 834, 0]"] - 15["Segment
[842, 921, 0]"] - 16["Segment
[929, 1008, 0]"] - 17["Segment
[1016, 1094, 0]"] - 18["Segment
[1102, 1180, 0]"] - 19["Segment
[1188, 1195, 0]"] + 13["Path
[660, 720, 0]"] + 14["Segment
[728, 807, 0]"] + 15["Segment
[815, 894, 0]"] + 16["Segment
[902, 981, 0]"] + 17["Segment
[989, 1067, 0]"] + 18["Segment
[1075, 1153, 0]"] + 19["Segment
[1161, 1168, 0]"] 20[Solid2d] end subgraph path41 [Path] - 41["Path
[1303, 1372, 0]"] - 42["Segment
[1303, 1372, 0]"] + 41["Path
[1276, 1345, 0]"] + 42["Segment
[1276, 1345, 0]"] 43[Solid2d] end 1["Plane
[320, 337, 0]"] @@ -29,7 +29,7 @@ flowchart LR 10["SweepEdge Adjacent"] 11["EdgeCut Fillet
[464, 530, 0]"] 12["EdgeCut Fillet
[464, 530, 0]"] - 21["Sweep Extrusion
[1203, 1243, 0]"] + 21["Sweep Extrusion
[1176, 1216, 0]"] 22[Wall] 23[Wall] 24[Wall] @@ -49,14 +49,14 @@ flowchart LR 38["SweepEdge Adjacent"] 39["SweepEdge Opposite"] 40["SweepEdge Adjacent"] - 44["Sweep Extrusion
[1380, 1408, 0]"] + 44["Sweep Extrusion
[1353, 1381, 0]"] 45[Wall] 46["Cap End"] 47["SweepEdge Opposite"] 48["SweepEdge Adjacent"] - 49["EdgeCut Fillet
[1416, 1475, 0]"] + 49["EdgeCut Fillet
[1389, 1448, 0]"] 50["StartSketchOnFace
[613, 652, 0]"] - 51["StartSketchOnFace
[1258, 1295, 0]"] + 51["StartSketchOnFace
[1231, 1268, 0]"] 1 --- 2 2 --- 3 2 ---- 5 diff --git a/rust/kcl-lib/tests/rotate_after_fillet/ast.snap b/rust/kcl-lib/tests/rotate_after_fillet/ast.snap index 359cb9cd2..9faa7248a 100644 --- a/rust/kcl-lib/tests/rotate_after_fillet/ast.snap +++ b/rust/kcl-lib/tests/rotate_after_fillet/ast.snap @@ -854,92 +854,95 @@ description: Result of parsing rotate_after_fillet.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "boltHexDrive", + "name": { + "commentStart": 0, + "end": 0, + "name": "boltHexDrive", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "boltHexFlatLength", + "raw": "2", "start": 0, - "type": "Identifier" + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "boltHexFlatLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -949,7 +952,7 @@ description: Result of parsing rotate_after_fillet.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -960,8 +963,9 @@ description: Result of parsing rotate_after_fillet.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/rotate_after_fillet/input.kcl b/rust/kcl-lib/tests/rotate_after_fillet/input.kcl index a9e3e3a76..6c48fad76 100644 --- a/rust/kcl-lib/tests/rotate_after_fillet/input.kcl +++ b/rust/kcl-lib/tests/rotate_after_fillet/input.kcl @@ -15,10 +15,7 @@ export fn bolt() { // Define the sketch of the hex pattern on the screw head hexPatternSketch = startSketchOn(boltHead, face = 'start') - |> startProfileAt([ - boltHexDrive / 2, - boltHexFlatLength / 2 - ], %) + |> startProfile(at = [boltHexDrive / 2, boltHexFlatLength / 2]) |> angledLine( angle = 270, length = boltHexFlatLength, diff --git a/rust/kcl-lib/tests/rotate_after_fillet/ops.snap b/rust/kcl-lib/tests/rotate_after_fillet/ops.snap index 2e45b824f..222eee005 100644 --- a/rust/kcl-lib/tests/rotate_after_fillet/ops.snap +++ b/rust/kcl-lib/tests/rotate_after_fillet/ops.snap @@ -9,8 +9,8 @@ description: Operations executed rotate_after_fillet.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -46,7 +46,7 @@ description: Operations executed rotate_after_fillet.kcl "name": "bolt", "functionSourceRange": [ 264, - 1565, + 1538, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/rotate_after_fillet/unparsed.snap b/rust/kcl-lib/tests/rotate_after_fillet/unparsed.snap index ca53ee9ef..0cc493c0d 100644 --- a/rust/kcl-lib/tests/rotate_after_fillet/unparsed.snap +++ b/rust/kcl-lib/tests/rotate_after_fillet/unparsed.snap @@ -19,10 +19,10 @@ export fn bolt() { // Define the sketch of the hex pattern on the screw head hexPatternSketch = startSketchOn(boltHead, face = START) - |> startProfileAt([ + |> startProfile(at = [ boltHexDrive / 2, boltHexFlatLength / 2 - ], %) + ]) |> angledLine(angle = 270, length = boltHexFlatLength) |> angledLine(angle = 210, length = boltHexFlatLength) |> angledLine(angle = 150, length = boltHexFlatLength) diff --git a/rust/kcl-lib/tests/scale_after_fillet/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/scale_after_fillet/artifact_graph_flowchart.snap.md index e4b679728..0b50a3946 100644 --- a/rust/kcl-lib/tests/scale_after_fillet/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/scale_after_fillet/artifact_graph_flowchart.snap.md @@ -6,18 +6,18 @@ flowchart LR 4[Solid2d] end subgraph path13 [Path] - 13["Path
[660, 747, 0]"] - 14["Segment
[755, 834, 0]"] - 15["Segment
[842, 921, 0]"] - 16["Segment
[929, 1008, 0]"] - 17["Segment
[1016, 1094, 0]"] - 18["Segment
[1102, 1180, 0]"] - 19["Segment
[1188, 1195, 0]"] + 13["Path
[660, 720, 0]"] + 14["Segment
[728, 807, 0]"] + 15["Segment
[815, 894, 0]"] + 16["Segment
[902, 981, 0]"] + 17["Segment
[989, 1067, 0]"] + 18["Segment
[1075, 1153, 0]"] + 19["Segment
[1161, 1168, 0]"] 20[Solid2d] end subgraph path41 [Path] - 41["Path
[1303, 1372, 0]"] - 42["Segment
[1303, 1372, 0]"] + 41["Path
[1276, 1345, 0]"] + 42["Segment
[1276, 1345, 0]"] 43[Solid2d] end 1["Plane
[320, 337, 0]"] @@ -29,7 +29,7 @@ flowchart LR 10["SweepEdge Adjacent"] 11["EdgeCut Fillet
[464, 530, 0]"] 12["EdgeCut Fillet
[464, 530, 0]"] - 21["Sweep Extrusion
[1203, 1243, 0]"] + 21["Sweep Extrusion
[1176, 1216, 0]"] 22[Wall] 23[Wall] 24[Wall] @@ -49,14 +49,14 @@ flowchart LR 38["SweepEdge Adjacent"] 39["SweepEdge Opposite"] 40["SweepEdge Adjacent"] - 44["Sweep Extrusion
[1380, 1408, 0]"] + 44["Sweep Extrusion
[1353, 1381, 0]"] 45[Wall] 46["Cap End"] 47["SweepEdge Opposite"] 48["SweepEdge Adjacent"] - 49["EdgeCut Fillet
[1416, 1475, 0]"] + 49["EdgeCut Fillet
[1389, 1448, 0]"] 50["StartSketchOnFace
[613, 652, 0]"] - 51["StartSketchOnFace
[1258, 1295, 0]"] + 51["StartSketchOnFace
[1231, 1268, 0]"] 1 --- 2 2 --- 3 2 ---- 5 diff --git a/rust/kcl-lib/tests/scale_after_fillet/ast.snap b/rust/kcl-lib/tests/scale_after_fillet/ast.snap index aeb7091fa..d2dc3773e 100644 --- a/rust/kcl-lib/tests/scale_after_fillet/ast.snap +++ b/rust/kcl-lib/tests/scale_after_fillet/ast.snap @@ -854,92 +854,95 @@ description: Result of parsing scale_after_fillet.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "boltHexDrive", + "name": { + "commentStart": 0, + "end": 0, + "name": "boltHexDrive", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "boltHexFlatLength", + "raw": "2", "start": 0, - "type": "Identifier" + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "boltHexFlatLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -949,7 +952,7 @@ description: Result of parsing scale_after_fillet.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -960,8 +963,9 @@ description: Result of parsing scale_after_fillet.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/scale_after_fillet/input.kcl b/rust/kcl-lib/tests/scale_after_fillet/input.kcl index ba0ab767a..b8709ba36 100644 --- a/rust/kcl-lib/tests/scale_after_fillet/input.kcl +++ b/rust/kcl-lib/tests/scale_after_fillet/input.kcl @@ -15,10 +15,7 @@ export fn bolt() { // Define the sketch of the hex pattern on the screw head hexPatternSketch = startSketchOn(boltHead, face = 'start') - |> startProfileAt([ - boltHexDrive / 2, - boltHexFlatLength / 2 - ], %) + |> startProfile(at = [boltHexDrive / 2, boltHexFlatLength / 2]) |> angledLine( angle = 270, length = boltHexFlatLength, diff --git a/rust/kcl-lib/tests/scale_after_fillet/ops.snap b/rust/kcl-lib/tests/scale_after_fillet/ops.snap index 10481ad85..6e9a031a7 100644 --- a/rust/kcl-lib/tests/scale_after_fillet/ops.snap +++ b/rust/kcl-lib/tests/scale_after_fillet/ops.snap @@ -9,8 +9,8 @@ description: Operations executed scale_after_fillet.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -46,7 +46,7 @@ description: Operations executed scale_after_fillet.kcl "name": "bolt", "functionSourceRange": [ 264, - 1565, + 1538, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/scale_after_fillet/unparsed.snap b/rust/kcl-lib/tests/scale_after_fillet/unparsed.snap index e8ec73b38..de745bbc9 100644 --- a/rust/kcl-lib/tests/scale_after_fillet/unparsed.snap +++ b/rust/kcl-lib/tests/scale_after_fillet/unparsed.snap @@ -19,10 +19,10 @@ export fn bolt() { // Define the sketch of the hex pattern on the screw head hexPatternSketch = startSketchOn(boltHead, face = START) - |> startProfileAt([ + |> startProfile(at = [ boltHexDrive / 2, boltHexFlatLength / 2 - ], %) + ]) |> angledLine(angle = 270, length = boltHexFlatLength) |> angledLine(angle = 210, length = boltHexFlatLength) |> angledLine(angle = 150, length = boltHexFlatLength) diff --git a/rust/kcl-lib/tests/sketch-on-chamfer-two-times-different-order/ast.snap b/rust/kcl-lib/tests/sketch-on-chamfer-two-times-different-order/ast.snap index a9d4c56bd..a0091696e 100644 --- a/rust/kcl-lib/tests/sketch-on-chamfer-two-times-different-order/ast.snap +++ b/rust/kcl-lib/tests/sketch-on-chamfer-two-times-different-order/ast.snap @@ -62,44 +62,47 @@ description: Result of parsing sketch-on-chamfer-two-times-different-order.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "75.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 75.8, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "75.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 75.8, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "317.2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 317.2, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "317.2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 317.2, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -109,7 +112,7 @@ description: Result of parsing sketch-on-chamfer-two-times-different-order.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -120,8 +123,9 @@ description: Result of parsing sketch-on-chamfer-two-times-different-order.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1140,52 +1144,55 @@ description: Result of parsing sketch-on-chamfer-two-times-different-order.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "69.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 69.1, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "69.1", + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "raw": "277.34", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 69.1, + "value": 277.34, "suffix": "None" } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "277.34", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 277.34, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1195,7 +1202,7 @@ description: Result of parsing sketch-on-chamfer-two-times-different-order.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1206,8 +1213,9 @@ description: Result of parsing sketch-on-chamfer-two-times-different-order.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1810,44 +1818,47 @@ description: Result of parsing sketch-on-chamfer-two-times-different-order.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "159.25", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 159.25, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "159.25", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 159.25, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "278.35", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 278.35, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "278.35", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 278.35, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1857,7 +1868,7 @@ description: Result of parsing sketch-on-chamfer-two-times-different-order.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1868,8 +1879,9 @@ description: Result of parsing sketch-on-chamfer-two-times-different-order.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch-on-chamfer-two-times-different-order/input.kcl b/rust/kcl-lib/tests/sketch-on-chamfer-two-times-different-order/input.kcl index e0f64e0f9..1543dcce7 100644 --- a/rust/kcl-lib/tests/sketch-on-chamfer-two-times-different-order/input.kcl +++ b/rust/kcl-lib/tests/sketch-on-chamfer-two-times-different-order/input.kcl @@ -1,5 +1,5 @@ sketch001 = startSketchOn(XZ) - |> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag] + |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -11,14 +11,14 @@ extrude001 = extrude(sketch001, length = 100) |> chamfer(length = 50, tags = [seg02], tag = $seg04) sketch003 = startSketchOn(extrude001, face = seg04) - |> startProfileAt([-69.1, 277.34], %) + |> startProfile(at = [-69.1, 277.34]) |> angledLine(angle = 0, length = 41.48, tag = $rectangleSegmentA003) |> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = 104.8, tag = $rectangleSegmentB002) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003), tag = $rectangleSegmentC002) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch002 = startSketchOn(extrude001, face = seg03) - |> startProfileAt([159.25, 278.35], %) + |> startProfile(at = [159.25, 278.35]) |> angledLine(angle = 0, length = 40.82, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 132.27, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002), tag = $rectangleSegmentC001) diff --git a/rust/kcl-lib/tests/sketch-on-chamfer-two-times-different-order/unparsed.snap b/rust/kcl-lib/tests/sketch-on-chamfer-two-times-different-order/unparsed.snap index c60ce4618..bfc575823 100644 --- a/rust/kcl-lib/tests/sketch-on-chamfer-two-times-different-order/unparsed.snap +++ b/rust/kcl-lib/tests/sketch-on-chamfer-two-times-different-order/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing sketch-on-chamfer-two-times-different-order.kcl --- sketch001 = startSketchOn(XZ) - |> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag] + |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -15,14 +15,14 @@ extrude001 = extrude(sketch001, length = 100) |> chamfer(length = 50, tags = [seg02], tag = $seg04) sketch003 = startSketchOn(extrude001, face = seg04) - |> startProfileAt([-69.1, 277.34], %) + |> startProfile(at = [-69.1, 277.34]) |> angledLine(angle = 0, length = 41.48, tag = $rectangleSegmentA003) |> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = 104.8, tag = $rectangleSegmentB002) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003), tag = $rectangleSegmentC002) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch002 = startSketchOn(extrude001, face = seg03) - |> startProfileAt([159.25, 278.35], %) + |> startProfile(at = [159.25, 278.35]) |> angledLine(angle = 0, length = 40.82, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 132.27, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002), tag = $rectangleSegmentC001) diff --git a/rust/kcl-lib/tests/sketch-on-chamfer-two-times/ast.snap b/rust/kcl-lib/tests/sketch-on-chamfer-two-times/ast.snap index 900918343..0ea4e5a13 100644 --- a/rust/kcl-lib/tests/sketch-on-chamfer-two-times/ast.snap +++ b/rust/kcl-lib/tests/sketch-on-chamfer-two-times/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing sketch-on-chamfer-two-times.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "75.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 75.8, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "75.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 75.8, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "317.2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 317.2, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "317.2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 317.2, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing sketch-on-chamfer-two-times.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing sketch-on-chamfer-two-times.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1141,52 +1145,55 @@ description: Result of parsing sketch-on-chamfer-two-times.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "69.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 69.1, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "69.1", + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "raw": "277.34", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 69.1, + "value": 277.34, "suffix": "None" } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "277.34", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 277.34, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1196,7 +1203,7 @@ description: Result of parsing sketch-on-chamfer-two-times.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1207,8 +1214,9 @@ description: Result of parsing sketch-on-chamfer-two-times.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1819,44 +1827,47 @@ description: Result of parsing sketch-on-chamfer-two-times.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "159.25", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 159.25, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "159.25", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 159.25, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "278.35", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 278.35, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "278.35", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 278.35, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1866,7 +1877,7 @@ description: Result of parsing sketch-on-chamfer-two-times.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1877,8 +1888,9 @@ description: Result of parsing sketch-on-chamfer-two-times.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch-on-chamfer-two-times/input.kcl b/rust/kcl-lib/tests/sketch-on-chamfer-two-times/input.kcl index edd8f56b3..5404441bb 100644 --- a/rust/kcl-lib/tests/sketch-on-chamfer-two-times/input.kcl +++ b/rust/kcl-lib/tests/sketch-on-chamfer-two-times/input.kcl @@ -1,5 +1,5 @@ sketch001 = startSketchOn('XZ') - |> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag] + |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -11,14 +11,14 @@ extrude001 = extrude(sketch001, length = 100) |> chamfer(length = 50, tags = [getOppositeEdge(seg01)], tag = $seg03) sketch003 = startSketchOn(extrude001, face = seg04) - |> startProfileAt([-69.1, 277.34], %) + |> startProfile(at = [-69.1, 277.34]) |> angledLine(angle = 0, length = 41.48, tag = $rectangleSegmentA003) |> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = 104.8, tag = $rectangleSegmentB002) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003), tag = $rectangleSegmentC002) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close(%) sketch002 = startSketchOn(extrude001, face = seg03) - |> startProfileAt([159.25, 278.35], %) + |> startProfile(at = [159.25, 278.35]) |> angledLine(angle = 0, length = 40.82, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 132.27, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002), tag = $rectangleSegmentC001) diff --git a/rust/kcl-lib/tests/sketch-on-chamfer-two-times/unparsed.snap b/rust/kcl-lib/tests/sketch-on-chamfer-two-times/unparsed.snap index 46e6aca48..2eda4dffd 100644 --- a/rust/kcl-lib/tests/sketch-on-chamfer-two-times/unparsed.snap +++ b/rust/kcl-lib/tests/sketch-on-chamfer-two-times/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing sketch-on-chamfer-two-times.kcl --- sketch001 = startSketchOn(XZ) - |> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag] + |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -15,14 +15,14 @@ extrude001 = extrude(sketch001, length = 100) |> chamfer(length = 50, tags = [getOppositeEdge(seg01)], tag = $seg03) sketch003 = startSketchOn(extrude001, face = seg04) - |> startProfileAt([-69.1, 277.34], %) + |> startProfile(at = [-69.1, 277.34]) |> angledLine(angle = 0, length = 41.48, tag = $rectangleSegmentA003) |> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = 104.8, tag = $rectangleSegmentB002) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003), tag = $rectangleSegmentC002) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close(%) sketch002 = startSketchOn(extrude001, face = seg03) - |> startProfileAt([159.25, 278.35], %) + |> startProfile(at = [159.25, 278.35]) |> angledLine(angle = 0, length = 40.82, tag = $rectangleSegmentA002) |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 132.27, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002), tag = $rectangleSegmentC001) diff --git a/rust/kcl-lib/tests/sketch_in_object/ast.snap b/rust/kcl-lib/tests/sketch_in_object/ast.snap index e396105e4..c66335e00 100644 --- a/rust/kcl-lib/tests/sketch_in_object/ast.snap +++ b/rust/kcl-lib/tests/sketch_in_object/ast.snap @@ -59,44 +59,47 @@ description: Result of parsing sketch_in_object.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -106,7 +109,7 @@ description: Result of parsing sketch_in_object.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -117,8 +120,9 @@ description: Result of parsing sketch_in_object.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -483,44 +487,47 @@ description: Result of parsing sketch_in_object.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -530,7 +537,7 @@ description: Result of parsing sketch_in_object.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -541,8 +548,9 @@ description: Result of parsing sketch_in_object.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch_in_object/input.kcl b/rust/kcl-lib/tests/sketch_in_object/input.kcl index c3e248db9..f4cb5c078 100644 --- a/rust/kcl-lib/tests/sketch_in_object/input.kcl +++ b/rust/kcl-lib/tests/sketch_in_object/input.kcl @@ -1,6 +1,6 @@ fn test() { return startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 1]) |> line(end = [1, 0]) |> line(end = [0, -1]) @@ -11,7 +11,7 @@ fn test2() { return { thing1 = { thing2 = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 1]) |> line(end = [1, 0]) |> line(end = [0, -1]) diff --git a/rust/kcl-lib/tests/sketch_in_object/unparsed.snap b/rust/kcl-lib/tests/sketch_in_object/unparsed.snap index 655d1a771..6cd7a31cb 100644 --- a/rust/kcl-lib/tests/sketch_in_object/unparsed.snap +++ b/rust/kcl-lib/tests/sketch_in_object/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing sketch_in_object.kcl --- fn test() { return startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 1]) |> line(end = [1, 0]) |> line(end = [0, -1]) @@ -15,7 +15,7 @@ fn test2() { return { thing1 = { thing2 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 1]) |> line(end = [1, 0]) |> line(end = [0, -1]) diff --git a/rust/kcl-lib/tests/sketch_on_face/ast.snap b/rust/kcl-lib/tests/sketch_on_face/ast.snap index 9d2561461..32ef7c8f3 100644 --- a/rust/kcl-lib/tests/sketch_on_face/ast.snap +++ b/rust/kcl-lib/tests/sketch_on_face/ast.snap @@ -62,44 +62,47 @@ description: Result of parsing sketch_on_face.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "11.19", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 11.19, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "11.19", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 11.19, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "28.35", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 28.35, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "28.35", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 28.35, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -109,7 +112,7 @@ description: Result of parsing sketch_on_face.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -120,8 +123,9 @@ description: Result of parsing sketch_on_face.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -554,44 +558,47 @@ description: Result of parsing sketch_on_face.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -601,7 +608,7 @@ description: Result of parsing sketch_on_face.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -612,8 +619,9 @@ description: Result of parsing sketch_on_face.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch_on_face/input.kcl b/rust/kcl-lib/tests/sketch_on_face/input.kcl index a11057668..2208a41b5 100644 --- a/rust/kcl-lib/tests/sketch_on_face/input.kcl +++ b/rust/kcl-lib/tests/sketch_on_face/input.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn(XY) - |> startProfileAt([11.19, 28.35], %) + |> startProfile(at = [11.19, 28.35]) |> line(end = [28.67, -13.25], tag = $here) |> line(end = [-4.12, -22.81]) |> line(end = [-33.24, 14.55]) @@ -7,7 +7,7 @@ part001 = startSketchOn(XY) |> extrude(length = 5) part002 = startSketchOn(part001, face = here) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/rust/kcl-lib/tests/sketch_on_face/unparsed.snap b/rust/kcl-lib/tests/sketch_on_face/unparsed.snap index 59c3c0ee2..a7776845d 100644 --- a/rust/kcl-lib/tests/sketch_on_face/unparsed.snap +++ b/rust/kcl-lib/tests/sketch_on_face/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing sketch_on_face.kcl --- part001 = startSketchOn(XY) - |> startProfileAt([11.19, 28.35], %) + |> startProfile(at = [11.19, 28.35]) |> line(end = [28.67, -13.25], tag = $here) |> line(end = [-4.12, -22.81]) |> line(end = [-33.24, 14.55]) @@ -11,7 +11,7 @@ part001 = startSketchOn(XY) |> extrude(length = 5) part002 = startSketchOn(part001, face = here) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/rust/kcl-lib/tests/sketch_on_face_after_fillets_referencing_face/ast.snap b/rust/kcl-lib/tests/sketch_on_face_after_fillets_referencing_face/ast.snap index 34788d3c9..702bf9ca8 100644 --- a/rust/kcl-lib/tests/sketch_on_face_after_fillets_referencing_face/ast.snap +++ b/rust/kcl-lib/tests/sketch_on_face_after_fillets_referencing_face/ast.snap @@ -578,44 +578,47 @@ description: Result of parsing sketch_on_face_after_fillets_referencing_face.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -625,7 +628,7 @@ description: Result of parsing sketch_on_face_after_fillets_referencing_face.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -636,8 +639,9 @@ description: Result of parsing sketch_on_face_after_fillets_referencing_face.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1555,44 +1559,47 @@ description: Result of parsing sketch_on_face_after_fillets_referencing_face.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "4.28", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.28, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "4.28", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.28, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "3.83", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.83, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "3.83", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.83, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1602,7 +1609,7 @@ description: Result of parsing sketch_on_face_after_fillets_referencing_face.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -1613,8 +1620,9 @@ description: Result of parsing sketch_on_face_after_fillets_referencing_face.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch_on_face_after_fillets_referencing_face/input.kcl b/rust/kcl-lib/tests/sketch_on_face_after_fillets_referencing_face/input.kcl index 2cd53685b..2dcb9009b 100644 --- a/rust/kcl-lib/tests/sketch_on_face_after_fillets_referencing_face/input.kcl +++ b/rust/kcl-lib/tests/sketch_on_face_after_fillets_referencing_face/input.kcl @@ -23,7 +23,7 @@ filletR = 0.25 // Sketch the bracket and extrude with fillets bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, wallMountL], tag = $outerEdge) |> line(end = [-shelfMountL, 0], tag = $seg01) |> line(end = [0, -thickness]) @@ -35,7 +35,7 @@ bracket = startSketchOn(XY) |> fillet(radius = filletR + thickness, tags = [getNextAdjacentEdge(outerEdge)]) sketch001 = startSketchOn(bracket, face = seg01) - |> startProfileAt([4.28, 3.83], %) + |> startProfile(at = [4.28, 3.83]) |> line(end = [2.17, -0.03]) |> line(end = [-0.07, -1.8]) |> line(end = [-2.07, 0.05]) diff --git a/rust/kcl-lib/tests/sketch_on_face_after_fillets_referencing_face/unparsed.snap b/rust/kcl-lib/tests/sketch_on_face_after_fillets_referencing_face/unparsed.snap index d10f473a5..09cd53f21 100644 --- a/rust/kcl-lib/tests/sketch_on_face_after_fillets_referencing_face/unparsed.snap +++ b/rust/kcl-lib/tests/sketch_on_face_after_fillets_referencing_face/unparsed.snap @@ -27,7 +27,7 @@ filletR = 0.25 // Sketch the bracket and extrude with fillets bracket = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, wallMountL], tag = $outerEdge) |> line(end = [-shelfMountL, 0], tag = $seg01) |> line(end = [0, -thickness]) @@ -39,7 +39,7 @@ bracket = startSketchOn(XY) |> fillet(radius = filletR + thickness, tags = [getNextAdjacentEdge(outerEdge)]) sketch001 = startSketchOn(bracket, face = seg01) - |> startProfileAt([4.28, 3.83], %) + |> startProfile(at = [4.28, 3.83]) |> line(end = [2.17, -0.03]) |> line(end = [-0.07, -1.8]) |> line(end = [-2.07, 0.05]) diff --git a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/ast.snap b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/ast.snap index bd1ef93ae..f6ff38b91 100644 --- a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/ast.snap +++ b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/ast.snap @@ -70,27 +70,30 @@ description: Result of parsing sketch_on_face_circle_tagged.kcl { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "pos", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -100,7 +103,7 @@ description: Result of parsing sketch_on_face_circle_tagged.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -111,8 +114,9 @@ description: Result of parsing sketch_on_face_circle_tagged.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/input.kcl b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/input.kcl index 8f77a5568..ad887412b 100644 --- a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/input.kcl +++ b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/input.kcl @@ -1,6 +1,6 @@ fn cube(pos, scale) { sg = startSketchOn('XY') - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) diff --git a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/unparsed.snap b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/unparsed.snap index 07abe35a5..a96849a0e 100644 --- a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/unparsed.snap +++ b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing sketch_on_face_circle_tagged.kcl --- fn cube(pos, scale) { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) diff --git a/rust/kcl-lib/tests/sketch_on_face_end/ast.snap b/rust/kcl-lib/tests/sketch_on_face_end/ast.snap index b8cef3cbc..7231c8344 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end/ast.snap +++ b/rust/kcl-lib/tests/sketch_on_face_end/ast.snap @@ -70,27 +70,30 @@ description: Result of parsing sketch_on_face_end.kcl { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "pos", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -100,7 +103,7 @@ description: Result of parsing sketch_on_face_end.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -111,8 +114,9 @@ description: Result of parsing sketch_on_face_end.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -688,44 +692,47 @@ description: Result of parsing sketch_on_face_end.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -735,7 +742,7 @@ description: Result of parsing sketch_on_face_end.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -746,8 +753,9 @@ description: Result of parsing sketch_on_face_end.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch_on_face_end/input.kcl b/rust/kcl-lib/tests/sketch_on_face_end/input.kcl index 3b0b6add6..9cfece73a 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end/input.kcl +++ b/rust/kcl-lib/tests/sketch_on_face_end/input.kcl @@ -1,6 +1,6 @@ fn cube(pos, scale) { sg = startSketchOn('XY') - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -12,7 +12,7 @@ part001 = cube([0, 0], 20) |> extrude(length = 20) part002 = startSketchOn(part001, face = "END") - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/rust/kcl-lib/tests/sketch_on_face_end/unparsed.snap b/rust/kcl-lib/tests/sketch_on_face_end/unparsed.snap index 181740683..9c2d589b1 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end/unparsed.snap +++ b/rust/kcl-lib/tests/sketch_on_face_end/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing sketch_on_face_end.kcl --- fn cube(pos, scale) { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -16,7 +16,7 @@ part001 = cube([0, 0], 20) |> extrude(length = 20) part002 = startSketchOn(part001, face = END) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/ast.snap b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/ast.snap index a7ee9184a..cdd64df30 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/ast.snap +++ b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/ast.snap @@ -70,27 +70,30 @@ description: Result of parsing sketch_on_face_end_negative_extrude.kcl { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "pos", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -100,7 +103,7 @@ description: Result of parsing sketch_on_face_end_negative_extrude.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -111,8 +114,9 @@ description: Result of parsing sketch_on_face_end_negative_extrude.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -688,44 +692,47 @@ description: Result of parsing sketch_on_face_end_negative_extrude.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -735,7 +742,7 @@ description: Result of parsing sketch_on_face_end_negative_extrude.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -746,8 +753,9 @@ description: Result of parsing sketch_on_face_end_negative_extrude.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/input.kcl b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/input.kcl index 9d0ca7f69..b22488b90 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/input.kcl +++ b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/input.kcl @@ -1,6 +1,6 @@ fn cube(pos, scale) { sg = startSketchOn('XY') - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -12,7 +12,7 @@ part001 = cube([0, 0], 20) |> extrude(length = 20) part002 = startSketchOn(part001, face = "END") - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/unparsed.snap b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/unparsed.snap index e6a4bb093..3b968e94d 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/unparsed.snap +++ b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing sketch_on_face_end_negative_extrude.kcl --- fn cube(pos, scale) { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -16,7 +16,7 @@ part001 = cube([0, 0], 20) |> extrude(length = 20) part002 = startSketchOn(part001, face = END) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/rust/kcl-lib/tests/sketch_on_face_start/ast.snap b/rust/kcl-lib/tests/sketch_on_face_start/ast.snap index 38b368fa0..767543dc2 100644 --- a/rust/kcl-lib/tests/sketch_on_face_start/ast.snap +++ b/rust/kcl-lib/tests/sketch_on_face_start/ast.snap @@ -77,27 +77,30 @@ description: Result of parsing sketch_on_face_start.kcl { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "pos", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -107,7 +110,7 @@ description: Result of parsing sketch_on_face_start.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -118,8 +121,9 @@ description: Result of parsing sketch_on_face_start.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -709,44 +713,47 @@ description: Result of parsing sketch_on_face_start.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -756,7 +763,7 @@ description: Result of parsing sketch_on_face_start.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -767,8 +774,9 @@ description: Result of parsing sketch_on_face_start.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch_on_face_start/input.kcl b/rust/kcl-lib/tests/sketch_on_face_start/input.kcl index 6023775e9..93df3c8f0 100644 --- a/rust/kcl-lib/tests/sketch_on_face_start/input.kcl +++ b/rust/kcl-lib/tests/sketch_on_face_start/input.kcl @@ -1,6 +1,6 @@ fn cube(pos, scale) { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -12,7 +12,7 @@ part001 = cube([0, 0], 20) |> extrude(length = 20) as foo part002 = startSketchOn(foo, face = "start") - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/rust/kcl-lib/tests/sketch_on_face_start/unparsed.snap b/rust/kcl-lib/tests/sketch_on_face_start/unparsed.snap index 40c68d3b9..6dd658d1b 100644 --- a/rust/kcl-lib/tests/sketch_on_face_start/unparsed.snap +++ b/rust/kcl-lib/tests/sketch_on_face_start/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing sketch_on_face_start.kcl --- fn cube(pos, scale) { sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -16,7 +16,7 @@ part001 = cube([0, 0], 20) |> extrude(length = 20) as foo part002 = startSketchOn(foo, face = START) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/rust/kcl-lib/tests/ssi_pattern/ast.snap b/rust/kcl-lib/tests/ssi_pattern/ast.snap index cc8789a3f..17fb87a3d 100644 --- a/rust/kcl-lib/tests/ssi_pattern/ast.snap +++ b/rust/kcl-lib/tests/ssi_pattern/ast.snap @@ -55,60 +55,63 @@ description: Result of parsing ssi_pattern.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "4.35", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.35, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "4.35", + "operator": "-", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.35, - "suffix": "None" - } + "type": "UnaryExpression", + "type": "UnaryExpression" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "argument": { + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "12.26", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 12.26, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "12.26", + "operator": "-", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 12.26, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -118,7 +121,7 @@ description: Result of parsing ssi_pattern.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -129,8 +132,9 @@ description: Result of parsing ssi_pattern.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/ssi_pattern/input.kcl b/rust/kcl-lib/tests/ssi_pattern/input.kcl index ee46ae9f4..435097888 100644 --- a/rust/kcl-lib/tests/ssi_pattern/input.kcl +++ b/rust/kcl-lib/tests/ssi_pattern/input.kcl @@ -1,5 +1,5 @@ sketch001 = startSketchOn('XZ') - |> startProfileAt([-4.35, -12.26], %) + |> startProfile(at = [-4.35, -12.26]) |> yLine(length = 10.2) |> line(end = [0.54, -0.03]) |> tangentialArc(endAbsolute = [20.4, 14.61]) diff --git a/rust/kcl-lib/tests/ssi_pattern/unparsed.snap b/rust/kcl-lib/tests/ssi_pattern/unparsed.snap index 137fd5dc4..bf3576754 100644 --- a/rust/kcl-lib/tests/ssi_pattern/unparsed.snap +++ b/rust/kcl-lib/tests/ssi_pattern/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing ssi_pattern.kcl --- sketch001 = startSketchOn(XZ) - |> startProfileAt([-4.35, -12.26], %) + |> startProfile(at = [-4.35, -12.26]) |> yLine(length = 10.2) |> line(end = [0.54, -0.03]) |> tangentialArc(endAbsolute = [20.4, 14.61]) diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/ast.snap b/rust/kcl-lib/tests/subtract_cylinder_from_cube/ast.snap index 91d3262ad..af8d0ac0b 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/ast.snap +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/ast.snap @@ -66,116 +66,119 @@ description: Result of parsing subtract_cylinder_from_cube.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, - "computed": false, "end": 0, - "object": { + "left": { "commentStart": 0, + "computed": false, "end": 0, - "name": "center", + "object": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, "start": 0, - "type": "Identifier", - "type": "Identifier" + "type": "MemberExpression", + "type": "MemberExpression" }, - "property": { + "operator": "-", + "right": { "commentStart": 0, "end": 0, - "raw": "0", + "raw": "10", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 0.0, + "value": 10.0, "suffix": "None" } }, "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "-", - "right": { + { "commentStart": 0, "end": 0, - "raw": "10", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { + "left": { "commentStart": 0, + "computed": false, "end": 0, - "name": "center", + "object": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, "start": 0, - "type": "Identifier", - "type": "Identifier" + "type": "MemberExpression", + "type": "MemberExpression" }, - "property": { + "operator": "-", + "right": { "commentStart": 0, "end": 0, - "raw": "1", + "raw": "10", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 1.0, + "value": 10.0, "suffix": "None" } }, "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "10", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -185,7 +188,7 @@ description: Result of parsing subtract_cylinder_from_cube.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -196,8 +199,9 @@ description: Result of parsing subtract_cylinder_from_cube.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/input.kcl b/rust/kcl-lib/tests/subtract_cylinder_from_cube/input.kcl index d4cc93b07..2308d46bc 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/input.kcl +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/input.kcl @@ -1,6 +1,6 @@ fn cube(center) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) + |> startProfile(at = [center[0] - 10, center[1] - 10]) |> line(endAbsolute = [center[0] + 10, center[1] - 10]) |> line(endAbsolute = [center[0] + 10, center[1] + 10]) |> line(endAbsolute = [center[0] - 10, center[1] + 10]) diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/unparsed.snap b/rust/kcl-lib/tests/subtract_cylinder_from_cube/unparsed.snap index 035e6ab4e..0f276364d 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/unparsed.snap +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing subtract_cylinder_from_cube.kcl --- fn cube(center) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) + |> startProfile(at = [center[0] - 10, center[1] - 10]) |> line(endAbsolute = [center[0] + 10, center[1] - 10]) |> line(endAbsolute = [center[0] + 10, center[1] + 10]) |> line(endAbsolute = [center[0] - 10, center[1] + 10]) diff --git a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ast.snap b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ast.snap index ceb223118..b36956f19 100644 --- a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ast.snap +++ b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ast.snap @@ -66,124 +66,127 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "center", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "-", - "right": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { "commentStart": 0, + "computed": false, "end": 0, - "name": "size", + "object": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, "start": 0, - "type": "Identifier" + "type": "MemberExpression", + "type": "MemberExpression" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { + "operator": "-", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "center", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "-", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { + "left": { + "commentStart": 0, + "computed": false, + "end": 0, + "object": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "MemberExpression", + "type": "MemberExpression" + }, + "operator": "-", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "size", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -193,7 +196,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -204,8 +207,9 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/input.kcl b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/input.kcl index 2753bb6f3..262b67e32 100644 --- a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/input.kcl +++ b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/input.kcl @@ -1,6 +1,6 @@ fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) diff --git a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/unparsed.snap b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/unparsed.snap index 766d1f90d..0c2094a45 100644 --- a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/unparsed.snap +++ b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing subtract_doesnt_need_brackets.kcl --- fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) diff --git a/rust/kcl-lib/tests/tan_arc_x_line/ast.snap b/rust/kcl-lib/tests/tan_arc_x_line/ast.snap index b4ee48d1e..83b350807 100644 --- a/rust/kcl-lib/tests/tan_arc_x_line/ast.snap +++ b/rust/kcl-lib/tests/tan_arc_x_line/ast.snap @@ -211,52 +211,55 @@ description: Result of parsing tan_arc_x_line.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "startX", + "name": { + "commentStart": 0, + "end": 0, + "name": "startX", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "startY", + "name": { + "commentStart": 0, + "end": 0, + "name": "startY", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -266,7 +269,7 @@ description: Result of parsing tan_arc_x_line.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -277,8 +280,9 @@ description: Result of parsing tan_arc_x_line.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/tan_arc_x_line/input.kcl b/rust/kcl-lib/tests/tan_arc_x_line/input.kcl index 4ac9156f4..9861101f3 100644 --- a/rust/kcl-lib/tests/tan_arc_x_line/input.kcl +++ b/rust/kcl-lib/tests/tan_arc_x_line/input.kcl @@ -5,7 +5,7 @@ r = 1 angleStart = 110 startSketchOn('XY') - |> startProfileAt([startX, startY], %) + |> startProfile(at = [startX, startY]) |> angledLine(angle = angleStart, length = .000001) |> tangentialArc(angle = angleOffset, radius = r, tag = $arc1) |> tangentialArc(angle = angleOffset, radius = 0.5 * r, tag = $arc2) diff --git a/rust/kcl-lib/tests/tan_arc_x_line/unparsed.snap b/rust/kcl-lib/tests/tan_arc_x_line/unparsed.snap index 492dbea93..cd790a955 100644 --- a/rust/kcl-lib/tests/tan_arc_x_line/unparsed.snap +++ b/rust/kcl-lib/tests/tan_arc_x_line/unparsed.snap @@ -9,7 +9,7 @@ r = 1 angleStart = 110 startSketchOn(XY) - |> startProfileAt([startX, startY], %) + |> startProfile(at = [startX, startY]) |> angledLine(angle = angleStart, length = .000001) |> tangentialArc(angle = angleOffset, radius = r, tag = $arc1) |> tangentialArc(angle = angleOffset, radius = 0.5 * r, tag = $arc2) diff --git a/rust/kcl-lib/tests/tangent_to_3_point_arc/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/tangent_to_3_point_arc/artifact_graph_flowchart.snap.md index 517b2ce54..1cd09efaa 100644 --- a/rust/kcl-lib/tests/tangent_to_3_point_arc/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/tangent_to_3_point_arc/artifact_graph_flowchart.snap.md @@ -1,10 +1,10 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[43, 82, 0]"] - 3["Segment
[88, 112, 0]"] - 4["Segment
[118, 232, 0]"] - 5["Segment
[238, 315, 0]"] + 2["Path
[43, 85, 0]"] + 3["Segment
[91, 115, 0]"] + 4["Segment
[121, 235, 0]"] + 5["Segment
[241, 318, 0]"] end 1["Plane
[12, 29, 0]"] 1 --- 2 diff --git a/rust/kcl-lib/tests/tangent_to_3_point_arc/ast.snap b/rust/kcl-lib/tests/tangent_to_3_point_arc/ast.snap index 1a8327f42..7c16fa7c6 100644 --- a/rust/kcl-lib/tests/tangent_to_3_point_arc/ast.snap +++ b/rust/kcl-lib/tests/tangent_to_3_point_arc/ast.snap @@ -83,53 +83,47 @@ description: Result of parsing tangent_to_3_point_arc.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "100.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 100.0, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "sketch001", + "name": "at", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "100.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 100.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -139,7 +133,7 @@ description: Result of parsing tangent_to_3_point_arc.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -150,8 +144,24 @@ description: Result of parsing tangent_to_3_point_arc.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "sketch001", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ diff --git a/rust/kcl-lib/tests/tangent_to_3_point_arc/input.kcl b/rust/kcl-lib/tests/tangent_to_3_point_arc/input.kcl index a79ccf9b1..bb6cff279 100644 --- a/rust/kcl-lib/tests/tangent_to_3_point_arc/input.kcl +++ b/rust/kcl-lib/tests/tangent_to_3_point_arc/input.kcl @@ -1,5 +1,5 @@ sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([100.0, 0.0], sketch001) +profile001 = startProfile(sketch001, at = [100.0, 0.0]) |> line(end = [0.0, 120.0]) |> arc( interiorAbsolute = [300.0, 100.0], diff --git a/rust/kcl-lib/tests/tangent_to_3_point_arc/program_memory.snap b/rust/kcl-lib/tests/tangent_to_3_point_arc/program_memory.snap index 8bef28f67..3ed8e3d8e 100644 --- a/rust/kcl-lib/tests/tangent_to_3_point_arc/program_memory.snap +++ b/rust/kcl-lib/tests/tangent_to_3_point_arc/program_memory.snap @@ -50,9 +50,9 @@ description: Variables in memory after executing tangent_to_3_point_arc.kcl -100.0 ], "tag": { - "commentStart": 218, - "end": 224, - "start": 218, + "commentStart": 221, + "end": 227, + "start": 221, "type": "TagDeclarator", "value": "seg01" }, diff --git a/rust/kcl-lib/tests/tangent_to_3_point_arc/unparsed.snap b/rust/kcl-lib/tests/tangent_to_3_point_arc/unparsed.snap index 0deba1782..00c5588b5 100644 --- a/rust/kcl-lib/tests/tangent_to_3_point_arc/unparsed.snap +++ b/rust/kcl-lib/tests/tangent_to_3_point_arc/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing tangent_to_3_point_arc.kcl --- sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([100.0, 0.0], sketch001) +profile001 = startProfile(sketch001, at = [100.0, 0.0]) |> line(end = [0.0, 120.0]) |> arc(interiorAbsolute = [300.0, 100.0], endAbsolute = [200.0, -100.0], tag = $seg01) |> angledLine(angle = tangentToEnd(seg01), length = 100.0) diff --git a/rust/kcl-lib/tests/tangential_arc/ast.snap b/rust/kcl-lib/tests/tangential_arc/ast.snap index 262f44ded..01bbf6561 100644 --- a/rust/kcl-lib/tests/tangential_arc/ast.snap +++ b/rust/kcl-lib/tests/tangential_arc/ast.snap @@ -62,44 +62,47 @@ description: Result of parsing tangential_arc.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -109,7 +112,7 @@ description: Result of parsing tangential_arc.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -120,8 +123,9 @@ description: Result of parsing tangential_arc.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/tangential_arc/input.kcl b/rust/kcl-lib/tests/tangential_arc/input.kcl index 66b4c0090..0f701a5c3 100644 --- a/rust/kcl-lib/tests/tangential_arc/input.kcl +++ b/rust/kcl-lib/tests/tangential_arc/input.kcl @@ -1,5 +1,5 @@ boxSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> tangentialArc(radius = 5, angle = 90) |> line(end = [5, -15]) diff --git a/rust/kcl-lib/tests/tangential_arc/unparsed.snap b/rust/kcl-lib/tests/tangential_arc/unparsed.snap index f9cdd612a..b37e9248e 100644 --- a/rust/kcl-lib/tests/tangential_arc/unparsed.snap +++ b/rust/kcl-lib/tests/tangential_arc/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing tangential_arc.kcl --- boxSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0, 10]) |> tangentialArc(radius = 5, angle = 90) |> line(end = [5, -15]) diff --git a/rust/kcl-lib/tests/translate_after_fillet/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/translate_after_fillet/artifact_graph_flowchart.snap.md index e4b679728..0b50a3946 100644 --- a/rust/kcl-lib/tests/translate_after_fillet/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/translate_after_fillet/artifact_graph_flowchart.snap.md @@ -6,18 +6,18 @@ flowchart LR 4[Solid2d] end subgraph path13 [Path] - 13["Path
[660, 747, 0]"] - 14["Segment
[755, 834, 0]"] - 15["Segment
[842, 921, 0]"] - 16["Segment
[929, 1008, 0]"] - 17["Segment
[1016, 1094, 0]"] - 18["Segment
[1102, 1180, 0]"] - 19["Segment
[1188, 1195, 0]"] + 13["Path
[660, 720, 0]"] + 14["Segment
[728, 807, 0]"] + 15["Segment
[815, 894, 0]"] + 16["Segment
[902, 981, 0]"] + 17["Segment
[989, 1067, 0]"] + 18["Segment
[1075, 1153, 0]"] + 19["Segment
[1161, 1168, 0]"] 20[Solid2d] end subgraph path41 [Path] - 41["Path
[1303, 1372, 0]"] - 42["Segment
[1303, 1372, 0]"] + 41["Path
[1276, 1345, 0]"] + 42["Segment
[1276, 1345, 0]"] 43[Solid2d] end 1["Plane
[320, 337, 0]"] @@ -29,7 +29,7 @@ flowchart LR 10["SweepEdge Adjacent"] 11["EdgeCut Fillet
[464, 530, 0]"] 12["EdgeCut Fillet
[464, 530, 0]"] - 21["Sweep Extrusion
[1203, 1243, 0]"] + 21["Sweep Extrusion
[1176, 1216, 0]"] 22[Wall] 23[Wall] 24[Wall] @@ -49,14 +49,14 @@ flowchart LR 38["SweepEdge Adjacent"] 39["SweepEdge Opposite"] 40["SweepEdge Adjacent"] - 44["Sweep Extrusion
[1380, 1408, 0]"] + 44["Sweep Extrusion
[1353, 1381, 0]"] 45[Wall] 46["Cap End"] 47["SweepEdge Opposite"] 48["SweepEdge Adjacent"] - 49["EdgeCut Fillet
[1416, 1475, 0]"] + 49["EdgeCut Fillet
[1389, 1448, 0]"] 50["StartSketchOnFace
[613, 652, 0]"] - 51["StartSketchOnFace
[1258, 1295, 0]"] + 51["StartSketchOnFace
[1231, 1268, 0]"] 1 --- 2 2 --- 3 2 ---- 5 diff --git a/rust/kcl-lib/tests/translate_after_fillet/ast.snap b/rust/kcl-lib/tests/translate_after_fillet/ast.snap index 0f803c13a..48c18d572 100644 --- a/rust/kcl-lib/tests/translate_after_fillet/ast.snap +++ b/rust/kcl-lib/tests/translate_after_fillet/ast.snap @@ -854,92 +854,95 @@ description: Result of parsing translate_after_fillet.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "boltHexDrive", + "name": { + "commentStart": 0, + "end": 0, + "name": "boltHexDrive", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "boltHexFlatLength", + "raw": "2", "start": 0, - "type": "Identifier" + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", - "right": { + { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "boltHexFlatLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -949,7 +952,7 @@ description: Result of parsing translate_after_fillet.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -960,8 +963,9 @@ description: Result of parsing translate_after_fillet.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/translate_after_fillet/input.kcl b/rust/kcl-lib/tests/translate_after_fillet/input.kcl index cec01967a..ba0d25911 100644 --- a/rust/kcl-lib/tests/translate_after_fillet/input.kcl +++ b/rust/kcl-lib/tests/translate_after_fillet/input.kcl @@ -15,10 +15,7 @@ export fn bolt() { // Define the sketch of the hex pattern on the screw head hexPatternSketch = startSketchOn(boltHead, face = 'start') - |> startProfileAt([ - boltHexDrive / 2, - boltHexFlatLength / 2 - ], %) + |> startProfile(at = [boltHexDrive / 2, boltHexFlatLength / 2]) |> angledLine( angle = 270, length = boltHexFlatLength, diff --git a/rust/kcl-lib/tests/translate_after_fillet/ops.snap b/rust/kcl-lib/tests/translate_after_fillet/ops.snap index 88aa512fd..870a3dfcc 100644 --- a/rust/kcl-lib/tests/translate_after_fillet/ops.snap +++ b/rust/kcl-lib/tests/translate_after_fillet/ops.snap @@ -9,8 +9,8 @@ description: Operations executed translate_after_fillet.kcl "type": "FunctionCall", "name": "toRadians", "functionSourceRange": [ - 11497, - 11546, + 11503, + 11552, 1 ], "unlabeledArg": null, @@ -46,7 +46,7 @@ description: Operations executed translate_after_fillet.kcl "name": "bolt", "functionSourceRange": [ 264, - 1565, + 1538, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/translate_after_fillet/unparsed.snap b/rust/kcl-lib/tests/translate_after_fillet/unparsed.snap index d2c29f75b..0305bb9ef 100644 --- a/rust/kcl-lib/tests/translate_after_fillet/unparsed.snap +++ b/rust/kcl-lib/tests/translate_after_fillet/unparsed.snap @@ -19,10 +19,10 @@ export fn bolt() { // Define the sketch of the hex pattern on the screw head hexPatternSketch = startSketchOn(boltHead, face = START) - |> startProfileAt([ + |> startProfile(at = [ boltHexDrive / 2, boltHexFlatLength / 2 - ], %) + ]) |> angledLine(angle = 270, length = boltHexFlatLength) |> angledLine(angle = 210, length = boltHexFlatLength) |> angledLine(angle = 150, length = boltHexFlatLength) diff --git a/rust/kcl-lib/tests/union_cubes/ast.snap b/rust/kcl-lib/tests/union_cubes/ast.snap index c25d7956f..2d7ba3777 100644 --- a/rust/kcl-lib/tests/union_cubes/ast.snap +++ b/rust/kcl-lib/tests/union_cubes/ast.snap @@ -66,124 +66,127 @@ description: Result of parsing union_cubes.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "center", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "-", - "right": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": { + "left": { "commentStart": 0, + "computed": false, "end": 0, - "name": "size", + "object": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, "start": 0, - "type": "Identifier" + "type": "MemberExpression", + "type": "MemberExpression" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { + "operator": "-", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "center", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "-", - "right": { - "abs_path": false, + { "commentStart": 0, "end": 0, - "name": { + "left": { + "commentStart": 0, + "computed": false, + "end": 0, + "object": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier", + "type": "Identifier" + }, + "property": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "MemberExpression", + "type": "MemberExpression" + }, + "operator": "-", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "size", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -193,7 +196,7 @@ description: Result of parsing union_cubes.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -204,8 +207,9 @@ description: Result of parsing union_cubes.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/union_cubes/input.kcl b/rust/kcl-lib/tests/union_cubes/input.kcl index e79ab9fbf..483681a95 100644 --- a/rust/kcl-lib/tests/union_cubes/input.kcl +++ b/rust/kcl-lib/tests/union_cubes/input.kcl @@ -1,6 +1,6 @@ fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) diff --git a/rust/kcl-lib/tests/union_cubes/unparsed.snap b/rust/kcl-lib/tests/union_cubes/unparsed.snap index 2a68bd834..d32d14cec 100644 --- a/rust/kcl-lib/tests/union_cubes/unparsed.snap +++ b/rust/kcl-lib/tests/union_cubes/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing union_cubes.kcl --- fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - size, center[1] - size], %) + |> startProfile(at = [center[0] - size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] - size]) |> line(endAbsolute = [center[0] + size, center[1] + size]) |> line(endAbsolute = [center[0] - size, center[1] + size]) diff --git a/rust/kcl-lib/tests/xz_plane/ast.snap b/rust/kcl-lib/tests/xz_plane/ast.snap index aa42c1930..30baf8f64 100644 --- a/rust/kcl-lib/tests/xz_plane/ast.snap +++ b/rust/kcl-lib/tests/xz_plane/ast.snap @@ -55,44 +55,47 @@ description: Result of parsing xz_plane.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "at", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -102,7 +105,7 @@ description: Result of parsing xz_plane.kcl "name": { "commentStart": 0, "end": 0, - "name": "startProfileAt", + "name": "startProfile", "start": 0, "type": "Identifier" }, @@ -113,8 +116,9 @@ description: Result of parsing xz_plane.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/xz_plane/input.kcl b/rust/kcl-lib/tests/xz_plane/input.kcl index 6c33fde11..e22881807 100644 --- a/rust/kcl-lib/tests/xz_plane/input.kcl +++ b/rust/kcl-lib/tests/xz_plane/input.kcl @@ -1,5 +1,5 @@ part001 = startSketchOn('XZ') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [100, 100]) |> line(endAbsolute = [100, 0]) |> close(%) diff --git a/rust/kcl-lib/tests/xz_plane/unparsed.snap b/rust/kcl-lib/tests/xz_plane/unparsed.snap index 75fa6fa24..b4c92eecf 100644 --- a/rust/kcl-lib/tests/xz_plane/unparsed.snap +++ b/rust/kcl-lib/tests/xz_plane/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing xz_plane.kcl --- part001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [100, 100]) |> line(endAbsolute = [100, 0]) |> close(%) diff --git a/rust/kcl-python-bindings/files/box_with_linter_errors.kcl b/rust/kcl-python-bindings/files/box_with_linter_errors.kcl index f08a7ff24..9a74cb693 100644 --- a/rust/kcl-python-bindings/files/box_with_linter_errors.kcl +++ b/rust/kcl-python-bindings/files/box_with_linter_errors.kcl @@ -5,7 +5,7 @@ const box_depth = 25 const box_height = 50 const box_sketch = startSketchOn('XY') - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> xLine(length = box_width, tag = $line1) |> yLine(length = box_depth, tag = $line2) |> xLine(endAbsolute = profileStartX(%), tag = $line3) diff --git a/rust/kcl-to-core/tests/kcl_to_core_test.rs b/rust/kcl-to-core/tests/kcl_to_core_test.rs index 7a1054a6f..a7c2fb502 100644 --- a/rust/kcl-to-core/tests/kcl_to_core_test.rs +++ b/rust/kcl-to-core/tests/kcl_to_core_test.rs @@ -5,7 +5,7 @@ async fn kcl_to_core_test() { let result = kcl_to_engine_core( r#" part001 = startSketchOn('XY') - |> startProfileAt([11.19, 28.35], %) + |> startProfile(at = [11.19, 28.35]) |> line(end = [28.67, -13.25], tag = $here) |> line(end = [-4.12, -22.81]) |> line(end = [-33.24, 14.55]) diff --git a/src/clientSideScene/sceneEntities.ts b/src/clientSideScene/sceneEntities.ts index 24eb457f4..08cb9bfc7 100644 --- a/src/clientSideScene/sceneEntities.ts +++ b/src/clientSideScene/sceneEntities.ts @@ -100,10 +100,9 @@ import { import type EditorManager from '@src/editor/manager' import type { KclManager } from '@src/lang/KclSingleton' import type CodeManager from '@src/lang/codeManager' -import { ARG_END, ARG_END_ABSOLUTE } from '@src/lang/constants' +import { ARG_END, ARG_AT, ARG_END_ABSOLUTE } from '@src/lang/constants' import { createArrayExpression, - createCallExpressionStdLib, createCallExpressionStdLibKw, createLabeledArg, createLiteral, @@ -473,7 +472,7 @@ export class SceneEntities { scale, theme: this.sceneInfra._theme, // default is 12, this makes the draft point pop a bit more, - // especially when snapping to the startProfileAt handle as it's it was the exact same size + // especially when snapping to the startProfile handle as it's it was the exact same size size: 16, }) draftPoint.layers.set(SKETCH_LAYER) @@ -1212,13 +1211,19 @@ export class SceneEntities { const tag = findUniqueName(_ast, 'rectangleSegmentA') const newDeclaration = createVariableDeclaration( varName, - createCallExpressionStdLib('startProfileAt', [ - createArrayExpression([ - createLiteral(roundOff(rectangleOrigin[0])), - createLiteral(roundOff(rectangleOrigin[1])), - ]), + createCallExpressionStdLibKw( + 'startProfile', createLocalName(varDec.node.id.name), - ]) + [ + createLabeledArg( + ARG_AT, + createArrayExpression([ + createLiteral(roundOff(rectangleOrigin[0])), + createLiteral(roundOff(rectangleOrigin[1])), + ]) + ), + ] + ) ) const insertIndex = getInsertIndex(sketchNodePaths, planeNodePath, 'end') @@ -1413,15 +1418,22 @@ export class SceneEntities { // first create just the variable declaration, as that's // all we want the user to see in the editor const tag = findUniqueName(_ast, 'rectangleSegmentA') + const newDeclaration = createVariableDeclaration( varName, - createCallExpressionStdLib('startProfileAt', [ - createArrayExpression([ - createLiteral(roundOff(rectangleOrigin[0])), - createLiteral(roundOff(rectangleOrigin[1])), - ]), + createCallExpressionStdLibKw( + 'startProfile', createLocalName(varDec.node.id.name), - ]) + [ + createLabeledArg( + ARG_AT, + createArrayExpression([ + createLiteral(roundOff(rectangleOrigin[0])), + createLiteral(roundOff(rectangleOrigin[1])), + ]) + ), + ] + ) ) const insertIndex = getInsertIndex(sketchNodePaths, planeNodePath, 'end') diff --git a/src/components/ModelingSidebar/ModelingPanes/MemoryPane.test.tsx b/src/components/ModelingSidebar/ModelingPanes/MemoryPane.test.tsx index 44845398c..a1d8f3092 100644 --- a/src/components/ModelingSidebar/ModelingPanes/MemoryPane.test.tsx +++ b/src/components/ModelingSidebar/ModelingPanes/MemoryPane.test.tsx @@ -18,13 +18,13 @@ describe('processMemory', () => { otherVar = myFn(5) theExtrude = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [-2.4, myVar]) |> line(endAbsolute = [-0.76, otherVar]) |> extrude(length = 4) theSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [-3.35, 0.17]) |> line(endAbsolute = [0.98, 5.16]) |> line(endAbsolute = [2.15, 4.32]) diff --git a/src/lang/artifact.test.ts b/src/lang/artifact.test.ts index 692145e9a..39ed6f4af 100644 --- a/src/lang/artifact.test.ts +++ b/src/lang/artifact.test.ts @@ -11,7 +11,7 @@ describe('testing artifacts', () => { test('sketch artifacts', async () => { const code = ` const mySketch001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [-1.59, -1.54]) |> line(endAbsolute = [0.46, -5.82]) // |> rx(45, %)` @@ -69,7 +69,7 @@ const mySketch001 = startSketchOn(XY) // Enable rotations #152 const code = ` const mySketch001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [-1.59, -1.54]) |> line(endAbsolute = [0.46, -5.82]) // |> rx(45, %) @@ -148,7 +148,7 @@ const mySketch001 = startSketchOn(XY) // TODO #153 in order for getExtrudeWallTransform to work we need to query the engine for the location of a face. const code = ` const sk1 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [-2.5, 0]) |> line(endAbsolute = [0, 10], tag = $p) |> line(endAbsolute = [2.5, 0]) @@ -158,7 +158,7 @@ const sk1 = startSketchOn(XY) const theExtrude = extrude(sk1, length = 2) // const theTransf = getExtrudeWallTransform('p', theExtrude) const sk2 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [-2.5, 0]) |> line(endAbsolute = [0, 3], tag = $o) |> line(endAbsolute = [2.5, 0]) diff --git a/src/lang/constants.ts b/src/lang/constants.ts index be12aed8f..64fd95449 100644 --- a/src/lang/constants.ts +++ b/src/lang/constants.ts @@ -15,3 +15,4 @@ export const ARG_END_ABSOLUTE_X = 'endAbsoluteX' export const ARG_END_ABSOLUTE_Y = 'endAbsoluteY' export const ARG_INTERSECT_TAG = 'intersectTag' export const ARG_INTERIOR_ABSOLUTE = 'interiorAbsolute' +export const ARG_AT = 'at' diff --git a/src/lang/executor.test.ts b/src/lang/executor.test.ts index afa991b70..c40027150 100644 --- a/src/lang/executor.test.ts +++ b/src/lang/executor.test.ts @@ -48,7 +48,7 @@ const newVar = myVar + 1` }) it('sketch declaration', async () => { let code = `const mySketch = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(endAbsolute = [0,2], tag = $myPath) |> line(endAbsolute = [2,3]) |> line(endAbsolute = [5,-1], tag = $rightPath) @@ -151,7 +151,7 @@ const newVar = myVar + 1` // Enable rotations #152 const code = [ 'const mySk1 = startSketchOn(XY)', - ' |> startProfileAt([0,0], %)', + ' |> startProfile(at = [0,0])', ' |> line(endAbsolute = [1,1])', ' |> line(endAbsolute = [0, 1], tag = $myPath)', ' |> line(endAbsolute = [1,1])', @@ -398,7 +398,7 @@ describe('testing math operators', () => { it('with unaryExpression in ArrayExpression in CallExpression, checking nothing funny happens when used in a sketch', async () => { const code = [ 'part001 = startSketchOn(XY)', - ' |> startProfileAt([0, 0], %)', + ' |> startProfile(at = [0, 0])', '|> line(end = [-2.21, -legLen(hypotenuse = 5, leg = min(3, 999))])', ].join('\n') const mem = await exe(code) @@ -411,7 +411,7 @@ describe('testing math operators', () => { const code = [ `const myVar = 3`, `const part001 = startSketchOn(XY)`, - ` |> startProfileAt([0, 0], %)`, + ` |> startProfile(at = [0, 0])`, ` |> line(end = [3, 4], tag = $seg01)`, ` |> line(end = [`, ` min(segLen(seg01), myVar),`, @@ -454,7 +454,7 @@ describe('Testing Errors', () => { it('should throw an error when a variable is not defined', async () => { const code = `const myVar = 5 const theExtrude = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [-2.4, 5]) |> line(end = myVarZ) |> line(end = [5,5]) diff --git a/src/lang/getNodePathFromSourceRange.test.ts b/src/lang/getNodePathFromSourceRange.test.ts index 3d73b6642..3f090329e 100644 --- a/src/lang/getNodePathFromSourceRange.test.ts +++ b/src/lang/getNodePathFromSourceRange.test.ts @@ -18,7 +18,7 @@ describe('testing getNodePathFromSourceRange', () => { const code = ` const myVar = 5 const sk3 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [1, 2]) |> line(endAbsolute = [3, 4], tag = $yo) |> close() @@ -42,7 +42,7 @@ const sk3 = startSketchOn(XY) it('gets path right for function definition params', () => { const code = `fn cube = (pos, scale) => { const sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) @@ -75,7 +75,7 @@ const b1 = cube([0,0], 10)` it('gets path right for deep within function definition body', () => { const code = `fn cube = (pos, scale) => { const sg = startSketchOn(XY) - |> startProfileAt(pos, %) + |> startProfile(at = pos) |> line(end = [0, scale]) |> line(end = [scale, 0]) |> line(end = [0, -scale]) diff --git a/src/lang/modifyAst.test.ts b/src/lang/modifyAst.test.ts index 931e95052..2c758caa0 100644 --- a/src/lang/modifyAst.test.ts +++ b/src/lang/modifyAst.test.ts @@ -243,7 +243,7 @@ describe('Testing addSketchTo', () => { ) const str = recast(result.modifiedAst) expect(str).toBe(`sketch001 = startSketchOn(YZ) - |> startProfileAt('default', %) + |> startProfile(at = 'default') |> line(end = 'default') `) }) @@ -269,7 +269,7 @@ function giveSketchFnCallTagTestHelper( describe('Testing giveSketchFnCallTag', () => { const code = `part001 = startSketchOn(XY) -|> startProfileAt([0, 0], %) +|> startProfile(at = [0, 0]) |> line(end = [-2.57, -0.13]) |> line(end = [0, 0.83]) |> line(end = [0.82, 0.34])` @@ -321,7 +321,7 @@ const abc = 3 const identifierGuy = 5 yo = 5 + 6 part001 = startSketchOn(XY) -|> startProfileAt([-1.2, 4.83], %) +|> startProfile(at = [-1.2, 4.83]) |> line(end = [2.8, 0]) |> angledLine(angle = 100 + 100, length = 3.09) |> angledLine(angle = abc, length = 3.09) @@ -404,7 +404,7 @@ yo2 = hmm([identifierGuy + 5])` describe('testing sketchOnExtrudedFace', () => { test('it should be able to extrude on regular segments', async () => { const code = `part001 = startSketchOn(-XZ) - |> startProfileAt([3.58, 2.06], %) + |> startProfile(at = [3.58, 2.06]) |> line(end = [9.7, 9.19]) |> line(end = [8.62, -9.57]) |> close() @@ -434,7 +434,7 @@ describe('testing sketchOnExtrudedFace', () => { const newCode = recast(modifiedAst) expect(newCode).toContain(`part001 = startSketchOn(-XZ) - |> startProfileAt([3.58, 2.06], %) + |> startProfile(at = [3.58, 2.06]) |> line(end = [9.7, 9.19], tag = $seg01) |> line(end = [8.62, -9.57]) |> close() @@ -443,7 +443,7 @@ sketch001 = startSketchOn(part001, face = seg01)`) }) test('it should be able to extrude on close segments', async () => { const code = `part001 = startSketchOn(-XZ) - |> startProfileAt([3.58, 2.06], %) + |> startProfile(at = [3.58, 2.06]) |> line(end = [9.7, 9.19]) |> line(end = [8.62, -9.57]) |> close() @@ -472,7 +472,7 @@ sketch001 = startSketchOn(part001, face = seg01)`) const newCode = recast(modifiedAst) expect(newCode).toContain(`part001 = startSketchOn(-XZ) - |> startProfileAt([3.58, 2.06], %) + |> startProfile(at = [3.58, 2.06]) |> line(end = [9.7, 9.19]) |> line(end = [8.62, -9.57]) |> close(tag = $seg01) @@ -481,13 +481,13 @@ sketch001 = startSketchOn(part001, face = seg01)`) }) test('it should be able to extrude on start-end caps', async () => { const code = `part001 = startSketchOn(-XZ) - |> startProfileAt([3.58, 2.06], %) + |> startProfile(at = [3.58, 2.06]) |> line(end = [9.7, 9.19]) |> line(end = [8.62, -9.57]) |> close() |> extrude(length = 5 + 7)` const ast = assertParse(code) - const sketchSnippet = `startProfileAt([3.58, 2.06], %)` + const sketchSnippet = `startProfile(at = [3.58, 2.06])` const sketchRange = topLevelRange( code.indexOf(sketchSnippet), code.indexOf(sketchSnippet) + sketchSnippet.length @@ -511,7 +511,7 @@ sketch001 = startSketchOn(part001, face = seg01)`) const newCode = recast(modifiedAst) expect(newCode).toContain(`part001 = startSketchOn(-XZ) - |> startProfileAt([3.58, 2.06], %) + |> startProfile(at = [3.58, 2.06]) |> line(end = [9.7, 9.19]) |> line(end = [8.62, -9.57]) |> close() @@ -520,7 +520,7 @@ sketch001 = startSketchOn(part001, face = END)`) }) test('it should ensure that the new sketch is inserted after the extrude', async () => { const code = `sketch001 = startSketchOn(-XZ) - |> startProfileAt([3.29, 7.86], %) + |> startProfile(at = [3.29, 7.86]) |> line(end = [2.48, 2.44]) |> line(end = [2.66, 1.17]) |> line(end = [3.75, 0.46]) @@ -562,7 +562,7 @@ sketch002 = startSketchOn(part001, face = seg01)`) describe('Testing deleteSegmentFromPipeExpression', () => { it('Should delete a segment withOUT any dependent segments', async () => { const code = `part001 = startSketchOn(-XZ) - |> startProfileAt([54.78, -95.91], %) + |> startProfile(at = [54.78, -95.91]) |> line(end = [306.21, 198.82]) |> line(end = [306.21, 198.85], tag = $a) |> line(end = [306.21, 198.87])` @@ -584,7 +584,7 @@ describe('Testing deleteSegmentFromPipeExpression', () => { if (err(modifiedAst)) throw modifiedAst const newCode = recast(modifiedAst) expect(newCode).toBe(`part001 = startSketchOn(-XZ) - |> startProfileAt([54.78, -95.91], %) + |> startProfile(at = [54.78, -95.91]) |> line(end = [306.21, 198.82]) |> line(end = [306.21, 198.87]) `) @@ -595,7 +595,7 @@ describe('Testing deleteSegmentFromPipeExpression', () => { replace1 = '', replace2 = '' ) => `part001 = startSketchOn(-XZ) - |> startProfileAt([54.78, -95.91], %) + |> startProfile(at = [54.78, -95.91]) |> line(end = [306.21, 198.82], tag = $b) ${!replace1 ? ` |> ${line}\n` : ''} |> angledLine(angle = -65, length = ${ !replace1 ? 'segLen(a)' : replace1 @@ -672,7 +672,7 @@ ${!replace1 ? ` |> ${line}\n` : ''} |> angledLine(angle = -65, length = ${ describe('Testing removeSingleConstraintInfo', () => { describe('with mostly object notation', () => { const code = `part001 = startSketchOn(-XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [3 + 0, 4 + 0]) |> /*0*/ angledLine(angle = 3 + 0, length = 3.14 + 0) |> line(endAbsolute = [6.14 + 0, 3.14 + 0]) @@ -780,7 +780,7 @@ describe('Testing removeSingleConstraintInfo', () => { }) describe('with array notation', () => { const code = `part001 = startSketchOn(-XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> /*0*/ angledLine(angle = 3.14 + 0, length = 3.14 + 0) |> /*1*/ angledLine(angle = 3 + 0, lengthX = 3.14 + 0) |> /*2*/ angledLine(angle = 30 + 0, lengthY = 3 + 0) @@ -852,7 +852,7 @@ describe('Testing deleteFromSelection', () => { { codeBefore: `myVar = 5 sketch003 = startSketchOn(XZ) - |> startProfileAt([3.82, 13.6], %) + |> startProfile(at = [3.82, 13.6]) |> line(end = [-2.94, 2.7]) |> line(end = [7.7, 0.16]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -868,7 +868,7 @@ sketch003 = startSketchOn(XZ) // 'delete extrude', // { // codeBefore: `sketch001 = startSketchOn(XZ) - // |> startProfileAt([3.29, 7.86], %) + // |> startProfile(at = [3.29, 7.86]) // |> line(end = [2.48, 2.44]) // |> line(end = [2.66, 1.17]) // |> line(end = [3.75, 0.46]) @@ -878,7 +878,7 @@ sketch003 = startSketchOn(XZ) // |> close() // const extrude001 = extrude(sketch001, length = 10)`, // codeAfter: `sketch001 = startSketchOn(XZ) - // |> startProfileAt([3.29, 7.86], %) + // |> startProfile(at = [3.29, 7.86]) // |> line(end = [2.48, 2.44]) // |> line(end = [2.66, 1.17]) // |> line(end = [3.75, 0.46]) @@ -895,7 +895,7 @@ sketch003 = startSketchOn(XZ) // { // codeBefore: `myVar = 5 // sketch001 = startSketchOn(XZ) - // |> startProfileAt([4.46, 5.12], %, $tag) + // |> startProfile(at = [4.46, 5.12], tag = $tag) // |> line(end = [0.08, myVar]) // |> line(end = [13.03, 2.02], tag = $seg01) // |> line(end = [3.9, -7.6]) @@ -906,7 +906,7 @@ sketch003 = startSketchOn(XZ) // |> close() // const extrude001 = extrude(sketch001, length = 5) // sketch002 = startSketchOn(extrude001, face = seg01) - // |> startProfileAt([-12.55, 2.89], %) + // |> startProfile(at = [-12.55, 2.89]) // |> line(end = [3.02, 1.9]) // |> line(end = [1.82, -1.49], tag = $seg02) // |> angledLine(angle = -86, length = segLen(seg02)) @@ -916,7 +916,7 @@ sketch003 = startSketchOn(XZ) // |> close()`, // codeAfter: `myVar = 5 // sketch001 = startSketchOn(XZ) - // |> startProfileAt([4.46, 5.12], %, $tag) + // |> startProfile(at = [4.46, 5.12], tag = $tag) // |> line(end = [0.08, myVar]) // |> line(end = [13.03, 2.02], tag = $seg01) // |> line(end = [3.9, -7.6]) @@ -931,7 +931,7 @@ sketch003 = startSketchOn(XZ) // yAxis = { x = 7, y = 8, z = 9 }, // zAxis = { x = 10, y = 11, z = 12 } // }) - // |> startProfileAt([-12.55, 2.89], %) + // |> startProfile(at = [-12.55, 2.89]) // |> line(end = [3.02, 1.9]) // |> line(end = [1.82, -1.49], tag = $seg02) // |> angledLine(angle = -86, length = segLen(seg02)) @@ -949,7 +949,7 @@ sketch003 = startSketchOn(XZ) // { // codeBefore: `myVar = 5 // sketch001 = startSketchOn(XZ) - // |> startProfileAt([4.46, 5.12], %, $tag) + // |> startProfile(at = [4.46, 5.12], tag = $tag) // |> line(end = [0.08, myVar]) // |> line(end = [13.03, 2.02], tag = $seg01) // |> line(end = [3.9, -7.6]) @@ -960,7 +960,7 @@ sketch003 = startSketchOn(XZ) // |> close() // const extrude001 = extrude(sketch001, length = 5) // sketch002 = startSketchOn(extrude001, face = seg01) - // |> startProfileAt([-12.55, 2.89], %) + // |> startProfile(at = [-12.55, 2.89]) // |> line(end = [3.02, 1.9]) // |> line(end = [1.82, -1.49], tag = $seg02) // |> angledLine(angle = -86, length = segLen(seg02)) @@ -970,7 +970,7 @@ sketch003 = startSketchOn(XZ) // |> close()`, // codeAfter: `myVar = 5 // sketch001 = startSketchOn(XZ) - // |> startProfileAt([4.46, 5.12], %, $tag) + // |> startProfile(at = [4.46, 5.12], tag = $tag) // |> line(end = [0.08, myVar]) // |> line(end = [13.03, 2.02], tag = $seg01) // |> line(end = [3.9, -7.6]) @@ -985,7 +985,7 @@ sketch003 = startSketchOn(XZ) // yAxis = { x = 7, y = 8, z = 9 }, // zAxis = { x = 10, y = 11, z = 12 } // }) - // |> startProfileAt([-12.55, 2.89], %) + // |> startProfile(at = [-12.55, 2.89]) // |> line(end = [3.02, 1.9]) // |> line(end = [1.82, -1.49], tag = $seg02) // |> angledLine(angle = -86, length = segLen(seg02)) @@ -994,7 +994,7 @@ sketch003 = startSketchOn(XZ) // |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) // |> close() // `, - // lineOfInterest: 'startProfileAt([4.46, 5.12], %, $tag)', + // lineOfInterest: 'startProfile(at = [4.46, 5.12], tag = $tag)', // type: 'cap', // }, // ], @@ -1041,7 +1041,7 @@ describe('Testing splitPipedProfile', () => { it('should split the pipe expression correctly', () => { const codeBefore = `// comment 1 part001 = startSketchOn(XZ) - |> startProfileAt([1, 2], %) + |> startProfile(at = [1, 2]) // comment 2 |> line([3, 4], %) |> line([5, 6], %) @@ -1052,7 +1052,7 @@ extrude001 = extrude(5, part001) const expectedCodeAfter = `// comment 1 sketch001 = startSketchOn(XZ) -part001 = startProfileAt([1, 2], sketch001) +part001 = startProfile(sketch001, at = [1, 2]) // comment 2 |> line([3, 4], %) |> line([5, 6], %) @@ -1081,7 +1081,7 @@ extrude001 = extrude(5, part001) }) it('should return error for already split pipe', () => { const codeBefore = `sketch001 = startSketchOn(XZ) -part001 = startProfileAt([1, 2], sketch001) +part001 = startProfile(sketch001, at = [1, 2]) |> line([3, 4], %) |> line([5, 6], %) |> close(%) @@ -1090,7 +1090,7 @@ extrude001 = extrude(5, part001) const ast = assertParse(codeBefore) - const codeOfInterest = `startProfileAt([1, 2], sketch001)` + const codeOfInterest = `startProfile(sketch001, at = [1, 2])` const range: [number, number, number] = [ codeBefore.indexOf(codeOfInterest), codeBefore.indexOf(codeOfInterest) + codeOfInterest.length, diff --git a/src/lang/modifyAst.ts b/src/lang/modifyAst.ts index 98d525a99..4aa1df21f 100644 --- a/src/lang/modifyAst.ts +++ b/src/lang/modifyAst.ts @@ -18,7 +18,6 @@ import { createLocalName, createObjectExpression, createPipeExpression, - createPipeSubstitution, createVariableDeclaration, findUniqueName, } from '@src/lang/create' @@ -92,6 +91,7 @@ import type { Selection } from '@src/lib/selections' import { err, reportRejection, trap } from '@src/lib/trap' import { isArray, isOverlap, roundOff } from '@src/lib/utils' import type { ExtrudeFacePlane } from '@src/machines/modelingMachine' +import { ARG_AT } from '@src/lang/constants' export function startSketchOnDefault( node: Node, @@ -150,13 +150,19 @@ export function insertNewStartProfileAt( const newExpression = createVariableDeclaration( findUniqueName(node, 'profile'), - createCallExpressionStdLib('startProfileAt', [ - createArrayExpression([ - createLiteral(roundOff(at[0])), - createLiteral(roundOff(at[1])), - ]), + createCallExpressionStdLibKw( + 'startProfile', createLocalName(varDec.node.id.name), - ]) + [ + createLabeledArg( + ARG_AT, + createArrayExpression([ + createLiteral(roundOff(at[0])), + createLiteral(roundOff(at[1])), + ]) + ), + ] + ) ) const insertIndex = getInsertIndex(sketchNodePaths, planeNodePath, insertType) @@ -191,9 +197,8 @@ export function addSketchTo( createLiteral(axis.toUpperCase()), [] ) - const startProfileAt = createCallExpressionStdLib('startProfileAt', [ - createLiteral('default'), - createPipeSubstitution(), + const startProfile = createCallExpressionStdLibKw('startProfile', null, [ + createLabeledArg(ARG_AT, createLiteral('default')), ]) const initialLineTo = createCallExpressionStdLibKw( 'line', @@ -201,7 +206,7 @@ export function addSketchTo( [createLabeledArg('end', createLiteral('default'))] ) - const pipeBody = [startSketchOn, startProfileAt, initialLineTo] + const pipeBody = [startSketchOn, startProfile, initialLineTo] const variableDeclaration = createVariableDeclaration( _name, @@ -1423,6 +1428,7 @@ export async function deleteFromSelection( extrudeNameToDelete = dec.id.name } if ( + // TODO: This is wrong, loft is now a CallExpressionKw. dec.init.type === 'CallExpression' && dec.init.callee.name.name === 'loft' && dec.init.arguments?.[0].type === 'ArrayExpression' && @@ -1441,11 +1447,14 @@ export async function deleteFromSelection( pathToNode = selection.codeRef.pathToNode if (varDec.node.type === 'VariableDeclarator') { extrudeNameToDelete = varDec.node.id.name - } else if (varDec.node.type === 'CallExpression') { - const callExp = getNodeFromPath( + } else if ( + varDec.node.type === 'CallExpression' || + varDec.node.type === 'CallExpressionKw' + ) { + const callExp = getNodeFromPath( astClone, pathToNode, - 'CallExpression' + ['CallExpression', 'CallExpressionKw'] ) if (err(callExp)) return callExp extrudeNameToDelete = callExp.node.callee.name.name @@ -1646,7 +1655,7 @@ export async function deleteFromSelection( pipeBody[0].type === 'CallExpressionKw') && doNotDeleteProfileIfItHasBeenExtruded && (pipeBody[0].callee.name.name === 'startSketchOn' || - pipeBody[0].callee.name.name === 'startProfileAt') + pipeBody[0].callee.name.name === 'startProfile') ) { // remove varDec const varDecIndex = varDec.shallowPath[1][0] as number @@ -1749,7 +1758,7 @@ export function updateSketchNodePathsWithInsertIndex({ * Split the following pipe expression into * ```ts * part001 = startSketchOn(XZ) - |> startProfileAt([1, 2], %) + |> startProfile(at = [1, 2]) |> line([3, 4], %) |> line([5, 6], %) |> close(%) @@ -1758,7 +1767,7 @@ extrude001 = extrude(5, part001) into ```ts sketch001 = startSketchOn(XZ) -part001 = startProfileAt([1, 2], sketch001) +part001 = startProfile(sketch001, at = [1, 2]) |> line([3, 4], %) |> line([5, 6], %) |> close(%) @@ -1796,7 +1805,7 @@ export function splitPipedProfile( if (!isCallExprWithName(firstCall, 'startSketchOn')) return new Error('First call is not startSketchOn') const secondCall = init.body[1] - if (!isCallExprWithName(secondCall, 'startProfileAt')) + if (!isCallExprWithName(secondCall, 'startProfile')) return new Error('Second call is not startProfileAt') const varName = varDec.node.declaration.id.name @@ -1821,14 +1830,14 @@ export function splitPipedProfile( if ( !( profileBrokenIntoItsOwnVar.declaration.init.body[0].type === - 'CallExpression' && + 'CallExpressionKw' && profileBrokenIntoItsOwnVar.declaration.init.body[0].callee.name.name === - 'startProfileAt' + 'startProfile' ) ) { return new Error('problem breaking pipe, expect startProfileAt to be first') } - profileBrokenIntoItsOwnVar.declaration.init.body[0].arguments[1] = + profileBrokenIntoItsOwnVar.declaration.init.body[0].unlabeled = createLocalName(newVarName) profileBrokenIntoItsOwnVar.declaration.id.name = varName profileBrokenIntoItsOwnVar.preComments = [] // we'll duplicate the comments since the new variable will have it to diff --git a/src/lang/modifyAst/addEdgeTreatment.test.ts b/src/lang/modifyAst/addEdgeTreatment.test.ts index b35103c06..7c86739dd 100644 --- a/src/lang/modifyAst/addEdgeTreatment.test.ts +++ b/src/lang/modifyAst/addEdgeTreatment.test.ts @@ -181,7 +181,7 @@ const runGetPathToExtrudeForSegmentSelectionTest = async ( describe('Testing getPathToExtrudeForSegmentSelection', () => { it('should return the correct paths for a valid selection and extrusion', async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0]) @@ -198,7 +198,7 @@ extrude001 = extrude(sketch001, length = -15)` }, 5_000) it('should return the correct paths when extrusion occurs within the sketch pipe', async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0]) @@ -215,21 +215,21 @@ extrude001 = extrude(sketch001, length = -15)` }, 5_000) it('should return the correct paths for a valid selection and extrusion in case of several extrusions and sketches', async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-30, 30], %) + |> startProfile(at = [-30, 30]) |> line(end = [15, 0]) |> line(end = [0, -15]) |> line(end = [-15, 0]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch002 = startSketchOn(XY) - |> startProfileAt([30, 30], %) + |> startProfile(at = [30, 30]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch003 = startSketchOn(XY) - |> startProfileAt([30, -30], %) + |> startProfile(at = [30, -30]) |> line(end = [25, 0]) |> line(end = [0, -25]) |> line(end = [-25, 0]) @@ -248,7 +248,7 @@ extrude003 = extrude(sketch003, length = -15)` }) it('should return the correct paths for a (piped) extrude based on the other body (face)', async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-25, -25], %) + |> startProfile(at = [-25, -25]) |> yLine(length = 50) |> xLine(length = 50) |> yLine(length = -50) @@ -256,7 +256,7 @@ extrude003 = extrude(sketch003, length = -15)` |> close() |> extrude(length = 50) sketch002 = startSketchOn(sketch001, face = 'END') - |> startProfileAt([-15, -15], %) + |> startProfile(at = [-15, -15]) |> yLine(length = 30) |> xLine(length = 30) |> yLine(length = -30) @@ -273,7 +273,7 @@ sketch002 = startSketchOn(sketch001, face = 'END') }) it('should return the correct paths for a (non-piped) extrude based on the other body (face)', async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-25, -25], %) + |> startProfile(at = [-25, -25]) |> yLine(length = 50) |> xLine(length = 50) |> yLine(length = -50) @@ -281,7 +281,7 @@ sketch002 = startSketchOn(sketch001, face = 'END') |> close() extrude001 = extrude(sketch001, length = 50) sketch002 = startSketchOn(extrude001, face = 'END') - |> startProfileAt([-15, -15], %) + |> startProfile(at = [-15, -15]) |> yLine(length = 30) |> xLine(length = 30) |> yLine(length = -30) @@ -298,21 +298,21 @@ extrude002 = extrude(sketch002, length = 30)` }) it('should not return any path for missing extrusion', async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-30, 30], %) + |> startProfile(at = [-30, 30]) |> line(end = [15, 0]) |> line(end = [0, -15]) |> line(end = [-15, 0]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch002 = startSketchOn(XY) - |> startProfileAt([30, 30], %) + |> startProfile(at = [30, 30]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch003 = startSketchOn(XY) - |> startProfileAt([30, -30], %) + |> startProfile(at = [30, -30]) |> line(end = [25, 0]) |> line(end = [0, -25]) |> line(end = [-25, 0]) @@ -458,7 +458,7 @@ Object.values(EdgeTreatmentType).forEach( describe(`Testing modifyAstCloneWithEdgeTreatmentAndTag with ${edgeTreatmentType}s`, () => { it(`should add a ${edgeTreatmentType} to a specific segment`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0]) @@ -467,7 +467,7 @@ Object.values(EdgeTreatmentType).forEach( extrude001 = extrude(sketch001, length = -15)` const segmentSnippets = ['line(end = [0, -20])'] const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20], tag = $seg01) |> line(end = [-20, 0]) @@ -485,7 +485,7 @@ extrude001 = extrude(sketch001, length = -15) }) it(`should add a ${edgeTreatmentType} to the sketch pipe`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0]) @@ -494,7 +494,7 @@ extrude001 = extrude(sketch001, length = -15) |> extrude(length = -15)` const segmentSnippets = ['line(end = [0, -20])'] const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20], tag = $seg01) |> line(end = [-20, 0]) @@ -512,7 +512,7 @@ extrude001 = extrude(sketch001, length = -15) }) it(`should add a ${edgeTreatmentType} to an already tagged segment`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20], tag = $seg01) |> line(end = [-20, 0]) @@ -521,7 +521,7 @@ extrude001 = extrude(sketch001, length = -15) extrude001 = extrude(sketch001, length = -15)` const segmentSnippets = ['line(end = [0, -20], tag = $seg01)'] const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20], tag = $seg01) |> line(end = [-20, 0]) @@ -539,7 +539,7 @@ extrude001 = extrude(sketch001, length = -15) }) it(`should add a ${edgeTreatmentType} with existing tag on other segment`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, -20]) |> line(end = [-20, 0]) @@ -548,7 +548,7 @@ extrude001 = extrude(sketch001, length = -15) extrude001 = extrude(sketch001, length = -15)` const segmentSnippets = ['line(end = [-20, 0])'] const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg02) @@ -566,7 +566,7 @@ extrude001 = extrude(sketch001, length = -15) }) it(`should add a ${edgeTreatmentType} with existing fillet on other segment`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, -20]) |> line(end = [-20, 0]) @@ -576,7 +576,7 @@ extrude001 = extrude(sketch001, length = -15) |> fillet( radius = 5, tags = [seg01] )` const segmentSnippets = ['line(end = [-20, 0])'] const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg02) @@ -595,7 +595,7 @@ extrude001 = extrude(sketch001, length = -15) }) it(`should add a ${edgeTreatmentType} with existing chamfer on other segment`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, -20]) |> line(end = [-20, 0]) @@ -605,7 +605,7 @@ extrude001 = extrude(sketch001, length = -15) |> chamfer(length = 5, tags = [seg01])` const segmentSnippets = ['line(end = [-20, 0])'] const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg02) @@ -624,7 +624,7 @@ extrude001 = extrude(sketch001, length = -15) }) it(`should add a ${edgeTreatmentType} to two segments of a single extrusion`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0]) @@ -633,7 +633,7 @@ extrude001 = extrude(sketch001, length = -15) extrude001 = extrude(sketch001, length = -15)` const segmentSnippets = ['line(end = [20, 0])', 'line(end = [-20, 0])'] const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg02) @@ -651,7 +651,7 @@ extrude001 = extrude(sketch001, length = -15) }) it(`should add ${edgeTreatmentType}s to two bodies`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0]) @@ -659,7 +659,7 @@ extrude001 = extrude(sketch001, length = -15) |> close() extrude001 = extrude(sketch001, length = -15) sketch002 = startSketchOn(XY) - |> startProfileAt([30, 10], %) + |> startProfile(at = [30, 10]) |> line(end = [15, 0]) |> line(end = [0, -15]) |> line(end = [-15, 0]) @@ -672,7 +672,7 @@ extrude002 = extrude(sketch002, length = -25)` // <--- body 2 'line(end = [0, -15])', ] const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg02) @@ -681,7 +681,7 @@ extrude002 = extrude(sketch002, length = -25)` // <--- body 2 extrude001 = extrude(sketch001, length = -15) |> ${edgeTreatmentType}(${parameterName} = 3, tags = [seg01, seg02]) sketch002 = startSketchOn(XY) - |> startProfileAt([30, 10], %) + |> startProfile(at = [30, 10]) |> line(end = [15, 0]) |> line(end = [0, -15], tag = $seg03) |> line(end = [-15, 0]) @@ -702,7 +702,7 @@ extrude002 = extrude(sketch002, length = -25) // simple cases it(`should delete a piped ${edgeTreatmentType} from a single segment`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg01) @@ -712,7 +712,7 @@ extrude001 = extrude(sketch001, length = -15) |> ${edgeTreatmentType}(${parameterName} = 3, tags = [seg01])` const edgeTreatmentSnippet = `${edgeTreatmentType}(${parameterName} = 3, tags = [seg01])` const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg01) @@ -728,7 +728,7 @@ extrude001 = extrude(sketch001, length = -15)` }) it(`should delete a non-piped ${edgeTreatmentType} from a single segment`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg01) @@ -738,7 +738,7 @@ extrude001 = extrude(sketch001, length = -15) fillet001 = ${edgeTreatmentType}(extrude001, ${parameterName} = 3, tags = [seg01])` const edgeTreatmentSnippet = `fillet001 = ${edgeTreatmentType}(extrude001, ${parameterName} = 3, tags = [seg01])` const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg01) @@ -755,7 +755,7 @@ extrude001 = extrude(sketch001, length = -15)` // getOppositeEdge and getNextAdjacentEdge cases it(`should delete a piped ${edgeTreatmentType} tagged with getOppositeEdge`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg01) @@ -765,7 +765,7 @@ extrude001 = extrude(sketch001, length = -15) fillet001 = ${edgeTreatmentType}(extrude001, ${parameterName} = 3, tags = [getOppositeEdge(seg01)])` const edgeTreatmentSnippet = `fillet001 = ${edgeTreatmentType}(extrude001, ${parameterName} = 3, tags = [getOppositeEdge(seg01)])` const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg01) @@ -781,7 +781,7 @@ extrude001 = extrude(sketch001, length = -15)` }) it(`should delete a non-piped ${edgeTreatmentType} tagged with getNextAdjacentEdge`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg01) @@ -791,7 +791,7 @@ extrude001 = extrude(sketch001, length = -15) fillet001 = ${edgeTreatmentType}(extrude001, ${parameterName} = 3, tags = [getNextAdjacentEdge(seg01)])` const edgeTreatmentSnippet = `fillet001 = ${edgeTreatmentType}(extrude001, ${parameterName} = 3, tags = [getNextAdjacentEdge(seg01)])` const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg01) @@ -808,7 +808,7 @@ extrude001 = extrude(sketch001, length = -15)` // cases with several edge treatments it(`should delete a piped ${edgeTreatmentType} from a body with multiple treatments`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg02) @@ -821,7 +821,7 @@ fillet001 = ${edgeTreatmentType}(extrude001, ${parameterName} = 6, tags = [seg02 chamfer001 = chamfer(extrude001, length = 5, tags = [getOppositeEdge(seg01)])` const edgeTreatmentSnippet = `${edgeTreatmentType}(${parameterName} = 3, tags = [seg01])` const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg02) @@ -840,7 +840,7 @@ chamfer001 = chamfer(extrude001, length = 5, tags = [getOppositeEdge(seg01)])` }) it(`should delete a non-piped ${edgeTreatmentType} from a body with multiple treatments`, async () => { const code = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg02) @@ -853,7 +853,7 @@ fillet001 = ${edgeTreatmentType}(extrude001, ${parameterName} = 6, tags = [seg02 chamfer001 = chamfer(extrude001, length = 5, tags = [getOppositeEdge(seg01)])` const edgeTreatmentSnippet = `fillet001 = ${edgeTreatmentType}(extrude001, ${parameterName} = 6, tags = [seg02])` const expectedCode = `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0], tag = $seg01) |> line(end = [0, -20]) |> line(end = [-20, 0], tag = $seg02) @@ -876,7 +876,7 @@ chamfer001 = chamfer(extrude001, length = 5, tags = [getOppositeEdge(seg01)])` describe('Testing isTagUsedInEdgeTreatment', () => { const code = `sketch001 = startSketchOn(XZ) - |> startProfileAt([7.72, 4.13], %) + |> startProfile(at = [7.72, 4.13]) |> line(end = [7.11, 3.48], tag = $seg01) |> line(end = [-3.29, -13.85]) |> line(end = [-6.37, 3.88], tag = $seg02) @@ -980,7 +980,7 @@ describe('Testing button states', () => { } const codeWithBody: string = ` sketch001 = startSketchOn(XY) - |> startProfileAt([-20, -5], %) + |> startProfile(at = [-20, -5]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) @@ -990,7 +990,7 @@ describe('Testing button states', () => { ` const codeWithoutBodies: string = ` sketch001 = startSketchOn(XY) - |> startProfileAt([-20, -5], %) + |> startProfile(at = [-20, -5]) |> line(end = [0, 10]) |> line(end = [10, 0]) |> line(end = [0, -10]) diff --git a/src/lang/queryAst.test.ts b/src/lang/queryAst.test.ts index edf63fd06..f6d0716f2 100644 --- a/src/lang/queryAst.test.ts +++ b/src/lang/queryAst.test.ts @@ -45,7 +45,7 @@ arrExpShouldNotBeIncluded = [1, 2, 3] objExpShouldNotBeIncluded = { a: 1, b: 2, c: 3 } part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> yLine(endAbsolute = 1) |> xLine(length = 3.84) // selection-range-7ish-before-this @@ -76,7 +76,7 @@ variableBelowShouldNotBeIncluded = 3 describe('testing argIsNotIdentifier', () => { const code = `part001 = startSketchOn(XY) -|> startProfileAt([-1.2, 4.83], %) +|> startProfile(at = [-1.2, 4.83]) |> line(end = [2.8, 0]) |> angledLine(angle = 100 + 100, length = 3.09) |> angledLine(angle = abc, length = 3.09) @@ -236,7 +236,7 @@ yo2 = hmm([identifierGuy + 5])` describe('testing getNodePathFromSourceRange', () => { const code = `part001 = startSketchOn(XY) - |> startProfileAt([0.39, -0.05], %) + |> startProfile(at = [0.39, -0.05]) |> line(end = [0.94, 2.61]) |> line(end = [-0.21, -1.4])` it('finds the second line when cursor is put at the end', () => { @@ -380,7 +380,7 @@ describe('testing hasExtrudeSketch', () => { it('find sketch', async () => { const exampleCode = `length001 = 2 part001 = startSketchOn(XY) - |> startProfileAt([-1.41, 3.46], %) + |> startProfile(at = [-1.41, 3.46]) |> line(end = [19.49, 1.16], tag = $seg01) |> angledLine(angle = -35, length = length001) |> line(end = [-3.22, -7.36]) @@ -400,7 +400,7 @@ part001 = startSketchOn(XY) it('find solid', async () => { const exampleCode = `length001 = 2 part001 = startSketchOn(XY) - |> startProfileAt([-1.41, 3.46], %) + |> startProfile(at = [-1.41, 3.46]) |> line(end = [19.49, 1.16], tag = $seg01) |> angledLine(angle = -35, length = length001) |> line(end = [-3.22, -7.36]) @@ -436,7 +436,7 @@ part001 = startSketchOn(XY) describe('Testing findUsesOfTagInPipe', () => { const exampleCode = `part001 = startSketchOn(-XZ) -|> startProfileAt([68.12, 156.65], %) +|> startProfile(at = [68.12, 156.65]) |> line(end = [306.21, 198.82]) |> line(end = [306.21, 198.85], tag = $seg01) |> angledLine(angle = -65, length = segLen(seg01)) @@ -475,7 +475,7 @@ describe('Testing findUsesOfTagInPipe', () => { describe('Testing hasSketchPipeBeenExtruded', () => { const exampleCode = `sketch001 = startSketchOn(XZ) - |> startProfileAt([3.29, 7.86], %) + |> startProfile(at = [3.29, 7.86]) |> line(end = [2.48, 2.44]) |> line(end = [2.66, 1.17]) |> line(end = [3.75, 0.46]) @@ -489,13 +489,13 @@ describe('Testing hasSketchPipeBeenExtruded', () => { |> close() extrude001 = extrude(sketch001, length = 10) sketch002 = startSketchOn(extrude001, face = seg01) - |> startProfileAt([-12.94, 6.6], %) + |> startProfile(at = [-12.94, 6.6]) |> line(end = [2.45, -0.2]) |> line(end = [-2, -1.25]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch003 = startSketchOn(extrude001, face = 'END') - |> startProfileAt([8.14, 2.8], %) + |> startProfile(at = [8.14, 2.8]) |> line(end = [-1.24, 4.39]) |> line(end = [3.79, 1.91]) |> line(end = [1.77, -2.95]) @@ -559,14 +559,14 @@ sketch003 = startSketchOn(extrude001, face = 'END') describe('Testing doesSceneHaveSweepableSketch', () => { it('finds sketch001 pipe to be extruded', async () => { const exampleCode = `sketch001 = startSketchOn(XZ) - |> startProfileAt([3.29, 7.86], %) + |> startProfile(at = [3.29, 7.86]) |> line(end = [2.48, 2.44]) |> line(end = [-3.86, -2.73]) |> line(end = [-17.67, 0.85]) |> close() extrude001 = extrude(sketch001, length = 10) sketch002 = startSketchOn(extrude001, face = $seg01) - |> startProfileAt([-12.94, 6.6], %) + |> startProfile(at = [-12.94, 6.6]) |> line(end = [2.45, -0.2]) |> line(end = [-2, -1.25]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -589,7 +589,7 @@ sketch002 = startSketchOn(plane001) }) it('should recognize that sketch001 has been extruded', async () => { const exampleCode = `sketch001 = startSketchOn(XZ) - |> startProfileAt([3.29, 7.86], %) + |> startProfile(at = [3.29, 7.86]) |> line(end = [2.48, 2.44]) |> line(end = [-3.86, -2.73]) |> line(end = [-17.67, 0.85]) @@ -644,7 +644,7 @@ describe('Testing traverse and pathToNode', () => { ])('testing %s', async (testName, literalOfInterest) => { const code = `myVar = 5 sketch001 = startSketchOn(XZ) - |> startProfileAt([3.29, 7.86], %) + |> startProfile(at = [3.29, 7.86]) |> line(end = [2.48, 2.44]) |> line(end = [-3.86, -2.73]) |> line(end = [-17.67, 0.85]) @@ -686,7 +686,7 @@ myNestedVar = [ describe('Testing specific sketch getNodeFromPath workflow', () => { it('should parse the code', () => { const openSketch = `sketch001 = startSketchOn(XZ) -|> startProfileAt([0.02, 0.22], %) +|> startProfile(at = [0.02, 0.22]) |> xLine(length = 0.39) |> line([0.02, -0.17], %) |> yLine(length = -0.15) @@ -700,7 +700,7 @@ describe('Testing specific sketch getNodeFromPath workflow', () => { }) it('should find the location to add new lineTo', () => { const openSketch = `sketch001 = startSketchOn(XZ) -|> startProfileAt([0.02, 0.22], %) +|> startProfile(at = [0.02, 0.22]) |> xLine(length = 0.39) |> line([0.02, -0.17], %) |> yLine(length = -0.15) @@ -710,7 +710,7 @@ describe('Testing specific sketch getNodeFromPath workflow', () => { |> line([-0.08, 0.05], %)` const ast = assertParse(openSketch) - const sketchSnippet = `startProfileAt([0.02, 0.22], %)` + const sketchSnippet = `startProfile(at = [0.02, 0.22])` const sketchRange = topLevelRange( openSketch.indexOf(sketchSnippet), openSketch.indexOf(sketchSnippet) + sketchSnippet.length @@ -740,7 +740,7 @@ describe('Testing specific sketch getNodeFromPath workflow', () => { if (err(modifiedAst)) throw modifiedAst const recasted = recast(modifiedAst) const expectedCode = `sketch001 = startSketchOn(XZ) - |> startProfileAt([0.02, 0.22], %) + |> startProfile(at = [0.02, 0.22]) |> xLine(length = 0.39) |> line([0.02, -0.17], %) |> yLine(length = -0.15) @@ -754,7 +754,7 @@ describe('Testing specific sketch getNodeFromPath workflow', () => { }) it('it should find the location to add close', () => { const openSketch = `sketch001 = startSketchOn(XZ) -|> startProfileAt([0.02, 0.22], %) +|> startProfile(at = [0.02, 0.22]) |> xLine(length = 0.39) |> line([0.02, -0.17], %) |> yLine(length = -0.15) @@ -765,7 +765,7 @@ describe('Testing specific sketch getNodeFromPath workflow', () => { |> lineTo([profileStartX(%), profileStartY(%)], %) ` const ast = assertParse(openSketch) - const sketchSnippet = `startProfileAt([0.02, 0.22], %)` + const sketchSnippet = `startProfile(at = [0.02, 0.22])` const sketchRange = topLevelRange( openSketch.indexOf(sketchSnippet), openSketch.indexOf(sketchSnippet) + sketchSnippet.length @@ -780,7 +780,7 @@ describe('Testing specific sketch getNodeFromPath workflow', () => { if (err(modifiedAst)) throw modifiedAst const recasted = recast(modifiedAst) const expectedCode = `sketch001 = startSketchOn(XZ) - |> startProfileAt([0.02, 0.22], %) + |> startProfile(at = [0.02, 0.22]) |> xLine(length = 0.39) |> line([0.02, -0.17], %) |> yLine(length = -0.15) diff --git a/src/lang/queryAst.ts b/src/lang/queryAst.ts index 083c7706f..c70b883c1 100644 --- a/src/lang/queryAst.ts +++ b/src/lang/queryAst.ts @@ -816,7 +816,7 @@ export function doesSceneHaveSweepableSketch(ast: Node, count = 1) { if ( (pipe.type === 'CallExpressionKw' || pipe.type === 'CallExpression') && - pipe.callee.name.name === 'startProfileAt' + pipe.callee.name.name === 'startProfile' ) { hasStartProfileAt = true } @@ -964,7 +964,7 @@ export function doesSketchPipeNeedSplitting( if (!firstPipe || !secondPipe) return false if ( isCallExprWithName(firstPipe, 'startSketchOn') && - isCallExprWithName(secondPipe, 'startProfileAt') + isCallExprWithName(secondPipe, 'startProfile') ) return true return false diff --git a/src/lang/queryAst/getSafeInsertIndex.test.ts b/src/lang/queryAst/getSafeInsertIndex.test.ts index 3dd4c093f..b7f6af92f 100644 --- a/src/lang/queryAst/getSafeInsertIndex.test.ts +++ b/src/lang/queryAst/getSafeInsertIndex.test.ts @@ -16,7 +16,7 @@ z = x + y`) }) it(`expression with no identifiers in longer program`, () => { const baseProgram = assertParse(`x = 5 + 2 - profile001 = startProfileAt([0.07, 0], sketch001) + profile001 = startProfile(sketch001, at = [0.07, 0]) |> angledLine(angle = 0, length = x, tag = $a) |> angledLine(angle = segAng(a) + 90, length = 5) |> angledLine(angle = segAng(a), length = -segLen(a)) @@ -41,7 +41,7 @@ z = x + y`) }) it(`expression with a tag declarator add to end`, () => { const baseProgram = assertParse(`x = 5 + 2 - profile001 = startProfileAt([0.07, 0], sketch001) + profile001 = startProfile(sketch001, at = [0.07, 0]) |> angledLine(angle = 0, length = x, tag = $a) |> angledLine(angle = segAng(a) + 90, length = 5) |> angledLine(angle = segAng(a), length = -segLen(a)) @@ -52,7 +52,7 @@ z = x + y`) }) it(`expression with a tag declarator and variable in the middle`, () => { const baseProgram = assertParse(`x = 5 + 2 - profile001 = startProfileAt([0.07, 0], sketch001) + profile001 = startProfile(sketch001, at = [0.07, 0]) |> angledLine(angle = 0, length = x, tag = $a) |> angledLine(angle = segAng(a) + 90, length = 5) |> angledLine(angle = segAng(a), length = -segLen(a)) diff --git a/src/lang/queryAst/getTagDeclaratorsInProgram.test.ts b/src/lang/queryAst/getTagDeclaratorsInProgram.test.ts index 1db2a8575..de8e54a6f 100644 --- a/src/lang/queryAst/getTagDeclaratorsInProgram.test.ts +++ b/src/lang/queryAst/getTagDeclaratorsInProgram.test.ts @@ -32,14 +32,14 @@ describe(`getTagDeclaratorsInProgram`, () => { it(`finds a single tag declarators in a small program`, () => { const tagDeclarators = getTagDeclaratorsInProgram( assertParse(`sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([0, 0], sketch001) +profile001 = startProfile(sketch001, at = [0, 0]) |> angledLine(angle = 0, length = 11, tag = $a)`) ) - expect(tagDeclarators).toEqual([tagDeclaratorWithIndex('a', 123, 125, 1)]) + expect(tagDeclarators).toEqual([tagDeclaratorWithIndex('a', 126, 128, 1)]) }) it(`finds multiple tag declarators in a small program`, () => { const program = `sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([0.07, 0], sketch001) +profile001 = startProfile(sketch001, at = [0.07, 0]) |> angledLine(angle = 0, length = 11, tag = $a) |> angledLine(angle = segAng(a) + 90, length = 11.17, tag = $b) |> angledLine(angle = segAng(a), length = -segLen(a), tag = $c) @@ -47,14 +47,14 @@ profile001 = startProfileAt([0.07, 0], sketch001) |> close()` const tagDeclarators = getTagDeclaratorsInProgram(assertParse(program)) expect(tagDeclarators).toEqual([ - tagDeclaratorWithIndex('a', 126, 128, 1), - tagDeclaratorWithIndex('b', 192, 194, 1), - tagDeclaratorWithIndex('c', 258, 260, 1), + tagDeclaratorWithIndex('a', 129, 131, 1), + tagDeclaratorWithIndex('b', 195, 197, 1), + tagDeclaratorWithIndex('c', 261, 263, 1), ]) }) it(`finds tag declarators at different indices`, () => { const program = `sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([0.07, 0], sketch001) +profile001 = startProfile(sketch001, at = [0.07, 0]) |> angledLine(angle = 0, length = 11, tag = $a) profile002 = angledLine(profile001, angle = segAng(a) + 90, length = 11.17, tag = $b) |> angledLine(angle = segAng(a), length = -segLen(a), tag = $c) @@ -62,9 +62,9 @@ profile002 = angledLine(profile001, angle = segAng(a) + 90, length = 11.17, tag |> close()` const tagDeclarators = getTagDeclaratorsInProgram(assertParse(program)) expect(tagDeclarators).toEqual([ - tagDeclaratorWithIndex('a', 126, 128, 1), - tagDeclaratorWithIndex('b', 212, 214, 2), - tagDeclaratorWithIndex('c', 278, 280, 2), + tagDeclaratorWithIndex('a', 129, 131, 1), + tagDeclaratorWithIndex('b', 215, 217, 2), + tagDeclaratorWithIndex('c', 281, 283, 2), ]) }) }) diff --git a/src/lang/recast.test.ts b/src/lang/recast.test.ts index d5b4b73e7..916e8937a 100644 --- a/src/lang/recast.test.ts +++ b/src/lang/recast.test.ts @@ -79,7 +79,7 @@ log(5, myVar) }) it('recast sketch declaration', () => { let code = `mySketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [0, 1], tag = $myPath) |> line(endAbsolute = [1, 1]) |> line(endAbsolute = [1, 0], tag = $rightPath) @@ -93,7 +93,7 @@ log(5, myVar) it('sketch piped into callExpression', () => { const code = [ 'mySk1 = startSketchOn(XY)', - ' |> startProfileAt([0, 0], %)', + ' |> startProfile(at = [0, 0])', ' |> line(endAbsolute = [1, 1])', ' |> line(endAbsolute = [0, 1], tag = $myTag)', ' |> line(endAbsolute = [1, 1])', @@ -239,7 +239,7 @@ key = 'c' it('comments in a pipe expression', () => { const code = [ 'mySk1 = startSketchOn(XY)', - ' |> startProfileAt([0, 0], %)', + ' |> startProfile(at = [0, 0])', ' |> line(endAbsolute = [1, 1])', ' |> line(endAbsolute = [0, 1], tag = $myTag)', ' |> line(endAbsolute = [1, 1])', @@ -256,7 +256,7 @@ key = 'c' /* comment at start */ mySk1 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [1, 1]) // comment here |> line(endAbsolute = [0, 1], tag = $myTag) @@ -280,7 +280,7 @@ one more for good measure expect(recasted).toBe(`/* comment at start */ mySk1 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [1, 1]) // comment here |> line(endAbsolute = [0, 1], tag = $myTag) @@ -321,7 +321,7 @@ describe('testing call Expressions in BinaryExpressions and UnaryExpressions', ( it('with unaryExpression in sketch situation', () => { const code = [ 'part001 = startSketchOn(XY)', - ' |> startProfileAt([0, 0])', + ' |> startProfile(at = [0, 0])', ' |> line(end = [\n -2.21,\n -legLen(hypotenuse = 5, leg = min(3, 999))\n ])', ].join('\n') const { ast } = code2ast(code) @@ -334,7 +334,7 @@ describe('testing call Expressions in BinaryExpressions and UnaryExpressions', ( describe('it recasts wrapped object expressions in pipe bodies with correct indentation', () => { it('with a single line', () => { const code = `part001 = startSketchOn(XY) - |> startProfileAt([-0.01, -0.08], %) + |> startProfile(at = [-0.01, -0.08]) |> line(end = [0.62, 4.15], tag = $seg01) |> line(end = [2.77, -1.24]) |> angledLineThatIntersects(angle = 201, offset = -1.35, intersectTag = $seg01) diff --git a/src/lang/std/sketch.test.ts b/src/lang/std/sketch.test.ts index a8b28a80c..4810ce854 100644 --- a/src/lang/std/sketch.test.ts +++ b/src/lang/std/sketch.test.ts @@ -108,7 +108,7 @@ describe('testing changeSketchArguments', () => { test('changeSketchArguments', async () => { // Enable rotations #152 const genCode = (line: string) => `mySketch001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> ${line} |> line(endAbsolute = [0.46, -5.82]) // |> rx(45, %) @@ -146,7 +146,7 @@ describe('testing addNewSketchLn', () => { // Enable rotations #152 const code = ` mySketch001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) // |> rx(45, %) |> line(endAbsolute = [-1.59, -1.54]) |> line(endAbsolute = [0.46, -5.82])` @@ -175,7 +175,7 @@ mySketch001 = startSketchOn(XY) // Enable rotations #152 let expectedCode = `mySketch001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) // |> rx(45, %) |> line(endAbsolute = [-1.59, -1.54]) |> line(endAbsolute = [0.46, -5.82]) @@ -198,7 +198,7 @@ mySketch001 = startSketchOn(XY) if (err(modifiedAst2)) return modifiedAst2 expectedCode = `mySketch001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) // |> rx(45, %) |> line(endAbsolute = [-1.59, -1.54]) |> line(endAbsolute = [0.46, -5.82]) @@ -213,7 +213,7 @@ describe('testing addTagForSketchOnFace', () => { const originalLine = 'line(endAbsolute = [-1.59, -1.54])' // Enable rotations #152 const genCode = (line: string) => `mySketch001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) // |> rx(45, %) |> ${line} |> line(endAbsolute = [0.46, -5.82]) @@ -273,7 +273,7 @@ describe('testing addTagForSketchOnFace', () => { chamferTestCases.forEach(({ originalChamfer, expectedChamfer, desc }) => { it(`can break up chamfers in order to add tags - ${desc}`, async () => { const genCode = (insertCode: string) => `sketch001 = startSketchOn(XZ) - |> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag] + |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) @@ -318,7 +318,7 @@ ${insertCode} describe('testing getConstraintInfo', () => { describe('object notation', () => { const code = `const part001 = startSketchOn(-XZ) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(end = [3, 4]) |> angledLine(angle = 3.14, length = 3.14) |> line(endAbsolute = [6.14, 3.14]) @@ -684,7 +684,7 @@ describe('testing getConstraintInfo', () => { }) describe('array notation', () => { const code = `const part001 = startSketchOn(-XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [3, 4]) |> angledLine(angle = 3.14, length = 3.14) |> line(endAbsolute = [6.14, 3.14]) @@ -845,7 +845,7 @@ describe('testing getConstraintInfo', () => { }) describe('constrained', () => { const code = `const part001 = startSketchOn(-XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [3 + 0, 4 + 0]) |> angledLine(angle = 3.14 + 0, length = 3.14 + 0 ) |> line(endAbsolute = [6.14 + 0, 3.14 + 0]) diff --git a/src/lang/std/sketch.ts b/src/lang/std/sketch.ts index 693dd567f..0a17ece89 100644 --- a/src/lang/std/sketch.ts +++ b/src/lang/std/sketch.ts @@ -5,6 +5,7 @@ import type { Node } from '@rust/kcl-lib/bindings/Node' import { ARG_ANGLE, ARG_ANGLE_END, + ARG_AT, ARG_ANGLE_START, ARG_CIRCLE_CENTER, ARG_RADIUS, @@ -37,9 +38,7 @@ import { import type { ToolTip } from '@src/lang/langHelpers' import { toolTips } from '@src/lang/langHelpers' import { - mutateArrExp, mutateKwArg, - mutateObjExpProp, removeKwArgs, splitPathAtPipeExpression, } from '@src/lang/modifyAst' @@ -2956,7 +2955,7 @@ export const updateStartProfileAtArgs: SketchLineHelper['updateArgs'] = ({ if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR const { to } = input const _node = { ...node } - const nodeMeta = getNodeFromPath(_node, pathToNode) + const nodeMeta = getNodeFromPath(_node, pathToNode) if (err(nodeMeta)) { console.error(nodeMeta) return { @@ -2989,8 +2988,7 @@ export const updateStartProfileAtArgs: SketchLineHelper['updateArgs'] = ({ createLiteral(roundOff(to[1])), ]) - mutateArrExp(callExpression.arguments?.[0], toArrExp) || - mutateObjExpProp(callExpression.arguments?.[0], toArrExp, 'to') + mutateKwArg(ARG_AT, callExpression, toArrExp) return { modifiedAst: _node, pathToNode, diff --git a/src/lang/std/sketchConstraints.test.ts b/src/lang/std/sketchConstraints.test.ts index e8af339fa..92178e14c 100644 --- a/src/lang/std/sketchConstraints.test.ts +++ b/src/lang/std/sketchConstraints.test.ts @@ -69,7 +69,7 @@ async function testingSwapSketchFnCall({ describe('testing swapping out sketch calls with xLine/xLineTo', () => { const bigExampleArr = [ `part001 = startSketchOn(XY)`, - ` |> startProfileAt([0, 0], %)`, + ` |> startProfile(at = [0, 0])`, ` |> line(endAbsolute = [1, 1], tag = $abc1)`, ` |> line(end = [-2.04, -0.7], tag = $abc2)`, ` |> angledLine(angle = 157, length = 1.69, tag = $abc3)`, @@ -264,7 +264,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo while keeping var `angledLineToXx = -1.86`, `angledLineToYy = -0.76`, `part001 = startSketchOn(XY)`, - ` |> startProfileAt([0, 0], %)`, + ` |> startProfile(at = [0, 0])`, // ` |> rx(90, %)`, ` |> line(endAbsolute = [1, 1])`, ` |> line(end = [lineX, 2.13])`, @@ -358,7 +358,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo while keeping var describe('testing getSketchSegmentIndexFromSourceRange', () => { const code = ` part001 = startSketchOn(XY) - |> startProfileAt([0, 0.04], %) // segment-in-start + |> startProfile(at = [0, 0.04]) // segment-in-start |> line(end = [0, 0.4]) |> xLine(length = 3.48) |> line(end = [2.14, 1.35]) // normal-segment diff --git a/src/lang/std/sketchConstraints.ts b/src/lang/std/sketchConstraints.ts index f80d3155e..ae19e2155 100644 --- a/src/lang/std/sketchConstraints.ts +++ b/src/lang/std/sketchConstraints.ts @@ -95,7 +95,7 @@ export function isSketchVariablesLinked( to check or it finds a match. that way it can find fn calls that are linked to each other through variables eg: const part001 = startSketchOn(XY) - |> startProfileAt([0, 0],%) + |> startProfile(at=[0, 0]) |> xLine(endAbsolute = 1.69) |> line(end = [myVar, 0.38]) // ❗️ <- cursor in this fn call (the primary) |> line(end = [0.41, baz]) diff --git a/src/lang/std/sketchcombos.test.ts b/src/lang/std/sketchcombos.test.ts index a9bacba5b..c45a21b16 100644 --- a/src/lang/std/sketchcombos.test.ts +++ b/src/lang/std/sketchcombos.test.ts @@ -179,14 +179,14 @@ function makeSelections( describe('testing transformAstForSketchLines for equal length constraint', () => { describe(`should always reorder selections to have the base selection first`, () => { const inputScript = `sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [5, 5]) |> line(end = [-2, 5]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close()` const expectedModifiedScript = `sketch001 = startSketchOn(XZ) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [5, 5], tag = $seg01) |> angledLine(angle = 112, length = segLen(seg01)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -267,7 +267,7 @@ myVar3 = 6 myAng = 40 myAng2 = 134 part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [1, 3.82]) // ln-should-get-tag |> line(endAbsolute = [2, 4]) // ln-lineTo-free should become angledLine |> angledLine(angle = 45, endAbsoluteX = 2.5) // ln-angledLineToX-free should become angledLine @@ -299,7 +299,7 @@ myVar3 = 6 myAng = 40 myAng2 = 134 part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [1, 3.82], tag = $seg01) // ln-should-get-tag |> angledLine(angle = 10, length = segLen(seg01)) // ln-lineTo-free should become angledLine |> angledLine(angle = 45, length = segLen(seg01)) // ln-angledLineToX-free should become angledLine @@ -376,7 +376,7 @@ describe('testing transformAstForSketchLines for vertical and horizontal constra myVar2 = 12 myVar3 = -10 part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [1, 1]) |> line(end = [-6.28, 1.4]) // select for horizontal constraint 1 |> line(end = [-1.07, myVar]) // select for vertical constraint 1 @@ -404,7 +404,7 @@ part001 = startSketchOn(XY) myVar2 = 12 myVar3 = -10 part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [1, 1]) |> xLine(length = -6.28) // select for horizontal constraint 1 |> line(end = [-1.07, myVar]) // select for vertical constraint 1 @@ -464,7 +464,7 @@ part001 = startSketchOn(XY) myVar2 = 12 myVar3 = -10 part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [1, 1]) |> line(end = [-6.28, 1.4]) // select for horizontal constraint 1 |> yLine(length = myVar) // select for vertical constraint 1 @@ -525,7 +525,7 @@ describe('testing transformAstForSketchLines for vertical and horizontal distanc describe('testing setHorzDistance for line', () => { const inputScript = `myVar = 1 part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(end = [0.31, 1.67]) // base selection |> line(end = [0.45, 1.46]) |> line(end = [0.45, 1.46]) // free @@ -631,7 +631,7 @@ halfHeight = totalHeight / 2 halfArmAngle = armAngle / 2 part001 = startSketchOn(XY) - |> startProfileAt([-0.01, -0.05], %) + |> startProfile(at = [-0.01, -0.05]) |> line(end = [0.01, 0.94 + 0]) // partial |> xLine(length = 3.03) // partial |> angledLine({ diff --git a/src/lang/std/sketchcombos.ts b/src/lang/std/sketchcombos.ts index 1d1f09ec9..0d8d71772 100644 --- a/src/lang/std/sketchcombos.ts +++ b/src/lang/std/sketchcombos.ts @@ -1702,6 +1702,9 @@ function getTransformMapPathKw( } return false } + if (name === 'startProfile') { + return false + } const tooltip = fnNameToTooltip(allLabels(sketchFnExp), name) if (err(tooltip)) { return false diff --git a/src/lang/std/std.test.ts b/src/lang/std/std.test.ts index 6d40d3985..ad586c776 100644 --- a/src/lang/std/std.test.ts +++ b/src/lang/std/std.test.ts @@ -9,7 +9,7 @@ beforeAll(async () => { describe('testing angledLineThatIntersects', () => { it('angledLineThatIntersects should intersect with another line', async () => { const code = (offset: string) => `part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [2, 2], tag = $yo) |> line(endAbsolute = [3, 1]) |> angledLineThatIntersects( diff --git a/src/lib/promptToEdit.ts b/src/lib/promptToEdit.ts index 455f9c9f8..2455a7fda 100644 --- a/src/lib/promptToEdit.ts +++ b/src/lib/promptToEdit.ts @@ -78,7 +78,7 @@ export async function submitPromptToEditToQueue({ if (artifact?.type === 'cap') { prompts.push({ prompt: `The users main selection is the end cap of a general-sweep (that is an extrusion, revolve, sweep or loft). -The source range most likely refers to "startProfileAt" simply because this is the start of the profile that was swept. +The source range most likely refers to "startProfile" simply because this is the start of the profile that was swept. If you need to operate on this cap, for example for sketching on the face, you can use the special string ${ artifact.subType === 'end' ? 'END' : 'START' } i.e. \`startSketchOn(someSweepVariable, face = ${ diff --git a/src/lib/rectangleTool.test.ts b/src/lib/rectangleTool.test.ts index 16db752b3..176d0e32b 100644 --- a/src/lib/rectangleTool.test.ts +++ b/src/lib/rectangleTool.test.ts @@ -19,7 +19,7 @@ describe('library rectangleTool helper functions', () => { test('should update AST and source code', async () => { // Base source code that will be edited in place const sourceCode = `sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([120.37, 162.76], %) +profile001 = startProfile(at = [120.37, 162.76]) |> angledLine(angle = 0, length = 0, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 0, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) @@ -31,7 +31,7 @@ profile001 = startProfileAt([120.37, 162.76], %) let ast = structuredClone(_ast) // Find some nodes and paths to reference - const sketchSnippet = `startProfileAt([120.37, 162.76], %)` + const sketchSnippet = `startProfile(at = [120.37, 162.76])` const start = sourceCode.indexOf(sketchSnippet) expect(start).toBeGreaterThanOrEqual(0) const sketchRange = topLevelRange(start, start + sketchSnippet.length) @@ -69,7 +69,7 @@ profile001 = startProfileAt([120.37, 162.76], %) // ast is edited in place from the updateCenterRectangleSketch const expectedSourceCode = `sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([80, 120], %) +profile001 = startProfile(at = [80, 120]) |> angledLine(angle = 0, length = 80, tag = $rectangleSegmentA001) |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 120, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) diff --git a/src/lib/rectangleTool.ts b/src/lib/rectangleTool.ts index f83174252..2064e8295 100644 --- a/src/lib/rectangleTool.ts +++ b/src/lib/rectangleTool.ts @@ -1,6 +1,7 @@ import type { Node } from '@rust/kcl-lib/bindings/Node' import { ARG_ANGLE, + ARG_AT, ARG_END_ABSOLUTE, ARG_LENGTH, ARG_TAG, @@ -21,7 +22,6 @@ import { mutateKwArgOnly } from '@src/lang/modifyAst' import { findKwArg, isArrayExpression, - isCallExpression, isCallExpressionKw, } from '@src/lang/util' import type { CallExpressionKw, Expr, PipeExpression } from '@src/lang/wasm' @@ -43,10 +43,10 @@ function angledLine( } /** - * It does not create the startSketchOn and it does not create the startProfileAt. + * It does not create the startSketchOn and it does not create the startProfile. * Returns AST expressions for this KCL code: * const yo = startSketchOn(XY) - * |> startProfileAt([0, 0], %) + * |> startProfile(at = [0, 0]) * |> angledLine(angle = 0, length = 0, tag = $a) * |> angledLine(angle = segAng(a) - 90, length = 0, tag = $b) * |> angledLine(angle = segAng(a), length = -segLen(a), tag = $c) @@ -149,17 +149,20 @@ export function updateCenterRectangleSketch( { let callExpression = pipeExpression.body[0] - if (!isCallExpression(callExpression)) { + if (!isCallExpressionKw(callExpression)) { return new Error(`Expected call expression, got ${callExpression.type}`) } - const arrayExpression = callExpression.arguments[0] + const arrayExpression = findKwArg(ARG_AT, callExpression) if (!isArrayExpression(arrayExpression)) { - return new Error(`Expected array expression, got ${arrayExpression.type}`) + return new Error( + `Expected array expression, got ${arrayExpression?.type}` + ) } - callExpression.arguments[0] = createArrayExpression([ + const at = createArrayExpression([ createLiteral(roundOff(startX)), createLiteral(roundOff(startY)), ]) + mutateKwArgOnly(ARG_AT, callExpression, at) } const twoX = deltaX * 2 diff --git a/src/lib/selections.test.ts b/src/lib/selections.test.ts index 41cdc82a2..d43614bb7 100644 --- a/src/lib/selections.test.ts +++ b/src/lib/selections.test.ts @@ -19,7 +19,7 @@ beforeAll(async () => { describe('testing source range to artifact conversion', () => { const MY_CODE = `sketch001 = startSketchOn(XZ) -profile001 = startProfileAt([105.55, 105.55], sketch001) +profile001 = startProfile(sketch001,at=[105.55, 105.55]) |> xLine(332.55, %, $seg01) |> yLine(-310.12, %, $seg02) |> xLine(-373.65, %) @@ -28,7 +28,7 @@ profile001 = startProfileAt([105.55, 105.55], sketch001) extrude001 = extrude(profile001, length = 500) sketch002 = startSketchOn(extrude001, seg01) -profile002 = startProfileAt([-321.34, 361.76], sketch002) +profile002 = startProfile(sketch002,at=[-321.34, 361.76]) |> line(end = [109.03, -61.79]) |> line(end = [-124.48, -132.65]) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -40,7 +40,7 @@ profile006 = circle(sketch005, radius = 25.89 ) sketch004 = startSketchOn(extrude001, seg02) -profile005 = startProfileAt([36.1, 174.49], sketch004) +profile005 = startProfile(sketch004,at=[36.1, 174.49]) |> angledLine(angle = 0, length = 22.33, tag = $rectangleSegmentA003) |> angledLine( angle = segAng(rectangleSegmentA003) - 90, @@ -53,7 +53,7 @@ profile005 = startProfileAt([36.1, 174.49], sketch004) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch003 = startSketchOn(extrude001, seg02) -profile003 = startProfileAt([-115.59, 439.4], sketch003) +profile003 = startProfile(sketch003,at=[-115.59, 439.4]) |> angledLine(angle = 0, length = 130.08, tag = $rectangleSegmentA002) |> angledLine( angle = segAng(rectangleSegmentA002) - 90, @@ -1170,7 +1170,7 @@ profile004 = circle(sketch003, [ 'path selection for a sketch on face', { - snippet: 'profile002 = startProfileAt([-321.34, 361.76], sketch002)', + snippet: 'profile002 = startProfile(sketch002,at=[-321.34, 361.76])', artifactDetails: { type: 'solid2d', range: [398, 398, 0], diff --git a/src/machines/modelingMachine.ts b/src/machines/modelingMachine.ts index fc36f9fb1..3329da9bd 100644 --- a/src/machines/modelingMachine.ts +++ b/src/machines/modelingMachine.ts @@ -4693,7 +4693,7 @@ export function isEditingExistingSketch({ sketchDetails: SketchDetails | null }): boolean { // should check that the variable declaration is a pipeExpression - // and that the pipeExpression contains a "startProfileAt" callExpression + // and that the pipeExpression contains a "startProfile" callExpression if (!sketchDetails?.sketchEntryNodePath) return false const variableDeclaration = getNodeFromPath( kclManager.ast, @@ -4709,7 +4709,7 @@ export function isEditingExistingSketch({ if ( (maybePipeExpression.type === 'CallExpression' || maybePipeExpression.type === 'CallExpressionKw') && - (maybePipeExpression.callee.name.name === 'startProfileAt' || + (maybePipeExpression.callee.name.name === 'startProfile' || maybePipeExpression.callee.name.name === 'circle' || maybePipeExpression.callee.name.name === 'circleThreePoint') ) @@ -4717,8 +4717,8 @@ export function isEditingExistingSketch({ if (maybePipeExpression.type !== 'PipeExpression') return false const hasStartProfileAt = maybePipeExpression.body.some( (item) => - item.type === 'CallExpression' && - item.callee.name.name === 'startProfileAt' + item.type === 'CallExpressionKw' && + item.callee.name.name === 'startProfile' ) const hasCircle = maybePipeExpression.body.some( diff --git a/src/test-utils.test.ts b/src/test-utils.test.ts index 245ee24f5..65bd523aa 100644 --- a/src/test-utils.test.ts +++ b/src/test-utils.test.ts @@ -3,7 +3,7 @@ import { normaliseKclNumbers } from '@e2e/playwright/test-utils' test('normaliseKclNumbers', () => { expect( normaliseKclNumbers(`sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0]) @@ -11,7 +11,7 @@ test('normaliseKclNumbers', () => { |> close() const extrude001 = extrude(sketch001, length = -15)`) ).toBe(`sketch001 = startSketchOn(XY) - |> startProfileAt([-12.34, 12.34], %) + |> startProfile(at = [-12.34, 12.34]) |> line(end = [12.34, 0]) |> line(end = [0, -12.34]) |> line(end = [-12.34, 0]) @@ -21,7 +21,7 @@ const extrude001 = extrude(sketch001, length = -12.34)`) expect( normaliseKclNumbers( `sketch001 = startSketchOn(XY) - |> startProfileAt([-10, 10], %) + |> startProfile(at = [-10, 10]) |> line(end = [20, 0]) |> line(end = [0, -20]) |> line(end = [-20, 0]) @@ -31,7 +31,7 @@ const extrude001 = extrude(sketch001, length = -15)`, false ) ).toBe(`sketch001 = startSketchOn(XY) - |> startProfileAt([-12.34, 12.34], %) + |> startProfile(at = [-12.34, 12.34]) |> line(end = [12.34, 12.34]) |> line(end = [12.34, -12.34]) |> line(end = [-12.34, 12.34])