From 9217e78084c5c503186edce09bd8d133cbcacf87 Mon Sep 17 00:00:00 2001 From: andreja6 Date: Fri, 13 Mar 2020 23:13:58 -0700 Subject: [PATCH] Attempted to make getPosition... --- Application.cpp | 3 ++- Mouse.cpp | 46 +++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/Application.cpp b/Application.cpp index c643ecc..1e09ce1 100644 --- a/Application.cpp +++ b/Application.cpp @@ -689,7 +689,8 @@ void Application::onGraphics(RenderDevice* rd) { glDisableClientState(GL_NORMAL_ARRAY); rd->setObjectToWorldMatrix(forDraw); rd->afterPrimitive(); - + + Draw::sphere(G3D::Sphere(mouse.getPosition(), 1), rd, Color3::cyan(), Color4::clear()); if(g_selectedInstances.size() > 0) { for(size_t i = 0; i < g_selectedInstances.size(); i++) diff --git a/Mouse.cpp b/Mouse.cpp index b903b43..2fec28a 100644 --- a/Mouse.cpp +++ b/Mouse.cpp @@ -1,6 +1,7 @@ #include "Mouse.h" #include "Application.h" #include "Globals.h" + Mouse::Mouse(){ x = y = 0; } @@ -34,14 +35,49 @@ PartInstance * Mouse::getTarget() } - - - +double getVectorDistance(Vector3 vector1, Vector3 vector2) +{ + return pow(pow((double)vector1.x - (double)vector2.x, 2) + pow((double)vector1.y - (double)vector2.y, 2) + pow((double)vector1.z - (double)vector2.z, 2), 0.5); +} Vector3 Mouse::getPosition() { - return Vector3(); - //Not implemented + testRay = g_usableApp->cameraController.getCamera()->worldRay(x, y, g_usableApp->getRenderDevice()->getViewport()); + Vector3 pos = testRay.closestPoint(Vector3(0,0,0)); + nearest=std::numeric_limits::infinity(); + //Vector3 camPos = g_usableApp->cameraController.getCamera()->getCoordinateFrame().translation; + for(size_t i = 0; i < g_dataModel->getWorkspace()->partObjects.size(); i++) + { + PartInstance * p = g_dataModel->getWorkspace()->partObjects[i]; + if(G3D::isFinite(testRay.intersectionTime(p->getBox()))) + { + + if (nearest>testRay.intersectionTime(p->getBox())) + { + + // BROKEN + pos = (testRay.closestPoint(p->getPosition()/2)); + } + + /* // This would be an overall better solution + for(char i = 0; i < 6; i++) + { + Vector3 side1; + Vector3 side2; + Vector3 side3; + Vector3 side4; + p->getBox().getFaceCorners(i, side1, side2, side3, side4); + Vector3 inter = testRay.intersection(G3D::Plane(side2, side3, side4)); + float newdistance = testRay.distance(inter); + if(nearest > abs(newdistance)) + { + nearest = newdistance; + pos = inter; + } + }*/ + } + } + return pos; } bool Mouse::isMouseOnScreen() {