/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠJetBrains Ġs . r . o . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġjet brains . datal ore . plot . builder . layout Ċ Ċ import Ġjet brains . datal ore . base . geometry . Double Rectangle Ċ import Ġjet brains . datal ore . base . geometry . Double Vector Ċ import Ġjet brains . datal ore . plot . builder . guide . Orientation Ċ Ċ internal Ġobject ĠXY Plot Layout Util Ġ{ ĊĠĠĠ Ġconst Ġval ĠGE OM _ M ARGIN Ġ= Ġ 0 . 0 ĠĠĠĠĠĠĠĠĠ Ġ// Ġmin Ġspace Ġaround Ġgeom Ġarea ĊĠĠĠ Ġprivate Ġconst Ġval ĠCLI P _ EXT END Ġ= Ġ 5 . 0 ĊĠĠĠ Ġval ĠGE OM _ MIN _ SIZE Ġ= ĠDouble Vector ( 5 0 . 0 , Ġ 5 0 . 0 ) ĊĊĠĠĠ Ġfun Ġgeom Bounds ( xAxis Thickness : ĠDouble , Ġy Axis Thickness : ĠDouble , Ġplot Size : ĠDouble Vector ): ĠDouble Rectangle Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠmarginLeft Top Ġ= ĠDouble Vector ( yAxis Thickness , ĠGE OM _ M ARGIN ) ĊĠĠĠĠĠĠĠ Ġval ĠmarginRight Bottom Ġ= ĠDouble Vector ( GE OM _ M ARGIN , Ġx Axis Thickness ) ĊĠĠĠĠĠĠĠ Ġvar Ġgeom Size Ġ= Ġplot Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subtract ( margin Left Top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subtract ( margin Right Bottom ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( geom Size . x Ġ< ĠGE OM _ MIN _ SIZE . x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeom Size Ġ= ĠDouble Vector ( GE OM _ MIN _ SIZE . x , Ġgeom Size . y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( geom Size . y Ġ< ĠGE OM _ MIN _ SIZE . y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeom Size Ġ= ĠDouble Vector ( geom Size . x , ĠGE OM _ MIN _ SIZE . y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠDouble Rectangle ( margin Left Top , Ġgeom Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclip Bounds ( geom Bounds : ĠDouble Rectangle ): ĠDouble Rectangle Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDouble Rectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeom Bounds . origin . subtract ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCLI P _ EXT END , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCLI P _ EXT END ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeom Bounds . dimension . x Ġ+ Ġ 2 Ġ* ĠCLI P _ EXT END , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeom Bounds . dimension . y Ġ+ Ġ 2 Ġ* ĠCLI P _ EXT END ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmax Tick Labels Bounds ( ĊĠĠĠĠĠĠĠ Ġaxis Orientation : ĠOrientation , ĊĠĠĠĠĠĠĠ Ġstretch : ĠDouble , ĊĠĠĠĠĠĠĠ Ġgeom Bounds : ĠDouble Rectangle , ĊĠĠĠĠĠĠĠ Ġplot Size : ĠDouble Vector ĊĠĠĠ Ġ): ĠDouble Rectangle Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgeom P add ung Ġ= Ġ 1 0 . 0 ĠĠĠĠĠĠĠĠĠ Ġ// Ġmin Ġspace Ġaround Ġgeom Ġarea Ġ( labels Ġshould Ġnot Ġtouch Ġgeom Ġarea ). ĊĊĠĠĠĠĠĠĠ Ġval Ġmax Geom Bounds Ġ= ĠDouble Rectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeom P add ung , Ġgeom P add ung , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplot Size . x Ġ- Ġ 2 Ġ* Ġgeom P add ung , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplot Size . y Ġ- Ġ 2 Ġ* Ġgeom P add ung ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( axis Orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOrientation . TOP , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOrientation . BOTTOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Space Ġ= Ġgeom Bounds . left Ġ- Ġmax Geom Bounds . left Ġ+ Ġstretch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Space Ġ= Ġmax Geom Bounds . right Ġ- Ġgeom Bounds . right Ġ+ Ġstretch ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġ 1 E 4 2 ĠĠ Ġ// Ġjust Ġvery Ġlarge Ġnumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġwhen Ġ( axis Orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOrientation . TOP Ġ-> Ġ- height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġ- left Space ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġleft Space Ġ+ Ġright Space Ġ+ Ġgeom Bounds . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDouble Rectangle ( left , Ġtop , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Orientation Ġnot Ġsupported : Ġ$ axis Orientation ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ