package Ġio . github . scene view . ar . ar core Ċ Ċ import Ġandroid . view . Motion Event Ċ import Ġcom . google . ar . core .* Ċ import Ġio . github . scene view . utils . Frame Time Ċ Ċ /** Ċ Ġ* Ġ### ĠCapt ures Ġthe Ġstate Ġand Ġchanges Ġto Ġthe ĠAR Ġsystem Ġfrom Ġa Ġcall Ġto Ġ[ Session . update ] Ċ Ġ*/ Ċ data Ġclass ĠAr Frame ( ĊĠĠĠ Ġval Ġsession : ĠAr Session , ĊĠĠĠ Ġval Ġtime : ĠFrame Time , ĊĠĠĠ Ġval Ġframe : ĠFrame Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġcamera : ĠCamera Ġby Ġlazy Ġ{ Ġframe . camera Ġ} ĊĊĠĠĠ Ġ// ĠTODO Ġ: ĠMake Ġa Ġquick Ġtest Ġwith Ġandroid Camera Timestamp ĊĠĠĠ Ġval Ġupdated Track ables : ĠList < Track able > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġframe . get Updated Track ables ( Track able :: class . java ). toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ### ĠPerforms Ġa Ġray Ġcast Ġto Ġretrieve Ġthe Ġhit Ġtrack ables ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠPerforms Ġa Ġray Ġcast Ġfrom Ġthe Ġuser 's Ġdevice Ġin Ġthe Ġdirection Ġof Ġthe Ġgiven Ġlocation Ġin Ġthe ĊĠĠĠĠ Ġ* Ġcamera Ġview . ĠInter sections Ġwith Ġdetected Ġscene Ġgeometry Ġare Ġreturned , Ġsorted Ġby Ġdistance Ġfrom ĊĠĠĠĠ Ġ* Ġthe Ġdevice ; Ġthe Ġnearest Ġintersection Ġis Ġreturned Ġfirst . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWhen Ġusing : ĊĠĠĠĠ Ġ* Ġ- Ġ** Plane Ġand / or ĠDepth :** ĠSign ificant Ġge ometric Ġle ew ay Ġis Ġgiven Ġwhen Ġreturning Ġhit Ġresults . ĊĠĠĠĠ Ġ* ĠFor Ġexample , Ġa Ġplane Ġhit Ġmay Ġbe Ġgenerated Ġif Ġthe Ġray Ġcame Ġclose , Ġbut Ġdid Ġnot Ġactually Ġhit ĊĠĠĠĠ Ġ* Ġwithin Ġthe Ġplane Ġext ents Ġor Ġplane Ġbounds ĊĠĠĠĠ Ġ* Ġ[ Plane . is Pose In Ext ents ][ com . google . ar . core . Plane . is Pose In Ext ents ] Ġand ĊĠĠĠĠ Ġ* Ġ[ Plane . is Pose In Polygon ][ com . google . ar . core . Plane . is Pose In Polygon ] Ġcan Ġbe Ġused Ġto Ġdetermine ĊĠĠĠĠ Ġ* Ġthese Ġcases ). ĠA Ġpoint Ġ( point Ġcloud ) Ġhit Ġis Ġgenerated Ġwhen Ġa Ġpoint Ġis Ġroughly Ġwithin Ġone ĊĠĠĠĠ Ġ* Ġfinger - width Ġof Ġthe Ġprovided Ġscreen Ġcoordinates . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ- Ġ** Instant ĠPl acement :** ĠRay Ġcast Ġcan Ġreturn Ġa Ġresult Ġbefore ĠAR Core Ġestab lishes Ġfull ĊĠĠĠĠ Ġ* Ġtracking . ĠThe Ġpose Ġand Ġapparent Ġscale Ġof Ġattached Ġobjects Ġdepends Ġon Ġthe ĊĠĠĠĠ Ġ* Ġ[ Instant Placement Point ][ com . google . ar . core . Instant Placement Point ] Ġtracking Ġmethod Ġand Ġthe ĊĠĠĠĠ Ġ* Ġprovided Ġapproximate Distance Met ers . ĠA Ġdiscussion Ġof Ġthe Ġdifferent Ġtracking Ġmethods Ġand Ġthe ĊĠĠĠĠ Ġ* Ġeffects Ġof Ġapparent Ġobject Ġscale Ġare Ġdescribed Ġin ĊĠĠĠĠ Ġ* Ġ[ Instant Placement Point ][ com . google . ar . core . Instant Placement Point ]. ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġwill Ġsucceed Ġonly Ġif ĊĠĠĠĠ Ġ* Ġ[ Config . Instant Placement Mode ][ com . google . ar . core . Config . Instant Placement Mode ] Ġis ĊĠĠĠĠ Ġ* Ġ[ com . google . ar . core . Config . Instant Placement Mode . LOCAL _ Y _ UP ] Ġin Ġthe ĠAR Core Ġsession ĊĠĠĠĠ Ġ* Ġconfiguration , Ġthe ĠAR Core Ġsession Ġtracking Ġstate Ġis ĊĠĠĠĠ Ġ* Ġ[ Tracking State . TRACK ING ][ com . google . ar . core . Tracking State . TRACK ING ] Ġ}, Ġand Ġthere Ġare ĊĠĠĠĠ Ġ* Ġsufficient Ġfeature Ġpoints Ġto Ġtrack Ġthe Ġpoint Ġin Ġscreen Ġspace . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ- Ġ**[ Session . Feature . FRONT _ CAMERA ][ com . google . ar . core . Session . Feature . FRONT _ CAMERA ]: ** ĊĠĠĠĠ Ġ* ĠThe Ġreturned Ġhit Ġresult Ġlist Ġwill Ġalways Ġbe Ġempty , Ġas Ġthe Ġcamera Ġis Ġnot ĊĠĠĠĠ Ġ* Ġ[ Tracking State . TRACK ING ][ com . google . ar . core . Tracking State . TRACK ING ]. ĠHit Ġtesting Ġagainst ĊĠĠĠĠ Ġ* Ġtracked Ġfaces Ġis Ġnot Ġcurrently Ġsupported . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote : ĠIn ĠAR Core Ġ 1 . 2 4 . 0 Ġor Ġlater Ġon Ġsupported Ġdevices , Ġif Ġdepth Ġis Ġenabled Ġby Ġcalling ĊĠĠĠĠ Ġ* Ġ[ com . google . ar . core . Config . set Depth Mode ] Ġwith Ġthe Ġvalue ĊĠĠĠĠ Ġ* Ġ[ Config . Depth Mode . AUT OM AT IC ][ com . google . ar . core . Config . Depth Mode . AUT OM AT IC ], Ġthe Ġreturned ĊĠĠĠĠ Ġ* Ġlist Ġincludes Ġ[ com . google . ar . core . Depth Point ] Ġvalues Ġsampled Ġfrom Ġthe Ġlatest Ġcomputed Ġdepth ĊĠĠĠĠ Ġ* Ġimage . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġx Px Ġx Ġview Ġcoordinate Ġin Ġpixels ĊĠĠĠĠ Ġ* Ġ* Default : ĠThe Ġview Ġwidth Ġcenter * ĊĠĠĠĠ Ġ* Ġ@ param Ġy Px Ġy Ġview Ġcoordinate Ġin Ġpixel sl s ĊĠĠĠĠ Ġ* Ġ* Default : ĠThe Ġview Ġheight Ġcenter * ĊĠĠĠĠ Ġ* Ġ@ param Ġapproximate Distance Met ers Ġthe Ġdistance Ġat Ġwhich Ġto Ġcreate Ġan ĊĠĠĠĠ Ġ* Ġ[ Instant Placement Point ][ com . google . ar . core . Instant Placement Point ]. ĠThis Ġis Ġonly Ġused Ġwhile ĊĠĠĠĠ Ġ* Ġthe Ġtracking Ġmethod Ġfor Ġthe Ġreturned Ġpoint Ġis ĊĠĠĠĠ Ġ* Ġ[ Instant Placement Point . Tracking Method . SCREEN SPACE _ WITH _ APPRO X IM ATE _ DISTANCE ] ĊĠĠĠĠ Ġ* Ġ[ com . google . ar . core . Instant Placement Point . Tracking Method . SCREEN SPACE _ WITH _ APPRO X IM ATE _ DISTANCE ] ĊĠĠĠĠ Ġ* Ġ* Default : Ġ[ Ar Session . approx imate Distance Met ers ]* ĊĠĠĠĠ Ġ* Ġ@ param Ġplane Ġenable Ġplane Ġresults ĊĠĠĠĠ Ġ* Ġ* Default : Ġ[ Ar Session . plane Finding Enabled ]* ĊĠĠĠĠ Ġ* Ġ@ param Ġdepth Ġenable Ġdepth Ġresults ĊĠĠĠĠ Ġ* Ġ* Default : Ġ[ Ar Session . depth Enabled ]* ĊĠĠĠĠ Ġ* Ġ@ param Ġinstant Placement Ġenable Ġinstant Ġplacement Ġresults ĊĠĠĠĠ Ġ* Ġ* Default : Ġ[ Ar Session . instant Placement Enabled ]* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġan Ġordered Ġlist Ġof Ġinter sections Ġwith Ġscene Ġgeometry , Ġnearest Ġhit Ġfirst ĊĠĠĠĠ Ġ* ĠIn Ġcase Ġof Ġinstant Ġplacement Ġresult , Ġif Ġsuccessful Ġa Ġlist Ġcontaining Ġa Ġsingle ĊĠĠĠĠ Ġ* Ġ[ Hit Result ][ com . google . ar . core . Hit Result ], Ġotherwise Ġan Ġempty Ġlist . ĊĠĠĠĠ Ġ* ĠThe Ġ[ Hit Result ][ com . google . ar . core . Hit Result ] Ġwill Ġhave Ġa Ġtrack able ĊĠĠĠĠ Ġ* Ġof Ġtype Ġ[ Instant Placement Point ][ com . google . ar . core . Instant Placement Point ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġhit Tests ( ĊĠĠĠĠĠĠĠ Ġx Px : ĠFloat Ġ= Ġsession . display Width Ġ/ Ġ 2 . 0 f , ĊĠĠĠĠĠĠĠ Ġy Px : ĠFloat Ġ= Ġsession . display Height Ġ/ Ġ 2 . 0 f , ĊĠĠĠĠĠĠĠ Ġapproximate Distance Met ers : ĠFloat Ġ= Ġsession . approx imate Distance Met ers , ĊĠĠĠĠĠĠĠ Ġplane : ĠBoolean Ġ= Ġsession . plane Finding Enabled , ĊĠĠĠĠĠĠĠ Ġdepth : ĠBoolean Ġ= Ġsession . depth Enabled , ĊĠĠĠĠĠĠĠ Ġinstant Placement : ĠBoolean Ġ= Ġsession . instant Placement Enabled ĊĠĠĠ Ġ): ĠList < Hit Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( camera . is Tracking ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( plane Ġ|| Ġdepth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe . hit Test ( x Px , Ġy Px ). take If Ġ{ Ġit . isNotEmpty () Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instant Placement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġframe . hit Test Instant Placement ( x Px , Ġy Px , Ġapproximate Distance Met ers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġhit Tests ĊĠĠĠĠ Ġ* Ġ@ see Ġfirst Valid ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġhit Test ( ĊĠĠĠĠĠĠĠ Ġx Px : ĠFloat Ġ= Ġsession . display Width Ġ/ Ġ 2 . 0 f , ĊĠĠĠĠĠĠĠ Ġy Px : ĠFloat Ġ= Ġsession . display Height Ġ/ Ġ 2 . 0 f , ĊĠĠĠĠĠĠĠ Ġapproximate Distance Met ers : ĠFloat Ġ= Ġsession . approx imate Distance Met ers , ĊĠĠĠĠĠĠĠ Ġplane : ĠBoolean Ġ= Ġsession . plane Finding Enabled , ĊĠĠĠĠĠĠĠ Ġdepth : ĠBoolean Ġ= Ġsession . depth Enabled , ĊĠĠĠĠĠĠĠ Ġinstant Placement : ĠBoolean Ġ= Ġsession . instant Placement Enabled ĊĠĠĠ Ġ): ĠHit Result ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhit Tests ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Px Ġ= Ġx Px , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Px Ġ= Ġy Px , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapproximate Distance Met ers Ġ= Ġapproximate Distance Met ers , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplane Ġ= Ġplane , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepth Ġ= Ġdepth , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstant Placement Ġ= Ġinstant Placement ĊĠĠĠĠĠĠĠ Ġ). first Valid ( camera , Ġplane , Ġdepth , Ġinstant Placement ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġhit Tests ĊĠĠĠĠ Ġ* Ġ@ see Ġfirst Valid ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġhit Test ( ĊĠĠĠĠĠĠĠ Ġmotion Event : ĠMotion Event , ĊĠĠĠĠĠĠĠ Ġapproximate Distance Met ers : ĠFloat Ġ= Ġsession . approx imate Distance Met ers , ĊĠĠĠĠĠĠĠ Ġplane : ĠBoolean Ġ= Ġsession . plane Finding Enabled , ĊĠĠĠĠĠĠĠ Ġdepth : ĠBoolean Ġ= Ġsession . depth Enabled , ĊĠĠĠĠĠĠĠ Ġinstant Placement : ĠBoolean Ġ= Ġsession . instant Placement Enabled ĊĠĠĠ Ġ): ĠHit Result ? Ġ= Ġhit Tests ( ĊĠĠĠĠĠĠĠ Ġx Px Ġ= Ġmotion Event . x , ĊĠĠĠĠĠĠĠ Ġy Px Ġ= Ġmotion Event . y , ĊĠĠĠĠĠĠĠ Ġapproximate Distance Met ers Ġ= Ġapproximate Distance Met ers , ĊĠĠĠĠĠĠĠ Ġplane Ġ= Ġplane , ĊĠĠĠĠĠĠĠ Ġdepth Ġ= Ġdepth , ĊĠĠĠĠĠĠĠ Ġinstant Placement Ġ= Ġinstant Placement ĊĠĠĠ Ġ). first Valid ( frame . camera , Ġplane , Ġdepth , Ġinstant Placement ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ### ĠCreates Ġa Ġnew Ġanchor Ġat Ġthe Ġhit Ġlocation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġ[ hit Tests ] Ġand Ġ[ com . google . ar . core . Hit Result . get Hit Pose ] Ġfor Ġdetails . ĊĠĠĠĠ Ġ* ĠAn chors Ġin cur Ġongoing Ġprocessing Ġoverhead Ġwithin ĠAR Core . ĊĠĠĠĠ Ġ* ĠTo Ġrelease Ġun needed Ġanchors Ġuse Ġ[ Anchor # detach ()] Ġ[ com . google . ar . core . Anchor . detach ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġa Ġconvenience Ġalias Ġfor Ġ{@ code ĊĠĠĠĠ Ġ* Ġhit Result . get Track able (). create Anchor ( hit Result . get Hit Pose ()) } ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġx Px Ġx Ġview Ġcoordinate Ġin Ġpixels ĊĠĠĠĠ Ġ* Ġ* Default : ĠThe Ġview Ġwidth Ġcenter * ĊĠĠĠĠ Ġ* Ġ@ param Ġy Px Ġy Ġview Ġcoordinate Ġin Ġpixel sl s ĊĠĠĠĠ Ġ* Ġ* Default : ĠThe Ġview Ġheight Ġcenter * ĊĠĠĠĠ Ġ* Ġ@ param Ġapproximate Distance Met ers Ġthe Ġdistance Ġat Ġwhich Ġto Ġcreate Ġan ĊĠĠĠĠ Ġ* Ġ[ Instant Placement Point ][ com . google . ar . core . Instant Placement Point ]. ĠThis Ġis Ġonly Ġused Ġwhile ĊĠĠĠĠ Ġ* Ġthe Ġtracking Ġmethod Ġfor Ġthe Ġreturned Ġpoint Ġis ĊĠĠĠĠ Ġ* Ġ[ Instant Placement Point . Tracking Method . SCREEN SPACE _ WITH _ APPRO X IM ATE _ DISTANCE ] ĊĠĠĠĠ Ġ* Ġ[ com . google . ar . core . Instant Placement Point . Tracking Method . SCREEN SPACE _ WITH _ APPRO X IM ATE _ DISTANCE ] ĊĠĠĠĠ Ġ* Ġ* Default : Ġ[ Ar Session . approx imate Distance Met ers ]* ĊĠĠĠĠ Ġ* Ġ@ param Ġplane Ġenable Ġplane Ġresults ĊĠĠĠĠ Ġ* Ġ* Default : Ġ[ Ar Session . plane Finding Enabled ]* ĊĠĠĠĠ Ġ* Ġ@ param Ġdepth Ġenable Ġdepth Ġresults ĊĠĠĠĠ Ġ* Ġ* Default : Ġ[ Ar Session . depth Enabled ]* ĊĠĠĠĠ Ġ* Ġ@ param Ġinstant Placement Ġenable Ġinstant Ġplacement Ġresults ĊĠĠĠĠ Ġ* Ġ* Default : Ġ[ Ar Session . instant Placement Enabled ]* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġhit Tests ĊĠĠĠĠ Ġ* Ġ@ see Ġ# get Hit Pose () ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Anchor ( ĊĠĠĠĠĠĠĠ Ġx Px : ĠFloat Ġ= Ġsession . display Width Ġ/ Ġ 2 . 0 f , ĊĠĠĠĠĠĠĠ Ġy Px : ĠFloat Ġ= Ġsession . display Height Ġ/ Ġ 2 . 0 f , ĊĠĠĠĠĠĠĠ Ġapproximate Distance Met ers : ĠFloat Ġ= Ġsession . approx imate Distance Met ers , ĊĠĠĠĠĠĠĠ Ġplane : ĠBoolean Ġ= Ġsession . plane Finding Enabled , ĊĠĠĠĠĠĠĠ Ġdepth : ĠBoolean Ġ= Ġsession . depth Enabled , ĊĠĠĠĠĠĠĠ Ġinstant Placement : ĠBoolean Ġ= Ġsession . instant Placement Enabled ĊĠĠĠ Ġ): ĠAnchor ? Ġ= Ġhit Test ( ĊĠĠĠĠĠĠĠ Ġx Px Ġ= Ġx Px , ĊĠĠĠĠĠĠĠ Ġy Px Ġ= Ġy Px , ĊĠĠĠĠĠĠĠ Ġapproximate Distance Met ers Ġ= Ġapproximate Distance Met ers , ĊĠĠĠĠĠĠĠ Ġplane Ġ= Ġplane , ĊĠĠĠĠĠĠĠ Ġdepth Ġ= Ġdepth , ĊĠĠĠĠĠĠĠ Ġinstant Placement Ġ= Ġinstant Placement ĊĠĠĠ Ġ) ?. create Anchor () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ### ĠRetrieve Ġthe Ġframe Ġtracked ĠPlan es ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġupdated Planes : ĠList < Plane > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġupdated Track ables . map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ? ĠPlane ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ### ĠRetrieve Ġif Ġthe Ġframe Ġis Ġcurrently Ġtracking Ġa Ġplane ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġframe Ġis Ġtracking Ġat Ġleast Ġone Ġplane ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Tracking Plane : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġupdated Planes . any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . tracking State Ġ== ĠTracking State . TRACK ING ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ### ĠRetrieve Ġthe Ġframe Ġtracked ĠAug ment ed ĠImages ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġupdated Aug ment ed Images : ĠList < Aug ment ed Image > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġupdated Track ables . map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ? ĠAug ment ed Image ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ### ĠRetrieve Ġif Ġthe Ġframe Ġis Ġcurrently Ġtracking Ġan ĠAug ment ed ĠImage ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġframe Ġis Ġfully Ġtracking Ġat Ġleast Ġone ĠAug ment ed ĠImage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Tracking Aug ment ed Image : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġupdated Aug ment ed Images . any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . tracking Method Ġ== ĠAug ment ed Image . Tracking Method . FULL _ TRACK ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġit . tracking State Ġ== ĠTracking State . TRACK ING ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ### ĠRetrieve Ġthe Ġframe Ġtracked ĠAug ment ed ĠF aces ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġupdated Aug ment ed Faces : ĠList < Aug ment ed Face > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġupdated Track ables . map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ? ĠAug ment ed Face ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ### ĠRetrieve Ġif Ġthe Ġframe Ġis Ġcurrently Ġtracking Ġan ĠAug ment ed ĠFace ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġframe Ġis Ġfully Ġtracking Ġat Ġleast Ġone ĠAug ment ed ĠFace ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Tracking Aug ment ed Face : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġupdated Aug ment ed Faces . any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . tracking State Ġ== ĠTracking State . TRACK ING ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinterval Seconds ( ar Frame : ĠAr Frame ?): ĠDouble Ġ= Ġtime . interval Seconds ( ar Frame ?. time ) ĊĊĠĠĠ Ġval Ġfps : ĠDouble Ġ= Ġtime . fps ĊĊĠĠĠ Ġfun Ġfps ( ar Frame : ĠAr Frame ?): ĠDouble Ġ= Ġtime . fps ( ar Frame ?. time ) ĊĊĠĠĠ Ġfun Ġprecision ( ar Frame : ĠAr Frame ?): ĠDouble Ġ= Ġfps ( ar Frame ) Ġ/ Ġfps Ċ } Ċ Ċ /** Ċ Ġ* Ġ### ĠBest ĠHit Result Ġwithin Ġthe Ġlist Ġin Ġprecision Ġterms Ċ Ġ* Ċ Ġ* ĠH its Ġare Ġsorted Ġby Ġdepth . ĠConsider Ġonly Ġclosest Ġhit Ġon Ġa Ġplane , ĠOrient ed ĠPoint , ĠDepth ĠPoint , Ċ Ġ* Ġor ĠInstant ĠPl acement ĠPoint . Ċ Ġ*/ Ċ fun ĠCollection < Hit Result >. first Valid ( ĊĠĠĠ Ġcamera : ĠCamera , ĊĠĠĠ Ġplane : ĠBoolean , ĊĠĠĠ Ġdepth : ĠBoolean , ĊĠĠĠ Ġinstant Placement : ĠBoolean Ċ ): ĠHit Result ? Ġ{ ĊĠĠĠ Ġreturn Ġfirst OrNull Ġ{ Ġhit Result Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġtrack able Ġ= Ġhit Result . track able !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlane Ġ-> Ġplane Ġ&& Ġtrack able . is Pose In Polygon ( hit Result . hit Pose ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhit Result . hit Pose . calculate Distance To Plane ( camera . pose ) Ġ> Ġ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDepth Point Ġ-> Ġdepth Ġ&& Ġtrack able . is Tracking ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPoint Ġ-> Ġdepth Ġ&& Ġtrack able . orientation Mode Ġ== ĠPoint . Orientation Mode . EST IM ATED _ SURFACE _ NORMAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInstant Placement Point Ġ-> Ġinstant Placement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }