# Create BE surface mesh of a guitar body

This demo explains how to create a BE surface mesh of a guitar. The guitar shape is described by cubic Bezier curves, and is saved in an eps file.

## Contents

- Geometrical parameters
- Load and mesh guitar body boundary curve
- Meshing the body surface and the side plates
- Assembling the guitar mesh

## Geometrical parameters

    Ly = 0.65;  % guitar body length [m]
    Lz = 0.1;   % guitar body depth [m]
    Le = 0.02;  % length of a boundary element [m]

## Load and mesh guitar body boundary curve

We first load the boundary curve path of the half guitar body from the postscript file halfguitar.eps using the toolbox function read_epspath. The eps curve needs to be scaled in order to obtain the desired guitar body length. Instead, we first mesh the eps curve with a modified element length (using the toolbox function mesh_path), and the resulting NiHu line mesh is scaled down using function scale_mesh.

    epsfile = 'data/halfguitar.eps';
    epsfile = fullfile(fileparts(mfilename('fullpath')), epsfile);
    [bb, path] = read_epspath(epsfile);
    scale_factor = Ly/max(diff(bb, 1));
    bou = meshpath(path, Le/scale_factor);
    bou = scale_mesh(bou, scale_factor);

    figure;
    plot_mesh(bou);

We translate the mesh to the origin and reflect it in order to obtain a full symmetric guitar boundary.

    bou = translate_mesh(bou, [-max(bou.Nodes(:,2)) 0 0]);
    bou = join_meshes(bou, reflect_mesh(bou, [1 0 0]));

    figure;
    plot_mesh(bou);

## Meshing the body surface and the side plates

The surface of the guitar body is meshed using the toolbox interface function fill_polygon. This function is an interface to the Matlab toolbox mesh2D by Darren Engwirda.

    plate = fill_polygon(bou, Le);

    figure;
    plot_mesh(plate);

    WARNING: 8 duplicate node(s) removed

Mesh2D may refine the boundary of the guitar body surface. Therefore, we redefine the boudary mesh using the toolbox function get_boundary, and extrude it with extrude_mesh in order to obtain the guitar side plate.

    bou = get_boundary(plate);
    nz = ceil(Lz/Le);
    side = extrude_mesh(bou, [0 0 Lz/nz], nz);

    figure;
    plot_mesh(side);

## Assembling the guitar mesh

We finally create the guitar back plate by flipping the elements of the front plate, and assemble the guitar mesh from the three parts.

    back = flip_elements(plate);
    top = translate_mesh(plate, [0 0 Lz]);
    guitar = join_meshes(top, back, side);

After merging coincident nodes and dropping unused nodes, we plot the guitar mesh and outward surface normals

    guitar = merge_coincident_nodes(guitar);
    guitar = drop_unused_nodes(guitar);

    figure;
    plot_mesh(guitar);
    plot_elem_normals(guitar);