package Ġcom . shi bu iw illiam . ar core measurement Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget .* Ċ import Ġcom . google . ar . core .* Ċ import Ġcom . google . ar . scene form . Anchor Node Ċ import Ġcom . google . ar . scene form . Frame Time Ċ import Ġcom . google . ar . scene form . Node Ċ import Ġcom . google . ar . scene form . Scene Ċ import Ġcom . google . ar . scene form . math . Vector 3 Ċ import Ġcom . google . ar . scene form . rendering .* Ċ import Ġcom . google . ar . scene form . ux . Ar Fragment Ċ import Ġcom . google . ar . scene form . ux . Transform able Node Ċ import Ġcom . google . ar . scene form . rendering . Color Ġas Ġar Color Ċ import Ġjava . util . Objects Ċ import Ġkotlin . math . pow Ċ import Ġkotlin . math . sqrt ĊĊ Ċ class ĠMeasurement Ġ: ĠAppCompatActivity (), ĠScene . On Update Listener Ġ{ ĊĠĠĠ Ġprivate Ġval ĠMIN _ OPEN GL _ VERSION Ġ= Ġ 3 . 0 ĊĠĠĠ Ġprivate Ġval ĠTAG : ĠString Ġ= ĠMeasurement :: class . java . getSimpleName () ĊĊĠĠĠ Ġprivate Ġvar Ġar Fragment : ĠAr Fragment ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġdistance Mode TextView : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpoint TextView : ĠTextView ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarrow 1 Up LinearLayout : ĠLinearLayout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarrow 1 Down LinearLayout : ĠLinearLayout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarrow 1 Up View : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarrow 1 Down View : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarrow 1 Up Render able : ĠRender able ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarrow 1 Down Render able : ĠRender able ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarrow 1 0 Up LinearLayout : ĠLinearLayout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarrow 1 0 Down LinearLayout : ĠLinearLayout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarrow 1 0 Up View : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarrow 1 0 Down View : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarrow 1 0 Up Render able : ĠRender able ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġarrow 1 0 Down Render able : ĠRender able ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmultiple Distance Table Layout : ĠTable Layout ĊĊĠĠĠ Ġprivate Ġvar Ġcube Render able : ĠModel Render able ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdistance Card View Render able : ĠView Render able ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdistance Mode Spinner : ĠSp inner ĊĠĠĠ Ġprivate Ġval Ġdistance Mode ArrayList Ġ= ĠArrayList < String >() ĊĠĠĠ Ġprivate Ġvar Ġdistance Mode : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġval Ġplaced An chors Ġ= ĠArrayList < Anchor >() ĊĠĠĠ Ġprivate Ġval Ġplaced Anchor Nodes Ġ= ĠArrayList < Anchor Node >() ĊĠĠĠ Ġprivate Ġval Ġmid An chors : ĠMutable Map < String , ĠAnchor > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġprivate Ġval Ġmid Anchor Nodes : ĠMutable Map < String , ĠAnchor Node > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġprivate Ġval Ġfrom Ground Nodes Ġ= ĠArrayList < List < Node >>() ĊĊĠĠĠ Ġprivate Ġval Ġmultiple Dist ances Ġ= ĠArray ( Constants . max Num Multiple Points , ĊĠĠĠĠĠĠĠ Ġ{ Array < TextView ? >( Constants . max Num Multiple Points ){ null } Ġ}) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinit CM : ĠString ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclear Button : ĠButton ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! check Is Supported Device Or Finish ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Device Ġnot Ġsupported ", ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ measurement ) ĊĠĠĠĠĠĠĠ Ġval Ġdistance Mode Array Ġ= Ġresources . getString Array ( R . array . distance _ mode ) ĊĠĠĠĠĠĠĠ Ġdistance Mode Array . map { it -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġar Fragment Ġ= Ġsupport FragmentManager . find Fragment ById ( R . id . scene form _ fragment ) Ġas ĠAr Fragment ? ĊĠĠĠĠĠĠĠ Ġdistance Mode TextView Ġ= ĠfindViewById ( R . id . distance _ view ) ĊĠĠĠĠĠĠĠ Ġmultiple Distance Table Layout Ġ= ĠfindViewById ( R . id . multiple _ distance _ table ) ĊĊĠĠĠĠĠĠĠ Ġinit CM Ġ= Ġresources . getString ( R . string . init CM ) ĊĊĠĠĠĠĠĠĠ Ġconfigure Spinner () ĊĠĠĠĠĠĠĠ Ġinit Arrow View () ĊĠĠĠĠĠĠĠ Ġinit Render able () ĊĠĠĠĠĠĠĠ Ġclear Button () ĊĊĠĠĠĠĠĠĠ Ġar Fragment !!. setOn Tap Ar Plane Listener Ġ{ Ġhit Result : ĠHit Result , Ġplane : ĠPlane ?, Ġmotion Event : ĠMotion Event ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cube Render able Ġ== Ġnull Ġ|| Ġdistance Card View Render able Ġ== Ġnull ) Ġreturn @ setOn Tap Ar Plane Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreating ĠAnchor . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( distance Mode ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList [ 0 ] Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear All An chors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace Anchor ( hit Result , Ġdistance Card View Render able !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList [ 1 ] Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtap Distance Of 2 Points ( hit Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList [ 2 ] Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtap Distance Of Multiple Points ( hit Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList [ 3 ] Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtap Distance From Ground ( hit Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear All An chors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace Anchor ( hit Result , Ġdistance Card View Render able !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Distance Table (){ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠConstants . max Num Multiple Points + 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Row Ġ= ĠTable Row ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Distance Table Layout . addView ( table Row , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Distance Table Layout . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . multiple Distance Table Height Ġ/ Ġ( Constants . max Num Multiple Points Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil ĠConstants . max Num Multiple Points + 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= ĠTextView ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i == 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( j == 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setText (" cm ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setText (( j - 1 ). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( j == 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setText (( i - 1 ). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( i == j ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setText ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Dist ances [ i - 1 ][ j - 1 ] Ġ= ĠtextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setText ( init CM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Dist ances [ i - 1 ][ j - 1 ] Ġ= ĠtextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Row . addView ( textView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Row . layout Params . width Ġ/ Ġ( Constants . max Num Multiple Points Ġ+ Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Row . layout Params . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Arrow View (){ ĊĠĠĠĠĠĠĠ Ġarrow 1 Up LinearLayout Ġ= ĠLinearLayout ( this ) ĊĠĠĠĠĠĠĠ Ġarrow 1 Up LinearLayout . orientation Ġ= ĠLinearLayout . VERTICAL ĊĠĠĠĠĠĠĠ Ġarrow 1 Up LinearLayout . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠ Ġarrow 1 Up View Ġ= ĠImageView ( this ) ĊĠĠĠĠĠĠĠ Ġarrow 1 Up View . setImage Resource ( R . drawable . arrow _ 1 up ) ĊĠĠĠĠĠĠĠ Ġarrow 1 Up LinearLayout . addView ( arrow 1 Up View , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . arrow View Size , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . arrow View Size ) ĊĊĠĠĠĠĠĠĠ Ġarrow 1 Down LinearLayout Ġ= ĠLinearLayout ( this ) ĊĠĠĠĠĠĠĠ Ġarrow 1 Down LinearLayout . orientation Ġ= ĠLinearLayout . VERTICAL ĊĠĠĠĠĠĠĠ Ġarrow 1 Down LinearLayout . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠ Ġarrow 1 Down View Ġ= ĠImageView ( this ) ĊĠĠĠĠĠĠĠ Ġarrow 1 Down View . setImage Resource ( R . drawable . arrow _ 1 down ) ĊĠĠĠĠĠĠĠ Ġarrow 1 Down LinearLayout . addView ( arrow 1 Down View , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . arrow View Size , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . arrow View Size ) ĊĊĠĠĠĠĠĠĠ Ġarrow 1 0 Up LinearLayout Ġ= ĠLinearLayout ( this ) ĊĠĠĠĠĠĠĠ Ġarrow 1 0 Up LinearLayout . orientation Ġ= ĠLinearLayout . VERTICAL ĊĠĠĠĠĠĠĠ Ġarrow 1 0 Up LinearLayout . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠ Ġarrow 1 0 Up View Ġ= ĠImageView ( this ) ĊĠĠĠĠĠĠĠ Ġarrow 1 0 Up View . setImage Resource ( R . drawable . arrow _ 1 0 up ) ĊĠĠĠĠĠĠĠ Ġarrow 1 0 Up LinearLayout . addView ( arrow 1 0 Up View , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . arrow View Size , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . arrow View Size ) ĊĊĠĠĠĠĠĠĠ Ġarrow 1 0 Down LinearLayout Ġ= ĠLinearLayout ( this ) ĊĠĠĠĠĠĠĠ Ġarrow 1 0 Down LinearLayout . orientation Ġ= ĠLinearLayout . VERTICAL ĊĠĠĠĠĠĠĠ Ġarrow 1 0 Down LinearLayout . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠ Ġarrow 1 0 Down View Ġ= ĠImageView ( this ) ĊĠĠĠĠĠĠĠ Ġarrow 1 0 Down View . setImage Resource ( R . drawable . arrow _ 1 0 down ) ĊĠĠĠĠĠĠĠ Ġarrow 1 0 Down LinearLayout . addView ( arrow 1 0 Down View , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . arrow View Size , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . arrow View Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Render able () Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial Factory . make Transparent With Color ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Color ( Color . RED )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Accept Ġ{ Ġmaterial : ĠMaterial ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcube Render able Ġ= ĠShape Factory . make Sphere ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 2 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVector 3 . zero (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcube Render able !!. set Shadow C aster ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcube Render able !!. set Shadow Receiver ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exception ally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage ( it . message ). setTitle (" Error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ exception ally Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠView Render able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( this , ĠR . layout . distance _ text _ layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Accept { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Card View Render able Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Card View Render able !!. is Shadow C aster Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Card View Render able !!. is Shadow Receiver Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exception ally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage ( it . message ). setTitle (" Error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ exception ally Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠView Render able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( this , Ġarrow 1 Up LinearLayout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Accept { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow 1 Up Render able Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow 1 Up Render able . is Shadow C aster Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow 1 Up Render able . is Shadow Receiver Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exception ally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage ( it . message ). setTitle (" Error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ exception ally Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠView Render able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( this , Ġarrow 1 Down LinearLayout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Accept { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow 1 Down Render able Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow 1 Down Render able . is Shadow C aster Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow 1 Down Render able . is Shadow Receiver Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exception ally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage ( it . message ). setTitle (" Error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ exception ally Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠView Render able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( this , Ġarrow 1 0 Up LinearLayout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Accept { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow 1 0 Up Render able Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow 1 0 Up Render able . is Shadow C aster Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow 1 0 Up Render able . is Shadow Receiver Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exception ally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage ( it . message ). setTitle (" Error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ exception ally Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠView Render able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( this , Ġarrow 1 0 Down LinearLayout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Accept { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow 1 0 Down Render able Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow 1 0 Down Render able . is Shadow C aster Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarrow 1 0 Down Render able . is Shadow Receiver Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exception ally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage ( it . message ). setTitle (" Error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ exception ally Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Spinner (){ ĊĠĠĠĠĠĠĠ Ġdistance Mode Ġ= Ġdistance Mode ArrayList [ 0 ] ĊĠĠĠĠĠĠĠ Ġdistance Mode Spinner Ġ= ĠfindViewById ( R . id . distance _ mode _ spinner ) ĊĠĠĠĠĠĠĠ Ġval Ġdistance Mode Adapter Ġ= ĠArray Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . layout . simple _ spinner _ item , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdistance Mode Adapter . set DropDown View Resource ( android . R . layout . simple _ spinner _ dropdown _ item ) ĊĠĠĠĠĠĠĠ Ġdistance Mode Spinner . adapter Ġ= Ġdistance Mode Adapter ĊĠĠĠĠĠĠĠ Ġdistance Mode Spinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View < *> ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspinner Parent Ġ= Ġparent Ġas ĠSp inner ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode Ġ= Ġspinner Parent . selected Item Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear All An chors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Mode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast Mode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( distance Mode Ġ== Ġdistance Mode ArrayList [ 2 ]){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġmultiple Distance Table Layout . layout Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= ĠConstants . multiple Distance Table Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Distance Table Layout . layout Params Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Distance Table () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġmultiple Distance Table Layout . layout Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Distance Table Layout . layout Params Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Selected Ġar core Ġfocus Ġon Ġ${ distance Mode }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear All An chors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Mode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast Mode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Mode (){ ĊĠĠĠĠĠĠĠ Ġdistance Mode TextView !!. text Ġ= Ġdistance Mode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Button (){ ĊĠĠĠĠĠĠĠ Ġclear Button Ġ= ĠfindViewById ( R . id . clear Button ) ĊĠĠĠĠĠĠĠ Ġclear Button . setOnClickListener ( object : ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear All An chors () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear All An chors (){ ĊĠĠĠĠĠĠĠ Ġplaced An chors . clear () ĊĠĠĠĠĠĠĠ Ġfor Ġ( anchor Node Ġin Ġplaced Anchor Nodes ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Fragment !!. ar Scene View . scene . removeChild ( anchor Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Node . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Node . anchor !!. detach () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Node . setParent ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġplaced Anchor Nodes . clear () ĊĠĠĠĠĠĠĠ Ġmid An chors . clear () ĊĠĠĠĠĠĠĠ Ġfor Ġ(( k , anchor Node ) Ġin Ġmid Anchor Nodes ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Fragment !!. ar Scene View . scene . removeChild ( anchor Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Node . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Node . anchor !!. detach () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Node . setParent ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmid Anchor Nodes . clear () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠConstants . max Num Multiple Points ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil ĠConstants . max Num Multiple Points ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( multiple Dist ances [ i ][ j ] Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Dist ances [ i ][ j ] !!. setText ( if ( i == j ) Ġ"-" Ġelse Ġinit CM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfrom Ground Nodes . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtap Distance From Ground ( hit Result : ĠHit Result ){ ĊĠĠĠĠĠĠĠ Ġclear All An chors () ĊĠĠĠĠĠĠĠ Ġval Ġanchor Ġ= Ġhit Result . create Anchor () ĊĠĠĠĠĠĠĠ Ġplaced An chors . add ( anchor ) ĊĊĠĠĠĠĠĠĠ Ġval Ġanchor Node Ġ= ĠAnchor Node ( anchor ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis S mo ot hed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Parent ( ar Fragment !!. ar Scene View . scene ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġplaced Anchor Nodes . add ( anchor Node ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtransform able Node Ġ= ĠTransform able Node ( ar Fragment !!. transformation System ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . rotation Controller . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . scale Controller . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . translation Controller . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . render able Ġ= Ġrender able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Parent ( anchor Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠNode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Parent ( transform able Node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . world Position Ġ= ĠVector 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Node . world Position . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Node . world Position . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchor Node . world Position . z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . render able Ġ= Ġdistance Card View Render able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġarrow 1 Up Node Ġ= ĠNode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Parent ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . world Position Ġ= ĠVector 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . y + 0 . 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . z ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . render able Ġ= Ġarrow 1 Up Render able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setOn Tap Listener Ġ{ Ġhit TestResult , Ġmotion Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position Ġ= ĠVector 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . y + 0 . 0 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . z ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġarrow 1 Down Node Ġ= ĠNode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Parent ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . world Position Ġ= ĠVector 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . y - 0 . 0 8 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . z ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . render able Ġ= Ġarrow 1 Down Render able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setOn Tap Listener Ġ{ Ġhit TestResult , Ġmotion Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position Ġ= ĠVector 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . y - 0 . 0 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . z ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġarrow 1 0 Up Node Ġ= ĠNode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Parent ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . world Position Ġ= ĠVector 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . y + 0 . 1 8 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . z ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . render able Ġ= Ġarrow 1 0 Up Render able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setOn Tap Listener Ġ{ Ġhit TestResult , Ġmotion Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position Ġ= ĠVector 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . y + 0 . 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . z ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġarrow 1 0 Down Node Ġ= ĠNode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Parent ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . world Position Ġ= ĠVector 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . y - 0 . 1 6 7 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . z ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . render able Ġ= Ġarrow 1 0 Down Render able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setOn Tap Listener Ġ{ Ġhit TestResult , Ġmotion Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position Ġ= ĠVector 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . y - 0 . 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . world Position . z ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfrom Ground Nodes . add ( listOf ( node , Ġarrow 1 Up Node , Ġarrow 1 Down Node , Ġarrow 1 0 Up Node , Ġarrow 1 0 Down Node )) ĊĊĠĠĠĠĠĠĠ Ġar Fragment !!. ar Scene View . scene . add On Update Listener ( this ) ĊĠĠĠĠĠĠĠ Ġar Fragment !!. ar Scene View . scene . addChild ( anchor Node ) ĊĠĠĠĠĠĠĠ Ġtransform able Node . select () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġplace Anchor ( hit Result : ĠHit Result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender able : ĠRender able ){ ĊĠĠĠĠĠĠĠ Ġval Ġanchor Ġ= Ġhit Result . create Anchor () ĊĠĠĠĠĠĠĠ Ġplaced An chors . add ( anchor ) ĊĊĠĠĠĠĠĠĠ Ġval Ġanchor Node Ġ= ĠAnchor Node ( anchor ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis S mo ot hed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Parent ( ar Fragment !!. ar Scene View . scene ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġplaced Anchor Nodes . add ( anchor Node ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠTransform able Node ( ar Fragment !!. transformation System ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . rotation Controller . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . scale Controller . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . translation Controller . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . render able Ġ= Ġrender able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Parent ( anchor Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġar Fragment !!. ar Scene View . scene . add On Update Listener ( this ) ĊĠĠĠĠĠĠĠ Ġar Fragment !!. ar Scene View . scene . addChild ( anchor Node ) ĊĠĠĠĠĠĠĠ Ġnode . select () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġtap Distance Of 2 Points ( hit Result : ĠHit Result ){ ĊĠĠĠĠĠĠĠ Ġif Ġ( placed Anchor Nodes . size Ġ== Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace Anchor ( hit Result , Ġcube Render able !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( placed Anchor Nodes . size Ġ== Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace Anchor ( hit Result , Ġcube Render able !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmid Position Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( placed Anchor Nodes [ 0 ]. world Position . x Ġ+ Ġplaced Anchor Nodes [ 1 ]. world Position . x ) Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( placed Anchor Nodes [ 0 ]. world Position . y Ġ+ Ġplaced Anchor Nodes [ 1 ]. world Position . y ) Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( placed Anchor Nodes [ 0 ]. world Position . z Ġ+ Ġplaced Anchor Nodes [ 1 ]. world Position . z ) Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquaternion Ġ= Ġfloat ArrayOf ( 0 . 0 f , 0 . 0 f , 0 . 0 f , 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpose Ġ= ĠP ose ( mid Position , Ġquaternion ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace Mid Anchor ( pose , Ġdistance Card View Render able !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear All An chors () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace Anchor ( hit Result , Ġcube Render able !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġplace Mid Anchor ( pose : ĠP ose , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender able : ĠRender able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbetween : ĠArray < Int > Ġ= ĠarrayOf ( 0 , 1 )){ ĊĠĠĠĠĠĠĠ Ġval Ġmid Key Ġ= Ġ"${ between [ 0 ]} _${ between [ 1 ]}" ĊĠĠĠĠĠĠĠ Ġval Ġanchor Ġ= Ġar Fragment !!. ar Scene View . session !!. create Anchor ( pose ) ĊĠĠĠĠĠĠĠ Ġmid An chors . put ( mid Key , Ġanchor ) ĊĊĠĠĠĠĠĠĠ Ġval Ġanchor Node Ġ= ĠAnchor Node ( anchor ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis S mo ot hed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Parent ( ar Fragment !!. ar Scene View . scene ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmid Anchor Nodes . put ( mid Key , Ġanchor Node ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠTransform able Node ( ar Fragment !!. transformation System ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . rotation Controller . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . scale Controller . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . translation Controller . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . render able Ġ= Ġrender able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Parent ( anchor Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġar Fragment !!. ar Scene View . scene . add On Update Listener ( this ) ĊĠĠĠĠĠĠĠ Ġar Fragment !!. ar Scene View . scene . addChild ( anchor Node ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtap Distance Of Multiple Points ( hit Result : ĠHit Result ){ ĊĠĠĠĠĠĠĠ Ġif Ġ( placed Anchor Nodes . size Ġ>= ĠConstants . max Num Multiple Points ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear All An chors () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠView Render able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( this , ĠR . layout . point _ text _ layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Accept { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Shadow Receiver Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Shadow C aster Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint TextView Ġ= Ġit . getView () Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint TextView . setText ( placed An chors . size . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace Anchor ( hit Result , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exception ally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage ( it . message ). setTitle (" Error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ exception ally Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Number Ġof Ġanchors : Ġ${ placed Anchor Nodes . size }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun ĠonUpdate ( frame Time : ĠFrame Time ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( distance Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList [ 0 ] Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Distance From Camera () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList [ 1 ] Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Distance Of 2 Points () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList [ 2 ] Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Multiple Dist ances () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList [ 3 ] Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Distance From Ground () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Distance From Camera () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure Distance From Ground (){ ĊĠĠĠĠĠĠĠ Ġif Ġ( from Ground Nodes . size Ġ== Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠ Ġfor Ġ( node Ġin Ġfrom Ground Nodes ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġ( distance Card View Render able !!. view Ġas ĠLinearLayout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findViewById < TextView >( R . id . distance Card ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance CM Ġ= Ġchange Unit ( node [ 0 ]. world Position . y Ġ+ Ġ 1 . 0 f , Ġ" cm ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġ"% . 0 f ". format ( distance CM ) Ġ+ Ġ" Ġcm " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure Distance From Camera (){ ĊĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġar Fragment !!. ar Scene View . ar Frame ĊĠĠĠĠĠĠĠ Ġif Ġ( placed Anchor Nodes . size Ġ>= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Meter Ġ= Ġcalculate Distance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaced Anchor Nodes [ 0 ]. world Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe !!. camera . pose ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Distance Of 2 Points ( distance Meter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure Distance Of 2 Points (){ ĊĠĠĠĠĠĠĠ Ġif Ġ( placed Anchor Nodes . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Meter Ġ= Ġcalculate Distance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaced Anchor Nodes [ 0 ]. world Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaced Anchor Nodes [ 1 ]. world Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Distance Of 2 Points ( distance Meter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure Distance Of 2 Points ( distance Meter : ĠFloat ){ ĊĠĠĠĠĠĠĠ Ġval Ġdistance Text CM Ġ= Ġmake Distance Text With CM ( distance Meter ) ĊĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġ( distance Card View Render able !!. view Ġas ĠLinearLayout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findViewById < TextView >( R . id . distance Card ) ĊĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġdistance Text CM ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" distance : Ġ${ distance Text CM }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure Multiple Dist ances (){ ĊĠĠĠĠĠĠĠ Ġif Ġ( placed Anchor Nodes . size Ġ> Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġplaced Anchor Nodes . size ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġi + 1 Ġuntil Ġplaced Anchor Nodes . size ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Meter Ġ= Ġcalculate Distance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaced Anchor Nodes [ i ]. world Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaced Anchor Nodes [ j ]. world Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance CM Ġ= Ġchange Unit ( distance Meter , Ġ" cm ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance CM Floor Ġ= Ġ"% . 2 f ". format ( distance CM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Dist ances [ i ][ j ] !!. setText ( distance CM Floor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Dist ances [ j ][ i ] !!. setText ( distance CM Floor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Distance Text With CM ( distance Meter : ĠFloat ): ĠString { ĊĠĠĠĠĠĠĠ Ġval Ġdistance CM Ġ= Ġchange Unit ( distance Meter , Ġ" cm ") ĊĠĠĠĠĠĠĠ Ġval Ġdistance CM Floor Ġ= Ġ"% . 2 f ". format ( distance CM ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ distance CM Floor } Ġcm " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Distance ( x : ĠFloat , Ġy : ĠFloat , Ġz : ĠFloat ): ĠFloat { ĊĠĠĠĠĠĠĠ Ġreturn Ġsqrt ( x . pow ( 2 ) Ġ+ Ġy . pow ( 2 ) Ġ+ Ġz . pow ( 2 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Distance ( object Pose 0 : ĠP ose , Ġobject Pose 1 : ĠP ose ): ĠFloat { ĊĠĠĠĠĠĠĠ Ġreturn Ġcalculate Distance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Pose 0 . tx () Ġ- Ġobject Pose 1 . tx (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Pose 0 . ty () Ġ- Ġobject Pose 1 . ty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Pose 0 . tz () Ġ- Ġobject Pose 1 . tz ()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Distance ( object Pose 0 : ĠVector 3 , Ġobject Pose 1 : ĠP ose ): ĠFloat { ĊĠĠĠĠĠĠĠ Ġreturn Ġcalculate Distance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Pose 0 . x Ġ- Ġobject Pose 1 . tx (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Pose 0 . y Ġ- Ġobject Pose 1 . ty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Pose 0 . z Ġ- Ġobject Pose 1 . tz () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Distance ( object Pose 0 : ĠVector 3 , Ġobject Pose 1 : ĠVector 3 ): ĠFloat { ĊĠĠĠĠĠĠĠ Ġreturn Ġcalculate Distance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Pose 0 . x Ġ- Ġobject Pose 1 . x , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Pose 0 . y Ġ- Ġobject Pose 1 . y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Pose 0 . z Ġ- Ġobject Pose 1 . z ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Unit ( distance Meter : ĠFloat , Ġunit : ĠString ): ĠFloat { ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( unit ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" cm " Ġ-> Ġdistance Meter Ġ* Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" mm " Ġ-> Ġdistance Meter Ġ* Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdistance Meter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoast Mode (){ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Measurement , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( distance Mode ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList [ 0 ] Ġ-> Ġ" Find Ġplane Ġand Ġtap Ġsomewhere " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList [ 1 ] Ġ-> Ġ" Find Ġplane Ġand Ġtap Ġ 2 Ġpoints " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList [ 2 ] Ġ-> Ġ" Find Ġplane Ġand Ġtap Ġmultiple Ġpoints " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Mode ArrayList [ 3 ] Ġ-> Ġ" Find Ġplane Ġand Ġtap Ġpoint " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" ?? ?" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġcheck Is Supported Device Or Finish ( activity : ĠActivity ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġavailability Ġ= ĠAr Core A pk . getInstance (). check Availability ( this ) ĊĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Ar Core A pk Ġavailability Ġis Supported :${ availability ?. is Supported }, name :${ availability ?. name }") ĊĊĠĠĠĠĠĠĠ Ġval Ġopen Gl Version String Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Objects . requireNonNull ( activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getSystem Service ( Context . ACTIVITY _ SERVICE )) Ġas ĠActivity Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. device Configuration Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. gl Es Version ĊĠĠĠĠĠĠĠ Ġif Ġ( open Gl Version String . toDouble () Ġ< ĠMIN _ OPEN GL _ VERSION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Scene form Ġrequires ĠOpenGL ĠES Ġ${ MIN _ OPEN GL _ VERSION } Ġlater ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Scene form Ġrequires ĠOpenGL ĠES Ġ${ MIN _ OPEN GL _ VERSION } Ġor Ġlater ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ }