leap-motion 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,34 @@
1
+ /* ----------------------------------------------------------------------------
2
+ * This file was automatically generated by SWIG (http://www.swig.org).
3
+ * Version 2.0.12
4
+ *
5
+ * This file is not intended to be easily readable and contains a number of
6
+ * coding conventions designed to improve portability and efficiency. Do not make
7
+ * changes to this file unless you know what you are doing--modify the SWIG
8
+ * interface file instead.
9
+ * ----------------------------------------------------------------------------- */
10
+
11
+ #ifndef SWIG_Leap__Motion_WRAP_H_
12
+ #define SWIG_Leap__Motion_WRAP_H_
13
+
14
+ namespace Swig {
15
+ class Director;
16
+ }
17
+
18
+
19
+ class SwigDirector_Listener : public Leap::Listener, public Swig::Director {
20
+
21
+ public:
22
+ SwigDirector_Listener(VALUE self);
23
+ virtual ~SwigDirector_Listener();
24
+ virtual void onInit(Leap::Controller const &arg0);
25
+ virtual void onConnect(Leap::Controller const &arg0);
26
+ virtual void onDisconnect(Leap::Controller const &arg0);
27
+ virtual void onExit(Leap::Controller const &arg0);
28
+ virtual void onFrame(Leap::Controller const &arg0);
29
+ virtual void onFocusGained(Leap::Controller const &arg0);
30
+ virtual void onFocusLost(Leap::Controller const &arg0);
31
+ };
32
+
33
+
34
+ #endif
@@ -0,0 +1,26 @@
1
+ require 'mkmf'
2
+ require 'rbconfig'
3
+
4
+ is_windows = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
5
+
6
+ def crash(str)
7
+ printf(" extconf failure: %s\n", str)
8
+ exit 1
9
+ end
10
+
11
+ if is_windows
12
+ $CFLAGS+=" -GX " # allow exceptions
13
+ else
14
+ $libs = append_library($libs, "stdc++")
15
+ end
16
+
17
+ inc, lib = dir_config('leap')
18
+
19
+ if [nil, nil] != [inc, lib]
20
+ $LDFLAGS << " -L#{lib} -lLeap"
21
+ $CFLAGS << " -Wall -g -I#{inc}"
22
+ else
23
+ crash "Please use --with-leap-lib= and --with-leap-include= to give the path to the LeapSDK lib and includes paths"
24
+ end
25
+
26
+ create_makefile("leap/motion")
@@ -0,0 +1,4566 @@
1
+ /******************************************************************************\
2
+ * Copyright (C) 2012-2013 Leap Motion, Inc. All rights reserved. *
3
+ * Leap Motion proprietary and confidential. Not for distribution. *
4
+ * Use subject to the terms of the Leap Motion SDK Agreement available at *
5
+ * https://developer.leapmotion.com/sdk_agreement, or another agreement *
6
+ * between Leap Motion and you, your company or other organization. *
7
+ \******************************************************************************/
8
+
9
+ #if !defined(__Leap_h__)
10
+ #define __Leap_h__
11
+
12
+ #include "LeapMath.h"
13
+ #include <string>
14
+ #include <vector>
15
+
16
+ // Define integer types for Visual Studio 2008 and earlier
17
+ #if defined(_MSC_VER) && (_MSC_VER < 1600)
18
+ typedef __int32 int32_t;
19
+ typedef __int64 int64_t;
20
+ typedef unsigned __int32 uint32_t;
21
+ typedef unsigned __int64 uint64_t;
22
+ #else
23
+ #include <stdint.h>
24
+ #endif
25
+
26
+ // Define Leap export macros
27
+ #if defined(_WIN32) // Windows
28
+ #if LEAP_API_INTERNAL
29
+ #define LEAP_EXPORT
30
+ #elif LEAP_API_IMPLEMENTATION
31
+ #define LEAP_EXPORT __declspec(dllexport)
32
+ #else
33
+ #define LEAP_EXPORT __declspec(dllimport)
34
+ #endif
35
+ #define LEAP_EXPORT_CLASS
36
+ #define LEAP_EXPORT_PLUGIN __declspec(dllexport)
37
+ #elif !defined(SWIG)
38
+ #define LEAP_EXPORT __attribute__((visibility("default")))
39
+ #define LEAP_EXPORT_CLASS __attribute__((visibility("default")))
40
+ #define LEAP_EXPORT_PLUGIN __attribute__((visibility("default")))
41
+ #else
42
+ #define LEAP_EXPORT
43
+ #define LEAP_EXPORT_CLASS
44
+ #define LEAP_EXPORT_PLUGIN
45
+ #endif
46
+
47
+ namespace Leap {
48
+
49
+ // Interface for internal use only
50
+ class LEAP_EXPORT_CLASS Interface {
51
+ public:
52
+ struct Implementation {
53
+ LEAP_EXPORT virtual ~Implementation() {}
54
+ };
55
+ protected:
56
+ LEAP_EXPORT Interface(void* owner);
57
+ LEAP_EXPORT Interface(Implementation* reference, void* owner);
58
+ LEAP_EXPORT Interface(const Interface& rhs);
59
+ Interface(class SharedObject* object);
60
+ LEAP_EXPORT Interface& operator=(const Interface& rhs);
61
+ LEAP_EXPORT virtual ~Interface();
62
+ template<typename T> T* get() const { return static_cast<T*>(reference()); }
63
+ class SharedObject* m_object;
64
+ private:
65
+ LEAP_EXPORT Implementation* reference() const;
66
+ };
67
+
68
+ // Forward declarations for internal use only
69
+ class PointableImplementation;
70
+ class FingerImplementation;
71
+ class ToolImplementation;
72
+ class HandImplementation;
73
+ class GestureImplementation;
74
+ class ScreenImplementation;
75
+ class DeviceImplementation;
76
+ class InteractionBoxImplementation;
77
+ class FrameImplementation;
78
+ class ControllerImplementation;
79
+ template<typename T> class ListBaseImplementation;
80
+
81
+ // Forward declarations
82
+ class PointableList;
83
+ class FingerList;
84
+ class ToolList;
85
+ class HandList;
86
+ class GestureList;
87
+ class Hand;
88
+ class Gesture;
89
+ class Screen;
90
+ class InteractionBox;
91
+ class Frame;
92
+ class Listener;
93
+
94
+ /**
95
+ * The Pointable class reports the physical characteristics of a detected finger or tool.
96
+ *
97
+ * Both fingers and tools are classified as Pointable objects. Use the Pointable::isFinger()
98
+ * function to determine whether a Pointable object represents a finger. Use the
99
+ * Pointable::isTool() function to determine whether a Pointable object represents a tool.
100
+ * The Leap Motion software classifies a detected entity as a tool when it is thinner, straighter, and longer
101
+ * than a typical finger.
102
+ *
103
+ * \include Pointable_Get_Basic.txt
104
+ *
105
+ * To provide touch emulation, the Leap Motion software associates a floating touch
106
+ * plane that adapts to the user's finger movement and hand posture. The Leap Motion
107
+ * interprets purposeful movements toward this plane as potential touch points.
108
+ * The Pointable class reports
109
+ * touch state with the touchZone and touchDistance values.
110
+ *
111
+ * Note that Pointable objects can be invalid, which means that they do not contain
112
+ * valid tracking data and do not correspond to a physical entity. Invalid Pointable
113
+ * objects can be the result of asking for a Pointable object using an ID from an
114
+ * earlier frame when no Pointable objects with that ID exist in the current frame.
115
+ * A Pointable object created from the Pointable constructor is also invalid.
116
+ * Test for validity with the Pointable::isValid() function.
117
+ *
118
+ * @since 1.0
119
+ */
120
+ class Pointable : public Interface {
121
+ public:
122
+
123
+ /**
124
+ * Defines the values for reporting the state of a Pointable object in relation to
125
+ * an adaptive touch plane.
126
+ * @since 1.0
127
+ */
128
+ enum Zone {
129
+ /**
130
+ * The Pointable object is too far from the plane to be
131
+ * considered hovering or touching.
132
+ * @since 1.0
133
+ */
134
+ ZONE_NONE = 0,
135
+ /**
136
+ * The Pointable object is close to, but not touching
137
+ * the plane.
138
+ * @since 1.0
139
+ */
140
+ ZONE_HOVERING = 1,
141
+ /**
142
+ * The Pointable has penetrated the plane.
143
+ * @since 1.0
144
+ */
145
+ ZONE_TOUCHING = 2,
146
+ };
147
+
148
+ // For internal use only.
149
+ Pointable(PointableImplementation*);
150
+ // For internal use only.
151
+ Pointable(FingerImplementation*);
152
+ // For internal use only.
153
+ Pointable(ToolImplementation*);
154
+
155
+ /**
156
+ * Constructs a Pointable object.
157
+ *
158
+ * An uninitialized pointable is considered invalid.
159
+ * Get valid Pointable objects from a Frame or a Hand object.
160
+ *
161
+ * \include Pointable_Pointable.txt
162
+ *
163
+ * @since 1.0
164
+ */
165
+ LEAP_EXPORT Pointable();
166
+
167
+ /**
168
+ * A unique ID assigned to this Pointable object, whose value remains the
169
+ * same across consecutive frames while the tracked finger or tool remains
170
+ * visible. If tracking is lost (for example, when a finger is occluded by
171
+ * another finger or when it is withdrawn from the Leap Motion Controller field of view), the
172
+ * Leap Motion software may assign a new ID when it detects the entity in a future frame.
173
+ *
174
+ * \include Pointable_id.txt
175
+ *
176
+ * Use the ID value with the Frame::pointable() function to find this
177
+ * Pointable object in future frames.
178
+ *
179
+ * IDs should be from 1 to 100 (inclusive). If more than 100 objects are tracked
180
+ * an IDs of -1 will be used until an ID in the defined range is available.
181
+ *
182
+ * @returns The ID assigned to this Pointable object.
183
+ * @since 1.0
184
+ */
185
+ LEAP_EXPORT int32_t id() const;
186
+
187
+ /**
188
+ * The Frame associated with this Pointable object.
189
+ *
190
+ * \include Pointable_frame.txt
191
+ *
192
+ * @returns The associated Frame object, if available; otherwise,
193
+ * an invalid Frame object is returned.
194
+ * @since 1.0
195
+ */
196
+ LEAP_EXPORT Frame frame() const;
197
+
198
+ /**
199
+ * The Hand associated with this finger or tool.
200
+ *
201
+ * \include Pointable_hand.txt
202
+ *
203
+ * @returns The associated Hand object, if available; otherwise,
204
+ * an invalid Hand object is returned.
205
+ * @since 1.0
206
+ */
207
+ LEAP_EXPORT Hand hand() const;
208
+
209
+ /**
210
+ * The tip position in millimeters from the Leap Motion origin.
211
+ *
212
+ * \include Pointable_tipPosition.txt
213
+ *
214
+ * @returns The Vector containing the coordinates of the tip position.
215
+ * @since 1.0
216
+ */
217
+ LEAP_EXPORT Vector tipPosition() const;
218
+
219
+ /**
220
+ * The rate of change of the tip position in millimeters/second.
221
+ *
222
+ * \include Pointable_tipVelocity.txt
223
+ *
224
+ * @returns The Vector containing the coordinates of the tip velocity.
225
+ * @since 1.0
226
+ */
227
+ LEAP_EXPORT Vector tipVelocity() const;
228
+
229
+ /**
230
+ * The direction in which this finger or tool is pointing.
231
+ *
232
+ * \include Pointable_direction.txt
233
+ *
234
+ * The direction is expressed as a unit vector pointing in the same
235
+ * direction as the tip.
236
+ *
237
+ * \image html images/Leap_Finger_Model.png
238
+ *
239
+ * @returns The Vector pointing in the same direction as the tip of this
240
+ * Pointable object.
241
+ * @since 1.0
242
+ */
243
+ LEAP_EXPORT Vector direction() const;
244
+
245
+ /**
246
+ * The estimated width of the finger or tool in millimeters.
247
+ *
248
+ * \include Pointable_width.txt
249
+ *
250
+ * The reported width is the average width of the visible portion of the
251
+ * finger or tool from the hand to the tip. If the width isn't known,
252
+ * then a value of 0 is returned.
253
+ *
254
+ * @returns The estimated width of this Pointable object.
255
+ * @since 1.0
256
+ */
257
+ LEAP_EXPORT float width() const;
258
+
259
+ /**
260
+ * The estimated length of the finger or tool in millimeters.
261
+ *
262
+ * The reported length is the visible length of the finger or tool from the
263
+ * hand to tip. If the length isn't known, then a value of 0 is returned.
264
+ *
265
+ * \include Pointable_length.txt
266
+ *
267
+ * @returns The estimated length of this Pointable object.
268
+ * @since 1.0
269
+ */
270
+ LEAP_EXPORT float length() const;
271
+
272
+ /**
273
+ * Whether or not the Pointable is believed to be a finger.
274
+ * Fingers are generally shorter, thicker, and less straight than tools.
275
+ *
276
+ * \include Pointable_Conversion.txt
277
+ *
278
+ * @returns True, if this Pointable is classified as a finger.
279
+ * @since 1.0
280
+ */
281
+ LEAP_EXPORT bool isFinger() const;
282
+
283
+ /**
284
+ * Whether or not the Pointable is believed to be a tool.
285
+ * Tools are generally longer, thinner, and straighter than fingers.
286
+ *
287
+ * \include Pointable_Conversion.txt
288
+ *
289
+ * @returns True, if this Pointable is classified as a tool.
290
+ * @since 1.0
291
+ */
292
+ LEAP_EXPORT bool isTool() const;
293
+
294
+ /**
295
+ * Reports whether this is a valid Pointable object.
296
+ *
297
+ * \include Pointable_isValid.txt
298
+ *
299
+ * @returns True, if this Pointable object contains valid tracking data.
300
+ * @since 1.0
301
+ */
302
+ LEAP_EXPORT bool isValid() const;
303
+
304
+ /**
305
+ * The current touch zone of this Pointable object.
306
+ *
307
+ * The Leap Motion software computes the touch zone based on a floating touch
308
+ * plane that adapts to the user's finger movement and hand posture. The Leap
309
+ * Motion software interprets purposeful movements toward this plane as potential touch
310
+ * points. When a Pointable moves close to the adaptive touch plane, it enters the
311
+ * "hovering" zone. When a Pointable reaches or passes through the plane, it enters
312
+ * the "touching" zone.
313
+ *
314
+ * The possible states are present in the Zone enum of this class:
315
+ *
316
+ * * Zone.NONE -- The Pointable is outside the hovering zone.
317
+ * * Zone.HOVERING -- The Pointable is close to, but not touching the touch plane.
318
+ * * Zone.TOUCHING -- The Pointable has penetrated the touch plane.
319
+ *
320
+ * The touchDistance value provides a normalized indication of the distance to
321
+ * the touch plane when the Pointable is in the hovering or touching zones.
322
+ *
323
+ * \include Pointable_touchZone.txt
324
+ *
325
+ * @returns The touch zone of this Pointable
326
+ * @since 1.0
327
+ */
328
+ LEAP_EXPORT Zone touchZone() const;
329
+
330
+ /**
331
+ * A value proportional to the distance between this Pointable object and the
332
+ * adaptive touch plane.
333
+ *
334
+ * \image html images/Leap_Touch_Plane.png
335
+ *
336
+ * The touch distance is a value in the range [-1, 1]. The value 1.0 indicates the
337
+ * Pointable is at the far edge of the hovering zone. The value 0 indicates the
338
+ * Pointable is just entering the touching zone. A value of -1.0 indicates the
339
+ * Pointable is firmly within the touching zone. Values in between are
340
+ * proportional to the distance from the plane. Thus, the touchDistance of 0.5
341
+ * indicates that the Pointable is halfway into the hovering zone.
342
+ *
343
+ * \include Pointable_touchDistance.txt
344
+ *
345
+ * You can use the touchDistance value to modulate visual feedback given to the
346
+ * user as their fingers close in on a touch target, such as a button.
347
+ *
348
+ * @returns The normalized touch distance of this Pointable object.
349
+ * @since 1.0
350
+ */
351
+ LEAP_EXPORT float touchDistance() const;
352
+
353
+ /**
354
+ * The stabilized tip position of this Pointable.
355
+ *
356
+ * Smoothing and stabilization is performed in order to make
357
+ * this value more suitable for interaction with 2D content. The stabilized
358
+ * position lags behind the tip position by a variable amount, depending
359
+ * primarily on the speed of movement.
360
+ *
361
+ * \include Pointable_stabilizedTipPosition.txt
362
+ *
363
+ * @returns A modified tip position of this Pointable object
364
+ * with some additional smoothing and stabilization applied.
365
+ * @since 1.0
366
+ */
367
+ LEAP_EXPORT Vector stabilizedTipPosition() const;
368
+
369
+ /**
370
+ * The duration of time this Pointable has been visible to the Leap Motion Controller.
371
+ *
372
+ * \include Pointable_timeVisible.txt
373
+ *
374
+ * @returns The duration (in seconds) that this Pointable has been tracked.
375
+ * @since 1.0
376
+ */
377
+ LEAP_EXPORT float timeVisible() const;
378
+
379
+ /**
380
+ * Returns an invalid Pointable object.
381
+ *
382
+ * You can use the instance returned by this function in comparisons testing
383
+ * whether a given Pointable instance is valid or invalid. (You can also use the
384
+ * Pointable::isValid() function.)
385
+ *
386
+ * \include Pointable_invalid.txt
387
+ *
388
+ * @returns The invalid Pointable instance.
389
+ * @since 1.0
390
+ */
391
+ LEAP_EXPORT static const Pointable& invalid();
392
+
393
+ /**
394
+ * Compare Pointable object equality.
395
+ *
396
+ * \include Pointable_operator_equals.txt
397
+ *
398
+ * Two Pointable objects are equal if and only if both Pointable objects represent the
399
+ * exact same physical entities in the same frame and both Pointable objects are valid.
400
+ * @since 1.0
401
+ */
402
+ LEAP_EXPORT bool operator==(const Pointable&) const;
403
+
404
+ /**
405
+ * Compare Pointable object inequality.
406
+ *
407
+ * \include Pointable_operator_not_equal.txt
408
+ *
409
+ * Two Pointable objects are equal if and only if both Pointable objects represent the
410
+ * exact same physical entities in the same frame and both Pointable objects are valid.
411
+ * @since 1.0
412
+ */
413
+ LEAP_EXPORT bool operator!=(const Pointable&) const;
414
+
415
+ /**
416
+ * Writes a brief, human readable description of the Pointable object to an output stream.
417
+ *
418
+ * \include Pointable_operator_stream.txt
419
+ *
420
+ * @since 1.0
421
+ */
422
+ LEAP_EXPORT friend std::ostream& operator<<(std::ostream&, const Pointable&);
423
+
424
+ /**
425
+ * A string containing a brief, human readable description of the Pointable object.
426
+ *
427
+ * @returns A description of the Pointable object as a string.
428
+ * @since 1.0
429
+ */
430
+ LEAP_EXPORT std::string toString() const;
431
+ };
432
+
433
+ /**
434
+ * The Finger class represents a tracked finger.
435
+ *
436
+ * Fingers are Pointable objects that the Leap Motion software has classified as a finger.
437
+ * Get valid Finger objects from a Frame or a Hand object.
438
+ *
439
+ * Fingers may be permanently associated to a hand. In this case the angular order of the finger IDs
440
+ * will be invariant. As fingers move in and out of view it is possible for the guessed ID
441
+ * of a finger to be incorrect. Consequently, it may be necessary for finger IDs to be
442
+ * exchanged. All tracked properties, such as velocity, will remain continuous in the API.
443
+ * However, quantities that are derived from the API output (such as a history of positions)
444
+ * will be discontinuous unless they have a corresponding ID exchange.
445
+ *
446
+ * Note that Finger objects can be invalid, which means that they do not contain
447
+ * valid tracking data and do not correspond to a physical finger. Invalid Finger
448
+ * objects can be the result of asking for a Finger object using an ID from an
449
+ * earlier frame when no Finger objects with that ID exist in the current frame.
450
+ * A Finger object created from the Finger constructor is also invalid.
451
+ * Test for validity with the Finger::isValid() function.
452
+ * @since 1.0
453
+ */
454
+ class Finger : public Pointable {
455
+ public:
456
+ // For internal use only.
457
+ Finger(FingerImplementation*);
458
+
459
+ /**
460
+ * Constructs a Finger object.
461
+ *
462
+ * An uninitialized finger is considered invalid.
463
+ * Get valid Finger objects from a Frame or a Hand object.
464
+ * @since 1.0
465
+ */
466
+ LEAP_EXPORT Finger();
467
+
468
+ /**
469
+ * If the specified Pointable object represents a finger, creates a copy
470
+ * of it as a Finger object; otherwise, creates an invalid Finger object.
471
+ *
472
+ * \include Finger_Finger.txt
473
+ *
474
+ * @since 1.0
475
+ */
476
+ LEAP_EXPORT explicit Finger(const Pointable&);
477
+
478
+ /**
479
+ * Returns an invalid Finger object.
480
+ *
481
+ * You can use the instance returned by this function in comparisons testing
482
+ * whether a given Finger instance is valid or invalid. (You can also use the
483
+ * Finger::isValid() function.)
484
+ *
485
+ * \include Finger_invalid.txt
486
+ *
487
+ * @returns The invalid Finger instance.
488
+ * @since 1.0
489
+ */
490
+ LEAP_EXPORT static const Finger& invalid();
491
+
492
+ /**
493
+ * A string containing a brief, human readable description of the Finger object.
494
+ *
495
+ * @returns A description of the Finger object as a string.
496
+ * @since 1.0
497
+ */
498
+ LEAP_EXPORT std::string toString() const;
499
+ };
500
+
501
+ /**
502
+ * The Tool class represents a tracked tool.
503
+ *
504
+ * Tools are Pointable objects that the Leap Motion software has classified as a tool.
505
+ * Tools are longer, thinner, and straighter than a typical finger.
506
+ * Get valid Tool objects from a Frame or a Hand object.
507
+ *
508
+ * Tools may reference a hand, but unlike fingers they are not permanently associated.
509
+ * Instead, a tool can be transferred between hands while keeping the same ID.
510
+ *
511
+ * \image html images/Leap_Tool.png
512
+ *
513
+ * Note that Tool objects can be invalid, which means that they do not contain
514
+ * valid tracking data and do not correspond to a physical tool. Invalid Tool
515
+ * objects can be the result of asking for a Tool object using an ID from an
516
+ * earlier frame when no Tool objects with that ID exist in the current frame.
517
+ * A Tool object created from the Tool constructor is also invalid.
518
+ * Test for validity with the Tool::isValid() function.
519
+ * @since 1.0
520
+ */
521
+ class Tool : public Pointable {
522
+ public:
523
+ // For internal use only.
524
+ Tool(ToolImplementation*);
525
+
526
+ /**
527
+ * Constructs a Tool object.
528
+ *
529
+ * An uninitialized tool is considered invalid.
530
+ * Get valid Tool objects from a Frame or a Hand object.
531
+ *
532
+ * \include Tool_Tool.txt
533
+ *
534
+ * @since 1.0
535
+ */
536
+ LEAP_EXPORT Tool();
537
+
538
+ /**
539
+ * If the specified Pointable object represents a tool, creates a copy
540
+ * of it as a Tool object; otherwise, creates an invalid Tool object.
541
+ *
542
+ * \include Tool_Tool_copy.txt
543
+ *
544
+ * @since 1.0
545
+ */
546
+ LEAP_EXPORT explicit Tool(const Pointable&);
547
+
548
+ /**
549
+ * Returns an invalid Tool object.
550
+ *
551
+ * You can use the instance returned by this function in comparisons testing
552
+ * whether a given Tool instance is valid or invalid. (You can also use the
553
+ * Tool::isValid() function.)
554
+ *
555
+ * \include Tool_invalid.txt
556
+ *
557
+ * @returns The invalid Tool instance.
558
+ * @since 1.0
559
+ */
560
+ LEAP_EXPORT static const Tool& invalid();
561
+
562
+ /**
563
+ * A string containing a brief, human readable description of the Tool object.
564
+ *
565
+ * @returns A description of the Tool object as a string.
566
+ * @since 1.0
567
+ */
568
+ LEAP_EXPORT std::string toString() const;
569
+ };
570
+
571
+ /**
572
+ * The Hand class reports the physical characteristics of a detected hand.
573
+ *
574
+ * Hand tracking data includes a palm position and velocity; vectors for
575
+ * the palm normal and direction to the fingers; properties of a sphere fit
576
+ * to the hand; and lists of the attached fingers and tools.
577
+ *
578
+ * Get Hand objects from a Frame object:
579
+ *
580
+ * \include Hand_Get_First.txt
581
+ *
582
+ * Note that Hand objects can be invalid, which means that they do not contain
583
+ * valid tracking data and do not correspond to a physical entity. Invalid Hand
584
+ * objects can be the result of asking for a Hand object using an ID from an
585
+ * earlier frame when no Hand objects with that ID exist in the current frame.
586
+ * A Hand object created from the Hand constructor is also invalid.
587
+ * Test for validity with the Hand::isValid() function.
588
+ * @since 1.0
589
+ */
590
+ class Hand : public Interface {
591
+ public:
592
+ // For internal use only.
593
+ Hand(HandImplementation*);
594
+
595
+ /**
596
+ * Constructs a Hand object.
597
+ *
598
+ * An uninitialized hand is considered invalid.
599
+ * Get valid Hand objects from a Frame object.
600
+ *
601
+ * \include Hand_Hand.txt
602
+ *
603
+ * @since 1.0
604
+ */
605
+ LEAP_EXPORT Hand();
606
+
607
+ /**
608
+ * A unique ID assigned to this Hand object, whose value remains the same
609
+ * across consecutive frames while the tracked hand remains visible. If
610
+ * tracking is lost (for example, when a hand is occluded by another hand
611
+ * or when it is withdrawn from or reaches the edge of the Leap Motion Controller field of view),
612
+ * the Leap Motion software may assign a new ID when it detects the hand in a future frame.
613
+ *
614
+ * Use the ID value with the Frame::hand() function to find this Hand object
615
+ * in future frames:
616
+ *
617
+ * \include Hand_Get_ID.txt
618
+ *
619
+ * @returns The ID of this hand.
620
+ * @since 1.0
621
+ */
622
+ LEAP_EXPORT int32_t id() const;
623
+
624
+ /**
625
+ * The Frame associated with this Hand.
626
+ *
627
+ * \include Hand_frame.txt
628
+ *
629
+ * @returns The associated Frame object, if available; otherwise,
630
+ * an invalid Frame object is returned.
631
+ * @since 1.0
632
+ */
633
+ LEAP_EXPORT Frame frame() const;
634
+
635
+ /**
636
+ * The list of Pointable objects (fingers and tools) detected in this frame
637
+ * that are associated with this hand, given in arbitrary order. The list
638
+ * can be empty if no fingers or tools associated with this hand are detected.
639
+ *
640
+ * Use the Pointable::isFinger() function to determine whether or not an
641
+ * item in the list represents a finger. Use the Pointable::isTool() function
642
+ * to determine whether or not an item in the list represents a tool.
643
+ * You can also get only fingers using the Hand::fingers() function or
644
+ * only tools using the Hand::tools() function.
645
+ *
646
+ * \include Hand_Get_Fingers.txt
647
+ *
648
+ * @returns The PointableList containing all Pointable objects associated with this hand.
649
+ * @since 1.0
650
+ */
651
+ LEAP_EXPORT PointableList pointables() const;
652
+
653
+ /**
654
+ * The Pointable object with the specified ID associated with this hand.
655
+ *
656
+ * Use the Hand::pointable() function to retrieve a Pointable object
657
+ * associated with this hand using an ID value obtained from a previous frame.
658
+ * This function always returns a Pointable object, but if no finger or tool
659
+ * with the specified ID is present, an invalid Pointable object is returned.
660
+ *
661
+ * \include Hand_Get_Pointable_ByID.txt
662
+ *
663
+ * Note that the ID values assigned to objects persist across frames, but only until
664
+ * tracking of that object is lost. If tracking of a finger or tool is lost and subsequently
665
+ * regained, the new Pointable object representing that finger or tool may have a
666
+ * different ID than that representing the finger or tool in an earlier frame.
667
+ *
668
+ * @param id The ID value of a Pointable object from a previous frame.
669
+ * @returns The Pointable object with the matching ID if one exists for this
670
+ * hand in this frame; otherwise, an invalid Pointable object is returned.
671
+ * @since 1.0
672
+ */
673
+ LEAP_EXPORT Pointable pointable(int32_t id) const;
674
+
675
+ /**
676
+ * The list of Finger objects detected in this frame that are attached to
677
+ * this hand, given in arbitrary order.
678
+ * The list can be empty if no fingers attached to this hand are detected.
679
+ *
680
+ * \include Hand_Get_Fingers.txt
681
+ *
682
+ * @returns The FingerList containing all Finger objects attached to this hand.
683
+ * @since 1.0
684
+ */
685
+ LEAP_EXPORT FingerList fingers() const;
686
+
687
+ /**
688
+ * The Finger object with the specified ID attached to this hand.
689
+ *
690
+ * Use the Hand::finger() function to retrieve a Finger object attached to
691
+ * this hand using an ID value obtained from a previous frame.
692
+ * This function always returns a Finger object, but if no finger
693
+ * with the specified ID is present, an invalid Finger object is returned.
694
+ *
695
+ * \include Hand_finger.txt
696
+ *
697
+ * Note that ID values persist across frames, but only until tracking of a
698
+ * particular object is lost. If tracking of a finger is lost and subsequently
699
+ * regained, the new Finger object representing that finger may have a
700
+ * different ID than that representing the finger in an earlier frame.
701
+ *
702
+ * @param id The ID value of a Finger object from a previous frame.
703
+ * @returns The Finger object with the matching ID if one exists for this
704
+ * hand in this frame; otherwise, an invalid Finger object is returned.
705
+ * @since 1.0
706
+ */
707
+ LEAP_EXPORT Finger finger(int32_t id) const;
708
+
709
+ /**
710
+ * The list of Tool objects detected in this frame that are held by this
711
+ * hand, given in arbitrary order.
712
+ * The list can be empty if no tools held by this hand are detected.
713
+ *
714
+ * \include Hand_tools.txt
715
+ *
716
+ * @returns The ToolList containing all Tool objects held by this hand.
717
+ * @since 1.0
718
+ */
719
+ LEAP_EXPORT ToolList tools() const;
720
+
721
+ /**
722
+ * The Tool object with the specified ID held by this hand.
723
+ *
724
+ * Use the Hand::tool() function to retrieve a Tool object held by
725
+ * this hand using an ID value obtained from a previous frame.
726
+ * This function always returns a Tool object, but if no tool
727
+ * with the specified ID is present, an invalid Tool object is returned.
728
+ *
729
+ * \include Hand_tool.txt
730
+ *
731
+ * Note that ID values persist across frames, but only until tracking of a
732
+ * particular object is lost. If tracking of a tool is lost and subsequently
733
+ * regained, the new Tool object representing that tool may have a
734
+ * different ID than that representing the tool in an earlier frame.
735
+ *
736
+ * @param id The ID value of a Tool object from a previous frame.
737
+ * @returns The Tool object with the matching ID if one exists for this
738
+ * hand in this frame; otherwise, an invalid Tool object is returned.
739
+ * @since 1.0
740
+ */
741
+ LEAP_EXPORT Tool tool(int32_t id) const;
742
+
743
+ /**
744
+ * The center position of the palm in millimeters from the Leap Motion Controller origin.
745
+ *
746
+ * \include Hand_palmPosition.txt
747
+ *
748
+ * @returns The Vector representing the coordinates of the palm position.
749
+ * @since 1.0
750
+ */
751
+ LEAP_EXPORT Vector palmPosition() const;
752
+
753
+ /**
754
+ * The stabilized palm position of this Hand.
755
+ *
756
+ * Smoothing and stabilization is performed in order to make
757
+ * this value more suitable for interaction with 2D content. The stabilized
758
+ * position lags behind the palm position by a variable amount, depending
759
+ * primarily on the speed of movement.
760
+ *
761
+ * \include Hand_stabilizedPalmPosition.txt
762
+ *
763
+ * @returns A modified palm position of this Hand object
764
+ * with some additional smoothing and stabilization applied.
765
+ * @since 1.0
766
+ */
767
+ LEAP_EXPORT Vector stabilizedPalmPosition() const;
768
+
769
+ /**
770
+ * The rate of change of the palm position in millimeters/second.
771
+ *
772
+ * \include Hand_palmVelocity.txt
773
+ *
774
+ * @returns The Vector representing the coordinates of the palm velocity.
775
+ * @since 1.0
776
+ */
777
+ LEAP_EXPORT Vector palmVelocity() const;
778
+
779
+ /**
780
+ * The normal vector to the palm. If your hand is flat, this vector will
781
+ * point downward, or "out" of the front surface of your palm.
782
+ *
783
+ * \image html images/Leap_Palm_Vectors.png
784
+ *
785
+ * The direction is expressed as a unit vector pointing in the same
786
+ * direction as the palm normal (that is, a vector orthogonal to the palm).
787
+ *
788
+ * You can use the palm normal vector to compute the roll angle of the palm with
789
+ * respect to the horizontal plane:
790
+ *
791
+ * \include Hand_Get_Angles.txt
792
+ *
793
+ * @returns The Vector normal to the plane formed by the palm.
794
+ * @since 1.0
795
+ */
796
+ LEAP_EXPORT Vector palmNormal() const;
797
+
798
+ /**
799
+ * The direction from the palm position toward the fingers.
800
+ *
801
+ * The direction is expressed as a unit vector pointing in the same
802
+ * direction as the directed line from the palm position to the fingers.
803
+ *
804
+ * You can use the palm direction vector to compute the pitch and yaw angles of the palm with
805
+ * respect to the horizontal plane:
806
+ *
807
+ * \include Hand_Get_Angles.txt
808
+ *
809
+ * @returns The Vector pointing from the palm position toward the fingers.
810
+ * @since 1.0
811
+ */
812
+ LEAP_EXPORT Vector direction() const;
813
+
814
+ /**
815
+ * The center of a sphere fit to the curvature of this hand.
816
+ *
817
+ * \include Hand_sphereCenter.txt
818
+ *
819
+ * This sphere is placed roughly as if the hand were holding a ball.
820
+ *
821
+ * \image html images/Leap_Hand_Ball.png
822
+ *
823
+ * @returns The Vector representing the center position of the sphere.
824
+ * @since 1.0
825
+ */
826
+ LEAP_EXPORT Vector sphereCenter() const;
827
+
828
+ /**
829
+ * The radius of a sphere fit to the curvature of this hand.
830
+ *
831
+ * This sphere is placed roughly as if the hand were holding a ball. Thus the
832
+ * size of the sphere decreases as the fingers are curled into a fist.
833
+ *
834
+ * \include Hand_sphereRadius.txt
835
+ *
836
+ * @returns The radius of the sphere in millimeters.
837
+ * @since 1.0
838
+ */
839
+ LEAP_EXPORT float sphereRadius() const;
840
+
841
+ /**
842
+ * The change of position of this hand between the current frame and
843
+ * the specified frame.
844
+ *
845
+ * The returned translation vector provides the magnitude and direction of
846
+ * the movement in millimeters.
847
+ *
848
+ * \include Hand_translation.txt
849
+ *
850
+ * If a corresponding Hand object is not found in sinceFrame, or if either
851
+ * this frame or sinceFrame are invalid Frame objects, then this method
852
+ * returns a zero vector.
853
+ *
854
+ * @param sinceFrame The starting frame for computing the translation.
855
+ * @returns A Vector representing the heuristically determined change in
856
+ * hand position between the current frame and that specified in the
857
+ * sinceFrame parameter.
858
+ * @since 1.0
859
+ */
860
+ LEAP_EXPORT Vector translation(const Frame& sinceFrame) const;
861
+
862
+ /**
863
+ * The estimated probability that the hand motion between the current
864
+ * frame and the specified frame is intended to be a translating motion.
865
+ *
866
+ * \include Hand_translationProbability.txt
867
+ *
868
+ * If a corresponding Hand object is not found in sinceFrame, or if either
869
+ * this frame or sinceFrame are invalid Frame objects, then this method
870
+ * returns zero.
871
+ *
872
+ * @param sinceFrame The starting frame for computing the translation.
873
+ * @returns A value between 0 and 1 representing the estimated probability
874
+ * that the hand motion between the current frame and the specified frame
875
+ * is intended to be a translating motion.
876
+ * @since 1.0
877
+ */
878
+ LEAP_EXPORT float translationProbability(const Frame& sinceFrame) const;
879
+
880
+ /**
881
+ * The axis of rotation derived from the change in orientation of this
882
+ * hand, and any associated fingers and tools, between the current frame
883
+ * and the specified frame.
884
+ *
885
+ * \include Hand_rotationAxis.txt
886
+ *
887
+ * The returned direction vector is normalized.
888
+ *
889
+ * If a corresponding Hand object is not found in sinceFrame, or if either
890
+ * this frame or sinceFrame are invalid Frame objects, then this method
891
+ * returns a zero vector.
892
+ *
893
+ * @param sinceFrame The starting frame for computing the relative rotation.
894
+ * @returns A normalized direction Vector representing the heuristically
895
+ * determined axis of rotational change of the hand between the current
896
+ * frame and that specified in the sinceFrame parameter.
897
+ * @since 1.0
898
+ */
899
+ LEAP_EXPORT Vector rotationAxis(const Frame& sinceFrame) const;
900
+
901
+ /**
902
+ * The angle of rotation around the rotation axis derived from the change
903
+ * in orientation of this hand, and any associated fingers and tools,
904
+ * between the current frame and the specified frame.
905
+ *
906
+ * \include Hand_rotationAngle.txt
907
+ *
908
+ * The returned angle is expressed in radians measured clockwise around the
909
+ * rotation axis (using the right-hand rule) between the start and end frames.
910
+ * The value is always between 0 and pi radians (0 and 180 degrees).
911
+ *
912
+ * If a corresponding Hand object is not found in sinceFrame, or if either
913
+ * this frame or sinceFrame are invalid Frame objects, then the angle of
914
+ * rotation is zero.
915
+ *
916
+ * @param sinceFrame The starting frame for computing the relative rotation.
917
+ * @returns A positive value representing the heuristically determined
918
+ * rotational change of the hand between the current frame and that
919
+ * specified in the sinceFrame parameter.
920
+ * @since 1.0
921
+ */
922
+ LEAP_EXPORT float rotationAngle(const Frame& sinceFrame) const;
923
+
924
+ /**
925
+ * The angle of rotation around the specified axis derived from the change
926
+ * in orientation of this hand, and any associated fingers and tools,
927
+ * between the current frame and the specified frame.
928
+ *
929
+ * \include Hand_rotationAngle_axis.txt
930
+ *
931
+ * The returned angle is expressed in radians measured clockwise around the
932
+ * rotation axis (using the right-hand rule) between the start and end frames.
933
+ * The value is always between -pi and pi radians (-180 and 180 degrees).
934
+ *
935
+ * If a corresponding Hand object is not found in sinceFrame, or if either
936
+ * this frame or sinceFrame are invalid Frame objects, then the angle of
937
+ * rotation is zero.
938
+ *
939
+ * @param sinceFrame The starting frame for computing the relative rotation.
940
+ * @param axis The axis to measure rotation around.
941
+ * @returns A value representing the heuristically determined rotational
942
+ * change of the hand between the current frame and that specified in the
943
+ * sinceFrame parameter around the specified axis.
944
+ * @since 1.0
945
+ */
946
+ LEAP_EXPORT float rotationAngle(const Frame& sinceFrame, const Vector& axis) const;
947
+
948
+ /**
949
+ * The transform matrix expressing the rotation derived from the change
950
+ * in orientation of this hand, and any associated fingers and tools,
951
+ * between the current frame and the specified frame.
952
+ *
953
+ * \include Hand_rotationMatrix.txt
954
+ *
955
+ * If a corresponding Hand object is not found in sinceFrame, or if either
956
+ * this frame or sinceFrame are invalid Frame objects, then this method
957
+ * returns an identity matrix.
958
+ *
959
+ * @param sinceFrame The starting frame for computing the relative rotation.
960
+ * @returns A transformation Matrix representing the heuristically determined
961
+ * rotational change of the hand between the current frame and that specified
962
+ * in the sinceFrame parameter.
963
+ * @since 1.0
964
+ */
965
+ LEAP_EXPORT Matrix rotationMatrix(const Frame& sinceFrame) const;
966
+
967
+ /**
968
+ * The estimated probability that the hand motion between the current
969
+ * frame and the specified frame is intended to be a rotating motion.
970
+ *
971
+ * \include Hand_rotationProbability.txt
972
+ *
973
+ * If a corresponding Hand object is not found in sinceFrame, or if either
974
+ * this frame or sinceFrame are invalid Frame objects, then this method
975
+ * returns zero.
976
+ *
977
+ * @param sinceFrame The starting frame for computing the relative rotation.
978
+ * @returns A value between 0 and 1 representing the estimated probability
979
+ * that the hand motion between the current frame and the specified frame
980
+ * is intended to be a rotating motion.
981
+ * @since 1.0
982
+ */
983
+ LEAP_EXPORT float rotationProbability(const Frame& sinceFrame) const;
984
+
985
+ /**
986
+ * The scale factor derived from this hand's motion between the current frame
987
+ * and the specified frame.
988
+ *
989
+ * The scale factor is always positive. A value of 1.0 indicates no
990
+ * scaling took place. Values between 0.0 and 1.0 indicate contraction
991
+ * and values greater than 1.0 indicate expansion.
992
+ *
993
+ * \include Hand_scaleFactor.txt
994
+ *
995
+ * The Leap Motion software derives scaling from the relative inward or outward motion of
996
+ * a hand and its associated fingers and tools (independent of translation
997
+ * and rotation).
998
+ *
999
+ * If a corresponding Hand object is not found in sinceFrame, or if either
1000
+ * this frame or sinceFrame are invalid Frame objects, then this method
1001
+ * returns 1.0.
1002
+ *
1003
+ * @param sinceFrame The starting frame for computing the relative scaling.
1004
+ * @returns A positive value representing the heuristically determined
1005
+ * scaling change ratio of the hand between the current frame and that
1006
+ * specified in the sinceFrame parameter.
1007
+ * @since 1.0
1008
+ */
1009
+ LEAP_EXPORT float scaleFactor(const Frame& sinceFrame) const;
1010
+
1011
+ /**
1012
+ * The estimated probability that the hand motion between the current
1013
+ * frame and the specified frame is intended to be a scaling motion.
1014
+ *
1015
+ * \include Hand_scaleProbability.txt
1016
+ *
1017
+ * If a corresponding Hand object is not found in sinceFrame, or if either
1018
+ * this frame or sinceFrame are invalid Frame objects, then this method
1019
+ * returns zero.
1020
+ *
1021
+ * @param sinceFrame The starting frame for computing the relative scaling.
1022
+ * @returns A value between 0 and 1 representing the estimated probability
1023
+ * that the hand motion between the current frame and the specified frame
1024
+ * is intended to be a scaling motion.
1025
+ * @since 1.0
1026
+ */
1027
+ LEAP_EXPORT float scaleProbability(const Frame& sinceFrame) const;
1028
+
1029
+ /**
1030
+ * The duration of time this Hand has been visible to the Leap Motion Controller.
1031
+ *
1032
+ * \include Hand_timeVisible.txt
1033
+ *
1034
+ * @returns The duration (in seconds) that this Hand has been tracked.
1035
+ * @since 1.0
1036
+ */
1037
+ LEAP_EXPORT float timeVisible() const;
1038
+
1039
+ /**
1040
+ * Reports whether this is a valid Hand object.
1041
+ *
1042
+ * \include Hand_isValid.txt
1043
+ *
1044
+ * @returns True, if this Hand object contains valid tracking data.
1045
+ * @since 1.0
1046
+ */
1047
+ LEAP_EXPORT bool isValid() const;
1048
+
1049
+ /**
1050
+ * Returns an invalid Hand object.
1051
+ *
1052
+ * \include Hand_invalid.txt
1053
+ *
1054
+ * You can use the instance returned by this function in comparisons testing
1055
+ * whether a given Hand instance is valid or invalid. (You can also use the
1056
+ * Hand::isValid() function.)
1057
+ *
1058
+ * @returns The invalid Hand instance.
1059
+ * @since 1.0
1060
+ */
1061
+ LEAP_EXPORT static const Hand& invalid();
1062
+
1063
+ /**
1064
+ * Compare Hand object equality.
1065
+ *
1066
+ * \include Hand_operator_equals.txt
1067
+ *
1068
+ * Two Hand objects are equal if and only if both Hand objects represent the
1069
+ * exact same physical hand in the same frame and both Hand objects are valid.
1070
+ * @since 1.0
1071
+ */
1072
+ LEAP_EXPORT bool operator==(const Hand&) const;
1073
+
1074
+ /**
1075
+ * Compare Hand object inequality.
1076
+ *
1077
+ * \include Hand_operator_not_equals.txt
1078
+ *
1079
+ * Two Hand objects are equal if and only if both Hand objects represent the
1080
+ * exact same physical hand in the same frame and both Hand objects are valid.
1081
+ * @since 1.0
1082
+ */
1083
+ LEAP_EXPORT bool operator!=(const Hand&) const;
1084
+
1085
+ /**
1086
+ * Writes a brief, human readable description of the Hand object to an output stream.
1087
+ *
1088
+ * \include Hand_operator_stream.txt
1089
+ *
1090
+ * @since 1.0
1091
+ */
1092
+ LEAP_EXPORT friend std::ostream& operator<<(std::ostream&, const Hand&);
1093
+
1094
+ /**
1095
+ * A string containing a brief, human readable description of the Hand object.
1096
+ *
1097
+ * @returns A description of the Hand as a string.
1098
+ * @since 1.0
1099
+ */
1100
+ LEAP_EXPORT std::string toString() const;
1101
+ };
1102
+
1103
+ /**
1104
+ * The Gesture class represents a recognized movement by the user.
1105
+ *
1106
+ * The Leap Motion Controller watches the activity within its field of view for certain movement
1107
+ * patterns typical of a user gesture or command. For example, a movement from side to
1108
+ * side with the hand can indicate a swipe gesture, while a finger poking forward
1109
+ * can indicate a screen tap gesture.
1110
+ *
1111
+ * When the Leap Motion software recognizes a gesture, it assigns an ID and adds a
1112
+ * Gesture object to the frame gesture list. For continuous gestures, which
1113
+ * occur over many frames, the Leap Motion software updates the gesture by adding
1114
+ * a Gesture object having the same ID and updated properties in each
1115
+ * subsequent frame.
1116
+ *
1117
+ * **Important:** Recognition for each type of gesture must be enabled using the
1118
+ * Controller::enableGesture() function; otherwise **no gestures are recognized or
1119
+ * reported**.
1120
+ *
1121
+ * \include Gesture_Feature_enable.txt
1122
+ *
1123
+ * Subclasses of Gesture define the properties for the specific movement patterns
1124
+ * recognized by the Leap Motion software.
1125
+ *
1126
+ * The Gesture subclasses for include:
1127
+ *
1128
+ * * CircleGesture -- A circular movement by a finger.
1129
+ * * SwipeGesture -- A straight line movement by the hand with fingers extended.
1130
+ * * ScreenTapGesture -- A forward tapping movement by a finger.
1131
+ * * KeyTapGesture -- A downward tapping movement by a finger.
1132
+ *
1133
+ * Circle and swipe gestures are continuous and these objects can have a
1134
+ * state of start, update, and stop.
1135
+ *
1136
+ * The screen tap gesture is a discrete gesture. The Leap Motion software only creates a single
1137
+ * ScreenTapGesture object for each tap and it always has a stop state.
1138
+ *
1139
+ * Get valid Gesture instances from a Frame object. You can get a list of gestures
1140
+ * with the Frame::gestures() method. You can get a list of gestures since a
1141
+ * specified frame with the `Frame::gestures(const Frame&)` method. You can also
1142
+ * use the `Frame::gesture()` method to find a gesture in the current frame using
1143
+ * an ID value obtained in a previous frame.
1144
+ *
1145
+ * Gesture objects can be invalid. For example, when you get a gesture by ID
1146
+ * using `Frame::gesture()`, and there is no gesture with that ID in the current
1147
+ * frame, then `gesture()` returns an Invalid Gesture object (rather than a null
1148
+ * value). Always check object validity in situations where a gesture might be
1149
+ * invalid.
1150
+ *
1151
+ * The following keys can be used with the Config class to configure the gesture
1152
+ * recognizer:
1153
+ *
1154
+ * Key string | Value type | Default value | Units
1155
+ * -----------|------------|---------------|------
1156
+ * Gesture.Circle.MinRadius | float | 5.0 | mm
1157
+ * Gesture.Circle.MinArc | float | 1.5*pi | radians
1158
+ * Gesture.Swipe.MinLength | float | 150 | mm
1159
+ * Gesture.Swipe.MinVelocity | float | 1000 | mm/s
1160
+ * Gesture.KeyTap.MinDownVelocity | float | 50 | mm/s
1161
+ * Gesture.KeyTap.HistorySeconds | float | 0.1 | s
1162
+ * Gesture.KeyTap.MinDistance | float | 5.0 | mm
1163
+ * Gesture.ScreenTap.MinForwardVelocity | float | 50 | mm/s
1164
+ * Gesture.ScreenTap.HistorySeconds | float | 0.1 | s
1165
+ * Gesture.ScreenTap.MinDistance | float | 3.0 | mm
1166
+ * @since 1.0
1167
+ */
1168
+ class Gesture : public Interface {
1169
+ public:
1170
+ // For internal use only.
1171
+ Gesture(GestureImplementation*);
1172
+
1173
+ /**
1174
+ * The supported types of gestures.
1175
+ * @since 1.0
1176
+ */
1177
+ enum Type {
1178
+ /**
1179
+ * An invalid type.
1180
+ * @since 1.0
1181
+ */
1182
+ TYPE_INVALID = -1,
1183
+ /**
1184
+ * A straight line movement by the hand with fingers extended.
1185
+ * @since 1.0
1186
+ */
1187
+ TYPE_SWIPE = 1,
1188
+ /**
1189
+ * A circular movement by a finger.
1190
+ * @since 1.0
1191
+ */
1192
+ TYPE_CIRCLE = 4,
1193
+ /**
1194
+ * A forward tapping movement by a finger.
1195
+ * @since 1.0
1196
+ */
1197
+ TYPE_SCREEN_TAP = 5,
1198
+ /**
1199
+ * A downward tapping movement by a finger.
1200
+ * @since 1.0
1201
+ */
1202
+ TYPE_KEY_TAP = 6
1203
+ };
1204
+
1205
+ /**
1206
+ * The possible gesture states.
1207
+ * @since 1.0
1208
+ */
1209
+ enum State {
1210
+ /**
1211
+ * An invalid state
1212
+ * @since 1.0
1213
+ */
1214
+ STATE_INVALID = -1,
1215
+ /**
1216
+ * The gesture is starting. Just enough has happened to recognize it.
1217
+ * @since 1.0
1218
+ */
1219
+ STATE_START = 1,
1220
+ /**
1221
+ * The gesture is in progress. (Note: not all gestures have updates).
1222
+ * @since 1.0
1223
+ */
1224
+ STATE_UPDATE = 2,
1225
+ /**
1226
+ * The gesture has completed or stopped.
1227
+ * @since 1.0
1228
+ */
1229
+ STATE_STOP = 3,
1230
+ };
1231
+
1232
+ /**
1233
+ * Constructs a new Gesture object.
1234
+ *
1235
+ * An uninitialized Gesture object is considered invalid. Get valid instances
1236
+ * of the Gesture class, which will be one of the Gesture subclasses, from a
1237
+ * Frame object.
1238
+ * @since 1.0
1239
+ */
1240
+ LEAP_EXPORT Gesture();
1241
+
1242
+ /**
1243
+ * Constructs a new copy of an Gesture object.
1244
+ *
1245
+ * \include Gesture_Gesture_copy.txt
1246
+ *
1247
+ * @since 1.0
1248
+ */
1249
+ LEAP_EXPORT Gesture(const Gesture& rhs);
1250
+
1251
+ /**
1252
+ * The gesture type.
1253
+ *
1254
+ * \include Gesture_type.txt
1255
+ *
1256
+ * @returns Gesture::Type A value from the Gesture::Type enumeration.
1257
+ * @since 1.0
1258
+ */
1259
+ LEAP_EXPORT Type type() const;
1260
+
1261
+ /**
1262
+ * The gesture state.
1263
+ *
1264
+ * Recognized movements occur over time and have a beginning, a middle,
1265
+ * and an end. The 'state()' attribute reports where in that sequence this
1266
+ * Gesture object falls.
1267
+ *
1268
+ * \include Gesture_state.txt
1269
+ *
1270
+ * @returns Gesture::State A value from the Gesture::State enumeration.
1271
+ * @since 1.0
1272
+ */
1273
+ LEAP_EXPORT State state() const;
1274
+
1275
+ /**
1276
+ * The gesture ID.
1277
+ *
1278
+ * All Gesture objects belonging to the same recognized movement share the
1279
+ * same ID value. Use the ID value with the Frame::gesture() method to
1280
+ * find updates related to this Gesture object in subsequent frames.
1281
+ *
1282
+ * \include Gesture_id.txt
1283
+ *
1284
+ * @returns int32_t the ID of this Gesture.
1285
+ * @since 1.0
1286
+ */
1287
+ LEAP_EXPORT int32_t id() const;
1288
+
1289
+ /**
1290
+ * The elapsed duration of the recognized movement up to the
1291
+ * frame containing this Gesture object, in microseconds.
1292
+ *
1293
+ * \include Gesture_duration.txt
1294
+ *
1295
+ * The duration reported for the first Gesture in the sequence (with the
1296
+ * STATE_START state) will typically be a small positive number since
1297
+ * the movement must progress far enough for the Leap Motion software to recognize it as
1298
+ * an intentional gesture.
1299
+ *
1300
+ * @return int64_t the elapsed duration in microseconds.
1301
+ * @since 1.0
1302
+ */
1303
+ LEAP_EXPORT int64_t duration() const;
1304
+
1305
+ /**
1306
+ * The elapsed duration in seconds.
1307
+ *
1308
+ * \include Gesture_durationSeconds.txt
1309
+ *
1310
+ * @see duration()
1311
+ * @return float the elapsed duration in seconds.
1312
+ * @since 1.0
1313
+ */
1314
+ LEAP_EXPORT float durationSeconds() const;
1315
+
1316
+ /**
1317
+ * The Frame containing this Gesture instance.
1318
+ *
1319
+ * \include Gesture_frame.txt
1320
+ _
1321
+ * @return Frame The parent Frame object.
1322
+ * @since 1.0
1323
+ */
1324
+ LEAP_EXPORT Frame frame() const;
1325
+
1326
+ /**
1327
+ * The list of hands associated with this Gesture, if any.
1328
+ *
1329
+ * \include Gesture_hands.txt
1330
+ *
1331
+ * If no hands are related to this gesture, the list is empty.
1332
+ *
1333
+ * @return HandList the list of related Hand objects.
1334
+ * @since 1.0
1335
+ */
1336
+ LEAP_EXPORT HandList hands() const;
1337
+
1338
+ /**
1339
+ * The list of fingers and tools associated with this Gesture, if any.
1340
+ *
1341
+ * If no Pointable objects are related to this gesture, the list is empty.
1342
+ *
1343
+ * \include Gesture_pointables.txt
1344
+ *
1345
+ * @return PointableList the list of related Pointable objects.
1346
+ * @since 1.0
1347
+ */
1348
+ LEAP_EXPORT PointableList pointables() const;
1349
+
1350
+ /**
1351
+ * Reports whether this Gesture instance represents a valid Gesture.
1352
+ *
1353
+ * An invalid Gesture object does not represent a snapshot of a recognized
1354
+ * movement. Invalid Gesture objects are returned when a valid object cannot
1355
+ * be provided. For example, when you get an gesture by ID
1356
+ * using Frame::gesture(), and there is no gesture with that ID in the current
1357
+ * frame, then gesture() returns an Invalid Gesture object (rather than a null
1358
+ * value). Always check object validity in situations where an gesture might be
1359
+ * invalid.
1360
+ *
1361
+ * \include Gesture_isValid.txt
1362
+ *
1363
+ * @returns bool True, if this is a valid Gesture instance; false, otherwise.
1364
+ * @since 1.0
1365
+ */
1366
+ LEAP_EXPORT bool isValid() const;
1367
+
1368
+ /**
1369
+ * Compare Gesture object equality.
1370
+ *
1371
+ * \include Gesture_operator_equals.txt
1372
+ *
1373
+ * Two Gestures are equal if they represent the same snapshot of the same
1374
+ * recognized movement.
1375
+ * @since 1.0
1376
+ */
1377
+ LEAP_EXPORT bool operator==(const Gesture& rhs) const;
1378
+
1379
+ /**
1380
+ * Compare Gesture object inequality.
1381
+ *
1382
+ * \include Gesture_operator_not_equals.txt
1383
+ *
1384
+ * Two Gestures are equal only if they represent the same snapshot of the same
1385
+ * recognized movement.
1386
+ * @since 1.0
1387
+ */
1388
+ LEAP_EXPORT bool operator!=(const Gesture& rhs) const;
1389
+
1390
+ /**
1391
+ * A string containing a brief, human-readable description of this
1392
+ * Gesture.
1393
+ *
1394
+ * \include Gesture_toString.txt
1395
+ *
1396
+ * @since 1.0
1397
+ */
1398
+ LEAP_EXPORT std::string toString() const;
1399
+
1400
+ /**
1401
+ * Returns an invalid Gesture object.
1402
+ *
1403
+ * You can use the instance returned by this function in comparisons testing
1404
+ * whether a given Gesture instance is valid or invalid. (You can also use the
1405
+ * Gesture::isValid() function.)
1406
+ *
1407
+ * \include Gesture_invalid.txt
1408
+ *
1409
+ * @returns The invalid Gesture instance.
1410
+ * @since 1.0
1411
+ */
1412
+ LEAP_EXPORT static const Gesture& invalid();
1413
+ };
1414
+
1415
+ /**
1416
+ * The SwipeGesture class represents a swiping motion of a finger or tool.
1417
+ *
1418
+ * \image html images/Leap_Gesture_Swipe.png
1419
+ *
1420
+ * **Important:** To use swipe gestures in your application, you must enable
1421
+ * recognition of the swipe gesture. You can enable recognition with:
1422
+ *
1423
+ * \include Gesture_Swipe_Enable.txt
1424
+ *
1425
+ * Swipe gestures are continuous.
1426
+ *
1427
+ * You can set the minimum length and velocity required for a movement
1428
+ * to be recognized as a swipe using the config attribute of a connected
1429
+ * Controller object. Use the following keys to configure swipe recognition:
1430
+ *
1431
+ * Key string | Value type | Default value | Units
1432
+ * -----------|------------|---------------|------
1433
+ * Gesture.Swipe.MinLength | float | 150 | mm
1434
+ * Gesture.Swipe.MinVelocity | float | 1000 | mm/s
1435
+ *
1436
+ * The following example demonstrates how to set the swipe configuration
1437
+ * parameters:
1438
+ *
1439
+ * \include Gesture_Swipe_Params.txt
1440
+ * @since 1.0
1441
+ */
1442
+ class SwipeGesture : public Gesture
1443
+ {
1444
+ public:
1445
+ /**
1446
+ * The swipe gesture type.
1447
+ *
1448
+ * \include SwipeGesture_classType.txt
1449
+ *
1450
+ * @returns Type The type value designating a swipe gesture.
1451
+ * @since 1.0
1452
+ */
1453
+ static Type classType() { return TYPE_SWIPE; }
1454
+
1455
+ LEAP_EXPORT SwipeGesture();
1456
+
1457
+ /**
1458
+ * Constructs a SwipeGesture object from an instance of the Gesture class.
1459
+ *
1460
+ * \include SwipeGesture_SwipeGesture.txt
1461
+ *
1462
+ * @param rhs The Gesture instance to specialize. This Gesture instance must
1463
+ * be a SwipeGesture object.
1464
+ * @since 1.0
1465
+ */
1466
+ LEAP_EXPORT SwipeGesture(const Gesture& rhs);
1467
+
1468
+ /**
1469
+ * The position where the swipe began.
1470
+ *
1471
+ * \include SwipeGesture_startPosition.txt
1472
+ *
1473
+ * @returns Vector The starting position within the Leap Motion frame of
1474
+ * reference, in mm.
1475
+ * @since 1.0
1476
+ */
1477
+ LEAP_EXPORT Vector startPosition() const;
1478
+
1479
+ /**
1480
+ * The current position of the swipe.
1481
+ *
1482
+ * \include SwipeGesture_position.txt
1483
+ *
1484
+ * @returns Vector The current swipe position within the Leap Motion frame of
1485
+ * reference, in mm.
1486
+ * @since 1.0
1487
+ */
1488
+ LEAP_EXPORT Vector position() const;
1489
+
1490
+ /**
1491
+ * The unit direction vector parallel to the swipe motion.
1492
+ *
1493
+ * \include SwipeGesture_direction.txt
1494
+ *
1495
+ * You can compare the components of the vector to classify the swipe as
1496
+ * appropriate for your application. For example, if you are using swipes
1497
+ * for two dimensional scrolling, you can compare the x and y values to
1498
+ * determine if the swipe is primarily horizontal or vertical.
1499
+ *
1500
+ * @returns Vector The unit direction vector representing the swipe
1501
+ * motion.
1502
+ * @since 1.0
1503
+ */
1504
+ LEAP_EXPORT Vector direction() const;
1505
+
1506
+ /**
1507
+ * The swipe speed in mm/second.
1508
+ *
1509
+ * \include SwipeGesture_speed.txt
1510
+ *
1511
+ * @returns float The speed of the finger performing the swipe gesture in
1512
+ * millimeters per second.
1513
+ * @since 1.0
1514
+ */
1515
+ LEAP_EXPORT float speed() const;
1516
+
1517
+ /**
1518
+ * The finger performing the swipe gesture.
1519
+ *
1520
+ * \include SwipeGesture_pointable.txt
1521
+ *
1522
+ * @returns Pointable A Pointable object representing the swiping finger.
1523
+ * @since 1.0
1524
+ */
1525
+ LEAP_EXPORT Pointable pointable() const;
1526
+ };
1527
+
1528
+ /**
1529
+ * The CircleGesture classes represents a circular finger movement.
1530
+ *
1531
+ * A circle movement is recognized when the tip of a finger draws a circle
1532
+ * within the Leap Motion Controller field of view.
1533
+ *
1534
+ * \image html images/Leap_Gesture_Circle.png
1535
+ *
1536
+ * **Important:** To use circle gestures in your application, you must enable
1537
+ * recognition of the circle gesture. You can enable recognition with:
1538
+ *
1539
+ * \include Gesture_Circle_Enable.txt
1540
+ *
1541
+ * Circle gestures are continuous. The CircleGesture objects for the gesture have
1542
+ * three possible states:
1543
+ *
1544
+ * * State::STATE_START -- The circle gesture has just started. The movement has
1545
+ * progressed far enough for the recognizer to classify it as a circle.
1546
+ * * State::STATE_UPDATE -- The circle gesture is continuing.
1547
+ * * State::STATE_STOP -- The circle gesture is finished.
1548
+ *
1549
+ * You can set the minimum radius and minimum arc length required for a movement
1550
+ * to be recognized as a circle using the config attribute of a connected
1551
+ * Controller object. Use the following keys to configure circle recognition:
1552
+ *
1553
+ * Key string | Value type | Default value | Units
1554
+ * -----------|------------|---------------|------
1555
+ * Gesture.Circle.MinRadius | float | 5.0 | mm
1556
+ * Gesture.Circle.MinArc | float | 1.5*pi | radians
1557
+ *
1558
+ * The following example demonstrates how to set the circle configuration
1559
+ * parameters:
1560
+ *
1561
+ * \include Gesture_Circle_Params.txt
1562
+ *
1563
+ * @since 1.0
1564
+ */
1565
+ class CircleGesture : public Gesture
1566
+ {
1567
+ public:
1568
+ /**
1569
+ * The circle gesture type.
1570
+ *
1571
+ * \include CircleGesture_classType.txt
1572
+ *
1573
+ * @returns Type The type value designating a circle gesture.
1574
+ * @since 1.0
1575
+ */
1576
+ static Type classType() { return TYPE_CIRCLE; }
1577
+
1578
+ /**
1579
+ * Constructs a new CircleGesture object.
1580
+ *
1581
+ * An uninitialized CircleGesture object is considered invalid. Get valid instances
1582
+ * of the CircleGesture class from a Frame object.
1583
+ * @since 1.0
1584
+ */
1585
+ LEAP_EXPORT CircleGesture();
1586
+
1587
+ /**
1588
+ * Constructs a CircleGesture object from an instance of the Gesture class.
1589
+ *
1590
+ * \include CircleGesture_CircleGesture.txt
1591
+ *
1592
+ * @param rhs The Gesture instance to specialize. This Gesture instance must
1593
+ * be a CircleGesture object.
1594
+ * @since 1.0
1595
+ */
1596
+ LEAP_EXPORT CircleGesture(const Gesture& rhs);
1597
+
1598
+ /**
1599
+ * The center point of the circle within the Leap Motion frame of reference.
1600
+ *
1601
+ * \include CircleGesture_center.txt
1602
+ * @returns Vector The center of the circle in mm from the Leap Motion origin.
1603
+ * @since 1.0
1604
+ */
1605
+ LEAP_EXPORT Vector center() const;
1606
+
1607
+ /**
1608
+ * Returns the normal vector for the circle being traced.
1609
+ *
1610
+ * If you draw the circle clockwise, the normal vector points in the same
1611
+ * general direction as the pointable object drawing the circle. If you draw
1612
+ * the circle counterclockwise, the normal points back toward the
1613
+ * pointable. If the angle between the normal and the pointable object
1614
+ * drawing the circle is less than 90 degrees, then the circle is clockwise.
1615
+ *
1616
+ * \include Gesture_Circle_Direction.txt
1617
+ *
1618
+ * @return Vector the normal vector for the circle being traced
1619
+ * @since 1.0
1620
+ */
1621
+ LEAP_EXPORT Vector normal() const;
1622
+
1623
+ /**
1624
+ * The number of times the finger tip has traversed the circle.
1625
+ *
1626
+ * Progress is reported as a positive number of the number. For example,
1627
+ * a progress value of .5 indicates that the finger has gone halfway
1628
+ * around, while a value of 3 indicates that the finger has gone around
1629
+ * the the circle three times.
1630
+ *
1631
+ * \include CircleGesture_progress.txt
1632
+ *
1633
+ * Progress starts where the circle gesture began. Since the circle
1634
+ * must be partially formed before the Leap Motion software can recognize it, progress
1635
+ * will be greater than zero when a circle gesture first appears in the
1636
+ * frame.
1637
+ *
1638
+ * @returns float A positive number indicating the gesture progress.
1639
+ * @since 1.0
1640
+ */
1641
+ LEAP_EXPORT float progress() const;
1642
+
1643
+ /**
1644
+ * The radius of the circle.
1645
+ *
1646
+ * \include CircleGesture_radius.txt
1647
+ *
1648
+ * @returns The circle radius in mm.
1649
+ * @since 1.0
1650
+ */
1651
+ LEAP_EXPORT float radius() const;
1652
+
1653
+ /**
1654
+ * The finger performing the circle gesture.
1655
+ *
1656
+ * \include CircleGesture_pointable.txt
1657
+ *
1658
+ * @returns Pointable A Pointable object representing the circling finger.
1659
+ * @since 1.0
1660
+ */
1661
+ LEAP_EXPORT Pointable pointable() const;
1662
+ };
1663
+
1664
+ /**
1665
+ * The ScreenTapGesture class represents a tapping gesture by a finger or tool.
1666
+ *
1667
+ * A screen tap gesture is recognized when the tip of a finger pokes forward
1668
+ * and then springs back to approximately the original postion, as if
1669
+ * tapping a vertical screen. The tapping finger must pause briefly before beginning the tap.
1670
+ *
1671
+ * \image html images/Leap_Gesture_Tap2.png
1672
+ *
1673
+ * **Important:** To use screen tap gestures in your application, you must enable
1674
+ * recognition of the screen tap gesture. You can enable recognition with:
1675
+ *
1676
+ * \include Gesture_ScreenTap_Enable.txt
1677
+ *
1678
+ * ScreenTap gestures are discrete. The ScreenTapGesture object representing a tap always
1679
+ * has the state, STATE_STOP. Only one ScreenTapGesture object is created for each
1680
+ * screen tap gesture recognized.
1681
+ *
1682
+ * You can set the minimum finger movement and velocity required for a movement
1683
+ * to be recognized as a screen tap as well as adjust the detection window for
1684
+ * evaluating the movement using the config attribute of a connected
1685
+ * Controller object. Use the following keys to configure screen tap recognition:
1686
+ *
1687
+ * Key string | Value type | Default value | Units
1688
+ * -----------|------------|---------------|------
1689
+ * Gesture.ScreenTap.MinForwardVelocity | float | 50 | mm/s
1690
+ * Gesture.ScreenTap.HistorySeconds | float | 0.1 | s
1691
+ * Gesture.ScreenTap.MinDistance | float | 3.0 | mm
1692
+ *
1693
+ * The following example demonstrates how to set the screen tap configuration
1694
+ * parameters:
1695
+ *
1696
+ * \include Gesture_ScreenTap_Params.txt
1697
+ * @since 1.0
1698
+ */
1699
+ class ScreenTapGesture : public Gesture
1700
+ {
1701
+ public:
1702
+ /**
1703
+ * The screen tap gesture type.
1704
+ *
1705
+ * \include ScreenTapGesture_classType.txt
1706
+ *
1707
+ * @returns Type The type value designating a screen tap gesture.
1708
+ * @since 1.0
1709
+ */
1710
+ static Type classType() { return TYPE_SCREEN_TAP; }
1711
+
1712
+ /**
1713
+ * Constructs a new ScreenTapGesture object.
1714
+ *
1715
+ * An uninitialized ScreenTapGesture object is considered invalid. Get valid instances
1716
+ * of the ScreenTapGesture class from a Frame object.
1717
+ * @since 1.0
1718
+ */
1719
+ LEAP_EXPORT ScreenTapGesture();
1720
+
1721
+ /**
1722
+ * Constructs a ScreenTapGesture object from an instance of the Gesture class.
1723
+ *
1724
+ * \include ScreenTapGesture_ScreenTapGesture.txt
1725
+ *
1726
+ * @param rhs The Gesture instance to specialize. This Gesture instance must
1727
+ * be a ScreenTapGesture object.
1728
+ * @since 1.0
1729
+ */
1730
+ LEAP_EXPORT ScreenTapGesture(const Gesture& rhs);
1731
+
1732
+ /**
1733
+ * The position where the screen tap is registered.
1734
+ *
1735
+ * \include ScreenTapGesture_position.txt
1736
+ *
1737
+ * @return Vector A Vector containing the coordinates of screen tap location.
1738
+ * @since 1.0
1739
+ */
1740
+ LEAP_EXPORT Vector position() const;
1741
+
1742
+ /**
1743
+ * The direction of finger tip motion.
1744
+ *
1745
+ * \include ScreenTapGesture_direction.txt
1746
+ *
1747
+ * @returns Vector A unit direction vector.
1748
+ * @since 1.0
1749
+ */
1750
+ LEAP_EXPORT Vector direction() const;
1751
+
1752
+ /**
1753
+ * The progess value is always 1.0 for a screen tap gesture.
1754
+ *
1755
+ * @returns float The value 1.0.
1756
+ * @since 1.0
1757
+ */
1758
+ LEAP_EXPORT float progress() const;
1759
+
1760
+ /**
1761
+ * The finger performing the screen tap gesture.
1762
+ *
1763
+ * \include ScreenTapGesture_pointable.txt
1764
+ *
1765
+ * @returns Pointable A Pointable object representing the tapping finger.
1766
+ * @since 1.0
1767
+ */
1768
+ LEAP_EXPORT Pointable pointable() const;
1769
+ };
1770
+
1771
+ /**
1772
+ * The KeyTapGesture class represents a tapping gesture by a finger or tool.
1773
+ *
1774
+ * A key tap gesture is recognized when the tip of a finger rotates down toward the
1775
+ * palm and then springs back to approximately the original postion, as if
1776
+ * tapping. The tapping finger must pause briefly before beginning the tap.
1777
+ *
1778
+ * \image html images/Leap_Gesture_Tap.png
1779
+ *
1780
+ * **Important:** To use key tap gestures in your application, you must enable
1781
+ * recognition of the key tap gesture. You can enable recognition with:
1782
+ *
1783
+ * \include Gesture_KeyTap_Enable.txt
1784
+ *
1785
+ * Key tap gestures are discrete. The KeyTapGesture object representing a tap always
1786
+ * has the state, STATE_STOP. Only one KeyTapGesture object is created for each
1787
+ * key tap gesture recognized.
1788
+ *
1789
+ * You can set the minimum finger movement and velocity required for a movement
1790
+ * to be recognized as a key tap as well as adjust the detection window for
1791
+ * evaluating the movement using the config attribute of a connected
1792
+ * Controller object. Use the following configuration keys to configure key tap
1793
+ * recognition:
1794
+ *
1795
+ * Key string | Value type | Default value | Units
1796
+ * -----------|------------|---------------|------
1797
+ * Gesture.KeyTap.MinDownVelocity | float | 50 | mm/s
1798
+ * Gesture.KeyTap.HistorySeconds | float | 0.1 | s
1799
+ * Gesture.KeyTap.MinDistance | float | 5.0 | mm
1800
+ *
1801
+ * The following example demonstrates how to set the key tap configuration
1802
+ * parameters:
1803
+ *
1804
+ * \include Gesture_KeyTap_Params.txt
1805
+ *
1806
+ * @since 1.0
1807
+ */
1808
+ class KeyTapGesture : public Gesture
1809
+ {
1810
+ public:
1811
+ /**
1812
+ * The key tap gesture type.
1813
+ *
1814
+ * \include KeyTapGesture_classType.txt
1815
+ *
1816
+ * @returns Type The type value designating a key tap gesture.
1817
+ * @since 1.0
1818
+ */
1819
+ static Type classType() { return TYPE_KEY_TAP; }
1820
+
1821
+ /**
1822
+ * Constructs a new KeyTapGesture object.
1823
+ *
1824
+ * An uninitialized KeyTapGesture object is considered invalid. Get valid instances
1825
+ * of the KeyTapGesture class from a Frame object.
1826
+ * @since 1.0
1827
+ */
1828
+ LEAP_EXPORT KeyTapGesture();
1829
+
1830
+ /**
1831
+ * Constructs a KeyTapGesture object from an instance of the Gesture class.
1832
+ *
1833
+ * \include KeyTapGesture_KeyTapGesture.txt
1834
+ *
1835
+ * @param rhs The Gesture instance to specialize. This Gesture instance must
1836
+ * be a KeyTapGesture object.
1837
+ * @since 1.0
1838
+ */
1839
+ LEAP_EXPORT KeyTapGesture(const Gesture& rhs);
1840
+
1841
+ /**
1842
+ * The position where the key tap is registered.
1843
+ *
1844
+ * \include KeyTapGesture_position.txt
1845
+ *
1846
+ * @return Vector A Vector containing the coordinates of tap location.
1847
+ * @since 1.0
1848
+ */
1849
+ LEAP_EXPORT Vector position() const;
1850
+
1851
+ /**
1852
+ * The direction of finger tip motion.
1853
+ *
1854
+ * \include KeyTapGesture_direction.txt
1855
+ *
1856
+ * @returns Vector A unit direction vector if the finger tip is moving;
1857
+ * otherwise, a zero-vector.
1858
+ * @since 1.0
1859
+ */
1860
+ LEAP_EXPORT Vector direction() const;
1861
+
1862
+ /**
1863
+ * The progess value is always 1.0 for a key tap gesture.
1864
+ *
1865
+ * @returns float The value 1.0.
1866
+ * @since 1.0
1867
+ */
1868
+ LEAP_EXPORT float progress() const;
1869
+
1870
+ /**
1871
+ * The finger performing the key tap gesture.
1872
+ *
1873
+ * \include KeyTapGesture_pointable.txt
1874
+ *
1875
+ * @returns Pointable A Pointable object representing the tapping finger.
1876
+ * @since 1.0
1877
+ */
1878
+ LEAP_EXPORT Pointable pointable() const;
1879
+ };
1880
+
1881
+ /*
1882
+ * The Screen class is currently unsupported.
1883
+ *
1884
+ * We are re-evaluating this feature due to the cumbersome location process
1885
+ * required to use it and the amount of confusion about the feature's purpose.
1886
+ *
1887
+ * The Screen class represents a computer monitor screen.
1888
+ *
1889
+ * The Screen class reports characteristics describing the position and
1890
+ * orientation of the monitor screen within the Leap Motion coordinate system. These
1891
+ * characteristics include the bottom-left corner position of the screen,
1892
+ * direction vectors for the horizontal and vertical axes of the screen, and
1893
+ * the screen's normal vector. The screen must be properly registered with the
1894
+ * Screen Locator for the Leap Motion software to report these characteristics accurately.
1895
+ * The Screen class also reports the size of the screen in pixels, using
1896
+ * information obtained from the operating system. (Run the Screen Locator
1897
+ * from the Leap Motion Settings dialog, on the Screen page.)
1898
+ *
1899
+ * You can get the point of intersection between the screen and a ray
1900
+ * projected from a Pointable object using the Screen::intersect() function.
1901
+ * Likewise, you can get the closest point on the screen to a point in space
1902
+ * using the Screen::project() function. Again, the screen location
1903
+ * must be registered with the Screen Locator for these functions to
1904
+ * return accurate values.
1905
+ *
1906
+ * Note that Screen objects can be invalid, which means that they do not contain
1907
+ * valid screen coordinate data and do not correspond to a physical entity.
1908
+ * Test for validity with the Screen::isValid() function.
1909
+ * @since 1.0
1910
+ */
1911
+ class Screen : public Interface {
1912
+ public:
1913
+ // For internal use only.
1914
+ Screen(ScreenImplementation*);
1915
+
1916
+ /**
1917
+ * Constructs a Screen object.
1918
+ *
1919
+ * An uninitialized screen is considered invalid.
1920
+ * Get valid Screen objects from a ScreenList object obtained using the
1921
+ * Controller::locatedScreens() method.
1922
+ * @since 1.0
1923
+ */
1924
+ LEAP_EXPORT Screen();
1925
+
1926
+ /**
1927
+ * A unique identifier for this screen based on the screen
1928
+ * information in the configuration. A default screen with ID, *0*,
1929
+ * always exists and contains default characteristics, even if no screens
1930
+ * have been located.
1931
+ * @since 1.0
1932
+ */
1933
+ LEAP_EXPORT int32_t id() const;
1934
+
1935
+ /**
1936
+ * Returns the intersection between this screen and a ray projecting from a
1937
+ * Pointable object.
1938
+ *
1939
+ * The projected ray emanates from the Pointable tipPosition along the
1940
+ * Pointable's direction vector.
1941
+ *
1942
+ * Set the normalize parameter to true to request the intersection point in
1943
+ * normalized screen coordinates. Normalized screen coordinates are usually
1944
+ * values between 0 and 1, where 0 represents the screen's origin at the
1945
+ * bottom-left corner and 1 represents the opposite edge (either top or
1946
+ * right). When you request normalized coordinates, the z-component of the
1947
+ * returned vector is zero. Multiply a normalized coordinate by the values
1948
+ * returned by Screen::widthPixels() or Screen::heightPixels() to calculate
1949
+ * the screen position in pixels (remembering that many other computer
1950
+ * graphics coordinate systems place the origin in the top-left corner).
1951
+ *
1952
+ * Set the normalize parameter to false to request the intersection point
1953
+ * in Leap Motion coordinates (millimeters from the Leap Motion origin).
1954
+ *
1955
+ * If the Pointable object points outside the screen's border (but still
1956
+ * intersects the plane in which the screen lies), the returned intersection
1957
+ * point is clamped to the nearest point on the edge of the screen.
1958
+ *
1959
+ * You can use the clampRatio parameter to contract or expand the area in
1960
+ * which you can point. For example, if you set the clampRatio parameter to
1961
+ * 0.5, then the positions reported for intersection points outside the
1962
+ * central 50% of the screen are moved to the border of this smaller area.
1963
+ * If, on the other hand, you expanded the area by setting clampRatio to
1964
+ * a value such as 3.0, then you could point well outside screen's physical
1965
+ * boundary before the intersection points would be clamped. The positions
1966
+ * for any points clamped would also be placed on this larger outer border.
1967
+ * The positions reported for any intersection points inside the clamping
1968
+ * border are unaffected by clamping.
1969
+ *
1970
+ * \include Screen_Normalized_2.txt
1971
+ *
1972
+ * If the Pointable object does not point toward the plane of the screen
1973
+ * (i.e. it is pointing parallel to or away from the screen), then the
1974
+ * components of the returned vector are all set to NaN (not-a-number).
1975
+ *
1976
+ * @param pointable The Pointable object to check for screen intersection.
1977
+ *
1978
+ * @param normalize If true, return normalized coordinates representing
1979
+ * the intersection point as a percentage of the screen's width and height.
1980
+ * If false, return Leap Motion coordinates (millimeters from the Leap Motion origin,
1981
+ * which is located at the center of the top surface of the Leap Motion Controller).
1982
+ * If true and the clampRatio parameter is set to 1.0, coordinates will be
1983
+ * of the form (0..1, 0..1, 0). Setting the clampRatio to a different value
1984
+ * changes the range for normalized coordinates. For example, a clampRatio
1985
+ * of 5.0 changes the range of values to be of the form (-2..3, -2..3, 0).
1986
+ *
1987
+ * @param clampRatio Adjusts the clamping border around this screen.
1988
+ * By default this ratio is 1.0, and the border corresponds to the actual
1989
+ * boundaries of the screen. Setting clampRatio to 0.5 would reduce the
1990
+ * interaction area. Likewise, setting the ratio to 2.0 would increase the
1991
+ * interaction area, adding 50% around each edge of the physical monitor.
1992
+ * Intersection points outside the interaction area are repositioned to
1993
+ * the closest point on the clamping border before the vector is returned.
1994
+ *
1995
+ * @returns A Vector containing the coordinates of the intersection between
1996
+ * this screen and a ray projecting from the specified Pointable object.
1997
+ * @since 1.0
1998
+ */
1999
+ LEAP_EXPORT Vector intersect(const Pointable& pointable, bool normalize, float clampRatio = 1.0f) const;
2000
+
2001
+ /**
2002
+ * Returns the intersection between this screen and a ray projecting from
2003
+ * the specified position along the specified direction.
2004
+ *
2005
+ * Set the normalize parameter to true to request the intersection point in
2006
+ * normalized screen coordinates. Normalized screen coordinates are usually
2007
+ * values between 0 and 1, where 0 represents the screen's origin at the
2008
+ * bottom-left corner and 1 represents the opposite edge (either top or
2009
+ * right). When you request normalized coordinates, the z-component of the
2010
+ * returned vector is zero. Multiply a normalized coordinate by the values
2011
+ * returned by Screen::widthPixels() or Screen::heightPixels() to calculate
2012
+ * the screen position in pixels (remembering that many other computer
2013
+ * graphics coordinate systems place the origin in the top-left corner).
2014
+ *
2015
+ * Set the normalize parameter to false to request the intersection point
2016
+ * in Leap Motion coordinates (millimeters from the Leap Motion origin).
2017
+ *
2018
+ * If the specified ray points outside the screen's border (but still
2019
+ * intersects the plane in which the screen lies), the returned intersection
2020
+ * point is clamped to the nearest point on the edge of the screen.
2021
+ *
2022
+ * You can use the clampRatio parameter to contract or expand the area in
2023
+ * which you can point. For example, if you set the clampRatio parameter to
2024
+ * 0.5, then the positions reported for intersection points outside the
2025
+ * central 50% of the screen are moved to the border of this smaller area.
2026
+ * If, on the other hand, you expanded the area by setting clampRatio to
2027
+ * a value such as 3.0, then you could point well outside screen's physical
2028
+ * boundary before the intersection points would be clamped. The positions
2029
+ * for any points clamped would also be placed on this larger outer border.
2030
+ * The positions reported for any intersection points inside the clamping
2031
+ * border are unaffected by clamping.
2032
+ *
2033
+ * If the specified ray does not point toward the plane of the screen
2034
+ * (i.e. it is pointing parallel to or away from the screen), then the
2035
+ * components of the returned vector are all set to NaN (not-a-number).
2036
+ *
2037
+ * @param position The position from which to check for screen intersection.
2038
+ * @param direction The direction in which to check for screen intersection.
2039
+ *
2040
+ * @param normalize If true, return normalized coordinates representing
2041
+ * the intersection point as a percentage of the screen's width and height.
2042
+ * If false, return Leap Motion coordinates (millimeters from the Leap Motion origin,
2043
+ * which is located at the center of the top surface of the Leap Motion Controller).
2044
+ * If true and the clampRatio parameter is set to 1.0, coordinates will be
2045
+ * of the form (0..1, 0..1, 0). Setting the clampRatio to a different value
2046
+ * changes the range for normalized coordinates. For example, a clampRatio
2047
+ * of 5.0 changes the range of values to be of the form (-2..3, -2..3, 0).
2048
+ *
2049
+ * @param clampRatio Adjusts the clamping border around this screen.
2050
+ * By default this ratio is 1.0, and the border corresponds to the actual
2051
+ * boundaries of the screen. Setting clampRatio to 0.5 would reduce the
2052
+ * interaction area. Likewise, setting the ratio to 2.0 would increase the
2053
+ * interaction area, adding 50% around each edge of the physical monitor.
2054
+ * Intersection points outside the interaction area are repositioned to
2055
+ * the closest point on the clamping border before the vector is returned.
2056
+ *
2057
+ * @returns A Vector containing the coordinates of the intersection between
2058
+ * this screen and a ray projecting from the specified position in the
2059
+ * specified direction.
2060
+ * @since 1.0
2061
+ */
2062
+ LEAP_EXPORT Vector intersect(const Vector& position, const Vector& direction, bool normalize, float clampRatio = 1.0f) const;
2063
+
2064
+ /**
2065
+ * Returns the projection from the specified position onto this screen.
2066
+ *
2067
+ * Set the normalize parameter to true to request the projection point in
2068
+ * normalized screen coordinates. Normalized screen coordinates are usually
2069
+ * values between 0 and 1, where 0 represents the screen's origin at the
2070
+ * bottom-left corner and 1 represents the opposite edge (either top or
2071
+ * right). When you request normalized coordinates, the z-component of the
2072
+ * returned vector is zero. Multiply a normalized coordinate by the values
2073
+ * returned by Screen::widthPixels() or Screen::heightPixels() to calculate
2074
+ * the screen position in pixels (remembering that many other computer
2075
+ * graphics coordinate systems place the origin in the top-left corner).
2076
+ *
2077
+ * Set the normalize parameter to false to request the projection point
2078
+ * in Leap Motion coordinates (millimeters from the Leap Motion origin).
2079
+ *
2080
+ * If the specified point projects outside the screen's border, the returned
2081
+ * projection point is clamped to the nearest point on the edge of the screen.
2082
+ *
2083
+ * You can use the clampRatio parameter to contract or expand the area in
2084
+ * which you can point. For example, if you set the clampRatio parameter to
2085
+ * 0.5, then the positions reported for projection points outside the
2086
+ * central 50% of the screen are moved to the border of this smaller area.
2087
+ * If, on the other hand, you expanded the area by setting clampRatio to
2088
+ * a value such as 3.0, then you could point well outside screen's physical
2089
+ * boundary before the projection points would be clamped. The positions
2090
+ * for any points clamped would also be placed on this larger outer border.
2091
+ * The positions reported for any projection points inside the clamping
2092
+ * border are unaffected by clamping.
2093
+ *
2094
+ * @param position The position from which to project onto this screen.
2095
+ *
2096
+ * @param normalize If true, return normalized coordinates representing
2097
+ * the projection point as a percentage of the screen's width and height.
2098
+ * If false, return Leap Motion coordinates (millimeters from the Leap Motion origin,
2099
+ * which is located at the center of the top surface of the Leap Motion Controller).
2100
+ * If true and the clampRatio parameter is set to 1.0, coordinates will be
2101
+ * of the form (0..1, 0..1, 0). Setting the clampRatio to a different value
2102
+ * changes the range for normalized coordinates. For example, a clampRatio
2103
+ * of 5.0 changes the range of values to be of the form (-2..3, -2..3, 0).
2104
+ *
2105
+ * @param clampRatio Adjusts the clamping border around this screen.
2106
+ * By default this ratio is 1.0, and the border corresponds to the actual
2107
+ * boundaries of the screen. Setting clampRatio to 0.5 would reduce the
2108
+ * interaction area. Likewise, setting the ratio to 2.0 would increase the
2109
+ * interaction area, adding 50% around each edge of the physical monitor.
2110
+ * Projection points outside the interaction area are repositioned to
2111
+ * the closest point on the clamping border before the vector is returned.
2112
+ *
2113
+ * @returns A Vector containing the coordinates of the projection between
2114
+ * this screen and a ray projecting from the specified position onto the
2115
+ * screen along its normal vector.
2116
+ * @since 1.0
2117
+ */
2118
+ LEAP_EXPORT Vector project(const Vector& position, bool normalize, float clampRatio = 1.0f) const;
2119
+
2120
+ /**
2121
+ * A Vector representing the horizontal axis of this Screen within the
2122
+ * Leap Motion coordinate system.
2123
+ *
2124
+ * The magnitude of this vector estimates the physical width of this Screen
2125
+ * in millimeters. The direction of this vector is parallel to the bottom
2126
+ * edge of the screen and points toward the right edge of the screen.
2127
+ *
2128
+ * Together, horizontalAxis(), verticalAxis(), and bottomLeftCorner()
2129
+ * describe the physical position, size and orientation of this Screen.
2130
+ *
2131
+ * @returns A Vector representing the bottom, horizontal edge of this Screen.
2132
+ * @since 1.0
2133
+ */
2134
+ LEAP_EXPORT Vector horizontalAxis() const;
2135
+
2136
+ /**
2137
+ * A Vector representing the vertical axis of this Screen within the
2138
+ * Leap Motion coordinate system.
2139
+ *
2140
+ * The magnitude of this vector estimates the physical height of this Screen
2141
+ * in millimeters. The direction of this vector is parallel to the left
2142
+ * edge of the screen and points toward the top edge of the screen.
2143
+ *
2144
+ * Together, horizontalAxis(), verticalAxis(), and bottomLeftCorner()
2145
+ * describe the physical position, size and orientation of this screen.
2146
+ *
2147
+ * @returns A Vector representing the left, vertical edge of this Screen.
2148
+ * @since 1.0
2149
+ */
2150
+ LEAP_EXPORT Vector verticalAxis() const;
2151
+
2152
+ /**
2153
+ * A Vector representing the bottom left corner of this Screen within the
2154
+ * Leap Motion coordinate system.
2155
+ *
2156
+ * The point represented by this vector defines the origin of the screen
2157
+ * in the Leap Motion coordinate system.
2158
+ *
2159
+ * Together, horizontalAxis(), verticalAxis(), and bottomLeftCorner()
2160
+ * describe the physical position, size and orientation of this Screen.
2161
+ *
2162
+ * @returns A Vector containing the coordinates of the bottom-left corner
2163
+ * of this Screen.
2164
+ * @since 1.0
2165
+ */
2166
+ LEAP_EXPORT Vector bottomLeftCorner() const;
2167
+
2168
+ /**
2169
+ * A Vector normal to the plane in which this Screen lies.
2170
+ *
2171
+ * The normal vector is a unit direction vector orthogonal to the screen's
2172
+ * surface plane. It points toward a viewer positioned for typical use of
2173
+ * the monitor.
2174
+ *
2175
+ * @returns A Vector representing this Screen's normal vector.
2176
+ * @since 1.0
2177
+ */
2178
+ LEAP_EXPORT Vector normal() const;
2179
+
2180
+ /**
2181
+ * The horizontal resolution of this screen, in pixels.
2182
+ *
2183
+ * @returns The width of this Screen in pixels.
2184
+ * @since 1.0
2185
+ */
2186
+ LEAP_EXPORT int widthPixels() const;
2187
+
2188
+ /**
2189
+ * The vertical resolution of this screen, in pixels.
2190
+ *
2191
+ * @returns The height of this Screen in pixels.
2192
+ * @since 1.0
2193
+ */
2194
+ LEAP_EXPORT int heightPixels() const;
2195
+
2196
+ /**
2197
+ * The shortest distance from the specified point to the plane in which this
2198
+ * Screen lies.
2199
+ *
2200
+ * @returns The length of the perpendicular line segment extending from
2201
+ * the plane this Screen lies in to the specified point.
2202
+ * @since 1.0
2203
+ */
2204
+ LEAP_EXPORT float distanceToPoint(const Vector& point) const;
2205
+
2206
+ /**
2207
+ * Reports whether this is a valid Screen object.
2208
+ *
2209
+ * **Important:** A valid Screen object does not necessarily contain
2210
+ * up-to-date screen location information. Location information is only
2211
+ * accurate until the Leap Motion Controller or the monitor are moved. In addition, the
2212
+ * primary screen always contains default location information even if the
2213
+ * user has never run the screen location utility. This default location
2214
+ * information will not return accurate results.
2215
+ *
2216
+ * @returns True, if this Screen object contains valid data.
2217
+ * @since 1.0
2218
+ */
2219
+ LEAP_EXPORT bool isValid() const;
2220
+
2221
+ /**
2222
+ * Returns an invalid Screen object.
2223
+ *
2224
+ * You can use the instance returned by this function in comparisons testing
2225
+ * whether a given Screen instance is valid or invalid. (You can also use the
2226
+ * Screen::isValid() function.)
2227
+ *
2228
+ * @returns The invalid Screen instance.
2229
+ * @since 1.0
2230
+ */
2231
+ LEAP_EXPORT static const Screen& invalid();
2232
+
2233
+ /**
2234
+ * Compare Screen object equality.
2235
+ * Two Screen objects are equal if and only if both Screen objects represent the
2236
+ * exact same Screens and both Screens are valid.
2237
+ * @since 1.0
2238
+ */
2239
+ LEAP_EXPORT bool operator==(const Screen&) const;
2240
+
2241
+ /**
2242
+ * Compare Screen object inequality.
2243
+ * Two Screen objects are equal if and only if both Screen objects represent the
2244
+ * exact same Screens and both Screens are valid.
2245
+ * @since 1.0
2246
+ */
2247
+ LEAP_EXPORT bool operator!=(const Screen&) const;
2248
+
2249
+ /**
2250
+ * Writes a brief, human readable description of the Screen object.
2251
+ * @since 1.0
2252
+ */
2253
+ LEAP_EXPORT friend std::ostream& operator<<(std::ostream&, const Screen&);
2254
+
2255
+ /**
2256
+ * A string containing a brief, human readable description of the Screen object.
2257
+ *
2258
+ * @returns A description of the Screen as a string.
2259
+ * @since 1.0
2260
+ */
2261
+ LEAP_EXPORT std::string toString() const;
2262
+ };
2263
+
2264
+ /**
2265
+ * The Device class represents a physically connected device.
2266
+ *
2267
+ * The Device class contains information related to a particular connected
2268
+ * device such as field of view, device id, and calibrated positions.
2269
+ *
2270
+ * Note that Device objects can be invalid, which means that they do not contain
2271
+ * valid device information and do not correspond to a physical device.
2272
+ * Test for validity with the Device::isValid() function.
2273
+ * @since 1.0
2274
+ */
2275
+ class Device : public Interface {
2276
+ public:
2277
+ // For internal use only.
2278
+ Device(DeviceImplementation*);
2279
+
2280
+ /**
2281
+ * Constructs a Device object.
2282
+ *
2283
+ * An uninitialized device is considered invalid.
2284
+ * Get valid Device objects from a DeviceList object obtained using the
2285
+ * Controller::devices() method.
2286
+ *
2287
+ * \include Device_Device.txt
2288
+ *
2289
+ * @since 1.0
2290
+ */
2291
+ LEAP_EXPORT Device();
2292
+
2293
+ /**
2294
+ * The angle of view along the x axis of this device.
2295
+ *
2296
+ * \image html images/Leap_horizontalViewAngle.png
2297
+ *
2298
+ * The Leap Motion controller scans a region in the shape of an inverted pyramid
2299
+ * centered at the device's center and extending upwards. The horizontalViewAngle
2300
+ * reports the view angle along the long dimension of the device.
2301
+ *
2302
+ * \include Device_horizontalViewAngle.txt
2303
+ *
2304
+ * @returns The horizontal angle of view in radians.
2305
+ * @since 1.0
2306
+ */
2307
+ LEAP_EXPORT float horizontalViewAngle() const;
2308
+
2309
+ /**
2310
+ * The angle of view along the z axis of this device.
2311
+ *
2312
+ * \image html images/Leap_verticalViewAngle.png
2313
+ *
2314
+ * The Leap Motion controller scans a region in the shape of an inverted pyramid
2315
+ * centered at the device's center and extending upwards. The verticalViewAngle
2316
+ * reports the view angle along the short dimension of the device.
2317
+ *
2318
+ * \include Device_verticalViewAngle.txt
2319
+ *
2320
+ * @returns The vertical angle of view in radians.
2321
+ * @since 1.0
2322
+ */
2323
+ LEAP_EXPORT float verticalViewAngle() const;
2324
+
2325
+ /**
2326
+ * The maximum reliable tracking range.
2327
+ *
2328
+ * The range reports the maximum recommended distance from the device center
2329
+ * for which tracking is expected to be reliable. This distance is not a hard limit.
2330
+ * Tracking may be still be functional above this distance or begin to degrade slightly
2331
+ * before this distance depending on calibration and extreme environmental conditions.
2332
+ *
2333
+ * \include Device_range.txt
2334
+ *
2335
+ * @returns The recommended maximum range of the device in mm.
2336
+ * @since 1.0
2337
+ */
2338
+ LEAP_EXPORT float range() const;
2339
+
2340
+ /**
2341
+ * The distance to the nearest edge of the Leap Motion controller's view volume.
2342
+ *
2343
+ * The view volume is an axis-aligned, inverted pyramid centered on the device origin
2344
+ * and extending upward to the range limit. The walls of the pyramid are described
2345
+ * by the horizontalViewAngle and verticalViewAngle and the roof by the range.
2346
+ * This function estimates the distance between the specified input position and the
2347
+ * nearest wall or roof of the view volume.
2348
+ *
2349
+ * \include Device_distanceToBoundary.txt
2350
+ *
2351
+ * @param position The point to use for the distance calculation.
2352
+ * @returns The distance in millimeters from the input position to the nearest boundary.
2353
+ * @since 1.0
2354
+ */
2355
+ LEAP_EXPORT float distanceToBoundary(const Vector& position) const;
2356
+
2357
+ /**
2358
+ * Reports whether this is a valid Device object.
2359
+ *
2360
+ * \include Device_isValid.txt
2361
+ *
2362
+ * @returns True, if this Device object contains valid data.
2363
+ * @since 1.0
2364
+ */
2365
+ LEAP_EXPORT bool isValid() const;
2366
+
2367
+ /**
2368
+ * Returns an invalid Device object.
2369
+ *
2370
+ * You can use the instance returned by this function in comparisons testing
2371
+ * whether a given Device instance is valid or invalid. (You can also use the
2372
+ * Device::isValid() function.)
2373
+ *
2374
+ * \include Device_invalid.txt
2375
+ *
2376
+ * @returns The invalid Device instance.
2377
+ * @since 1.0
2378
+ */
2379
+ LEAP_EXPORT static const Device& invalid();
2380
+
2381
+ /**
2382
+ * Compare Device object equality.
2383
+ *
2384
+ * \include Device_operator_equals.txt
2385
+ *
2386
+ * Two Device objects are equal if and only if both Device objects represent the
2387
+ * exact same Device and both Devices are valid.
2388
+ * @since 1.0
2389
+ */
2390
+ LEAP_EXPORT bool operator==(const Device&) const;
2391
+
2392
+ /**
2393
+ * Compare Device object inequality.
2394
+ *
2395
+ * \include Device_operator_not_equals.txt
2396
+ *
2397
+ * Two Device objects are equal if and only if both Device objects represent the
2398
+ * exact same Device and both Devices are valid.
2399
+ * @since 1.0
2400
+ */
2401
+ LEAP_EXPORT bool operator!=(const Device&) const;
2402
+
2403
+ /**
2404
+ * Writes a brief, human readable description of the Device object.
2405
+ *
2406
+ * \include Device_operator_stream.txt
2407
+ *
2408
+ * @since 1.0
2409
+ */
2410
+ LEAP_EXPORT friend std::ostream& operator<<(std::ostream&, const Device&);
2411
+
2412
+ /**
2413
+ * A string containing a brief, human readable description of the Device object.
2414
+ *
2415
+ * @returns A description of the Device as a string.
2416
+ * @since 1.0
2417
+ */
2418
+ LEAP_EXPORT std::string toString() const;
2419
+ };
2420
+
2421
+ // For internal use only.
2422
+ template<typename L, typename T>
2423
+ class ConstListIterator {
2424
+ public:
2425
+ ConstListIterator<L,T>(const L& list, int index) : m_list(list), m_index(index) {}
2426
+
2427
+ const T operator*() const { return m_list[m_index]; }
2428
+ void operator++(int) {++m_index;}
2429
+ const ConstListIterator<L,T>& operator++() { ++m_index; return *this; }
2430
+ bool operator!=(const ConstListIterator<L,T>& rhs) const { return m_index != rhs.m_index; }
2431
+ bool operator==(const ConstListIterator<L,T>& rhs) const { return m_index == rhs.m_index; }
2432
+
2433
+ typedef std::ptrdiff_t difference_type;
2434
+ typedef T value_type;
2435
+ typedef const T* pointer;
2436
+ typedef const T& reference;
2437
+ typedef std::forward_iterator_tag iterator_category;
2438
+
2439
+ private:
2440
+ const L& m_list;
2441
+ int m_index;
2442
+ };
2443
+
2444
+ /**
2445
+ * The PointableList class represents a list of Pointable objects.
2446
+ *
2447
+ * Pointable objects include entities that can be pointed, such as fingers and tools.
2448
+ *
2449
+ * Get a PointableList object by calling Frame::pointables() or Hand::pointables().
2450
+ *
2451
+ * \include PointableList_PointableList.txt
2452
+ *
2453
+ * @since 1.0
2454
+ */
2455
+ class PointableList : public Interface {
2456
+ public:
2457
+ // For internal use only.
2458
+ PointableList(const ListBaseImplementation<Pointable>&);
2459
+
2460
+ /**
2461
+ * Constructs an empty list of pointable entities.
2462
+ * @since 1.0
2463
+ */
2464
+ LEAP_EXPORT PointableList();
2465
+
2466
+ /**
2467
+ * Returns the number of pointable entities in this list.
2468
+ *
2469
+ * \include PointableList_count.txt
2470
+ *
2471
+ * @returns The number of pointable entities in this list.
2472
+ * @since 1.0
2473
+ */
2474
+ LEAP_EXPORT int count() const;
2475
+
2476
+ /**
2477
+ * Reports whether the list is empty.
2478
+ *
2479
+ * \include PointableList_isEmpty.txt
2480
+ *
2481
+ * @returns True, if the list has no members.
2482
+ * @since 1.0
2483
+ */
2484
+ LEAP_EXPORT bool isEmpty() const;
2485
+
2486
+ /**
2487
+ * Access a list member by its position in the list.
2488
+ *
2489
+ * \include PointableList_operator_index.txt
2490
+ *
2491
+ * @param index The zero-based list position index.
2492
+ * @returns The Pointable object at the specified index.
2493
+ * @since 1.0
2494
+ */
2495
+ LEAP_EXPORT Pointable operator[](int index) const;
2496
+
2497
+ /**
2498
+ * Appends the members of the specifed PointableList to this PointableList.
2499
+ * @param other A PointableList object containing Pointable objects
2500
+ * to append to the end of this PointableList.
2501
+ * @since 1.0
2502
+ */
2503
+ LEAP_EXPORT PointableList& append(const PointableList& other);
2504
+
2505
+ /**
2506
+ * Appends the members of the specifed FingerList to this PointableList.
2507
+ * @param other A FingerList object containing Finger objects
2508
+ * to append to the end of this PointableList.
2509
+ * @since 1.0
2510
+ */
2511
+ LEAP_EXPORT PointableList& append(const FingerList& other);
2512
+
2513
+ /**
2514
+ * Appends the members of the specifed ToolList to this PointableList.
2515
+ * @param other A ToolList object containing Tool objects
2516
+ * to append to the end of this PointableList.
2517
+ * @since 1.0
2518
+ */
2519
+ LEAP_EXPORT PointableList& append(const ToolList& other);
2520
+
2521
+ /**
2522
+ * The member of the list that is farthest to the left within the standard
2523
+ * Leap Motion frame of reference (i.e has the smallest X coordinate).
2524
+ *
2525
+ * \include PointableList_leftmost.txt
2526
+ *
2527
+ * @returns The leftmost pointable, or invalid if list is empty.
2528
+ * @since 1.0
2529
+ */
2530
+ LEAP_EXPORT Pointable leftmost() const;
2531
+
2532
+ /**
2533
+ * The member of the list that is farthest to the right within the standard
2534
+ * Leap Motion frame of reference (i.e has the largest X coordinate).
2535
+ *
2536
+ * \include PointableList_rightmost.txt
2537
+ *
2538
+ * @returns The rightmost pointable, or invalid if list is empty.
2539
+ * @since 1.0
2540
+ */
2541
+ LEAP_EXPORT Pointable rightmost() const;
2542
+
2543
+
2544
+ /**
2545
+ * The member of the list that is farthest to the front within the standard
2546
+ * Leap Motion frame of reference (i.e has the smallest Z coordinate).
2547
+ *
2548
+ * \include PointableList_frontmost.txt
2549
+ *
2550
+ * @returns The frontmost pointable, or invalid if list is empty.
2551
+ * @since 1.0
2552
+ */
2553
+ LEAP_EXPORT Pointable frontmost() const;
2554
+
2555
+ /**
2556
+ * A C++ iterator type for PointableList objects.
2557
+ *
2558
+ * \include PointableList_iterator.txt
2559
+ *
2560
+ * @since 1.0
2561
+ */
2562
+ typedef ConstListIterator<PointableList, Pointable> const_iterator;
2563
+
2564
+ /**
2565
+ * The C++ iterator set to the beginning of this PointableList.
2566
+ *
2567
+ * \include PointableList_begin.txt
2568
+ *
2569
+ * @since 1.0
2570
+ */
2571
+ LEAP_EXPORT const_iterator begin() const;
2572
+
2573
+ /**
2574
+ * The C++ iterator set to the end of this PointableList.
2575
+ *
2576
+ * \include PointableList_end.txt
2577
+ *
2578
+ * @since 1.0
2579
+ */
2580
+ LEAP_EXPORT const_iterator end() const;
2581
+ };
2582
+
2583
+ /**
2584
+ * The FingerList class represents a list of Finger objects.
2585
+ *
2586
+ * Get a FingerList object by calling Frame::fingers().
2587
+ *
2588
+ * \include FingerList_FingerList.txt
2589
+ *
2590
+ * @since 1.0
2591
+ */
2592
+ class FingerList : public Interface {
2593
+ public:
2594
+ // For internal use only.
2595
+ FingerList(const ListBaseImplementation<Finger>&);
2596
+
2597
+ /**
2598
+ * Constructs an empty list of fingers.
2599
+ * @since 1.0
2600
+ */
2601
+ LEAP_EXPORT FingerList();
2602
+
2603
+ /**
2604
+ * Returns the number of fingers in this list.
2605
+ *
2606
+ * \include FingerList_count.txt
2607
+ *
2608
+ * @returns The number of fingers in this list.
2609
+ * @since 1.0
2610
+ */
2611
+ LEAP_EXPORT int count() const;
2612
+
2613
+ /**
2614
+ * Reports whether the list is empty.
2615
+ *
2616
+ * \include FingerList_isEmpty.txt
2617
+ *
2618
+ * @returns True, if the list has no members.
2619
+ * @since 1.0
2620
+ */
2621
+ LEAP_EXPORT bool isEmpty() const;
2622
+
2623
+ /**
2624
+ * Access a list member by its position in the list.
2625
+ *
2626
+ * \include FingerList_index.txt
2627
+ *
2628
+ * @param index The zero-based list position index.
2629
+ * @returns The Finger object at the specified index.
2630
+ * @since 1.0
2631
+ */
2632
+ LEAP_EXPORT Finger operator[](int index) const;
2633
+
2634
+ /**
2635
+ * Appends the members of the specifed FingerList to this FingerList.
2636
+ * @param other A FingerList object containing Finger objects
2637
+ * to append to the end of this FingerList.
2638
+ * @since 1.0
2639
+ */
2640
+ LEAP_EXPORT FingerList& append(const FingerList& other);
2641
+
2642
+ /**
2643
+ * The member of the list that is farthest to the left within the standard
2644
+ * Leap Motion frame of reference (i.e has the smallest X coordinate).
2645
+ *
2646
+ * \include FingerList_leftmost.txt
2647
+ *
2648
+ * @returns The leftmost finger, or invalid if list is empty.
2649
+ * @since 1.0
2650
+ */
2651
+ LEAP_EXPORT Finger leftmost() const;
2652
+
2653
+ /**
2654
+ * The member of the list that is farthest to the right within the standard
2655
+ * Leap Motion frame of reference (i.e has the largest X coordinate).
2656
+ *
2657
+ * \include FingerList_rightmost.txt
2658
+ *
2659
+ * @returns The rightmost finger, or invalid if list is empty.
2660
+ * @since 1.0
2661
+ */
2662
+ LEAP_EXPORT Finger rightmost() const;
2663
+
2664
+ /**
2665
+ * The member of the list that is farthest to the front within the standard
2666
+ * Leap Motion frame of reference (i.e has the smallest Z coordinate).
2667
+ *
2668
+ * \include FingerList_frontmost.txt
2669
+ *
2670
+ * @returns The frontmost finger, or invalid if list is empty.
2671
+ * @since 1.0
2672
+ */
2673
+ LEAP_EXPORT Finger frontmost() const;
2674
+
2675
+ /**
2676
+ * A C++ iterator type for FingerList objects.
2677
+ *
2678
+ * \include FingerList_iterator.txt
2679
+ *
2680
+ * @since 1.0
2681
+ */
2682
+ typedef ConstListIterator<FingerList, Finger> const_iterator;
2683
+
2684
+ /**
2685
+ * The C++ iterator set to the beginning of this FingerList.
2686
+ *
2687
+ * \include FingerList_begin.txt
2688
+ *
2689
+ * @since 1.0
2690
+ */
2691
+ LEAP_EXPORT const_iterator begin() const;
2692
+
2693
+ /**
2694
+ * The C++ iterator set to the end of this FingerList.
2695
+ *
2696
+ * \include FingerList_end.txt
2697
+ *
2698
+ * @since 1.0
2699
+ */
2700
+ LEAP_EXPORT const_iterator end() const;
2701
+ };
2702
+
2703
+ /**
2704
+ * The ToolList class represents a list of Tool objects.
2705
+ *
2706
+ * Get a ToolList object by calling Frame::tools() or Hand::tools().
2707
+ *
2708
+ * \include ToolList_ToolList.txt
2709
+ *
2710
+ * @since 1.0
2711
+ */
2712
+ class ToolList : public Interface {
2713
+ public:
2714
+ // For internal use only.
2715
+ ToolList(const ListBaseImplementation<Tool>&);
2716
+
2717
+ /**
2718
+ * Constructs an empty list of tools.
2719
+ * @since 1.0
2720
+ */
2721
+ LEAP_EXPORT ToolList();
2722
+
2723
+ /**
2724
+ * Returns the number of tools in this list.
2725
+ *
2726
+ * \include ToolList_count.txt
2727
+ *
2728
+ * @returns The number of tools in this list.
2729
+ * @since 1.0
2730
+ */
2731
+ LEAP_EXPORT int count() const;
2732
+
2733
+ /**
2734
+ * Reports whether the list is empty.
2735
+ *
2736
+ * \include ToolList_isEmpty.txt
2737
+ *
2738
+ * @returns True, if the list has no members.
2739
+ * @since 1.0
2740
+ */
2741
+ LEAP_EXPORT bool isEmpty() const;
2742
+
2743
+ /**
2744
+ * Access a list member by its position in the list.
2745
+ *
2746
+ * \include ToolList_operator_index.txt
2747
+ *
2748
+ * @param index The zero-based list position index.
2749
+ * @returns The Tool object at the specified index.
2750
+ * @since 1.0
2751
+ */
2752
+ LEAP_EXPORT Tool operator[](int index) const;
2753
+
2754
+ /**
2755
+ * Appends the members of the specifed ToolList to this ToolList.
2756
+ * @param other A ToolList object containing Tool objects
2757
+ * to append to the end of this ToolList.
2758
+ * @since 1.0
2759
+ */
2760
+ LEAP_EXPORT ToolList& append(const ToolList& other);
2761
+
2762
+ /**
2763
+ * The member of the list that is farthest to the left within the standard
2764
+ * Leap Motion frame of reference (i.e has the smallest X coordinate).
2765
+ *
2766
+ * \include ToolList_leftmost.txt
2767
+ *
2768
+ * @returns The leftmost tool, or invalid if list is empty.
2769
+ * @since 1.0
2770
+ */
2771
+ LEAP_EXPORT Tool leftmost() const;
2772
+
2773
+ /**
2774
+ * The member of the list that is farthest to the right within the standard
2775
+ * Leap Motion frame of reference (i.e has the largest X coordinate).
2776
+ *
2777
+ * \include ToolList_rightmost.txt
2778
+ *
2779
+ * @returns The rightmost tool, or invalid if list is empty.
2780
+ * @since 1.0
2781
+ */
2782
+ LEAP_EXPORT Tool rightmost() const;
2783
+
2784
+ /**
2785
+ * The member of the list that is farthest to the front within the standard
2786
+ * Leap Motion frame of reference (i.e has the smallest Z coordinate).
2787
+ *
2788
+ * \include ToolList_frontmost.txt
2789
+ *
2790
+ * @returns The frontmost tool, or invalid if list is empty.
2791
+ * @since 1.0
2792
+ */
2793
+ LEAP_EXPORT Tool frontmost() const;
2794
+
2795
+ /**
2796
+ * A C++ iterator type for ToolList objects.
2797
+ *
2798
+ * \include ToolList_iterator.txt
2799
+ *
2800
+ * @since 1.0
2801
+ */
2802
+ typedef ConstListIterator<ToolList, Tool> const_iterator;
2803
+
2804
+ /**
2805
+ * The C++ iterator set to the beginning of this ToolList.
2806
+ *
2807
+ * \include ToolList_begin.txt
2808
+ * @since 1.0
2809
+ */
2810
+ LEAP_EXPORT const_iterator begin() const;
2811
+
2812
+ /**
2813
+ * The C++ iterator set to the end of this ToolList.
2814
+ *
2815
+ * \include ToolList_end.txt
2816
+ *
2817
+ * @since 1.0
2818
+ */
2819
+ LEAP_EXPORT const_iterator end() const;
2820
+ };
2821
+
2822
+ /**
2823
+ * The HandList class represents a list of Hand objects.
2824
+ *
2825
+ * Get a HandList object by calling Frame::hands().
2826
+ *
2827
+ * \include HandList_HandList.txt
2828
+ *
2829
+ * @since 1.0
2830
+ */
2831
+ class HandList : public Interface {
2832
+ public:
2833
+ // For internal use only.
2834
+ HandList(const ListBaseImplementation<Hand>&);
2835
+
2836
+ /**
2837
+ * Constructs an empty list of hands.
2838
+ * @since 1.0
2839
+ */
2840
+ LEAP_EXPORT HandList();
2841
+
2842
+ /**
2843
+ * Returns the number of hands in this list.
2844
+ *
2845
+ * \include HandList_count.txt
2846
+ * @returns The number of hands in this list.
2847
+ * @since 1.0
2848
+ */
2849
+ LEAP_EXPORT int count() const;
2850
+
2851
+ /**
2852
+ * Reports whether the list is empty.
2853
+ *
2854
+ * \include HandList_isEmpty.txt
2855
+ *
2856
+ * @returns True, if the list has no members.
2857
+ * @since 1.0
2858
+ */
2859
+ LEAP_EXPORT bool isEmpty() const;
2860
+
2861
+ /**
2862
+ * Access a list member by its position in the list.
2863
+ *
2864
+ * \include HandList_operator_index.txt
2865
+ *
2866
+ * @param index The zero-based list position index.
2867
+ * @returns The Hand object at the specified index.
2868
+ * @since 1.0
2869
+ */
2870
+ LEAP_EXPORT Hand operator[](int index) const;
2871
+
2872
+ /**
2873
+ * Appends the members of the specifed HandList to this HandList.
2874
+ * @param other A HandList object containing Hand objects
2875
+ * to append to the end of this HandList.
2876
+ */
2877
+ LEAP_EXPORT HandList& append(const HandList& other);
2878
+
2879
+ /**
2880
+ * The member of the list that is farthest to the left within the standard
2881
+ * Leap Motion frame of reference (i.e has the smallest X coordinate).
2882
+ *
2883
+ * \include HandList_leftmost.txt
2884
+ *
2885
+ * @returns The leftmost hand, or invalid if list is empty.
2886
+ * @since 1.0
2887
+ */
2888
+ LEAP_EXPORT Hand leftmost() const;
2889
+
2890
+ /**
2891
+ * The member of the list that is farthest to the right within the standard
2892
+ * Leap Motion frame of reference (i.e has the largest X coordinate).
2893
+ *
2894
+ * \include HandList_rightmost.txt
2895
+ *
2896
+ * @returns The rightmost hand, or invalid if list is empty.
2897
+ * @since 1.0
2898
+ */
2899
+ LEAP_EXPORT Hand rightmost() const;
2900
+
2901
+ /**
2902
+ * The member of the list that is farthest to the front within the standard
2903
+ * Leap Motion frame of reference (i.e has the smallest Z coordinate).
2904
+ *
2905
+ * \include HandList_frontmost.txt
2906
+ *
2907
+ * @returns The frontmost hand, or invalid if list is empty.
2908
+ * @since 1.0
2909
+ */
2910
+ LEAP_EXPORT Hand frontmost() const;
2911
+
2912
+ /**
2913
+ * A C++ iterator type for this HandList objects.
2914
+ *
2915
+ * \include HandList_iterator.txt
2916
+ *
2917
+ * @since 1.0
2918
+ */
2919
+ typedef ConstListIterator<HandList, Hand> const_iterator;
2920
+
2921
+ /**
2922
+ * The C++ iterator set to the beginning of this HandList.
2923
+ *
2924
+ * \include HandList_begin.txt
2925
+ *
2926
+ * @since 1.0
2927
+ */
2928
+ LEAP_EXPORT const_iterator begin() const;
2929
+
2930
+ /**
2931
+ * The C++ iterator set to the end of this HandList.
2932
+ *
2933
+ * \include HandList_end.txt
2934
+ *
2935
+ * @since 1.0
2936
+ */
2937
+ LEAP_EXPORT const_iterator end() const;
2938
+ };
2939
+
2940
+ /**
2941
+ * The GestureList class represents a list of Gesture objects.
2942
+ *
2943
+ * Get a GestureList object from a Frame object.
2944
+ * @since 1.0
2945
+ */
2946
+ class GestureList : public Interface {
2947
+ public:
2948
+ // For internal use only.
2949
+ GestureList(const ListBaseImplementation<Gesture>&);
2950
+
2951
+ /**
2952
+ * Constructs an empty gesture list.
2953
+ * @since 1.0
2954
+ */
2955
+ LEAP_EXPORT GestureList();
2956
+
2957
+ /**
2958
+ * The length of this list.
2959
+ *
2960
+ * \include GestureList_count.txt
2961
+ *
2962
+ * @returns The number of gestures in this list.
2963
+ * @since 1.0
2964
+ */
2965
+ LEAP_EXPORT int count() const;
2966
+
2967
+ /**
2968
+ * Reports whether the list is empty.
2969
+ *
2970
+ * \include GestureList_isEmpty.txt
2971
+ *
2972
+ * @returns True, if the list has no members.
2973
+ * @since 1.0
2974
+ */
2975
+ LEAP_EXPORT bool isEmpty() const;
2976
+
2977
+ /**
2978
+ * Access a list member by its position in the list.
2979
+ *
2980
+ * \include GestureList_operator_index.txt
2981
+ *
2982
+ * @param index The zero-based list position index.
2983
+ * @returns The Gesture object at the specified index.
2984
+ * @since 1.0
2985
+ */
2986
+ LEAP_EXPORT Gesture operator[](int index) const;
2987
+
2988
+ /**
2989
+ * Appends the members of the specified GestureList to this GestureList.
2990
+ * @param other A GestureList object containing Gesture objects
2991
+ * to append to the end of this GestureList.
2992
+ * @since 1.0
2993
+ */
2994
+ LEAP_EXPORT GestureList& append(const GestureList& other);
2995
+
2996
+ /**
2997
+ * A C++ iterator type for GestureList objects.
2998
+ *
2999
+ * \include GestureList_iterator.txt
3000
+ * @since 1.0
3001
+ */
3002
+ typedef ConstListIterator<GestureList, Gesture> const_iterator;
3003
+
3004
+ /**
3005
+ * The C++ iterator set to the beginning of this GestureList.
3006
+ *
3007
+ * \include GestureList_begin.txt
3008
+ *
3009
+ * @since 1.0
3010
+ */
3011
+ LEAP_EXPORT const_iterator begin() const;
3012
+
3013
+ /**
3014
+ * The C++ iterator set to the end of this GestureList.
3015
+ *
3016
+ * \include GestureList_end.txt
3017
+ *
3018
+ * @since 1.0
3019
+ */
3020
+ LEAP_EXPORT const_iterator end() const;
3021
+ };
3022
+
3023
+ /*
3024
+ * The ScreenList and Screen classes are currently unsupported.
3025
+ *
3026
+ * We are re-evaluating this feature due to the cumbersome location process
3027
+ * required to use it and the amount of confusion about the feature's purpose.
3028
+ *
3029
+ * The ScreenList class represents a list of Screen objects.
3030
+ *
3031
+ * The list always contains at least one entry representing the default
3032
+ * screen. If the user has not registered the location of this default
3033
+ * screen, then the coordinates, directions, and other values reported by
3034
+ * the functions in its Screen object will not be accurate. Other monitor
3035
+ * screens only appear in the list if their positions have been registered
3036
+ * using the Leap Motion Screen Locator.
3037
+ *
3038
+ * Get a ScreenList object by calling Controller::locatedScreens().
3039
+ *
3040
+ * \include Screen_Closest_1.txt
3041
+ * @since 1.0
3042
+ */
3043
+ class ScreenList : public Interface {
3044
+ public:
3045
+ // For internal use only.
3046
+ ScreenList(const ListBaseImplementation<Screen>&);
3047
+
3048
+ /**
3049
+ * Constructs an empty list of screens.
3050
+ * @since 1.0
3051
+ */
3052
+ LEAP_EXPORT ScreenList();
3053
+
3054
+ /**
3055
+ * Returns the number of screens in this list.
3056
+ * @returns The number of screens in this list.
3057
+ * @since 1.0
3058
+ */
3059
+ LEAP_EXPORT int count() const;
3060
+
3061
+ /**
3062
+ * Reports whether the list is empty.
3063
+ * @returns True, if the list has no members.
3064
+ * @since 1.0
3065
+ */
3066
+ LEAP_EXPORT bool isEmpty() const;
3067
+
3068
+ /**
3069
+ * Access a list member by its position in the list.
3070
+ * @param index The zero-based list position index.
3071
+ * @returns The Screen object at the specified index.
3072
+ * @since 1.0
3073
+ */
3074
+ LEAP_EXPORT Screen operator[](int index) const;
3075
+
3076
+ /**
3077
+ * A C++ iterator type for this ScreenList objects.
3078
+ * @since 1.0
3079
+ */
3080
+ typedef ConstListIterator<ScreenList, Screen> const_iterator;
3081
+
3082
+ /**
3083
+ * The C++ iterator set to the beginning of this ScreenList.
3084
+ * @since 1.0
3085
+ */
3086
+ LEAP_EXPORT const_iterator begin() const;
3087
+
3088
+ /**
3089
+ * The C++ iterator set to the end of this ScreenList.
3090
+ * @since 1.0
3091
+ */
3092
+ LEAP_EXPORT const_iterator end() const;
3093
+
3094
+ /**
3095
+ * Gets the closest Screen intercepting a ray projecting from the specified
3096
+ * Pointable object.
3097
+ *
3098
+ * The projected ray emanates from the Pointable tipPosition along the
3099
+ * Pointable's direction vector. If the projected ray does not intersect
3100
+ * any screen surface directly, then the Leap Motion software checks for intersection with
3101
+ * the planes extending from the surfaces of the known screens
3102
+ * and returns the Screen with the closest intersection.
3103
+ *
3104
+ * \include Screen_Closest_2.txt
3105
+ *
3106
+ * If no intersections are found (i.e. the ray is directed parallel to or
3107
+ * away from all known screens), then an invalid Screen object is returned.
3108
+ *
3109
+ * *Note:* Be sure to test whether the Screen object returned by this method
3110
+ * is valid. Attempting to use an invalid Screen object will lead to
3111
+ * incorrect results.
3112
+ *
3113
+ * @param pointable The Pointable object to check for screen intersection.
3114
+ * @returns The closest Screen toward which the specified Pointable object
3115
+ * is pointing, or, if the pointable is not pointing in the direction of
3116
+ * any known screen, an invalid Screen object.
3117
+ * @since 1.0
3118
+ */
3119
+ LEAP_EXPORT Screen closestScreenHit(const Pointable& pointable) const;
3120
+
3121
+ /**
3122
+ * Gets the closest Screen intercepting a ray projecting from the specified
3123
+ * position in the specified direction.
3124
+ *
3125
+ * The projected ray emanates from the position along the direction vector.
3126
+ * If the projected ray does not intersect any screen surface directly,
3127
+ * then the Leap Motion software checks for intersection with the planes extending from the
3128
+ * surfaces of the known screens and returns the Screen with the closest
3129
+ * intersection.
3130
+ *
3131
+ * \include Screen_Closest_3.txt
3132
+ *
3133
+ * If no intersections are found (i.e. the ray is directed parallel to or
3134
+ * away from all known screens), then an invalid Screen object is returned.
3135
+ *
3136
+ * *Note:* Be sure to test whether the Screen object returned by this method
3137
+ * is valid. Attempting to use an invalid Screen object will lead to
3138
+ * incorrect results.
3139
+ *
3140
+ * @param position The position from which to check for screen intersection.
3141
+ * @param direction The direction in which to check for screen intersection.
3142
+ * @returns The closest Screen toward which the specified ray is pointing,
3143
+ * or, if the ray is not pointing in the direction of any known screen,
3144
+ * an invalid Screen object.
3145
+ * @since 1.0
3146
+ */
3147
+ LEAP_EXPORT Screen closestScreenHit(const Vector& position, const Vector& direction) const;
3148
+
3149
+ /**
3150
+ * Gets the Screen closest to the specified position.
3151
+ *
3152
+ * The specified position is projected along each screen's normal vector
3153
+ * onto the screen's plane. The screen whose projected point is closest to
3154
+ * the specified position is returned. Call Screen::project(position)
3155
+ * on the returned Screen object to find the projected point.
3156
+ *
3157
+ * \include Screen_Closest_3.txt
3158
+ *
3159
+ * @param position The position from which to check for screen projection.
3160
+ * @returns The closest Screen onto which the specified position is projected.
3161
+ * @since 1.0
3162
+ */
3163
+ LEAP_EXPORT Screen closestScreen(const Vector& position) const;
3164
+ };
3165
+
3166
+ /**
3167
+ * The DeviceList class represents a list of Device objects.
3168
+ *
3169
+ * Get a DeviceList object by calling Controller::devices().
3170
+ * @since 1.0
3171
+ */
3172
+ class DeviceList : public Interface {
3173
+ public:
3174
+ // For internal use only.
3175
+ DeviceList(const ListBaseImplementation<Device>&);
3176
+
3177
+ /**
3178
+ * Constructs an empty list of devices.
3179
+ * @since 1.0
3180
+ */
3181
+ LEAP_EXPORT DeviceList();
3182
+
3183
+ /**
3184
+ * Returns the number of devices in this list.
3185
+ * @returns The number of devices in this list.
3186
+ * @since 1.0
3187
+ */
3188
+ LEAP_EXPORT int count() const;
3189
+
3190
+ /**
3191
+ * Reports whether the list is empty.
3192
+ *
3193
+ * \include DeviceList_isEmpty.txt
3194
+ *
3195
+ * @returns True, if the list has no members.
3196
+ * @since 1.0
3197
+ */
3198
+ LEAP_EXPORT bool isEmpty() const;
3199
+
3200
+ /**
3201
+ * Access a list member by its position in the list.
3202
+ * @param index The zero-based list position index.
3203
+ * @returns The Device object at the specified index.
3204
+ * @since 1.0
3205
+ */
3206
+ LEAP_EXPORT Device operator[](int index) const;
3207
+
3208
+ /**
3209
+ * Appends the members of the specifed DeviceList to this DeviceList.
3210
+ * @param other A DeviceList object containing Device objects
3211
+ * to append to the end of this DeviceList.
3212
+ * @since 1.0
3213
+ */
3214
+ LEAP_EXPORT DeviceList& append(const DeviceList& other);
3215
+
3216
+ /**
3217
+ * A C++ iterator type for this DeviceList objects.
3218
+ * @since 1.0
3219
+ */
3220
+ typedef ConstListIterator<DeviceList, Device> const_iterator;
3221
+
3222
+ /**
3223
+ * The C++ iterator set to the beginning of this DeviceList.
3224
+ * @since 1.0
3225
+ */
3226
+ LEAP_EXPORT const_iterator begin() const;
3227
+
3228
+ /**
3229
+ * The C++ iterator set to the end of this DeviceList.
3230
+ * @since 1.0
3231
+ */
3232
+ LEAP_EXPORT const_iterator end() const;
3233
+ };
3234
+
3235
+ /**
3236
+ * The InteractionBox class represents a box-shaped region completely
3237
+ * within the field of view of the Leap Motion controller.
3238
+ *
3239
+ * The interaction box is an axis-aligned rectangular prism and provides normalized
3240
+ * coordinates for hands, fingers, and tools within this box. The InteractionBox class
3241
+ * can make it easier to map positions in the Leap Motion coordinate system to 2D or
3242
+ * 3D coordinate systems used for application drawing.
3243
+ *
3244
+ * \image html images/Leap_InteractionBox.png
3245
+ *
3246
+ * The InteractionBox region is defined by a center and dimensions along the x, y,
3247
+ * and z axes.
3248
+ *
3249
+ * Get an InteractionBox object from a Frame object.
3250
+ * @since 1.0
3251
+ */
3252
+ class InteractionBox : public Interface {
3253
+ public:
3254
+ // For internal use only.
3255
+ InteractionBox(InteractionBoxImplementation*);
3256
+
3257
+ LEAP_EXPORT InteractionBox();
3258
+
3259
+ /**
3260
+ * Normalizes the coordinates of a point using the interaction box.
3261
+ *
3262
+ * \include InteractionBox_normalizePoint.txt
3263
+ *
3264
+ * Coordinates from the Leap Motion frame of reference (millimeters) are converted
3265
+ * to a range of [0..1] such that the minimum value of the InteractionBox maps to 0
3266
+ * and the maximum value of the InteractionBox maps to 1.
3267
+ *
3268
+ * @param position The input position in device coordinates.
3269
+ * @param clamp Whether or not to limit the output value to the range [0,1] when the
3270
+ * input position is outside the InteractionBox. Defaults to true.
3271
+ * @returns The normalized position.
3272
+ * @since 1.0
3273
+ */
3274
+ LEAP_EXPORT Vector normalizePoint(const Vector& position, bool clamp = true) const;
3275
+
3276
+ /**
3277
+ * Converts a position defined by normalized InteractionBox coordinates into device
3278
+ * coordinates in millimeters.
3279
+ *
3280
+ * \include InteractionBox_denormalizePoint.txt
3281
+ *
3282
+ * This function performs the inverse of normalizePoint().
3283
+ *
3284
+ * @param normalizedPosition The input position in InteractionBox coordinates.
3285
+ * @returns The corresponding denormalized position in device coordinates.
3286
+ * @since 1.0
3287
+ */
3288
+ LEAP_EXPORT Vector denormalizePoint(const Vector& normalizedPosition) const;
3289
+
3290
+ /**
3291
+ * The center of the InteractionBox in device coordinates (millimeters). This point
3292
+ * is equidistant from all sides of the box.
3293
+ *
3294
+ * \include InteractionBox_center.txt
3295
+ *
3296
+ * @returns The InteractionBox center in device coordinates.
3297
+ * @since 1.0
3298
+ */
3299
+ LEAP_EXPORT Vector center() const;
3300
+
3301
+ /**
3302
+ * The width of the InteractionBox in millimeters, measured along the x-axis.
3303
+ *
3304
+ * \include InteractionBox_width.txt
3305
+ *
3306
+ * @returns The InteractionBox width in millimeters.
3307
+ * @since 1.0
3308
+ */
3309
+ LEAP_EXPORT float width() const;
3310
+
3311
+ /**
3312
+ * The height of the InteractionBox in millimeters, measured along the y-axis.
3313
+ *
3314
+ * \include InteractionBox_height.txt
3315
+ *
3316
+ * @returns The InteractionBox height in millimeters.
3317
+ * @since 1.0
3318
+ */
3319
+ LEAP_EXPORT float height() const;
3320
+
3321
+ /**
3322
+ * The depth of the InteractionBox in millimeters, measured along the z-axis.
3323
+ *
3324
+ * \include InteractionBox_depth.txt
3325
+ *
3326
+ * @returns The InteractionBox depth in millimeters.
3327
+ * @since 1.0
3328
+ */
3329
+ LEAP_EXPORT float depth() const;
3330
+
3331
+ /**
3332
+ * Reports whether this is a valid InteractionBox object.
3333
+ *
3334
+ * \include InteractionBox_isValid.txt
3335
+ *
3336
+ * @returns True, if this InteractionBox object contains valid data.
3337
+ * @since 1.0
3338
+ */
3339
+ LEAP_EXPORT bool isValid() const;
3340
+
3341
+ /**
3342
+ * Returns an invalid InteractionBox object.
3343
+ *
3344
+ * You can use the instance returned by this function in comparisons testing
3345
+ * whether a given InteractionBox instance is valid or invalid. (You can also use the
3346
+ * InteractionBox::isValid() function.)
3347
+ *
3348
+ * \include InteractionBox_invalid.txt
3349
+ *
3350
+ * @returns The invalid InteractionBox instance.
3351
+ * @since 1.0
3352
+ */
3353
+ LEAP_EXPORT static const InteractionBox& invalid();
3354
+
3355
+ /**
3356
+ * Compare InteractionBox object equality.
3357
+ *
3358
+ * \include InteractionBox_operator_equals.txt
3359
+ *
3360
+ * Two InteractionBox objects are equal if and only if both InteractionBox objects represent the
3361
+ * exact same InteractionBox and both InteractionBoxes are valid.
3362
+ * @since 1.0
3363
+ */
3364
+ LEAP_EXPORT bool operator==(const InteractionBox&) const;
3365
+
3366
+ /**
3367
+ * Compare InteractionBox object inequality.
3368
+ *
3369
+ * \include InteractionBox_operator_not_equals.txt
3370
+ *
3371
+ * Two InteractionBox objects are equal if and only if both InteractionBox objects represent the
3372
+ * exact same InteractionBox and both InteractionBoxes are valid.
3373
+ * @since 1.0
3374
+ */
3375
+ LEAP_EXPORT bool operator!=(const InteractionBox&) const;
3376
+
3377
+ /**
3378
+ * Writes a brief, human readable description of the InteractionBox object.
3379
+ *
3380
+ * \include InteractionBox_operator_stream.txt
3381
+ *
3382
+ * @since 1.0
3383
+ */
3384
+ LEAP_EXPORT friend std::ostream& operator<<(std::ostream&, const InteractionBox&);
3385
+
3386
+ /**
3387
+ * A string containing a brief, human readable description of the InteractionBox object.
3388
+ *
3389
+ * @returns A description of the InteractionBox as a string.
3390
+ * @since 1.0
3391
+ */
3392
+ LEAP_EXPORT std::string toString() const;
3393
+ };
3394
+
3395
+ /**
3396
+ * The Frame class represents a set of hand and finger tracking data detected
3397
+ * in a single frame.
3398
+ *
3399
+ * The Leap Motion software detects hands, fingers and tools within the tracking area, reporting
3400
+ * their positions, orientations, gestures, and motions in frames at the Leap Motion frame rate.
3401
+ *
3402
+ * Access Frame objects through an instance of the Controller class:
3403
+ *
3404
+ * \include Controller_Frame_1.txt
3405
+ *
3406
+ * Implement a Listener subclass to receive a callback event when a new Frame is available.
3407
+ * @since 1.0
3408
+ */
3409
+ class Frame : public Interface {
3410
+ public:
3411
+ // For internal use only.
3412
+ Frame(FrameImplementation*);
3413
+
3414
+ /**
3415
+ * Constructs a Frame object.
3416
+ *
3417
+ * Frame instances created with this constructor are invalid.
3418
+ * Get valid Frame objects by calling the Controller::frame() function.
3419
+ *
3420
+ * \include Frame_Frame.txt
3421
+ *
3422
+ * @since 1.0
3423
+ */
3424
+ LEAP_EXPORT Frame();
3425
+
3426
+ /**
3427
+ * A unique ID for this Frame.
3428
+ *
3429
+ * Consecutive frames processed by the Leap Motion software have consecutive
3430
+ * increasing values. You can use the frame ID to avoid processing the same
3431
+ * Frame object twice:
3432
+ *
3433
+ * \include Frame_Duplicate.txt
3434
+ *
3435
+ * As well as to make sure that your application processes every frame:
3436
+ *
3437
+ * \include Frame_Skipped.txt
3438
+ *
3439
+ * @returns The frame ID.
3440
+ * @since 1.0
3441
+ */
3442
+ LEAP_EXPORT int64_t id() const;
3443
+
3444
+ /**
3445
+ * The frame capture time in microseconds elapsed since the Leap started.
3446
+ *
3447
+ * \include Frame_timestamp.txt
3448
+ *
3449
+ * @returns The timestamp in microseconds.
3450
+ * @since 1.0
3451
+ */
3452
+ LEAP_EXPORT int64_t timestamp() const;
3453
+
3454
+ /**
3455
+ * The list of Hand objects detected in this frame, given in arbitrary order.
3456
+ * The list can be empty if no hands are detected.
3457
+ *
3458
+ * \include Frame_hands.txt
3459
+ *
3460
+ * @returns The HandList containing all Hand objects detected in this frame.
3461
+ * @since 1.0
3462
+ */
3463
+ LEAP_EXPORT HandList hands() const;
3464
+
3465
+ /**
3466
+ * The Hand object with the specified ID in this frame.
3467
+ *
3468
+ * Use the Frame::hand() function to retrieve the Hand object from
3469
+ * this frame using an ID value obtained from a previous frame.
3470
+ * This function always returns a Hand object, but if no hand
3471
+ * with the specified ID is present, an invalid Hand object is returned.
3472
+ *
3473
+ * \include Frame_hand.txt
3474
+ *
3475
+ * Note that ID values persist across frames, but only until tracking of a
3476
+ * particular object is lost. If tracking of a hand is lost and subsequently
3477
+ * regained, the new Hand object representing that physical hand may have
3478
+ * a different ID than that representing the physical hand in an earlier frame.
3479
+ *
3480
+ * @param id The ID value of a Hand object from a previous frame.
3481
+ * @returns The Hand object with the matching ID if one exists in this frame;
3482
+ * otherwise, an invalid Hand object is returned.
3483
+ * @since 1.0
3484
+ */
3485
+ LEAP_EXPORT Hand hand(int32_t id) const;
3486
+
3487
+ /**
3488
+ * The list of Pointable objects (fingers and tools) detected in this frame,
3489
+ * given in arbitrary order. The list can be empty if no fingers or tools are detected.
3490
+ *
3491
+ * \include Frame_pointables.txt
3492
+ *
3493
+ * @returns The PointableList containing all Pointable objects detected in this frame.
3494
+ * @since 1.0
3495
+ */
3496
+ LEAP_EXPORT PointableList pointables() const;
3497
+
3498
+ /**
3499
+ * The Pointable object with the specified ID in this frame.
3500
+ *
3501
+ * Use the Frame::pointable() function to retrieve the Pointable object from
3502
+ * this frame using an ID value obtained from a previous frame.
3503
+ * This function always returns a Pointable object, but if no finger or tool
3504
+ * with the specified ID is present, an invalid Pointable object is returned.
3505
+ *
3506
+ * \include Frame_pointable.txt
3507
+ *
3508
+ * Note that ID values persist across frames, but only until tracking of a
3509
+ * particular object is lost. If tracking of a finger or tool is lost and subsequently
3510
+ * regained, the new Pointable object representing that finger or tool may have
3511
+ * a different ID than that representing the finger or tool in an earlier frame.
3512
+ *
3513
+ * @param id The ID value of a Pointable object from a previous frame.
3514
+ * @returns The Pointable object with the matching ID if one exists in this frame;
3515
+ * otherwise, an invalid Pointable object is returned.
3516
+ * @since 1.0
3517
+ */
3518
+ LEAP_EXPORT Pointable pointable(int32_t id) const;
3519
+
3520
+ /**
3521
+ * The list of Finger objects detected in this frame, given in arbitrary order.
3522
+ * The list can be empty if no fingers are detected.
3523
+ *
3524
+ * \include Frame_fingers.txt
3525
+ *
3526
+ * @returns The FingerList containing all Finger objects detected in this frame.
3527
+ * @since 1.0
3528
+ */
3529
+ LEAP_EXPORT FingerList fingers() const;
3530
+
3531
+ /**
3532
+ * The Finger object with the specified ID in this frame.
3533
+ *
3534
+ * Use the Frame::finger() function to retrieve the Finger object from
3535
+ * this frame using an ID value obtained from a previous frame.
3536
+ * This function always returns a Finger object, but if no finger
3537
+ * with the specified ID is present, an invalid Finger object is returned.
3538
+ *
3539
+ * \include Frame_finger.txt
3540
+ *
3541
+ * Note that ID values persist across frames, but only until tracking of a
3542
+ * particular object is lost. If tracking of a finger is lost and subsequently
3543
+ * regained, the new Finger object representing that physical finger may have
3544
+ * a different ID than that representing the finger in an earlier frame.
3545
+ *
3546
+ * @param id The ID value of a Finger object from a previous frame.
3547
+ * @returns The Finger object with the matching ID if one exists in this frame;
3548
+ * otherwise, an invalid Finger object is returned.
3549
+ * @since 1.0
3550
+ */
3551
+ LEAP_EXPORT Finger finger(int32_t id) const;
3552
+
3553
+ /**
3554
+ * The list of Tool objects detected in this frame, given in arbitrary order.
3555
+ * The list can be empty if no tools are detected.
3556
+ *
3557
+ * \include Frame_tools.txt
3558
+ *
3559
+ * @returns The ToolList containing all Tool objects detected in this frame.
3560
+ * @since 1.0
3561
+ */
3562
+ LEAP_EXPORT ToolList tools() const;
3563
+
3564
+ /**
3565
+ * The Tool object with the specified ID in this frame.
3566
+ *
3567
+ * Use the Frame::tool() function to retrieve the Tool object from
3568
+ * this frame using an ID value obtained from a previous frame.
3569
+ * This function always returns a Tool object, but if no tool
3570
+ * with the specified ID is present, an invalid Tool object is returned.
3571
+ *
3572
+ * \include Frame_tool.txt
3573
+ *
3574
+ * Note that ID values persist across frames, but only until tracking of a
3575
+ * particular object is lost. If tracking of a tool is lost and subsequently
3576
+ * regained, the new Tool object representing that tool may have a
3577
+ * different ID than that representing the tool in an earlier frame.
3578
+ *
3579
+ * @param id The ID value of a Tool object from a previous frame.
3580
+ * @returns The Tool object with the matching ID if one exists in this frame;
3581
+ * otherwise, an invalid Tool object is returned.
3582
+ * @since 1.0
3583
+ */
3584
+ LEAP_EXPORT Tool tool(int32_t id) const;
3585
+
3586
+ /**
3587
+ * The Gesture object with the specified ID in this frame.
3588
+ *
3589
+ * Use the Frame::gesture() function to return a Gesture object in this
3590
+ * frame using an ID obtained in an earlier frame. The function always
3591
+ * returns a Gesture object, but if there was no update for the gesture in
3592
+ * this frame, then an invalid Gesture object is returned.
3593
+ *
3594
+ * \include Frame_gesture.txt
3595
+ *
3596
+ * All Gesture objects representing the same recognized movement share the
3597
+ * same ID.
3598
+ * @param id The ID of an Gesture object from a previous frame.
3599
+ * @returns The Gesture object in the frame with the specified ID if one
3600
+ * exists; Otherwise, an Invalid Gesture object.
3601
+ * @since 1.0
3602
+ */
3603
+ LEAP_EXPORT Gesture gesture(int32_t id) const;
3604
+
3605
+ /**
3606
+ * The gestures recognized or continuing in this frame.
3607
+ *
3608
+ * \include Frame_gestures_now.txt
3609
+ *
3610
+ * Circle and swipe gestures are updated every frame. Tap gestures
3611
+ * only appear in the list for a single frame.
3612
+ *
3613
+ * @return GestureList the list of gestures.
3614
+ * @since 1.0
3615
+ */
3616
+ LEAP_EXPORT GestureList gestures() const;
3617
+
3618
+ /**
3619
+ * Returns a GestureList containing all gestures that have occured since
3620
+ * the specified frame.
3621
+ *
3622
+ * \include Frame_gestures_since.txt
3623
+ *
3624
+ * @param sinceFrame An earlier Frame object. The starting frame must
3625
+ * still be in the frame history cache, which has a default length of
3626
+ * 60 frames.
3627
+ * @return GestureList The list of the Gesture objects that have occured
3628
+ * since the specified frame.
3629
+ * @since 1.0
3630
+ */
3631
+ LEAP_EXPORT GestureList gestures(const Frame& sinceFrame) const;
3632
+
3633
+ /**
3634
+ * The change of position derived from the overall linear motion between
3635
+ * the current frame and the specified frame.
3636
+ *
3637
+ * The returned translation vector provides the magnitude and direction of
3638
+ * the movement in millimeters.
3639
+ *
3640
+ * \include Frame_translation.txt
3641
+ *
3642
+ * The Leap Motion software derives frame translation from the linear motion of
3643
+ * all objects detected in the field of view.
3644
+ *
3645
+ * If either this frame or sinceFrame is an invalid Frame object, then this
3646
+ * method returns a zero vector.
3647
+ *
3648
+ * @param sinceFrame The starting frame for computing the relative translation.
3649
+ * @returns A Vector representing the heuristically determined change in
3650
+ * position of all objects between the current frame and that specified
3651
+ * in the sinceFrame parameter.
3652
+ * @since 1.0
3653
+ */
3654
+ LEAP_EXPORT Vector translation(const Frame& sinceFrame) const;
3655
+
3656
+ /**
3657
+ * The estimated probability that the overall motion between the current
3658
+ * frame and the specified frame is intended to be a translating motion.
3659
+ *
3660
+ * \include Frame_translationProbability.txt
3661
+ *
3662
+ * If either this frame or sinceFrame is an invalid Frame object, then this
3663
+ * method returns zero.
3664
+ *
3665
+ * @param sinceFrame The starting frame for computing the translation.
3666
+ * @returns A value between 0 and 1 representing the estimated probability
3667
+ * that the overall motion between the current frame and the specified frame
3668
+ * is intended to be a translating motion.
3669
+ * @since 1.0
3670
+ */
3671
+ LEAP_EXPORT float translationProbability(const Frame& sinceFrame) const;
3672
+
3673
+ /**
3674
+ * The axis of rotation derived from the overall rotational motion between
3675
+ * the current frame and the specified frame.
3676
+ *
3677
+ * The returned direction vector is normalized.
3678
+ *
3679
+ * \include Frame_rotationAxis.txt
3680
+ *
3681
+ * The Leap Motion software derives frame rotation from the relative change in position and
3682
+ * orientation of all objects detected in the field of view.
3683
+ *
3684
+ * If either this frame or sinceFrame is an invalid Frame object, or if no
3685
+ * rotation is detected between the two frames, a zero vector is returned.
3686
+ *
3687
+ * @param sinceFrame The starting frame for computing the relative rotation.
3688
+ * @returns A normalized direction Vector representing the axis of the
3689
+ * heuristically determined rotational change between the current frame
3690
+ * and that specified in the sinceFrame parameter.
3691
+ * @since 1.0
3692
+ */
3693
+ LEAP_EXPORT Vector rotationAxis(const Frame& sinceFrame) const;
3694
+
3695
+ /**
3696
+ * The angle of rotation around the rotation axis derived from the overall
3697
+ * rotational motion between the current frame and the specified frame.
3698
+ *
3699
+ * The returned angle is expressed in radians measured clockwise around the
3700
+ * rotation axis (using the right-hand rule) between the start and end frames.
3701
+ * The value is always between 0 and pi radians (0 and 180 degrees).
3702
+ *
3703
+ * \include Frame_rotationAngle.txt
3704
+ *
3705
+ * The Leap Motion software derives frame rotation from the relative change in position and
3706
+ * orientation of all objects detected in the field of view.
3707
+ *
3708
+ * If either this frame or sinceFrame is an invalid Frame object, then the
3709
+ * angle of rotation is zero.
3710
+ *
3711
+ * @param sinceFrame The starting frame for computing the relative rotation.
3712
+ * @returns A positive value containing the heuristically determined
3713
+ * rotational change between the current frame and that specified in the
3714
+ * sinceFrame parameter.
3715
+ * @since 1.0
3716
+ */
3717
+ LEAP_EXPORT float rotationAngle(const Frame& sinceFrame) const;
3718
+
3719
+ /**
3720
+ * The angle of rotation around the specified axis derived from the overall
3721
+ * rotational motion between the current frame and the specified frame.
3722
+ *
3723
+ * The returned angle is expressed in radians measured clockwise around the
3724
+ * rotation axis (using the right-hand rule) between the start and end frames.
3725
+ * The value is always between -pi and pi radians (-180 and 180 degrees).
3726
+ *
3727
+ * \include Frame_rotationAngle_axis.txt
3728
+ *
3729
+ * The Leap Motion software derives frame rotation from the relative change in position and
3730
+ * orientation of all objects detected in the field of view.
3731
+ *
3732
+ * If either this frame or sinceFrame is an invalid Frame object, then the
3733
+ * angle of rotation is zero.
3734
+ *
3735
+ * @param sinceFrame The starting frame for computing the relative rotation.
3736
+ * @param axis The axis to measure rotation around.
3737
+ * @returns A value containing the heuristically determined rotational
3738
+ * change between the current frame and that specified in the sinceFrame
3739
+ * parameter around the given axis.
3740
+ * @since 1.0
3741
+ */
3742
+ LEAP_EXPORT float rotationAngle(const Frame& sinceFrame, const Vector& axis) const;
3743
+
3744
+ /**
3745
+ * The transform matrix expressing the rotation derived from the overall
3746
+ * rotational motion between the current frame and the specified frame.
3747
+ *
3748
+ * \include Frame_rotationMatrix.txt
3749
+ *
3750
+ * The Leap Motion software derives frame rotation from the relative change in position and
3751
+ * orientation of all objects detected in the field of view.
3752
+ *
3753
+ * If either this frame or sinceFrame is an invalid Frame object, then this
3754
+ * method returns an identity matrix.
3755
+ *
3756
+ * @param sinceFrame The starting frame for computing the relative rotation.
3757
+ * @returns A transformation Matrix containing the heuristically determined
3758
+ * rotational change between the current frame and that specified in the
3759
+ * sinceFrame parameter.
3760
+ * @since 1.0
3761
+ */
3762
+ LEAP_EXPORT Matrix rotationMatrix(const Frame& sinceFrame) const;
3763
+
3764
+ /**
3765
+ * The estimated probability that the overall motion between the current
3766
+ * frame and the specified frame is intended to be a rotating motion.
3767
+ *
3768
+ * \include Frame_rotationProbability.txt
3769
+ *
3770
+ * If either this frame or sinceFrame is an invalid Frame object, then this
3771
+ * method returns zero.
3772
+ *
3773
+ * @param sinceFrame The starting frame for computing the relative rotation.
3774
+ * @returns A value between 0 and 1 representing the estimated probability
3775
+ * that the overall motion between the current frame and the specified frame
3776
+ * is intended to be a rotating motion.
3777
+ * @since 1.0
3778
+ */
3779
+ LEAP_EXPORT float rotationProbability(const Frame& sinceFrame) const;
3780
+
3781
+ /**
3782
+ * The scale factor derived from the overall motion between the current frame
3783
+ * and the specified frame.
3784
+ *
3785
+ * The scale factor is always positive. A value of 1.0 indicates no
3786
+ * scaling took place. Values between 0.0 and 1.0 indicate contraction
3787
+ * and values greater than 1.0 indicate expansion.
3788
+ *
3789
+ * \include Frame_scaleFactor.txt
3790
+ *
3791
+ * The Leap Motion software derives scaling from the relative inward or outward motion of
3792
+ * all objects detected in the field of view (independent of translation
3793
+ * and rotation).
3794
+ *
3795
+ * If either this frame or sinceFrame is an invalid Frame object, then this
3796
+ * method returns 1.0.
3797
+ *
3798
+ * @param sinceFrame The starting frame for computing the relative scaling.
3799
+ * @returns A positive value representing the heuristically determined
3800
+ * scaling change ratio between the current frame and that specified in the
3801
+ * sinceFrame parameter.
3802
+ * @since 1.0
3803
+ */
3804
+ LEAP_EXPORT float scaleFactor(const Frame& sinceFrame) const;
3805
+
3806
+ /**
3807
+ * The estimated probability that the overall motion between the current
3808
+ * frame and the specified frame is intended to be a scaling motion.
3809
+ *
3810
+ * \include Frame_scaleProbability.txt
3811
+ *
3812
+ * If either this frame or sinceFrame is an invalid Frame object, then this
3813
+ * method returns zero.
3814
+ *
3815
+ * @param sinceFrame The starting frame for computing the relative scaling.
3816
+ * @returns A value between 0 and 1 representing the estimated probability
3817
+ * that the overall motion between the current frame and the specified frame
3818
+ * is intended to be a scaling motion.
3819
+ * @since 1.0
3820
+ */
3821
+ LEAP_EXPORT float scaleProbability(const Frame& sinceFrame) const;
3822
+
3823
+ /**
3824
+ * The current InteractionBox for the frame. See the InteractionBox class
3825
+ * documentation for more details on how this class should be used.
3826
+ *
3827
+ * \include Frame_interactionBox.txt
3828
+ *
3829
+ * @returns The current InteractionBox object.
3830
+ * @since 1.0
3831
+ */
3832
+ LEAP_EXPORT InteractionBox interactionBox() const;
3833
+
3834
+ /**
3835
+ * The instantaneous framerate.
3836
+ *
3837
+ * The rate at which the Leap Motion software is providing frames of data
3838
+ * (in frames per second). The framerate can fluctuate depending on available computing
3839
+ * resources, activity within the device field of view, software tracking settings,
3840
+ * and other factors.
3841
+ *
3842
+ * \include Frame_currentFramesPerSecond.txt
3843
+ *
3844
+ * @returns An estimate of frames per second of the Leap Motion Controller.
3845
+ * @since 1.0
3846
+ */
3847
+ LEAP_EXPORT float currentFramesPerSecond() const;
3848
+
3849
+ /**
3850
+ * Reports whether this Frame instance is valid.
3851
+ *
3852
+ * A valid Frame is one generated by the Leap::Controller object that contains
3853
+ * tracking data for all detected entities. An invalid Frame contains no
3854
+ * actual tracking data, but you can call its functions without risk of a
3855
+ * null pointer exception. The invalid Frame mechanism makes it more
3856
+ * convenient to track individual data across the frame history. For example,
3857
+ * you can invoke:
3858
+ *
3859
+ * \include Frame_Valid_Chain.txt
3860
+ *
3861
+ * for an arbitrary Frame history value, "n", without first checking whether
3862
+ * frame(n) returned a null object. (You should still check that the
3863
+ * returned Finger instance is valid.)
3864
+ *
3865
+ * @returns True, if this is a valid Frame object; false otherwise.
3866
+ * @since 1.0
3867
+ */
3868
+ LEAP_EXPORT bool isValid() const;
3869
+
3870
+ /**
3871
+ * Returns an invalid Frame object.
3872
+ *
3873
+ * You can use the instance returned by this function in comparisons testing
3874
+ * whether a given Frame instance is valid or invalid. (You can also use the
3875
+ * Frame::isValid() function.)
3876
+ *
3877
+ * \include Frame_Invalid_Demo.txt
3878
+ *
3879
+ * @returns The invalid Frame instance.
3880
+ * @since 1.0
3881
+ */
3882
+ LEAP_EXPORT static const Frame& invalid();
3883
+
3884
+ /**
3885
+ * Compare Frame object equality.
3886
+ *
3887
+ * \include Frame_operator_equals.txt
3888
+ *
3889
+ * Two Frame objects are equal if and only if both Frame objects represent
3890
+ * the exact same frame of tracking data and both Frame objects are valid.
3891
+ * @since 1.0
3892
+ */
3893
+ LEAP_EXPORT bool operator==(const Frame&) const;
3894
+
3895
+ /**
3896
+ * Compare Frame object inequality.
3897
+ *
3898
+ * \include Frame_operator_not_equals.txt
3899
+ *
3900
+ * Two Frame objects are equal if and only if both Frame objects represent
3901
+ * the exact same frame of tracking data and both Frame objects are valid.
3902
+ * @since 1.0
3903
+ */
3904
+ LEAP_EXPORT bool operator!=(const Frame&) const;
3905
+
3906
+ /**
3907
+ * Writes a brief, human readable description of the Frame object to an output stream.
3908
+ *
3909
+ * \include Frame_operator_stream.txt
3910
+ *
3911
+ * @since 1.0
3912
+ */
3913
+ LEAP_EXPORT friend std::ostream& operator<<(std::ostream&, const Frame&);
3914
+
3915
+ /**
3916
+ * A string containing a brief, human readable description of the Frame object.
3917
+ *
3918
+ * @returns A description of the Frame as a string.
3919
+ * @since 1.0
3920
+ */
3921
+ LEAP_EXPORT std::string toString() const;
3922
+ };
3923
+
3924
+ /**
3925
+ * The Config class provides access to Leap Motion system configuration information.
3926
+ *
3927
+ * You can get and set gesture configuration parameters using the Config object
3928
+ * obtained from a connected Controller object. The key strings required to
3929
+ * identify a configuration parameter include:
3930
+ *
3931
+ * Key string | Value type | Default value | Units
3932
+ * -----------|------------|---------------|------
3933
+ * Gesture.Circle.MinRadius | float | 5.0 | mm
3934
+ * Gesture.Circle.MinArc | float | 1.5*pi | radians
3935
+ * Gesture.Swipe.MinLength | float | 150 | mm
3936
+ * Gesture.Swipe.MinVelocity | float | 1000 | mm/s
3937
+ * Gesture.KeyTap.MinDownVelocity | float | 50 | mm/s
3938
+ * Gesture.KeyTap.HistorySeconds | float | 0.1 | s
3939
+ * Gesture.KeyTap.MinDistance | float | 3.0 | mm
3940
+ * Gesture.ScreenTap.MinForwardVelocity | float | 50 | mm/s
3941
+ * Gesture.ScreenTap.HistorySeconds | float | 0.1 | s
3942
+ * Gesture.ScreenTap.MinDistance | float | 5.0 | mm
3943
+ *
3944
+ * After setting a configuration value, you must call the Config::save method
3945
+ * to commit the changes. The configuration value changes are not persistent;
3946
+ * your application needs to set the values everytime it runs.
3947
+ *
3948
+ * @see CircleGesture
3949
+ * @see KeyTapGesture
3950
+ * @see ScreenTapGesture
3951
+ * @see SwipeGesture
3952
+ * @since 1.0
3953
+ */
3954
+ class Config : public Interface {
3955
+ public:
3956
+ /**
3957
+ * Constructs a Config object.
3958
+ * Do not create your own Config objects. Get a Config object using
3959
+ * the Controller::config() function.
3960
+ *
3961
+ * \include Config_Constructor.txt
3962
+ *
3963
+ * @since 1.0
3964
+ */
3965
+ LEAP_EXPORT Config();
3966
+
3967
+ /**
3968
+ * Enumerates the possible data types for configuration values.
3969
+ *
3970
+ * The Config::type() function returns an item from the ValueType enumeration.
3971
+ * @since 1.0
3972
+ */
3973
+ enum ValueType {
3974
+ /**
3975
+ * The data type is unknown.
3976
+ * @since 1.0
3977
+ */
3978
+ TYPE_UNKNOWN = 0,
3979
+ /**
3980
+ * A boolean value.
3981
+ * @since 1.0
3982
+ */
3983
+ TYPE_BOOLEAN = 1,
3984
+ /**
3985
+ * A 32-bit integer.
3986
+ * @since 1.0
3987
+ */
3988
+ TYPE_INT32 = 2,
3989
+ /**
3990
+ * A floating-point number.
3991
+ * @since 1.0
3992
+ */
3993
+ TYPE_FLOAT = 6,
3994
+ /**
3995
+ * A string of characters.
3996
+ * @since 1.0
3997
+ */
3998
+ TYPE_STRING = 8
3999
+ };
4000
+
4001
+ /**
4002
+ * Reports the natural data type for the value related to the specified key.
4003
+ *
4004
+ * \include Config_type.txt
4005
+ *
4006
+ * @param key The key for the looking up the value in the configuration dictionary.
4007
+ * @returns The native data type of the value, that is, the type that does not
4008
+ * require a data conversion.
4009
+ * @since 1.0
4010
+ */
4011
+ LEAP_EXPORT ValueType type(const std::string& key) const;
4012
+
4013
+ /**
4014
+ * Gets the boolean representation for the specified key.
4015
+ *
4016
+ * \include Config_getBool.txt
4017
+ *
4018
+ * @since 1.0
4019
+ */
4020
+ LEAP_EXPORT bool getBool(const std::string& key) const;
4021
+
4022
+ /** Sets the boolean representation for the specified key.
4023
+ *
4024
+ * \include Config_setBool.txt
4025
+ *
4026
+ * @returns true on success, false on failure.
4027
+ * @since 1.0
4028
+ */
4029
+ LEAP_EXPORT bool setBool(const std::string& key, bool value);
4030
+
4031
+ /**
4032
+ * Gets the 32-bit integer representation for the specified key.
4033
+ *
4034
+ * \include Config_getInt32.txt
4035
+ *
4036
+ * @since 1.0
4037
+ */
4038
+ LEAP_EXPORT int32_t getInt32(const std::string& key) const;
4039
+
4040
+ /** Sets the 32-bit integer representation for the specified key.
4041
+ *
4042
+ * \include Config_setInt32.txt
4043
+ *
4044
+ * @returns true on success, false on failure.
4045
+ * @since 1.0
4046
+ */
4047
+ LEAP_EXPORT bool setInt32(const std::string& key, int32_t value);
4048
+
4049
+ /**
4050
+ * Gets the floating point representation for the specified key.
4051
+ *
4052
+ * \include Config_getFloat.txt
4053
+ *
4054
+ * @since 1.0
4055
+ */
4056
+ LEAP_EXPORT float getFloat(const std::string& key) const;
4057
+
4058
+ /** Sets the floating point representation for the specified key.
4059
+ *
4060
+ * \include Config_setFloat.txt
4061
+ *
4062
+ * @returns true on success, false on failure.
4063
+ * @since 1.0
4064
+ */
4065
+ LEAP_EXPORT bool setFloat(const std::string& key, float value);
4066
+
4067
+ /**
4068
+ * Gets the string representation for the specified key.
4069
+ *
4070
+ * \include Config_getString.txt
4071
+ *
4072
+ * @since 1.0
4073
+ */
4074
+ LEAP_EXPORT std::string getString(const std::string& key) const;
4075
+
4076
+ /** Sets the string representation for the specified key.
4077
+ *
4078
+ * \include Config_setString.txt
4079
+ *
4080
+ * @returns true on success, false on failure.
4081
+ * @since 1.0
4082
+ */
4083
+ LEAP_EXPORT bool setString(const std::string& key, const std::string& value);
4084
+
4085
+ /**
4086
+ * Saves the current state of the config.
4087
+ *
4088
+ * Call ``save()`` after making a set of configuration changes. The
4089
+ * ``save()`` function transfers the configuration changes to the Leap Motion
4090
+ * service. The configuration value changes are not persistent; your
4091
+ * application must set the values everytime it runs.
4092
+ *
4093
+ * \include Config_save.txt
4094
+ *
4095
+ * @returns true on success, false on failure.
4096
+ * @since 1.0
4097
+ */
4098
+ LEAP_EXPORT bool save();
4099
+ };
4100
+
4101
+ /**
4102
+ * The Controller class is your main interface to the Leap Motion Controller.
4103
+ *
4104
+ * Create an instance of this Controller class to access frames of tracking
4105
+ * data and configuration information. Frame data can be polled at any time
4106
+ * using the Controller::frame() function. Call frame() or frame(0) to get the
4107
+ * most recent frame. Set the history parameter to a positive integer to access
4108
+ * previous frames. A controller stores up to 60 frames in its frame history.
4109
+ *
4110
+ * Polling is an appropriate strategy for applications which already have an
4111
+ * intrinsic update loop, such as a game. You can also add an instance of a
4112
+ * subclass of Leap::Listener to the controller to handle events as they occur.
4113
+ * The Controller dispatches events to the listener upon initialization and exiting,
4114
+ * on connection changes, when the application gains and loses the OS input focus,
4115
+ * and when a new frame of tracking data is available.
4116
+ * When these events occur, the controller object invokes the appropriate
4117
+ * callback function defined in your subclass of Listener.
4118
+ *
4119
+ * To access frames of tracking data as they become available:
4120
+ *
4121
+ * 1. Implement a subclass of the Listener class and override the
4122
+ * Listener::onFrame() function.
4123
+ * 2. In your Listener::onFrame() function, call the Controller::frame()
4124
+ * function to access the newest frame of tracking data.
4125
+ * 3. To start receiving frames, create a Controller object and add an instance
4126
+ * of the Listener subclass to the Controller::addListener() function.
4127
+ *
4128
+ * When an instance of a Listener subclass is added to a Controller object,
4129
+ * it calls the Listener::onInit() function when the listener is ready for use.
4130
+ * When a connection is established between the controller and the Leap Motion software,
4131
+ * the controller calls the Listener::onConnect() function. At this point, your
4132
+ * application will start receiving frames of data. The controller calls the
4133
+ * Listener::onFrame() function each time a new frame is available. If the
4134
+ * controller loses its connection with the Leap Motion software or device for any
4135
+ * reason, it calls the Listener::onDisconnect() function. If the listener is
4136
+ * removed from the controller or the controller is destroyed, it calls the
4137
+ * Listener::onExit() function. At that point, unless the listener is added to
4138
+ * another controller again, it will no longer receive frames of tracking data.
4139
+ *
4140
+ * The Controller object is multithreaded and calls the Listener functions on
4141
+ * its own thread, not on an application thread.
4142
+ * @since 1.0
4143
+ */
4144
+ class Controller : public Interface {
4145
+ public:
4146
+ // For internal use only.
4147
+ Controller(ControllerImplementation*);
4148
+
4149
+ /**
4150
+ * Constructs a Controller object.
4151
+ *
4152
+ * When creating a Controller object, you may optionally pass in a
4153
+ * reference to an instance of a subclass of Leap::Listener. Alternatively,
4154
+ * you may add a listener using the Controller::addListener() function.
4155
+ *
4156
+ * @since 1.0
4157
+ */
4158
+ LEAP_EXPORT Controller();
4159
+ LEAP_EXPORT virtual ~Controller();
4160
+ /**
4161
+ * Constructs a Controller object.
4162
+ *
4163
+ * When creating a Controller object, you may optionally pass in a
4164
+ * reference to an instance of a subclass of Leap::Listener. Alternatively,
4165
+ * you may add a listener using the Controller::addListener() function.
4166
+ *
4167
+ * \include Controller_Controller.txt
4168
+ *
4169
+ * @param listener An instance of Leap::Listener implementing the callback
4170
+ * functions for the Leap Motion events you want to handle in your application.
4171
+ * @since 1.0
4172
+ */
4173
+ LEAP_EXPORT Controller(Listener& listener);
4174
+
4175
+ /**
4176
+ * Reports whether this Controller is connected to the Leap Motion service and
4177
+ * the Leap Motion hardware is plugged in.
4178
+ *
4179
+ * When you first create a Controller object, isConnected() returns false.
4180
+ * After the controller finishes initializing and connects to the Leap Motion
4181
+ * software and if the Leap Motion hardware is plugged in, isConnected() returns true.
4182
+ *
4183
+ * You can either handle the onConnect event using a Listener instance or
4184
+ * poll the isConnected() function if you need to wait for your
4185
+ * application to be connected to the Leap Motion software before performing some other
4186
+ * operation.
4187
+ *
4188
+ * \include Controller_isConnected.txt
4189
+ * @returns True, if connected; false otherwise.
4190
+ * @since 1.0
4191
+ */
4192
+ LEAP_EXPORT bool isConnected() const;
4193
+
4194
+ /**
4195
+ * Reports whether this application is the focused, foreground application.
4196
+ *
4197
+ * By default, your application only receives tracking information from
4198
+ * the Leap Motion controller when it has the operating system input focus.
4199
+ * To receive tracking data when your application is in the background,
4200
+ * the background frames policy flag must be set.
4201
+ *
4202
+ * \include Controller_hasFocus.txt
4203
+ *
4204
+ * @returns True, if application has focus; false otherwise.
4205
+ *
4206
+ * @see Controller::setPolicyFlags()
4207
+ * @since 1.0
4208
+ */
4209
+ LEAP_EXPORT bool hasFocus() const;
4210
+
4211
+ /**
4212
+ * The supported controller policies.
4213
+ *
4214
+ * Currently, the only supported policy is the background frames policy,
4215
+ * which determines whether your application receives frames of tracking
4216
+ * data when it is not the focused, foreground application.
4217
+ * @since 1.0
4218
+ */
4219
+ enum PolicyFlag {
4220
+ /**
4221
+ * The default policy.
4222
+ * @since 1.0
4223
+ */
4224
+ POLICY_DEFAULT = 0,
4225
+ /**
4226
+ * Receive background frames.
4227
+ * @since 1.0
4228
+ */
4229
+ POLICY_BACKGROUND_FRAMES = (1 << 0)
4230
+ };
4231
+
4232
+ /**
4233
+ * Gets the active policy settings.
4234
+ *
4235
+ * Use this function to determine the current policy state.
4236
+ * Keep in mind that setting a policy flag is asynchronous, so changes are
4237
+ * not effective immediately after calling setPolicyFlag(). In addition, a
4238
+ * policy request can be declined by the user. You should always set the
4239
+ * policy flags required by your application at startup and check that the
4240
+ * policy change request was successful after an appropriate interval.
4241
+ *
4242
+ * If the controller object is not connected to the Leap Motion software, then the default
4243
+ * policy state is returned.
4244
+ *
4245
+ * \include Controller_policyFlags.txt
4246
+ *
4247
+ * @returns The current policy flags.
4248
+ * @since 1.0
4249
+ */
4250
+ LEAP_EXPORT PolicyFlag policyFlags() const;
4251
+
4252
+ /**
4253
+ * Requests a change in policy.
4254
+ *
4255
+ * A request to change a policy is subject to user approval and a policy
4256
+ * can be changed by the user at any time (using the Leap Motion settings dialog).
4257
+ * The desired policy flags must be set every time an application runs.
4258
+ *
4259
+ * Policy changes are completed asynchronously and, because they are subject
4260
+ * to user approval, may not complete successfully. Call
4261
+ * Controller::policyFlags() after a suitable interval to test whether
4262
+ * the change was accepted.
4263
+ *
4264
+ * Currently, the background frames policy is the only policy supported.
4265
+ * The background frames policy determines whether an application
4266
+ * receives frames of tracking data while in the background. By
4267
+ * default, the Leap Motion software only sends tracking data to the foreground application.
4268
+ * Only applications that need this ability should request the background
4269
+ * frames policy.
4270
+ *
4271
+ * At this time, you can use the Leap Motion Settings dialog to
4272
+ * globally enable or disable the background frames policy. However,
4273
+ * each application that needs tracking data while in the background
4274
+ * must also set the policy flag using this function.
4275
+ *
4276
+ * This function can be called before the Controller object is connected,
4277
+ * but the request will be sent to the Leap Motion software after the Controller connects.
4278
+ *
4279
+ * \include Controller_setPolicyFlags.txt
4280
+ *
4281
+ * @param flags A PolicyFlag value indicating the policies to request.
4282
+ * @since 1.0
4283
+ */
4284
+ LEAP_EXPORT void setPolicyFlags(PolicyFlag flags) const;
4285
+
4286
+ /**
4287
+ * Adds a listener to this Controller.
4288
+ *
4289
+ * The Controller dispatches Leap Motion events to each associated listener. The
4290
+ * order in which listener callback functions are invoked is arbitrary. If
4291
+ * you pass a listener to the Controller's constructor function, it is
4292
+ * automatically added to the list and can be removed with the
4293
+ * Controller::removeListener() function.
4294
+ *
4295
+ * \include Controller_addListener.txt
4296
+ *
4297
+ * @param listener A subclass of Leap::Listener implementing the callback
4298
+ * functions for the Leap Motion events you want to handle in your application.
4299
+ * @returns Whether or not the listener was successfully added to the list
4300
+ * of listeners.
4301
+ * @since 1.0
4302
+ */
4303
+ LEAP_EXPORT bool addListener(Listener& listener);
4304
+
4305
+ /**
4306
+ * Remove a listener from the list of listeners that will receive Leap Motion
4307
+ * events. A listener must be removed if its lifetime is shorter than the
4308
+ * controller to which it is listening.
4309
+ *
4310
+ * \include Controller_removeListener.txt
4311
+ *
4312
+ * @param listener The listener to remove.
4313
+ * @returns Whether or not the listener was successfully removed from the
4314
+ * list of listeners.
4315
+ * @since 1.0
4316
+ */
4317
+ LEAP_EXPORT bool removeListener(Listener& listener);
4318
+
4319
+ /**
4320
+ * Returns a frame of tracking data from the Leap Motion software. Use the optional
4321
+ * history parameter to specify which frame to retrieve. Call frame() or
4322
+ * frame(0) to access the most recent frame; call frame(1) to access the
4323
+ * previous frame, and so on. If you use a history value greater than the
4324
+ * number of stored frames, then the controller returns an invalid frame.
4325
+ *
4326
+ * \include Controller_Frame_1.txt
4327
+ *
4328
+ * You can call this function in your Listener implementation to get frames at the
4329
+ * Leap Motion frame rate:
4330
+ *
4331
+ * \include Controller_Listener_onFrame.txt
4332
+
4333
+ * @param history The age of the frame to return, counting backwards from
4334
+ * the most recent frame (0) into the past and up to the maximum age (59).
4335
+ * @returns The specified frame; or, if no history parameter is specified,
4336
+ * the newest frame. If a frame is not available at the specified history
4337
+ * position, an invalid Frame is returned.
4338
+ * @since 1.0
4339
+ */
4340
+ LEAP_EXPORT Frame frame(int history = 0) const;
4341
+
4342
+ /**
4343
+ * Returns a Config object, which you can use to query the Leap Motion system for
4344
+ * configuration information.
4345
+ *
4346
+ * \include Controller_config.txt
4347
+ *
4348
+ * @since 1.0
4349
+ */
4350
+ LEAP_EXPORT Config config() const;
4351
+
4352
+ /**
4353
+ * The list of currently attached and recognized Leap Motion controller devices.
4354
+ *
4355
+ * The Device objects in the list describe information such as the range and
4356
+ * tracking volume.
4357
+ *
4358
+ * \include Controller_devices.txt
4359
+ *
4360
+ * Currently, the Leap Motion Controller only recognizes a single device at a time.
4361
+ * @since 1.0
4362
+ */
4363
+ LEAP_EXPORT DeviceList devices() const;
4364
+
4365
+ /*
4366
+ * The Screen and ScreenList classes are currently unsupported.
4367
+ *
4368
+ * We are re-evaluating this feature due to the cumbersome location process
4369
+ * required to use it and the amount of confusion about the feature's purpose.
4370
+ *
4371
+ * The list of screens whose positions have been identified by using the
4372
+ * Leap Motion Screen Locator.
4373
+ *
4374
+ * The list always contains at least one entry representing the default
4375
+ * screen. If the user has not registered the location of this default
4376
+ * screen, then the coordinates, directions, and other values reported by
4377
+ * the functions in its Screen object will not be accurate. Other monitor
4378
+ * screens only appear in the list if their positions have been registered
4379
+ * using the Leap Motion Screen Locator.
4380
+ *
4381
+ * A Screen object represents the position and orientation of a display
4382
+ * monitor screen within the Leap Motion coordinate system.
4383
+ * For example, if the screen location is known, you can get Leap Motion coordinates
4384
+ * for the bottom-left corner of the screen. Registering the screen
4385
+ * location also allows the Leap Motion software to calculate the point on the screen at
4386
+ * which a finger or tool is pointing.
4387
+ *
4388
+ * A user can run the Screen Locator tool from the Leap Motion
4389
+ * Settings dialog. Avoid assuming that a screen location is known or that
4390
+ * an existing position is still correct. The registered position is only
4391
+ * valid as long as the relative position of the Leap Motion Controller and the
4392
+ * monitor screen remain constant.
4393
+ *
4394
+ * \include Screen_Closest_1.txt
4395
+ *
4396
+ * @returns ScreenList A list containing the screens whose positions have
4397
+ * been registered by the user using the Screen Locator tool.
4398
+ * The list always contains at least one entry representing the default
4399
+ * monitor. If the user has not run the Screen Locator or has moved the Leap
4400
+ * Motion device or screen since running it, the Screen object for this entry
4401
+ * only contains default values.
4402
+ * @since 1.0
4403
+ */
4404
+ LEAP_EXPORT ScreenList locatedScreens() const;
4405
+
4406
+ /**
4407
+ * Enables or disables reporting of a specified gesture type.
4408
+ *
4409
+ * By default, all gesture types are disabled. When disabled, gestures of the
4410
+ * disabled type are never reported and will not appear in the frame
4411
+ * gesture list.
4412
+ *
4413
+ * \include Controller_enableGesture.txt
4414
+ *
4415
+ * As a performance optimization, only enable recognition for the types
4416
+ * of movements that you use in your application.
4417
+ *
4418
+ * @param type The type of gesture to enable or disable. Must be a
4419
+ * member of the Gesture::Type enumeration.
4420
+ * @param enable True, to enable the specified gesture type; False,
4421
+ * to disable.
4422
+ * @see Controller::isGestureEnabled()
4423
+ * @since 1.0
4424
+ */
4425
+ LEAP_EXPORT void enableGesture(Gesture::Type type, bool enable = true) const;
4426
+
4427
+ /**
4428
+ * Reports whether the specified gesture type is enabled.
4429
+ *
4430
+ * \include Controller_isGestureEnabled.txt
4431
+ *
4432
+ * @return True, if the specified type is enabled; false, otherwise.
4433
+ * @see Controller::enableGesture()
4434
+ * @since 1.0
4435
+ */
4436
+ LEAP_EXPORT bool isGestureEnabled(Gesture::Type type) const;
4437
+ };
4438
+
4439
+ /**
4440
+ * The Listener class defines a set of callback functions that you can
4441
+ * override in a subclass to respond to events dispatched by the Controller object.
4442
+ *
4443
+ * To handle Leap Motion events, create an instance of a Listener subclass and assign
4444
+ * it to the Controller instance. The Controller calls the relevant Listener
4445
+ * callback function when an event occurs, passing in a reference to itself.
4446
+ * You do not have to implement callbacks for events you do not want to handle.
4447
+ *
4448
+ * The Controller object calls these Listener functions from a thread created
4449
+ * by the Leap Motion library, not the thread used to create or set the Listener instance.
4450
+ * @since 1.0
4451
+ */
4452
+ class Listener {
4453
+ public:
4454
+ /**
4455
+ * Constructs a Listener object.
4456
+ * @since 1.0
4457
+ */
4458
+ LEAP_EXPORT Listener() {}
4459
+
4460
+ /**
4461
+ * Destroys this Listener object.
4462
+ */
4463
+ LEAP_EXPORT virtual ~Listener() {}
4464
+
4465
+ /**
4466
+ * Called once, when this Listener object is newly added to a Controller.
4467
+ *
4468
+ * \include Listener_onInit.txt
4469
+ *
4470
+ * @param controller The Controller object invoking this callback function.
4471
+ * @since 1.0
4472
+ */
4473
+ LEAP_EXPORT virtual void onInit(const Controller&) {}
4474
+
4475
+ /**
4476
+ * Called when the Controller object connects to the Leap Motion software and
4477
+ * the Leap Motion hardware device is plugged in,
4478
+ * or when this Listener object is added to a Controller that is already connected.
4479
+ *
4480
+ * \include Listener_onConnect.txt
4481
+ *
4482
+ * @param controller The Controller object invoking this callback function.
4483
+ * @since 1.0
4484
+ */
4485
+ LEAP_EXPORT virtual void onConnect(const Controller&) {}
4486
+
4487
+ /**
4488
+ * Called when the Controller object disconnects from the Leap Motion software or
4489
+ * the Leap Motion hardware is unplugged.
4490
+ * The controller can disconnect when the Leap Motion device is unplugged, the
4491
+ * user shuts the Leap Motion software down, or the Leap Motion software encounters an
4492
+ * unrecoverable error.
4493
+ *
4494
+ * \include Listener_onDisconnect.txt
4495
+ *
4496
+ * Note: When you launch a Leap-enabled application in a debugger, the
4497
+ * Leap Motion library does not disconnect from the application. This is to allow
4498
+ * you to step through code without losing the connection because of time outs.
4499
+ *
4500
+ * @param controller The Controller object invoking this callback function.
4501
+ * @since 1.0
4502
+ */
4503
+ LEAP_EXPORT virtual void onDisconnect(const Controller&) {}
4504
+
4505
+ /**
4506
+ * Called when this Listener object is removed from the Controller
4507
+ * or the Controller instance is destroyed.
4508
+ *
4509
+ * \include Listener_onExit.txt
4510
+ *
4511
+ * @param controller The Controller object invoking this callback function.
4512
+ * @since 1.0
4513
+ */
4514
+ LEAP_EXPORT virtual void onExit(const Controller&) {}
4515
+
4516
+ /**
4517
+ * Called when a new frame of hand and finger tracking data is available.
4518
+ * Access the new frame data using the Controller::frame() function.
4519
+ *
4520
+ * \include Listener_onFrame.txt
4521
+ *
4522
+ * Note, the Controller skips any pending onFrame events while your
4523
+ * onFrame handler executes. If your implementation takes too long to return,
4524
+ * one or more frames can be skipped. The Controller still inserts the skipped
4525
+ * frames into the frame history. You can access recent frames by setting
4526
+ * the history parameter when calling the Controller::frame() function.
4527
+ * You can determine if any pending onFrame events were skipped by comparing
4528
+ * the ID of the most recent frame with the ID of the last received frame.
4529
+ *
4530
+ * @param controller The Controller object invoking this callback function.
4531
+ * @since 1.0
4532
+ */
4533
+ LEAP_EXPORT virtual void onFrame(const Controller&) {}
4534
+
4535
+ /**
4536
+ * Called when this application becomes the foreground application.
4537
+ *
4538
+ * Only the foreground application receives tracking data from the Leap
4539
+ * Motion Controller. This function is only called when the controller
4540
+ * object is in a connected state.
4541
+ *
4542
+ * \include Listener_onFocusGained.txt
4543
+ *
4544
+ * @param controller The Controller object invoking this callback function.
4545
+ * @since 1.0
4546
+ */
4547
+ LEAP_EXPORT virtual void onFocusGained(const Controller&) {}
4548
+
4549
+ /**
4550
+ * Called when this application loses the foreground focus.
4551
+ *
4552
+ * Only the foreground application receives tracking data from the Leap
4553
+ * Motion Controller. This function is only called when the controller
4554
+ * object is in a connected state.
4555
+ *
4556
+ * \include Listener_onFocusLost.txt
4557
+ *
4558
+ * @param controller The Controller object invoking this callback function.
4559
+ * @since 1.0
4560
+ */
4561
+ LEAP_EXPORT virtual void onFocusLost(const Controller&) {}
4562
+ };
4563
+
4564
+ }
4565
+
4566
+ #endif // __Leap_h__