/* ĊĠĠĠ ĠCopy println Ġ 2 0 1 7 ĠWill ĠWin der ĊĊĠĠĠ ĠThis Ġfile Ġis Ġpart Ġof ĠUniversal ĠG code ĠSender Ġ( U GS ). ĊĊĠĠĠ ĠU GS Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify ĊĠĠĠ Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby ĊĠĠĠ Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor ĊĠĠĠ Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . ĊĊĠĠĠ ĠU GS Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , ĊĠĠĠ Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof ĊĠĠĠ ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe ĊĠĠĠ ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . ĊĊĠĠĠ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense ĊĠĠĠ Ġalong Ġwith ĠU GS . Ġ ĠIf Ġnot , Ġsee Ġ< http :// www . gnu . org / licenses />. Ċ Ġ*/ Ċ package Ġcom . will win der . ug s . platform . d owel Ċ Ċ import Ġcom . google . common . collect . Iter ables Ċ import Ġcom . will win der . universal g codes ender . g code . util . G code Utils Ċ import Ġcom . will win der . universal g codes ender . model . Unit Utils Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . util . Date Ċ import Ġjavax . vec math . Point 3 d Ċ Ċ /* ĊĊĠ Ġ@ author Ġw win der ĊĠ ĠCreated Ġon ĠOct Ġ 2 9 , Ġ 2 0 1 7 Ċ */ Ċ Ċ public Ġclass ĠD owel Generator ( var Ġsettings : ĠD owel Settings ) Ġ{ ĊĊĠ Ġpublic Ġfun Ġunit Multiplier () Ġ= ĠUnit Utils . scale Units ( settings . units , ĠUnit Utils . Units . MM ) ĊĊĠ Ġpublic Ġfun Ġget Locations ( target : ĠUnit Utils . Units ): ĠList < Point 3 d > Ġ{ ĊĠĠĠ Ġval Ġmult = ĠUnit Utils . scale Units ( settings . units , Ġtarget ) ĊĠĠĠ Ġval Ġoffset Ġ= Ġmult Ġ* Ġ( settings . d owel Di ameter Ġ+ Ġsettings . bit Di ameter Ġ* Ġ 1 . 2 5 ) ĊĠĠĠ Ġval Ġcorner Ġ= ĠPoint 3 d ( ĊĠĠĠĠĠĠĠ Ġmult Ġ* Ġsettings . d owel Di ameter Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠ Ġmult Ġ* Ġsettings . d owel Di ameter Ġ/ Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠ 0 . 0 ) ĊĊĠĠĠ Ġval Ġret : ĠMutable List < Point 3 d > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġsettings . num D ow els X ) Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil Ġsettings . num D ow els Y ) Ġ{ ĊĠĠĠĠĠĠĠ Ġret . add ( Point 3 d ( corner . x Ġ+ Ġx Ġ* Ġoffset , Ġcorner . y Ġ+ Ġy Ġ* Ġoffset , Ġ 0 . 0 )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġret ĊĠ Ġ} ĊĊĠ Ġpublic Ġfun Ġgenerate ( output : ĠPrintWriter ) Ġ{ ĊĠĠĠ Ġ// ĠSet Ġunits Ġand Ġabsolute Ġmovement / IJ K Ġmode . ĊĠĠĠ Ġoutput . println ("( Generated Ġby ĠUniversal ĠG code ĠSender Ġ${ Date () }) ") ĊĠĠĠ Ġoutput . println ("${ G code Utils . unit Command ( settings . units )} ĠG 9 0 ĠG 9 1 . 1 ") ĊĠĠĠ Ġoutput . println (" G 1 7 ĠF ${ settings . feed }") ĊĠĠĠ Ġoutput . println (" M 3 ") ĊĊĠĠĠ Ġfor Ġ( point Ġin Ġget Locations ( settings . units )) Ġ{ ĊĠĠĠĠĠ Ġgenerate One ( point , Ġoutput ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoutput . println ("\ n ( All Ġdone ! )") ĊĠĠĠ Ġoutput . println (" M 5 ") ĊĠĠĠ Ġoutput . println (" M 3 0 ") ĊĠ Ġ} ĊĊĠ Ġpublic Ġfun Ġgenerate One ( at : ĠPoint 3 d , Ġoutput : ĠPrintWriter ) Ġ{ ĊĠĠĠ Ġoutput . println ("\ n ( D owel Ġat Ġx :${ at . x } Ġy :${ at . y }) ") ĊĊĠĠĠ Ġval Ġradius Ġ= Ġsettings . bit Di ameter Ġ/ Ġ 2 . 0 Ġ+ Ġsettings . d owel Di ameter Ġ/ Ġ 2 . 0 ĊĠĠĠ Ġval Ġquarter Depth Ġ= Ġsettings . cut Depth Ġ/ Ġ 4 . 0 ĊĊĠĠĠ Ġval Ġarc Sequence : ĠIterator < Point 3 d > Ġ= ĠIter ables . cycle ( listOf ( ĊĠĠĠĠĠĠĠ ĠPoint 3 d ( at . x Ġ- Ġradius , Ġat . y , Ġ 0 . 0 ), ĊĠĠĠĠĠĠĠ ĠPoint 3 d ( at . x , Ġat . y Ġ+ Ġradius , Ġ 0 . 0 ), ĊĠĠĠĠĠĠĠ ĠPoint 3 d ( at . x Ġ+ Ġradius , Ġat . y , Ġ 0 . 0 ), ĊĠĠĠĠĠĠĠ ĠPoint 3 d ( at . x , Ġat . y Ġ- Ġradius , Ġ 0 . 0 ) ĊĠĠĠ Ġ )). iterator () ĊĊĠĠĠ Ġvar Ġlast Ġ= Ġarc Sequence . next (); ĊĊĠĠĠ Ġ// ĠStart ĊĠĠĠ Ġoutput . println (" G 0 ĠX ${ last . x } ĠY ${ last . y }") ĊĠĠĠ Ġoutput . println (" G 1 ĠZ 0 ") ĊĠĠĠ Ġoutput . println (" G 1 7 ĠF ${ settings . feed }") ĊĊĠĠĠ Ġ// ĠCreate Ġthe Ġhe lix ĊĠĠĠ Ġvar Ġcurrent Depth Ġ= Ġ 0 . 0 ĊĠĠĠ Ġwhile Ġ( current Depth Ġ> Ġ- settings . d owel Length ) Ġ{ ĊĠĠĠĠĠ Ġval Ġn Ġ= Ġarc Sequence . next () ĊĠĠĠĠĠ Ġoutput . println (" G 0 2 ĠX ${ n . x } ĠY ${ n . y } ĠZ ${ current Depth } ĠI ${ at . x Ġ- Ġlast . x } ĠJ ${ at . y Ġ- Ġlast . y }") ĊĠĠĠĠĠ Ġlast Ġ= Ġn ĊĠĠĠĠĠ Ġcurrent Depth Ġ-= Ġquarter Depth ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġfinal Ġloop Ġat Ġfinal Ġdepth ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 4 ) Ġ{ ĊĠĠĠĠĠ Ġval Ġn Ġ= Ġarc Sequence . next () ĊĠĠĠĠĠ Ġoutput . println (" G 0 2 ĠX ${ n . x } ĠY ${ n . y } ĠZ ${ - settings . d owel Length } ĠI ${ at . x Ġ- Ġlast . x } ĠJ ${ at . y Ġ- Ġlast . y }") ĊĠĠĠĠĠ Ġlast Ġ= Ġn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠLift Ġtool Ġout Ġof Ġp ocket . ĊĠĠĠ Ġoutput . println (" G 0 ĠZ ${ settings . safety Height }") ĊĠ Ġ} Ċ } Ċ