package Ġcom . l hw dev . math . projection 3 d Ċ Ċ import Ġcom . l hw dev . math . model . Face 3 d Ċ import Ġcom . l hw dev . math . model . Line 3 d Ċ import Ġcom . l hw dev . math . model . Model 3 d Ċ import Ġcom . l hw dev . math . vector . Mutable Vector 3 d Ċ import Ġorg . w 3 c . dom . Canvas Rendering Context 2 D ĊĊ Ċ fun ĠCanvas Rendering Context 2 D . render Model Js ( viewport : ĠView port , Ġmodel 3 d : ĠModel 3 d ) Ġ{ Ċ ĉ val Ġcache Ġ= ĠMutable Vector 3 d () ĊĉĊ ĉ for ( element Ġin Ġmodel 3 d . elements ) Ġwhen ( element ) Ġ{ Ċĉ ĉ is ĠLine 3 d Ġ-> Ġ{ Ċĉĉ ĉ beginPath () Ċĉĉ ĉ viewport . translate ( element . points . first (), Ġcache ) Ċĉĉ ĉ moveTo ( cache . x . toDouble (), Ġcache . y . toDouble ()) Ċĉĉ ĉ for ( point Ġin Ġelement . points . drop ( 1 )) Ġ{ Ċĉĉĉ ĉ viewport . translate ( point , Ġcache ) Ċĉĉĉ ĉ lineTo ( cache . x . toDouble (), Ġcache . y . toDouble ()) Ċĉĉ ĉ } Ċĉĉ ĉ stroke () Ċĉ ĉ } Ċĉ ĉ is ĠFace 3 d Ġ-> Ġ{ Ċĉĉ ĉ beginPath () Ċĉĉ ĉ viewport . translate ( element . points . first (), Ġcache ) Ċĉĉ ĉ moveTo ( cache . x . toDouble (), Ġcache . y . toDouble ()) Ċĉĉ ĉ for ( point Ġin Ġelement . points . drop ( 1 )) Ġ{ Ċĉĉĉ ĉ viewport . translate ( point , Ġcache ) Ċĉĉĉ ĉ lineTo ( cache . x . toDouble (), Ġcache . y . toDouble ()) Ċĉĉ ĉ } Ċĉĉ ĉ fill () Ċĉ ĉ } Ċ ĉ } Ċ } Ċ