8 #ifndef hifi_StylusPick_h
9 #define hifi_StylusPick_h
12 #include "RegisteredMetaTypes.h"
14 class StylusPickResult :
public PickResult {
15 using Side = bilateral::Side;
19 StylusPickResult(
const QVariantMap& pickVariant) : PickResult(pickVariant) {}
20 StylusPickResult(
const IntersectionType type,
const QUuid& objectID,
float distance,
const glm::vec3& intersection,
const StylusTip& stylusTip,
21 const glm::vec3& surfaceNormal = glm::vec3(NAN)) :
22 PickResult(stylusTip.toVariantMap()), type(type), intersects(type != NONE), objectID(objectID), distance(distance), intersection(intersection), surfaceNormal(surfaceNormal) {
25 StylusPickResult(
const StylusPickResult& stylusPickResult) : PickResult(stylusPickResult.pickVariant) {
26 type = stylusPickResult.type;
27 intersects = stylusPickResult.intersects;
28 objectID = stylusPickResult.objectID;
29 distance = stylusPickResult.distance;
30 intersection = stylusPickResult.intersection;
31 surfaceNormal = stylusPickResult.surfaceNormal;
34 StylusPickResult& operator=(
const StylusPickResult &right) =
default;
36 IntersectionType type { NONE };
37 bool intersects {
false };
39 float distance { FLT_MAX };
40 glm::vec3 intersection { NAN };
41 glm::vec3 surfaceNormal { NAN };
55 virtual QVariantMap toVariantMap()
const override {
57 toReturn[
"type"] = type;
58 toReturn[
"intersects"] = intersects;
59 toReturn[
"objectID"] = objectID;
60 toReturn[
"distance"] = distance;
61 toReturn[
"intersection"] = vec3toVariant(intersection);
62 toReturn[
"surfaceNormal"] = vec3toVariant(surfaceNormal);
63 toReturn[
"stylusTip"] = PickResult::toVariantMap();
67 bool doesIntersect()
const override {
return intersects; }
68 std::shared_ptr<PickResult> compareAndProcessNewResult(
const std::shared_ptr<PickResult>& newRes)
override;
69 bool checkOrFilterAgainstMaxDistance(
float maxDistance)
override;
72 class StylusPick :
public Pick<StylusTip> {
73 using Side = bilateral::Side;
75 StylusPick(Side side,
const PickFilter& filter,
float maxDistance,
bool enabled,
const glm::vec3& tipOffset);
77 PickType getType()
const override {
return PickType::Stylus; }
78 StylusTip getMathematicalPick()
const override;
79 PickResultPointer getDefaultResult(
const QVariantMap& pickVariant)
const override;
80 PickResultPointer getEntityIntersection(
const StylusTip& pick)
override;
81 PickResultPointer getAvatarIntersection(
const StylusTip& pick)
override;
82 PickResultPointer getHUDIntersection(
const StylusTip& pick)
override;
83 Transform getResultTransform()
const override;
85 bool isLeftHand()
const override {
return _mathPick.side == Side::Left; }
86 bool isRightHand()
const override {
return _mathPick.side == Side::Right; }
87 bool isMouse()
const override {
return false; }
89 static float WEB_STYLUS_LENGTH;