# 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
Reminder: 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} ;}

Using the 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.
Time to play: draw a flask using Spline and Extrude, with or without support.