diff options
| author | Maximilian Albert <maximilian.albert@gmail.com> | 2007-07-03 18:32:33 +0000 |
|---|---|---|
| committer | cilix42 <cilix42@users.sourceforge.net> | 2007-07-03 18:32:33 +0000 |
| commit | c8d37a3237bab10c1e5fbc8c248857063b4907e2 (patch) | |
| tree | 040f0739f5c52b142f83b2373d79301717ae718b /src | |
| parent | Swap axis directions Y and Z (for consistency) (diff) | |
| download | inkscape-c8d37a3237bab10c1e5fbc8c248857063b4907e2.tar.gz inkscape-c8d37a3237bab10c1e5fbc8c248857063b4907e2.zip | |
Make 3D axes correspond to places in binary representation (allows for more generic code)
(bzr r3168)
Diffstat (limited to 'src')
| -rw-r--r-- | src/box3d-face.cpp | 8 | ||||
| -rw-r--r-- | 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: |
