1 #ifndef BITMAPPRIMITIVESHAPE_HEADER
2 #define BITMAPPRIMITIVESHAPE_HEADER
34 bool Init(
bool binary, std::istream* i);
38 bool doFiltering =
true,
39 float* borderRatio = 0);
46 bool doFiltering =
true);
51 std::deque<ComponentPolygons>* polys)
const;
59 virtual void Parameters(
const Vec3f& p, std::pair<float, float>* param)
const = 0;
68 virtual void BitmapExtent(
float epsilon,
73 virtual void InBitmap(
const std::pair<float, float>& param,
78 std::pair<int, int>* inBmp)
const = 0;
87 bool* vwrap)
const = 0;
102 template <
class IteratorT>
113 template <
class IteratorT>
124 size_t border)
const;
132 std::deque<ComponentPolygons>* polys)
const;
138 template <
class IteratorT>
151 int size = end - begin;
152 params->resize(size);
157 std::numeric_limits<float>::infinity());
158 bbox->
Max() = -bbox->
Min();
159 for (
size_t i = 0; i < (size_t)size; ++i)
161 if ((*params)[i].first < bbox->
Min()[0])
163 bbox->
Min()[0] = (*params)[i].first;
165 if ((*params)[i].first > bbox->
Max()[0])
167 bbox->
Max()[0] = (*params)[i].first;
169 if ((*params)[i].second < bbox->
Min()[1])
171 bbox->
Min()[1] = (*params)[i].second;
173 if ((*params)[i].second > bbox->
Max()[1])
175 bbox->
Max()[1] = (*params)[i].second;
189 bitmap->
resize((*uextent) * (*vextent));
190 std::fill(bitmap->
begin(), bitmap->
end(),
false);
192 bmpIdx->
resize(params->size());
194 for (
int i = 0; i < size; ++i)
196 std::pair<int, int> bmpParam;
197 InBitmap((*params)[i], *epsilon, *bbox, *uextent, *vextent, &bmpParam);
201 (*bitmap)[(*bmpIdx)[i] = bmpParam.first + bmpParam.second * (*uextent)] =
true;
205 template <
class IteratorT>
219 params->resize(end - begin);
225 for (++i; i != end; ++i, ++j)
228 if (bbox->
Min()[0] > (*params)[j].first)
230 bbox->
Min()[0] = (*params)[j].first;
232 else if (bbox->
Max()[0] < (*params)[j].first)
234 bbox->
Max()[0] = (*params)[j].first;
236 if (bbox->
Min()[1] > (*params)[j].second)
238 bbox->
Min()[1] = (*params)[j].second;
240 else if (bbox->
Max()[1] < (*params)[j].second)
242 bbox->
Max()[1] = (*params)[j].second;
256 bitmap->
resize(((*uextent) + 2 * border) * ((*vextent) + 2 * border));
257 std::fill(bitmap->
begin(), bitmap->
end(),
false);
259 bmpIdx->
resize(params->size());
260 size_t lineWidth = (*uextent) + 2 * border;
261 for (
size_t i = 0; i < params->size(); ++i)
263 std::pair<int, int> bmpParam;
264 InBitmap((*params)[i], *epsilon, *bbox, *uextent, *vextent, &bmpParam);
268 (*bitmap)[(*bmpIdx)[i] = bmpParam.first + border + (bmpParam.second + border) * lineWidth] =