Skip to content

Commit 2d4854e

Browse files
ready for pull request
1 parent 0e55f06 commit 2d4854e

File tree

2 files changed

+55
-45
lines changed

2 files changed

+55
-45
lines changed

src/Core/Algorithms/Field/InterfaceWithCleaverAlgorithm.cc

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ FieldHandle InterfaceWithCleaverAlgorithm::run(const std::vector<FieldHandle>& i
191191
}
192192
} else
193193
{
194-
THROW_ALGORITHM_INPUT_ERROR(" Input field needs to be a structured mesh (LatVOL) with float values defnied on the elements. ");
194+
THROW_ALGORITHM_INPUT_ERROR(" Input field needs to be a structured mesh (best would be a LatVol) with float values defnied on the elements. ");
195195
}
196196

197197
}
@@ -239,15 +239,20 @@ FieldHandle InterfaceWithCleaverAlgorithm::run(const std::vector<FieldHandle>& i
239239

240240
boost::scoped_ptr<Cleaver::TetMesh> mesh(Cleaver::createMeshFromVolume(paddedVolume.get(), verbose));
241241

242+
auto nr_of_tets = mesh->tets.size();
243+
auto nr_of_verts = mesh->verts.size();
244+
245+
if (nr_of_tets==0 || nr_of_verts==0)
246+
{
247+
THROW_ALGORITHM_INPUT_ERROR(" Number of resulting tetrahedral nodes or elements is 0. If you disabled padding enable it and execute again. ");
248+
}
249+
242250
FieldInformation fi("TetVolMesh",0,"double"); ///create output field
243251

244252
output = CreateField(fi);
245253
auto omesh = output->vmesh();
246254
auto ofield = output->vfield();
247255

248-
auto nr_of_tets = mesh->tets.size();
249-
auto nr_of_verts = mesh->verts.size();
250-
251256
omesh->node_reserve(nr_of_verts);
252257
omesh->elem_reserve(nr_of_tets);
253258

src/Core/Algorithms/Field/Tests/InterfaceWithCleaverAlgorithmTests.cc

Lines changed: 46 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -42,46 +42,48 @@ using namespace SCIRun::Core::Algorithms::Fields;
4242
using namespace SCIRun::TestUtils;
4343

4444

45-
FieldHandle SphereSignedDistanceField(bool negative)
45+
FieldHandle BoxSignedDistanceField(bool negative)
4646
{
4747

4848
FieldInformation f("LatVolMesh", 1, "float");
49-
size_type size = 5;
50-
Point minb(-2.0, -2.0, -2.0);
51-
Point maxb(2.0, 2.0, 2.0);
49+
size_type size = 3;
50+
Point minb(-1.0, -1.0, -1.0);
51+
Point maxb(1.0, 1.0, 1.0);
5252
MeshHandle omesh = CreateMesh(f, size, size, size, minb, maxb);
5353
FieldHandle ofield = CreateField(f,omesh);
54-
std::vector<double> values(125);
55-
values[0]=0.9641;values[1]=0.5;values[2]=0.32843;values[3]=0.5;values[4]=0.9641;values[5]=0.5;
56-
values[6]=-0.05051;values[7]=-0.26393;values[8]=-0.05051;values[9]=0.5;values[10]=0.32843;
57-
values[11]=-0.26393;values[12]=-0.5;values[13]=-0.26393;values[14]=0.32843;values[15]=0.5;
58-
values[16]=-0.05051;values[17]=-0.26393;values[18]=-0.05051;values[19]=0.5;values[20]=0.9641;
59-
values[21]=0.5;values[22]=0.32843;values[23]=0.5;values[24]=0.9641;values[25]=0.5;
60-
values[26]=-0.05051;values[27]=-0.26393;values[28]=-0.05051;values[29]=0.5;
61-
values[30]=-0.05051;values[31]=-0.76795;values[32]=-1.0858;values[33]=-0.76795;
62-
values[34]=-0.05051;values[35]=-0.26393;values[36]=-1.0858;values[37]=-1.5;
63-
values[38]=-1.0858;values[39]=-0.26393;values[40]=-0.05051;values[41]=-0.76795;
64-
values[42]=-1.0858;values[43]=-0.76795;values[44]=-0.05051;values[45]=0.5;values[46]=-0.05051;
65-
values[47]=-0.26393;values[48]=-0.05051;values[49]=0.5;values[50]=0.32843;values[51]=-0.26393;
66-
values[52]=-0.5;values[53]=-0.26393;values[54]=0.32843;values[55]=-0.26393;values[56]=-1.0858;
67-
values[57]=-1.5;values[58]=-1.0858;values[59]=-0.26393;values[60]=-0.5;values[61]=-1.5;
68-
values[62]=-2.5;values[63]=-1.5;values[64]=-0.5;values[65]=-0.26393;values[66]=-1.0858;
69-
values[67]=-1.5;values[68]=-1.0858;values[69]=-0.26393;values[70]=0.32843;values[71]=-0.26393;
70-
values[72]=-0.5;values[73]=-0.26393;values[74]=0.32843;values[75]=0.5;values[76]=-0.05051;
71-
values[77]=-0.26393;values[78]=-0.05051;values[79]=0.5;values[80]=-0.05051;values[81]=-0.76795;
72-
values[82]=-1.0858;values[83]=-0.76795;values[84]=-0.05051;values[85]=-0.26393;values[86]=-1.0858;
73-
values[87]=-1.5;values[88]=-1.0858;values[89]=-0.26393;values[90]=-0.05051;values[91]=-0.76795;
74-
values[92]=-1.0858;values[93]=-0.76795;values[94]=-0.05051;values[95]=0.5;values[96]=-0.05051;
75-
values[97]=-0.26393;values[98]=-0.05051;values[99]=0.5;values[100]=0.9641;values[101]=0.5;
76-
values[102]=0.32843;values[103]=0.5;values[104]=0.9641;values[105]=0.5;values[106]=-0.05051;
77-
values[107]=-0.26393;values[108]=-0.05051;values[109]=0.5;values[110]=0.32843;values[111]=-0.26393;
78-
values[112]=-0.5;values[113]=-0.26393;values[114]=0.32843;values[115]=0.5;values[116]=-0.05051;
79-
values[117]=-0.26393;values[118]=-0.05051;values[119]=0.5;values[120]=0.9641;values[121]=0.5;
80-
values[122]=0.32843;values[123]=0.5;values[124]=0.9641;
54+
std::vector<double> values(27);
55+
56+
values[0]=-1.73205077648162841796875;
57+
values[1]=-1.41421353816986083984375;
58+
values[2]=-1.73205077648162841796875;
59+
values[3]=-1.41421353816986083984375;
60+
values[4]=-1;
61+
values[5]=-1.41421353816986083984375;
62+
values[6]=-1.73205077648162841796875;
63+
values[7]=-1.41421353816986083984375;
64+
values[8]=-1.73205077648162841796875;
65+
values[9]=-1.41421353816986083984375;
66+
values[10]=-1;
67+
values[11]=-1.41421353816986083984375;
68+
values[12]=-1;
69+
values[13]=0;
70+
values[14]=-1;
71+
values[15]=-1.41421353816986083984375;
72+
values[16]=-1;
73+
values[17]=-1.41421353816986083984375;
74+
values[18]=-1.73205077648162841796875;
75+
values[19]=-1.41421353816986083984375;
76+
values[20]=-1.73205077648162841796875;
77+
values[21]=-1.41421353816986083984375;
78+
values[22]=-1;
79+
values[23]=-1.41421353816986083984375;
80+
values[24]=-1.73205077648162841796875;
81+
values[25]=-1.41421353816986083984375;
82+
values[26]=-1.73205077648162841796875;
8183

8284
if (negative)
8385
{
84-
for (int i=0;i<125;i++)
86+
for (int i=0;i<27;i++)
8587
{
8688
values[i]=-values[i];
8789
}
@@ -95,16 +97,19 @@ using namespace SCIRun::TestUtils;
9597
TEST(CleaverInterfaceTest, SphereSignedDistanceFieldMatrix1)
9698
{
9799
InterfaceWithCleaverAlgorithm algo;
98-
FAIL() << "todo";
99100

100-
/* auto info = algo.run(SphereSignedDistanceField(false),SphereSignedDistanceField(true));
101+
std::vector<FieldHandle> inputs;
102+
inputs.push_back(BoxSignedDistanceField(true));
103+
inputs.push_back(BoxSignedDistanceField(false));
104+
105+
auto info = algo.run(inputs);
101106

102-
std::cout << "Number of mesh elements: " << info->vmesh()->num_elems() << std::endl;
103-
std::cout << "Number of mesh nodes: " << info->vmesh()->num_nodes() << std::endl;
104-
std::cout << "Number of mesh values: " << info->vfield()->num_values() << std::endl;
107+
std::cout << "Number of mesh elements: " << info->vmesh()->num_elems() << std::endl;
108+
std::cout << "Number of mesh nodes: " << info->vmesh()->num_nodes() << std::endl;
109+
std::cout << "Number of mesh values: " << info->vfield()->num_values() << std::endl;
105110

106-
ASSERT_TRUE(info->vmesh()->num_elems() != 98650);
107-
ASSERT_TRUE(info->vmesh()->num_nodes() != 18367);
108-
ASSERT_TRUE(info->vfield()->num_values() != 98650);
109-
*/
111+
ASSERT_TRUE(info->vmesh()->num_elems() == 4326);
112+
ASSERT_TRUE(info->vmesh()->num_nodes() == 908);
113+
ASSERT_TRUE(info->vfield()->num_values() == 4326);
114+
110115
}

0 commit comments

Comments
 (0)