void Clipping::clipBottom(Coordinates& input, Coordinates& output){ if(output.size() > 0) output.clear(); if(input.size() == 0) return; double clipY = m_w->minY; input.push_back(input[0]); for(unsigned int i = 0; i < input.size()-1; i++){ Coordinate c0 = input[i]; Coordinate c1 = input[i+1]; //Caso 1: out -> out if(c0.y < clipY && c1.y < clipY){} //Caso 2: in -> in if(c0.y >= clipY && c1.y >= clipY) output.push_back(c1); double y = clipY; double m = (c1.x-c0.x)/(c1.y-c0.y); double x = m * (y-c0.y) + c0.x; //Caso 3: in -> out if(c0.y >= clipY && c1.y < clipY) output.emplace_back(x,y); //Caso 4: out -> in if(c0.y < clipY && c1.y >= clipY){ output.emplace_back(x,y); output.push_back(c1); } } }
void Clipping::clipRight(Coordinates& input, Coordinates& output){ if(output.size() > 0) output.clear(); if(input.size() == 0) return; double clipX = m_w->maxX; input.push_back(input[0]); for(unsigned int i = 0; i < input.size()-1; i++){ Coordinate c0 = input[i]; Coordinate c1 = input[i+1]; //Caso 1: out -> out if(c0.x >= clipX && c1.x >= clipX){} //Caso 2: in -> in if(c0.x < clipX && c1.x < clipX) output.push_back(c1); double x = clipX; double m = (c1.y-c0.y)/(c1.x-c0.x); double y = m * (x-c0.x) + c0.y; //Caso 3: in -> out if(c0.x < clipX && c1.x >= clipX) output.emplace_back(x,y); //Caso 4: out -> in if(c0.x >= clipX && c1.x < clipX){ output.emplace_back(x,y); output.push_back(c1); } } }
void Coordinates_test:: t_readwrite() { Coordinates c; c.clear(); QCOMPARE(c.count(), 0); c << 1.0 << 3.0; c.clear(); QCOMPARE(c.count(), 0); c << 1.0 << 3.0; c.erase(c.begin(), c.end()); QCOMPARE(c.count(), 0); c << 1.0 << 0.0; Coordinates::iterator i= c.erase(c.begin()); QCOMPARE(*i, 0.0); i= c.insert(c.end(), 1.0); QCOMPARE(*i, 1.0); QCOMPARE(c.count(), 2); c.pop_back(); QCOMPARE(c.count(), 1); // 0 QCOMPARE(c[0], 0.0); c.push_back(2.0); QCOMPARE(c.count(), 2); c.append(3.0); QCOMPARE(c.count(), 3); // 0, 2, 3 QCOMPARE(c[2], 3.0); c.insert(0, 4.0); QCOMPARE(c[0], 4.0); QCOMPARE(c[3], 3.0); c.insert(c.count(), 5.0); QCOMPARE(c.count(), 5); // 4, 0, 2, 3, 5 QCOMPARE(c[4], 5.0); c.move(4, 0); QCOMPARE(c.count(), 5); // 5, 4, 0, 2, 3 QCOMPARE(c[0], 5.0); c.pop_front(); QCOMPARE(c.count(), 4); QCOMPARE(c[0], 4.0); c.prepend(6.0); QCOMPARE(c.count(), 5); // 6, 4, 0, 2, 3 QCOMPARE(c[0], 6.0); c.push_front(7.0); QCOMPARE(c.count(), 6); QCOMPARE(c[0], 7.0); c.removeAt(1); QCOMPARE(c.count(), 5); // 7, 4, 0, 2, 3 QCOMPARE(c[1], 4.0); c.removeFirst(); QCOMPARE(c.count(), 4); // 4, 0, 2, 3 QCOMPARE(c[0], 4.0); c.removeLast(); QCOMPARE(c.count(), 3); QCOMPARE(c.last(), 2.0); c.replace(2, 8.0); QCOMPARE(c.count(), 3); // 4, 0, 8 QCOMPARE(c[2], 8.0); c.swap(0, 2); QCOMPARE(c[2], 4.0); double d= c.takeAt(2); QCOMPARE(c.count(), 2); // 8, 0 QCOMPARE(d, 4.0); double d2= c.takeFirst(); QCOMPARE(c.count(), 1); // 0 QCOMPARE(d2, 8.0); double d3= c.takeLast(); QVERIFY(c.isEmpty()); \ QCOMPARE(d3, 0.0); }//t_readwrite