25 #ifndef DIALECT_ORTHO_H 26 #define DIALECT_ORTHO_H 37 #include "libvpsc/rectangle.h" 40 #include "libdialect/commontypes.h" 46 enum class CompassDir {
57 enum class CardinalDir {
64 typedef std::vector<CompassDir> CompassDirs;
65 typedef std::vector<CardinalDir> CardinalDirs;
70 static bool isVertical(CompassDir d) {
71 return d == CompassDir::NORTH || d == CompassDir::SOUTH;
75 static bool isHorizontal(CompassDir d) {
80 static bool isVerticalCard(CardinalDir d) {
81 return d == CardinalDir::NORTH || d == CardinalDir::SOUTH;
85 static bool isHorizontalCard(CardinalDir d) {
90 static bool isInDim(CompassDir d,
vpsc::Dim dim) {
96 static bool isIncreasing(CompassDir d) {
102 static bool isDecreasing(CompassDir d) {
103 return d == CompassDir::NORTH || d == CompassDir::WEST;
108 static bool isIncreasingCard(CardinalDir d) {
114 static bool isDecreasingCard(CardinalDir d) {
115 return d == CardinalDir::WEST || d == CardinalDir::NORTH;
120 static bool sameDimension(CardinalDir d0, CardinalDir d1) {
121 return (
unsigned)(d0) % 2 == (
unsigned)(d1) % 2;
126 static bool arePerpendicular(CardinalDir d0, CardinalDir d1) {
127 return (
unsigned)(d0) % 2 != (
unsigned)(d1) % 2;
136 static CompassDir compassDirection(std::shared_ptr<Node> u0, std::shared_ptr<Node> u1);
144 static CardinalDir cardinalDirection(std::shared_ptr<Node> u0, std::shared_ptr<Node> u1);
147 static bool isCardinal(CompassDir d) {
return ((
unsigned) d) < 4; }
150 static CardinalDir cardRotateCw90(CardinalDir d);
153 static CardinalDir cardRotateAcw90(CardinalDir d);
156 static CardinalDir cardFlip(CardinalDir d);
159 static std::string dirToString(CompassDir d);
162 static std::string cardToString(CardinalDir d);
165 static CardinalDirs cardinalComponents(CompassDir d);
173 static PlaneMap getRotationFunction(CardinalDir fromDir, CardinalDir toDir);
181 static InplacePlaneMap getInplaceRotationFunction(CardinalDir fromDir, CardinalDir toDir);
192 static const CardinalDirs cwCards;
195 static const CardinalDirs acwCards;
200 static const CompassDirs cwAllDoubled;
203 static const CompassDirs acwAllDoubled;
206 static const std::set<CardinalDir> vertical;
209 static const std::set<CardinalDir> horizontal;
212 static const std::map<CardinalDir, Avoid::ConnDirFlag> libavoidConnDirs;
215 static const std::map<CompassDir, CompassDir> rotateCw90;
218 static const std::map<CompassDir, CompassDir> flip;
221 static const std::map<CardinalDir, vpsc::Dim> varDim;
224 static const std::map<CardinalDir, vpsc::Dim> constDim;
228 typedef std::pair<double, double> interval;
235 direc(Compass::cardinalDirection(p0, p1)),
236 varDim(Compass::varDim.at(direc)),
237 constDim(Compass::constDim.at(direc))
239 if (Compass::isVerticalCard(direc)) {
240 z = x0; w0 = y0; w1 = y1;
242 z = y0; w0 = x0; w1 = x1;
244 auto p = std::minmax(w0, w1);
251 double getConstCoord(
void)
const {
return z; }
257 bool closedIntervalIntersects(
double a,
double b)
const;
263 bool openIntervalIntersects(
double a,
double b)
const;
268 bool closedIntervalIncludesCoord(
double a)
const;
273 bool openIntervalIncludesCoord(
double a)
const;
283 interval closedIntervalIntersection(
double a,
double b)
const;
293 interval openIntervalIntersection(
double a,
double b)
const;
307 int coordOnWhichSide(
double z1)
const;
309 static const double EPSILON;
342 #endif // DIALECT_ORTHO_H Standard libavoid include file which includes all libavoid header files.
libdialect: A library for computing human-like orthogonal network (DiAlEcT) layouts.
Definition: cola.h:44
Cardinal constraints imply both a separation and an alignment:
The Point class defines a point in the plane.
Definition: geomtypes.h:52
The x-dimension (0).
Definition: rectangle.h:43
Dim
Indicates the x- or y-dimension.
Definition: rectangle.h:41