2026-05-07 14:58:42 +08:00
|
|
|
#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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-08 18:03:54 +08:00
|
|
|
static bool isDirectionOccupied(int usedFlags, Direction dir) {
|
|
|
|
|
return (usedFlags & static_cast<int>(dir)) != 0;
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-22 16:08:15 +08:00
|
|
|
static int markDirectionOccupied(int usedFlags, int dir) {
|
|
|
|
|
return usedFlags | dir;
|
2026-05-07 14:58:42 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-08 18:03:54 +08:00
|
|
|
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;
|
|
|
|
|
}
|
2026-05-07 14:58:42 +08:00
|
|
|
}
|
|
|
|
|
};
|