diff --git a/docs/kcl/index.md b/docs/kcl/index.md index 75f3c19d4b..5235ea42ff 100644 --- a/docs/kcl/index.md +++ b/docs/kcl/index.md @@ -84,6 +84,7 @@ layout: manual * [`rem`](kcl/rem) * [`revolve`](kcl/revolve) * [`segAng`](kcl/segAng) +* [`segEnd`](kcl/segEnd) * [`segEndX`](kcl/segEndX) * [`segEndY`](kcl/segEndY) * [`segLen`](kcl/segLen) diff --git a/docs/kcl/segEnd.md b/docs/kcl/segEnd.md new file mode 100644 index 0000000000..a06350f70d --- /dev/null +++ b/docs/kcl/segEnd.md @@ -0,0 +1,45 @@ +--- +title: "segEnd" +excerpt: "Compute the ending point of the provided line segment along the 'x' axis." +layout: manual +--- + +Compute the ending point of the provided line segment along the 'x' axis. + + + +```js +segEnd(tag: TagIdentifier) -> [number] +``` + + +### Arguments + +| Name | Type | Description | Required | +|----------|------|-------------|----------| +| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | | Yes | + +### Returns + +`[number]` + + +### Examples + +```js +exampleSketch = startSketchOn('XZ') + |> startProfileAt([0, 0], %) + |> line([20, 0], %, $thing) + |> line([0, 5], %) + |> line([segEndX(thing), 0], %) + |> line([-20, 10], %) + |> close(%) + |> extrude(5, %) + +example = startSketchOn('XZ') + |> circle({ center: segEnd(thing), radius: 5 }, %) +``` + +![Rendered example of segEnd 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAADRYUlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+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+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUY4fP85VV1111VVXXXXVVf/3vdiLvdhrf8RHfMR3vdiLvdhrP/jBD37ps2fPPuPw8HCXq6666qqrrrrqqqv+L0MPetCDuOqqq6666qqrrrrq/7Z3fMd3/Kx3eqd3+mye6cKFC0zTdOtv/dZvffdv//Zvf8999913K1ddddVVV1111VVX/V9EOX78OFddddVVV1111VVX/d90zTXXPPiTPumTfuplXuZl3vuHfuiHeJmXeRkAvvIrv5JSyvHXeI3XeO3Xeq3XeuuHPOQhL33rrbf+zeHh4S5XXXXVVVddddVVV/1fQjl+/DhXXXXVVVddddVVV/3f847v+I6f9Umf9Ek/fXh4+OBv/uZvZnd3l9d5ndcB4Gd/9md56lOfyt///d9z6dKl46/2aq/20q/1Wq/11g95yENe+vDw8NLZs2dv5aqrrrrqqquuuuqq/wsox48f56qrrrrqqquuuuqq/zuuueaaB3/SJ33ST73O67zOe//Wb/0WP/3TP839Xud1XgeAX/3VXwVgtVpx11138fd///dcunTp+GMf+9iXfru3e7v3vuaaax58eHh4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EFx11VVXXXXVVVdd9W9y33333fr1X//173PffffdylX/Ke67775bP/MzP/N1uOqqq6666qqrrrrq34py/Phxrrrqqquuuuqqq676tzk8PNz9sz/7s5+5+eab3/rhD3/4ca76D/PLv/zLt37Ih3zIQ7jqqquuuuqqq6666t+Dcvz4ca666qqrrrrqqquu+rc7PDzc/dM//dOfvvnmm996b2/v+PXXX89V/3Z/+Zd/yd/8zd/c+iEf8iEP4aqrrrrqqquuuuqqfy/K8ePHueqqq6666qqrrrrq3+fo6OjSn/3Zn/3MK77iK7713t7e8euvv56r/vX+8i//kn/4h3/47Y//+I9/Ga666qqrrrrqqquu+o9AOX78OFddddVVV1111VVX/fsdHh7u/tmf/dnPHB4e7p46deq1r7/+eq560f3lX/4lv/Vbv/XdX/IlX/I2XHXVVVddddVVV131H4Vy/Phxrrrqqquuuuqqq676j3F4eLh79uzZZxweHu6eOnXqta+//nqu+pf95V/+JT/yIz/y2d/1Xd/1MVx11VVXXXXVVVdd9R+Jcvz4ca666qqrrrrqqquu+o9zeHi4+w//8A+/8w//8A+/8+hHP/q9r7/+eq56wf7yL/+Sz/zMz3yd3/7t3/4errrqqquuuuqqq676j0Y5fvw4V1111VVXXXXVVVf9xzt79uytv/3bv/098/n8pVtrD77++uu56tn+8i//kr/5m7+59eM//uNf5tZbb/1rrrrqqquuuuqqq676z0A5fvw4V1111VVXXXXVVVf95zg8PNz9h3/4h985PDzcPXXq1Gtff/31XAV/+Zd/yY/8yI989pd+6Ze+zeHh4S5XXXXVVVddddVVV/1noRw/fpyrrrrqqquuuuqqq/7zHB4e7v7DP/zD7/z2b//298zn85durT34+uuv5/+jv/zLv+Rv/uZvbv34j//4l/nTP/3Tn+Gqq6666qqrrrrqqv9s6EEPehBXXXXVVVddddVVV/3XebEXe7HX/vAP//Dvuuaaax78si/7svx/8Jd/+Zf8wz/8w2///d///W//6I/+6Odw1VVXXXXVVVddddV/FfSgBz2Iq6666qqrrrrqqqv+a11zzTUPfu3Xfu33eqd3eqfPBnjZl31Z/i/6y7/8S+67775bf+u3fuu7f/RHf/RzuOqqq6666qqrrrrqvxp60IMexFVXXXXVVVddddVV/z2uueaaB7/2a7/2e73TO73TZwO87Mu+LP8X/OVf/iX33Xffrb/1W7/13T/6oz/6OVx11VVXXXXVVVdd9d8FPehBD+Kqq6666qqrrrrqqv9e11xzzYNf+7Vf+71e53Ve572vueaaB7/sy74s/xv95V/+Jffdd9+tv/Vbv/XdP/qjP/o5XHXVVVddddVVV1313w096EEP4qqrrrrqqquuuuqq/xmuueaaB7/Yi73Ya7/Yi73Ya73O67zOewO87Mu+LP+T/eVf/iUA//AP//Dbv/Vbv/U9v/Vbv/XdXHXVVVddddVVV131PwV60IMexFVXXXXVVVddddVV//Ncc801D36xF3ux136d13md93qxF3ux1wZ42Zd9Wf4n+Mu//EsA7rvvvlt/67d+67t/9Ed/9HO46qqrrrrqqquuuup/IvSgBz2Iq6666qqrrrrqqqv+Z7vmmmse/GIv9mKv9WIv9mKvfc011zz4xV7sxV4b4GVf9mX5r/CXf/mXANx33323/tZv/dZ3A/zoj/7o53DVVVddddVVV1111f906EEPehBXXXXVVVddddVVV/3vcs011zz4xV7sxV77xV7sxV4L4HVe53Xem+fyiEc8gn+NJz/5ydx33323XnPNNQ8G+Id/+IffBvj7v//73wb40R/90c/hqquuuuqqq6666qr/bdCDHvQgrrrqqquuuuqqq6763++aa6558JkzZx58zTXXPAjQi73Yi70WwDXXXPNgnum+++679Zprrnkwz3TffffdCnDffffdCnD27Nlb77vvvmf8wz/8w29z1VVXXXXVVVddddX/BehBD3oQV1111VVXXXXVVVddddVVV1111VVXXXXV/0lUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/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+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/BMyYiiocmN5fAAAAAElFTkSuQmCC) + + diff --git a/docs/kcl/std.json b/docs/kcl/std.json index 2a49b6a5fc..fdaa4c84f7 100644 --- a/docs/kcl/std.json +++ b/docs/kcl/std.json @@ -160120,6 +160120,909 @@ "exampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line([10, 0], %)\n |> line([5, 10], %, $seg01)\n |> line([-10, 0], %)\n |> angledLine([segAng(seg01), 10], %)\n |> line([-10, 0], %)\n |> angledLine([segAng(seg01), -15], %)\n |> close(%)\n\nexample = extrude(4, exampleSketch)" ] }, + { + "name": "segEnd", + "summary": "Compute the ending point of the provided line segment along the 'x' axis.", + "description": "", + "tags": [], + "args": [ + { + "name": "tag", + "type": "TagIdentifier", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TagIdentifier", + "type": "object", + "required": [ + "__meta", + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "info": { + "allOf": [ + { + "$ref": "#/components/schemas/TagEngineInfo" + } + ], + "nullable": true + }, + "__meta": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata" + } + } + }, + "definitions": { + "TagEngineInfo": { + "description": "Engine information for a tag.", + "type": "object", + "required": [ + "id", + "sketch" + ], + "properties": { + "id": { + "description": "The id of the tagged object.", + "type": "string", + "format": "uuid" + }, + "sketch": { + "description": "The sketch the tag is on.", + "type": "string", + "format": "uuid" + }, + "path": { + "description": "The path the tag is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Path" + } + ], + "nullable": true + }, + "surface": { + "description": "The surface information for the tag.", + "allOf": [ + { + "$ref": "#/components/schemas/ExtrudeSurface" + } + ], + "nullable": true + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type" + ], + "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 + }, + "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" + ], + "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 + }, + "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" + ], + "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 + }, + "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" + ], + "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", + "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 + }, + "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", + "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 + }, + "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" + ], + "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 + }, + "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" + ], + "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 + }, + "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", + "center", + "from", + "radius", + "to", + "type" + ], + "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" + }, + "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 + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "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 + } + } + }, + "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" + } + ] + } + } + }, + "SourceRange": { + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "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" + } + ] + } + } + } + ] + }, + "Metadata": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + } + }, + "required": true + } + ], + "returnValue": { + "name": "", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "required": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn('XZ')\n |> startProfileAt([0, 0], %)\n |> line([20, 0], %, $thing)\n |> line([0, 5], %)\n |> line([segEndX(thing), 0], %)\n |> line([-20, 10], %)\n |> close(%)\n |> extrude(5, %)\n\nexample = startSketchOn('XZ')\n |> circle({ center: segEnd(thing), radius: 5 }, %)" + ] + }, { "name": "segEndX", "summary": "Compute the ending point of the provided line segment along the 'x' axis.", diff --git a/src/wasm-lib/kcl/src/std/args.rs b/src/wasm-lib/kcl/src/std/args.rs index b3ef1c442f..34c233c5ab 100644 --- a/src/wasm-lib/kcl/src/std/args.rs +++ b/src/wasm-lib/kcl/src/std/args.rs @@ -181,47 +181,39 @@ impl Args { Ok(()) } - fn make_user_val_from_json(&self, j: serde_json::Value) -> Result { - Ok(KclValue::UserVal(crate::executor::UserVal { + fn make_user_val_from_json(&self, j: serde_json::Value) -> KclValue { + KclValue::UserVal(crate::executor::UserVal { value: j, meta: vec![Metadata { source_range: self.source_range, }], - })) + }) } - pub(crate) fn make_null_user_val(&self) -> Result { + pub(crate) fn make_null_user_val(&self) -> KclValue { self.make_user_val_from_json(serde_json::Value::Null) } - pub(crate) fn make_user_val_from_i64(&self, n: i64) -> Result { + pub(crate) fn make_user_val_from_i64(&self, n: i64) -> KclValue { self.make_user_val_from_json(serde_json::Value::Number(serde_json::Number::from(n))) } pub(crate) fn make_user_val_from_f64(&self, f: f64) -> Result { - self.make_user_val_from_json(serde_json::Value::Number(serde_json::Number::from_f64(f).ok_or_else( - || { - KclError::Type(KclErrorDetails { - message: format!("Failed to convert `{}` to a number", f), - source_ranges: vec![self.source_range], - }) - }, - )?)) + f64_to_jnum(f, vec![self.source_range]).map(|x| self.make_user_val_from_json(x)) + } + + pub(crate) fn make_user_val_from_point(&self, p: [f64; 2]) -> Result { + let x = f64_to_jnum(p[0], vec![self.source_range])?; + let y = f64_to_jnum(p[1], vec![self.source_range])?; + let array = serde_json::Value::Array(vec![x, y]); + Ok(self.make_user_val_from_json(array)) } pub(crate) fn make_user_val_from_f64_array(&self, f: Vec) -> Result { - let mut arr = Vec::new(); - for n in f { - arr.push(serde_json::Value::Number(serde_json::Number::from_f64(n).ok_or_else( - || { - KclError::Type(KclErrorDetails { - message: format!("Failed to convert `{}` to a number", n), - source_ranges: vec![self.source_range], - }) - }, - )?)); - } - self.make_user_val_from_json(serde_json::Value::Array(arr)) + f.into_iter() + .map(|n| f64_to_jnum(n, vec![self.source_range])) + .collect::, _>>() + .map(|arr| self.make_user_val_from_json(serde_json::Value::Array(arr))) } pub(crate) fn get_number(&self) -> Result { @@ -750,3 +742,14 @@ impl<'a> FromKclValue<'a> for SketchSurface { } } } + +fn f64_to_jnum(f: f64, source_ranges: Vec) -> Result { + serde_json::Number::from_f64(f) + .ok_or_else(|| { + KclError::Type(KclErrorDetails { + message: format!("Failed to convert `{f}` to a number"), + source_ranges, + }) + }) + .map(serde_json::Value::Number) +} diff --git a/src/wasm-lib/kcl/src/std/assert.rs b/src/wasm-lib/kcl/src/std/assert.rs index f4cb15c359..5a71efe73c 100644 --- a/src/wasm-lib/kcl/src/std/assert.rs +++ b/src/wasm-lib/kcl/src/std/assert.rs @@ -24,7 +24,7 @@ async fn _assert(value: bool, message: &str, args: &Args) -> Result<(), KclError pub async fn assert(_exec_state: &mut ExecState, args: Args) -> Result { let (data, description): (bool, String) = args.get_data()?; inner_assert(data, &description, &args).await?; - args.make_null_user_val() + Ok(args.make_null_user_val()) } /// Check a value at runtime, and raise an error if the argument provided @@ -44,7 +44,7 @@ async fn inner_assert(data: bool, message: &str, args: &Args) -> Result<(), KclE pub async fn assert_lt(_exec_state: &mut ExecState, args: Args) -> Result { let (left, right, description): (f64, f64, String) = args.get_data()?; inner_assert_lt(left, right, &description, &args).await?; - args.make_null_user_val() + Ok(args.make_null_user_val()) } /// Check that a numerical value is less than to another at runtime, @@ -63,7 +63,7 @@ async fn inner_assert_lt(left: f64, right: f64, message: &str, args: &Args) -> R pub async fn assert_gt(_exec_state: &mut ExecState, args: Args) -> Result { let (left, right, description): (f64, f64, String) = args.get_data()?; inner_assert_gt(left, right, &description, &args).await?; - args.make_null_user_val() + Ok(args.make_null_user_val()) } /// Check that a numerical value equals another at runtime, @@ -96,7 +96,7 @@ async fn inner_assert_equal(left: f64, right: f64, epsilon: f64, message: &str, pub async fn assert_equal(_exec_state: &mut ExecState, args: Args) -> Result { let (left, right, epsilon, description): (f64, f64, f64, String) = args.get_data()?; inner_assert_equal(left, right, epsilon, &description, &args).await?; - args.make_null_user_val() + Ok(args.make_null_user_val()) } /// Check that a numerical value is greater than another at runtime, @@ -115,7 +115,7 @@ async fn inner_assert_gt(left: f64, right: f64, message: &str, args: &Args) -> R pub async fn assert_lte(_exec_state: &mut ExecState, args: Args) -> Result { let (left, right, description): (f64, f64, String) = args.get_data()?; inner_assert_lte(left, right, &description, &args).await?; - args.make_null_user_val() + Ok(args.make_null_user_val()) } /// Check that a numerical value is less than or equal to another at runtime, @@ -135,7 +135,7 @@ async fn inner_assert_lte(left: f64, right: f64, message: &str, args: &Args) -> pub async fn assert_gte(_exec_state: &mut ExecState, args: Args) -> Result { let (left, right, description): (f64, f64, String) = args.get_data()?; inner_assert_gte(left, right, &description, &args).await?; - args.make_null_user_val() + Ok(args.make_null_user_val()) } /// Check that a numerical value is greater than or equal to another at runtime, diff --git a/src/wasm-lib/kcl/src/std/convert.rs b/src/wasm-lib/kcl/src/std/convert.rs index 69e8729ff2..777eb0fe50 100644 --- a/src/wasm-lib/kcl/src/std/convert.rs +++ b/src/wasm-lib/kcl/src/std/convert.rs @@ -34,7 +34,7 @@ pub async fn int(_exec_state: &mut ExecState, args: Args) -> Result Result Result { + let tag: TagIdentifier = args.get_data()?; + let result = inner_segment_end(&tag, exec_state, args.clone())?; + + args.make_user_val_from_point(result) +} + +/// Compute the ending point of the provided line segment along the 'x' axis. +/// +/// ```no_run +/// const exampleSketch = startSketchOn('XZ') +/// |> startProfileAt([0, 0], %) +/// |> line([20, 0], %, $thing) +/// |> line([0, 5], %) +/// |> line([segEndX(thing), 0], %) +/// |> line([-20, 10], %) +/// |> close(%) +/// |> extrude(5, %) +/// +/// const example = startSketchOn('XZ') +/// |> circle({center: segEnd(thing), radius: 5}, %) +/// ``` +#[stdlib { + name = "segEnd", +}] +fn inner_segment_end(tag: &TagIdentifier, exec_state: &mut ExecState, args: Args) -> Result<[f64; 2], KclError> { + let line = args.get_tag_engine_info(exec_state, tag)?; + let path = line.path.clone().ok_or_else(|| { + KclError::Type(KclErrorDetails { + message: format!("Expected a line segment with a path, found `{:?}`", line), + source_ranges: vec![args.source_range], + }) + })?; + + Ok(path.get_base().to) +} + /// Returns the segment end of x. pub async fn segment_end_x(exec_state: &mut ExecState, args: Args) -> Result { let tag: TagIdentifier = args.get_data()?; diff --git a/src/wasm-lib/kcl/tests/outputs/serial_test_example_segment_end0.png b/src/wasm-lib/kcl/tests/outputs/serial_test_example_segment_end0.png new file mode 100644 index 0000000000..150b828e7b Binary files /dev/null and b/src/wasm-lib/kcl/tests/outputs/serial_test_example_segment_end0.png differ