summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/box3d-face.cpp8
-rw-r--r--src/vanishing-point.h17
2 files changed, 14 insertions, 11 deletions
diff --git a/src/box3d-face.cpp b/src/box3d-face.cpp
index 13e19d769..8b3b5d968 100644
--- a/src/box3d-face.cpp
+++ b/src/box3d-face.cpp
@@ -30,13 +30,7 @@ void Box3DFace::set_shape(NR::Point const ul, NR::Point const lr,
corners[2] = lr;
} else {
if (align_along_PL) {
- Box3D::PerspDir dir3;
- if (dir1 == Box3D::X && dir2 == Box3D::Z) dir3 = Box3D::Y;
- if (dir1 == Box3D::X && dir2 == Box3D::Y) dir3 = Box3D::Z;
- if (dir1 == Box3D::Z && dir2 == Box3D::X) dir3 = Box3D::Y;
- if (dir1 == Box3D::Z && dir2 == Box3D::Y) dir3 = Box3D::X;
- if (dir1 == Box3D::Y && dir2 == Box3D::X) dir3 = Box3D::Z;
- if (dir1 == Box3D::Y && dir2 == Box3D::Z) dir3 = Box3D::X;
+ Box3D::PerspDir dir3 = Box3D::third_axis_direction (dir1, dir2);
Box3D::Line line1(*SP3DBoxContext::current_perspective->get_vanishing_point(dir1), lr);
Box3D::Line line2(*pt_align, *SP3DBoxContext::current_perspective->get_vanishing_point(dir3));
corners[2] = *line1.intersect(line2);
diff --git a/src/vanishing-point.h b/src/vanishing-point.h
index 4770c74f1..de06002e4 100644
--- a/src/vanishing-point.h
+++ b/src/vanishing-point.h
@@ -22,13 +22,22 @@ enum VPState {
VP_INFINITE // perspective lines are parallel
};
+// The X-/Y-/Z-axis corresponds to the first/second/third digit
+// in binary representation, respectively.
enum PerspDir {
- X,
- Y,
- Z,
- NONE
+ X = 1,
+ Y = 2,
+ Z = 4,
+ NONE = 0
};
+
+/** Given two axis directions out of {X, Y, Z}, returns the remaining one */
+inline Box3D::PerspDir third_axis_direction (Box3D::PerspDir dir1, Box3D::PerspDir dir2) {
+ return (Box3D::PerspDir) ((dir1 + dir2) ^ 0x7);
+}
+
+
// FIXME: Store the PerspDir of the VP inside the class
class VanishingPoint : public NR::Point {
public: