package Ġcom . app ac ou stic . co int ester . core . framework Ċ Ċ // ĠĠĠ Ġ| Ġlower Ġbound Ġ Ġ... Ġ Ġhigher Ġbound Ġ| Ġ Ġphysical Ġunit Ċ // ĠĠĠ Ġ| Ġ 0 ĠĠĠĠĠĠĠĠĠĠĠ Ġ... ĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ| Ġ Ġ" unit Ġ 1 " Ġ( Mapping Ġcan Ġbe Ġlinear Ġor Ġlog arith mic ) Ċ // ĠIn ĠLINE AR Ġmode Ġ( default ): Ċ // ĠĠĠ Ġ| lower Ġvalue Ġ Ġ... ĠĠĠ Ġhigher Ġvalue | Ġ Ġphysical Ġunit Ċ // ĠĠĠ Ġ| Ġshift ĠĠĠĠĠĠ Ġ... Ġshift Ġ+ Ġ 1 / zoom Ġ| Ġ Ġ" unit Ġ 1 ", Ġ 0 = lower Bound , Ġ 1 = upper Bound Ċ // ĠĠĠ Ġ| Ġ 0 Ġ| Ġ 1 Ġ| ĠĠĠĠ Ġ... ĠĠĠĠĠĠĠĠĠ Ġ| Ġn - 1 Ġ| Ġ Ġpx Ċ // ĠIn ĠLINE AR _ ON Ġmode Ġ( not Ġimplemented ): Ċ // ĠĠĠĠĠ Ġ| lower Ġvalue Ġ... ĠĠĠ Ġhigher Ġvalue | ĠĠĠĠ Ġphysical Ġunit Ċ // ĠĠĠĠĠ Ġ| Ġshift ĠĠĠĠĠ Ġ... Ġshift Ġ+ Ġ 1 / zoom Ġ| ĠĠĠĠ Ġ" unit Ġ 1 " Ġwindow Ċ // ĠĠĠ Ġ| Ġ 0 Ġ| Ġ 1 Ġ| ĠĠĠĠĠ Ġ... ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġn - 1 Ġ| Ġ Ġpx Ċ /** Ċ Ġ* ĠMapping Ġbetween Ġphysical Ġvalue Ġand Ġscreen Ġpixel Ġposition Ċ Ġ*/ Ċ class ĠScreen Physical Mapping Ġ{ ĊĠĠĠ Ġvar Ġmap Type Ġ// ĠLinear Ġor ĠLog ĊĠĠĠĠĠĠĠ Ġ: ĠType ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġn Canvas Px : ĠDouble ĊĠĠĠ Ġvar Ġlower Bound : ĠDouble ĊĠĠĠ Ġvar Ġupper Bound Ġ// ĠPhysical Ġlimits ĊĠĠĠĠĠĠĠ Ġ: ĠDouble ĊĠĠĠ Ġvar Ġlower View Bound : ĠDouble ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġupper View Bound Ġ// ĠView Ġbounds ĊĠĠĠĠĠĠĠ Ġ: ĠDouble ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġzoom Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġshift Ġ= Ġ 0 . 0 Ġ// Ġzoom == 1 : Ġno Ġzoom ing , Ġshift = 0 : Ġno Ġshift ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġenum Ġclass ĠType ( val Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLINE AR ( 0 ), ĠLINE AR _ ON ( 1 ), ĠLOG ( 2 ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġn Canvas Px : ĠDouble , ĊĠĠĠĠĠĠĠ Ġlower Bound : ĠDouble , ĊĠĠĠĠĠĠĠ Ġupper Bound : ĠDouble , ĊĠĠĠĠĠĠĠ Ġmap Type : ĠType ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . n Canvas Px Ġ= Ġn Canvas Px ĊĠĠĠĠĠĠĠ Ġthis . lower Bound Ġ= Ġlower Bound ĊĠĠĠĠĠĠĠ Ġlower View Bound Ġ= Ġthis . lower Bound ĊĠĠĠĠĠĠĠ Ġthis . upper Bound Ġ= Ġupper Bound ĊĠĠĠĠĠĠĠ Ġupper View Bound Ġ= Ġthis . upper Bound ĊĠĠĠĠĠĠĠ Ġthis . map Type Ġ= Ġmap Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( axis : ĠScreen Physical Mapping ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap Type Ġ= Ġaxis . map Type ĊĠĠĠĠĠĠĠ Ġn Canvas Px Ġ= Ġaxis . n Canvas Px ĊĠĠĠĠĠĠĠ Ġlower Bound Ġ= Ġaxis . lower Bound ĊĠĠĠĠĠĠĠ Ġupper Bound Ġ= Ġaxis . upper Bound ĊĠĠĠĠĠĠĠ Ġlower View Bound Ġ= Ġaxis . lower View Bound ĊĠĠĠĠĠĠĠ Ġupper View Bound Ġ= Ġaxis . upper View Bound ĊĠĠĠĠĠĠĠ Ġzoom Ġ= Ġaxis . zoom ĊĠĠĠĠĠĠĠ Ġshift Ġ= Ġaxis . shift ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Bounds ( ĊĠĠĠĠĠĠĠ Ġlower Bound : ĠDouble , ĊĠĠĠĠĠĠĠ Ġupper Bound : ĠDouble ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . lower Bound Ġ= Ġlower Bound ĊĠĠĠĠĠĠĠ Ġthis . upper Bound Ġ= Ġupper Bound ĊĠĠĠĠĠĠĠ Ġ// ĠReset Ġview Ġrange , Ġpreserve Ġzoom Ġand Ġshift ĊĠĠĠĠĠĠĠ Ġset Zoom Shift ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzoom , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshift ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Analyzer Util . is Almost Integer ( lower View Bound )) Ġ{ Ġ// ĠDir ty Ġfix ... ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlower View Bound Ġ= ĠMath . round ( lower View Bound ). toDouble () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Analyzer Util . is Almost Integer ( upper View Bound )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupper View Bound Ġ= ĠMath . round ( upper View Bound ). toDouble () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset View Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlower View Bound , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupper View Bound ĊĠĠĠĠĠĠĠ Ġ) Ġ// ĠRef ine Ġzoom Ġshift ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Zoom Shift ( ĊĠĠĠĠĠĠĠ Ġzoom : ĠDouble , ĊĠĠĠĠĠĠĠ Ġshift : ĠDouble ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . zoom Ġ= Ġzoom ĊĠĠĠĠĠĠĠ Ġthis . shift Ġ= Ġshift ĊĠĠĠĠĠĠĠ Ġlower View Bound Ġ= Ġvalue From Unit Position ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzoom , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshift ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġupper View Bound Ġ= Ġvalue From Unit Position ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzoom , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshift ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġzoom Ġand Ġshift Ġfrom Ġphysical Ġvalue Ġbounds . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset View Bounds ( ĊĠĠĠĠĠĠĠ Ġlower View Bound : ĠDouble , ĊĠĠĠĠĠĠĠ Ġupper View Bound : ĠDouble ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( lower View Bound Ġ== Ġupper View Bound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ Ġ// ĠOr Ġthrow Ġan Ġexception ? ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlower Position Ġ= Ġunit Position From Value ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlower View Bound , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlower Bound , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupper Bound ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġupper Position Ġ= Ġunit Position From Value ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupper View Bound , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlower Bound , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupper Bound ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġzoom Ġ= Ġ 1 Ġ/ Ġ( upper Position Ġ- Ġlower Position ) ĊĠĠĠĠĠĠĠ Ġshift Ġ= Ġlower Position ĊĠĠĠĠĠĠĠ Ġthis . lower View Bound Ġ= Ġlower View Bound ĊĠĠĠĠĠĠĠ Ġthis . upper View Bound Ġ= Ġupper View Bound ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġunit Position From Value ( ĊĠĠĠĠĠĠĠ Ġvalue : ĠDouble , ĊĠĠĠĠĠĠĠ Ġlower Bound : ĠDouble , ĊĠĠĠĠĠĠĠ Ġupper Bound : ĠDouble ĊĠĠĠ Ġ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( lower Bound Ġ== Ġupper Bound ) Ġreturn Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( map Type Ġ== ĠType . LINEAR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( value Ġ- Ġlower Bound ) Ġ/ Ġ( upper Bound Ġ- Ġlower Bound ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMath . log ( value Ġ/ Ġlower Bound ) Ġ/ ĠMath . log ( upper Bound Ġ/ Ġlower Bound ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalue From Unit Position ( ĊĠĠĠĠĠĠĠ Ġunit : ĠDouble , ĊĠĠĠĠĠĠĠ Ġzoom : ĠDouble , ĊĠĠĠĠĠĠĠ Ġshift : ĠDouble ĊĠĠĠ Ġ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( zoom Ġ== Ġ 0 . 0 ) Ġreturn Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( map Type Ġ== ĠType . LINEAR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( unit Ġ/ Ġzoom Ġ+ Ġshift ) Ġ* Ġ( upper Bound Ġ- Ġlower Bound ) Ġ+ Ġlower Bound ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMath . exp (( unit Ġ/ Ġzoom Ġ+ Ġshift ) Ġ* ĠMath . log ( upper Bound Ġ/ Ġlower Bound )) Ġ* Ġlower Bound ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpx From Value ( value : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġunit Position From Value ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlower View Bound , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupper View Bound ĊĠĠĠĠĠĠĠ Ġ) Ġ* Ġn Canvas Px ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvalue From Px ( px : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( n Canvas Px Ġ== Ġ 0 . 0 ) Ġlower View Bound Ġelse Ġvalue From Unit Position ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpx Ġ/ Ġn Canvas Px , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzoom , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshift ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpx No Zoom From Value ( value : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġunit Position From Value ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlower Bound , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupper Bound ĊĠĠĠĠĠĠĠ Ġ) Ġ* Ġn Canvas Px ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbounds Range : ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġupper Bound Ġ- Ġlower Bound ĊĊĠĠĠ Ġfun Ġreverse Bounds () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Lower View Bound Ġ= Ġlower View Bound ĊĠĠĠĠĠĠĠ Ġval Ġold Upper View Bound Ġ= Ġupper View Bound ĊĠĠĠĠĠĠĠ Ġset Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupper Bound , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlower Bound ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġset View Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Upper View Bound , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Lower View Bound ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Mapping Type ( ĊĠĠĠĠĠĠĠ Ġmap Type : ĠType , ĊĠĠĠĠĠĠĠ Ġfreq Lower Bound For Log : ĠDouble ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġinternal Ġvariables Ġif Ġpossible ĊĠĠĠĠĠĠĠ Ġvar Ġlower View Bound Ġ= Ġlower View Bound ĊĠĠĠĠĠĠĠ Ġvar Ġupper View Bound Ġ= Ġupper View Bound ĊĠĠĠĠĠĠĠ Ġif Ġ( map Type Ġ== ĠType . LOG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lower Bound Ġ== Ġ 0 . 0 ) Ġlower Bound Ġ= Ġfreq Lower Bound For Log ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( upper Bound Ġ== Ġ 0 . 0 ) Ġupper Bound Ġ= Ġfreq Lower Bound For Log ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lower Bound Ġ== Ġfreq Lower Bound For Log ) Ġlower Bound Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( upper Bound Ġ== Ġfreq Lower Bound For Log ) Ġupper Bound Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġneed Update Zoom Shift Ġ= Ġthis . map Type Ġ!= Ġmap Type ĊĠĠĠĠĠĠĠ Ġthis . map Type Ġ= Ġmap Type ĊĠĠĠĠĠĠĠ Ġif Ġ(! need Update Zoom Shift Ġ|| Ġn Canvas Px Ġ== Ġ 0 . 0 Ġ|| Ġlower Bound Ġ== Ġupper Bound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġzoom Ġand Ġshift ĊĠĠĠĠĠĠĠ Ġ// Ġfreq Lower Bound For Log Ġis Ġfor Ġhow Ġto Ġmap Ġzero ĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġsupport Ġnon - negative Ġbounds ĊĠĠĠĠĠĠĠ Ġif Ġ( map Type Ġ== ĠType . LOG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lower View Bound Ġ< Ġ 0 Ġ|| Ġupper View Bound Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lower View Bound Ġ< Ġfreq Lower Bound For Log ) Ġlower View Bound Ġ= Ġfreq Lower Bound For Log ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( upper View Bound Ġ< Ġfreq Lower Bound For Log ) Ġupper View Bound Ġ= Ġfreq Lower Bound For Log ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lower View Bound Ġ<= Ġfreq Lower Bound For Log ) Ġlower View Bound Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( upper View Bound Ġ<= Ġfreq Lower Bound For Log ) Ġupper View Bound Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset View Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlower View Bound , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupper View Bound ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ