Skip to content

Commit c373bfc

Browse files
committed
[test] add binary volume function tests
1 parent 4f19094 commit c373bfc

File tree

1 file changed

+106
-9
lines changed

1 file changed

+106
-9
lines changed

Diff for: test/run_iso2mesh_test.m

+106-9
Original file line numberDiff line numberDiff line change
@@ -230,9 +230,6 @@ function run_iso2mesh_test(tests)
230230
fprintf('Test surface boolean operations\n');
231231
fprintf(sprintf('%s\n', char(ones(1, 79) * 61)));
232232

233-
dir(mcpath(''))
234-
mcpath('cork')
235-
236233
[no1, el1] = meshgrid5(1:2, 1:2, 1:2);
237234
el1 = volface(el1);
238235
[no1, el1] = removeisolatednode(no1, el1);
@@ -276,11 +273,111 @@ function run_iso2mesh_test(tests)
276273
test_iso2mesh('surfboolean resolve region 2', @savejson, round_to_digits(sum(elemvolume(node, elem(elem(:, 5) == 2, 1:4))), 5), '[7.973]');
277274
test_iso2mesh('surfboolean self intersecting test', @savejson, surfboolean(no1, el1, 'self', no2, el2), '[1]');
278275

279-
[no3, el3] = meshgrid5(1:0.4:1.4, 1:0.4:1.4, 1:0.4:1.4);
280-
el3 = volface(el3);
281-
[no3, el3] = removeisolatednode(no3, el3);
276+
% [no3, el3] = meshgrid5(1:0.4:1.4, 1:0.4:1.4, 1:0.4:1.4);
277+
% el3 = volface(el3);
278+
% [no3, el3] = removeisolatednode(no3, el3);
279+
280+
% [no4, el4] = surfboolean(no1, el1, 'separate', no3, el3);
281+
% [node, elem] = s2m(no4, el4, 1, 100, 'tetgen', [1.5, 1.5, 1.5]);
282+
% test_iso2mesh('surfboolean separate', @savejson, unique(elem(:, 5))', '[0,1]');
283+
end
284+
285+
%%
286+
if (ismember('vol', tests))
287+
fprintf(sprintf('%s\n', char(ones(1, 79) * 61)));
288+
fprintf('Test binary volume processing\n');
289+
fprintf(sprintf('%s\n', char(ones(1, 79) * 61)));
290+
291+
vol = zeros(3, 4, 3);
292+
vol(2, 2:3, 2) = 1;
293+
294+
test_iso2mesh('volgrow 1', @savejson, volgrow(vol), '[[[0,0,0],[0,1,0],[0,1,0],[0,0,0]],[[0,1,0],[1,1,1],[1,1,1],[0,1,0]],[[0,0,0],[0,1,0],[0,1,0],[0,0,0]]]', 'NestArray', 1);
295+
test_iso2mesh('volgrow 2', @savejson, volgrow(vol, 2), '[[[0,1,0],[1,1,1],[1,1,1],[0,1,0]],[[1,1,1],[1,1,1],[1,1,1],[1,1,1]],[[0,1,0],[1,1,1],[1,1,1],[0,1,0]]]', 'NestArray', 1);
296+
test_iso2mesh('volgrow nonbinary 2', @savejson, volgrow(vol * 2.5, 2), '[[[0,1,0],[1,1,1],[1,1,1],[0,1,0]],[[1,1,1],[1,1,1],[1,1,1],[1,1,1]],[[0,1,0],[1,1,1],[1,1,1],[0,1,0]]]', 'NestArray', 1);
297+
298+
mask = zeros(3, 3, 3);
299+
mask(1:13:end) = 1;
300+
301+
test_iso2mesh('volgrow user mask', @savejson, volgrow(vol, 1, mask), '[[[0,0,1],[0,0,1],[0,0,0],[0,0,0]],[[0,0,0],[0,1,0],[0,1,0],[0,0,0]],[[0,0,0],[0,0,0],[1,0,0],[1,0,0]]]', 'NestArray', 1);
302+
test_iso2mesh('volgrow 2d', @savejson, volgrow(vol(:, :, 2)), '[[0,1,1,0],[1,1,1,1],[0,1,1,0]]', 'NestArray', 1);
303+
test_iso2mesh('volgrow 2d with user mask', @savejson, volgrow(vol(:, :, 2), 1, [1 1 0; 1 1 1; 0 0 1]), '[[1,1,0,0],[1,1,1,1],[0,1,1,1]]', 'NestArray', 1);
304+
test_iso2mesh('volgrow 2d with logical inputs', @savejson, volgrow(logical(squeeze(vol(:, 2, :))), 1, logical([0 1 0; 0 1 1; 0 0 1])), '[[1,0,0],[1,1,0],[0,1,0]]', 'NestArray', 1);
305+
306+
vol1 = volgrow(magic(60) > 2000, 2);
307+
test_iso2mesh('volgrow 2d with complex mask', @savejson, sum(vol1(:)), '[3380]', 'NestArray', 1);
308+
test_iso2mesh('volgrow 2d with simple mask', @savejson, volgrow([0 0 0 0; 0 0 1 0; 0 0 0 0], 2), '[[0,1,1,1],[1,1,1,1],[0,1,1,1]]', 'NestArray', 1);
309+
test_iso2mesh('volgrow 2d with ones mask', @savejson, volgrow([0 0 0 0; 0 0 1 0; 0 0 0 0], 1, ones(3)), '[[0,1,1,1],[0,1,1,1],[0,1,1,1]]');
310+
311+
vol1 = volgrow(full(sparse([2, 5, 7], [3, 3, 6], [1 1 1], 10, 8)), 10, [0 0 0; 1 1 1; 0 0 0]);
312+
mask = repmat([0, 1, 0, 0, 1, 0, 1, 0, 0, 0]', 1, 8);
313+
test_iso2mesh('volgrow 2d x-line mask', @savejson, all(vol1(:) == mask(:)), '[true]');
314+
315+
vol1 = volgrow(full(sparse([2, 5, 7], [3, 3, 6], [1 1 1], 10, 8)), 10, [0 1 0; 0 1 0; 0 1 0]);
316+
mask = repmat([0, 0, 1, 0, 0, 1, 0, 0], 10, 1);
317+
test_iso2mesh('volgrow 2d y-line mask', @savejson, all(vol1(:) == mask(:)), '[true]');
318+
319+
vol = ones(3, 4, 5);
320+
vol(1:6) = 0;
321+
vol(end) = 0;
322+
323+
test_iso2mesh('volshrink 3d 1', @savejson, volshrink(vol), '[[[0,0,1,1,1],[0,0,1,1,1],[0,1,1,1,1],[1,1,1,1,1]],[[0,0,1,1,1],[0,0,1,1,1],[0,1,1,1,1],[1,1,1,1,0]],[[0,0,1,1,1],[0,0,1,1,1],[0,1,1,1,0],[1,1,1,0,0]]]', 'NestArray', 1);
324+
325+
vol1 = volshrink(volgrow(volshrink(vol), 1, ones(3, 3, 3)), 1, ones(3, 3, 3));
326+
test_iso2mesh('volshrink 3d ones', @savejson, vol1, '[[[0,0,1,1,1],[0,0,1,1,1],[1,1,1,1,1],[1,1,1,1,1]],[[0,0,1,1,1],[0,0,1,1,1],[1,1,1,1,1],[1,1,1,1,1]],[[0,0,1,1,1],[0,0,1,1,1],[1,1,1,1,1],[1,1,1,1,1]]]', 'NestArray', 1);
327+
test_iso2mesh('volshrink 3d 2x user mask', @savejson, volshrink(~vol1, 2, repmat([0 0 0; 0 1 0; 0 1 0], 1, 1, 3)), '[[[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],[[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]],[[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]]', 'NestArray', 1);
328+
329+
vol1 = volshrink([0 1 1 1; 0 1 1 1; 0 1 1 0]);
330+
mask = [0 0 1 1; 0 0 1 0; 0 0 0 0];
331+
test_iso2mesh('volshrink 2d', @savejson, all(vol1(:) == mask(:)), '[true]');
332+
test_iso2mesh('volshrink 2d 2x', @savejson, volshrink(vol1), '[[0,0,0,0],[0,0,0,0],[0,0,0,0]]');
333+
334+
vol1 = volshrink((magic(10) > 20), 2, logical([0 1 0; 1 1 1; 0 1 1]));
335+
mask = [0 0 0 0 0 0 0 1 1 1; 0 0 0 0 0 0 0 1 1 1; 0 0 0 0 0 0 1 1 1 1; 0 0 0 0 0 0 0 1 1 1; 0 0 0 0 0 0 0 1 1 1; 0 0 0 0 0 0 1 1 1 1; 0 0 0 0 0 1 1 1 1 1; 0 0 0 0 0 1 1 1 1 1; 0 0 0 0 1 1 1 1 1 1; 0 0 0 0 1 1 1 1 1 1];
336+
test_iso2mesh('volshrink 2d 2x user mask', @savejson, all(vol1(:) == mask(:)), '[true]');
337+
338+
vol = zeros(30, 40, 50);
339+
vol(10:20, 20:35, 20:40) = 1;
340+
vol(13:18, 25:30, 25:30) = 0;
341+
vol(14:17, 26:28, 1:30) = 0;
342+
343+
vol1 = volclose(vol, 2);
344+
test_iso2mesh('volclose 2x', @savejson, sum(vol1(:)), '[3566]');
345+
vol1 = volclose(vol, 4);
346+
test_iso2mesh('volclose 4x', @savejson, sum(vol1(:)), '[3682]');
347+
vol1 = volopen(volclose(vol, 2), 2);
348+
test_iso2mesh('volopen/volclose 2x', @savejson, sum(vol1(:)), '[2994]');
349+
vol1 = volclose(volopen(vol, 2), 2);
350+
test_iso2mesh('volopen/volclose 2x', @savejson, sum(vol1(:)), '[2604]');
351+
352+
vol1 = fillholes3d(volclose(vol, 2));
353+
test_iso2mesh('fillholes3d + volclose', @savejson, sum(vol1(:)), '[3682]');
354+
355+
vol1 = fillholes3d(vol, 2);
356+
test_iso2mesh('fillholes3d 2x', @savejson, sum(vol1(:)), '[3682]');
357+
358+
vol1 = fillholes3d(vol, 1);
359+
test_iso2mesh('fillholes3d 1x', @savejson, sum(vol1(:)), '[3478]');
360+
361+
vol1 = fillholes3d(vol, 5);
362+
test_iso2mesh('fillholes3d 5x', @savejson, sum(vol1(:)), '[4097]');
363+
364+
vol1 = fillholes3d(vol, 4, permute(repmat([0 0 0; 0 1 0; 0 0 0], 1, 1, 3), [3 1 2]));
365+
test_iso2mesh('fillholes3d x-axis mask', @savejson, sum(vol1(:)), '[3696]');
366+
367+
vol1 = fillholes3d(vol, 4, repmat([0 0 0; 0 1 0; 0 0 0], 1, 1, 3));
368+
test_iso2mesh('fillholes3d z-axis mask', @savejson, sum(vol1(:)), '[3682]');
369+
370+
vol1 = laplacefill(volclose(vol, 2));
371+
test_iso2mesh('laplacefill', @savejson, sum(vol1(:)), '[3682]');
372+
373+
vol1 = laplacefill(volclose(vol, 2), [], 'bicgstab', 1e-6);
374+
test_iso2mesh('laplacefill bicgstab', @savejson, sum(vol1(:)), '[3682]');
375+
376+
vol1 = laplacefill(volclose(vol, 2), [2, 2, 2]);
377+
vol1 = (vol1 < 1e-10);
378+
test_iso2mesh('laplacefill close seed', @savejson, sum(vol1(:)), '[3682]');
282379

283-
[no4, el4] = surfboolean(no1, el1, 'separate', no3, el3);
284-
[node, elem] = s2m(no4, el4, 1, 100, 'tetgen', [1.5, 1.5, 1.5]);
285-
test_iso2mesh('surfboolean resolve region 2', @savejson, unique(elem(:, 5))', '[0,1]');
380+
vol1 = laplacefill(vol, [2, 2, 2]);
381+
vol1 = (vol1 > 1e-10);
382+
test_iso2mesh('laplacefill open seed', @savejson, sum(vol1(:)), '[56580]');
286383
end

0 commit comments

Comments
 (0)