51 lines
1.6 KiB
C++
51 lines
1.6 KiB
C++
#include "common/core_model/diagram.h"
|
|
|
|
// direction_manager.h
|
|
/**********editor方向管理***********/
|
|
class DirectionManager {
|
|
public:
|
|
static bool isHorizontal(Direction dir) {
|
|
return dir == Direction::Right || dir == Direction::Left;
|
|
}
|
|
|
|
static bool isVertical(Direction dir) {
|
|
return dir == Direction::Down || dir == Direction::Up;
|
|
}
|
|
|
|
static Direction getOpposite(Direction dir) {
|
|
switch (dir) {
|
|
case Direction::Right: return Direction::Left;
|
|
case Direction::Left: return Direction::Right;
|
|
case Direction::Down: return Direction::Up;
|
|
case Direction::Up: return Direction::Down;
|
|
default: return dir;
|
|
}
|
|
}
|
|
|
|
static bool isDirectionOccupied(int usedFlags, Direction dir) {
|
|
return (usedFlags & static_cast<int>(dir)) != 0;
|
|
}
|
|
|
|
static int markDirectionOccupied(int usedFlags, int dir) {
|
|
return usedFlags | dir;
|
|
}
|
|
|
|
static QPoint getIncrement(Direction dir, int hSpacing, int vSpacing) {
|
|
if (dir == Direction::Right) return QPoint(hSpacing, 0);
|
|
if (dir == Direction::Left) return QPoint(-hSpacing, 0);
|
|
if (dir == Direction::Down) return QPoint(0, vSpacing);
|
|
if (dir == Direction::Up) return QPoint(0, -vSpacing);
|
|
return QPoint(0, 0);
|
|
}
|
|
|
|
static int getRotationAngle(Direction dir) {
|
|
switch (dir) {
|
|
case Direction::Right: return -90;
|
|
case Direction::Left: return 90;
|
|
case Direction::Down: return 0;
|
|
case Direction::Up: return 180;
|
|
default: return 0;
|
|
}
|
|
}
|
|
};
|