package Ġde . u ul m . se . co uched it . model . graphic . shapes Ċ Ċ /** Ċ Ġ* ĠA Ġpoly line Ġconsisting Ġof Ġmultiple Ġ[ points ] Ġthat Ġare Ġconnected Ġby Ġstraight Ġlines Ġbetween Ġthem . Ċ Ġ*/ Ċ class ĠS tra ight Segment Line ( points : ĠList < Point > Ġ= Ġempty List ()) Ġ: ĠLine () Ġ{ ĊĠĠĠ Ġvar Ġpoints : ĠMutable List < Point > Ġ= Ġpoints . to Mutable List () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCount Ġof Ġthe Ġ[ Point ] s Ġin Ġthis ĠLine . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġnum Points : ĠInt Ġget () Ġ= Ġthis . points . size ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFirst Ġpoint Ġof Ġthe Ġline . ĠDist inction Ġbetween Ġ[ start ] Ġand Ġ[ end ] Ġonly Ġis Ġrelevant Ġif Ġthe Ġline Ġhas Ġa Ġsemantic ĊĠĠĠĠ Ġ* Ġdirection . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġstart : ĠPoint ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpoints [ 0 ] ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . points [ 0 ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLast Ġpoint Ġof Ġthe Ġline . ĠDist inction Ġbetween Ġ[ start ] Ġand Ġ[ end ] Ġonly Ġis Ġrelevant Ġif Ġthe Ġline Ġhas Ġa Ġsemantic ĊĠĠĠĠ Ġ* Ġdirection . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġend : ĠPoint ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpoints [ points . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . points [ points . size Ġ- Ġ 1 ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġpoint Ġbefore Ġthe Ġpoint Ġwith ĠIndex Ġ[ before Index ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Point Before ( before Index : ĠInt , Ġpoint : ĠPoint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . points . add ( before Index , Ġpoint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġpoint Ġafter Ġthe Ġpoint Ġwith ĠIndex Ġ[ before Index ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Point After ( after Index : ĠInt , Ġpoint : ĠPoint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . points . add ( after Index Ġ+ Ġ 1 , Ġpoint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApp ends Ġa Ġpoint Ġat Ġthe Ġend Ġof Ġthe Ġline . ĠThis Ġwill Ġbecome Ġthe Ġnew Ġ[ end ] Ġpoint . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Point ToEnd ( point : ĠPoint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . points . add ( point ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġthe Ġpoint Ġstored Ġat Ġindex Ġ[ index ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException ĠIf Ġtrying Ġto Ġremove Ġthe Ġlast Ġpoint Ġof Ġthe Ġline ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Point ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . points . size Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" A Ġline Ġmust Ġhave Ġat Ġleast Ġone Ġpoint !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . points . remove At ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthis ĠLine 's Ġ[ Point ] Ġat Ġthe Ġgiven Ġ[ index ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠPoint Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . points [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġplus ( p : ĠPoint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . add Point ToEnd ( p ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġthat Ġ= Ġother Ġas ĠS tra ight Segment Line ? ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . points . size Ġ!= Ġthat !!. points . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġthis . points . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . points [ i ] Ġ!= Ġthat . points [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpoints . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcopy (): ĠS tra ight Segment Line Ġ= ĠS tra ight Segment Line ( points . map ( Point :: copy )) ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Str aight Segment Line (" Ġ+ Ġthis . points . map ( Point :: toString ). join ToString ("; ") Ġ+ Ġ")" Ċ } Ċ