From 0c24fa5788350b733037ebceec18699c6dd0f2d2 Mon Sep 17 00:00:00 2001 From: cilix42 Date: Tue, 3 Jul 2007 18:32:33 +0000 Subject: [PATCH] Make 3D axes correspond to places in binary representation (allows for more generic code) --- src/box3d-face.cpp | 8 +------- src/vanishing-point.h | 17 +++++++++++++---- 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: -- 2.30.2