package Ġcom . example . cloud anchors ar demo . activity Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġcom . example . cloud anchors ar demo . R Ċ import Ġcom . example . cloud anchors ar demo . database . Firebase Database Manager Ċ import Ġcom . example . cloud anchors ar demo . dialog . Resolve Dialog Ċ import Ġcom . example . cloud anchors ar demo . fragment . Ar Core Fragment Ċ import Ġcom . google . ar . core . Anchor Ċ import Ġcom . google . ar . core . Hit Result Ċ import Ġcom . google . ar . core . Plane Ċ import Ġcom . google . ar . scene form . Anchor Node Ċ import Ġcom . google . ar . scene form . Scene Ċ import Ġcom . google . ar . scene form . rendering . Model Render able Ċ import Ġcom . google . ar . scene form . rendering . Render able Ċ import Ġcom . google . ar . scene form . ux . Ar Fragment Ċ import Ġcom . google . ar . scene form . ux . Transform able Node Ċ import Ġkotlinx . android . synt hetic . main . activity _ ar core .* ĊĊ Ċ class ĠAr Core Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġ// ĠĠĠ ĠDeclare Ġa ĠCloud Anchor Ġand Ġan ĠApp Anchor State ĊĠĠĠ Ġprivate Ġvar Ġcloud Anchor : ĠAnchor ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġapp Anchor State Ġ= ĠApp Anchor State . NONE ĊĊĠĠĠ Ġprivate Ġvar Ġar Core Fragment : ĠAr Core Fragment ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfirebase Database Manager : ĠFirebase Database Manager ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠĠĠ ĠThe ĠApp Anchor State Ġwill Ġcontain Ġthe Ġstatus Ġof Ġthe Ġcloud Anchor ĊĠĠĠ Ġprivate Ġenum Ġclass ĠApp Anchor State Ġ{ ĊĠĠĠĠĠĠĠ ĠNONE , ĊĠĠĠĠĠĠĠ ĠHOST ING , ĊĠĠĠĠĠĠĠ ĠHOST ED , ĊĠĠĠĠĠĠĠ ĠRES OL V ING , ĊĠĠĠĠĠĠĠ ĠRES OL VED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ ar core ) ĊĊĠĠĠĠĠĠĠ Ġar Core Fragment Ġ= Ġsupport FragmentManager . find Fragment ById ( R . id . scene form _ fragment ) Ġas ĠAr Core Fragment ? ĊĠĠĠĠĠĠĠ Ġar Core Fragment ?. plane Discovery Controller ?. hide () ĊĠĠĠĠĠĠĠ Ġar Core Fragment ?. ar Scene View ?. scene ?. add On Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScene . On Update Listener Ġ{ Ġp 0 Ġ-> Ġupdate Anchor If Ne cessary () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġar Core Fragment ?. ar Scene View ?. scene ?. add On Update Listener Ġ{ Ġp 0 Ġ-> Ġupdate Anchor If Ne cessary () Ġ} ĊĠĠĠĠĠĠĠ Ġfirebase Database Manager Ġ= ĠFirebase Database Manager ( this ) ĊĊĠĠĠĠĠĠĠ Ġinit Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ ĠThis Ġmethod Ġis Ġresponsible Ġfor Ġsetting Ġlisteners Ġon Ġclear Ġand Ġresolve Ġbuttons . Ċ // ĠĠĠ ĠIt Ġalso Ġsets Ġthe ĠT ap Ar Plane Listener Ġon ĠAr Core Fragment Ġand Ġhide s Ġplane Ġdiscovery Ġcontroller Ġto Ġdisable Ġthe Ġhand Ġgesture Ġ( optional ) ĊĠĠĠ Ġprivate Ġfun Ġinit Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ ĠSet ĠCloud ĠAnchor Ġto Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cloud Anchor ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresolve _ button . setOnClickListener ( View . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResolve Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠResolve Dialog . Positive Button Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Positive Button Clicked ( dialog Value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Anchor ( dialog Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . resolve ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . VISIBLE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊ Ċ // ĠĠĠĠĠ ĠWhen Ġan Ġup ward Ġfacing Ġplane Ġis Ġt apped , Ġwe Ġcreate Ġan ĠAnchor Ġand Ġpass Ġit Ġto Ġset Cloud Anchor Ġfunction ĊĠĠĠĠĠĠĠ Ġar Core Fragment ?. setOn Tap Ar Plane Listener Ġ{ Ġhit Result : ĠHit Result , Ġplane : ĠPlane , Ġ_: ĠMotion Event Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( plane . type Ġ!= ĠPlane . Type . HORIZONTAL _ UP WARD _ F ACING Ġ|| Ġapp Anchor State Ġ!= ĠApp Anchor State . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Anchor Ġ= Ġar Core Fragment ?. ar Scene View ?. session ?. host Cloud Anchor ( hit Result . create Anchor ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cloud Anchor ( new Anchor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Anchor State Ġ= ĠApp Anchor State . HOST ING ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Now Ġhosting Ġanchor ...", ĠToast . LENGTH _ LONG ). show () Ċ Ċ // ĠĠĠĠĠĠĠĠĠ Ġcall Ġplace Object () Ġon Ġthe Ġcloud Anchor , Ġpl acing Ġour Ġ 3 D Ġw olf Ġat Ġthe Ġt apped Ġpoint . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Core Fragment ?. let Ġ{ Ġplace W olf ( it , Ġcloud Anchor , ĠUri . parse (" W olf _ One _ obj . s fb ")) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve Anchor ( dialog Value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshort Code Ġ= ĠInteger . parseInt ( dialog Value ) ĊĠĠĠĠĠĠĠ Ġfirebase Database Manager ?. get Cloud Anchor ID ( short Code , Ġobject Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Database Manager . Cloud Anchor Id Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cloud Anchor Id Available ( cloud Anchor Id : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Anchor Ġ= Ġar Core Fragment ?. ar Scene View ?. session ?. resolve Cloud Anchor ( cloud Anchor Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Cloud Anchor ( resolved Anchor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message (" Now ĠRes olving ĠAnchor ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġar Core Fragment ?. let Ġ{ Ġplace W olf ( it , Ġcloud Anchor , ĠUri . parse (" W olf _ One _ obj . s fb ")) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Anchor State Ġ= ĠApp Anchor State . RESOL V ING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ ĠThis Ġmethod Ġshows Ġsome Ġmessages Ġto Ġthe Ġusers Ġusing ĠToast ĊĠĠĠ Ġfun Ġshow Message ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġmessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ ĠThis Ġmethod Ġsets Ġa Ġnew ĠCloud ĠAnchor Ġand Ġensures Ġthere Ġis Ġonly Ġone Ġcloud Ġanchor Ġat Ġany Ġpoint Ġof Ġtime ĊĠĠĠ Ġprivate Ġfun Ġset Cloud Anchor ( new Anchor : ĠAnchor ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cloud Anchor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcloud Anchor ?. detach () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcloud Anchor Ġ= Ġnew Anchor ĊĠĠĠĠĠĠĠ Ġapp Anchor State Ġ= ĠApp Anchor State . NONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ ĠThis Ġmethod Ġchecks Ġthe Ġanchor Ġstate Ġand Ġupdate Ġit Ġif Ġnecessary ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġupdate Anchor If Ne cessary () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( app Anchor State Ġ!= ĠApp Anchor State . HOST ING Ġ&& Ġapp Anchor State Ġ!= ĠApp Anchor State . RESOL V ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcloud State Ġ= Ġcloud Anchor ?. cloud Anchor State ĊĠĠĠĠĠĠĠ Ġcloud State ?. let Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app Anchor State Ġ== ĠApp Anchor State . HOST ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Error Ġhosting Ġanchor .. Ġ$ it ", ĠToast . LENGTH _ LONG ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Anchor State Ġ= ĠApp Anchor State . NONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it Ġ== ĠAnchor . Cloud Anchor State . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Database Manager ?. next Short Code ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Database Manager . Short Code Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Short Code Available ( short Code : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( short Code Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message (" Could Ġnot Ġget Ġshort Code ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcloud Anchor ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Database Manager ?. store Using Short Code ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshort Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . cloud Anchor Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message W it Anchor Id (" Anchor Ġhosted ! ĠCloud ĠShort ĠCode : Ġ$ short Code ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Anchor State Ġ= ĠApp Anchor State . HOST ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( app Anchor State Ġ== ĠApp Anchor State . RESOL V ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Error Ġhosting Ġanchor .. Ġ$ it ", ĠToast . LENGTH _ LONG ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Anchor State Ġ= ĠApp Anchor State . NONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it Ġ== ĠAnchor . Cloud Anchor State . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Anchor Ġresolved Ġsuccessfully ", ĠToast . LENGTH _ LONG ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Anchor State Ġ= ĠApp Anchor State . RESOL VED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Message W it Anchor Id ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠResolve Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠResolve Dialog . Positive Button Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Positive Button Clicked ( dialog Value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Anchor ( dialog Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView . GONE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠĠ ĠThis Ġmethod Ġbuilds Ġthe Ġmodel Ġusing ĠModel Render able Ġclass . Ċ // ĠĠĠĠĠ ĠIt Ġcreates Ġthe ĠModel Render able Ġby Ġsetting Ġthe Ġsource Ġthat Ġwill Ġload Ġthe Ġmodel . Ċ // ĠĠĠĠĠĠĠ Ġ- Ġthen Accept () Ġis Ġa Ġmethod Ġthat Ġwill Ġbe Ġcalled Ġif Ġthe Ġmodel Ġwill Ġbe Ġsuccessfully Ġloaded Ġand Ġwill Ġreturn Ġthe Ġbuilt Ġmodel . Ċ // ĠĠĠĠĠĠĠ Ġ- Ġ Ġexception ally () Ġmethod Ġwill Ġbe Ġcalled Ġif Ġthe Ġmodel Ġwill Ġnot Ġbe Ġcreated . ĊĠĠĠ Ġprivate Ġfun Ġplace W olf ( fragment : ĠAr Fragment , Ġanchor : ĠAnchor ?, Ġmodel : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ ĠModel Render able . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Source ( fragment . context , Ġmodel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Accept Ġ{ Ġrender able Ġ-> Ġadd Node To Scene ( fragment , Ġanchor , Ġrender able ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exception ally Ġ{ Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġandroid . app . AlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage ( throwable . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Error !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ ĠThis Ġfunction Ġis Ġresponsible Ġfor Ġadding Ġthe Ġnode Ġto Ġscene . Ċ // ĠĠĠ ĠIt Ġcreates Ġan ĠAnchor Node Ġon Ġthe ĠAnchor Ġand Ġa ĠTransform able Node Ġwith Ġthe Ġparent Ġas ĠAnchor Node . Ċ // ĠĠĠ Ġ- ĠAn ĠAnchor Ġdescribes Ġa Ġfixed Ġlocation Ġand Ġorientation Ġin Ġthe Ġreal Ġworld Ċ // ĠĠĠ Ġ- ĠAn ĠAnchor Node Ġis Ġthe Ġfirst Ġnode Ġthat Ġgets Ġset Ġwhen Ġthe Ġplane Ġis Ġdetected Ċ // ĠĠĠ Ġ- ĠThe ĠScene Ġis Ġthe Ġspace Ġwhere Ġ 3 D Ġobject Ġwill Ġbe Ġplaced . Ċ // ĠĠĠ Ġ- ĠTransform able Node Ġis Ġa Ġnode Ġthat Ġcan Ġbe Ġinteract ed Ġwith . ĠIt Ġcan Ġbe Ġmoved Ġaround , Ġscaled , Ġrotated Ġand Ġmuch Ġmore . Ċ // ĠĠĠ Ġ- ĠHit Result Ġcan Ġbe Ġseen Ġas Ġan Ġinfinite Ġimag inary Ġline Ġthat Ġgives Ġthe Ġpoint Ġof Ġintersection Ġof Ġitself Ġand Ġthe Ġreal Ġworld . ĊĠĠĠ Ġprivate Ġfun Ġadd Node To Scene ( fragment : ĠAr Fragment , Ġanchor : ĠAnchor ?, Ġrender able : ĠRender able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanchor Node Ġ= ĠAnchor Node ( anchor ) ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠTransform able Node ( fragment . transformation System ) ĊĠĠĠĠĠĠĠ Ġnode . render able Ġ= Ġrender able ĊĠĠĠĠĠĠĠ Ġnode . setParent ( anchor Node ) ĊĠĠĠĠĠĠĠ Ġfragment . ar Scene View . scene . addChild ( anchor Node ) ĊĠĠĠĠĠĠĠ Ġnode . select () ĊĠĠĠ Ġ} Ċ } Ċ