package Ġcom . example . demo . data Structures Ċ Ċ import Ġcom . example . demo . app . UI Controller Ċ import Ġcom . example . demo . resources . Application Resources Ċ import Ġjavafx . beans . property . Simple Double Property Ċ import Ġjavafx . scene . control . Label Ċ import Ġjavafx . scene . shape . Circle Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ class ĠVertex (_ pos X : ĠDouble , Ġ_ pos Y : ĠDouble ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġradius : ĠDouble Ġ= ĠApplication Resources . vertex Radius ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġpos X : ĠDouble ĊĠĠĠ Ġprivate Ġvar Ġpos Y : ĠDouble ĊĊĠĠĠ Ġprivate Ġvar Ġindex Ġby ĠDeleg ates . notNull < Int >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlabel Index : ĠLabel ĊĠĠĠ Ġ/* ĠOptional Ġlabels Ġ- Ġcheck boxes Ġ-> ĠRight Ġside ĊĠĠĠĠĠĠ Ġlabel Degree Ġ( if ĠP Ġ- Ġgreen Ġcolor , Ġif ĠNP Ġ- Ġred ), Ġoptional Ġlabels ĊĠĠĠĠĠĠ Ġlabel Ne ighbours Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġvertex Model : ĠCircle ĊĊĠĠĠ Ġprivate Ġvar Ġedges : ĠArray < Edge > Ġ= Ġempty Array () ĊĠĠĠ Ġprivate Ġvar Ġdegree : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ Ġpos X Ġ= Ġ_ pos X ĊĠĠĠĠĠĠĠ Ġpos Y Ġ= Ġ_ pos Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Label ( new Label : ĠLabel ){ ĊĠĠĠĠĠĠĠ Ġlabel Index Ġ= Ġnew Label ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġget Label (): ĠLabel { ĊĠĠĠĠĠĠĠ Ġreturn Ġlabel Index ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġset Model ( new Model : ĠCircle ){ ĊĠĠĠĠĠĠĠ Ġvertex Model Ġ= Ġnew Model ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun ĠgetModel (): ĠCircle { ĊĠĠĠĠĠĠĠ Ġreturn Ġvertex Model ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġupdate Label Index (){ ĊĠĠĠĠĠĠĠ Ġlabel Index . text Ġ= Ġindex . toString () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Jvm Name (" set Index 1 ") ĊĠĠĠ Ġfun Ġset Index ( int : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġindex Ġ= Ġint ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Jvm Name (" getIndex 1 ") ĊĠĠĠ Ġfun Ġget Index (): ĠInt { ĊĠĠĠĠĠĠĠ Ġreturn Ġindex ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġupdate Position ( new X : ĠDouble , Ġnew Y : ĠDouble , Ġvertices : ĠArray < Vertex > ){ ĊĠĠĠĠĠĠĠ Ġif Ġ( UI Controller . is V Intersect s ( new X , Ġnew Y , Ġ( vertices . filter Ġ{ Ġit Ġ!= Ġthis Ġ}). to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠUI Controller . is Outside Of Area ( Application Resources . width , ĠApplication Resources . height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew X , Ġnew Y , ĠVertex . radius )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ// Ġif Ġintersect s Ġwith ĠV Ġor Ġborders Ġ-> Ġstop Ġdrag ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġvertex Ġmodel Ġpos ĊĠĠĠĠĠĠĠ Ġpos X Ġ= Ġnew X ; Ġpos Y Ġ= Ġnew Y ĊĠĠĠĠĠĠĠ Ġvertex Model . center X Ġ= Ġnew X ĊĠĠĠĠĠĠĠ Ġvertex Model . center Y Ġ= Ġnew Y ĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġlabel Ġindex Ġpos ĊĠĠĠĠĠĠĠ Ġlabel Index . layout X Ġ= ĠUI Controller . getLabel Pos X ( new X , Ġindex ) ĊĠĠĠĠĠĠĠ Ġlabel Index . layout Y Ġ= ĠUI Controller . getLabel Pos Y ( new Y ) ĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġedges Ġorientation ĊĠĠĠĠĠĠĠ ĠUI Controller . update Edges ( this . get Edges ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġget Position (): ĠList < Double >{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( pos X , pos Y ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġadd Edge ( edge : ĠEdge ){ ĊĠĠĠĠĠĠĠ Ġedges Ġ+= Ġedge ĊĠĠĠĠĠĠĠ Ġdegree Ġ+= Ġ 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġget Edges (): ĠArray < Edge >{ ĊĠĠĠĠĠĠĠ Ġreturn Ġedges ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġget Degree (): ĠInt { ĊĠĠĠĠĠĠĠ Ġreturn Ġdegree ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġget Degree With V ( vertex : ĠVertex ): ĠInt { ĊĠĠĠĠĠĠĠ Ġvar Ġdeg Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġedges . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . get V 1 () Ġ== Ġvertex Ġ&& Ġit . get V 2 () Ġ== Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġit . get V 1 () Ġ== Ġthis Ġ&& Ġit . get V 2 () Ġ== Ġvertex ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeg Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdeg ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġget Degree To V ( vertex : ĠVertex ): ĠInt { ĊĠĠĠĠĠĠĠ Ġvar Ġdeg Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġedges . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . get V 1 () Ġ== Ġthis Ġ&& Ġit . get V 2 () Ġ== Ġvertex ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeg Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdeg ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġunlink Edge ( edge : ĠEdge ){ ĊĠĠĠĠĠĠĠ Ġedges Ġ= Ġ( edges . filter Ġ{ Ġit Ġ!= Ġedge Ġ}). to Typed Array () ĊĠĠĠĠĠĠĠ Ġdegree Ġ-= Ġ 1 ĊĠĠĠ Ġ} Ċ }