/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 1 8 ĠSte fan ĠN ieder ha user Ġ( nid in @ g mx . ch ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġg uru . n idi . my 3 d Ċ Ċ import Ġg uru . n idi . simple 3 d . io . model Ċ import Ġg uru . n idi . simple 3 d . model .* Ċ import Ġg uru . n idi . simple 3 d . vector ize . Image Ċ import Ġg uru . n idi . simple 3 d . vector ize . outline Ċ import Ġg uru . n idi . simple 3 d . vector ize . simplify Ċ import Ġjava . awt . Basic Stroke Ċ import Ġjava . awt . Color Ċ import Ġjava . awt . image . Buffered Image Ċ import Ġjava . io . File Ċ import Ġjavax . image io . Image IO Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . min Ċ import Ġkotlin . math . sin Ċ import Ġkotlin . math . sqrt Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġfun Ġis Black ( rgb : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġred Ġ= Ġ( rgb Ġ ush r Ġ 1 6 ) Ġand Ġ 0 xFF ĊĠĠĠĠĠĠĠ Ġval Ġgreen Ġ= Ġ( rgb Ġ ush r Ġ 8 ) Ġand Ġ 0 xFF ĊĠĠĠĠĠĠĠ Ġval Ġblue Ġ= Ġ( rgb Ġ ush r Ġ 0 ) Ġand Ġ 0 xFF ĊĠĠĠĠĠĠĠ Ġval Ġl uminance Ġ= Ġ( red Ġ* Ġ 0 . 2 1 2 6 f Ġ+ Ġgreen Ġ* Ġ 0 . 7 1 5 2 f Ġ+ Ġblue Ġ* Ġ 0 . 0 7 2 2 f ) Ġ/ Ġ 2 5 5 ĊĠĠĠĠĠĠĠ Ġreturn Ġl uminance Ġ< Ġ 0 . 9 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġas Black And White ( img : ĠBufferedImage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠBufferedImage ( img . width , Ġimg . height , ĠBufferedImage . TYPE _ INT _ ARGB ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġimg . width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil Ġimg . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Black ( img . get RGB ( x , Ġy ))) Ġb . set RGB ( x , Ġy , Ġ 0 xff 0 0 0 0 0 0 . toInt ()) Ġelse Ġb . set RGB ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 xffffffff . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠImage IO . write ( b , Ġ" png ", ĠFile (" target / black And White . png ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġf ist (): ĠList < Vector > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠImage . from Classpath (" f ist . jpg ") ĊĠĠĠĠĠĠĠ Ġreturn Ġoutline ( img ) Ġ{ Ġis Black ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. simplify ( 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Vector (). scale (. 1 5 , Ġ. 1 5 , Ġ 1 ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhand ( w : ĠDouble , Ġh : ĠDouble ) Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠImage . from Classpath (" middle . jpg ") ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġoutline ( img ) Ġ{ Ġis Black ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. simplify ( 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Vector (). scale (. 1 5 , Ġ. 1 5 , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġpr ism Ring ( w , Ġh , Ġc ). translate ( 0 , Ġ 0 , Ġh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpe ace Form ( w : ĠDouble , Ġh : ĠDouble , Ġimg : ĠImage ) Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġoutline ( img ) Ġ{ Ġis Black ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. simplify ( 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Vector (). scale (. 1 5 , Ġ. 1 5 , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġpr ism Ring ( w , Ġh , Ġc ). translate ( 0 , Ġ 0 , Ġh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfinger ( w : ĠDouble , Ġh : ĠDouble ) Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠImage . from Classpath (" middle Only . png ") ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġoutline ( img ) Ġ{ Ġis Black ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. simplify ( 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Vector (). scale (. 1 5 , Ġ. 1 5 , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġpr ism Ring ( w , Ġh , Ġc ). translate ( 0 , Ġ 0 , Ġh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfinger Open ( w : ĠDouble , Ġh : ĠDouble ) Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠImage . from Classpath (" middle Open 2 . png ") ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġoutline ( img ) Ġ{ Ġis Black ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. simplify ( 1 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Vector (). scale (. 1 5 , Ġ. 1 5 , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġpr ism Ring ( w , Ġh , Ġc ). translate ( 0 , Ġ 0 , Ġh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġn ail ( w : ĠDouble , Ġh : ĠDouble ) Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠImage . from Classpath (" nail . png ") ĊĠĠĠĠĠĠĠ Ġas Black And White ( img . img ) ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġoutline ( img ) Ġ{ Ġis Black ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. simplify ( 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Vector (). scale (. 1 5 , Ġ. 1 5 , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġpr ism Ring ( w , Ġh , Ġc ). translate ( 0 , Ġ 0 , Ġh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġn ail Full ( h : ĠDouble ) Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠImage . from Classpath (" nail . png ") ĊĠĠĠĠĠĠĠ Ġas Black And White ( img . img ) ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġoutline ( img ) Ġ{ Ġis Black ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. simplify ( 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Vector (). scale (. 1 5 , Ġ. 1 5 , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġpr ism ( h , Ġc ). translate ( 0 , Ġ 0 , Ġh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfinger Full ( h : ĠDouble ) Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠImage . from Classpath (" middle Only . png ") ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġoutline ( img ) Ġ{ Ġis Black ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. simplify ( 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Vector (). scale (. 1 5 , Ġ. 1 5 , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġpr ism ( h , Ġc ). translate ( 0 , Ġ 0 , Ġh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhand Form () Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġhand ( 2 . 0 , Ġ 2 . 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġrest Ġ= Ġhand (. 2 , Ġ 2 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġbase Ġ+ Ġrest ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfinger Form () Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġfinger Open ( 3 . 6 , Ġ 2 . 5 ) Ġ// - Ġcube ( center Ġ= Ġv ( 2 5 , Ġ 4 , Ġ 1 . 2 5 ), Ġradius Ġ= Ġv ( 1 0 , Ġ 8 , Ġ 1 . 2 5 )) ĊĠĠĠĠĠĠĠ Ġval Ġrest Ġ= Ġfinger Open (. 4 , Ġ 1 7 . 5 ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġcube ( center Ġ= Ġv ( 2 5 , Ġ 4 , Ġ 1 . 2 5 ), Ġlength Ġ= Ġv ( 8 , Ġ 1 6 , Ġ 2 . 5 )) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcube ( center Ġ= Ġv ( 3 5 , Ġ 4 , Ġ 1 . 2 5 ), Ġlength Ġ= Ġv ( 8 , Ġ 1 6 , Ġ 2 . 5 )) Ċ // ĠĠĠĠĠĠĠ Ġval Ġn ail Ġ= Ġn ail (. 4 , Ġ 2 0 . 0 ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġholder Ġ= Ġcube ( center Ġ= Ġorigin , Ġradius Ġ= Ġv ( 6 , Ġ 6 , Ġ 1 . 2 5 )). translate ( 2 6 , Ġ 8 , Ġ 1 . 2 5 ) ĊĠĠĠĠĠĠĠ Ġbase Ġ+ Ġrest // Ġ+ top // Ġ+ holder Ġ- Ġn ail Full ( 2 . 5 ) Ġ+ Ġn ail Ġ+ Ġbase ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpe ace (): ĠImage Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= ĠBufferedImage ( 2 0 0 , Ġ 2 0 0 , ĠBufferedImage . TYPE _ INT _ ARGB ) ĊĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġimg . create Graphics () ĊĠĠĠĠĠĠĠ Ġg . stroke Ġ= ĠBasic Stroke ( 3 5 f ) ĊĠĠĠĠĠĠĠ Ġg . color Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠ Ġg . fillRect ( 0 , Ġ 0 , Ġ 2 0 0 , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġg . color Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ Ġg . draw Line ( 1 0 0 , Ġ 0 , Ġ 1 0 0 , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġg . draw Line ( 1 0 0 , Ġ 9 0 , Ġ 0 , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġg . draw Line ( 1 0 0 , Ġ 9 0 , Ġ 2 0 0 , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġg . color Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( x Ġ- Ġ 1 0 0 ) Ġ* Ġ( x Ġ- Ġ 1 0 0 ) Ġ+ Ġ( y Ġ- Ġ 1 0 0 ) Ġ* Ġ( y Ġ- Ġ 1 0 0 ) Ġ> Ġ 6 0 0 0 ) Ġg . fillRect ( x , Ġy , Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠImage IO . write ( img , Ġ" png ", ĠFile (" target / pe ace . png ")) ĊĠĠĠĠĠĠĠ Ġreturn ĠImage ( img ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġround () Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpe ace Ġ= Ġpe ace () ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġoutline ( pe ace ) Ġ{ Ġis Black ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. simplify ( 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Vector (). scale (. 2 , Ġ. 2 , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġ- prism Ring (. 4 , Ġ 2 0 , Ġc ). translate (- 2 0 , Ġ- 2 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġq Ġ= Ġ- prism Ring ( 7 , Ġ. 2 , Ġ 2 . 5 , Ġc ). translate (- 2 0 , Ġ- 2 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġpoints Ġ= Ġ( 0 Ġuntil Ġ 3 6 0 Ġstep Ġ 9 ). map Ġ{ Ġv ( r Ġ* Ġcos ( it . deg ), Ġr Ġ* Ġsin ( it . deg ), Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġ- prism Ring ( 3 , Ġ 2 . 5 , Ġpoints ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġrest Ġ= Ġ- prism Ring (. 4 , Ġ 2 0 , Ġpoints ). translate ( 0 , Ġ 0 , Ġ 2 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġp Ġ+ Ġq Ġ+ Ġbase Ġ+ Ġrest ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsmall () Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr 2 Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġ( 0 Ġuntil Ġ 3 6 0 Ġstep Ġ 9 ). map Ġ{ Ġv ( r 2 Ġ* Ġcos ( it . deg ), Ġr 2 Ġ* Ġsin ( it . deg ), Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġ- prism Ring ( 4 . 2 , Ġ 2 . 5 , Ġp 2 ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġ 1 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġpoints Ġ= Ġ( 0 Ġuntil Ġ 3 6 0 Ġstep Ġ 9 ). map Ġ{ Ġv ( r Ġ* Ġcos ( it . deg ), Ġr Ġ* Ġsin ( it . deg ), Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlong Ġ= Ġ- prism Ring (. 4 , Ġ 2 2 . 5 , Ġpoints ). translate ( 0 , Ġ 0 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġlong Full Ġ= Ġpr ism ( 2 5 , Ġpoints ). translate ( 0 , Ġ 0 , Ġ- 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġcube ( length Ġ= Ġv ( 2 4 , Ġ 5 0 , Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġ( base Ġ- Ġlong Full Ġ+ Ġlong Ġ- Ġm ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsmall F ist () Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr 2 Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġ( 0 Ġuntil Ġ 3 6 0 Ġstep Ġ 9 ). map Ġ{ Ġv ( r 2 Ġ* Ġcos ( it . deg ), Ġr 2 Ġ* Ġsin ( it . deg ), Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġ- prism Ring ( 4 . 2 , Ġ 2 . 5 , Ġp 2 ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġps Ġ= Ġf ist () ĊĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġps . fold ( v ( 1 0 0 0 , Ġ 1 0 0 0 , Ġ 1 0 0 0 )) Ġ{ Ġa , Ġn Ġ-> Ġv ( min ( a . x , Ġn . x ), Ġmin ( a . y , Ġn . y ), Ġmin ( a . z , Ġn . z )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpoints Ġ= Ġps . map Ġ{ Ġ. 2 5 Ġ* Ġv ( it . x Ġ- Ġmin . x , Ġit . y Ġ- Ġmin . y , Ġit . z Ġ- Ġmin . z ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlong Ġ= Ġpr ism Ring (. 4 , Ġ 2 2 . 5 , Ġpoints ). translate (- 1 0 . 5 , Ġ- 1 3 . 5 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġlong Full Ġ= Ġpr ism ( 2 5 , Ġpoints ). translate (- 1 0 . 5 , Ġ- 1 3 . 5 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġcube ( length Ġ= Ġv ( 2 4 , Ġ 5 0 , Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġ( base Ġ- Ġlong Full Ġ+ Ġlong Ġ- Ġm ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsmall Flow er () Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr 2 Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġ( 0 Ġuntil Ġ 3 6 0 Ġstep Ġ 9 ). map Ġ{ Ġv ( r 2 Ġ* Ġcos ( it . deg ), Ġr 2 Ġ* Ġsin ( it . deg ), Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġ- prism Ring ( 4 . 2 , Ġ 2 . 5 , Ġp 2 ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġ 5 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġr 3 Ġ= Ġ 4 . 8 ĊĠĠĠĠĠĠĠ Ġval Ġf Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġf Ġ* Ġsqrt ( 3 . 0 ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġpoints Ġ= Ġ( 0 Ġuntil Ġ 3 6 0 Ġstep Ġ 9 ). map Ġ{ Ġv ( r Ġ* Ġcos ( it . deg ), Ġr Ġ* Ġsin ( it . deg ), Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpoints 2 Ġ= Ġ( 0 Ġuntil Ġ 3 6 0 Ġstep Ġ 9 ). map Ġ{ Ġv ( r 3 Ġ* Ġcos ( it . deg ), Ġr 3 Ġ* Ġsin ( it . deg ), Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlong Ġ= Ġ- prism Ring (. 4 , Ġ 2 2 . 5 , Ġpoints ). translate (- d , Ġ 0 , Ġ 2 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- prism Ring (. 4 , Ġ 2 2 . 5 , Ġpoints ). translate ( d , Ġf , Ġ 2 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- prism Ring (. 4 , Ġ 2 2 . 5 , Ġpoints ). translate ( d , Ġ- f , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġlong Full Ġ= Ġpr ism ( 3 5 , Ġpoints 2 ). translate ( d , Ġ- f , Ġ- 5 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpr ism ( 3 5 , Ġpoints 2 ). translate ( d , Ġf , Ġ- 5 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpr ism ( 3 5 , Ġpoints 2 ). translate (- d , Ġ 0 , Ġ- 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġcube ( length Ġ= Ġv ( 2 4 , Ġ 5 0 , Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġ( base Ġ+ Ġlong Ġ- Ġlong Full Ġ- Ġm ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsmall Cross () Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr 2 Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġ( 0 Ġuntil Ġ 3 6 0 Ġstep Ġ 9 ). map Ġ{ Ġv ( r 2 Ġ* Ġcos ( it . deg ), Ġr 2 Ġ* Ġsin ( it . deg ), Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġ- prism Ring ( 4 . 2 , Ġ 2 . 5 , Ġp 2 ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġpoints Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r Ġ/ Ġ 3 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 2 Ġ* Ġr Ġ/ Ġ 3 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 2 Ġ* Ġr Ġ/ Ġ 3 , Ġr Ġ/ Ġ 3 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r , Ġr Ġ/ Ġ 3 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r , Ġ 2 Ġ* Ġr Ġ/ Ġ 3 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 2 Ġ* Ġr Ġ/ Ġ 3 , Ġ 2 Ġ* Ġr Ġ/ Ġ 3 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 2 Ġ* Ġr Ġ/ Ġ 3 , Ġr , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r Ġ/ Ġ 3 , Ġr , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r Ġ/ Ġ 3 , Ġ 2 Ġ* Ġr Ġ/ Ġ 3 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 0 , Ġ 2 Ġ* Ġr Ġ/ Ġ 3 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 0 , Ġr Ġ/ Ġ 3 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r Ġ/ Ġ 3 , Ġr Ġ/ Ġ 3 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġlong Ġ= Ġ- prism Ring (. 4 , Ġ 2 2 . 5 , Ġpoints ). translate (- r Ġ/ Ġ 2 , Ġ- r Ġ/ Ġ 2 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġlong Full Ġ= Ġpr ism ( 2 5 , Ġpoints ). translate (- r Ġ/ Ġ 2 , Ġ- r Ġ/ Ġ 2 , Ġ- 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġcube ( length Ġ= Ġv ( 2 4 , Ġ 5 0 , Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġ( base Ġ- Ġlong Full Ġ+ Ġlong Ġ- Ġm ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsmall Flash () Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr 2 Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġ( 0 Ġuntil Ġ 3 6 0 Ġstep Ġ 9 ). map Ġ{ Ġv ( r 2 Ġ* Ġcos ( it . deg ), Ġr 2 Ġ* Ġsin ( it . deg ), Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġ- prism Ring ( 4 . 2 , Ġ 2 . 5 , Ġp 2 ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġ 1 3 . 5 ĊĠĠĠĠĠĠĠ Ġval Ġxs Ġ= Ġ 1 . 5 ĊĠĠĠĠĠĠĠ Ġval Ġpoints Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 2 Ġ* Ġr Ġ/ Ġ 3 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 2 Ġ* Ġr Ġ/ Ġ 3 , Ġ 2 Ġ* Ġr Ġ/ Ġ 3 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r , Ġ 2 Ġ* Ġr Ġ/ Ġ 3 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 0 , Ġ 2 Ġ* Ġr , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r Ġ/ Ġ 3 , Ġr , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 0 , Ġr , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġv ( it . x Ġ* Ġxs , Ġit . y , Ġit . z ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlong Ġ= Ġ- prism Ring (. 4 , Ġ 2 2 . 5 , Ġpoints ). translate (- r Ġ* Ġxs Ġ/ Ġ 2 , Ġ- r , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġlong Full Ġ= Ġpr ism ( 2 5 , Ġpoints ). translate (- r Ġ* Ġxs Ġ/ Ġ 2 , Ġ- r , Ġ- 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġcube ( length Ġ= Ġv ( 2 4 , Ġ 5 0 , Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġ( base Ġ- Ġlong Full Ġ+ Ġlong Ġ- Ġm ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsmall Lambda () Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr 2 Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġ( 0 Ġuntil Ġ 3 6 0 Ġstep Ġ 9 ). map Ġ{ Ġv ( r 2 Ġ* Ġcos ( it . deg ), Ġr 2 Ġ* Ġsin ( it . deg ), Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġ- prism Ring ( 4 . 2 , Ġ 2 . 5 , Ġp 2 ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġ 1 3 . 5 ĊĠĠĠĠĠĠĠ Ġval Ġxs Ġ= Ġ 1 . 5 ĊĠĠĠĠĠĠĠ Ġval Ġpoints Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 0 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r Ġ/ Ġ 3 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r , Ġ 2 Ġ* Ġr , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 2 Ġ* Ġr Ġ/ Ġ 3 , Ġ 2 Ġ* Ġr , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r Ġ/ Ġ 2 , Ġ 4 Ġ* Ġr Ġ/ Ġ 3 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r Ġ/ Ġ 3 , Ġ 2 Ġ* Ġr , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( 0 , Ġ 2 Ġ* Ġr , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ( r Ġ/ Ġ 3 , Ġr , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġv ( it . x Ġ* Ġxs , Ġit . y , Ġit . z ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlong Ġ= Ġ- prism Ring (. 4 , Ġ 2 2 . 5 , Ġpoints ). translate (- r Ġ* Ġxs Ġ/ Ġ 2 , Ġ- r , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġlong Full Ġ= Ġpr ism ( 2 5 , Ġpoints ). translate (- r Ġ* Ġxs Ġ/ Ġ 2 , Ġ- r , Ġ- 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġcube ( length Ġ= Ġv ( 2 4 , Ġ 5 0 , Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġ( base Ġ- Ġlong Full Ġ+ Ġlong Ġ- Ġm ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġsmall Pe ace () Ġ= Ġc sg Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr 2 Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġ( 0 Ġuntil Ġ 3 6 0 Ġstep Ġ 9 ). map Ġ{ Ġv ( r 2 Ġ* Ġcos ( it . deg ), Ġr 2 Ġ* Ġsin ( it . deg ), Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġ- prism Ring ( 4 . 2 , Ġ 2 . 5 , Ġp 2 ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġoutline ( pe ace ()) Ġ{ Ġis Black ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. simplify ( 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Vector (). scale (. 2 , Ġ. 2 , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlong Ġ= Ġpr ism Ring (. 4 , Ġ 2 2 . 5 , Ġc ). translate (- 2 0 , Ġ- 2 0 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġlong Full Ġ= Ġpr ism ( 2 5 , Ġc ). translate (- 2 0 , Ġ- 2 0 , Ġ 2 0 ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġq Ġ= Ġpr ism Ring ( 3 . 5 , Ġ. 2 , Ġ 2 . 5 , Ġfalse , Ġc ). translate (- 2 0 , Ġ- 2 0 , Ġ 0 ) Ċ Ċ // ĠĠĠĠĠĠĠ Ġval Ġlong Ġ= Ġpr ism Ring (. 2 , Ġ 2 2 . 5 , Ġfalse , Ġpoints ). translate ( 0 , Ġ 0 , Ġ 2 0 ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġlong Full Ġ= Ġpr ism ( 2 5 . 0 , Ġtrue , Ġpoints ). translate ( 0 , Ġ 0 , Ġ- 5 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġcube ( length Ġ= Ġv ( 3 0 , Ġ 5 0 , Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġ( base Ġ- Ġlong Full Ġ+ Ġlong Ġ- Ġm ). translate ( 0 , Ġ 0 , Ġ 2 . 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpull er () Ġ= Ġ( f inger Full ( 2 . 5 ) Ġ- Ġfinger ( 2 . 0 , Ġ 2 . 5 )). scale (- 1 , Ġ 1 , Ġ 1 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcy linder ( radius Ġ= Ġ 5 ). scale ( 1 , Ġ 2 4 , Ġ 1 ). rotate X ( 9 0 . deg ). translate (- 2 1 , Ġ 5 2 , Ġ 1 2 ) ĊĊĠĠĠ Ġmodel ( File (" target / small - f ist . stl ")) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġas Black And White ( pe ace (). img ) ĊĠĠĠĠĠĠĠ Ġadd ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġpull er (), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġhand Form (), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfinger Form (). translate ( 5 0 , Ġ 0 , Ġ 0 ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġsmall Flow er (). translate ( 6 0 , Ġ 2 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsmall F ist () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ