| ... | ... |
@@ -200,49 +200,49 @@ |
| 200 | 200 |
} |
| 201 | 201 |
if (!(is >> z.x)) return is; |
| 202 | 202 |
if (is >> c) {
|
| 203 | 203 |
if (c != ',') is.putback(c); |
| 204 | 204 |
} else {
|
| 205 | 205 |
is.clear(); |
| 206 | 206 |
} |
| 207 | 207 |
if (!(is >> z.y)) return is; |
| 208 | 208 |
if (is >> c) {
|
| 209 | 209 |
if (c != ')') is.putback(c); |
| 210 | 210 |
} else {
|
| 211 | 211 |
is.clear(); |
| 212 | 212 |
} |
| 213 | 213 |
return is; |
| 214 | 214 |
} |
| 215 | 215 |
|
| 216 | 216 |
///Write a plain vector to a stream |
| 217 | 217 |
|
| 218 | 218 |
///Write a plain vector to a stream. |
| 219 | 219 |
///\relates Point |
| 220 | 220 |
/// |
| 221 | 221 |
template<typename T> |
| 222 | 222 |
inline std::ostream& operator<<(std::ostream &os, const Point<T>& z) |
| 223 | 223 |
{
|
| 224 |
os << "(" << z.x << ",
|
|
| 224 |
os << "(" << z.x << "," << z.y << ")";
|
|
| 225 | 225 |
return os; |
| 226 | 226 |
} |
| 227 | 227 |
|
| 228 | 228 |
///Rotate by 90 degrees |
| 229 | 229 |
|
| 230 | 230 |
///Returns the parameter rotated by 90 degrees in positive direction. |
| 231 | 231 |
///\relates Point |
| 232 | 232 |
/// |
| 233 | 233 |
template<typename T> |
| 234 | 234 |
inline Point<T> rot90(const Point<T> &z) |
| 235 | 235 |
{
|
| 236 | 236 |
return Point<T>(-z.y,z.x); |
| 237 | 237 |
} |
| 238 | 238 |
|
| 239 | 239 |
///Rotate by 180 degrees |
| 240 | 240 |
|
| 241 | 241 |
///Returns the parameter rotated by 180 degrees. |
| 242 | 242 |
///\relates Point |
| 243 | 243 |
/// |
| 244 | 244 |
template<typename T> |
| 245 | 245 |
inline Point<T> rot180(const Point<T> &z) |
| 246 | 246 |
{
|
| 247 | 247 |
return Point<T>(-z.x,-z.y); |
| 248 | 248 |
} |
| ... | ... |
@@ -512,48 +512,89 @@ |
| 512 | 512 |
} |
| 513 | 513 |
|
| 514 | 514 |
///Intersection of two bounding boxes |
| 515 | 515 |
|
| 516 | 516 |
///Intersection of two bounding boxes. |
| 517 | 517 |
/// |
| 518 | 518 |
BoundingBox operator&(const BoundingBox& u) const {
|
| 519 | 519 |
BoundingBox b; |
| 520 | 520 |
if (_empty || u._empty) {
|
| 521 | 521 |
b._empty = true; |
| 522 | 522 |
} else {
|
| 523 | 523 |
b._bottom_left.x = std::max(_bottom_left.x, u._bottom_left.x); |
| 524 | 524 |
b._bottom_left.y = std::max(_bottom_left.y, u._bottom_left.y); |
| 525 | 525 |
b._top_right.x = std::min(_top_right.x, u._top_right.x); |
| 526 | 526 |
b._top_right.y = std::min(_top_right.y, u._top_right.y); |
| 527 | 527 |
b._empty = b._bottom_left.x > b._top_right.x || |
| 528 | 528 |
b._bottom_left.y > b._top_right.y; |
| 529 | 529 |
} |
| 530 | 530 |
return b; |
| 531 | 531 |
} |
| 532 | 532 |
|
| 533 | 533 |
};//class Boundingbox |
| 534 | 534 |
|
| 535 | 535 |
|
| 536 |
///Read a bounding box from a stream |
|
| 537 |
|
|
| 538 |
///Read a bounding box from a stream. |
|
| 539 |
///\relates BoundingBox |
|
| 540 |
template<typename T> |
|
| 541 |
inline std::istream& operator>>(std::istream &is, BoundingBox<T>& b) {
|
|
| 542 |
char c; |
|
| 543 |
Point<T> p; |
|
| 544 |
if (is >> c) {
|
|
| 545 |
if (c != '(') is.putback(c);
|
|
| 546 |
} else {
|
|
| 547 |
is.clear(); |
|
| 548 |
} |
|
| 549 |
if (!(is >> p)) return is; |
|
| 550 |
b.bottomLeft(p); |
|
| 551 |
if (is >> c) {
|
|
| 552 |
if (c != ',') is.putback(c); |
|
| 553 |
} else {
|
|
| 554 |
is.clear(); |
|
| 555 |
} |
|
| 556 |
if (!(is >> p)) return is; |
|
| 557 |
b.topRight(p); |
|
| 558 |
if (is >> c) {
|
|
| 559 |
if (c != ')') is.putback(c); |
|
| 560 |
} else {
|
|
| 561 |
is.clear(); |
|
| 562 |
} |
|
| 563 |
return is; |
|
| 564 |
} |
|
| 565 |
|
|
| 566 |
///Write a bounding box to a stream |
|
| 567 |
|
|
| 568 |
///Write a bounding box to a stream. |
|
| 569 |
///\relates BoundingBox |
|
| 570 |
template<typename T> |
|
| 571 |
inline std::ostream& operator<<(std::ostream &os, const BoundingBox<T>& b) |
|
| 572 |
{
|
|
| 573 |
os << "(" << b.bottomLeft() << "," << b.topRight() << ")";
|
|
| 574 |
return os; |
|
| 575 |
} |
|
| 576 |
|
|
| 536 | 577 |
///Map of x-coordinates of a \ref Point "Point"-map |
| 537 | 578 |
|
| 538 | 579 |
///\ingroup maps |
| 539 | 580 |
///Map of x-coordinates of a \ref Point "Point"-map. |
| 540 | 581 |
/// |
| 541 | 582 |
template<class M> |
| 542 | 583 |
class XMap |
| 543 | 584 |
{
|
| 544 | 585 |
M& _map; |
| 545 | 586 |
public: |
| 546 | 587 |
|
| 547 | 588 |
typedef typename M::Value::Value Value; |
| 548 | 589 |
typedef typename M::Key Key; |
| 549 | 590 |
///\e |
| 550 | 591 |
XMap(M& map) : _map(map) {}
|
| 551 | 592 |
Value operator[](Key k) const {return _map[k].x;}
|
| 552 | 593 |
void set(Key k,Value v) {_map.set(k,typename M::Value(v,_map[k].y));}
|
| 553 | 594 |
}; |
| 554 | 595 |
|
| 555 | 596 |
///Returns an \ref XMap class |
| 556 | 597 |
|
| 557 | 598 |
///This function just returns an \ref XMap class. |
| 558 | 599 |
/// |
| 559 | 600 |
///\ingroup maps |
0 comments (0 inline)