Fix createUnion internal function of polygon.cpp

Added special treatment in cases of horizontal lines which input
argument to createUnion is “ints == 0”.  Conditionals were sorted, it
was being generate extra scan segment pair next to pair in analysis,
instead of an augmentation of it.
This commit is contained in:
Gaspar Capello 2019-06-03 16:30:22 -03:00 committed by David Capello
parent 62802cfbdf
commit 8ae289d7e6

View File

@ -40,28 +40,36 @@ static void createUnion(std::vector<int>& pairs,
int& ints)
{
bool unionDone = false;
ASSERT(ints >= 0);
if (ints == 0) {
pairs.push_back(x);
pairs.push_back(x);
ints+=2;
return;
}
for (int i=0; i < ints - (ints%2); i+=2) {
// Case:
// pairs[i] pairs[i+1]
// O --------- O
// -x-
if (x < pairs[i]) {
pairs.insert(pairs.begin()+i, x);
pairs.insert(pairs.begin()+i, x);
ints+=2;
unionDone = true;
break;
}
// Case:
// pairs[i] pairs[i+1]
// O --------- O
// -x-
else if (x == pairs[i] - 1) {
if (x == pairs[i] - 1) {
pairs[i] = x;
unionDone = true;
break;
}
// Case:
// pairs[i] pairs[i+1]
// O --------- O
// -x-
else if (x < pairs[i] - 1) {
pairs.insert(pairs.begin()+i, x);
pairs.insert(pairs.begin()+i, x);
ints+=2;
unionDone = true;
break;
}
// Case:
// pairs[i] pairs[i+1]
// O --------- O
// -x-