package Ġinfo . ben jamin h ill . sketch y . ev 3 Ċ Ċ import Ġau . edu . fed eration . cal iko . Fab rik Bone 2 D Ċ import Ġau . edu . fed eration . cal iko . Fab rik Chain 2 D Ċ import Ġau . edu . fed eration . cal iko . Fab rik Structure 2 D Ċ import Ġau . edu . fed eration . utils . Vec 2 f Ċ import Ġmu . Kotlin Logging Ċ import Ġjava . io . File Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ val ĠUP Ġ= ĠVec 2 f ( 0 f , Ġ 1 f ) Ċ val ĠLEFT Ġ= ĠVec 2 f ( 1 f , Ġ 0 f ) Ċ Ċ fun ĠF ab rik Structure 2 D . chains (): ĠList < Fab rik Chain 2 D > Ġ= Ġ( 0 Ġuntil Ġnum Ch ains ). map Ġ{ Ġget Chain ( it ) Ġ} Ċ fun ĠF ab rik Chain 2 D . bones (): ĠList < Fab rik Bone 2 D > Ġ= Ġ( 0 Ġuntil Ġnum B ones ). map Ġ{ Ġget Bone (( it )) Ġ} Ċ Ċ fun ĠF ab rik Structure 2 D . debug Log () Ġ{ ĊĠĠĠ Ġchains (). forEach Indexed Ġ{ Ġci , Ġchain Ġ-> ĊĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠ Ġchain . bones (). forEach Indexed Ġ{ Ġbi , Ġbone Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Chain Ġ$ ci ĠB one Ġ$ bi " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Ġ Ġdir : Ġ${ bone . direction UV }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bi Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Ġ ĠAngle Ġfrom ĠLEFT :${ bone . direction UV . get Signed Angle De gs To ( LEFT )}" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Ġ ĠAngle Ġfrom Ġprevious : Ġ${ chain . get Bone ( bi Ġ- Ġ 1 ). direction UV . get Signed Angle De gs To ( bone . direction UV )}" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Ġ ĠLoc : Ġ Ġ-> Ġ${ bone . end Location }" Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠF ab rik Structure 2 D . debug SVG ( ĊĠĠĠ Ġtarget : ĠVec 2 f ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ ĠFile (" debug . svg "). print Writer (). use Ġ{ Ġpw Ġ-> ĊĠĠĠĠĠĠĠ Ġpw . println (""" < svg ĠviewBox ="- 1 0 0 Ġ- 1 0 0 Ġ 2 0 0 Ġ 2 0 0 " Ġxmlns =" http :// www . w 3 . org / 2 0 0 0 / svg "> """) ĊĠĠĠĠĠĠĠ Ġchains (). forEach Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchain Start Ġ= Ġchain . bones (). first (). start Location !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . println (""" Ġ< circle Ġcx ="${ chain Start . x }" Ġcy ="${ chain Start . y Ġ* Ġ- 1 }" Ġr =" 3 " Ġfill =" green " Ġfill - opacity =" 0 . 5 "/> """) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchain End Ġ= Ġchain . bones (). last (). end Location !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . println (""" Ġ< circle Ġcx ="${ chain End . x }" Ġcy ="${ chain End . y Ġ* Ġ- 1 }" Ġr =" 3 " Ġfill =" red " Ġfill - opacity =" 0 . 5 "/> """) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchain . bones (). forEach Ġ{ Ġbone Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpw . println (""" Ġ< line Ġx 1 ="${ bone . start Location . x }" Ġy 1 ="${ bone . start Location . y Ġ* Ġ- 1 }" Ġx 2 ="${ bone . end Location . x }" Ġy 2 ="${ bone . end Location . y Ġ* Ġ- 1 }" Ġstroke =" black " Ġ/> """) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtarget ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw . println (""" Ġ< circle Ġcx ="${ it . x }" Ġcy ="${ it . y Ġ* Ġ- 1 }" Ġr =" 3 " Ġfill =" blue " Ġfill - opacity =" 0 . 5 "/> """) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpw . println ("</ svg >") ĊĠĠĠ Ġ} Ċ }