XRTrackedImage.cs
6.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using System;
using System.Runtime.InteropServices;
namespace UnityEngine.XR.ARSubsystems
{
/// <summary>
/// Contains low-level data for a tracked image in the environment.
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct XRTrackedImage : ITrackable, IEquatable<XRTrackedImage>
{
/// <summary>
/// Constructs an <see cref="XRTrackedImage"/>.
/// </summary>
/// <param name="trackableId">The <see cref="TrackableId"/> associated with this tracked image.</param>
/// <param name="sourceImageId">A <c>GUID</c> associated with the source image.</param>
/// <param name="pose">The <c>Pose</c> associated with the detected image.</param>
/// <param name="size">The size (i.e., dimensions) of the detected image.</param>
/// <param name="trackingState">The <see cref="TrackingState"/> of the detected image.</param>
/// <param name="nativePtr">A native pointer associated with the detected image.</param>
public XRTrackedImage(
TrackableId trackableId,
Guid sourceImageId,
Pose pose,
Vector2 size,
TrackingState trackingState,
IntPtr nativePtr)
{
m_Id = trackableId;
m_SourceImageId = sourceImageId;
m_Pose = pose;
m_Size = size;
m_TrackingState = trackingState;
m_NativePtr = nativePtr;
}
/// <summary>
/// Generates a <see cref="XRTrackedImage"/> populated with default values.
/// </summary>
public static XRTrackedImage defaultValue => s_Default;
static readonly XRTrackedImage s_Default = new XRTrackedImage
{
m_Id = TrackableId.invalidId,
m_SourceImageId = Guid.Empty,
m_Pose = Pose.identity,
};
/// <summary>
/// The <see cref="TrackableId"/> associated with this tracked image.
/// </summary>
public TrackableId trackableId => m_Id;
/// <summary>
/// The <c>GUID</c> associated with the source image.
/// </summary>
public Guid sourceImageId => m_SourceImageId;
/// <summary>
/// The <c>Pose</c> associated with this tracked image.
/// </summary>
public Pose pose => m_Pose;
/// <summary>
/// The size (i.e., dimensions) of this tracked image.
/// </summary>
public Vector2 size => m_Size;
/// <summary>
/// The <see cref="TrackingState"/> associated with this tracked image.
/// </summary>
public TrackingState trackingState => m_TrackingState;
/// <summary>
/// A native pointer associated with this tracked image.
/// The data pointed to by this pointer is implementation-defined.
/// While its lifetime is also implementation-defined, it should be
/// valid at least until the next call to
/// <see cref="TrackingSubsystem{TTrackable,TSubsystemDescriptor}.GetChanges(Unity.Collections.Allocator)"/>.
/// </summary>
public IntPtr nativePtr => m_NativePtr;
/// <summary>
/// Generates a hash suitable for use with containers like `HashSet` and `Dictionary`.
/// </summary>
/// <returns>A hash code generated from this object's fields.</returns>
public override int GetHashCode()
{
unchecked
{
var hashCode = m_Id.GetHashCode();
hashCode = hashCode * 486187739 + m_SourceImageId.GetHashCode();
hashCode = hashCode * 486187739 + m_Pose.GetHashCode();
hashCode = hashCode * 486187739 + m_Size.GetHashCode();
hashCode = hashCode * 486187739 + ((int)m_TrackingState).GetHashCode();
return hashCode;
}
}
/// <summary>
/// Tests for equality.
/// </summary>
/// <param name="other">The other <see cref="XRTrackedImage"/> to compare against.</param>
/// <returns>`True` if every field in <paramref name="other"/> is equal to this <see cref="XRTrackedImage"/>, otherwise false.</returns>
public bool Equals(XRTrackedImage other)
{
return
m_Id.Equals(other.m_Id) &&
m_SourceImageId.Equals(other.m_SourceImageId) &&
m_Pose.Equals(other.m_Pose) &&
m_Size.Equals(other.m_Size) &&
m_TrackingState == other.m_TrackingState;
}
/// <summary>
/// Tests for equality.
/// </summary>
/// <param name="obj">The `object` to compare against.</param>
/// <returns>`True` if <paramref name="obj"/> is of type <see cref="XRTrackedImage"/> and
/// <see cref="Equals(XRTrackedImage)"/> also returns `true`; otherwise `false`.</returns>
public override bool Equals(object obj) => obj is XRTrackedImage && Equals((XRTrackedImage)obj);
/// <summary>
/// Tests for equality. Same as <see cref="Equals(XRTrackedImage)"/>.
/// </summary>
/// <param name="lhs">The left-hand side of the comparison.</param>
/// <param name="rhs">The right-hand side of the comparison.</param>
/// <returns>`True` if <paramref name="lhs"/> is equal to <paramref name="rhs"/>, otherwise `false`.</returns>
public static bool operator==(XRTrackedImage lhs, XRTrackedImage rhs) => lhs.Equals(rhs);
/// <summary>
/// Tests for inequality. Same as `!`<see cref="Equals(XRTrackedImage)"/>.
/// </summary>
/// <param name="lhs">The left-hand side of the comparison.</param>
/// <param name="rhs">The right-hand side of the comparison.</param>
/// <returns>`True` if <paramref name="lhs"/> is not equal to <paramref name="rhs"/>, otherwise `false`.</returns>
public static bool operator!=(XRTrackedImage lhs, XRTrackedImage rhs) => !lhs.Equals(rhs);
TrackableId m_Id;
Guid m_SourceImageId;
Pose m_Pose;
Vector2 m_Size;
TrackingState m_TrackingState;
IntPtr m_NativePtr;
}
}