From 342d2fa9c8f2612684843f2c30ecd875126f0667 Mon Sep 17 00:00:00 2001 From: Maximilian Albert Date: Sat, 1 Sep 2007 13:29:40 +0000 Subject: Infrastructure to set direction of infinite VPs (now adjustable by some shortcuts; this may be removed later on) (bzr r3657) --- src/box3d.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/box3d.cpp') diff --git a/src/box3d.cpp b/src/box3d.cpp index 5e67f46ab..1942ea3d6 100644 --- a/src/box3d.cpp +++ b/src/box3d.cpp @@ -798,6 +798,23 @@ sp_3dbox_link_to_existing_paths (SP3DBox *box, Inkscape::XML::Node *repr) { } } +void +sp_3dbox_reshape_after_VP_rotation (SP3DBox *box, Box3D::Axis axis) +{ + Box3D::Perspective3D *persp = inkscape_active_document()->get_persp_of_box (box); + Box3D::VanishingPoint *vp = persp->get_vanishing_point (axis); + + guint c1 = (axis == Box3D::Z) ? 1 : sp_3dbox_get_front_corner_id (box); // hack + guint c2 = c1 ^ axis; + NR::Point v = box->corners[c1] - box->corners[c2]; + double dist = NR::L2 (v) * ((NR::dot (v, vp->v_dir) < 0) ? 1 : -1); // "directed" distance + + Box3D::PerspectiveLine pline (box->corners[c1], axis, persp); + NR::Point pt = pline.point_from_lambda (dist); + + sp_3dbox_move_corner_in_Z_direction (box, c2, pt, axis == Box3D::Z); +} + void sp_3dbox_move_corner_in_XY_plane (SP3DBox *box, guint id, NR::Point pt, Box3D::Axis axes) { -- cgit v1.2.3