> For the complete documentation index, see [llms.txt](https://ezedits.gitbook.io/ezedits/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ezedits.gitbook.io/ezedits/commands/spline/advanced-spline-shapes.md).

# Advanced Spline Shapes

The following `//ezspline` subcommands feature three very powerful but more complex spline shapes with effectively limitless customizability.

***

#### ![](/files/PTIW5MXnmX7vyKBbATLq)

### `//ezspline` <mark style="color:orange;">`noise`</mark> <a href="#noise" id="noise"></a>

<details>

<summary><mark style="color:blue;">Noise Spline</mark></summary>

**`//ezsp noise`** <mark style="color:orange;">**`<palette>`**</mark> [**`<radii>`**](/ezedits/commands/spline/common-parameters.md#radii) <mark style="color:orange;">**`[noise]`**</mark> <mark style="color:orange;">**`[depth]`**</mark> [**`[-s <stretch>]`**](/ezedits/commands/spline/common-parameters.md#stretch-s-less-than-stretchfactor-greater-than) [**`[-t <angle>]`**](/ezedits/commands/spline/common-parameters.md#twist) [**`[-p <kbParameters>]`**](/ezedits/commands/spline/common-parameters.md#kb-parameters) [**`[-q <quality>]`**](/ezedits/commands/spline/common-parameters.md#quality) [**`[-n <normalMode>]`**](/ezedits/commands/spline/common-parameters.md#normal-mode) [**`[-h]`**](/ezedits/commands/spline/common-parameters.md#help-page)

Generates a noise-based spline along the selected positions.

* <mark style="color:orange;">**`<Palette>`**</mark>:
  * Specifies the blocks that the spline should be made out of.
* <mark style="color:orange;">**`[noise]`**</mark> (Default: "Perlin(Freq:2,z:0.5)"):
  * The noise that should be embedded along the spline path.
* <mark style="color:orange;">**`[depth]`**</mark> (Default: 0.7):
  * How deep the noise should cut into the cylinder-shaped spline. Depths approaching 0 approach the original cylinder-shaped spline, 0.5 means the noise may reach half the radius deep, and 1.0 means the full radius, reaching the center. Larger than 1.0 will result in a choppy look.
* <mark style="color:orange;">**`[-i <expression>]`**</mark> (Default: "`r=sqrt(x*x+y*y);t=(r-1)/d+1;f=r>1?1:(4*r*(r-1))^2;g=f*t+(1-f)*n;p=max((r-1)/min(d,1)+1,.001);(g>t)*p`"):
  * Advanced parameter for nerds. Ignore if this above looks scary.
  * This expression implements the functionality of the noise cutting into a cylinder at a certain relative `<depth>`. [Derivation](https://www.desmos.com/calculator/qw8fro1npf). If you ***really*** want to, you can come up with a different expression here to get a different result. If you don't need custom noises just use `//ezspline expression` instead though.
  * Input parameters are *`x,y,z,n,d`* whereby *`x,y,z`* are assigned like in [//ezspline expression](#expression-spline), *`n`* is the evaluation of the given `<noise>` at the coordinates *`x,y,z`* and *`d`* is the given `<depth>` parameter.
  * An alternative expression could be:
    * `r=sqrt(x*x+y*y);(r<1&&n>0.5)*max(n,0.01)`: If you only want the noise to be restricted to a cylinder shape

*The remaining arguments are outlined on the* [*Common Parameters*](/ezedits/commands/spline/common-parameters.md) *subpage.*

Example:

`//ezspline noise ##Grayscale 10`

<img src="/files/PTIW5MXnmX7vyKBbATLq" alt="" data-size="original">

</details>

<details>

<summary><mark style="color:blue;">Demos</mark></summary>

![](/files/mIGSPbd0jkZnumNbZo4K)

Just a small, quick set of noise commands I threw together to show what the noise spline can do. \~eztaK

`//ezspline noise -##Magma 5,25 Ce(F:1.5,fO:1,cR:sub,M:OR,U:-.6) 0.6 -t 90`

![](/files/WxOLqXMCznKSwrUFxMtg)

`//ezspline noise ##GrayWarm(3:11),251:8*15 25,10,25 Ce(F:1.6,fO:1,cD:r,cR:r,M:OR,L:-1.1,U:-.2) 0.4`

![](/files/qIiPiFHzWx0xkQz521g1)

`//ezspline noise -w Panes light_gray_stained_glass 20,15,25 Ce(f:1.4,z:.3,m:or,l:-1,u:-0.5) 3 -t 600 -i t=0.2;r=sqrt(x*x+y*y);m=1-abs(2*r-t-1)/abs(t-1);n<m&&r<1`

![](/files/YiJGvq6JQgtXfLV2BlYd)

`//ezspline noise ##Brown 20,12 Ce(f:4,cr:sub,cj:.8,m:or,u:-.5,l:-1.3) 0.2 -s 6 -t 20`

![](/files/nesXoQPEnvmoJjnwoEvJ)

`//ezspline noise -##GlowBlue(6:16) 20,12 Ce(f:2,cr:sub,m:or,u:-.55,l:-0.551,z:0.1) 0.9 -t 200`

![](/files/ttUbRAEtNevZiFHfUwMP)

`//ezspline noise -w Slabs ##GrayCold(4:11),waxed_weathered_cut_copper 20 Ce(f:1.5,cr:sub,m:or,u:-0.85,l:-.5,y:0.3) -n UPRIGHT -i (x*x+n+y*y<1&&y<0)*(y+0.97)`

![](/files/xCrW1eo0Nc2xF8OQc78B)

</details>

***

#### ![](/files/0syAjEViL8bX4eLLML0e)

### `//ezspline` <mark style="color:orange;">`expression`</mark> <a href="#expression" id="expression"></a>

<details>

<summary><mark style="color:blue;">Expression Spline</mark></summary>

**`//ezsp expression`** <mark style="color:orange;">`<palette>`</mark> [**`<radii>`**](/ezedits/commands/spline/common-parameters.md#radii)[**`[-s <stretch>]`**](/ezedits/commands/spline/common-parameters.md#stretch-s-less-than-stretchfactor-greater-than) [**`[-t <angle>]`**](/ezedits/commands/spline/common-parameters.md#twist) [**`[-p <kbParameters>]`**](/ezedits/commands/spline/common-parameters.md#kb-parameters) [**`[-q <quality>]`**](/ezedits/commands/spline/common-parameters.md#quality) [**`[-n <normalMode>]`**](/ezedits/commands/spline/common-parameters.md#normal-mode) <mark style="color:orange;">**`[-z] [-o]`**</mark> [**`[-h]`**](/ezedits/commands/spline/common-parameters.md#help-page) <mark style="color:orange;">**`<expression...>`**</mark>

Generates a spline shaped by the given WorldEdit expression along the selected positions.

* <mark style="color:orange;">**`<Palette>`**</mark>:
  * Specifies the block palette.
* <mark style="color:orange;">**`[-z]`**</mark>:
  * Without setting this flag, the domain of the z-axis is 0 to the length of the spline divided by the radius. You may set this flag to normalize the z-Axis, that runs along the path of the spline, to the \[-1,1] domain.
* <mark style="color:orange;">**`[-o]`**</mark>:
  * By default, expression output maps >0..1 to the palette. Use this flag to instead map the output to whole numbers.
* <mark style="color:orange;">**`<expression...>`**</mark>:
  * [A WorldEdit expression](https://worldedit.enginehub.org/en/latest/usage/other/expressions/). Input variables are
    * -1 ≤ *`x`* ≤ 1
    * -1 ≤ *`y`* ≤ 1
    * 0 ≤ *`z`* ≤ L, whereby L is the length of the spline divided by its radius.
    * or -1 ≤ *`z`* ≤ 1, if you're using the `-z` flag.
  * Output is either a normalized palette index (0,1] or if using the -o flag (0,P] whereby P is the number of blocks in the palette. Note that <=0 means not placing any block.

*The remaining arguments are outlined on the* [*Common Parameters*](/ezedits/commands/spline/common-parameters.md) *subpage.*

Example:

`//ezspline expression clay 10 -t 90 R=0.2;r=0.1;w=0.7;s=0.5;sqrt((abs(x)-w)^2+y^2)<R||sqrt(((z+1)%s-r)^2+y^2)<r&&abs(x)<w`

Expression by [imhols](https://twitter.com/imhols1)

<img src="/files/0syAjEViL8bX4eLLML0e" alt="" data-size="original">

</details>

***

#### ![](/files/bG0em6gHopfnqqW2utQh)

### `//ezspline` <mark style="color:orange;">`structure`</mark> <a href="#structure" id="structure"></a>

<details>

<summary><mark style="color:blue;">Structure Spline</mark></summary>

**`//ezsp structure`** <mark style="color:orange;">**`<structure>`**</mark> [**`[radii]`**](/ezedits/commands/spline/common-parameters.md#radii)[**`[-s <stretch>]`**](/ezedits/commands/spline/common-parameters.md#stretch-s-less-than-stretchfactor-greater-than) [**`[-t <angle>]`**](/ezedits/commands/spline/common-parameters.md#twist) [**`[-p <kbParameters>]`**](/ezedits/commands/spline/common-parameters.md#kb-parameters) [**`[-q <quality>]`**](/ezedits/commands/spline/common-parameters.md#quality) [**`[-n <normalMode>]`**](/ezedits/commands/spline/common-parameters.md#normal-mode) <mark style="color:orange;">**`[-z]`**</mark> [**`[-h]`**](/ezedits/commands/spline/common-parameters.md#help-page)

Embeds a structure along the path defined by the selected convex region.

* <mark style="color:orange;">**`<structure>`**</mark>:
  * The shape/clipboard/schematic to embed along the path. See [Available Structures](/ezedits/commands/placement/available-structures.md).
* <mark style="color:orange;">**`[-z]`**</mark>:
  * Normalizes the Z-Axis, which results in exactly one structure being stretched out throughout the entire length of the path.

The structure will be placed in its Z-direction facing along the path. Multiple instances will be repeated one after another as often as its bounding box fits, unless you use `-z`, in which case one instance of the structure will be stretched across the whole length of the path.

Specifically for `//ezsp structure`, if the [`[radii]`](/ezedits/commands/spline/common-parameters.md#radii) argument is left out, we will automatically calculate the radius at which the structure is generated at its original/inherent size.

*The remaining arguments are outlined on the* [*Common Parameters*](/ezedits/commands/spline/common-parameters.md) *subpage.*

**Examples**:

`//ezsp structure TS(P:##GlowPurple,S:Heart,T:=(z+y)*.4+.5) 12`

<img src="/files/bG0em6gHopfnqqW2utQh" alt="" data-size="original">

</details>

***
