package Ġapp . grav iton . ui Ċ Ċ import Ġjavafx . animation . Animation Ċ import Ġjavafx . beans . binding . Bindings Ċ import Ġjavafx . beans . property . ReadOnly Double Property Ċ import Ġjavafx . beans . property . Simple Boolean Property Ċ import Ġjavafx . beans . property . Simple Double Property Ċ import Ġjavafx . scene . effect . Blend Mode Ċ import Ġjavafx . scene . layout . Stack Pane Ċ import Ġjavafx . scene . paint . Color Ċ import Ġjavafx . scene . paint . Cycle Method Ċ import Ġjavafx . scene . paint . Linear Gradient Ċ import Ġjavafx . scene . paint . Stop Ċ import Ġjavafx . scene . transform . Rotate Ċ import Ġt orn ad of x .* Ċ import Ġjava . util . concurrent . Callable Ċ Ċ class ĠThree D Spinner ( private Ġval Ġcolor : ĠColor ) Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfade Level Ġ= ĠSimple Double Property ( 0 . 0 ) ĊĠĠĠ Ġprivate Ġval Ġanim Time Ġ= Ġ 0 . 5 . seconds ĊĊĠĠĠ Ġval Ġvisible Ġ= ĠSimple Boolean Property () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġvisible . onChange Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġfade Level . animate ( 1 . 0 , Ġanim Time ) Ġelse Ġfade Level . animate ( 0 . 0 , Ġanim Time ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġroot Ġ= Ġstack pane Ġ{ ĊĠĠĠĠĠĠĠ Ġslice ( 4 5 . 0 , Ġ- 3 5 . 0 , Ġ 0 . 0 , Ġfade Level ) ĊĠĠĠĠĠĠĠ Ġslice ( 5 5 . 0 , Ġ 0 . 0 , Ġ- 4 5 . 0 , Ġfade Level ) ĊĠĠĠĠĠĠĠ Ġslice ( 0 . 0 , Ġ- 6 0 . 0 , Ġ 9 0 . 0 , Ġfade Level ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠStack Pane . slice ( y Angle : ĠDouble , Ġx Angle : ĠDouble , Ġz Angle : ĠDouble , Ġfade Level : ĠReadOnly Double Property ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbackwards Gradient Ġ= ĠBind ings . createObject Binding ( Callable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinear Gradient ( 0 . 0 , Ġ 0 . 0 , Ġfade Level . value , Ġ 0 . 0 , Ġtrue , ĠCycle Method . NO _ CYCLE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStop ( 0 . 0 , Ġcolor ), ĠStop ( 1 . 0 , ĠColor . TRANSP ARENT )) ĊĠĠĠĠĠĠĠ Ġ}, Ġfade Level ) ĊĠĠĠĠĠĠĠ Ġval Ġgradient Ġ= ĠBind ings . createObject Binding ( Callable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinear Gradient ( 1 . 0 Ġ- Ġfade Level . value , Ġ 0 . 0 , Ġ 1 . 0 , Ġ 0 . 0 , Ġtrue , ĠCycle Method . NO _ CYCLE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStop ( 0 . 0 , ĠColor . TRANSP ARENT ), ĠStop ( 1 . 0 , Ġcolor )) ĊĠĠĠĠĠĠĠ Ġ}, Ġfade Level ) ĊĊĠĠĠĠĠĠĠ Ġgroup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Property (). bind ( if Ġ( z Angle Ġ<= Ġ 0 . 0 ) Ġbackwards Gradient Ġelse Ġgradient ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġradius Property (). bind ( this @ slice . width Property (). divide ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġradius Property (). bind ( this @ slice . width Property (). divide ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtranslateY Ġ= Ġ 1 5 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblend Mode Ġ= ĠBlend Mode . MULTI PLY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopacity Property (). bind ( fade Level ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransforms Ġ+= ĠRotate ( y Angle , ĠRotate . Y _ AXIS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransforms Ġ+= ĠRotate ( x Angle , ĠRotate . X _ AXIS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransforms Ġ+= ĠRotate ( z Angle , ĠRotate . Z _ AXIS ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadj Ġ= Ġif Ġ( z Angle Ġ> Ġ 0 ) Ġ 1 . 0 Ġelse Ġ- 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġangle Property (). animate (( 3 6 0 . 0 Ġ* Ġadj ) Ġ+ Ġz Angle , Ġ 2 . 5 . seconds ) Ġ{ Ġcycle Count Ġ= ĠAnimation . IN DEFIN ITE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ