package Ġio . github . scene view . sample . ar model viewer Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroidx . core . view . is G one Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . google . android . material . floating action button . Extended Floating ActionButton Ċ import Ġio . github . scene view . ar . Ar Scene View Ċ import Ġio . github . scene view . ar . node . Ar Model Node Ċ import Ġio . github . scene view . ar . node . Editable Transform Ċ import Ġio . github . scene view . ar . node . Placement Mode Ċ import Ġio . github . scene view . math . Position Ċ import Ġio . github . scene view . utils . do On Apply Window Insets Ċ Ċ class ĠMain Fragment Ġ: ĠFragment ( R . layout . fragment _ main ) Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġscene View : ĠAr Scene View ĊĠĠĠ Ġlateinit Ġvar Ġloading View : ĠView ĊĠĠĠ Ġlateinit Ġvar Ġaction Button : ĠExtended Floating ActionButton ĊĊĠĠĠ Ġlateinit Ġvar Ġmodel Node : ĠAr Model Node ĊĊĠĠĠ Ġvar ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading View . is G one Ġ= Ġ! value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġscene View Ġ= Ġview . findViewById ( R . id . scene View ) ĊĠĠĠĠĠĠĠ Ġloading View Ġ= Ġview . findViewById ( R . id . loading View ) ĊĠĠĠĠĠĠĠ Ġaction Button Ġ= Ġview . findViewById < Extended Floating ActionButton >( R . id . action Button ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġsystem Ġbar Ġmargins ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Margin Ġ= Ġ( layout Params Ġas ĠViewGroup . Margin LayoutParams ). bottom Margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Apply Window Insets Ġ{ Ġsystem Bars Insets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( layout Params Ġas ĠViewGroup . Margin LayoutParams ). bottom Margin Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Bars Insets . bottom Ġ+ Ġbottom Margin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ Ġaction Button Clicked () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmodel Node Ġ= ĠAr Model Node ( placement Mode Ġ= ĠPl acement Mode . BEST _ AVAILABLE ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Model Async ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgl b File Location Ġ= Ġ" models / spider bot . gl b ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Ġ= Ġlifecycle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Animate Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Scale Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPlace Ġthe Ġmodel Ġorigin Ġat Ġthe Ġbottom Ġcenter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Origin Ġ= ĠPosition ( y Ġ= Ġ- 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Tracking Changed Ġ= Ġ{ Ġ_, Ġis Tracking , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Button . is G one Ġ= Ġ! is Tracking ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditable Transforms Ġ= ĠEdit able Transform . ALL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscene View . addChild ( model Node ) ĊĠĠĠĠĠĠĠ Ġ// ĠQuick Ġworkaround Ġuntil Ġthe ĠNode ĠPick Ġis Ġfixed ĊĠĠĠĠĠĠĠ Ġscene View . gesture Detector . on Touch Node ( model Node ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . fragment _ main , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġitem . isChecked Ġ= Ġ! item . isChecked ĊĠĠĠĠĠĠĠ Ġmodel Node . detach Anchor () ĊĠĠĠĠĠĠĠ Ġmodel Node . placement Mode Ġ= Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu Plane Placement Ġ-> ĠPl acement Mode . PL ANE _ HORIZONTAL _ AND _ VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu Instant Placement Ġ-> ĠPl acement Mode . INST ANT ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu Depth Placement Ġ-> ĠPl acement Mode . DEPTH ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu Best Placement Ġ-> ĠPl acement Mode . BEST _ AVAILABLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠPl acement Mode . DISABLED ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġaction Button Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! model Node . is An ch ored Ġ&& Ġmodel Node . anchor ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Button . text Ġ= ĠgetString ( R . string . move _ object ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Button . setIcon Resource ( R . drawable . ic _ target ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscene View . plane Renderer . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Node . anchor Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Button . text Ġ= ĠgetString ( R . string . place _ object ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Button . setIcon Resource ( R . drawable . ic _ anchor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscene View . plane Renderer . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }