package Ġb aa ah s . model Ċ Ċ import Ġb aa ah s . device . DeviceType Ċ import Ġb aa ah s . geom . Matrix 4 Ċ import Ġb aa ah s . geom . Vector 3 F Ċ import Ġb aa ah s . geom . bounding Box Ċ import Ġb aa ah s . geom . center Ċ import Ġb aa ah s . mapper . Controller Id Ċ import Ġb aa ah s . mapper . Fixture Mapping Ċ import Ġb aa ah s . sim . Brain Surface Simulation Ċ import Ġb aa ah s . sim . Fixture Simulation Ċ import Ġb aa ah s . sim . Simulation Env Ċ Ċ abstract Ġclass ĠModel Ġ: ĠModel Info Ġ{ ĊĠĠĠ Ġabstract Ġval Ġname : ĠString ĊĠĠĠ Ġopen Ġval Ġmoving Head s : ĠList < Moving Head > Ġget () Ġ= Ġempty List () ĊĠĠĠ Ġopen Ġval Ġall Sur faces : ĠList < Surface > Ġget () Ġ= Ġempty List () ĊĠĠĠ Ġabstract Ġval Ġall Entities : ĠList < Entity > ĊĊĠĠĠ Ġopen Ġval Ġgeom Vertices : ĠList < Vector 3 F > Ġget () Ġ= Ġempty List () ĊĊĠĠĠ Ġprivate Ġval Ġall Sur faces ByName : ĠMap < String , ĠEntity > Ġby Ġlazy Ġ{ Ġall Entities . associate By Ġ{ Ġit . name Ġ} Ġ} ĊĊĠĠĠ Ġfun Ġfind Entity ( name : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġall Sur faces ByName [ name ] Ġ?: Ġthrow ĠRuntimeException (" no Ġsuch Ġmodel Ġsurface Ġ$ name ") ĊĊĠĠĠ Ġfun Ġget Entity ( name : ĠString ) Ġ= Ġall Sur faces ByName [ name ] ĊĊĠĠĠ Ġprivate Ġval Ġall Vertices Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġhash Set Of < Vector 3 F >(). apply Ġ{ Ġall Sur faces . map Ġ{ Ġadd All ( it . all Vertices ()) Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmodel Bounds Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġbounding Box ( all Entities . flatMap Ġ{ Ġentity Ġ-> Ġentity . bounds . let Ġ{ ĠlistOf ( it . first , Ġit . second )} Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġmodel Ext ents Ġby Ġlazy Ġ{ Ġval Ġ( min , Ġmax ) Ġ= Ġmodel Bounds ; Ġmax Ġ- Ġmin Ġ} ĊĠĠĠ Ġprivate Ġval Ġmodel Center Ġby Ġlazy Ġ{ Ġcenter ( model Bounds . toList ()) Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġext ents Ġget () Ġ= Ġmodel Ext ents . let Ġ{ Ġif Ġ( it Ġ== ĠVector 3 F . origin ) ĠVector 3 F ( 1 f , Ġ 1 f , Ġ 1 f ) Ġelse Ġit Ġ} ĊĠĠĠ Ġoverride Ġval Ġcenter : ĠVector 3 F Ġget () Ġ= Ġmodel Center ĊĊĠĠĠ Ġopen Ġfun Ġgenerate Fixture Mappings (): ĠMap < Controller Id , ĠList < Fixture Mapping >> Ġ= Ġempty Map () ĊĊĠĠĠ Ġinterface ĠEntity Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġdescription : ĠString ĊĠĠĠĠĠĠĠ Ġval Ġdevice Type : ĠDevice Type ĊĠĠĠĠĠĠĠ Ġval Ġbounds : ĠPair < Vector 3 F , ĠVector 3 F > ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Fixture Simulation ( simulation Env : ĠSimulation Env ): ĠFix ture Simulation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠFix ture Info Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorigin : ĠVector 3 F ? ĊĠĠĠĠĠĠĠ Ġval Ġheading : ĠVector 3 F ? ĊĠĠĠĠĠĠĠ Ġval Ġmatrix : ĠMatrix 4 ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠA Ġnamed Ġsurface Ġin Ġthe Ġgeometry Ġmodel . Ġ*/ ĊĠĠĠ Ġopen Ġclass ĠSurface ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescription : ĠString , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdevice Type : ĠDevice Type , ĊĠĠĠĠĠĠĠ Ġval Ġexpected Pixel Count : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġval Ġfaces : ĠList < Face >, ĊĠĠĠĠĠĠĠ Ġval Ġlines : ĠList < Line > ĊĠĠĠ Ġ) Ġ: ĠEntity Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġbounds : ĠPair < Vector 3 F , ĠVector 3 F > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġbounding Box ( all Vertices ()) ĊĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġall Vertices (): ĠCollection < Vector 3 F > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvertices Ġ= Ġhash Set Of < Vector 3 F >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertices . addAll ( lines . flatMap Ġ{ Ġit . vertices Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvertices ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Fixture Simulation ( simulation Env : ĠSimulation Env ): ĠFix ture Simulation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBr ain Surface Simulation ( this , Ġsimulation Env ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠLine ( val Ġvertices : ĠList < Vector 3 F >) Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor ( var arg Ġvertices : ĠVector 3 F ) Ġ: Ġthis ( vertices . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFace ( ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġall Vertices : ĠList < Vector 3 F >, ĊĠĠĠĠĠĠĠ Ġval Ġvertex A : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġvertex B : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġvertex C : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor ( a : ĠVector 3 F , Ġb : ĠVector 3 F , Ġc : ĠVector 3 F ) Ġ: Ġthis ( listOf ( a , Ġb , Ġc ), Ġ 0 , Ġ 1 , Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġa : ĠVector 3 F Ġget () Ġ= Ġall Vertices [ vertex A ] ĊĠĠĠĠĠĠĠ Ġval Ġb : ĠVector 3 F Ġget () Ġ= Ġall Vertices [ vertex B ] ĊĠĠĠĠĠĠĠ Ġval Ġc : ĠVector 3 F Ġget () Ġ= Ġall Vertices [ vertex C ] ĊĊĠĠĠĠĠĠĠ Ġval Ġvertices : ĠArray < Vector 3 F > Ġ= ĠarrayOf ( a , Ġb , Ġc ) ĊĠĠĠ Ġ} Ċ }