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 “<”:

Broken line (before extrusion)

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:

Extruded broken line and meshed (2D)

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.

Christmas tree

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:

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} ;}
Extruded spline resuling in a jar
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.

Exercise

Time to play: draw a flask using Spline and Extrude, with or without support.

Flask with or without support