function varargout = createMengerSponge()
%CREATEMENGERSPONGE Create a cube with an inside cross removed
%
% [n e f] = createMengerSponge;
% Main use is to test possibility of drawing polyhedra with complex faces
% (polygonal faces with holes)
%
% Example
% [n e f] = createMengerSponge;
% drawMesh(n, f);
%
% See also
% meshes3d, drawMesh
%
% ------
% Author: David Legland
% e-mail: david.legland@nantes.inra.fr
% Created: 2007-10-18
% Copyright 2007 INRA - BIA PV Nantes - MIAJ Jouy-en-Josas.
% HISTORY
% 2008-10-17 finishes implementation
nodes =[...
... % main cube corners (1->8)
0 0 0; ...
3 0 0; ...
0 3 0; ...
3 3 0; ...
0 0 3; ...
3 0 3; ...
0 3 3; ...
3 3 3; ...
... % outer cube inner face corners
1 1 0; ... % face z=0 (9->12)
2 1 0; ...
1 2 0; ...
2 2 0; ...
1 1 3; ... % face z=3 (13->16)
2 1 3; ...
1 2 3; ...
2 2 3; ...
1 0 1; ... % face y=0 (17->20)
2 0 1; ...
1 0 2; ...
2 0 2; ...
1 3 1; ... % face y=3 (21->24)
2 3 1; ...
1 3 2; ...
2 3 2; ...
0 1 1; ... % face x=0 (25->28)
0 2 1; ...
0 1 2; ...
0 2 2; ...
3 1 1; ... % face x=3 (29->32)
3 2 1; ...
3 1 2; ...
3 2 2; ...
... % inner cube corners (33->40)
1 1 1; ...
2 1 1; ...
1 2 1; ...
2 2 1; ...
1 1 2; ...
2 1 2; ...
1 2 2; ...
2 2 2; ...
];
edges = [...
1 2;1 3;2 4;3 4;5 6;5 7;6 8;7 8;1 5;2 6;3 7;4 8;... % outer cube
9 10;9 11;10 12;11 12;13 14;13 15;14 16;15 16; ...
17 18;17 19;18 20;19 20; 21 22;21 23;22 24;23 24; ...
25 26;25 27;26 28;27 28; 29 30;29 31;30 32;31 32; ...
33 34;33 35;34 36;35 36; 37 38;37 39;38 40;39 40; ... % inner cube
33 37;34 38;35 39;36 40; ...
9 33;10 34;11 35;12 36; ... % parallel to xy
13 37;14 38;15 39;16 40; ...
17 33;18 34;19 37;20 38; ... % parallel to yz
21 35;22 36;23 39;24 40; ...
25 33;26 35;27 37;28 39; ... % parallel to xz
29 34;30 36;31 38;32 40; ...
];
% Alternative definition for faces:
% [1 2 4 3 NaN 9 11 12 10], ...
% [5 6 8 7 NaN 13 15 16 14], ...
% [1 5 7 3 NaN 25 26 28 27], ....
% [2 6 8 4 NaN 29 30 32 31], ...
% [1 2 6 5 NaN 17 18 20 19], ...
% [3 4 8 7 NaN 21 22 24 23], ...
faces = {...
... % 6 square faces with a square hole
[1 2 4 3 1 9 11 12 10 9], ...
[5 6 8 7 5 13 15 16 14 13], ...
[1 5 7 3 1 25 26 28 27 25], ....
[2 6 8 4 2 29 30 32 31 29], ...
[1 2 6 5 1 17 18 20 19 17], ...
[3 4 8 7 3 21 22 24 23 21], ...
... % faces orthogonal to XY plane, parallel to Oz axis
[ 9 10 34 33], [ 9 11 35 33], [10 12 36 34], [11 12 36 35], ...
[13 14 38 37], [13 15 39 37], [14 16 40 38], [15 16 40 39], ...
... % faces orthogonal to YZ plane, parallel to Oy axis
[17 18 34 33], [17 19 37 33], [18 20 38 34], [19 20 38 37], ...
[21 22 36 35], [21 23 39 35], [22 24 40 36], [23 24 40 39], ...
...% faces orthogonal to the YZ plane, parallel to Ox axis
[25 33 35 26], [25 33 37 27], [26 35 39 28], [27 37 39 28], ...
[29 30 36 34], [29 31 38 34], [30 32 40 36], [31 32 40 38], ...
};
% format output
varargout = formatMeshOutput(nargout, nodes, edges, faces);