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  const bool& doesPathIgnorePicks() const { return _pathIgnorePicks; }
28 
29  void setLineWidth(float width) { _lineWidth = width; }
30  float getLineWidth() const { return _lineWidth; }
31 
32  void cleanup() override;
33  void disable() override;
34  void update(const glm::vec3& origin, const glm::vec3& end, const glm::vec3& surfaceNormal, float parentScale, bool distanceScaleEnd, bool centerEndY,
35  bool faceAvatar, bool followNormal, float followNormalStrength, float distance, const PickResultPointer& pickResult) override;
36 
37  private:
38  QUuid _pathID;
39 
40  bool _pathIgnorePicks;
41  float _lineWidth;
42  };
43 
44  LaserPointer(const QVariant& rayProps, const RenderStateMap& renderStates, const DefaultRenderStateMap& defaultRenderStates, bool hover, const PointerTriggers& triggers,
45  bool faceAvatar, bool followNormal, float followNormalStrength, bool centerEndY, bool lockEnd, bool distanceScaleEnd, bool scaleWithParent, bool enabled);
46 
47  PickQuery::PickType getType() const override;
48 
49  QVariantMap toVariantMap() const override;
50 
51  static std::shared_ptr<StartEndRenderState> buildRenderState(const QVariantMap& propMap, const QList<EntityItemProperties> &entityProperties);
52 
53 protected:
54  PickResultPointer getPickResultCopy(const PickResultPointer& pickResult) const override;
55 
56  void editRenderStatePath(const std::string& state, const QVariant& pathProps) override;
57 
58  glm::vec3 getPickOrigin(const PickResultPointer& pickResult) const override;
59  glm::vec3 getPickEnd(const PickResultPointer& pickResult, float distance) const override;
60  glm::vec3 getPickedObjectNormal(const PickResultPointer& pickResult) const override;
61  IntersectionType getPickedObjectType(const PickResultPointer& pickResult) const override;
62  QUuid getPickedObjectID(const PickResultPointer& pickResult) const override;
63  void setVisualPickResultInternal(PickResultPointer pickResult, IntersectionType type, const QUuid& id,
64  const glm::vec3& intersection, float distance, const glm::vec3& surfaceNormal) override;
65 
66  PointerEvent buildPointerEvent(const PickedObject& target, const PickResultPointer& pickResult, const std::string& button = "", bool hover = true) override;
67 
68 private:
69  static glm::vec3 findIntersection(const PickedObject& pickedObject, const glm::vec3& origin, const glm::vec3& direction);
70 
71 };
72 
73 #endif // hifi_LaserPointer_h
Represents a 2D or 3D pointer to the scripting engine. Exposed as PointerEvent
Definition: PointerEvent.h:30