This commit is contained in:
SamGondelman 2018-07-27 15:30:27 -07:00
parent 1ef54b2fe6
commit 3d4639bfdd
8 changed files with 40 additions and 42 deletions

View file

@ -35,12 +35,12 @@ void LaserPointer::editRenderStatePath(const std::string& state, const QVariant&
} }
} }
glm::vec3 LaserPointer::getPickOrigin(const PickResultPointer& pickResult) { glm::vec3 LaserPointer::getPickOrigin(const PickResultPointer& pickResult) const {
auto rayPickResult = std::static_pointer_cast<RayPickResult>(pickResult); auto rayPickResult = std::static_pointer_cast<RayPickResult>(pickResult);
return (rayPickResult ? vec3FromVariant(rayPickResult->pickVariant["origin"]) : glm::vec3()); return (rayPickResult ? vec3FromVariant(rayPickResult->pickVariant["origin"]) : glm::vec3(0.0f));
} }
glm::vec3 LaserPointer::getPickEnd(const PickResultPointer& pickResult, float distance) { glm::vec3 LaserPointer::getPickEnd(const PickResultPointer& pickResult, float distance) const {
auto rayPickResult = std::static_pointer_cast<RayPickResult>(pickResult); auto rayPickResult = std::static_pointer_cast<RayPickResult>(pickResult);
if (distance > 0.0f) { if (distance > 0.0f) {
PickRay pick = PickRay(rayPickResult->pickVariant); PickRay pick = PickRay(rayPickResult->pickVariant);
@ -50,17 +50,17 @@ glm::vec3 LaserPointer::getPickEnd(const PickResultPointer& pickResult, float di
} }
} }
glm::vec3 LaserPointer::getPickedObjectNormal(const PickResultPointer& pickResult) { glm::vec3 LaserPointer::getPickedObjectNormal(const PickResultPointer& pickResult) const {
auto rayPickResult = std::static_pointer_cast<RayPickResult>(pickResult); auto rayPickResult = std::static_pointer_cast<RayPickResult>(pickResult);
return (rayPickResult ? rayPickResult->surfaceNormal : glm::vec3()); return (rayPickResult ? rayPickResult->surfaceNormal : glm::vec3(0.0f));
} }
IntersectionType LaserPointer::getPickedObjectType(const PickResultPointer& pickResult) { IntersectionType LaserPointer::getPickedObjectType(const PickResultPointer& pickResult) const {
auto rayPickResult = std::static_pointer_cast<RayPickResult>(pickResult); auto rayPickResult = std::static_pointer_cast<RayPickResult>(pickResult);
return (rayPickResult ? rayPickResult->type : IntersectionType::NONE); return (rayPickResult ? rayPickResult->type : IntersectionType::NONE);
} }
QUuid LaserPointer::getPickedObjectID(const PickResultPointer& pickResult) { QUuid LaserPointer::getPickedObjectID(const PickResultPointer& pickResult) const {
auto rayPickResult = std::static_pointer_cast<RayPickResult>(pickResult); auto rayPickResult = std::static_pointer_cast<RayPickResult>(pickResult);
return (rayPickResult ? rayPickResult->objectID : QUuid()); return (rayPickResult ? rayPickResult->objectID : QUuid());
} }

View file

@ -47,11 +47,11 @@ public:
protected: protected:
void editRenderStatePath(const std::string& state, const QVariant& pathProps) override; void editRenderStatePath(const std::string& state, const QVariant& pathProps) override;
glm::vec3 getPickOrigin(const PickResultPointer& pickResult) override; glm::vec3 getPickOrigin(const PickResultPointer& pickResult) const override;
glm::vec3 getPickEnd(const PickResultPointer& pickResult, float distance) override; glm::vec3 getPickEnd(const PickResultPointer& pickResult, float distance) const override;
glm::vec3 getPickedObjectNormal(const PickResultPointer& pickResult) override; glm::vec3 getPickedObjectNormal(const PickResultPointer& pickResult) const override;
IntersectionType getPickedObjectType(const PickResultPointer& pickResult) override; IntersectionType getPickedObjectType(const PickResultPointer& pickResult) const override;
QUuid getPickedObjectID(const PickResultPointer& pickResult) override; QUuid getPickedObjectID(const PickResultPointer& pickResult) const override;
void setVisualPickResultInternal(PickResultPointer pickResult, IntersectionType type, const QUuid& id, void setVisualPickResultInternal(PickResultPointer pickResult, IntersectionType type, const QUuid& id,
const glm::vec3& intersection, float distance, const glm::vec3& surfaceNormal) override; const glm::vec3& intersection, float distance, const glm::vec3& surfaceNormal) override;

View file

@ -20,7 +20,7 @@ public:
ParabolaPickResult(const QVariantMap& pickVariant) : PickResult(pickVariant) {} ParabolaPickResult(const QVariantMap& pickVariant) : PickResult(pickVariant) {}
ParabolaPickResult(const IntersectionType type, const QUuid& objectID, float distance, float parabolicDistance, const glm::vec3& intersection, const PickParabola& parabola, ParabolaPickResult(const IntersectionType type, const QUuid& objectID, float distance, float parabolicDistance, const glm::vec3& intersection, const PickParabola& parabola,
const glm::vec3& surfaceNormal = glm::vec3(NAN), const QVariantMap& extraInfo = QVariantMap()) : const glm::vec3& surfaceNormal = glm::vec3(NAN), const QVariantMap& extraInfo = QVariantMap()) :
PickResult(parabola.toVariantMap()), type(type), intersects(type != NONE), objectID(objectID), distance(distance), parabolicDistance(parabolicDistance), intersection(intersection), surfaceNormal(surfaceNormal), extraInfo(extraInfo) { PickResult(parabola.toVariantMap()), extraInfo(extraInfo), objectID(objectID), intersection(intersection), surfaceNormal(surfaceNormal), type(type), distance(distance), parabolicDistance(parabolicDistance), intersects(type != NONE) {
} }
ParabolaPickResult(const ParabolaPickResult& parabolaPickResult) : PickResult(parabolaPickResult.pickVariant) { ParabolaPickResult(const ParabolaPickResult& parabolaPickResult) : PickResult(parabolaPickResult.pickVariant) {
@ -34,14 +34,14 @@ public:
extraInfo = parabolaPickResult.extraInfo; extraInfo = parabolaPickResult.extraInfo;
} }
IntersectionType type { NONE }; QVariantMap extraInfo;
bool intersects { false };
QUuid objectID; QUuid objectID;
float distance { FLT_MAX };
float parabolicDistance { FLT_MAX };
glm::vec3 intersection { NAN }; glm::vec3 intersection { NAN };
glm::vec3 surfaceNormal { NAN }; glm::vec3 surfaceNormal { NAN };
QVariantMap extraInfo; IntersectionType type { NONE };
float distance { FLT_MAX };
float parabolicDistance { FLT_MAX };
bool intersects { false };
virtual QVariantMap toVariantMap() const override { virtual QVariantMap toVariantMap() const override {
QVariantMap toReturn; QVariantMap toReturn;

View file

@ -62,12 +62,12 @@ void ParabolaPointer::editRenderStatePath(const std::string& state, const QVaria
} }
} }
glm::vec3 ParabolaPointer::getPickOrigin(const PickResultPointer& pickResult) { glm::vec3 ParabolaPointer::getPickOrigin(const PickResultPointer& pickResult) const {
auto parabolaPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult); auto parabolaPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult);
return (parabolaPickResult ? vec3FromVariant(parabolaPickResult->pickVariant["origin"]) : glm::vec3()); return (parabolaPickResult ? vec3FromVariant(parabolaPickResult->pickVariant["origin"]) : glm::vec3(0.0f));
} }
glm::vec3 ParabolaPointer::getPickEnd(const PickResultPointer& pickResult, float distance) { glm::vec3 ParabolaPointer::getPickEnd(const PickResultPointer& pickResult, float distance) const {
auto parabolaPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult); auto parabolaPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult);
if (distance > 0.0f) { if (distance > 0.0f) {
PickParabola pick = PickParabola(parabolaPickResult->pickVariant); PickParabola pick = PickParabola(parabolaPickResult->pickVariant);
@ -77,17 +77,17 @@ glm::vec3 ParabolaPointer::getPickEnd(const PickResultPointer& pickResult, float
} }
} }
glm::vec3 ParabolaPointer::getPickedObjectNormal(const PickResultPointer& pickResult) { glm::vec3 ParabolaPointer::getPickedObjectNormal(const PickResultPointer& pickResult) const {
auto parabolaPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult); auto parabolaPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult);
return (parabolaPickResult ? parabolaPickResult->surfaceNormal : glm::vec3()); return (parabolaPickResult ? parabolaPickResult->surfaceNormal : glm::vec3(0.0f));
} }
IntersectionType ParabolaPointer::getPickedObjectType(const PickResultPointer& pickResult) { IntersectionType ParabolaPointer::getPickedObjectType(const PickResultPointer& pickResult) const {
auto parabolaPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult); auto parabolaPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult);
return (parabolaPickResult ? parabolaPickResult->type : IntersectionType::NONE); return (parabolaPickResult ? parabolaPickResult->type : IntersectionType::NONE);
} }
QUuid ParabolaPointer::getPickedObjectID(const PickResultPointer& pickResult) { QUuid ParabolaPointer::getPickedObjectID(const PickResultPointer& pickResult) const {
auto parabolaPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult); auto parabolaPickResult = std::static_pointer_cast<ParabolaPickResult>(pickResult);
return (parabolaPickResult ? parabolaPickResult->objectID : QUuid()); return (parabolaPickResult ? parabolaPickResult->objectID : QUuid());
} }

View file

@ -101,11 +101,11 @@ public:
protected: protected:
void editRenderStatePath(const std::string& state, const QVariant& pathProps) override; void editRenderStatePath(const std::string& state, const QVariant& pathProps) override;
glm::vec3 getPickOrigin(const PickResultPointer& pickResult) override; glm::vec3 getPickOrigin(const PickResultPointer& pickResult) const override;
glm::vec3 getPickEnd(const PickResultPointer& pickResult, float distance) override; glm::vec3 getPickEnd(const PickResultPointer& pickResult, float distance) const override;
glm::vec3 getPickedObjectNormal(const PickResultPointer& pickResult) override; glm::vec3 getPickedObjectNormal(const PickResultPointer& pickResult) const override;
IntersectionType getPickedObjectType(const PickResultPointer& pickResult) override; IntersectionType getPickedObjectType(const PickResultPointer& pickResult) const override;
QUuid getPickedObjectID(const PickResultPointer& pickResult) override; QUuid getPickedObjectID(const PickResultPointer& pickResult) const override;
void setVisualPickResultInternal(PickResultPointer pickResult, IntersectionType type, const QUuid& id, void setVisualPickResultInternal(PickResultPointer pickResult, IntersectionType type, const QUuid& id,
const glm::vec3& intersection, float distance, const glm::vec3& surfaceNormal) override; const glm::vec3& intersection, float distance, const glm::vec3& surfaceNormal) override;

View file

@ -79,8 +79,6 @@ void PathPointer::setLockEndUUID(const QUuid& objectID, const bool isOverlay, co
}); });
} }
#include "ParabolaPick.h"
PickResultPointer PathPointer::getVisualPickResult(const PickResultPointer& pickResult) { PickResultPointer PathPointer::getVisualPickResult(const PickResultPointer& pickResult) {
PickResultPointer visualPickResult = pickResult; PickResultPointer visualPickResult = pickResult;
glm::vec3 origin = getPickOrigin(pickResult); glm::vec3 origin = getPickOrigin(pickResult);

View file

@ -121,11 +121,11 @@ protected:
Pointer::Buttons getPressedButtons(const PickResultPointer& pickResult) override; Pointer::Buttons getPressedButtons(const PickResultPointer& pickResult) override;
PickResultPointer getVisualPickResult(const PickResultPointer& pickResult) override; PickResultPointer getVisualPickResult(const PickResultPointer& pickResult) override;
virtual glm::vec3 getPickOrigin(const PickResultPointer& pickResult) = 0; virtual glm::vec3 getPickOrigin(const PickResultPointer& pickResult) const = 0;
virtual glm::vec3 getPickEnd(const PickResultPointer& pickResult, float distance = 0.0f) = 0; virtual glm::vec3 getPickEnd(const PickResultPointer& pickResult, float distance = 0.0f) const = 0;
virtual glm::vec3 getPickedObjectNormal(const PickResultPointer& pickResult) = 0; virtual glm::vec3 getPickedObjectNormal(const PickResultPointer& pickResult) const = 0;
virtual IntersectionType getPickedObjectType(const PickResultPointer& pickResult) = 0; virtual IntersectionType getPickedObjectType(const PickResultPointer& pickResult) const = 0;
virtual QUuid getPickedObjectID(const PickResultPointer& pickResult) = 0; virtual QUuid getPickedObjectID(const PickResultPointer& pickResult) const = 0;
virtual void setVisualPickResultInternal(PickResultPointer pickResult, IntersectionType type, const QUuid& id, virtual void setVisualPickResultInternal(PickResultPointer pickResult, IntersectionType type, const QUuid& id,
const glm::vec3& intersection, float distance, const glm::vec3& surfaceNormal) = 0; const glm::vec3& intersection, float distance, const glm::vec3& surfaceNormal) = 0;

View file

@ -19,7 +19,7 @@ public:
RayPickResult() {} RayPickResult() {}
RayPickResult(const QVariantMap& pickVariant) : PickResult(pickVariant) {} RayPickResult(const QVariantMap& pickVariant) : PickResult(pickVariant) {}
RayPickResult(const IntersectionType type, const QUuid& objectID, float distance, const glm::vec3& intersection, const PickRay& searchRay, const glm::vec3& surfaceNormal = glm::vec3(NAN), const QVariantMap& extraInfo = QVariantMap()) : RayPickResult(const IntersectionType type, const QUuid& objectID, float distance, const glm::vec3& intersection, const PickRay& searchRay, const glm::vec3& surfaceNormal = glm::vec3(NAN), const QVariantMap& extraInfo = QVariantMap()) :
PickResult(searchRay.toVariantMap()), type(type), intersects(type != NONE), objectID(objectID), distance(distance), intersection(intersection), surfaceNormal(surfaceNormal), extraInfo(extraInfo) { PickResult(searchRay.toVariantMap()), extraInfo(extraInfo), objectID(objectID), intersection(intersection), surfaceNormal(surfaceNormal), type(type), distance(distance), intersects(type != NONE) {
} }
RayPickResult(const RayPickResult& rayPickResult) : PickResult(rayPickResult.pickVariant) { RayPickResult(const RayPickResult& rayPickResult) : PickResult(rayPickResult.pickVariant) {
@ -32,13 +32,13 @@ public:
extraInfo = rayPickResult.extraInfo; extraInfo = rayPickResult.extraInfo;
} }
IntersectionType type { NONE }; QVariantMap extraInfo;
bool intersects { false };
QUuid objectID; QUuid objectID;
float distance { FLT_MAX };
glm::vec3 intersection { NAN }; glm::vec3 intersection { NAN };
glm::vec3 surfaceNormal { NAN }; glm::vec3 surfaceNormal { NAN };
QVariantMap extraInfo; IntersectionType type { NONE };
float distance { FLT_MAX };
bool intersects { false };
virtual QVariantMap toVariantMap() const override { virtual QVariantMap toVariantMap() const override {
QVariantMap toReturn; QVariantMap toReturn;