package Ġcom . dw ur ste is en . gl tf . parser . model Ċ Ċ import Ġcom . ad ri en ben . tools . gl tf . models . G lt f Asset Ċ import Ġcom . ad ri en ben . tools . gl tf . models . G lt f Mesh Ċ import Ġcom . ad ri en ben . tools . gl tf . models . G lt f Node Ċ import Ġcom . dw ur ste is en . gl tf . parser . support . Dictionary Ċ import Ġcom . dw ur ste is en . gl tf . parser . support . is Box Ċ import Ġcom . dw ur ste is en . gl tf . parser . support . is Supported Texture Ċ import Ġcom . dw ur ste is en . gl tf . parser . support . to Ch un ck ed Float Ċ import Ġcom . dw ur ste is en . gl tf . parser . support . to Ch un ck ed Int Ċ import Ġcom . dw ur ste is en . gl tf . parser . support . to IntArray Ċ import Ġcom . dw ur ste is en . min ig dx . scene . api . common . Id Ċ import Ġcom . dw ur ste is en . min ig dx . scene . api . model . Box Ċ import Ġcom . dw ur ste is en . min ig dx . scene . api . model . Color Ċ import Ġcom . dw ur ste is en . min ig dx . scene . api . model . In fluence Ċ import Ġcom . dw ur ste is en . min ig dx . scene . api . model . Mesh Ċ import Ġcom . dw ur ste is en . min ig dx . scene . api . model . Model Ċ import Ġcom . dw ur ste is en . min ig dx . scene . api . model . Normal Ċ import Ġcom . dw ur ste is en . min ig dx . scene . api . model . Position Ċ import Ġcom . dw ur ste is en . min ig dx . scene . api . model . Primitive Ċ import Ġcom . dw ur ste is en . min ig dx . scene . api . model . UV Ċ import Ġcom . dw ur ste is en . min ig dx . scene . api . model . Vertex Ċ Ċ class ĠModel Parser ( private Ġval Ġg lt f Asset : ĠG lt f Asset , Ġprivate Ġval Ġids : ĠDictionary ) Ġ{ ĊĊĠĠĠ Ġfun Ġobjects (): ĠMap < Id , ĠModel > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnodes Ġ= Ġg lt f Asset . nodes . filter Ġ{ Ġit . mesh Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnodes . map Ġ{ Ġit . toObject () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . id Ġto Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġboxes (): ĠMap < Id , ĠBox > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġg lt f Asset . nodes . filter Ġ{ Ġit . is Box Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġids . get ( it ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . name Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit . id Ġto Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠG lt f Node . toObject (): ĠModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġids . get ( this . mesh !! ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmesh Ġ= Ġthis . mesh !!. to Mesh () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠG lt f Mesh . to Mesh (): ĠMesh Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprimitives Ġ= Ġprimitives . map Ġ{ Ġprimitive Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpositions Ġ= Ġprimitive . attributes [" POSITION "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Ch un ck ed Float () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPosition ( it [ 0 ], Ġit [ 1 ], Ġit [ 2 ]) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnormals Ġ= Ġprimitive . attributes [" NORMAL "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Ch un ck ed Float () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠNormal ( it [ 0 ], Ġit [ 1 ], Ġit [ 2 ]) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolors Ġ= Ġprimitive . attributes [" COLOR _ 0 "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Ch un ck ed Float () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠColor ( it [ 0 ], Ġit [ 1 ], Ġit [ 2 ], Ġit [ 3 ]) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjoint s Ġ= Ġprimitive . attributes [" JO INT S _ 0 "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Ch un ck ed Int () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweights Ġ= Ġprimitive . attributes [" WEIGHT S _ 0 "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Ch un ck ed Float () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflu ences : ĠList < List < In fluence >> Ġ= Ġjoint s . zip ( weights ) Ġ{ Ġj , Ġw Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( j 1 , Ġj 2 , Ġj 3 , Ġj 4 ) Ġ= Ġj ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( w 1 , Ġw 2 , Ġw 3 , Ġw 4 ) Ġ= Ġw ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn fluence ( j 1 , Ġw 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn fluence ( j 2 , Ġw 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn fluence ( j 3 , Ġw 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn fluence ( j 4 , Ġw 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaterial Ġ= Ġg lt f Asset . materials . get OrNull ( primitive . material . index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu vs Ġ= Ġif Ġ(! material . is Supported Texture ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprimitive . attributes [" TEX COORD _ 0 "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Ch un ck ed Float () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠUV ( it [ 0 ], Ġit [ 1 ]) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvertices Ġ= Ġpositions . map Indexed Ġ{ Ġindex , Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġnormals [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġcolors . getOrElse ( index ) Ġ{ ĠColor . INVALID Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuv Ġ= Ġu vs . getOrElse ( index ) Ġ{ ĠUV . INVALID Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfluence Ġ= Ġinflu ences . getOrElse ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVertex ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Ġ= Ġn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuv Ġ= Ġuv , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinflu ences Ġ= Ġinfluence ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaterial Id Ġ= Ġif Ġ( primitive . material . is Supported Texture ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġids . get ( primitive . material ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠId . None ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrimitive ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertices Ġ= Ġvertices , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertices Order Ġ= Ġprimitive . indices . to IntArray (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Id Ġ= Ġmaterial Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠMesh ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimitives Ġ= Ġprimitives ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ