package Ġcom . cout 9 7 0 . tech ne 2 aabb Ċ Ċ import Ġcom . cout 9 7 0 . vector . extensions . plus Ċ import Ġcom . cout 9 7 0 . vector . extensions . vec 3 Of Ċ import Ġcom . cout 9 7 0 . vector . impl . Vector 3 f Ċ import Ġcom . cout 9 7 0 . vector . impl . Vector 3 i Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . Writer Ċ import Ġjava . util . zip . Zip File Ċ import Ġjavax . xml . parsers . Document BuilderFactory Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġcout 9 7 0 Ġon Ġ 2 1 / 0 8 / 2 0 1 6 . Ċ Ġ*/ Ċ object ĠTrans lator Ġ{ ĊĠĠĠ Ġfun Ġtranslate ( input : ĠFile , Ġoutput : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzip Ġ= ĠZip File ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġzip . getEntry (" model . xml ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġzip . getInputStream ( entry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument BuilderFactory Ġ= ĠDocument BuilderFactory . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Builder Ġ= Ġdocument BuilderFactory . new Document Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġdocument Builder . parse ( stream ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshapes Ġ= Ġdocument . getElementsByTagName (" Shape ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < AABB >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġshapes . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshape Ġ= Ġshapes . item ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshape Attributes Ġ= Ġshape . attributes Ġ?: Ġerror (" Shape Ġ# " Ġ+ Ġ( i Ġ+ Ġ 1 ) Ġ+ Ġ" Ġin Ġ" Ġ+ Ġinput Ġ+ Ġ" Ġhas Ġno Ġattributes ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġshape Attributes . getName d Item (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshape Name : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Name Ġ= Ġname . node Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shape Name Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Name Ġ= Ġ" Shape Ġ# " Ġ+ Ġ( i Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshape Type : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġshape Attributes . getName d Item (" type ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Type Ġ= Ġtype . node Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shape Type Ġ!= Ġ" d 9 e 6 2 1 f 7 - 9 5 7 f - 4 b 7 7 - b 1 ae - 2 0 dcd 0 da 7 7 5 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Model Ġshape Ġ[$ shape Name ] Ġin Ġ$ input Ġis Ġnot Ġa Ġcube , Ġignoring ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= ĠarrayOf Null s < String >( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġposition Ġ= ĠarrayOf Null s < String >( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsize Ġ= ĠarrayOf Null s < String >( 3 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshape Children Ġ= Ġshape . childNodes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. shape Children . length Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshape Child Ġ= Ġshape Children . item ( j ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshape Child Name Ġ= Ġshape Child . nodeName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshape Child Value : ĠString ? Ġ= Ġshape Child . textContent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shape Child Value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Child Value Ġ= Ġshape Child Value . trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( shape Child Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Offset " Ġ-> Ġoffset Ġ= Ġshape Child Value . split ("," . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Position " Ġ-> Ġposition Ġ= Ġshape Child Value . split ("," . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Size " Ġ-> Ġsize Ġ= Ġshape Child Value . split ("," . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcube Size Ġ= ĠVector 3 i ( Integer . parseInt ( size [ 0 ]), ĠInteger . parseInt ( size [ 1 ]), ĠInteger . parseInt ( size [ 2 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcube Offset Ġ= ĠVector 3 f ( java . lang . Float . parseFloat ( offset [ 0 ]), Ġ(- java . lang . Float . parseFloat ( offset [ 1 ])), Ġjava . lang . Float . parseFloat ( offset [ 2 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcube Position Ġ= ĠVector 3 f ( java . lang . Float . parseFloat ( position [ 0 ]), Ġ- cube Size . y Ġ- Ġjava . lang . Float . parseFloat ( position [ 1 ]), Ġjava . lang . Float . parseFloat ( position [ 2 ])) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġ( cube Position Ġ+ Ġcube Offset ) Ġ+ Ġvec 3 Of ( 8 , Ġ 2 4 , Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( AABB ( pos , Ġpos Ġ+ Ġcube Size )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexport ( list , Ġoutput ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexport ( list : ĠList < AABB >, Ġoutput : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstream Ġ= ĠFileOutputStream ( output ) ĊĠĠĠĠĠĠĠ Ġstream . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= Ġstream . writer () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . print (" listOf (\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . print (" Vec 3 d (${ i . min . x }, Ġ${ i . min . y }, Ġ${ i . min . z }) Ġ* ĠPIX EL Ġto ĠVec 3 d (${ i . max . x }, Ġ${ i . max . y }, Ġ${ i . max . z }) Ġ* ĠPIX EL ,\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . print (" )\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . flush () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠWriter . print ( str : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( str ) ĊĠĠĠĠĠĠĠ Ġappend ( str ) ĊĠĠĠ Ġ} Ċ }