Skip to content
Snippets Groups Projects
Commit 9b99187f authored by Zain Selman's avatar Zain Selman :speech_balloon:
Browse files

it does not work

parent 6d76c689
No related branches found
No related tags found
1 merge request!2Plane interaction
......@@ -265,6 +265,9 @@ void PlanePlugin::slotMouseEvent(QMouseEvent *_event) {
/// matrix to transform points from image plane to curPlane_
auto plane = origPlane_;
/// remeber position to do translation by hand
const auto initPos = plane.position;
/// get the world position of the projected cursor by intersecting plane
/// equation with ray
{
......@@ -300,38 +303,46 @@ void PlanePlugin::slotMouseEvent(QMouseEvent *_event) {
const auto worldSpaceUpdate = (currWorldPos_ - result_) / 2.;
/// vector to clicked corner. update to corresponding corner later
const auto distClickOrigin = plane.position + (.5f * plane.xDirection) +
(.5f * plane.yDirection);
// const auto distClickOrigin = plane.position + (.5f *
// plane.xDirection) +
// (.5f * plane.yDirection);
const auto distClickOrigin = result_;
/// 1. transform to origin
auto transformation = ACG::GLMatrixf(ACG::Matrix4x4f());
transformation.identity(); // init
transformation.translate(ACG::Vec3f{-plane.position});
/// 2. rotate to be planar
/// 1. translate to origin
plane.position -= initPos;
/*/// 2. rotate to be planar
// const auto n0 = ACG::Vec3f{plane.normal};
// const auto x = n0.dot(viewDirection_);
// const auto y = std::sqrt(1 - (x * x));
// const auto angle = std::atan2(y,x);
// std::cerr << "angle: " << angle << std::endl;
// if(angle != 0.)
// transform.rotate(angle, n0.cross(n1));
// transform.rotate(angle, n0.cross(n1));*/
/// 3. scale by half updates length
auto transformation = ACG::GLMatrixf(ACG::Matrix4x4f());
transformation.identity(); // init
auto scale =
ACG::Vec3f{(worldSpaceUpdate + distClickOrigin) / distClickOrigin};
scale[2] = 1; /// we dont do anything in z-dir
transformation.scale(scale);
// const auto xscale = scale[0] * plane.xDirection.length();
// const auto yscale = scale[1] * plane.yDirection.length();
// plane.setSize(xscale, yscale);
// std::cerr << "xdir: " << plane.xDirection
// << " ydir: " << plane.yDirection << std::endl;
// std::cerr << "initial click pos: " << distClickOrigin <<
// std::endl; std::cerr << "current click pos: " << currWorldPos_
// << std::endl; std::cerr << "scale: " << scale << std::endl;
std::cerr << "update: " << worldSpaceUpdate << std::endl;
transformation.translate(ACG::Vec3f{plane.position});
plane.transform(transformation);
plane.position += initPos;
plane.position += worldSpaceUpdate;
std::cerr << "[world] start pos: " << result_ << std::endl;
std::cerr << "[world] curr pos: " << currWorldPos_ << std::endl;
std::cerr << "scale: " << scale << std::endl;
std::cerr << "new plane pos: " << plane.position << std::endl;
std::cerr << "delta: " << worldSpaceUpdate << "\n\n\n\n\n" << std::endl;
curPlane_->plane() = plane; /// overwrite plane
/// 0 corner
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment