Overte C++ Documentation
LaserPointer.h
1 //
2 // LaserPointer.h
3 // interface/src/raypick
4 //
5 // Created by Sam Gondelman 7/11/2017
6 // Copyright 2017 High Fidelity, Inc.
7 //
8 // Distributed under the Apache License, Version 2.0.
9 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10 //
11 #ifndef hifi_LaserPointer_h
12 #define hifi_LaserPointer_h
13 
14 #include "PathPointer.h"
15 
16 #include <EntityItemProperties.h>
17 
18 class LaserPointer : public PathPointer {
19  using Parent = PathPointer;
20 public:
21  class RenderState : public StartEndRenderState {
22  public:
23  RenderState() {}
24  RenderState(const QUuid& startID, const QUuid& pathID, const QUuid& endID);
25 
26  const QUuid& getPathID() const { return _pathID; }
27 
28  void setLineWidth(float width) { _lineWidth = width; }
29  float getLineWidth() const { return _lineWidth; }
30 
31  void setNumPoints(size_t numPoints) { _numPoints = std::max(numPoints, (size_t)2); }
32  size_t getNumPoints() const { return _numPoints; }
33 
34  const bool& doesPathIgnorePicks() const { return _pathIgnorePicks; }
35 
36  void cleanup() override;
37  void disable() override;
38  void update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, float parentScale, bool distanceScaleEnd,
39  bool centerEndY, bool faceAvatar, bool followNormal, float followNormalStrength, float distance,
40  const PickResultPointer& pickResult) override;
41 
42  private:
43  QUuid _pathID;
44 
45  float _lineWidth { 0.0f };
46  size_t _numPoints { 0 };
47  bool _pathIgnorePicks { false };
48 
49  bool _hasSetLinePoints { false };
50  };
51 
52  LaserPointer(const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates, bool hover, const PointerTriggers& triggers,
53  bool faceAvatar, bool followNormal, float followNormalStrength, bool centerEndY, bool lockEnd, bool distanceScaleEnd, bool scaleWithParent, bool enabled);
54 
55  PickQuery::PickType getType() const override;
56 
57  QVariantMap toVariantMap() const override;
58 
59  static std::shared_ptr<StartEndRenderState> buildRenderState(const QVariantMap& propMap, const QList<EntityItemProperties> &entityProperties);
60 
61 protected:
62  PickResultPointer getPickResultCopy(const PickResultPointer& pickResult) const override;
63 
64  void editRenderStatePath(const std::string& state, const QVariant& pathProps) override;
65 
66  glm::vec3 getPickOrigin(const PickResultPointer& pickResult) const override;
67  glm::vec3 getPickEnd(const PickResultPointer& pickResult, float distance) const override;
68  glm::vec3 getPickedObjectNormal(const PickResultPointer& pickResult) const override;
69  IntersectionType getPickedObjectType(const PickResultPointer& pickResult) const override;
70  QUuid getPickedObjectID(const PickResultPointer& pickResult) const override;
71  void setVisualPickResultInternal(PickResultPointer pickResult, IntersectionType type, const QUuid& id,
72  const glm::vec3& intersection, float distance, const glm::vec3& surfaceNormal) override;
73 
74  PointerEvent buildPointerEvent(const PickedObject& target, const PickResultPointer& pickResult, const std::string& button = "", bool hover = true) override;
75 
76 private:
77  static glm::vec3 findIntersection(const PickedObject& pickedObject, const glm::vec3& origin, const glm::vec3& direction);
78 };
79 
80 #endif // hifi_LaserPointer_h
Represents a 2D or 3D pointer to the scripting engine. Exposed as PointerEvent
Definition: PointerEvent.h:32