# Spline and Extrusion by Rotation

## Extrusion by rotation

```
Extrude { { xr, yr, zr }, {xp, yp, zp}, alpha } { List }
```

with (`xr`

, `yr`

, `zr`

) a vector of the rotation axis, (`xp`

, `yp`

, `zp`

) a point located on the axis and `alpha`

the rotation angle (in rad, recal that π=`Pi`

). The `List`

argument contains entities to be extruded. Take a simple example:

```
SetFactory('OpenCASCADE');
h = 0.05;
Point(1) = {0,1,0,h};
Point(2) = {0.5,0.5,0,h};
Point(3) = {0,0,0,h};
Line(1) = {1,2};
Line(2) = {2,3};
```

This code creates a broken line looking like this symbol “<":

Now this brokent line is extruded by a rotation of 2π around the z-axis:

```
Extrude { {0,1,0}, {0,0,0}, 2*Pi}{Line{1,2};}
```

This results in 2 cones, one on each other, like a diamond:

By extruding a single (broken) line, draw a nice Christmas tree as on the figure below. Do not create any cone or box! The key idea is to find the line that can generate the whole geometry.

## Spline

A spline is a function piecewise polynomial. In GMSH, `BSpline`

are `Spline`

that do not necessarily cross their control points (please note that `BSpline`

**are not yet** available with `OpenCASCADE`

engine). Syntax for `Spline`

and `BSpline`

is the following

Syntax | Definition |
---|---|

`Spline(indice) = {p1, p2, ..., pN}` |
Create a spline that goes through control `Point` `p1` ,`p2` ,…,`pN` |

`BSpline(indice) = {p1, p2, ..., pN}` |
Create a B-spline thanks to control `Point` `p1` ,`p2` ,…,`pN` |

`BSpline`

**are not yet**available with

`OpenCASCADE`

!
As usual, there is nothing more useful than an example:

```
SetFactory("OpenCASCADE");
h = 1;
Mesh.CharacteristicLengthMin = h;
Mesh.CharacteristicLengthMax = h;
Point(1) = {0,4,0,h};
Point(2) = {5,2,0,h};
Point(3) = {10,8,0,h};
Point(4) = {15,4,0,h};
Point(5) = {20,10,0,h};
Spline(1) = {1,2,3,4,5};
```

This code create a spline:

Now, extrude this spline using a 2π rotation around the x-axis

```
Extrude { {1,0,0}, {0,0,0}, 2*Pi} { Line{1} ;}
```

And we get a cute open jar. To get a closed one, two lines should be added (on top and on bottom). The whole code would then be:

```
SetFactory("OpenCASCADE");
h = 1;
Mesh.CharacteristicLengthMin = h;
Mesh.CharacteristicLengthMax = h;
// Spline for the jar
Point(1) = {0,4,0,h};
Point(2) = {5,2,0,h};
Point(3) = {10,8,0,h};
Point(4) = {15,4,0,h};
Point(5) = {20,10,0,h};
Spline(1) = {1,2,3,4,5};
// Lines to close the jar
Point(6) = {20,0,0,h};
Point(7) = {0,0 ,0,h};
Line(2) = {5,6};
Line(3) = {7,1};
Extrude { {1,0,0}, {0,0,0}, 2*Pi} { Line{1,2,3} ;}
```

`Visibility`

window (`Tools->Visibility`

) to get back indices of the surfaces, create the `Volume`

associated to the jar. To do, you must add a `Surface Loop`

and then the `Volume`

.
## Exercise

Time to play: draw a flask using `Spline`

and `Extrude`

, with or without support.