31 float vstartPrev, vendPrev, vstart = 0, vend = 0, vstartNext = 0, vendNext = 0;
32 size_t vsPrev, vePrev, vs = 0, ve = 0, vsNext = 0, veNext = 0;
33 float uangle = (bbox.
Min()[0] + .5f * epsilon) / m_sphere->
Radius();
34 float radius = std::sin(uangle) * m_sphere->
Radius();
39 (
size_t)
std::max((intptr_t)0, (intptr_t)((vstartNext - bbox.
Min()[1]) / epsilon)));
42 std::min((intptr_t)vextent - 1, (intptr_t)((vendNext - bbox.
Min()[1]) / epsilon)));
43 for (
size_t u = 0; u < uextent; ++u)
56 float uangleNext = ((u + 1.5f) * epsilon + bbox.
Min()[0]) / m_sphere->
Radius();
57 float radiusNext = std::sin(uangle) * m_sphere->
Radius();
62 (
size_t)
std::max((intptr_t)0, (intptr_t)((vstartNext - bbox.
Min()[1]) / epsilon)));
65 std::min((intptr_t)vextent - 1, (intptr_t)((vendNext - bbox.
Min()[1]) / epsilon)));
67 if (vstart <= bbox.
Min()[1] - epsilon || vend >= bbox.
Max()[1] + epsilon ||
68 !(*componentImg)[vs * uextent + u])
73 if ((*componentImg)[ve * uextent + u])
75 (*componentImg)[vs * uextent + u], (*componentImg)[ve * uextent + u], &tempLabels);
76 if (u > 0 && vstartPrev > bbox.
Min()[1] - epsilon && vendPrev < bbox.
Min()[1] + epsilon &&
77 (*componentImg)[vePrev * uextent + u - 1])
79 (*componentImg)[vePrev * uextent + u - 1],
81 if (u < uextent - 1 && vstartNext > bbox.
Min()[1] - epsilon &&
82 vendNext < bbox.
Min()[1] + epsilon && (*componentImg)[veNext * uextent + u + 1])
84 (*componentImg)[veNext * uextent + u + 1],
89 for (
size_t i = tempLabels.
size() - 1; i > 0; --i)
95 labels->reserve(condensed.
size());
97 for (
size_t i = 0; i < tempLabels.
size(); ++i)
98 if (i == tempLabels[i].first)
100 labels->push_back(std::make_pair(count, tempLabels[i].second));
101 condensed[i] = count;
105 (*labels)[condensed[tempLabels[i].first]].second += tempLabels[i].second;
107 for (
size_t i = 0; i < componentImg->
size(); ++i)
108 (*componentImg)[i] = condensed[tempLabels[(*componentImg)[i]].first];
122 nframe.FromNormal(m_frame[2]);
124 nframe.ToTangent(m_frame[0], &t);
125 for (
unsigned int i = 0; i < 2; ++i)
129 float angle = std::atan2(t[1], t[0]);
138 for (
unsigned int i = 0; i < 3; ++i)
140 (*o) << m_frame[2][i] <<
" ";
142 (*o) <<
angle <<
" ";
153 i->read((
char*)&normal,
sizeof(normal));
154 i->read((
char*)&rot,
sizeof(rot));
158 for (
unsigned int j = 0; j < 3; ++j)
164 m_frame.FromNormal(normal);
165 m_frame.RotateOnNormal(rot);